From 7ac1b5bb9c1f4871d3099d13e855990a7faf7c38 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Mar 2018 20:37:51 -0300 Subject: Initial commit: add git-crypt .gitattributes file --- .gitattributes | 4 ++++ 1 file changed, 4 insertions(+) create mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes new file mode 100644 index 0000000..8151fce --- /dev/null +++ b/.gitattributes @@ -0,0 +1,4 @@ +encrypted/**/* filter=git-crypt diff=git-crypt +mail/* filter=git-crypt diff=git-crypt +git/mrconfig.ini filter=git-crypt diff=git-crypt +lein/profiles.clj filter=git-crypt diff=git-crypt -- cgit v1.2.3 From 4e734232c611890f616194ed5cfade2549e4491b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Mar 2018 20:38:44 -0300 Subject: Initial commit: now public (again) --- .gitignore | 2 + README.org | 53 ++ TODOs.org | 52 ++ Xmodmap.conf | 1 + attachments/dotfiles-avatar.png | Bin 0 -> 22675 bytes bash/Positive.ogg | Bin 0 -> 99826 bytes bash/agents.sh | 10 + bash/aliases.sh | 24 + bash/bash_profile.sh | 1 + bash/bashrc.sh | 28 + bash/colors.sh | 228 +++++++ bash/config.sh | 32 + bash/env.sh | 58 ++ bash/facepalm/Positive.mp3 | Bin 0 -> 59008 bytes bash/facepalm/rotten-apple.sh | 19 + bash/fake-symlinks.sh | 9 + bash/init.sh | 7 + bash/npm.sh | 13 + bash/platform.sh | 9 + bash/symlinks.sh | 34 + bash/tmuxinator-templates.sh | 9 + bash/util.sh | 23 + bash/x.sh | 6 + bash/youtube.sh | 31 + encrypted/Clojure/credentials.clj.gpg | Bin 0 -> 1427 bytes encrypted/IMAP/EuAndreh.txt | Bin 0 -> 51 bytes encrypted/IMAP/Gmail.txt | Bin 0 -> 38 bytes encrypted/IMAP/Pires.txt | Bin 0 -> 32 bytes encrypted/IMAP/nu.txt | Bin 0 -> 42 bytes encrypted/SMTP/authinfo.txt | Bin 0 -> 114 bytes encrypted/SSH/id_rsa.pub.txt | Bin 0 -> 762 bytes encrypted/SSH/id_rsa.txt | Bin 0 -> 3348 bytes encrypted/SSH/known_hosts.txt | Bin 0 -> 2742 bytes encrypted/SSH/known_hosts_sources.txt | Bin 0 -> 246 bytes encrypted/borg/exported-key.txt | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkp | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkp.2 | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkp.3 | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkp.4 | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkp.5 | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkp.6 | Bin 0 -> 575 bytes encrypted/borg/keys/borgbkpfoi | Bin 0 -> 575 bytes encrypted/borg/keys/home_andreh_borgbackup | Bin 0 -> 575 bytes encrypted/borg/keys/home_andreh_borgbkp | Bin 0 -> 575 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 42 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 45 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 42 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 42 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 45 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 42 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes encrypted/env.sh | Bin 0 -> 2670 bytes encrypted/nu/nurc.sh | Bin 0 -> 3047 bytes encrypted/nu/scripts/piv-recover-input.csv | Bin 0 -> 461 bytes encrypted/nu/scripts/piv-recover.sh | Bin 0 -> 572 bytes encrypted/nu/tmux/projects/delivery-templates.yml | Bin 0 -> 199 bytes encrypted/nu/tmux/projects/facade.yml | Bin 0 -> 460 bytes encrypted/nu/tmux/projects/ghostflame.yml | Bin 0 -> 258 bytes encrypted/nu/tmux/projects/shuffle.yml | Bin 0 -> 249 bytes encrypted/nu/tmux/projects/tristram.yml | Bin 0 -> 251 bytes encrypted/nu/tmux/templates/nu-service.yml | Bin 0 -> 363 bytes encrypted/nu/vpn/auth.txt | Bin 0 -> 62 bytes encrypted/nu/vpn/config.zip | Bin 0 -> 6295 bytes encrypted/nu/vpn/patched.txt | Bin 0 -> 11547 bytes encrypted/password-hash.txt | Bin 0 -> 129 bytes encrypted/update-feed.sh | Bin 0 -> 2411 bytes git/gitattributes | 3 + git/gitconfig.ini | 47 ++ git/gitignore | 2 + git/mrconfig.ini | Bin 0 -> 7428 bytes gitlab-ci.yml | 30 + inputrc.conf | 2 + lein/profiles.clj | Bin 0 -> 530 bytes mail/mbsyncrc.ini | Bin 0 -> 1757 bytes mail/offlineimap.py | Bin 0 -> 348 bytes mail/offlineimaprc.ini | Bin 0 -> 1314 bytes nixos/configuration.nix | 297 ++++++++ nixos/npmrc.sh | 1 + nixos/os-installation.sh | 83 +++ sbclrc.lisp | 0 scripts/backup.sh | 57 ++ scripts/once-only-nextcloud.sh | 9 + scripts/single-monitor.sh | 2 + scripts/sleepsort | 20 + scripts/three-monitors.sh | 2 + spacemacs.el | 750 +++++++++++++++++++++ tmux/projects/annex.yml | 11 + tmux/projects/monero.yml | 10 + tmux/projects/pires.yml | 48 ++ tmux/projects/songbooks.yml | 24 + tmux/projects/sosps.yml | 10 + tmux/tmux.conf | 64 ++ xmonad/xmobar.hs | 47 ++ xmonad/xmonad.hs | 106 +++ xmonad/xsession.sh | 1 + 112 files changed, 2275 insertions(+) create mode 100644 .gitignore create mode 100644 README.org create mode 100644 TODOs.org create mode 100644 Xmodmap.conf create mode 100644 attachments/dotfiles-avatar.png create mode 100644 bash/Positive.ogg create mode 100644 bash/agents.sh create mode 100644 bash/aliases.sh create mode 100644 bash/bash_profile.sh create mode 100644 bash/bashrc.sh create mode 100644 bash/colors.sh create mode 100644 bash/config.sh create mode 100644 bash/env.sh create mode 100644 bash/facepalm/Positive.mp3 create mode 100644 bash/facepalm/rotten-apple.sh create mode 100644 bash/fake-symlinks.sh create mode 100644 bash/init.sh create mode 100644 bash/npm.sh create mode 100644 bash/platform.sh create mode 100644 bash/symlinks.sh create mode 100755 bash/tmuxinator-templates.sh create mode 100644 bash/util.sh create mode 100644 bash/x.sh create mode 100644 bash/youtube.sh create mode 100644 encrypted/Clojure/credentials.clj.gpg create mode 100644 encrypted/IMAP/EuAndreh.txt create mode 100644 encrypted/IMAP/Gmail.txt create mode 100644 encrypted/IMAP/Pires.txt create mode 100644 encrypted/IMAP/nu.txt create mode 100644 encrypted/SMTP/authinfo.txt create mode 100644 encrypted/SSH/id_rsa.pub.txt create mode 100644 encrypted/SSH/id_rsa.txt create mode 100644 encrypted/SSH/known_hosts.txt create mode 100644 encrypted/SSH/known_hosts_sources.txt create mode 100644 encrypted/borg/exported-key.txt create mode 100644 encrypted/borg/keys/borgbkp create mode 100644 encrypted/borg/keys/borgbkp.2 create mode 100644 encrypted/borg/keys/borgbkp.3 create mode 100644 encrypted/borg/keys/borgbkp.4 create mode 100644 encrypted/borg/keys/borgbkp.5 create mode 100644 encrypted/borg/keys/borgbkp.6 create mode 100644 encrypted/borg/keys/borgbkpfoi create mode 100644 encrypted/borg/keys/home_andreh_borgbackup create mode 100644 encrypted/borg/keys/home_andreh_borgbkp create mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type create mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location create mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp create mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce create mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type create mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location create mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp create mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce create mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type create mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location create mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp create mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce create mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type create mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location create mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp create mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce create mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type create mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location create mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp create mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce create mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type create mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location create mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp create mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce create mode 100644 encrypted/env.sh create mode 100644 encrypted/nu/nurc.sh create mode 100644 encrypted/nu/scripts/piv-recover-input.csv create mode 100755 encrypted/nu/scripts/piv-recover.sh create mode 100644 encrypted/nu/tmux/projects/delivery-templates.yml create mode 100644 encrypted/nu/tmux/projects/facade.yml create mode 100644 encrypted/nu/tmux/projects/ghostflame.yml create mode 100644 encrypted/nu/tmux/projects/shuffle.yml create mode 100644 encrypted/nu/tmux/projects/tristram.yml create mode 100644 encrypted/nu/tmux/templates/nu-service.yml create mode 100644 encrypted/nu/vpn/auth.txt create mode 100644 encrypted/nu/vpn/config.zip create mode 100644 encrypted/nu/vpn/patched.txt create mode 100644 encrypted/password-hash.txt create mode 100755 encrypted/update-feed.sh create mode 100644 git/gitattributes create mode 100644 git/gitconfig.ini create mode 100644 git/gitignore create mode 100644 git/mrconfig.ini create mode 100644 gitlab-ci.yml create mode 100644 inputrc.conf create mode 100644 lein/profiles.clj create mode 100644 mail/mbsyncrc.ini create mode 100644 mail/offlineimap.py create mode 100644 mail/offlineimaprc.ini create mode 100644 nixos/configuration.nix create mode 100644 nixos/npmrc.sh create mode 100644 nixos/os-installation.sh create mode 100644 sbclrc.lisp create mode 100755 scripts/backup.sh create mode 100755 scripts/once-only-nextcloud.sh create mode 100755 scripts/single-monitor.sh create mode 100755 scripts/sleepsort create mode 100755 scripts/three-monitors.sh create mode 100644 spacemacs.el create mode 100644 tmux/projects/annex.yml create mode 100644 tmux/projects/monero.yml create mode 100644 tmux/projects/pires.yml create mode 100644 tmux/projects/songbooks.yml create mode 100644 tmux/projects/sosps.yml create mode 100644 tmux/tmux.conf create mode 100644 xmonad/xmobar.hs create mode 100644 xmonad/xmonad.hs create mode 100644 xmonad/xsession.sh diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..01e9f4e --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +mail/offlineimap.pyc +tam_required diff --git a/README.org b/README.org new file mode 100644 index 0000000..081b492 --- /dev/null +++ b/README.org @@ -0,0 +1,53 @@ +* dotfiles +** Instructions - setting up a new installation (NixOS) +*** 1. Download NixOS image from [[https://nixos.org/][the website]]. +*** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= +*** 3. Put =private.gpg= and =public.gpg= files in UTCLOUD (the actual HD drive) +#+BEGIN_SRC shell +gpg --export -a EuAndreh > public.gpg +gpg --export-secret-keys -a EuAndreh > private +gpg --cipher-algo AES256 -c private +rm private +mv public.gpg ~/UTCLOUD/public.gpg +mv private.gpg ~/UTCLOUD/private.gpg +#+END_SRC +*** 4. Import GPG keys in new OS +#+BEGIN_SRC shell +gpg -o private -d private.gpg +gpg --import public.gpg +gpg --import private +gpg --edit-key EuAndreh + +# Inside GPG prompt +trust +5 +quit + +# end of GPG prompt +rm private +rm private.gpg +rm public.gpg +#+END_SRC +*** 5. Clone annex repo from HD and setup remotes +#+BEGIN_SRC shell +git clone gcrypt::/media/andreh/UTCLOUD/annex.git +cd annex +git annex describe here "repo description" +git annex enableremote hd +git annex enableremote gitlab +git annex enableremote rsyncnet +git annex enableremote s3 +#+END_SRC +** Paperkey +Paperkey generate using: +#+BEGIN_SRC shell +cat < paperket.txt + +# QR codes of paper key +gpg --export-secret-keys eu@euandre.org | paperkey | qrencode -o out.png -S -v 16 +montage *.png -tile 1x2 -geometry +0+0 concatenate-out.png +rm out* +EOF +#+END_SRC diff --git a/TODOs.org b/TODOs.org new file mode 100644 index 0000000..15f6f9a --- /dev/null +++ b/TODOs.org @@ -0,0 +1,52 @@ +* Tasks +* COMMENT DONE +** CANCELLED Put README steps in script? +** CANCELLED Add CI tests? +Instead of adding limited tests to CI (too many files would be encrypted), I'd rather run tests on every load. +Like in https://gitlab.com/EuAndreh/dotfiles/blob/6e83efca9550cce39375710863ef5acb495f6236/encrypted/nu/nurc.sh#L49-54. +** DONE Fix git sync +CLOSED: [2018-02-25 Sun 09:24] +Kind of fixed: made an alias for =git=. +** CANCELLED Implement proper =yt= +Not really relevant, =update-feed.sh= works. +** DONE Finish repo backup flow +CLOSED: [2018-02-25 Sun 09:23] +** DONE Add Haskell Stack to =$PATH=? +CLOSED: [2017-10-16 Mon 08:27] +#+BEGIN_SRC +Using generic bindist... + + % Total % Received % Xferd Average Speed Time Time Time Current + Dload Upload Total Spent Left Speed + 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 +100 619 0 619 0 0 334 0 --:--:-- 0:00:01 --:--:-- 1406 +100 12.8M 100 12.8M 0 0 1428k 0 0:00:09 0:00:09 --:--:-- 2599k +Installing Stack to: /usr/local/bin/stack... + +------------------------------------------------------------------------------- + +Stack has been installed to: /usr/local/bin/stack + +NOTE: You may need to run 'xcode-select --install' to set + up the Xcode command-line tools, which Stack uses. + +WARNING: '/Users/andreh/.local/bin' is not on your PATH. + For best results, please add it to the beginning of PATH in your profile. +#+END_SRC +** DONE Put ~/.ssh/know_hosts in annex +CLOSED: [2017-10-16 Mon 08:22] +** DONE Cleanup =bash/util.sh= +CLOSED: [2017-10-16 Mon 08:34] +** DONE Copy things properly in Tmux +CLOSED: [2017-10-16 Mon 08:27] +** DONE Improve podcast flow +CLOSED: [2017-10-16 Mon 08:59] +#+BEGIN_SRC shell +,git-annex-podcast-awesomeness() { + cd ~/annex/Banshee/podcasts + yellow "Checking for updates in registered podcasts..." + xargs git-annex importfeed < feeds.conf + end + cd - > /dev/null +} +#+END_SRC diff --git a/Xmodmap.conf b/Xmodmap.conf new file mode 100644 index 0000000..2807e71 --- /dev/null +++ b/Xmodmap.conf @@ -0,0 +1 @@ +keycode 118 = bar Greek_lamda diff --git a/attachments/dotfiles-avatar.png b/attachments/dotfiles-avatar.png new file mode 100644 index 0000000..5583849 Binary files /dev/null and b/attachments/dotfiles-avatar.png differ diff --git a/bash/Positive.ogg b/bash/Positive.ogg new file mode 100644 index 0000000..22cb563 Binary files /dev/null and b/bash/Positive.ogg differ diff --git a/bash/agents.sh b/bash/agents.sh new file mode 100644 index 0000000..8b33b6a --- /dev/null +++ b/bash/agents.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +eval "$(thefuck --alias f)" + +export GPG_TTY=$(tty) + +if [ -n "$DESKTOP_SESSION" ];then + eval $(gnome-keyring-daemon --start) + export SSH_AUTH_SOCK +fi diff --git a/bash/aliases.sh b/bash/aliases.sh new file mode 100644 index 0000000..dfa5c21 --- /dev/null +++ b/bash/aliases.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash + +unalias -a + +alias open="xdg-open" +alias ros="rlwrap ros -l ~/.sbclrc" +alias l="ls -lahF" +alias ll="ls -lhF" +alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" +alias copy="xclip -sel clip" +alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" +alias git="AWS_ACCESS_KEY_ID=$ANNEX_AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$ANNEX_AWS_SECRET_ACCESS_KEY git" + +alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' +alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" + +alias mux="tmuxinator" + +# git +alias ,s="git status" +alias ,d="git diff" +alias ,ds="git diff --staged" + +alias ,r="source ~/.bashrc" diff --git a/bash/bash_profile.sh b/bash/bash_profile.sh new file mode 100644 index 0000000..12ce7f9 --- /dev/null +++ b/bash/bash_profile.sh @@ -0,0 +1 @@ +source ~/annex/dev/code/dotfiles/bash/bashrc.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh new file mode 100644 index 0000000..4a7f189 --- /dev/null +++ b/bash/bashrc.sh @@ -0,0 +1,28 @@ +export DOTFILES=~/annex/dev/code/dotfiles + +source $DOTFILES/bash/platform.sh +source $DOTFILES/bash/config.sh +source $DOTFILES/bash/env.sh +source $DOTFILES/bash/colors.sh +source $DOTFILES/bash/aliases.sh +source $DOTFILES/bash/util.sh +source $DOTFILES/bash/agents.sh +source $DOTFILES/bash/symlinks.sh +source $DOTFILES/bash/youtube.sh +source $DOTFILES/bash/tmuxinator-templates.sh +source $DOTFILES/bash/fake-symlinks.sh +source $DOTFILES/bash/init.sh +source $DOTFILES/bash/npm.sh +source $DOTFILES/bash/x.sh +source $DOTFILES/bash/facepalm/rotten-apple.sh +source $DOTFILES/encrypted/env.sh + +set -h +source ~/dev/nu/nucli/nu.bashcompletion + +# Here's the place to do custom nix-shell config +if [[ -z $IN_NIX_SHELL ]]; then + printf "" +else + printf "" +fi diff --git a/bash/colors.sh b/bash/colors.sh new file mode 100644 index 0000000..7548803 --- /dev/null +++ b/bash/colors.sh @@ -0,0 +1,228 @@ +#!/usr/bin/env bash + +# Customize BASH PS1 prompt to show current GIT repository and branch. +# by Mike Stewart - http://MediaDoneRight.com + +# SETUP CONSTANTS +# Bunch-o-predefined colors. Makes reading code easier than escape sequences. +# I don't remember where I found this. o_O + +# Reset +Color_Off="\[\033[0m\]" # Text Reset + +# Regular Colors +Black="\[\033[0;30m\]" # Black +Red="\[\033[0;31m\]" # Red +Green="\[\033[0;32m\]" # Green +Yellow="\[\033[0;33m\]" # Yellow +Blue="\[\033[0;34m\]" # Blue +Purple="\[\033[0;35m\]" # Purple +Cyan="\[\033[0;36m\]" # Cyan +White="\[\033[0;37m\]" # White + +# Bold +BBlack="\[\033[1;30m\]" # Black +BRed="\[\033[1;31m\]" # Red +BGreen="\[\033[1;32m\]" # Green +BYellow="\[\033[1;33m\]" # Yellow +BBlue="\[\033[1;34m\]" # Blue +BPurple="\[\033[1;35m\]" # Purple +BCyan="\[\033[1;36m\]" # Cyan +BWhite="\[\033[1;37m\]" # White + +# Underline +UBlack="\[\033[4;30m\]" # Black +URed="\[\033[4;31m\]" # Red +UGreen="\[\033[4;32m\]" # Green +UYellow="\[\033[4;33m\]" # Yellow +UBlue="\[\033[4;34m\]" # Blue +UPurple="\[\033[4;35m\]" # Purple +UCyan="\[\033[4;36m\]" # Cyan +UWhite="\[\033[4;37m\]" # White + +# Background +On_Black="\[\033[40m\]" # Black +On_Red="\[\033[41m\]" # Red +On_Green="\[\033[42m\]" # Green +On_Yellow="\[\033[43m\]" # Yellow +On_Blue="\[\033[44m\]" # Blue +On_Purple="\[\033[45m\]" # Purple +On_Cyan="\[\033[46m\]" # Cyan +On_White="\[\033[47m\]" # White + +# High Intensty +IBlack="\[\033[0;90m\]" # Black +IRed="\[\033[0;91m\]" # Red +IGreen="\[\033[0;92m\]" # Green +IYellow="\[\033[0;93m\]" # Yellow +IBlue="\[\033[0;94m\]" # Blue +IPurple="\[\033[0;95m\]" # Purple +ICyan="\[\033[0;96m\]" # Cyan +IWhite="\[\033[0;97m\]" # White + +# Bold High Intensty +BIBlack="\[\033[1;90m\]" # Black +BIRed="\[\033[1;91m\]" # Red +BIGreen="\[\033[1;92m\]" # Green +BIYellow="\[\033[1;93m\]" # Yellow +BIBlue="\[\033[1;94m\]" # Blue +BIPurple="\[\033[1;95m\]" # Purple +BICyan="\[\033[1;96m\]" # Cyan +BIWhite="\[\033[1;97m\]" # White + +# High Intensty backgrounds +On_IBlack="\[\033[0;100m\]" # Black +On_IRed="\[\033[0;101m\]" # Red +On_IGreen="\[\033[0;102m\]" # Green +On_IYellow="\[\033[0;103m\]" # Yellow +On_IBlue="\[\033[0;104m\]" # Blue +On_IPurple="\[\033[10;95m\]" # Purple +On_ICyan="\[\033[0;106m\]" # Cyan +On_IWhite="\[\033[0;107m\]" # White + +# Various variables you might want for your PS1 prompt instead +Time12h="\T" +Time12a="\@" +PathShort="\w" +PathFull="\W" +NewLine="\n" +Jobs="\j" + + +# This PS1 snippet was adopted from code for MAC/BSD I saw from: http://allancraig.net/index.php?option=com_content&view=article&id=108:ps1-export-command-for-git&catid=45:general&Itemid=96 +# I tweaked it to work on UBUNTU 11.04 & 11.10 plus made it mo' better + +export PS1='$(if [ $? != 0 ]; then \ + echo "'$BIRed' (!!) '$Color_Off'"; \ +fi)'$IBlack$Time12h$Color_Off' '$BYellow$PathShort/$Color_Off'\ +$(git branch &>/dev/null;\ +if [ $? -eq 0 ]; then \ + echo "$(echo `git status` | grep "Changes" > /dev/null 2>&1; \ + if [ "$?" != "0" ]; then \ + # @4 - Clean repository - nothing to commit + echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ + else \ + # @5 - Changes to working tree + echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ + fi)" - $(echo "'$IBlack'"`git sha | head -c 7`"'$Color_Off'"); \ +fi)$(if [[ $IN_NIX_SHELL == 1 ]]; then\ + echo "\n'$IBlack'~>'$Color_Off' '$Purple'nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ +fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' + + +export end="\033[0m" +export black="\033[0;30m" +export blackb="\033[1;30m" +export white="\033[0;37m" +export whiteb="\033[1;37m" +export red="\033[0;31m" +export redb="\033[1;31m" +export green="\033[0;32m" +export greenb="\033[1;32m" +export yellow="\033[0;33m" +export yellowb="\033[1;33m" +export blue="\033[0;34m" +export blueb="\033[1;34m" +export purple="\033[0;35m" +export purpleb="\033[1;35m" +export lightblue="\033[0;36m" +export lightblueb="\033[1;36m" + +function black { + echo -e "${black}${1}${end}" +} +export -f black + +function blackb { + echo -e "${blackb}${1}${end}" +} +export -f blackb + +function white { + echo -e "${white}${1}${end}" +} +export -f white + +function whiteb { + echo -e "${whiteb}${1}${end}" +} +export -f whiteb + +function red { + echo -e "${red}${1}${end}" +} +export -f red + +function redb { + echo -e "${redb}${1}${end}" +} +export -f redb + +function green { + echo -e "${green}${1}${end}" +} +export -f green + +function greenb { + echo -e "${greenb}${1}${end}" +} +export -f greenb + +function yellow { + echo -e "${yellow}${1}${end}" +} +export -f yellow + +function yellowb { + echo -e "${yellowb}${1}${end}" +} +export -f yellowb + +function blue { + echo -e "${blue}${1}${end}" +} +export -f blue + +function blueb { + echo -e "${blueb}${1}${end}" +} +export -f blueb + +function purple { + echo -e "${purple}${1}${end}" +} +export -f purple + +function purpleb { + echo -e "${purpleb}${1}${end}" +} +export -f purpleb + +function lightblue { + echo -e "${lightblue}${1}${end}" +} +export -f lightblue + +function lightblueb { + echo -e "${lightblueb}${1}${end}" +} +export -f lightblueb + +function ,colors { + black "black" + blackb "blackb" + white "white" + whiteb "whiteb" + red "red" + redb "redb" + green "green" + greenb "greenb" + yellow "yellow" + yellowb "yellowb" + blue "blue" + blueb "blueb" + purple "purple" + purpleb "purpleb" + lightblue "lightblue" + lightblueb "lightblueb" +} diff --git a/bash/config.sh b/bash/config.sh new file mode 100644 index 0000000..26ef085 --- /dev/null +++ b/bash/config.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash + +# ~/.bashrc: executed by bash(1) for non-login shells. + +# derived from Ubuntu's default .bashrc + + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# don't put duplicate linesin the history. # See bash(1) for more options +HISTCONTROL=ignoredups + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000000 +HISTFILESIZE=2000000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +isLinux && { + shopt -s globstar +} diff --git a/bash/env.sh b/bash/env.sh new file mode 100644 index 0000000..ad930f7 --- /dev/null +++ b/bash/env.sh @@ -0,0 +1,58 @@ +#!/usr/bin/env bash + + +export PATH="$HOME/annex/bin/:$PATH" + +# +# Git Annex +# + +export RSYNC_NET_URL=16686@ch-s010.rsync.net +export R=$RSYNC_NET_URL + + +# +# Perl6 +# + +export PATH=~/.rakudobrew/bin:$PATH + + +# +# Haskel Stack +# + +export PATH=~/.local/bin:$PATH + + + +# +# Misc +# + +export EDITOR=vi +export PATH="$HOME/dev/code/dotfiles/scripts/:$PATH" +export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" +export INPUTRC=~/.inputrc + + + +# +# Global (not NixOS) NPM +# + +export PATH="$HOME/.npm-packages/bin/:$PATH" + + + +# +# NixOS +# + +export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt + +# +# Leiningen +# + +export LEIN_SUPPRESS_USER_LEVEL_REPO_WARNINGS=1 diff --git a/bash/facepalm/Positive.mp3 b/bash/facepalm/Positive.mp3 new file mode 100644 index 0000000..a560be1 Binary files /dev/null and b/bash/facepalm/Positive.mp3 differ diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh new file mode 100644 index 0000000..0cdf329 --- /dev/null +++ b/bash/facepalm/rotten-apple.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash + +isMac && { + unalias open + + alias limpar-derived-data="rm -rf ~/Library/Developer/Xcode/DerivedData/" + alias fim="afplay $DOTFILES/bash/facepalm/Positive.mp3" + + if [ -f $(brew --prefix)/etc/bash_completion ]; then + . $(brew --prefix)/etc/bash_completion + fi + + [ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion + + [ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh + + + alias ast="open -a \"Android Studio\"" +} diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh new file mode 100644 index 0000000..cd9dc6a --- /dev/null +++ b/bash/fake-symlinks.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +if [[ -n "$EMACS_GITHUB_TOKEN" ]]; then + cat $DOTFILES/git/gitconfig.ini | envsubst > ~/.gitconfig +fi + +cp $DOTFILES/gitlab-ci.yml $DOTFILES/../org.euandre.misc/.gitlab-ci.yml +cp $DOTFILES/gitlab-ci.yml $DOTFILES/../org.euandre.http/.gitlab-ci.yml +cp $DOTFILES/gitlab-ci.yml $DOTFILES/../org.euandre.om-auth/.gitlab-ci.yml diff --git a/bash/init.sh b/bash/init.sh new file mode 100644 index 0000000..2239015 --- /dev/null +++ b/bash/init.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +pushd ~/ > /dev/null + +mr checkout > /dev/null + +popd > /dev/null diff --git a/bash/npm.sh b/bash/npm.sh new file mode 100644 index 0000000..f0a5d30 --- /dev/null +++ b/bash/npm.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +npm_i() { + (which $1 &> /dev/null) || { + yellow "Installing $2" + npm i -g $2 + } +} + +npm_i eq edn-eq +npm_i react-native react-native-cli +npm_i detox detox-cli +npm_i xml2json xml2json-command diff --git a/bash/platform.sh b/bash/platform.sh new file mode 100644 index 0000000..4929341 --- /dev/null +++ b/bash/platform.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +isMac () { + [[ `uname` == 'Darwin' ]] +} + +isLinux () { + [[ `uname` == 'Linux' ]] +} diff --git a/bash/symlinks.sh b/bash/symlinks.sh new file mode 100644 index 0000000..ccdf4a6 --- /dev/null +++ b/bash/symlinks.sh @@ -0,0 +1,34 @@ +#!/usr/bin/env bash + +ln -fs $DOTFILES/encrypted/borg ~/.config/ + +ln -fs $DOTFILES/bash/bashrc.sh ~/.bashrc +ln -fs $DOTFILES/bash/bash_profile.sh ~/.bash_profile +ln -fs $DOTFILES/spacemacs.el ~/.spacemacs +ln -fs $DOTFILES/git/gitattributes ~/.gitattributes +ln -fs $DOTFILES/git/gitignore ~/.gitignore_global +ln -fs $DOTFILES/git/bash_git.sh ~/.bash_git +ln -fs $DOTFILES/sbclrc.lisp ~/.sbclrc +ln -fs $DOTFILES/inputrc.conf ~/.inputrc +ln -fs $DOTFILES/nixos/npmrc.sh ~/.npmrc + +ln -fs $DOTFILES/git/mrconfig.ini ~/.mrconfig + +ln -fs /run/media/andreh/UTCLOUD ~/UTCLOUD + +mkdir -p ~/.lein +ln -fs $DOTFILES/lein/profiles.clj ~/.lein/profiles.clj + +ln -fs $DOTFILES/Xmodmap.conf ~/.Xmodmap + +ln -fs $DOTFILES/tmux/tmux.conf ~/.tmux.conf + +## xmonad +mkdir -p ~/.xmonad +ln -fs $DOTFILES/xmonad/xsession.sh ~/.xsession +ln -fs $DOTFILES/xmonad/xmonad.hs ~/.xmonad/xmonad.hs +ln -fs $DOTFILES/xmonad/xmobar.hs ~/.xmobarrc + +## OfflineIMAP +# ln -fs $DOTFILES/mail/offlineimaprc.ini ~/.offlineimaprc +# ln -fs $DOTFILES/mail/mbsyncrc.ini ~/.mbsyncrc diff --git a/bash/tmuxinator-templates.sh b/bash/tmuxinator-templates.sh new file mode 100755 index 0000000..77cf461 --- /dev/null +++ b/bash/tmuxinator-templates.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +mkdir -p ~/.tmuxinator + +templates=(annex pires songbooks sosps) + +for template in ${templates[@]}; do + cp $DOTFILES/tmux/projects/$template.yml ~/.tmuxinator/$template.yml +done diff --git a/bash/util.sh b/bash/util.sh new file mode 100644 index 0000000..b0db4ad --- /dev/null +++ b/bash/util.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash + +extract () { + if [ -f $1 ] ; then + case $1 in + *.tar.bz2) tar xvjf $1 ;; + *.tar.gz) tar xvzf $1 ;; + *.bz2) bunzip2 $1 ;; + *.rar) unrar x $1 ;; + *.gz) gunzip $1 ;; + *.tar) tar xvf $1 ;; + *.tbz2) tar xvjf $1 ;; + *.tgz) tar xvzf $1 ;; + *.zip) unzip $1 ;; + *.Z) uncompress $1 ;; + *.7z) 7z x $1 ;; + *.xz) unxz $1 ;; + *) echo "don't know how to extract '$1'..." ;; + esac + else + echo "'$1' is not a valid file!" + fi +} diff --git a/bash/x.sh b/bash/x.sh new file mode 100644 index 0000000..5858d1f --- /dev/null +++ b/bash/x.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash + +isLinux && { + xmodmap ~/.Xmodmap + xset r rate 250 50 +} diff --git a/bash/youtube.sh b/bash/youtube.sh new file mode 100644 index 0000000..b64300d --- /dev/null +++ b/bash/youtube.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +export DEFAULT_PLAYLIST_END=15 + +download() { + youtube-dl "$1" \ + --download-archive ~/annex/txt/youtube-dl-seen.conf \ + --prefer-free-formats \ + --playlist-end $2 \ + --output "~/Downloads/yt-dl/%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" +} + +export -f download + +download_user() { + download "https://www.youtube.com/user/$1" ${2-$DEFAULT_PLAYLIST_END} +} + +export -f download_user + +download_channel() { + download "https://www.youtube.com/channel/$1" ${2-$DEFAULT_PLAYLIST_END} +} + +export -f download_channel + +download_playlist() { + download "https://www.youtube.com/playlist?list=$1" ${2-$DEFAULT_PLAYLIST_END} +} + +export -f download_playlist diff --git a/encrypted/Clojure/credentials.clj.gpg b/encrypted/Clojure/credentials.clj.gpg new file mode 100644 index 0000000..addba3c Binary files /dev/null and b/encrypted/Clojure/credentials.clj.gpg differ diff --git a/encrypted/IMAP/EuAndreh.txt b/encrypted/IMAP/EuAndreh.txt new file mode 100644 index 0000000..573b075 Binary files /dev/null and b/encrypted/IMAP/EuAndreh.txt differ diff --git a/encrypted/IMAP/Gmail.txt b/encrypted/IMAP/Gmail.txt new file mode 100644 index 0000000..6172698 Binary files /dev/null and b/encrypted/IMAP/Gmail.txt differ diff --git a/encrypted/IMAP/Pires.txt b/encrypted/IMAP/Pires.txt new file mode 100644 index 0000000..d2cc9d6 Binary files /dev/null and b/encrypted/IMAP/Pires.txt differ diff --git a/encrypted/IMAP/nu.txt b/encrypted/IMAP/nu.txt new file mode 100644 index 0000000..3de94f7 Binary files /dev/null and b/encrypted/IMAP/nu.txt differ diff --git a/encrypted/SMTP/authinfo.txt b/encrypted/SMTP/authinfo.txt new file mode 100644 index 0000000..6b5a37a Binary files /dev/null and b/encrypted/SMTP/authinfo.txt differ diff --git a/encrypted/SSH/id_rsa.pub.txt b/encrypted/SSH/id_rsa.pub.txt new file mode 100644 index 0000000..c1fcf97 Binary files /dev/null and b/encrypted/SSH/id_rsa.pub.txt differ diff --git a/encrypted/SSH/id_rsa.txt b/encrypted/SSH/id_rsa.txt new file mode 100644 index 0000000..acc287b Binary files /dev/null and b/encrypted/SSH/id_rsa.txt differ diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt new file mode 100644 index 0000000..9065805 Binary files /dev/null and b/encrypted/SSH/known_hosts.txt differ diff --git a/encrypted/SSH/known_hosts_sources.txt b/encrypted/SSH/known_hosts_sources.txt new file mode 100644 index 0000000..fbf4b8e Binary files /dev/null and b/encrypted/SSH/known_hosts_sources.txt differ diff --git a/encrypted/borg/exported-key.txt b/encrypted/borg/exported-key.txt new file mode 100644 index 0000000..61d1597 Binary files /dev/null and b/encrypted/borg/exported-key.txt differ diff --git a/encrypted/borg/keys/borgbkp b/encrypted/borg/keys/borgbkp new file mode 100644 index 0000000..61d1597 Binary files /dev/null and b/encrypted/borg/keys/borgbkp differ diff --git a/encrypted/borg/keys/borgbkp.2 b/encrypted/borg/keys/borgbkp.2 new file mode 100644 index 0000000..9c914c0 Binary files /dev/null and b/encrypted/borg/keys/borgbkp.2 differ diff --git a/encrypted/borg/keys/borgbkp.3 b/encrypted/borg/keys/borgbkp.3 new file mode 100644 index 0000000..16c7148 Binary files /dev/null and b/encrypted/borg/keys/borgbkp.3 differ diff --git a/encrypted/borg/keys/borgbkp.4 b/encrypted/borg/keys/borgbkp.4 new file mode 100644 index 0000000..3a916f3 Binary files /dev/null and b/encrypted/borg/keys/borgbkp.4 differ diff --git a/encrypted/borg/keys/borgbkp.5 b/encrypted/borg/keys/borgbkp.5 new file mode 100644 index 0000000..c15bf1f Binary files /dev/null and b/encrypted/borg/keys/borgbkp.5 differ diff --git a/encrypted/borg/keys/borgbkp.6 b/encrypted/borg/keys/borgbkp.6 new file mode 100644 index 0000000..92b3c2a Binary files /dev/null and b/encrypted/borg/keys/borgbkp.6 differ diff --git a/encrypted/borg/keys/borgbkpfoi b/encrypted/borg/keys/borgbkpfoi new file mode 100644 index 0000000..38795b0 Binary files /dev/null and b/encrypted/borg/keys/borgbkpfoi differ diff --git a/encrypted/borg/keys/home_andreh_borgbackup b/encrypted/borg/keys/home_andreh_borgbackup new file mode 100644 index 0000000..cd901f1 Binary files /dev/null and b/encrypted/borg/keys/home_andreh_borgbackup differ diff --git a/encrypted/borg/keys/home_andreh_borgbkp b/encrypted/borg/keys/home_andreh_borgbkp new file mode 100644 index 0000000..b13eef9 Binary files /dev/null and b/encrypted/borg/keys/home_andreh_borgbkp differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type new file mode 100644 index 0000000..6cdb8a2 Binary files /dev/null and b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location new file mode 100644 index 0000000..eaafc18 Binary files /dev/null and b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp new file mode 100644 index 0000000..581c6b1 Binary files /dev/null and b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce new file mode 100644 index 0000000..255e2aa Binary files /dev/null and b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type new file mode 100644 index 0000000..6cdb8a2 Binary files /dev/null and b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location new file mode 100644 index 0000000..d77e0a2 Binary files /dev/null and b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp new file mode 100644 index 0000000..2f7c4ac Binary files /dev/null and b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce new file mode 100644 index 0000000..a538999 Binary files /dev/null and b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type new file mode 100644 index 0000000..6cdb8a2 Binary files /dev/null and b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location new file mode 100644 index 0000000..eaafc18 Binary files /dev/null and b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp new file mode 100644 index 0000000..b2ab182 Binary files /dev/null and b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type new file mode 100644 index 0000000..6cdb8a2 Binary files /dev/null and b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location new file mode 100644 index 0000000..eaafc18 Binary files /dev/null and b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp new file mode 100644 index 0000000..6609466 Binary files /dev/null and b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type new file mode 100644 index 0000000..6cdb8a2 Binary files /dev/null and b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location new file mode 100644 index 0000000..451f778 Binary files /dev/null and b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp new file mode 100644 index 0000000..fd41e70 Binary files /dev/null and b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce new file mode 100644 index 0000000..56cda17 Binary files /dev/null and b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type new file mode 100644 index 0000000..6cdb8a2 Binary files /dev/null and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location new file mode 100644 index 0000000..eaafc18 Binary files /dev/null and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp new file mode 100644 index 0000000..9c2eb04 Binary files /dev/null and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce new file mode 100644 index 0000000..e5cda27 Binary files /dev/null and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce differ diff --git a/encrypted/env.sh b/encrypted/env.sh new file mode 100644 index 0000000..805c7ee Binary files /dev/null and b/encrypted/env.sh differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh new file mode 100644 index 0000000..18e3de4 Binary files /dev/null and b/encrypted/nu/nurc.sh differ diff --git a/encrypted/nu/scripts/piv-recover-input.csv b/encrypted/nu/scripts/piv-recover-input.csv new file mode 100644 index 0000000..6d6884e Binary files /dev/null and b/encrypted/nu/scripts/piv-recover-input.csv differ diff --git a/encrypted/nu/scripts/piv-recover.sh b/encrypted/nu/scripts/piv-recover.sh new file mode 100755 index 0000000..09bd073 Binary files /dev/null and b/encrypted/nu/scripts/piv-recover.sh differ diff --git a/encrypted/nu/tmux/projects/delivery-templates.yml b/encrypted/nu/tmux/projects/delivery-templates.yml new file mode 100644 index 0000000..7408393 Binary files /dev/null and b/encrypted/nu/tmux/projects/delivery-templates.yml differ diff --git a/encrypted/nu/tmux/projects/facade.yml b/encrypted/nu/tmux/projects/facade.yml new file mode 100644 index 0000000..1b74a18 Binary files /dev/null and b/encrypted/nu/tmux/projects/facade.yml differ diff --git a/encrypted/nu/tmux/projects/ghostflame.yml b/encrypted/nu/tmux/projects/ghostflame.yml new file mode 100644 index 0000000..9d9e9d8 Binary files /dev/null and b/encrypted/nu/tmux/projects/ghostflame.yml differ diff --git a/encrypted/nu/tmux/projects/shuffle.yml b/encrypted/nu/tmux/projects/shuffle.yml new file mode 100644 index 0000000..b10f64f Binary files /dev/null and b/encrypted/nu/tmux/projects/shuffle.yml differ diff --git a/encrypted/nu/tmux/projects/tristram.yml b/encrypted/nu/tmux/projects/tristram.yml new file mode 100644 index 0000000..08281e7 Binary files /dev/null and b/encrypted/nu/tmux/projects/tristram.yml differ diff --git a/encrypted/nu/tmux/templates/nu-service.yml b/encrypted/nu/tmux/templates/nu-service.yml new file mode 100644 index 0000000..78798d8 Binary files /dev/null and b/encrypted/nu/tmux/templates/nu-service.yml differ diff --git a/encrypted/nu/vpn/auth.txt b/encrypted/nu/vpn/auth.txt new file mode 100644 index 0000000..3284272 Binary files /dev/null and b/encrypted/nu/vpn/auth.txt differ diff --git a/encrypted/nu/vpn/config.zip b/encrypted/nu/vpn/config.zip new file mode 100644 index 0000000..77a1638 Binary files /dev/null and b/encrypted/nu/vpn/config.zip differ diff --git a/encrypted/nu/vpn/patched.txt b/encrypted/nu/vpn/patched.txt new file mode 100644 index 0000000..52ae899 Binary files /dev/null and b/encrypted/nu/vpn/patched.txt differ diff --git a/encrypted/password-hash.txt b/encrypted/password-hash.txt new file mode 100644 index 0000000..a71014d Binary files /dev/null and b/encrypted/password-hash.txt differ diff --git a/encrypted/update-feed.sh b/encrypted/update-feed.sh new file mode 100755 index 0000000..e8f623a Binary files /dev/null and b/encrypted/update-feed.sh differ diff --git a/git/gitattributes b/git/gitattributes new file mode 100644 index 0000000..ab91280 --- /dev/null +++ b/git/gitattributes @@ -0,0 +1,3 @@ +*.gif diff=image +*.jpg diff=image +*.png diff=image \ No newline at end of file diff --git a/git/gitconfig.ini b/git/gitconfig.ini new file mode 100644 index 0000000..1fcf7f8 --- /dev/null +++ b/git/gitconfig.ini @@ -0,0 +1,47 @@ +[user] + email = eu@euandre.org + name = EuAndreh + signingkey = 81F90EC3CD356060 +[diff "odf"] + # https://medium.com/@mbrehin/git-advanced-diff-odt-pdf-doc-xls-ppt-25afbf4f1105 + # http://blog.riemann.cc/2013/04/23/versioning-of-openoffice-libreoffice-documents-using-git/ + # https://illidiumq36.wordpress.com/2013/10/06/diff-odp_files_using_git/ + textconv = odt2txt +[core] + editor = vi + pager = diff-so-fancy | less --tabs=4 -RFX + excludesfile = ~/.gitignore_global + + # https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important#5834094 + # https://help.github.com/articles/dealing-with-line-endings/ + autocrlf = input +[push] + default = simple +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true + fetchrecentalways = true + fetchrecentrefsdays = 15 + fetchrecentcommitsdays = 7 + fetchrecentremoterefs = true +[alias] + graph = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative + co = checkout + sha = rev-parse HEAD + prune-branches = !git branch --merged | grep -v master | xargs git branch -d + lfs-pull = !git fetch && git lfs fetch --recent && git merge origin + podcasts = !xargs git-annex importfeed < feeds.conf + sync = !AWS_ACCESS_KEY_ID=$ANNEX_AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$ANNEX_AWS_SECRET_ACCESS_KEY git annex sync +[annex] + gnupg-options = --no-tty + gnupg-decrypt-options = --no-tty + autocommit = false + synccontent = true + genmetadata = true +[commit] + gpgsign = true +[github] + oauth-token = $EMACS_GITHUB_TOKEN + user = EuAndreh diff --git a/git/gitignore b/git/gitignore new file mode 100644 index 0000000..c75c109 --- /dev/null +++ b/git/gitignore @@ -0,0 +1,2 @@ +playground.clj +req.http \ No newline at end of file diff --git a/git/mrconfig.ini b/git/mrconfig.ini new file mode 100644 index 0000000..34b7aec Binary files /dev/null and b/git/mrconfig.ini differ diff --git a/gitlab-ci.yml b/gitlab-ci.yml new file mode 100644 index 0000000..b94460c --- /dev/null +++ b/gitlab-ci.yml @@ -0,0 +1,30 @@ +image: clojure:lein-2.7.0 +stages: + - test + - pages + +before_script: + - lein deps + +lint: + stage: test + script: + - lein lint + +test: + stage: test + script: + - lein deps + - lein test + +pages: + stage: pages + coverage: '/ALL FILES.*?(\d+\.\d+)/' + script: + - lein doc # outputs to public/api/ + - lein cloverage -o public/coverage/ + artifacts: + paths: + - public + only: + - master diff --git a/inputrc.conf b/inputrc.conf new file mode 100644 index 0000000..9d84fe2 --- /dev/null +++ b/inputrc.conf @@ -0,0 +1,2 @@ +"\e[B": history-search-forward +"\e[A": history-search-backward \ No newline at end of file diff --git a/lein/profiles.clj b/lein/profiles.clj new file mode 100644 index 0000000..f53b8c0 Binary files /dev/null and b/lein/profiles.clj differ diff --git a/mail/mbsyncrc.ini b/mail/mbsyncrc.ini new file mode 100644 index 0000000..2ff5666 Binary files /dev/null and b/mail/mbsyncrc.ini differ diff --git a/mail/offlineimap.py b/mail/offlineimap.py new file mode 100644 index 0000000..2372b5f Binary files /dev/null and b/mail/offlineimap.py differ diff --git a/mail/offlineimaprc.ini b/mail/offlineimaprc.ini new file mode 100644 index 0000000..94699c4 Binary files /dev/null and b/mail/offlineimaprc.ini differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix new file mode 100644 index 0000000..793d77f --- /dev/null +++ b/nixos/configuration.nix @@ -0,0 +1,297 @@ +{ config, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + /etc/nixos/hardware-configuration.nix + ]; + + # Use the systemd-boot EFI boot loader. + boot = { + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + grub.device = "/dev/sda"; + }; + initrd = { + luks.devices = [ + { + name = "root"; + device = "/dev/sda2"; + preLVM = true; + } + ]; + }; + }; + + hardware = { + bluetooth.enable = true; + pulseaudio = { + package = pkgs.pulseaudioFull; + enable = true; + }; + }; + + networking.hostName = "nixos"; # Define your hostname. + networking.networkmanager.enable = true; + + # Auto-upgrade channel + # https://nixos.org/nixos/manual/index.html#idm140737316795120 + system.autoUpgrade.enable = true; + + nix.gc = { + automatic = true; + dates = "03:15"; + }; + + # Select internationalisation properties. + i18n = { + consoleFont = "Lat2-Terminus16"; + consoleKeyMap = "br-abnt2"; + defaultLocale = "en_US.UTF-8"; + }; + + # Set your time zone. + time.timeZone = "America/Sao_Paulo"; + + virtualisation.docker.enable = true; + virtualisation.virtualbox.host.enable = true; + + # $ nix-env -qaP | grep wget + environment.systemPackages = with pkgs; [ + + + ## Personal data tools + + gitAndTools.git-open + gitAndTools.gitFull + gitAndTools.diff-so-fancy + gitAndTools.git-annex + gitAndTools.gitRemoteGcrypt + gitAndTools.git-dit + git-crypt + git-lfs + gnupg + mr + nextcloud-client + borgbackup + + + ## CLI tools + + bash + bash-completion + nix-bash-completions + youtube-dl + wget + vim + thefuck + tmux + tmuxinator + sox # =play= + gettext # =envsubst= + ag + gnugrep + ack + htop + rlwrap + awscli + jq + openvpn + xclip + bc # binary calculator used in nucli + sassc + watchman + ipfs + gnumake + gcc + psmisc # =killall= + xorg.xkill + autojump + bfg-repo-cleaner + pwgen + gksu # =gksudo= + gnome3.gconf # https://github.com/NixOS/nixpkgs/issues/15978 + lsof + pciutils + libffi # FIXME: Ruby depends on it for FFI + python27Packages.pywatchman # =watchman-wait= + libressl + tree + i2p + libxml2 # =xmllint= + unzip # used by extract bash function and Clojure go-to-source + odt2txt # used to diff odf files + feh # simplistic image viewer + nixUnstable # =nix= + zip + kubernetes + zlib + vagrant + docker_compose + docker-machine + redis + alsaUtils # for xmonad volume commands + + ## NixOS + + pypi2nix + bundix + nix-repl + + + ## Music + + texlive.combined.scheme-full + lilypond + # frescobaldi FIXME + + + ## Programming tools + + stack + leiningen + python3 + python + nodejs-8_x + elixir + openjdk + solc + bundler + rustc + rustfmt + cargo + clojure # =clj= + visualvm # JVM profiling tool + maven + + + ## xmonad + + xorg.xmodmap + trayer + dmenu + escrotum + xorg.xbacklight + networkmanagerapplet + playerctl + lightdm + fvwm # =xpmroot= + haskellPackages.xmobar + arandr + + + + ## GUI programs + + # calibre # FIXME + quodlibet + firefox + emacs + tdesktop + riot-web + vlc + gnome3.evolution + keepassx2-http + yubioath-desktop + tor-browser-bundle-bin + transmission_gtk + libreoffice + android-studio + androidsdk_extras + androidndk + + ## Cryptocururencies + + electrum + zbar # for on-screen QR Code scanning + monero + + ## nu specific packages + slack + chromium + ]; + + nixpkgs.config.allowUnfree = true; # Require for slack (unfree) derivation + + # Look at + # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro + + programs = { + bash.enableCompletion = true; + }; + + services = { + xserver = { + enable = true; + layout = "br"; + xkbOptions = "caps:swapescape"; + + windowManager.default = "xmonad"; + windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + }; + desktopManager = { + default = "none"; + xterm.enable = false; + gnome3.enable = true; + }; + displayManager = { + lightdm.enable = true; + + # The config inception was inspired by: + # http://ubuntuforum-br.org/index.php?topic=13784.0 + # Lambda symbol name taken from: + # http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap + # To test a keycode: + # xmodmap -e 'keycode 118 = bar Greek_lamda' + sessionCommands = '' + ${pkgs.haskellPackages.xmobar}/bin/xmobar ~/.xmobarrc & + ${pkgs.fvwm}/bin/xpmroot ~/Nextcloud/Images/emotion.png & + ''; + }; + }; + + gnome3 = { + gnome-keyring.enable = true; + seahorse.enable = true; + gnome-terminal-server.enable = true; + gpaste.enable = true; # clipboard manager + tracker.enable = true; + sushi.enable = true; # nautilus previewer + gnome-online-accounts.enable = true; + gnome-documents.enable = true; + evolution-data-server.enable = true; + gvfs.enable = true; + }; + + pcscd.enable = true; # required by yubioath + }; + + users = { + mutableUsers = false; + extraUsers.andreh = { + isNormalUser = true; + uid = 1000; + description = "EuAndreh"; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + passwordFile = "/home/andreh/annex/dev/code/dotfiles/encrypted/password-hash.txt"; + }; + }; + + security.sudo = { + enable = true; + ## FIXME: this shouldn't be necessary, since wheels group already has sudo + extraConfig = + '' + andreh ALL=(ALL) ALL + ''; + }; + + # This value determines the NixOS release with which your system is to be + # compatible, in order to avoid breaking some software such as database + # servers. You should change this only after NixOS release notes say you + # should. + system.stateVersion = "17.09"; # Did you read the comment? +} diff --git a/nixos/npmrc.sh b/nixos/npmrc.sh new file mode 100644 index 0000000..2bc28dc --- /dev/null +++ b/nixos/npmrc.sh @@ -0,0 +1 @@ +prefix="~/.npm-packages" diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh new file mode 100644 index 0000000..827b820 --- /dev/null +++ b/nixos/os-installation.sh @@ -0,0 +1,83 @@ +sudo umount /dev/sdc1 +sudo dd if=os.iso of=/dev/sdc # + +# Derived from https://www.maketecheasier.com/nixos-review/ + +# First, connect an ethernet cable + +loadkeys br-abnt2 +fdisk /dev/sda + +# START Steps within fdisk +# First, delete all partitions with `d` +o + +n +p +1 +ENTER ++2G +t +82 + +n +p +2 +ENTER +ENTER + +a +2 + +w +# END Steps within fdisk + +mkswap -L swap /dev/sda1 +swapon /dev/sda1 +mkfs.ext4 -L nixos /dev/sda2 +mount /dev/disk/by-label/nixos /mnt +nixos-generate-config --root /mnt + +# START Edit NixOS configuration file +vi /mnt/etc/nixos/configuration.nix + +# Uncomment: +boot.loader.grub.device = “/dev/sda” +enviroment.systemPackages = with pkgs; [ + wget + vim + firefox + gitAndTools.gitFull + gitAndTools.git-annex + gitAndTools.gitRemoteGcrypt + lsof + gnupg + gnupg1 +] + +# Add: +services = { + xserver = { + enable = true; + desktopManager.gnome3.enable = true; + displayManager.gdm.enable = true; + }; +}; +# END + +nixos-install + +# OS will prompt for root UNIX password + +reboot + + +C-M- + useradd -m andreh + passwd andreh + # Setup UNIX password (for andreh) + + sudo vi /etc/sudoers + # START Add the following line below the `root` line + andreh ALL=(ALL) ALL + # END diff --git a/sbclrc.lisp b/sbclrc.lisp new file mode 100644 index 0000000..e69de29 diff --git a/scripts/backup.sh b/scripts/backup.sh new file mode 100755 index 0000000..ce186d8 --- /dev/null +++ b/scripts/backup.sh @@ -0,0 +1,57 @@ +#!/usr/bin/env bash + + +# +# BorgBackup +# + +if [ ! -d ~/UTCLOUD/ ]; then + red "~/UTCLOUD not attached. Backup not started." + exit 1 +fi + +if [ ! -d ~/borgbkp/ ]; then + yellow "~/borgbkp/ repository doesn't exist. Downloading latest version from $R:borgbkp/ into ~/borgbkp" + # The initial borg repo was created with: + # $ borg init --append-only --encryption=keyfile ~/borgbkp + # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode + rsync --verbose --progress --stats --update --recursive "$R:borgbkp/" ~/borgbkp +fi + +yellow "Creating new borg archive entry" +borg create \ + --verbose \ + --stats \ + --progress \ + --compression lzma,9 \ + ~/borgbkp::'{hostname}-{now}' \ + ~/Nextcloud/ + # add folders to be backed up here +green "Done" + +yellow "Syncing ~/borgbkp to ~/UTCLOUD/borgbkp/" +rsync --verbose --progress --stats --update --recursive ~/borgbkp/ ~/UTCLOUD/borgbkp/ +green "Done" + +yellow "Syncing ~/borgbkp to $R:borgbkp/" +rsync --verbose --progress --stats --update --recursive ~/borgbkp/ "$R:borgbkp/" +green "Done" + + +# +# mr +# + +yellow "Backing up git repos" + +pushd ~/ + +mr master +mr status +mr -j16 update +mr hd +mr -j4 rsyncnet + +popd + +green "Done" diff --git a/scripts/once-only-nextcloud.sh b/scripts/once-only-nextcloud.sh new file mode 100755 index 0000000..8400080 --- /dev/null +++ b/scripts/once-only-nextcloud.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +if [ "$(pidof nextcloud)" ] +then + echo "Nextcloud already running." +else + echo "Nextcloud not running yet. Starting it." + nextcloud & disown +fi diff --git a/scripts/single-monitor.sh b/scripts/single-monitor.sh new file mode 100755 index 0000000..ec6c5e2 --- /dev/null +++ b/scripts/single-monitor.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/sleepsort b/scripts/sleepsort new file mode 100755 index 0000000..ea20fcb --- /dev/null +++ b/scripts/sleepsort @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# Taken from: +# https://www.quora.com/What-is-the-strangest-sorting-algorithm/answer/Nipun-Ramakrishnan + +function f() { + sleep "$1" + echo "$1" +} + +while [ -n "$1" ] +do + f "$1" & + shift +done + +wait + +# example usage: +# sleepsort 5 3 6 3 6 3 1 4 7 diff --git a/scripts/three-monitors.sh b/scripts/three-monitors.sh new file mode 100755 index 0000000..d1ef7c6 --- /dev/null +++ b/scripts/three-monitors.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/spacemacs.el b/spacemacs.el new file mode 100644 index 0000000..14ba802 --- /dev/null +++ b/spacemacs.el @@ -0,0 +1,750 @@ +;; -*- mode: emacs-lisp -*- +;; This file is loaded by Spacemacs at startup. +;; It must be stored in your home directory. + +(defun dotspacemacs/layers () + "Layer configuration: +This function should only modify configuration layer settings." + (setq-default + ;; Base distribution to use. This is a layer contained in the directory + ;; `+distribution'. For now available distributions are `spacemacs-base' + ;; or `spacemacs'. (default 'spacemacs) + dotspacemacs-distribution 'spacemacs + + ;; Lazy installation of layers (i.e. layers are installed only when a file + ;; with a supported type is opened). Possible values are `all', `unused' + ;; and `nil'. `unused' will lazy install only unused layers (i.e. layers + ;; not listed in variable `dotspacemacs-configuration-layers'), `all' will + ;; lazy install any layer that support lazy installation even the layers + ;; listed in `dotspacemacs-configuration-layers'. `nil' disable the lazy + ;; installation feature and you have to explicitly list a layer in the + ;; variable `dotspacemacs-configuration-layers' to install it. + ;; (default 'unused) + dotspacemacs-enable-lazy-installation 'unused + + ;; If non-nil then Spacemacs will ask for confirmation before installing + ;; a layer lazily. (default t) + dotspacemacs-ask-for-lazy-installation t + + ;; If non-nil layers with lazy install support are lazy installed. + ;; List of additional paths where to look for configuration layers. + ;; Paths must have a trailing slash (i.e. `~/.mycontribs/') + dotspacemacs-configuration-layer-path '() + + ;; List of configuration layers to load. + dotspacemacs-configuration-layers + '(csv + rust + react + sql + perl5 + perl6 + purescript + windows-scripts + lua + erlang + elixir + python + ansible + yaml + ruby + swift + typescript + clojure + haskell + javascript + finance + helm + auto-completion + better-defaults + emacs-lisp + git + markdown + org + (shell :variables + shell-default-height 30 + shell-default-position 'bottom) + (spell-checking :variables + spell-checking-enable-by-default nil) + syntax-checking + version-control + elm + html + common-lisp + restclient + latex + docker + pdf-tools + ;; media + github + nixos + ;; tabbar + selectric) + + ;; List of additional packages that will be installed without being + ;; wrapped in a layer. If you need some configuration for these + ;; packages, then consider creating a layer. You can also put the + ;; configuration in `dotspacemacs/user-config'. + ;; To use a local version of a package, use the `:location' property: + ;; '(your-package :location "~/path/to/your-package/") + ;; Also include the dependencies as they will not be resolved automatically. + ;; To use a local version of a package, use the `:location' property: + ;; '(your-package :location "~/path/to/your-package/") + ;; Also include the dependencies as they will not be resolved automatically. + dotspacemacs-additional-packages '(paredit + interleave) + ;; A list of packages that cannot be updated. + dotspacemacs-frozen-packages '() + + ;; A list of packages that will not be installed and loaded. + dotspacemacs-excluded-packages '() + + ;; Defines the behaviour of Spacemacs when installing packages. + ;; Possible values are `used-only', `used-but-keep-unused' and `all'. + ;; `used-only' installs only explicitly used packages and deletes any unused + ;; packages as well as their unused dependencies. `used-but-keep-unused' + ;; installs only the used packages but won't delete unused ones. `all' + ;; installs *all* packages supported by Spacemacs and never uninstalls them. + ;; (default is `used-only') + dotspacemacs-install-packages 'used-only)) + +(defun dotspacemacs/init () + "Initialization: +This function is called at the very beginning of Spacemacs startup, +before layer configuration. +It should only modify the values of Spacemacs settings." + ;; This setq-default sexp is an exhaustive list of all the supported + ;; spacemacs settings. + (setq-default + ;; If non-nil ELPA repositories are contacted via HTTPS whenever it's + ;; possible. Set it to nil if you have no way to use HTTPS in your + ;; environment, otherwise it is strongly recommended to let it set to t. + ;; This variable has no effect if Emacs is launched with the parameter + ;; `--insecure' which forces the value of this variable to nil. + ;; (default t) + dotspacemacs-elpa-https t + + ;; Maximum allowed time in seconds to contact an ELPA repository. + ;; (default 5) + dotspacemacs-elpa-timeout 5 + + ;; If non-nil then Spacelpa repository is the primary source to install + ;; a locked version of packages. If nil then Spacemacs will install the lastest + ;; version of packages from MELPA. (default nil) + dotspacemacs-use-spacelpa nil + + ;; If non-nil then verify the signature for downloaded Spacelpa archives. + ;; (default nil) + dotspacemacs-verify-spacelpa-archives nil + + ;; If non-nil then spacemacs will check for updates at startup + ;; when the current branch is not `develop'. Note that checking for + ;; new versions works via git commands, thus it calls GitHub services + ;; whenever you start Emacs. (default nil) + dotspacemacs-check-for-update t + ;; If non-nil, a form that evaluates to a package directory. For example, to + ;; use different package directories for different Emacs versions, set this + ;; to `emacs-version'. (default 'emacs-version) + dotspacemacs-elpa-subdirectory 'emacs-version + + ;; One of `vim', `emacs' or `hybrid'. + ;; `hybrid' is like `vim' except that `insert state' is replaced by the + ;; `hybrid state' with `emacs' key bindings. The value can also be a list + ;; with `:variables' keyword (similar to layers). Check the editing styles + ;; section of the documentation for details on available variables. + ;; (default 'vim) + dotspacemacs-editing-style 'hybrid + ;; If non nil output loading progress in `*Messages*' buffer. (default nil) + dotspacemacs-verbose-loading t + ;; Specify the startup banner. Default value is `official', it displays + ;; the official spacemacs logo. An integer value is the index of text + ;; banner, `random' chooses a random text banner in `core/banners' + ;; directory. A string value must be a path to an image format supported + ;; by your Emacs build. + ;; If the value is nil then no banner is displayed. (default 'official) + dotspacemacs-startup-banner 'official + + ;; List of items to show in startup buffer or an association list of + ;; the form `(list-type . list-size)`. If nil then it is disabled. + ;; Possible values for list-type are: + ;; `recents' `bookmarks' `projects' `agenda' `todos'. + ;; List sizes may be nil, in which case + ;; `spacemacs-buffer-startup-lists-length' takes effect. + dotspacemacs-startup-lists '((recents . 5) + (projects . 7)) + + ;; True if the home buffer should respond to resize events. (default t) + dotspacemacs-startup-buffer-responsive t + + ;; Default major mode of the scratch buffer (default `text-mode') + dotspacemacs-scratch-mode 'text-mode + + ;; Initial message in the scratch buffer, such as "Welcome to Spacemacs!" + ;; (default nil) + dotspacemacs-initial-scratch-message nil + + ;; List of themes, the first of the list is loaded when spacemacs starts. + ;; Press `SPC T n' to cycle to the next theme in the list (works great + ;; with 2 themes variants, one dark and one light) + dotspacemacs-themes '(spacemacs-dark + spacemacs-light) + + ;; Set the theme for the Spaceline. Supported themes are `spacemacs', + ;; `all-the-icons', `custom', `vim-powerline' and `vanilla'. The first three + ;; are spaceline themes. `vanilla' is default Emacs mode-line. `custom' is a + ;; user defined themes, refer to the DOCUMENTATION.org for more info on how + ;; to create your own spaceline theme. Value can be a symbol or list with\ + ;; additional properties. + ;; (default '(spacemacs :separator wave :separator-scale 1.5)) + dotspacemacs-mode-line-theme 'spacemacs ;;'(spacemacs :separator wave :separator-scale 1.5) + + ;; If non-nil the cursor color matches the state color in GUI Emacs. + ;; (default t) + dotspacemacs-colorize-cursor-according-to-state t + + ;; Default font, or prioritized list of fonts. `powerline-scale' allows to + ;; quickly tweak the mode-line size to make separators look not too crappy. + dotspacemacs-default-font '("Source Code Pro" + :size 13 + :weight normal + :width normal) + + ;; The leader key (default "SPC") + dotspacemacs-leader-key "SPC" + + ;; The key used for Emacs commands `M-x' (after pressing on the leader key). + ;; (default "SPC") + dotspacemacs-emacs-command-key "SPC" + + ;; The key used for Vim Ex commands (default ":") + dotspacemacs-ex-command-key ":" + + ;; The leader key accessible in `emacs state' and `insert state' + ;; (default "M-m") + dotspacemacs-emacs-leader-key "M-m" + + ;; Major mode leader key is a shortcut key which is the equivalent of + ;; pressing ` m`. Set it to `nil` to disable it. (default ",") + dotspacemacs-major-mode-leader-key "," + + ;; Major mode leader key accessible in `emacs state' and `insert state'. + ;; (default "C-M-m") + dotspacemacs-major-mode-emacs-leader-key "C-M-m" + + ;; These variables control whether separate commands are bound in the GUI to + ;; the key pairs `C-i', `TAB' and `C-m', `RET'. + ;; Setting it to a non-nil value, allows for separate commands under `C-i' + ;; and TAB or `C-m' and `RET'. + ;; In the terminal, these pairs are generally indistinguishable, so this only + ;; works in the GUI. (default nil) + dotspacemacs-distinguish-gui-tab nil + + ;; If non-nil `Y' is remapped to `y$' in Evil states. (default nil) + dotspacemacs-remap-Y-to-y$ nil + + ;; If non-nil, the shift mappings `<' and `>' retain visual state if used + ;; there. (default t) + dotspacemacs-retain-visual-state-on-shift t + + ;; If non-nil, `J' and `K' move lines up and down when in visual mode. + ;; (default nil) + dotspacemacs-visual-line-move-text t + ;; If non nil, inverse the meaning of `g' in `:substitute' Evil ex-command. + ;; (default nil) + dotspacemacs-ex-substitute-global nil + + ;; Name of the default layout (default "Default") + dotspacemacs-default-layout-name "annex+TODOs/dotfiles/global-config" + ;; If non nil the default layout name is displayed in the mode-line. + ;; (default nil) + dotspacemacs-display-default-layout nil + + ;; If non-nil then the last auto saved layouts are resumed automatically upon + ;; start. (default nil) + dotspacemacs-auto-resume-layouts nil ;; t + ;; Size (in MB) above which spacemacs will prompt to open the large file + ;; literally to avoid performance issues. Opening a file literally means that + ;; no major mode or minor modes are active. (default is 1) + dotspacemacs-large-file-size 5 + ;; Location where to auto-save files. Possible values are `original' to + ;; auto-save the file in-place, `cache' to auto-save the file to another + ;; file stored in the cache directory and `nil' to disable auto-saving. + ;; (default 'cache) + dotspacemacs-auto-save-file-location 'cache + + ;; Maximum number of rollback slots to keep in the cache. (default 5) + dotspacemacs-max-rollback-slots 5 + + ;; If non-nil, `helm' will try to minimize the space it uses. (default nil) + dotspacemacs-helm-resize nil + + ;; if non-nil, the helm header is hidden when there is only one source. + ;; (default nil) + dotspacemacs-helm-no-header t + ;; define the position to display `helm', options are `bottom', `top', + ;; `left', or `right'. (default 'bottom) + dotspacemacs-helm-position 'bottom + + ;; Controls fuzzy matching in helm. If set to `always', force fuzzy matching + ;; in all non-asynchronous sources. If set to `source', preserve individual + ;; source settings. Else, disable fuzzy matching in all sources. + ;; (default 'always) + dotspacemacs-helm-use-fuzzy 'source + ;; If non nil the paste micro-state is enabled. When enabled pressing `p` + ;; several times cycle between the kill ring content. (default nil) + dotspacemacs-enable-paste-transient-state t + ;; Which-key delay in seconds. The which-key buffer is the popup listing + ;; the commands bound to the current keystroke sequence. (default 0.4) + dotspacemacs-which-key-delay 0.4 + + ;; Which-key frame position. Possible values are `right', `bottom' and + ;; `right-then-bottom'. right-then-bottom tries to display the frame to the + ;; right; if there is insufficient space it displays it at the bottom. + ;; (default 'bottom) + dotspacemacs-which-key-position 'bottom + + ;; Control where `switch-to-buffer' displays the buffer. If nil, + ;; `switch-to-buffer' displays the buffer in the current window even if + ;; another same-purpose window is available. If non-nil, `switch-to-buffer' + ;; displays the buffer in a same-purpose window even if the buffer can be + ;; displayed in the current window. (default nil) + dotspacemacs-switch-to-buffer-prefers-purpose nil + + ;; If non-nil a progress bar is displayed when spacemacs is loading. This + ;; may increase the boot time on some systems and emacs builds, set it to + ;; nil to boost the loading time. (default t) + dotspacemacs-loading-progress-bar t + + ;; If non-nil the frame is fullscreen when Emacs starts up. (default nil) + ;; (Emacs 24.4+ only) + dotspacemacs-fullscreen-at-startup t + ;; If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen. + ;; Use to disable fullscreen animations in OSX. (default nil) + dotspacemacs-fullscreen-use-non-native nil + + ;; If non-nil the frame is maximized when Emacs starts up. + ;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil. + ;; (default nil) (Emacs 24.4+ only) + dotspacemacs-maximized-at-startup nil + + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's active or selected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-active-transparency 90 + + ;; A value from the range (0..100), in increasing opacity, which describes + ;; the transparency level of a frame when it's inactive or deselected. + ;; Transparency can be toggled through `toggle-transparency'. (default 90) + dotspacemacs-inactive-transparency 90 + + ;; If non-nil show the titles of transient states. (default t) + dotspacemacs-show-transient-state-title t + + ;; If non-nil show the color guide hint for transient state keys. (default t) + dotspacemacs-show-transient-state-color-guide t + + ;; If non-nil unicode symbols are displayed in the mode line. (default t) + dotspacemacs-mode-line-unicode-symbols t + + ;; If non-nil smooth scrolling (native-scrolling) is enabled. Smooth + ;; scrolling overrides the default behavior of Emacs which recenters point + ;; when it reaches the top or bottom of the screen. (default t) + dotspacemacs-smooth-scrolling t + + ;; Control line numbers activation. + ;; If set to `t' or `relative' line numbers are turned on in all `prog-mode' and + ;; `text-mode' derivatives. If set to `relative', line numbers are relative. + ;; This variable can also be set to a property list for finer control: + ;; '(:relative nil + ;; :disabled-for-modes dired-mode + ;; doc-view-mode + ;; markdown-mode + ;; org-mode + ;; pdf-view-mode + ;; text-mode + ;; :size-limit-kb 1000) + ;; (default nil) + dotspacemacs-line-numbers '(:relative t :disabled-for-modes org-mode pdf-view-mode) + ;; Code folding method. Possible values are `evil' and `origami'. + ;; (default 'evil) + dotspacemacs-folding-method 'evil + + ;; If non-nil `smartparens-strict-mode' will be enabled in programming modes. + ;; (default nil) + dotspacemacs-smartparens-strict-mode nil + + ;; If non-nil pressing the closing parenthesis `)' key in insert mode passes + ;; over any automatically added closing parenthesis, bracket, quote, etc… + ;; This can be temporary disabled by pressing `C-q' before `)'. (default nil) + dotspacemacs-smart-closing-parenthesis nil + + ;; Select a scope to highlight delimiters. Possible values are `any', + ;; `current', `all' or `nil'. Default is `all' (highlight any scope and + ;; emphasis the current one). (default 'all) + dotspacemacs-highlight-delimiters nil + ;; If non nil, advise quit functions to keep server open when quitting. + ;; (default nil) + dotspacemacs-persistent-server nil + + ;; List of search tool executable names. Spacemacs uses the first installed + ;; tool of the list. Supported tools are `ag', `pt', `ack' and `grep'. + ;; (default '("ag" "pt" "ack" "grep")) + dotspacemacs-search-tools '("ag") + ;; The default package repository used if no explicit repository has been + ;; specified with an installed package. + ;; Not used for now. (default nil) + dotspacemacs-default-package-repository nil + + ;; Format specification for setting the frame title. + ;; %a - the `abbreviated-file-name', or `buffer-name' + ;; %t - `projectile-project-name' + ;; %I - `invocation-name' + ;; %S - `system-name' + ;; %U - contents of $USER + ;; %b - buffer name + ;; %f - visited file name + ;; %F - frame name + ;; %s - process status + ;; %p - percent of buffer above top of window, or Top, Bot or All + ;; %P - percent of buffer above bottom of window, perhaps plus Top, or Bot or All + ;; %m - mode name + ;; %n - Narrow if appropriate + ;; %z - mnemonics of buffer, terminal, and keyboard coding systems + ;; %Z - like %z, but including the end-of-line format + ;; (default "%I@%S") + dotspacemacs-frame-title-format "%I@%S" + + ;; Format specification for setting the icon title format + ;; (default nil - same as frame-title-format) + dotspacemacs-icon-title-format nil + + ;; Delete whitespace while saving buffer. Possible values are `all' + ;; to aggressively delete empty line and long sequences of whitespace, + ;; `trailing' to delete only the whitespace at end of lines, `changed' to + ;; delete only whitespace for changed lines or `nil' to disable cleanup. + ;; (default nil) + dotspacemacs-whitespace-cleanup 'trailing)) + +(defun dotspacemacs/user-init () + "Initialization function for user code. +It is called immediately after `dotspacemacs/init', before layer configuration executes. + This function is mostly useful for variables that need to be set before packages are loaded. If you are unsure, you should try in setting them in `dotspacemacs/user-config' first.") + + +(defun git-link-pull-requests (remote) + (interactive (list (git-link--select-remote))) + (let ((remote-host (git-link--remote-host remote))) + (if remote-host + (git-link--new (format "https://%s/%s/%s" + remote-host + (git-link--remote-dir remote) + (pcase remote-host + ("gitlab.com" "merge_requests") + ("github.com" "pulls")))) + (error "Remote `%s' is unknown or contains an unsupported URL" remote)))) + +(defun set-custom-nu-clj-indent () + "Reset midje indent to default." + (define-clojure-indent + (fact 1) + (facts 1) + (against-background 1) + (provided 0) + (let-entities 3) + (flow 1) + (as-customer 1) + (for-all 1) + (confirmation-button 1) + (query 1) + (render 1) + (view 1) + (text 1) + (touchable-highlight 1) + (image 1) + (scroll-view 1) + (camera 1) + (initial-state 1) + (ident 1) + (query 1) + (li 1) + (ul 1) + (div 1) + (button 1) + (span 1) + (options 1) + (for-all 1) + (fdef 1) + (as-user 3) + (constraint-fn 1))) + +(defun midje-load-facts () + "Load current namespace (or their test namespace) facts" + (interactive) + (cider-ensure-connected) + (when (buffer-file-name) + (let* ((ns (cider-current-ns)) + (test-ns (if (or (projectile-test-file-p (buffer-file-name)) (string-prefix-p "postman." ns)) ns (format "%s-test" ns))) + (cmd (format "(do (midje.repl/forget-facts *ns* '%s) (midje.repl/load-facts '%s))" test-ns test-ns))) + (cider-interactive-eval cmd)))) + +(defun helm-multi-swoop-projectile-all-files (&optional $query) + "Apply all opened buffers of the current project to helm-multi-swoop" + (interactive) + (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query)) + (if (require 'projectile nil 'noerror) + ;; set filter function that is used in projectile-project-buffers + (let ((projectile-buffers-filter-function #'identity)) + (helm-multi-swoop--exec nil + :$query helm-multi-swoop-query + :$buflist (mapcar #'buffer-name + (projectile-project-buffers)))) + (error "Package 'projectile' is not available"))) + +(defun save-and-eval-clojure-buffer (&optional buffer) + (interactive) + (save-buffer buffer) + (cider-eval-buffer buffer)) + +(defun euandreh/cider-test-run-focused-test (&optional buffer) + (interactive) + (save-buffer buffer) + (spacemacs/cider-test-run-focused-test)) + +(defun save-and-test-elixir-buffer (&optional buffer) + (interactive) + (save-buffer buffer) + (alchemist-mix-test-this-buffer)) + +(defun save-and-rerun-last-test (&optional buffer) + (interactive) + (save-buffer buffer) + (alchemist-mix-rerun-last-test)) + +(defun save-all-buffers-without-always-asking-me-for-confirmation-damn-it () + (interactive) + (save-some-buffers t)) + +(defun euandreh/clear-repl-and-eval () + (interactive) + (cider-find-and-clear-repl-output) + (cider-eval-defun-at-point)) + +;; Taken from +;; https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-within-NRepl +(defun cider-figwheel-repl () + (interactive) + (save-some-buffers) + (with-current-buffer (cider-current-repl-buffer) + (goto-char (point-max)) + (insert "(require 'figwheel-sidecar.repl-api) + (figwheel-sidecar.repl-api/start-figwheel!) ; idempotent + (figwheel-sidecar.repl-api/cljs-repl)") + (cider-repl-return))) + +(defvar mode-pairs '(("\\.sbclrc$" . lisp-mode) + ("\\.tsx$" . typescript-mode) + ("\\.json\\.base$" . json-mode) + ("\\.lytex$" . latex-mode) + ("\\.ly$" . latex-mode) + ("rc$" . shell-script-mode))) + +(defvar paredit-modes '(lisp-mode + lisp-interaction-mode + emacs-lisp-mode + ;; scheme-mode + ielm-mode + clojure-mode + cider-mode + cider-repl-mode + clojurec-mode + clojurescript-mode + clojurex-mode + cider-clojure-interaction-mode)) + +(defvar custom-el-files '("~/dev/nu/nudev/ides/emacs/nu.el")) + +(defvar custom-keybindings '(("C-x M-b" . ibuffer) + ("M-SPC" . (lambda () (interactive) (just-one-space -1))) + ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) + ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) + ("M-p" . interleave-mode) + ("C-i" . evil-jump-forward) + + ;; tabbar-mode + ("C-" . tabbar-forward) + ("C-" . tabbar-backward) + + ;; Ctrl-Super-* + ("C-H-e" . (lambda () (interactive) (insert "∋"))) + ("C-H-S-e" . (lambda () (interactive) (insert "∌"))) + ("C-H-3" . (lambda () (interactive) (insert "♯"))) + ("C-H-b" . (lambda () (interactive) (insert "♭"))) + + ;; Ctrl-Super-Alt-* + ("C-H-M-a" . (lambda () (interactive) (insert "α"))) + ("C-H-M-b" . (lambda () (interactive) (insert "β"))) + ("C-H-M-c" . (lambda () (interactive) (insert "γ"))) + ("C-H-M-d" . (lambda () (interactive) (insert "δ"))) + ("C-H-M-f" . (lambda () (interactive) (insert "ε"))))) + + +(defun dotspacemacs/user-config () + "Configuration function for user code. +This function is called at the very end of Spacemacs initialization after layers configuration. +This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." + (require 'git-link) ;; for git-link-* + (require 'clojure-mode) ;; for set-nu-clj-indent + (require 'org-indent) ;; for org-indent-mode + (require 'helm-swoop) ;; for custom helm-multi-swoop-projectile-all-files + + (projectile-cleanup-known-projects) + + (spacemacs/set-leader-keys + "fS" 'save-all-buffers-without-always-asking-me-for-confirmation-damn-it ;; 'save-some-buffers + "w/" 'split-window-right-and-focus + "w-" 'split-window-below-and-focus + "d" 'spacemacs/delete-window + "sS" 'helm-multi-swoop-projectile-all-files + "glh" 'git-link-homepage + "glp" 'git-link-pull-requests + "W" 'spacemacs/workspaces-transient-state/body) + + (spacemacs/set-leader-keys-for-major-mode 'elixir-mode + "tb" 'save-and-test-elixir-buffer + "tr" 'save-and-rerun-last-test) + + (spacemacs/set-leader-keys-for-major-mode 'typescript-mode + "." 'spacemacs/jump-to-definition + "," 'tide-jump-back) + + ;; https://emacs.stackexchange.com/questions/17866/magit-how-to-use-systems-ssh-agent-and-dont-ask-for-password + (exec-path-from-shell-initialize) + (exec-path-from-shell-copy-env "SSH_AGENT_PID") + (exec-path-from-shell-copy-env "SSH_AUTH_SOCK") + + ;; github layer + (exec-path-from-shell-copy-env "EMACS_GITHUB_TOKEN") + + ;; https://github.com/syl20bnr/spacemacs/issues/774 + (unless (file-exists-p (concat spacemacs-cache-directory "undo")) + (make-directory (concat spacemacs-cache-directory "undo"))) + + (add-hook 'org-mode-hook (lambda () + (org-indent-mode 1))) + + ;; https://emacs.stackexchange.com/questions/3747/how-to-disable-line-wrapping-in-spacemacs + (add-hook 'hack-local-variables-hook (lambda () + (spacemacs/toggle-truncate-lines-off))) + + (dolist (mode-pair mode-pairs) + (setq auto-mode-alist (cons mode-pair auto-mode-alist))) + + (dolist (path custom-el-files) + (when (file-exists-p path) + (load path))) + + + (dolist (mode paredit-modes :done) + (let ((mode-hook (intern (concat (symbol-name mode) "-hook"))) + (mode-map (intern (concat (symbol-name mode) "-map")))) + (eval-after-load mode '(set-custom-nu-clj-indent)) + (eval-after-load mode '(sayid-setup-package)) + (add-hook mode-hook 'paredit-mode) + (add-hook mode-hook (lambda () + (rainbow-delimiters-mode 1))) + (spacemacs/set-leader-keys-for-major-mode mode + "E" 'euandreh/clear-repl-and-eval + "k" 'paredit-copy-as-kill + "K" 'paredit-copy-sexps-as-kill + "tm" 'midje-load-facts + "eb" 'save-and-eval-clojure-buffer + "tt" 'euandreh/cider-test-run-focused-test + "." 'spacemacs/jump-to-definition + "," 'cider-pop-back))) + + ;; From the documentation: + ;; https://cider.readthedocs.io/en/latest/code_completion/ + (global-set-key (kbd "TAB") #'company-indent-or-complete-common) + (add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion) + (add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion) + + (dolist (keybinding custom-keybindings) + (global-set-key (kbd (car keybinding)) (cdr keybinding))) + + (setq standard-indent 2 + git-link-use-commit t + vc-follow-symlinks t + org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) + default-truncate-lines nil + magit-diff-refine-hunk t + + ;; Indentation + typescript-indent-level 2 + js2-basic-offset 2 + js-indent-level 2 + css-indent-offset 2 + web-mode-markup-indent-offset 2 + web-mode-css-indent-offset 2 + web-mode-code-indent-offset 2 + web-mode-attr-indent-offset 2 + perl6-indent-offset 2 + + ;; Clojure + cljr-warn-on-eval nil + + ;; Common Lisp + inferior-lisp-program "ros -L sbcl -Q -l ~/.sbclrc run" + common-lisp-hyperspec-root (concat "file:" (expand-file-name "~/annex/docs/programming/hyperspec/HyperSpec/")) + + ;; Persistent undo + undo-tree-auto-save-history t + undo-tree-history-directory-alist `(("." . ,(concat spacemacs-cache-directory "undo"))) + + ;; EMMS + emms-source-file-default-directory "~/annex/Banshee/queue/" + emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find + emms-browser-get-track-field-function #'emms-browser-get-track-field-use-directory-name + + ;; org-mode + ;; Taken from: + ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda + ;; - http://doc.norang.ca/org-mode.html + org-agenda-files '("~/annex/txt/TODOs.org") + org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" + org-default-notes-file "~/annex/txt/TODOs.org" + org-diary-notes-file "~/annex/txt/Diary.org" + org-capture-templates '(("t" "TODO" entry (file org-default-notes-file) + "* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t) + ("s" "Scratch" entry (file org-default-notes-file) + "* Scratch" :clock-in t :clock-resume t) + ("m" "Meeting" entry (file org-default-notes-file) + "* MEETING with %? :MEETING:\n%t" :clock-in t :clock-resume t) + ("d" "Diary" entry (file+datetree org-diary-notes-file) + "* %?\n%U\n" :clock-in t :clock-resume t) + ("i" "Idea" entry (file org-default-notes-file) + "* %? :IDEA: \n%t" :clock-in t :clock-resume t) + ("n" "Next Task" entry (file+headline org-default-notes-file "Tasks") + "** NEXT %? \nDEADLINE: %t"))) + + t) + +(defun dotspacemacs/emacs-custom-settings () + "Emacs custom settings. +This is an auto-generated function, do not modify its content directly, use +Emacs customize menu instead. +This function is called at the very end of Spacemacs initialization." +(custom-set-variables + ;; custom-set-variables was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + '(package-selected-packages + (quote + (pipenv yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell pippel pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term mu4e-maildirs-extension mu4e-alert move-text mmm-mode minitest markdown-toc magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hy-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mu helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav elfeed-web elfeed-org elfeed-goodies editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode coffee-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line ac-ispell)))) +(custom-set-faces + ;; custom-set-faces was added by Custom. + ;; If you edit it by hand, you could mess it up, so be careful. + ;; Your init file should contain only one such instance. + ;; If there is more than one, they won't work right. + ) +) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml new file mode 100644 index 0000000..b60ffbc --- /dev/null +++ b/tmux/projects/annex.yml @@ -0,0 +1,11 @@ +name: annex +root: ~/annex/ + +windows: + - annex+dotfiles: + layout: main-vertical + panes: + - cd + - j dotfiles && git status + - git status + - htop: htop diff --git a/tmux/projects/monero.yml b/tmux/projects/monero.yml new file mode 100644 index 0000000..6f3af8c --- /dev/null +++ b/tmux/projects/monero.yml @@ -0,0 +1,10 @@ +name: annex +root: ~/ + +windows: + - monero: + layout: main-horizontal + panes: + - monerod --data-dir ~/UTCLOUD/Monero/ + - watch -n 30 du -hd 1 ~/UTCLOUD/Monero/ + - monero-wallet-cli --wallet-file ~/annex/Crypto/Monero/EuAndrehMoneroCLIWallet diff --git a/tmux/projects/pires.yml b/tmux/projects/pires.yml new file mode 100644 index 0000000..7f693f2 --- /dev/null +++ b/tmux/projects/pires.yml @@ -0,0 +1,48 @@ +name: pires +root: ~/annex/dev/code/pires/ + +windows: + # - client: + # layout: main-vertical + # panes: + # - git: + # - git status + # - figwheel: + # - re-natal use-android-device real + # - re-natal use-figwheel + # - yellow 'In Emacs, connect, (start-figwheel! "android") and (cljs-repl)' + # - lein repl + # - packager: + # - yellow "Waiting for figwheel to be set up..." && sleep 20 + # - npm start + # - log-android: + # panes: + # - react-native log-android + # - logcat: + # panes: + # - adb logcat + - server: + root: ~/annex/dev/code/pires/server/ + layout: main-vertical + panes: + - git: + - git status + - repl: + - lein repl + - (require 'pires.service) + - test: + - sleep 10 + - lein test + - transactor: + - cd ~/bin/datomic-pro/ + - bin/run -m datomic.peer-server -h localhost -p 8998 -a pireskey,piressecret -d pires,datomic:mem://pires + - libs: + root: ~/annex/dev/code/ + layout: main-vertical + panes: + - misc: + - cd org.euandre.misc + - git status + - om-auth: + - cd org.euandre.om-auth + - git status diff --git a/tmux/projects/songbooks.yml b/tmux/projects/songbooks.yml new file mode 100644 index 0000000..7d385c2 --- /dev/null +++ b/tmux/projects/songbooks.yml @@ -0,0 +1,24 @@ +name: songbooks +root: ~/annex/dev/code/songbooks/ + +windows: + - server: + layout: main-vertical + root: ~/annex/dev/code/songbooks/server/ + panes: + - git: + - git status + - server-repl: + - lein repl + - server-tests: + - lein test + - client: + layout: main-vertical + root: ~/annex/dev/code/songbooks/client/ + panes: + - git: + - git status + - figwheel: + - lein repl + - something: + - lein test diff --git a/tmux/projects/sosps.yml b/tmux/projects/sosps.yml new file mode 100644 index 0000000..ff8f1e0 --- /dev/null +++ b/tmux/projects/sosps.yml @@ -0,0 +1,10 @@ +name: sosps +root: ~/annex/dev/mouselabs/ + +windows: + - git: + layout: main-vertical + panes: + - git status + - ionic serve + - git status diff --git a/tmux/tmux.conf b/tmux/tmux.conf new file mode 100644 index 0000000..9b38cbf --- /dev/null +++ b/tmux/tmux.conf @@ -0,0 +1,64 @@ +# Instead of using "C-b" as a prefix, use "C-x" +unbind C-b +set -g prefix C-x + +# Turn on mouse mode +# https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ +# https://github.com/tmux/tmux/blob/310f0a960ca64fa3809545badc629c0c166c6cd2/CHANGES#L12 +set -g mouse on + +# Bind "C-x r" to reload the configuration file +bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" + +# Holy answer that properly implements copying from tmux! +# https://unix.stackexchange.com/a/349020/276661 +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" + +# Copy to clipboard after making selection with keyboard. Usefull for text that spans over a full pane and can't be selected with the mouse. +bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" + +# Moving around panes +bind-key h select-pane -L +bind-key j select-pane -D +bind-key k select-pane -U +bind-key l select-pane -R + +# Resizing panes +bind-key -n C-h resize-pane -L 5 +bind-key -n C-j resize-pane -D 5 +bind-key -n C-k resize-pane -U 5 +bind-key -n C-l resize-pane -R 5 + +# "C-x m" to actually clear the pane history +bind-key m send-keys -R \; clear-history + +# Keybinding to activate pane typing sync +# https://stackoverflow.com/questions/25909964/tmux-how-to-toggle-on-and-off-options-with-the-same-key +bind-key b setw synchronize-panes \; display-message "synchronize-panes toggle" + +setw -g mode-keys vi # Move around with vi keys +set-option -g status-key "vi" # Use vi mode for status bar command (like after typing "C-x [" one can search with "/") +set-option -g status-bg "#666666" # Status bar background color +set-option -g status-fg "#aaaaaa" # Status bar foreground color +set-option -g status-left-length 50 # session name in status bar length =[annex]= part +set-option -g history-limit 150000 # How many lines of history to keep + +# Set the panes initial index value to 1 instead of 0 +# 0 is too far from ` ;) +set -g base-index 1 +set-window-option -g pane-base-index 1 + +# Automatically set window title +set-window-option -g automatic-rename on +set-option -g set-titles on + +# Set "correct term" +# https://wiki.archlinux.org/index.php/Tmux +set -g default-terminal screen-256color + +# No delay for escape key press +# https://mutelight.org/practical-tmux#faster-command-sequences +set -sg escape-time 0 + +# Enable arrow key navigation +set-option -gw xterm-keys on \ No newline at end of file diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs new file mode 100644 index 0000000..4bba66b --- /dev/null +++ b/xmonad/xmobar.hs @@ -0,0 +1,47 @@ +Config { font = "-*-Fixed-Bold-R-Normal-*-13-*-*-*-*-*-*-*" + , bgColor = "black" + , fgColor = "grey" + , position = TopW L 90 + , additionalFonts = [] + , borderColor = "black" + , border = TopB + , alpha = 255 + , textOffset = -1 + , iconOffset = -1 + , lowerOnStart = True + , pickBroadest = False + , persistent = False + , hideOnStart = False + , iconRoot = "." + , allDesktops = True + , overrideRedirect = True + , commands = [ Run Weather "EGPF" ["-t",": C", + "-L","18","-H","25", + "--normal","green", + "--high","red", + "--low","lightblue"] 36000 + , Run Network "wlp2s0" ["-L","0","-H","32","--normal","green","--high","red"] 10 + + , Run Cpu ["-L","3","-H","50", + "--normal","green","--high","red"] 10 + , Run Memory ["-t","Mem: %"] 10 + , Run Swap [] 10 + , Run Com "uname" ["-s","-r"] "" 36000 + , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10 + + , Run Battery [ + "-t", ": % - ", + "--", + --"-c", "charge_full", + "-O", "AC", + "-o", "Bat", + "-h", "green", + "-l", "red" + ] 10 + , Run StdinReader + , Run CommandReader "/usr/bin/ledmon" "LED" + ] + , sepChar = "%" + , alignSep = "}{" + , template = " %date% | %battery% } { %memory% * %swap% | %cpu% | %wlp2s0% " + } diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs new file mode 100644 index 0000000..299053f --- /dev/null +++ b/xmonad/xmonad.hs @@ -0,0 +1,106 @@ +import XMonad +import XMonad.Actions.SpawnOn +import XMonad.Hooks.DynamicLog() +import XMonad.Hooks.ManageDocks +import XMonad.Util.EZConfig(additionalKeys) +import System.IO() +import XMonad.Layout.NoBorders +import XMonad.Hooks.SetWMName +import XMonad.Hooks.ManageHelpers +import XMonad.Util.Scratchpad +import qualified XMonad.StackSet as W + +main :: IO () +main = + xmonad $ def + -- Fullscreen handling: + -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar + { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> manageHook def <+> manageScratchPad + , handleEventHook = handleEventHook def <+> docksEventHook + , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts $ layoutHook def + , modMask = mod4Mask -- User Super instead of Alt + , terminal = myTerminal + , startupHook = startup + } `additionalKeys` myKeyBindings + +myTerminal = "gnome-terminal" + +manageScratchPad :: ManageHook +manageScratchPad = scratchpadManageHook (W.RationalRect l t w h) + where + h = 0.1 -- terminal height, 10% + w = 1 -- terminal width, 100% + t = 1 - h -- distance from top edge, 90% + l = 1 - w -- distance from left edge, 0% + +myKeyBindings :: [((ButtonMask, KeySym), X())] +myKeyBindings = + [ -- XF86MonBrightnessUp + ((0, 0x1008ff02), + spawn "xbacklight +10") + + -- XF86MonBrightnessDown + , ((0, 0x1008ff03), + spawn "xbacklight -10") + + -- XF86AudioMute + , ((0, 0x1008ff12), + spawn "amixer -q sset Master toggle") + + -- XF86AudioLowerVolume + , ((0, 0x1008ff11), + spawn "amixer -q sset Master 5%- unmute") + + -- XF86AudioRaiseVolume + , ((0, 0x1008ff13), + spawn "amixer -q sset Master 5%+ unmute") + + -- XF86AudioPrev + , ((0, 0x1008ff16), + spawn "playerctl previous") + + -- XF86AudioPlay + , ((0, 0x1008ff14), + spawn "playerctl play-pause") + + -- XF86AudioNext + , ((0, 0x1008ff17), + spawn "playerctl next") + + -- yeganesh launcher + , ((mod4Mask, xK_p), + spawnHere "exe=$(~/.local/bin/yeganesh -x) && exec $exe") + + -- Lock screen + , ((mod4Mask .|. controlMask, xK_l), + spawn "dm-tool lock & systemctl suspend") + + -- print screen of clicked window + , ((mod4Mask .|. controlMask, xK_Print), + spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s") + + -- print whole screen + , ((mod4Mask, xK_Print), + spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png") + + -- xrandr single monitor setup + , ((mod4Mask .|. controlMask, xK_1), + spawn "~/annex/dev/code/dotfiles/scripts/single-monitor.sh") + + -- xrandr three monitor setup + , ((mod4Mask .|. controlMask, xK_3), + spawn "~/annex/dev/code/dotfiles/scripts/three-monitors.sh") + + -- restart network + , ((mod4Mask, xK_x), + spawn "gksudo -S systemctl restart network-manager") + ] + +startup :: X() +startup = do + spawn "xbacklight =100" + spawn "xmobar ~/.xmobarrc" + spawn "killall trayer; trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" + spawn "nm-applet" + spawn "~/annex/dev/code/dotfiles/scripts/once-only-nextcloud.sh" + setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh new file mode 100644 index 0000000..b25a9a1 --- /dev/null +++ b/xmonad/xsession.sh @@ -0,0 +1 @@ +xmonad -- cgit v1.2.3 From 33daa5ea1f962cca766266f3089f99d2dbee3a14 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Mar 2018 20:48:34 -0300 Subject: Add h2 ip script --- encrypted/nu/nurc.sh | Bin 3047 -> 3311 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 18e3de4..e87013a 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 9357435d31ba57e254ca33bd8bacf57490057147 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Mar 2018 22:21:03 -0300 Subject: Add test for zero-bytes encrypted file --- bash/init.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/bash/init.sh b/bash/init.sh index 2239015..1cb538f 100644 --- a/bash/init.sh +++ b/bash/init.sh @@ -5,3 +5,18 @@ pushd ~/ > /dev/null mr checkout > /dev/null popd > /dev/null + + +# Tests + +pushd $DOTFILES > /dev/null + +sizes=$(git diff-files --ignore-submodules | awk '{print $6}' | xargs du | awk '{print $1}') +for size in $sizes; do + if [[ $size = 1 ]]; then + # https://github.com/AGWA/git-crypt/issues/53 + echo "dotfiles contains encrypted file with 0 bytes" + fi +done + +popd > /dev/null -- cgit v1.2.3 From 28b59158ed87966e9e9027e7b90ac0e7b21303c8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 24 Mar 2018 13:23:35 -0300 Subject: Sync annex on backup.sh --- scripts/backup.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index ce186d8..b88e300 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -43,7 +43,6 @@ green "Done" # yellow "Backing up git repos" - pushd ~/ mr master @@ -54,4 +53,11 @@ mr -j4 rsyncnet popd +yellow "Syncing annex" +pushd ~/annex/ + +git annex sync + +popd + green "Done" -- cgit v1.2.3 From cd1164ee2babd62ef62bade03479ea35edbd98cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 24 Mar 2018 13:23:48 -0300 Subject: Add generated backup files --- .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp index 9c2eb04..b74a6bc 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce index e5cda27..ae5cbc0 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce differ -- cgit v1.2.3 From b8ce3ab2b440826027f9ab913ff835b66742d014 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 26 Mar 2018 10:25:32 -0300 Subject: Add more Clojure indentation rules --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 14ba802..339ba68 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -471,9 +471,11 @@ It is called immediately after `dotspacemacs/init', before layer configuration (div 1) (button 1) (span 1) + (svg 1) (options 1) (for-all 1) (fdef 1) + (action 1) (as-user 3) (constraint-fn 1))) -- cgit v1.2.3 From 13b554a25276a0874e2b233e5c865a460aefb0e9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 26 Mar 2018 10:25:47 -0300 Subject: Cleanup tmuxinator templates --- tmux/projects/annex.yml | 1 - tmux/projects/songbooks.yml | 19 +++++-------------- 2 files changed, 5 insertions(+), 15 deletions(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index b60ffbc..92acafe 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -8,4 +8,3 @@ windows: - cd - j dotfiles && git status - git status - - htop: htop diff --git a/tmux/projects/songbooks.yml b/tmux/projects/songbooks.yml index 7d385c2..c3b7fab 100644 --- a/tmux/projects/songbooks.yml +++ b/tmux/projects/songbooks.yml @@ -4,21 +4,12 @@ root: ~/annex/dev/code/songbooks/ windows: - server: layout: main-vertical - root: ~/annex/dev/code/songbooks/server/ panes: - git: - git status - server-repl: - - lein repl - - server-tests: - - lein test - - client: - layout: main-vertical - root: ~/annex/dev/code/songbooks/client/ - panes: - - git: - - git status - - figwheel: - - lein repl - - something: - - lein test + - cd server/ && lein repl + - client-repl: + - cd client/ && lein repl + - tests: + - make test -- cgit v1.2.3 From de1d97c6309fe1960516c30215972014eadf9356 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 26 Mar 2018 10:25:57 -0300 Subject: Remove trailing newline in =copy= alias --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index dfa5c21..3daf4e1 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -7,7 +7,7 @@ alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahF" alias ll="ls -lhF" alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" -alias copy="xclip -sel clip" +alias copy="tr -d '\n' | xclip -sel clip" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" alias git="AWS_ACCESS_KEY_ID=$ANNEX_AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$ANNEX_AWS_SECRET_ACCESS_KEY git" -- cgit v1.2.3 From 1efdd132cc2ab1fa84d6599082aecb1da63de1c9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 27 Mar 2018 11:48:16 -0300 Subject: Add =git sha7= alias and use it in $PS1 --- bash/colors.sh | 2 +- git/gitconfig.ini | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/colors.sh b/bash/colors.sh index 7548803..6266c10 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -104,7 +104,7 @@ if [ $? -eq 0 ]; then \ else \ # @5 - Changes to working tree echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ - fi)" - $(echo "'$IBlack'"`git sha | head -c 7`"'$Color_Off'"); \ + fi)" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ fi)$(if [[ $IN_NIX_SHELL == 1 ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$Purple'nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 1fcf7f8..45a9af9 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -30,6 +30,7 @@ graph = log --graph --pretty=format:'%Cred%h%Creset -%C(yellow)%d%Creset %s %Cgreen(%cr)%Creset' --abbrev-commit --date=relative co = checkout sha = rev-parse HEAD + sha7 = ! git sha | head -c 7 prune-branches = !git branch --merged | grep -v master | xargs git branch -d lfs-pull = !git fetch && git lfs fetch --recent && git merge origin podcasts = !xargs git-annex importfeed < feeds.conf -- cgit v1.2.3 From 650c4202aa4764b91b345e9014c727656c0052cf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 27 Mar 2018 11:48:43 -0300 Subject: Add $ACCOUNT_ID env var --- encrypted/nu/nurc.sh | Bin 3311 -> 3368 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index e87013a..ddd3d85 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 3f5f6e3f5335363b2640a9769a280e5f81ecee81 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 27 Mar 2018 11:48:54 -0300 Subject: Remove watch-relay from ghostflame template --- encrypted/nu/tmux/projects/ghostflame.yml | Bin 258 -> 228 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/tmux/projects/ghostflame.yml b/encrypted/nu/tmux/projects/ghostflame.yml index 9d9e9d8..9069f23 100644 Binary files a/encrypted/nu/tmux/projects/ghostflame.yml and b/encrypted/nu/tmux/projects/ghostflame.yml differ -- cgit v1.2.3 From 36932865b5e6e4fd90e8fdd0ea8ed4827d644e2e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 27 Mar 2018 11:49:40 -0300 Subject: Add sample on how to configure custom CLJS jack-in command --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 339ba68..918a215 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -693,6 +693,9 @@ This is the place where most of your configurations should be done. Unless it is ;; Clojure cljr-warn-on-eval nil + ;; cider-cljs-lein-repl "(do (require 'figwheel-sidecar.repl-api) + ;; (figwheel-sidecar.repl-api/start-figwheel!) + ;; (figwheel-sidecar.repl-api/cljs-repl))" ;; Common Lisp inferior-lisp-program "ros -L sbcl -Q -l ~/.sbclrc run" -- cgit v1.2.3 From 94e893efdcd06981b13ce12e3f68cb7a1646f5d6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 11:09:10 -0300 Subject: Remove png attachment --- attachments/dotfiles-avatar.png | Bin 22675 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 attachments/dotfiles-avatar.png diff --git a/attachments/dotfiles-avatar.png b/attachments/dotfiles-avatar.png deleted file mode 100644 index 5583849..0000000 Binary files a/attachments/dotfiles-avatar.png and /dev/null differ -- cgit v1.2.3 From e1f648880b51487014be8ae4380b1fa90815259a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:47:38 -0300 Subject: Move update-feed.sh into scripts/video-feed.sh --- encrypted/scripts/video-feed.sh | Bin 0 -> 2411 bytes encrypted/update-feed.sh | Bin 2411 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100755 encrypted/scripts/video-feed.sh delete mode 100755 encrypted/update-feed.sh diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh new file mode 100755 index 0000000..e8f623a Binary files /dev/null and b/encrypted/scripts/video-feed.sh differ diff --git a/encrypted/update-feed.sh b/encrypted/update-feed.sh deleted file mode 100755 index e8f623a..0000000 Binary files a/encrypted/update-feed.sh and /dev/null differ -- cgit v1.2.3 From 950e2bb48486fafdd19985f9f953210a7ca4ca98 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:49:36 -0300 Subject: Add ~/.thunderbird/ to backup routine --- scripts/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index b88e300..1a5e3aa 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -26,6 +26,7 @@ borg create \ --compression lzma,9 \ ~/borgbkp::'{hostname}-{now}' \ ~/Nextcloud/ + ~/.thunderbird/ # add folders to be backed up here green "Done" -- cgit v1.2.3 From dadecdf753f9990fef79c923ce08998333bf859b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:49:48 -0300 Subject: Add properly scripts/ folders to path --- bash/env.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index ad930f7..c391036 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -31,7 +31,8 @@ export PATH=~/.local/bin:$PATH # export EDITOR=vi -export PATH="$HOME/dev/code/dotfiles/scripts/:$PATH" +export PATH="$DOTFILES/scripts/:$PATH" +export PATH="$DOTFILES/encrypted/scripts/:$PATH" export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" export INPUTRC=~/.inputrc -- cgit v1.2.3 From eec4eafff8f2d17dee65d907b10e09e9384ece1c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:50:00 -0300 Subject: Add basic NixOS gc instructions --- README.org | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.org b/README.org index 081b492..05071a0 100644 --- a/README.org +++ b/README.org @@ -1,4 +1,10 @@ * dotfiles +** +** NixOS +*** Cleaning up the store +=sudo nix-env -p /nix/var/nix/profiles/per-user/root/channels --delete-generations old= +=sudo nix-env --list-generations -p /nix/var/nix/profiles/system= +=sudo nix-env --list-generations -p /nix/var/nix/profiles/per-user/root/channels= ** Instructions - setting up a new installation (NixOS) *** 1. Download NixOS image from [[https://nixos.org/][the website]]. *** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= -- cgit v1.2.3 From def18a010a73e85ac0a4db5d691cb74bc6730b47 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:50:12 -0300 Subject: Ignore encrypted/borg on ag search --- .ignore | 1 + 1 file changed, 1 insertion(+) create mode 100644 .ignore diff --git a/.ignore b/.ignore new file mode 100644 index 0000000..0fabda6 --- /dev/null +++ b/.ignore @@ -0,0 +1 @@ +encrypted/borg/ \ No newline at end of file -- cgit v1.2.3 From a099c0b4d91f4ea2822452c6243cf7fb4333aa61 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:51:48 -0300 Subject: Use NixOS installed yeganesh in xmonad --- nixos/configuration.nix | 1 + xmonad/xmonad.hs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 793d77f..a3183ac 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -178,6 +178,7 @@ lightdm fvwm # =xpmroot= haskellPackages.xmobar + haskellPackages.yeganesh arandr diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 299053f..2f868ec 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -69,7 +69,7 @@ myKeyBindings = -- yeganesh launcher , ((mod4Mask, xK_p), - spawnHere "exe=$(~/.local/bin/yeganesh -x) && exec $exe") + spawnHere "exe=$(yeganesh -x) && exec $exe") -- Lock screen , ((mod4Mask .|. controlMask, xK_l), -- cgit v1.2.3 From cb485b91df4057b874b0a08720a02d080b6aa2d2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:52:05 -0300 Subject: Add thunderbird back --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a3183ac..e28b821 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -186,6 +186,7 @@ ## GUI programs # calibre # FIXME + thunderbird quodlibet firefox emacs -- cgit v1.2.3 From 560500b1b35c3f042e0e01cdc5f0d77fc3d32441 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:52:15 -0300 Subject: Fix calibre installation --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e28b821..fd99768 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -185,8 +185,8 @@ ## GUI programs - # calibre # FIXME thunderbird + calibre quodlibet firefox emacs -- cgit v1.2.3 From dae6f8d47bdc68812afd08a303477717e8c3cece Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:52:26 -0300 Subject: Install git-sizer --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fd99768..11afa4a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -132,6 +132,7 @@ docker-machine redis alsaUtils # for xmonad volume commands + git-sizer ## NixOS -- cgit v1.2.3 From 1980166cd0f038dea13b4f7f2b7a98b4dfdfef4b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 22:55:35 -0300 Subject: Remove tor (build is broken) --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 11afa4a..8cc702f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -145,7 +145,7 @@ texlive.combined.scheme-full lilypond - # frescobaldi FIXME + # frescobaldi # FIXME ## Programming tools @@ -197,7 +197,7 @@ gnome3.evolution keepassx2-http yubioath-desktop - tor-browser-bundle-bin + # tor-browser-bundle-bin # FIXME transmission_gtk libreoffice android-studio -- cgit v1.2.3 From 1a46c469353fa0bb0f5be3462e3ee9ef54c1dd9b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 23:00:00 -0300 Subject: Fix linebreak scaping in backup.sh routine --- scripts/backup.sh | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 1a5e3aa..94f18c6 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -19,13 +19,13 @@ if [ ! -d ~/borgbkp/ ]; then fi yellow "Creating new borg archive entry" -borg create \ - --verbose \ - --stats \ - --progress \ - --compression lzma,9 \ +borg create \ + --verbose \ + --stats \ + --progress \ + --compression lzma,9 \ ~/borgbkp::'{hostname}-{now}' \ - ~/Nextcloud/ + ~/Nextcloud/ \ ~/.thunderbird/ # add folders to be backed up here green "Done" -- cgit v1.2.3 From e6a87966f6e4fea44b6dcecf76b7cf253ae06741 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 23:31:34 -0300 Subject: Show mr stats report in backup.sh --- scripts/backup.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 94f18c6..c48ee27 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -46,11 +46,11 @@ green "Done" yellow "Backing up git repos" pushd ~/ -mr master -mr status -mr -j16 update -mr hd -mr -j4 rsyncnet +mr -s master +mr -s status +mr -s -j16 update +mr -s hd +mr -s -j4 rsyncnet popd -- cgit v1.2.3 From b91e1b6f328d38591bae9454c309c4b95f1cb1c2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 28 Mar 2018 23:31:58 -0300 Subject: Add custom commands for onboarding and ghostflame --- git/mrconfig.ini | Bin 7428 -> 7515 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 34b7aec..081146d 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 45923e332a9e622f7c138af8b11cc28c0f25f211 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 29 Mar 2018 08:23:09 -0300 Subject: Upda borg files --- .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes scripts/backup.sh | 2 ++ 3 files changed, 2 insertions(+) diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp index b74a6bc..4aa94bc 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce index ae5cbc0..3246f72 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce differ diff --git a/scripts/backup.sh b/scripts/backup.sh index c48ee27..4f88b63 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -62,3 +62,5 @@ git annex sync popd green "Done" + +green "Remember to run `git annex sync`!" -- cgit v1.2.3 From f2769c23e35fcb5d3556cc9448334e39edc7e447 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 30 Mar 2018 13:40:53 -0300 Subject: Add sl script --- scripts/sl | 13 +++++++++++++ 1 file changed, 13 insertions(+) create mode 100755 scripts/sl diff --git a/scripts/sl b/scripts/sl new file mode 100755 index 0000000..2333462 --- /dev/null +++ b/scripts/sl @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Taken from: +# https://gir.st/blog/sl-alt.htm + +# sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 + +LEN=$(ls "$@" |wc -L) # get the length of the longest line + +ls "$@" | rev | while read -r line +do + printf "%${LEN}.${LEN}s\\n" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' +done \ No newline at end of file -- cgit v1.2.3 From 63cbf869fe8485d0ca9ed8f2670b53fe4f90cd5a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 30 Mar 2018 21:21:49 -0300 Subject: Add dom/a indentation rule --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 918a215..6d532b1 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -470,6 +470,7 @@ It is called immediately after `dotspacemacs/init', before layer configuration (ul 1) (div 1) (button 1) + (a 1) (span 1) (svg 1) (options 1) -- cgit v1.2.3 From 8e6c5d6e2010e68f6ef8d212380383d6782bcf03 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 31 Mar 2018 10:40:35 -0300 Subject: Improve Clojure indentation configuration in spacemacs.el --- spacemacs.el | 33 ++++++++++++++++++--------------- 1 file changed, 18 insertions(+), 15 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 6d532b1..48d5db0 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -457,28 +457,31 @@ It is called immediately after `dotspacemacs/init', before layer configuration (confirmation-button 1) (query 1) (render 1) - (view 1) - (text 1) - (touchable-highlight 1) - (image 1) - (scroll-view 1) - (camera 1) (initial-state 1) (ident 1) (query 1) - (li 1) - (ul 1) - (div 1) - (button 1) - (a 1) - (span 1) - (svg 1) - (options 1) (for-all 1) (fdef 1) (action 1) (as-user 3) - (constraint-fn 1))) + (constraint-fn 1)) + + ;; dom/* indentation rules: React/Native helper fns + (define-clojure-indent + (view 'defun) + (text 'defun) + (touchable-highlight 'defun) + (image 'defun) + (scroll-view 'defun) + (camera 'defun) + (li 'defun) + (ul 'defun) + (div 'defun) + (button 'defun) + (a 'defun) + (span 'defun) + (svg 'defun) + (options 'defun))) (defun midje-load-facts () "Load current namespace (or their test namespace) facts" -- cgit v1.2.3 From d328dce77fe35517dec7e201daca3fed91bcc882 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Apr 2018 00:36:42 -0300 Subject: Always push tags to remotes --- git/mrconfig.ini | Bin 7515 -> 7543 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 081146d..7c96c90 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 0820b84028025826698943fd9cc8ed227f0b3149 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Apr 2018 11:29:46 -0300 Subject: Add config to download Datomic from Cognitect's Maven repo --- encrypted/Clojure/credentials.clj.gpg | Bin 1427 -> 1500 bytes encrypted/env.sh | Bin 2670 -> 2786 bytes lein/profiles.clj | Bin 530 -> 665 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/Clojure/credentials.clj.gpg b/encrypted/Clojure/credentials.clj.gpg index addba3c..538eb84 100644 Binary files a/encrypted/Clojure/credentials.clj.gpg and b/encrypted/Clojure/credentials.clj.gpg differ diff --git a/encrypted/env.sh b/encrypted/env.sh index 805c7ee..a4512dc 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ diff --git a/lein/profiles.clj b/lein/profiles.clj index f53b8c0..983ca4e 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From 9f934bacd376996890ba90938816801cf9f54c4a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Apr 2018 22:15:11 -0300 Subject: Add pixels as submodule and push to rsyncent master --- git/mrconfig.ini | Bin 7543 -> 7574 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 7c96c90..c1cd7cf 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From c6098c30ca5a7c7eabe5d31f6ba748ec34e0858c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Apr 2018 22:15:34 -0300 Subject: Add re-jump.el configuration --- emacs/re-jump.el | 57 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++ spacemacs.el | 3 ++- 2 files changed, 59 insertions(+), 1 deletion(-) create mode 100644 emacs/re-jump.el diff --git a/emacs/re-jump.el b/emacs/re-jump.el new file mode 100644 index 0000000..b86728f --- /dev/null +++ b/emacs/re-jump.el @@ -0,0 +1,57 @@ +;; Taken from: +;; https://github.com/oliyh/re-jump.el + +;;; re-jump.el --- emacs navigation for re-frame projects + +;; Copyright © 2017 Oliver Hine +;; +;; Author: Oliver Hine + +;; This program is free software: you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation, either version 3 of the License, or +;; (at your option) any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program. If not, see . + +;; This file is not part of GNU Emacs. + +;;; Commentary: + +;; Jump to registrations of re-frame subscriptions, event handlers and fx + +;;; Code: +(require 'cider-util) +(require 'cider-resolve) +(require 'cider-client) +(require 'cider-common) +(require 'cider-interaction) +(require 'clojure-mode) + +(defun re-frame-jump-to-reg () + (interactive) + (let* ((kw (cider-symbol-at-point 'look-back)) + (ns-qualifier (and + (string-match "^:+\\(.+\\)/.+$" kw) + (match-string 1 kw))) + (kw-ns (if ns-qualifier + (cider-resolve-alias (cider-current-ns) ns-qualifier) + (cider-current-ns))) + (kw-to-find (concat "::" (replace-regexp-in-string "^:+\\(.+/\\)?" "" kw)))) + + (when (and ns-qualifier (string= kw-ns (cider-current-ns))) + (error "Could not resolve alias \"%s\" in %s" ns-qualifier (cider-current-ns))) + + (progn (cider-find-ns "-" kw-ns) + (search-forward-regexp (concat "reg-[a-zA-Z-]*[ \\\n]+" kw-to-find) nil 'noerror)))) + +(global-set-key (kbd "M->") 're-frame-jump-to-reg) + +(provide 're-jump) +;;; re-jump.el ends here diff --git a/spacemacs.el b/spacemacs.el index 48d5db0..4c500e9 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -567,7 +567,8 @@ It is called immediately after `dotspacemacs/init', before layer configuration clojurex-mode cider-clojure-interaction-mode)) -(defvar custom-el-files '("~/dev/nu/nudev/ides/emacs/nu.el")) +(defvar custom-el-files '("~/dev/nu/nudev/ides/emacs/nu.el" + "~/annex/dev/code/dotfiles/emacs/re-jump.el")) (defvar custom-keybindings '(("C-x M-b" . ibuffer) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) -- cgit v1.2.3 From ca24a0389ee061ab38dafa24567fb53b3c2a9ae8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Apr 2018 23:38:40 -0300 Subject: Use custom blue PS1 status --- bash/colors.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/bash/colors.sh b/bash/colors.sh index 6266c10..13e98e1 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -97,14 +97,12 @@ export PS1='$(if [ $? != 0 ]; then \ fi)'$IBlack$Time12h$Color_Off' '$BYellow$PathShort/$Color_Off'\ $(git branch &>/dev/null;\ if [ $? -eq 0 ]; then \ - echo "$(echo `git status` | grep "Changes" > /dev/null 2>&1; \ - if [ "$?" != "0" ]; then \ - # @4 - Clean repository - nothing to commit - echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ - else \ - # @5 - Changes to working tree - echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ - fi)" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ + echo "$(\ + echo `git status` | grep "Changes" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "to publish your local commits" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [%s ^^^]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [%s vvv]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ + )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ fi)$(if [[ $IN_NIX_SHELL == 1 ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$Purple'nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' -- cgit v1.2.3 From 101ff555ceab7cfe9c3f8ce3c42fa734693cde38 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Apr 2018 12:16:44 -0300 Subject: Improve scratch capture mode template --- spacemacs.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 4c500e9..2cd63d9 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -722,11 +722,12 @@ This is the place where most of your configurations should be done. Unless it is org-agenda-files '("~/annex/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" org-default-notes-file "~/annex/txt/TODOs.org" + org-scratch-notes-file "~/annex/txt/scratch.org" org-diary-notes-file "~/annex/txt/Diary.org" org-capture-templates '(("t" "TODO" entry (file org-default-notes-file) "* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t) - ("s" "Scratch" entry (file org-default-notes-file) - "* Scratch" :clock-in t :clock-resume t) + ("s" "Scratch" entry (file org-scratch-notes-file) + "* %?\n%U\n" :clock-in t :clock-resume t) ("m" "Meeting" entry (file org-default-notes-file) "* MEETING with %? :MEETING:\n%t" :clock-in t :clock-resume t) ("d" "Diary" entry (file+datetree org-diary-notes-file) -- cgit v1.2.3 From 990dd9928582894782ccfbbea1d866e87a7cf4c8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Apr 2018 12:16:53 -0300 Subject: Fix lein-ancient warning: bump cljdev and add :reagion to s3-wagon config --- lein/profiles.clj | Bin 665 -> 529 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 983ca4e..b09902b 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From b557e3fc3d000acdb4aef70df131b9489411e57c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 4 Apr 2018 09:16:02 -0300 Subject: Add ios-core repo --- git/mrconfig.ini | Bin 7574 -> 7592 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index c1cd7cf..3c09b1e 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 8f5f0902df207f1adc8de57250e2e64d48c3c488 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Apr 2018 10:06:28 -0300 Subject: Add markdown command to configuration.nix --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8cc702f..ae0f820 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -133,6 +133,7 @@ redis alsaUtils # for xmonad volume commands git-sizer + multimarkdown # =markdown= ## NixOS -- cgit v1.2.3 From 5f036d04b531858722babca2fa354858f0ee8618 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 7 Apr 2018 17:58:05 -0300 Subject: Improve README on NixOS instructions --- README.org | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/README.org b/README.org index 05071a0..7b33c8b 100644 --- a/README.org +++ b/README.org @@ -2,9 +2,10 @@ ** ** NixOS *** Cleaning up the store -=sudo nix-env -p /nix/var/nix/profiles/per-user/root/channels --delete-generations old= -=sudo nix-env --list-generations -p /nix/var/nix/profiles/system= -=sudo nix-env --list-generations -p /nix/var/nix/profiles/per-user/root/channels= +#+BEGIN_SRC shell +$ sudo nix-env -p /nix/var/nix/profiles/per-user/root/channels --delete-generations old +$ sudo nix-env -p /nix/var/nix/profiles/system --delete-generations old +#+END_SRC ** Instructions - setting up a new installation (NixOS) *** 1. Download NixOS image from [[https://nixos.org/][the website]]. *** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= -- cgit v1.2.3 From 9040ab7783113c4840a6062cfa92607b0c40d499 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Apr 2018 02:38:29 -0300 Subject: Add pup command --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ae0f820..3fbd696 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -134,6 +134,7 @@ alsaUtils # for xmonad volume commands git-sizer multimarkdown # =markdown= + pup # command-line HTML parsing https://github.com/ericchiang/pup ## NixOS -- cgit v1.2.3 From 63879ac5b75b382a4ccf5a47ddcc9ae237affc04 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Apr 2018 12:16:19 -0300 Subject: Add binutils-unwrapped --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3fbd696..fe2f4e3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -135,6 +135,7 @@ git-sizer multimarkdown # =markdown= pup # command-line HTML parsing https://github.com/ericchiang/pup + binutils-unwrapped # =ar= command for cargo build ## NixOS -- cgit v1.2.3 From 92b7d8d35cc1e86ce050e03dc2b8930dd55eaecf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Apr 2018 18:31:43 -0300 Subject: Remove pixels repo --- git/mrconfig.ini | Bin 7592 -> 7568 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 3c09b1e..51a453d 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From fdaf45d65cbe8cbfb48fb2c765e0bd23089bcc87 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Apr 2018 18:34:40 -0300 Subject: Improve custom git status on PS1 --- bash/colors.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/colors.sh b/bash/colors.sh index 13e98e1..47019fd 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -99,8 +99,8 @@ $(git branch &>/dev/null;\ if [ $? -eq 0 ]; then \ echo "$(\ echo `git status` | grep "Changes" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "to publish your local commits" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [%s ^^^]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [%s vvv]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "to publish your local commits" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ fi)$(if [[ $IN_NIX_SHELL == 1 ]]; then\ -- cgit v1.2.3 From fef19edf290ae3c670bc80970646da513074d77b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Apr 2018 21:47:40 -0300 Subject: Add sayid Clojure plugin --- lein/profiles.clj | Bin 529 -> 582 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index b09902b..402b788 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From f73cb0262e3d826e106c8878cfb9ec18541d8b3f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 10 Apr 2018 18:00:29 -0300 Subject: Add android-foundation repo --- git/mrconfig.ini | Bin 7568 -> 7596 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 51a453d..bf37276 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 912e17b2f317dc3ce4db6ad0f15d08039ae6adde Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Apr 2018 13:14:41 -0300 Subject: Explicitly add username and passphrase reference to nu-maven repo --- lein/profiles.clj | Bin 582 -> 733 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 402b788..e2328db 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From cdb9c5d894b8bf6c9c5a8f2143d0b4afea49d1b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 12 Apr 2018 11:31:50 -0300 Subject: Add buck command --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fe2f4e3..765afbd 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -136,6 +136,7 @@ multimarkdown # =markdown= pup # command-line HTML parsing https://github.com/ericchiang/pup binutils-unwrapped # =ar= command for cargo build + buck ## NixOS -- cgit v1.2.3 From e611de7bc8dc20c1979b902f10e4043cdddfdab3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 14 Apr 2018 17:18:11 -0300 Subject: Add 1 git-crypt collaborator New collaborators: CD356060 EuAndreh --- .git-crypt/.gitattributes | 3 +++ .../0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg | Bin 0 -> 724 bytes 2 files changed, 3 insertions(+) create mode 100644 .git-crypt/.gitattributes create mode 100644 .git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg diff --git a/.git-crypt/.gitattributes b/.git-crypt/.gitattributes new file mode 100644 index 0000000..17ef601 --- /dev/null +++ b/.git-crypt/.gitattributes @@ -0,0 +1,3 @@ +# Do not edit this file. To specify the files to encrypt, create your own +# .gitattributes file in the directory where your files are. +* !filter !diff diff --git a/.git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg b/.git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg new file mode 100644 index 0000000..382b031 Binary files /dev/null and b/.git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg differ -- cgit v1.2.3 From 68a953bae840fcba1fe468f7c8dd9405fdae4e41 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 14 Apr 2018 17:18:50 -0300 Subject: Remove buck and add ant --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 765afbd..a6d2cae 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -136,7 +136,7 @@ multimarkdown # =markdown= pup # command-line HTML parsing https://github.com/ericchiang/pup binutils-unwrapped # =ar= command for cargo build - buck + ant ## NixOS -- cgit v1.2.3 From 4dd75616f52f4c5f45be09f139b0167c228cd223 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 14 Apr 2018 17:18:59 -0300 Subject: Add buck repo --- git/mrconfig.ini | Bin 7596 -> 7684 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index bf37276..abd950b 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From ac2e79e5b2297119e64e5bff08458176af1ffcb1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 14 Apr 2018 17:19:13 -0300 Subject: Update credentials.clj.gpg --- encrypted/Clojure/credentials.clj.gpg | Bin 1500 -> 1498 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/Clojure/credentials.clj.gpg b/encrypted/Clojure/credentials.clj.gpg index 538eb84..e20210c 100644 Binary files a/encrypted/Clojure/credentials.clj.gpg and b/encrypted/Clojure/credentials.clj.gpg differ -- cgit v1.2.3 From 0da33aac8e59aee2b719e42fd66e3ee5a098ea87 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 14 Apr 2018 22:18:13 -0300 Subject: Set NixOS envvar only on Linux --- bash/env.sh | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index c391036..4dd521c 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -47,13 +47,17 @@ export PATH="$HOME/.npm-packages/bin/:$PATH" # -# NixOS +# Leiningen # -export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt +export LEIN_SUPPRESS_USER_LEVEL_REPO_WARNINGS=1 + # -# Leiningen +# NixOS # -export LEIN_SUPPRESS_USER_LEVEL_REPO_WARNINGS=1 + +isLinux && { + export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt +} -- cgit v1.2.3 From 748d2a7f4f55df22487f709c8edea642c9d5bdd9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 00:11:36 -0300 Subject: Add encrypted AWS config --- bash/symlinks.sh | 4 ++++ encrypted/aws/config | Bin 0 -> 85 bytes encrypted/aws/credentials | Bin 0 -> 255 bytes 3 files changed, 4 insertions(+) create mode 100644 encrypted/aws/config create mode 100644 encrypted/aws/credentials diff --git a/bash/symlinks.sh b/bash/symlinks.sh index ccdf4a6..62cf45b 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -19,6 +19,10 @@ ln -fs /run/media/andreh/UTCLOUD ~/UTCLOUD mkdir -p ~/.lein ln -fs $DOTFILES/lein/profiles.clj ~/.lein/profiles.clj +mkdir -p ~/.aws +ln -fs $DOTFILES/encrypted/aws/config ~/.aws/config +ln -fs $DOTFILES/encrypted/aws/credentials ~/.aws/credentials + ln -fs $DOTFILES/Xmodmap.conf ~/.Xmodmap ln -fs $DOTFILES/tmux/tmux.conf ~/.tmux.conf diff --git a/encrypted/aws/config b/encrypted/aws/config new file mode 100644 index 0000000..6d7e290 Binary files /dev/null and b/encrypted/aws/config differ diff --git a/encrypted/aws/credentials b/encrypted/aws/credentials new file mode 100644 index 0000000..37f9ce1 Binary files /dev/null and b/encrypted/aws/credentials differ -- cgit v1.2.3 From 7bfe61a423d1e08b3a7b3bdad70563e0c9d62013 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 00:15:07 -0300 Subject: Add ios-cli setup configuration --- encrypted/aws/config | Bin 85 -> 99 bytes encrypted/aws/credentials | Bin 255 -> 371 bytes encrypted/nu/nurc.sh | Bin 3368 -> 3442 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/aws/config b/encrypted/aws/config index 6d7e290..ebdee51 100644 Binary files a/encrypted/aws/config and b/encrypted/aws/config differ diff --git a/encrypted/aws/credentials b/encrypted/aws/credentials index 37f9ce1..d69d4ff 100644 Binary files a/encrypted/aws/credentials and b/encrypted/aws/credentials differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index ddd3d85..d3c5283 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 74a2cb2512f77644cdffd2042a24a423e5985ddd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 00:32:19 -0300 Subject: Add extra ios-cli config --- encrypted/nu/nurc.sh | Bin 3442 -> 3652 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index d3c5283..95ded1b 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From d80aa4f5470a9bf364b61be10fcf334c61e034c8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 02:06:15 -0300 Subject: Add nvm bash config --- bash/facepalm/rotten-apple.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh index 0cdf329..afc5c7e 100644 --- a/bash/facepalm/rotten-apple.sh +++ b/bash/facepalm/rotten-apple.sh @@ -16,4 +16,8 @@ isMac && { alias ast="open -a \"Android Studio\"" + + export NVM_DIR="$HOME/.nvm" + [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm + [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion } -- cgit v1.2.3 From d7ed1b6726288d6190d136c3c7f266204cb10138 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 02:09:24 -0300 Subject: Use npmrc only on linux --- bash/symlinks.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 62cf45b..2d9d6ef 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -10,7 +10,9 @@ ln -fs $DOTFILES/git/gitignore ~/.gitignore_global ln -fs $DOTFILES/git/bash_git.sh ~/.bash_git ln -fs $DOTFILES/sbclrc.lisp ~/.sbclrc ln -fs $DOTFILES/inputrc.conf ~/.inputrc -ln -fs $DOTFILES/nixos/npmrc.sh ~/.npmrc +isLinux && { + ln -fs $DOTFILES/nixos/npmrc.sh ~/.npmrc +} ln -fs $DOTFILES/git/mrconfig.ini ~/.mrconfig -- cgit v1.2.3 From 3ffc29a9d96761f2b44ed401240c35421549df78 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 02:19:49 -0300 Subject: fix nu_services list and ANDROID_NDK envvar --- encrypted/nu/nurc.sh | Bin 3652 -> 3718 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 95ded1b..7d8013c 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From ff17156774c582885addb73511ad86d91db09e5c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Apr 2018 03:41:53 -0300 Subject: Reorder npm setup bash file --- bash/bashrc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 4a7f189..85efc72 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -12,9 +12,9 @@ source $DOTFILES/bash/youtube.sh source $DOTFILES/bash/tmuxinator-templates.sh source $DOTFILES/bash/fake-symlinks.sh source $DOTFILES/bash/init.sh +source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/bash/npm.sh source $DOTFILES/bash/x.sh -source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/encrypted/env.sh set -h -- cgit v1.2.3 From 4f549d3d19d4fea45df47b40faa29b1d25d1b43c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Apr 2018 10:26:06 -0300 Subject: Add common-bridge repo --- git/mrconfig.ini | Bin 7684 -> 7720 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index abd950b..a79c79d 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 192dbb733a9867ea7b5cf645c3488cc142274bd2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Apr 2018 23:43:11 -0300 Subject: Add symlink to SNEAKER --- bash/symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 2d9d6ef..5842d07 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -17,6 +17,7 @@ isLinux && { ln -fs $DOTFILES/git/mrconfig.ini ~/.mrconfig ln -fs /run/media/andreh/UTCLOUD ~/UTCLOUD +ln -fs /run/media/andreh/SNEAKER ~/SNEAKER mkdir -p ~/.lein ln -fs $DOTFILES/lein/profiles.clj ~/.lein/profiles.clj -- cgit v1.2.3 From b5cbd7193081018278008a2417d8dad79f3b19ce Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Apr 2018 23:43:23 -0300 Subject: Add git-remote-gcrypt repo --- git/mrconfig.ini | Bin 7720 -> 7831 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index a79c79d..c553c6b 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 00f73d517edd1f105f401ce3ef5dc09b08eb3d85 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Apr 2018 01:36:58 -0300 Subject: Add rbenv init config --- bash/facepalm/rotten-apple.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh index afc5c7e..2d5c0e4 100644 --- a/bash/facepalm/rotten-apple.sh +++ b/bash/facepalm/rotten-apple.sh @@ -20,4 +20,6 @@ isMac && { export NVM_DIR="$HOME/.nvm" [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion + + eval "$(rbenv init -)" } -- cgit v1.2.3 From 9b93f6dcc1d82d7807d58a242229ad57e874a0aa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Apr 2018 13:23:01 -0300 Subject: Improve mr hd subcommand --- git/mrconfig.ini | Bin 7831 -> 7846 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index c553c6b..db94119 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 926bac7ad81602b5590da6be1d11d08e21817c48 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Apr 2018 13:51:31 -0300 Subject: Fine tune mrconfig commands --- git/mrconfig.ini | Bin 7846 -> 7829 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index db94119..c3e9b9f 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 0ba3da0f3de05eb8995236722038f11390aafdbd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Apr 2018 18:09:04 -0300 Subject: Update new borg file --- .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp index 4aa94bc..095928e 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce index 3246f72..de18b93 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce differ -- cgit v1.2.3 From 6aedea0f323fcf8f81931de34b43c01129273ad6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Apr 2018 19:04:15 -0300 Subject: Try to fix Gnome keyring startup config --- bash/agents.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/agents.sh b/bash/agents.sh index 8b33b6a..8d7f397 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -5,6 +5,7 @@ eval "$(thefuck --alias f)" export GPG_TTY=$(tty) if [ -n "$DESKTOP_SESSION" ];then + eval $(gnome-keyring-daemon) eval $(gnome-keyring-daemon --start) export SSH_AUTH_SOCK fi -- cgit v1.2.3 From affb735a4913b30a58b114640a385596a20c7b08 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Apr 2018 19:32:09 -0300 Subject: Move back to old ssh agent config --- bash/agents.sh | 21 ++++++++++++++++----- 1 file changed, 16 insertions(+), 5 deletions(-) diff --git a/bash/agents.sh b/bash/agents.sh index 8d7f397..0fd307a 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -4,8 +4,19 @@ eval "$(thefuck --alias f)" export GPG_TTY=$(tty) -if [ -n "$DESKTOP_SESSION" ];then - eval $(gnome-keyring-daemon) - eval $(gnome-keyring-daemon --start) - export SSH_AUTH_SOCK -fi +export SSH_ENV="$HOME/.ssh/environment" +start_agent() { + echo "Initialising new SSH agent..." + ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" + echo succeeded + chmod 600 "${SSH_ENV}" + . "${SSH_ENV}" > /dev/null + ssh-add +} + +[ -f "${SSH_ENV}" ] && { + . "${SSH_ENV}" > /dev/null + ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { + start_agent + } +} || start_agent -- cgit v1.2.3 From 3dfd4f051916e50e226da0c3aa0c96ecb29dd039 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Apr 2018 23:29:47 -0300 Subject: Conditionally create symlinks depending on platform --- bash/platform.sh | 8 ++++++++ bash/symlinks.sh | 4 ++-- 2 files changed, 10 insertions(+), 2 deletions(-) diff --git a/bash/platform.sh b/bash/platform.sh index 4929341..67d8525 100644 --- a/bash/platform.sh +++ b/bash/platform.sh @@ -7,3 +7,11 @@ isMac () { isLinux () { [[ `uname` == 'Linux' ]] } + +isMac && { + export MEDIA_PREFIX=/Volumes +} + +isLinux && { + export MEDIA_PREFIX=/run/media/andreh +} diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 5842d07..933bb69 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -16,8 +16,8 @@ isLinux && { ln -fs $DOTFILES/git/mrconfig.ini ~/.mrconfig -ln -fs /run/media/andreh/UTCLOUD ~/UTCLOUD -ln -fs /run/media/andreh/SNEAKER ~/SNEAKER +ln -fs $MEDIA_PREFIX/UTCLOUD ~/UTCLOUD +ln -fs $MEDIA_PREFIX/SNEAKER ~/SNEAKER mkdir -p ~/.lein ln -fs $DOTFILES/lein/profiles.clj ~/.lein/profiles.clj -- cgit v1.2.3 From b7d93034f23ccf9a83ff6cc4f9214122d2904318 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Apr 2018 21:09:54 -0300 Subject: Add custom ANDROID_HOME for Linux/Mac --- encrypted/nu/nurc.sh | Bin 3718 -> 3800 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 7d8013c..0361c31 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 6269b6207b6b1d106383d2e7fdb08b6b65e80d6d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 28 Apr 2018 19:12:54 -0300 Subject: Fix typo in Linux ANDROID_HOME --- encrypted/nu/nurc.sh | Bin 3800 -> 3800 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 0361c31..8ee9ad2 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 285c27beb8b33a9e2286965dc999f836c83d1964 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 1 May 2018 19:38:12 -0300 Subject: Remove TODOs.org --- TODOs.org | 52 ---------------------------------------------------- 1 file changed, 52 deletions(-) delete mode 100644 TODOs.org diff --git a/TODOs.org b/TODOs.org deleted file mode 100644 index 15f6f9a..0000000 --- a/TODOs.org +++ /dev/null @@ -1,52 +0,0 @@ -* Tasks -* COMMENT DONE -** CANCELLED Put README steps in script? -** CANCELLED Add CI tests? -Instead of adding limited tests to CI (too many files would be encrypted), I'd rather run tests on every load. -Like in https://gitlab.com/EuAndreh/dotfiles/blob/6e83efca9550cce39375710863ef5acb495f6236/encrypted/nu/nurc.sh#L49-54. -** DONE Fix git sync -CLOSED: [2018-02-25 Sun 09:24] -Kind of fixed: made an alias for =git=. -** CANCELLED Implement proper =yt= -Not really relevant, =update-feed.sh= works. -** DONE Finish repo backup flow -CLOSED: [2018-02-25 Sun 09:23] -** DONE Add Haskell Stack to =$PATH=? -CLOSED: [2017-10-16 Mon 08:27] -#+BEGIN_SRC -Using generic bindist... - - % Total % Received % Xferd Average Speed Time Time Time Current - Dload Upload Total Spent Left Speed - 0 0 0 0 0 0 0 0 --:--:-- 0:00:01 --:--:-- 0 -100 619 0 619 0 0 334 0 --:--:-- 0:00:01 --:--:-- 1406 -100 12.8M 100 12.8M 0 0 1428k 0 0:00:09 0:00:09 --:--:-- 2599k -Installing Stack to: /usr/local/bin/stack... - -------------------------------------------------------------------------------- - -Stack has been installed to: /usr/local/bin/stack - -NOTE: You may need to run 'xcode-select --install' to set - up the Xcode command-line tools, which Stack uses. - -WARNING: '/Users/andreh/.local/bin' is not on your PATH. - For best results, please add it to the beginning of PATH in your profile. -#+END_SRC -** DONE Put ~/.ssh/know_hosts in annex -CLOSED: [2017-10-16 Mon 08:22] -** DONE Cleanup =bash/util.sh= -CLOSED: [2017-10-16 Mon 08:34] -** DONE Copy things properly in Tmux -CLOSED: [2017-10-16 Mon 08:27] -** DONE Improve podcast flow -CLOSED: [2017-10-16 Mon 08:59] -#+BEGIN_SRC shell -,git-annex-podcast-awesomeness() { - cd ~/annex/Banshee/podcasts - yellow "Checking for updates in registered podcasts..." - xargs git-annex importfeed < feeds.conf - end - cd - > /dev/null -} -#+END_SRC -- cgit v1.2.3 From f0acdfdf58f01e9ed3e86ac93b2a98770ee42bf3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 May 2018 15:31:58 -0300 Subject: Add AntennaPod repo --- git/mrconfig.ini | Bin 7829 -> 7947 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index c3e9b9f..1f4def6 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From fd566f8625b335317c4a90ce08b7b29cc87fed09 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 May 2018 15:43:42 -0300 Subject: Fix repo addr --- git/mrconfig.ini | Bin 7947 -> 7947 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 1f4def6..49a7e95 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From d57c73a4760d71ff472929a11d2b4f50e96fc20a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 May 2018 16:51:47 -0300 Subject: Remove clemenza repo --- git/mrconfig.ini | Bin 7947 -> 7929 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 49a7e95..0fa6eef 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From feefc280c724ca6259999fb2794eec32f70b0e6a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 May 2018 19:49:08 -0300 Subject: Add borg files --- .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp index 095928e..248a6f1 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce index de18b93..47f119b 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce differ -- cgit v1.2.3 From dbf02e62db35a6f365e63b3869d82dfe20a9cfac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 May 2018 19:50:22 -0300 Subject: Add custom copying commands for macOSxGNU/Linux --- bash/symlinks.sh | 2 ++ tmux/tmux-gnu-linux.conf | 3 +++ tmux/tmux-macos.conf | 2 ++ tmux/tmux.conf | 7 ++----- 4 files changed, 9 insertions(+), 5 deletions(-) create mode 100644 tmux/tmux-gnu-linux.conf create mode 100644 tmux/tmux-macos.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 933bb69..38a1284 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -29,6 +29,8 @@ ln -fs $DOTFILES/encrypted/aws/credentials ~/.aws/credentials ln -fs $DOTFILES/Xmodmap.conf ~/.Xmodmap ln -fs $DOTFILES/tmux/tmux.conf ~/.tmux.conf +ln -fs $DOTFILES/tmux/tmux-macos.conf ~/.tmux-macos.conf +ln -fs $DOTFILES/tmux/tmux-gnu-linux.conf ~/.tmux-gnu-linux.conf ## xmonad mkdir -p ~/.xmonad diff --git a/tmux/tmux-gnu-linux.conf b/tmux/tmux-gnu-linux.conf new file mode 100644 index 0000000..592655a --- /dev/null +++ b/tmux/tmux-gnu-linux.conf @@ -0,0 +1,3 @@ +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipbo +ard -i" \; display-message "Copied! Long-live tmux!" +bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" diff --git a/tmux/tmux-macos.conf b/tmux/tmux-macos.conf new file mode 100644 index 0000000..6ce3dbd --- /dev/null +++ b/tmux/tmux-macos.conf @@ -0,0 +1,2 @@ +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "pbcopy" \; display-message "Copied! Long-live tmux! It works on shitty macOS!" +bind-key y send-keys -X copy-pipe "pbcopy" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 9b38cbf..3ae1b39 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -12,10 +12,7 @@ bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" # Holy answer that properly implements copying from tmux! # https://unix.stackexchange.com/a/349020/276661 -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" - -# Copy to clipboard after making selection with keyboard. Usefull for text that spans over a full pane and can't be selected with the mouse. -bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" +if-shell "uname | grep -q Darwin" "source-file ~/.tmux-macos.conf" " source-file ~/.tmux-gnu-linux.conf" # Moving around panes bind-key h select-pane -L @@ -61,4 +58,4 @@ set -g default-terminal screen-256color set -sg escape-time 0 # Enable arrow key navigation -set-option -gw xterm-keys on \ No newline at end of file +set-option -gw xterm-keys on -- cgit v1.2.3 From 5550ea76228a78add28fb9cd25c22f615b22e470 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 May 2018 16:21:01 -0300 Subject: Add shell repo --- git/mrconfig.ini | Bin 7929 -> 7944 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 0fa6eef..874d1b5 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 06ea1bba08f6a7b5badaaea4f307c519a4ade9c7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 May 2018 09:58:55 -0300 Subject: Fix typo in tmux-gnu-linux.conf --- tmux/tmux-gnu-linux.conf | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/tmux/tmux-gnu-linux.conf b/tmux/tmux-gnu-linux.conf index 592655a..562974f 100644 --- a/tmux/tmux-gnu-linux.conf +++ b/tmux/tmux-gnu-linux.conf @@ -1,3 +1,2 @@ -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipbo -ard -i" \; display-message "Copied! Long-live tmux!" +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" -- cgit v1.2.3 From 1be2ff3a37216119152a1eca4816c58bb3fe5f2d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 May 2018 17:36:03 -0300 Subject: Add extra key symlink --- encrypted/nu/nurc.sh | Bin 3800 -> 3843 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 8ee9ad2..f481ce1 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From ce87579022a059b15619792d49c5464080e7563c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 May 2018 16:51:21 -0300 Subject: Add repos to mrconfig --- git/mrconfig.ini | Bin 7944 -> 8003 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 874d1b5..a42bd5f 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From a42f15918c3d4e76889f1fb1c5dfcd4b5989d7f3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 May 2018 22:22:56 -0300 Subject: Add scripts/gc.sh --- README.org | 7 ------- scripts/gc.sh | 13 +++++++++++++ 2 files changed, 13 insertions(+), 7 deletions(-) create mode 100755 scripts/gc.sh diff --git a/README.org b/README.org index 7b33c8b..081b492 100644 --- a/README.org +++ b/README.org @@ -1,11 +1,4 @@ * dotfiles -** -** NixOS -*** Cleaning up the store -#+BEGIN_SRC shell -$ sudo nix-env -p /nix/var/nix/profiles/per-user/root/channels --delete-generations old -$ sudo nix-env -p /nix/var/nix/profiles/system --delete-generations old -#+END_SRC ** Instructions - setting up a new installation (NixOS) *** 1. Download NixOS image from [[https://nixos.org/][the website]]. *** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= diff --git a/scripts/gc.sh b/scripts/gc.sh new file mode 100755 index 0000000..84717fb --- /dev/null +++ b/scripts/gc.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Cleaning up the NixOS store + +profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) + +for p in ${profiles[@]}; do + sudo nix-env --delete-generations old -p /nix/var/nix/profiles/$p +done + +nix-collect-garbage -d + +rm -rf ~/.local/share/Trash/files/* -- cgit v1.2.3 From aa1e9dc44ee82645b905b3104da9f994efade1a0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 17 May 2018 18:29:51 -0300 Subject: Add borg file --- .../location | Bin 42 -> 43 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location index eaafc18..1c2a214 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location differ -- cgit v1.2.3 From 76b280f31605ff92b4bd5298aefb94af6aa132db Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 May 2018 20:06:14 -0300 Subject: Update spacemacs generated list --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 2cd63d9..494fd47 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -751,7 +751,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (pipenv yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell pippel pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term mu4e-maildirs-extension mu4e-alert move-text mmm-mode minitest markdown-toc magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hy-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mu helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav elfeed-web elfeed-org elfeed-goodies editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode coffee-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line ac-ispell)))) + (rjsx-mode magithub ghub+ magit-popup git-commit ghub apiwrap with-editor json-navigator hierarchy yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hy-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode coffee-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 1db34eb60bbbe1f9407e36ffb17398932d5139e4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 May 2018 20:06:40 -0300 Subject: Update configuration.nix system.nixos.stateVersion --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a6d2cae..d2b35e1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -300,5 +300,5 @@ # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.stateVersion = "17.09"; # Did you read the comment? + system.nixos.stateVersion = "17.09"; # Did you read the comment? } -- cgit v1.2.3 From 89069eb8555d21329ee12aa804aa9f1229bd3b1f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 2 Jun 2018 12:14:30 -0300 Subject: Change yt-dl archive file --- bash/youtube.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index b64300d..7555363 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -4,7 +4,7 @@ export DEFAULT_PLAYLIST_END=15 download() { youtube-dl "$1" \ - --download-archive ~/annex/txt/youtube-dl-seen.conf \ + --download-archive ~/Nextcloud/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end $2 \ --output "~/Downloads/yt-dl/%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" -- cgit v1.2.3 From 14c07051801a186d70b349e3d83613e1b156730f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 2 Jun 2018 18:44:59 -0300 Subject: Move TODOs.org to ~/Nextcloud --- spacemacs.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 494fd47..c0f4eb3 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -572,7 +572,7 @@ It is called immediately after `dotspacemacs/init', before layer configuration (defvar custom-keybindings '(("C-x M-b" . ibuffer) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) - ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) + ("M-ç" . (lambda () (interactive) (find-file "~/Nextcloud/TODOs.org"))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-p" . interleave-mode) ("C-i" . evil-jump-forward) @@ -719,9 +719,9 @@ This is the place where most of your configurations should be done. Unless it is ;; Taken from: ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html - org-agenda-files '("~/annex/txt/TODOs.org") + org-agenda-files '("~/Nextcloud/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" - org-default-notes-file "~/annex/txt/TODOs.org" + org-default-notes-file "~/Nextcloud/TODOs.org" org-scratch-notes-file "~/annex/txt/scratch.org" org-diary-notes-file "~/annex/txt/Diary.org" org-capture-templates '(("t" "TODO" entry (file org-default-notes-file) -- cgit v1.2.3 From 5c5c5f586da5bbc1fc65a607e37c2d40565e1b77 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 2 Jun 2018 22:53:25 -0300 Subject: Add stup sbclrc --- sbclrc.lisp | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sbclrc.lisp b/sbclrc.lisp index e69de29..ab58ec5 100644 --- a/sbclrc.lisp +++ b/sbclrc.lisp @@ -0,0 +1,2 @@ +(defun tap (x) + x) -- cgit v1.2.3 From acfdd604f0f87b1427561ad2fe014aa54851330d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 4 Jun 2018 11:10:38 -0300 Subject: Add SBCL to configuration.nix --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d2b35e1..139a6e1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -154,6 +154,7 @@ ## Programming tools + sbcl stack leiningen python3 -- cgit v1.2.3 From 9e5bdda460cd9f395d0c782b32330cfd8d7cf76f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 4 Jun 2018 11:10:48 -0300 Subject: Update generated spacemacs stuff --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 494fd47..2360e31 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -751,7 +751,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (rjsx-mode magithub ghub+ magit-popup git-commit ghub apiwrap with-editor json-navigator hierarchy yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hy-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode coffee-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line ac-ispell)))) + (magit-svn async dash yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magithub magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hy-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 12f05dfe350b080b19b1df35112a1d5727ffabaf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 5 Jun 2018 00:08:02 -0300 Subject: known_hosts --- encrypted/SSH/known_hosts.txt | Bin 2742 -> 3093 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt index 9065805..d6bca8a 100644 Binary files a/encrypted/SSH/known_hosts.txt and b/encrypted/SSH/known_hosts.txt differ -- cgit v1.2.3 From 03c9691cc3aadfd695317972a81b80285e69b2b7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jun 2018 14:05:58 -0300 Subject: Use txt files inside txt/ folder --- bash/youtube.sh | 2 +- spacemacs.el | 6 +++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index 7555363..929d96d 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -4,7 +4,7 @@ export DEFAULT_PLAYLIST_END=15 download() { youtube-dl "$1" \ - --download-archive ~/Nextcloud/youtube-dl-seen.conf \ + --download-archive ~/Nextcloud/txt/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end $2 \ --output "~/Downloads/yt-dl/%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" diff --git a/spacemacs.el b/spacemacs.el index 90d4798..30ec670 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -572,7 +572,7 @@ It is called immediately after `dotspacemacs/init', before layer configuration (defvar custom-keybindings '(("C-x M-b" . ibuffer) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) - ("M-ç" . (lambda () (interactive) (find-file "~/Nextcloud/TODOs.org"))) + ("M-ç" . (lambda () (interactive) (find-file "~/Nextcloud/txt/TODOs.org"))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-p" . interleave-mode) ("C-i" . evil-jump-forward) @@ -719,9 +719,9 @@ This is the place where most of your configurations should be done. Unless it is ;; Taken from: ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html - org-agenda-files '("~/Nextcloud/TODOs.org") + org-agenda-files '("~/Nextcloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" - org-default-notes-file "~/Nextcloud/TODOs.org" + org-default-notes-file "~/Nextcloud/txt/TODOs.org" org-scratch-notes-file "~/annex/txt/scratch.org" org-diary-notes-file "~/annex/txt/Diary.org" org-capture-templates '(("t" "TODO" entry (file org-default-notes-file) -- cgit v1.2.3 From ae13f834d61d1bb42a1fc082dddf8547586bfb74 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 11 Jun 2018 17:42:26 -0300 Subject: Add extra CLI tools --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 139a6e1..d98f31b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -137,6 +137,8 @@ pup # command-line HTML parsing https://github.com/ericchiang/pup binutils-unwrapped # =ar= command for cargo build ant + nssTools # =pk12util= + gitAndTools.hub # GitHub helper ## NixOS -- cgit v1.2.3 From 620c30bdae60e25b3c47c4be91960f820dade58c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jun 2018 15:48:47 -0300 Subject: Add insomnia --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d98f31b..0530472 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -139,6 +139,7 @@ ant nssTools # =pk12util= gitAndTools.hub # GitHub helper + insomnia ## NixOS -- cgit v1.2.3 From 48efd1d80696067473c37fec10b76abab9c7f8f5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jun 2018 12:22:28 -0300 Subject: Add blankets repo --- git/mrconfig.ini | Bin 8003 -> 8021 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index a42bd5f..450a0d0 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 450a2f51490dbe4eeb28555e5541b0d90efbd8d5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 10:03:43 -0300 Subject: Improve default nu-service template --- encrypted/nu/tmux/templates/nu-service.yml | Bin 363 -> 356 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/tmux/templates/nu-service.yml b/encrypted/nu/tmux/templates/nu-service.yml index 78798d8..d48d9b0 100644 Binary files a/encrypted/nu/tmux/templates/nu-service.yml and b/encrypted/nu/tmux/templates/nu-service.yml differ -- cgit v1.2.3 From 0cdcc6e173ab16d5eb72b97e6dfd4739e43e88b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 10:03:54 -0300 Subject: Add ,u (usage) alias --- bash/aliases.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 3daf4e1..9889123 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -16,6 +16,12 @@ alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator" +,u() { + cd ~/annex; + git annex info --fast | grep available; + cd - > /dev/null; +} + # git alias ,s="git status" alias ,d="git diff" -- cgit v1.2.3 From d5c167ba0c8b6e28be5448ce8f427e0f76cfa014 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 10:04:04 -0300 Subject: Symlink Emacs cached file --- bash/symlinks.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 38a1284..b8c4c5e 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -32,6 +32,9 @@ ln -fs $DOTFILES/tmux/tmux.conf ~/.tmux.conf ln -fs $DOTFILES/tmux/tmux-macos.conf ~/.tmux-macos.conf ln -fs $DOTFILES/tmux/tmux-gnu-linux.conf ~/.tmux-gnu-linux.conf +## Emacs +ln -fs ~/Nextcloud/cache/projectile-bookmarks.eld ~/.emacs.d/.cache/projectile-bookmarks.eld + ## xmonad mkdir -p ~/.xmonad ln -fs $DOTFILES/xmonad/xsession.sh ~/.xsession -- cgit v1.2.3 From 5f1acce74c8b6ce65719fb9dda0d245cdcd0eab3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 21:43:30 -0300 Subject: borg files --- .../location | Bin 43 -> 42 bytes .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location index 1c2a214..eaafc18 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp index 248a6f1..4abb4e2 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce index 47f119b..6d24480 100644 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce and b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce differ -- cgit v1.2.3 From a312eb503dbff4732a8b6b6776646387853a7027 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 21:43:40 -0300 Subject: autojump hack --- bash/bashrc.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 85efc72..b387f9b 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -26,3 +26,5 @@ if [[ -z $IN_NIX_SHELL ]]; then else printf "" fi + +source $(dirname $(readlink $(which autojump)))/../share/bash-completion/completions/autojump.bash -- cgit v1.2.3 From 73985d777142941bcdccc33ad187cfa456dcd6ce Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 21:44:32 -0300 Subject: Add fix for macOS TLS Emacs error --- spacemacs.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 30ec670..70113be 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -2,6 +2,11 @@ ;; This file is loaded by Spacemacs at startup. ;; It must be stored in your home directory. +;; macOS TLS error, fix from: +;; https://blog.vifortech.com/posts/emacs-tls-fix/ +(require 'gnutls) +(add-to-list 'gnutls-trustfiles "/usr/local/etc/openssl/cert.pem") + (defun dotspacemacs/layers () "Layer configuration: This function should only modify configuration layer settings." -- cgit v1.2.3 From 4d88bae58ab424750caa7afe3a28f83396c1a35f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 21:45:08 -0300 Subject: Add note on autojump --- bash/bashrc.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index b387f9b..0888837 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -27,4 +27,5 @@ else printf "" fi +# FIXME source $(dirname $(readlink $(which autojump)))/../share/bash-completion/completions/autojump.bash -- cgit v1.2.3 From 165be66f24edc4f095fcccf41544b35a6cff82da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jun 2018 21:46:07 -0300 Subject: Add note on Emacs TLS --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 70113be..7fa5026 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -2,6 +2,7 @@ ;; This file is loaded by Spacemacs at startup. ;; It must be stored in your home directory. +;; FIXME ;; macOS TLS error, fix from: ;; https://blog.vifortech.com/posts/emacs-tls-fix/ (require 'gnutls) -- cgit v1.2.3 From ed43f26cf33a50106e749cd3cce5c13a762be2b0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jun 2018 16:25:11 -0300 Subject: Add symlink to autojump synced file --- bash/symlinks.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index b8c4c5e..96f0f9b 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -32,6 +32,9 @@ ln -fs $DOTFILES/tmux/tmux.conf ~/.tmux.conf ln -fs $DOTFILES/tmux/tmux-macos.conf ~/.tmux-macos.conf ln -fs $DOTFILES/tmux/tmux-gnu-linux.conf ~/.tmux-gnu-linux.conf +## autojump +ln -fs ~/Nextcloud/cache/autojump/ ~/.local/share/autojump/ + ## Emacs ln -fs ~/Nextcloud/cache/projectile-bookmarks.eld ~/.emacs.d/.cache/projectile-bookmarks.eld -- cgit v1.2.3 From aa966cde7be65fc41951269aa99ffe92630b960f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jun 2018 16:25:34 -0300 Subject: Remove deprecated layers --- spacemacs.el | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 7fa5026..b3c6c6e 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -39,18 +39,18 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - '(csv - rust + '(; csv + ; rust react sql perl5 perl6 purescript - windows-scripts + ; windows-scripts lua erlang elixir - python + ; python ansible yaml ruby @@ -80,12 +80,13 @@ This function should only modify configuration layer settings." restclient latex docker - pdf-tools + ; pdf-tools ;; media github nixos ;; tabbar - selectric) + ; selectric + ) ;; List of additional packages that will be installed without being ;; wrapped in a layer. If you need some configuration for these @@ -757,7 +758,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (magit-svn async dash yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magithub magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hy-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region exec-path-from-shell evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-search-highlight-persist evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adaptive-wrap ace-window ace-link ace-jump-helm-line ac-ispell)))) + (yapfify toml-mode swift-mode slime-company slime selectric-mode racer pyvenv pytest pyenv-mode py-isort psci purescript-mode psc-ide powershell pippel pipenv pip-requirements magithub ghub+ apiwrap magit-gh-pulls live-py-mode jinja2-mode importmagic epc ctable concurrent deferred helm-pydoc github-search github-clone git-commit gist gh marshal logito pcache ht flyspell-correct-helm flyspell-correct flycheck-rust flycheck-elm elm-mode cython-mode csv-mode company-lua lua-mode company-ansible company-anaconda common-lisp-snippets cargo rust-mode auto-dictionary ansible-doc ansible anaconda-mode pythonic yasnippet-snippets yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toc-org tide tagedit symon string-inflection sql-indent spaceline-all-the-icons smeargle slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters pug-mode popwin persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow macrostep lorem-ipsum livid-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc intero interleave indent-guide impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md fuzzy font-lock+ flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-ghci company-ghc company-cabal company-auctex column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-compile auctex-latexmk alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From cd68b628134c73ad37b4f0456b8ab541842164b8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jun 2018 16:25:41 -0300 Subject: Require exec-path-from-shell --- spacemacs.el | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index b3c6c6e..5c40167 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -631,13 +631,14 @@ This is the place where most of your configurations should be done. Unless it is "." 'spacemacs/jump-to-definition "," 'tide-jump-back) - ;; https://emacs.stackexchange.com/questions/17866/magit-how-to-use-systems-ssh-agent-and-dont-ask-for-password - (exec-path-from-shell-initialize) - (exec-path-from-shell-copy-env "SSH_AGENT_PID") - (exec-path-from-shell-copy-env "SSH_AUTH_SOCK") - - ;; github layer - (exec-path-from-shell-copy-env "EMACS_GITHUB_TOKEN") + ;; https://github.com/nubank/nudev/pull/509 + (when (require 'exec-path-from-shell nil 'noerror) + ;; https://emacs.stackexchange.com/questions/17866/magit-how-to-use-systems-ssh-agent-and-dont-ask-for-password + (exec-path-from-shell-initialize) + (exec-path-from-shell-copy-env "SSH_AGENT_PID") + (exec-path-from-shell-copy-env "SSH_AUTH_SOCK") + ;; github layer + (exec-path-from-shell-copy-env "EMACS_GITHUB_TOKEN")) ;; https://github.com/syl20bnr/spacemacs/issues/774 (unless (file-exists-p (concat spacemacs-cache-directory "undo")) -- cgit v1.2.3 From 1dc9bf03cf4b803897f7ceb62809b413285f7085 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jun 2018 22:59:53 -0300 Subject: Source autojump only on Linux --- bash/bashrc.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 0888837..3ee3df6 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -28,4 +28,6 @@ else fi # FIXME -source $(dirname $(readlink $(which autojump)))/../share/bash-completion/completions/autojump.bash +isLinux && { + source $(dirname $(readlink $(which autojump)))/../share/bash-completion/completions/autojump.bash +} -- cgit v1.2.3 From e53c74a413cdd755a1ef1d4d9fb17efca6c716e2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jun 2018 06:48:43 -0300 Subject: Add bind package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0530472..e254170 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -140,6 +140,7 @@ nssTools # =pk12util= gitAndTools.hub # GitHub helper insomnia + bind # =dig= ## NixOS -- cgit v1.2.3 From 1c03667a74b67b80bbdd517237a6349733ea9341 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jun 2018 06:53:24 -0300 Subject: Uncomment layers --- spacemacs.el | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 5c40167..812d641 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -39,18 +39,18 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - '(; csv - ; rust + '(csv + rust react sql perl5 perl6 purescript - ; windows-scripts + windows-scripts lua erlang elixir - ; python + python ansible yaml ruby -- cgit v1.2.3 From b1ff71765abb892ab586ab83230e407c5bd52c0c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jun 2018 12:26:46 -0300 Subject: Generated spacemacs stuff --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 812d641..bef36dc 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -759,7 +759,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (yapfify toml-mode swift-mode slime-company slime selectric-mode racer pyvenv pytest pyenv-mode py-isort psci purescript-mode psc-ide powershell pippel pipenv pip-requirements magithub ghub+ apiwrap magit-gh-pulls live-py-mode jinja2-mode importmagic epc ctable concurrent deferred helm-pydoc github-search github-clone git-commit gist gh marshal logito pcache ht flyspell-correct-helm flyspell-correct flycheck-rust flycheck-elm elm-mode cython-mode csv-mode company-lua lua-mode company-ansible company-anaconda common-lisp-snippets cargo rust-mode auto-dictionary ansible-doc ansible anaconda-mode pythonic yasnippet-snippets yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toc-org tide tagedit symon string-inflection sql-indent spaceline-all-the-icons smeargle slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters pug-mode popwin persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow macrostep lorem-ipsum livid-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc intero interleave indent-guide impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md fuzzy font-lock+ flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker diminish diff-hl define-word dante counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-ghci company-ghc company-cabal company-auctex column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-compile auctex-latexmk alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell)))) + (yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen unfill toml-mode toc-org tide typescript-mode tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons all-the-icons memoize spaceline powerline smeargle slime-company slime slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci purescript-mode psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-category-capture org-present org-pomodoro alert log4e gntp org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magithub ghub+ apiwrap magit-svn magit-gitflow magit-gh-pulls macrostep lorem-ipsum livid-mode skewer-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator hierarchy js2-refactor js2-mode js-doc jinja2-mode intero interleave indent-guide importmagic epc ctable concurrent deferred impatient-mode simple-httpd hungry-delete htmlize hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers parent-mode highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose window-purpose imenu-list helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore request helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets haml-mode google-translate golden-ratio gnuplot gitignore-mode github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe+ git-gutter-fringe fringe-helper git-gutter+ git-gutter gist gh marshal logito pcache ht gh-md fuzzy flyspell-correct-helm flyspell-correct flycheck-rust flycheck-pos-tip pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido flx fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit magit git-commit ghub let-alist with-editor evil-lisp-state evil-lion evil-indent-plus evil-iedit-state iedit evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens smartparens evil-args evil-anzu anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker json-mode tablist magit-popup docker-tramp json-snatcher json-reformat diff-hl define-word dante lcr flycheck cython-mode csv-mode counsel-projectile projectile counsel swiper ivy company-web web-completion-data company-tern dash-functional tern company-statistics company-restclient restclient know-your-http-well company-plsense company-nixos-options nixos-options company-lua lua-mode company-ghci company-ghc ghc haskell-mode company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor inflections edn multiple-cursors paredit peg clean-aindent-mode cider-eval-sexp-fu eval-sexp-fu highlight cider seq spinner queue clojure-mode chruby centered-cursor-mode cargo markdown-mode rust-mode bundler inf-ruby browse-at-remote auto-yasnippet yasnippet auto-highlight-symbol auto-dictionary auto-compile packed auctex-latexmk auctex ansible-doc ansible anaconda-mode pythonic f alchemist s company dash elixir-mode pkg-info epl aggressive-indent ace-window ace-link ace-jump-helm-line helm avy helm-core ac-ispell auto-complete popup which-key use-package pcre2el org-plus-contrib hydra font-lock+ evil goto-chg undo-tree diminish bind-map bind-key async)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 4c2632c5baf66c9f59eed7e4e6b24d622fc102c8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jun 2018 12:27:10 -0300 Subject: Bump cider-nrepl --- lein/profiles.clj | Bin 733 -> 733 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index e2328db..ae2aa82 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From 5e0dc837a383de67d669c7b1910a579ee52459ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jun 2018 22:57:01 -0300 Subject: Remove unused layers --- spacemacs.el | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index bef36dc..59fb785 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -80,13 +80,9 @@ This function should only modify configuration layer settings." restclient latex docker - ; pdf-tools ;; media github - nixos - ;; tabbar - ; selectric - ) + nixos) ;; List of additional packages that will be installed without being ;; wrapped in a layer. If you need some configuration for these -- cgit v1.2.3 From da065017b18449c24731968553d23b06f80ca824 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 27 Jun 2018 20:26:36 -0300 Subject: Add tern from npm --- bash/npm.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/npm.sh b/bash/npm.sh index f0a5d30..9e1f1c6 100644 --- a/bash/npm.sh +++ b/bash/npm.sh @@ -11,3 +11,4 @@ npm_i eq edn-eq npm_i react-native react-native-cli npm_i detox detox-cli npm_i xml2json xml2json-command +npm_i tern tern -- cgit v1.2.3 From 83eeee0933a6d12e90c66e7e68631f7fb6fc064c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 27 Jun 2018 20:26:47 -0300 Subject: Load Quicklisp CL code in SBCL startup --- sbclrc.lisp | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sbclrc.lisp b/sbclrc.lisp index ab58ec5..3a931d0 100644 --- a/sbclrc.lisp +++ b/sbclrc.lisp @@ -1,2 +1,6 @@ -(defun tap (x) - x) +;;; The following lines added by ql:add-to-init-file: +#-quicklisp +(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" + (user-homedir-pathname)))) + (when (probe-file quicklisp-init) + (load quicklisp-init))) -- cgit v1.2.3 From bb768f75453b2c16a08ce465cc36dec12a3baa1d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:08:44 -0300 Subject: Erase Docker images in gc.sh The goal is to clean disk space, so removing Docker images makes sense. --- scripts/gc.sh | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index 84717fb..d08c008 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -# Cleaning up the NixOS store +## Cleaning up the NixOS store profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) @@ -8,6 +8,24 @@ for p in ${profiles[@]}; do sudo nix-env --delete-generations old -p /nix/var/nix/profiles/$p done +nix-env --delete-generations old + +nix-store --gc nix-collect-garbage -d + +## Cleanup up the Trash folder + rm -rf ~/.local/share/Trash/files/* + + +## Erasing docker images + +docker system prune -a +docker rmi $(docker images -a -q) +docker rm $(docker ps -a -f status=exited -q) + +docker stop $(docker ps -a -q) +docker rm $(docker ps -a -q) + +docker volume prune -- cgit v1.2.3 From d76cc595e47c054237ecbe3e727801a7e11f7339 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:11:44 -0300 Subject: Remove $EMACS_GITHUB_TOKEN env var --- bash/fake-symlinks.sh | 2 +- encrypted/env.sh | Bin 2786 -> 2781 bytes git/gitconfig.ini | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index cd9dc6a..69a8e5c 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -if [[ -n "$EMACS_GITHUB_TOKEN" ]]; then +if [[ -n "$GITHUB_TOKEN" ]]; then cat $DOTFILES/git/gitconfig.ini | envsubst > ~/.gitconfig fi diff --git a/encrypted/env.sh b/encrypted/env.sh index a4512dc..ec579bb 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 45a9af9..1662b59 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -44,5 +44,5 @@ [commit] gpgsign = true [github] - oauth-token = $EMACS_GITHUB_TOKEN + oauth-token = $GITHUB_TOKEN user = EuAndreh -- cgit v1.2.3 From 95ea7090b52566cbf6db7cb215b91e8c01ed070e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:12:16 -0300 Subject: Add SSH_SERVER_FOLDER env var --- encrypted/env.sh | Bin 2781 -> 2873 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/env.sh b/encrypted/env.sh index ec579bb..967792b 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ -- cgit v1.2.3 From 8f28b93508c52e3cd8fbd39c543850ec762fb55e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:12:49 -0300 Subject: Fix $IN_NIX_SHELL PS1 check --- bash/bashrc.sh | 6 ------ bash/colors.sh | 2 +- 2 files changed, 1 insertion(+), 7 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 3ee3df6..e46d8d7 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -20,12 +20,6 @@ source $DOTFILES/encrypted/env.sh set -h source ~/dev/nu/nucli/nu.bashcompletion -# Here's the place to do custom nix-shell config -if [[ -z $IN_NIX_SHELL ]]; then - printf "" -else - printf "" -fi # FIXME isLinux && { diff --git a/bash/colors.sh b/bash/colors.sh index 47019fd..dde3dd7 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -103,7 +103,7 @@ if [ $? -eq 0 ]; then \ echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ -fi)$(if [[ $IN_NIX_SHELL == 1 ]]; then\ +fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$Purple'nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' -- cgit v1.2.3 From 10a4112e19f97fd3cc0302c1bc3adb83eabbf2e6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:13:18 -0300 Subject: Remvoe git alias --- bash/aliases.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 9889123..304126b 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -9,7 +9,6 @@ alias ll="ls -lhF" alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" alias copy="tr -d '\n' | xclip -sel clip" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" -alias git="AWS_ACCESS_KEY_ID=$ANNEX_AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$ANNEX_AWS_SECRET_ACCESS_KEY git" alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From e5e310ba243d19187466c8612d9ad1e2a0fa5828 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:13:23 -0300 Subject: Make =watch= work with aliases --- bash/aliases.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 304126b..fac98a7 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -9,6 +9,8 @@ alias ll="ls -lhF" alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" alias copy="tr -d '\n' | xclip -sel clip" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" +# Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 +alias watch="watch " alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From f1b502282bb93cded4e892aee48541293d3da731 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:14:06 -0300 Subject: Remove autojump completion hack --- bash/bashrc.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index e46d8d7..5c351fd 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -20,8 +20,3 @@ source $DOTFILES/encrypted/env.sh set -h source ~/dev/nu/nucli/nu.bashcompletion - -# FIXME -isLinux && { - source $(dirname $(readlink $(which autojump)))/../share/bash-completion/completions/autojump.bash -} -- cgit v1.2.3 From 96b2e9bc6ee62016bd886bd2616cf525f2ad9503 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:14:15 -0300 Subject: Always dump env for Spacemacs --- bash/bashrc.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 5c351fd..0e2f264 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -20,3 +20,4 @@ source $DOTFILES/encrypted/env.sh set -h source ~/dev/nu/nucli/nu.bashcompletion +env > ~/.emacs.d/private/spacemacs.env -- cgit v1.2.3 From e7b3f2639d9dc20df2fafa705694bc30a1343d31 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Jul 2018 12:14:28 -0300 Subject: Fix custom bin $PATH --- bash/env.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 4dd521c..93d03b4 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash - -export PATH="$HOME/annex/bin/:$PATH" +export PATH="$HOME/Nextcloud/bin/:$PATH" # # Git Annex -- cgit v1.2.3 From 8239545499927ff3b3370a281b9af397f073292c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 4 Jul 2018 05:57:48 -0300 Subject: Add ssh know_host --- encrypted/SSH/known_hosts.txt | Bin 3093 -> 3287 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt index d6bca8a..69b0a41 100644 Binary files a/encrypted/SSH/known_hosts.txt and b/encrypted/SSH/known_hosts.txt differ -- cgit v1.2.3 From 115723cfc70aec9d23bfc2354c64fb9947c3cfb4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 04:03:33 -0300 Subject: Add know_host entries --- encrypted/SSH/known_hosts.txt | Bin 3287 -> 3656 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt index 69b0a41..618f214 100644 Binary files a/encrypted/SSH/known_hosts.txt and b/encrypted/SSH/known_hosts.txt differ -- cgit v1.2.3 From 8bb691c7816f73a5bb5b8eca515774b209a4d254 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 04:03:46 -0300 Subject: Add songbooks env vars --- encrypted/env.sh | Bin 2873 -> 3046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/env.sh b/encrypted/env.sh index 967792b..07cb5f6 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ -- cgit v1.2.3 From 549357c2ef0a7a32a310730a2cf291ba94e98014 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 04:04:00 -0300 Subject: Subscribe to DotA Digest --- encrypted/scripts/video-feed.sh | Bin 2411 -> 2475 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index e8f623a..6298790 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 13465a968eba6912231c0819419f2bc9f844dc09 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 04:06:04 -0300 Subject: Add VPS scripts and configuration - add scp.sh to cp relevant deployment files; - add docker-compose.yml (encrypted) and push-receive-redeploy.sh; --- encrypted/docker-compose.yml | Bin 0 -> 1778 bytes push-receive-redeploy.sh | 6 ++++++ scripts/scp.sh | 4 ++++ 3 files changed, 10 insertions(+) create mode 100644 encrypted/docker-compose.yml create mode 100755 push-receive-redeploy.sh create mode 100755 scripts/scp.sh diff --git a/encrypted/docker-compose.yml b/encrypted/docker-compose.yml new file mode 100644 index 0000000..cf94fcf Binary files /dev/null and b/encrypted/docker-compose.yml differ diff --git a/push-receive-redeploy.sh b/push-receive-redeploy.sh new file mode 100755 index 0000000..87fecd5 --- /dev/null +++ b/push-receive-redeploy.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +cd ~/ +docker pull registry.gitlab.com/euandreh/songbooks/prod:latest +docker-compose stop songbooks_app +docker-compose up -d --no-deps songbooks_app diff --git a/scripts/scp.sh b/scripts/scp.sh new file mode 100755 index 0000000..01e5d02 --- /dev/null +++ b/scripts/scp.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +scp "$DOTFILES/encrypted/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" +scp "$DOTFILES/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" -- cgit v1.2.3 From 4ba46c48a1d176d53d9179d3e82df3e1d3c8c786 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:16:41 -0300 Subject: Update dotspacemacs-* values with new version of Spacemacs --- spacemacs.el | 126 ++++++++++++++++++++++++++++++++++------------------------- 1 file changed, 73 insertions(+), 53 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 59fb785..1268e53 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -71,7 +71,7 @@ This function should only modify configuration layer settings." shell-default-height 30 shell-default-position 'bottom) (spell-checking :variables - spell-checking-enable-by-default nil) + spell-checking-enable-auto-dictionary t) syntax-checking version-control elm @@ -119,6 +119,25 @@ It should only modify the values of Spacemacs settings." ;; This setq-default sexp is an exhaustive list of all the supported ;; spacemacs settings. (setq-default + ;; If non-nil then enable support for the portable dumper. You'll need + ;; to compile Emacs 27 from source following the instructions in file + ;; EXPERIMENTAL.org at to root of the git repository. + ;; (default nil) + dotspacemacs-enable-emacs-pdumper nil + + ;; File path pointing to emacs 27.1 executable compiled with support + ;; for the portable dumper (this is currently the branch pdumper). + ;; (default "emacs-27.0.50") + dotspacemacs-emacs-pdumper-executable-file "emacs-27.0.50" + + ;; Name of the Spacemacs dump file. This is the file will be created by the + ;; portable dumper in the cache directory under dumps sub-directory. + ;; To load it when starting Emacs add the parameter `--dump-file' + ;; when invoking Emacs 27.1 executable on the command line, for instance: + ;; ./emacs --dump-file=~/.emacs.d/.cache/dumps/spacemacs.pdmp + ;; (default spacemacs.pdmp) + dotspacemacs-emacs-dumper-dump-file "spacemacs.pdmp" + ;; If non-nil ELPA repositories are contacted via HTTPS whenever it's ;; possible. Set it to nil if you have no way to use HTTPS in your ;; environment, otherwise it is strongly recommended to let it set to t. @@ -131,9 +150,15 @@ It should only modify the values of Spacemacs settings." ;; (default 5) dotspacemacs-elpa-timeout 5 + ;; Set `gc-cons-threshold' and `gc-cons-percentage' when startup finishes. + ;; This is an advanced option and should not be changed unless you suspect + ;; performance issues due to garbage collection operations. + ;; (default '(100000000 0.1)) + dotspacemacs-gc-cons '(100000000 0.1) + ;; If non-nil then Spacelpa repository is the primary source to install - ;; a locked version of packages. If nil then Spacemacs will install the lastest - ;; version of packages from MELPA. (default nil) + ;; a locked version of packages. If nil then Spacemacs will install the + ;; latest version of packages from MELPA. (default nil) dotspacemacs-use-spacelpa nil ;; If non-nil then verify the signature for downloaded Spacelpa archives. @@ -144,7 +169,8 @@ It should only modify the values of Spacemacs settings." ;; when the current branch is not `develop'. Note that checking for ;; new versions works via git commands, thus it calls GitHub services ;; whenever you start Emacs. (default nil) - dotspacemacs-check-for-update t + dotspacemacs-check-for-update nil + ;; If non-nil, a form that evaluates to a package directory. For example, to ;; use different package directories for different Emacs versions, set this ;; to `emacs-version'. (default 'emacs-version) @@ -157,8 +183,10 @@ It should only modify the values of Spacemacs settings." ;; section of the documentation for details on available variables. ;; (default 'vim) dotspacemacs-editing-style 'hybrid - ;; If non nil output loading progress in `*Messages*' buffer. (default nil) - dotspacemacs-verbose-loading t + + ;; If non-nil output loading progress in `*Messages*' buffer. (default nil) + dotspacemacs-verbose-loading nil + ;; Specify the startup banner. Default value is `official', it displays ;; the official spacemacs logo. An integer value is the index of text ;; banner, `random' chooses a random text banner in `core/banners' @@ -199,7 +227,7 @@ It should only modify the values of Spacemacs settings." ;; to create your own spaceline theme. Value can be a symbol or list with\ ;; additional properties. ;; (default '(spacemacs :separator wave :separator-scale 1.5)) - dotspacemacs-mode-line-theme 'spacemacs ;;'(spacemacs :separator wave :separator-scale 1.5) + dotspacemacs-mode-line-theme '(spacemacs :separator wave :separator-scale 1.5) ;; If non-nil the cursor color matches the state color in GUI Emacs. ;; (default t) @@ -242,33 +270,26 @@ It should only modify the values of Spacemacs settings." ;; works in the GUI. (default nil) dotspacemacs-distinguish-gui-tab nil - ;; If non-nil `Y' is remapped to `y$' in Evil states. (default nil) - dotspacemacs-remap-Y-to-y$ nil - - ;; If non-nil, the shift mappings `<' and `>' retain visual state if used - ;; there. (default t) - dotspacemacs-retain-visual-state-on-shift t - - ;; If non-nil, `J' and `K' move lines up and down when in visual mode. - ;; (default nil) - dotspacemacs-visual-line-move-text t - ;; If non nil, inverse the meaning of `g' in `:substitute' Evil ex-command. - ;; (default nil) - dotspacemacs-ex-substitute-global nil - ;; Name of the default layout (default "Default") dotspacemacs-default-layout-name "annex+TODOs/dotfiles/global-config" - ;; If non nil the default layout name is displayed in the mode-line. + + ;; If non-nil the default layout name is displayed in the mode-line. ;; (default nil) dotspacemacs-display-default-layout nil ;; If non-nil then the last auto saved layouts are resumed automatically upon ;; start. (default nil) - dotspacemacs-auto-resume-layouts nil ;; t + dotspacemacs-auto-resume-layouts nil + + ;; If non-nil, auto-generate layout name when creating new layouts. Only has + ;; effect when using the "jump to layout by number" commands. (default nil) + dotspacemacs-auto-generate-layout-names nil + ;; Size (in MB) above which spacemacs will prompt to open the large file ;; literally to avoid performance issues. Opening a file literally means that ;; no major mode or minor modes are active. (default is 1) - dotspacemacs-large-file-size 5 + dotspacemacs-large-file-size 1 + ;; Location where to auto-save files. Possible values are `original' to ;; auto-save the file in-place, `cache' to auto-save the file to another ;; file stored in the cache directory and `nil' to disable auto-saving. @@ -278,24 +299,11 @@ It should only modify the values of Spacemacs settings." ;; Maximum number of rollback slots to keep in the cache. (default 5) dotspacemacs-max-rollback-slots 5 - ;; If non-nil, `helm' will try to minimize the space it uses. (default nil) - dotspacemacs-helm-resize nil - - ;; if non-nil, the helm header is hidden when there is only one source. + ;; If non-nil, the paste transient-state is enabled. While enabled, pressing + ;; `p' several times cycles through the elements in the `kill-ring'. ;; (default nil) - dotspacemacs-helm-no-header t - ;; define the position to display `helm', options are `bottom', `top', - ;; `left', or `right'. (default 'bottom) - dotspacemacs-helm-position 'bottom - - ;; Controls fuzzy matching in helm. If set to `always', force fuzzy matching - ;; in all non-asynchronous sources. If set to `source', preserve individual - ;; source settings. Else, disable fuzzy matching in all sources. - ;; (default 'always) - dotspacemacs-helm-use-fuzzy 'source - ;; If non nil the paste micro-state is enabled. When enabled pressing `p` - ;; several times cycle between the kill ring content. (default nil) - dotspacemacs-enable-paste-transient-state t + dotspacemacs-enable-paste-transient-state nil + ;; Which-key delay in seconds. The which-key buffer is the popup listing ;; the commands bound to the current keystroke sequence. (default 0.4) dotspacemacs-which-key-delay 0.4 @@ -321,7 +329,8 @@ It should only modify the values of Spacemacs settings." ;; If non-nil the frame is fullscreen when Emacs starts up. (default nil) ;; (Emacs 24.4+ only) dotspacemacs-fullscreen-at-startup t - ;; If non nil `spacemacs/toggle-fullscreen' will not use native fullscreen. + + ;; If non-nil `spacemacs/toggle-fullscreen' will not use native fullscreen. ;; Use to disable fullscreen animations in OSX. (default nil) dotspacemacs-fullscreen-use-non-native nil @@ -346,7 +355,9 @@ It should only modify the values of Spacemacs settings." ;; If non-nil show the color guide hint for transient state keys. (default t) dotspacemacs-show-transient-state-color-guide t - ;; If non-nil unicode symbols are displayed in the mode line. (default t) + ;; If non-nil unicode symbols are displayed in the mode line. + ;; If you use Emacs as a daemon and wants unicode characters only in GUI set + ;; the value to quoted `display-graphic-p'. (default t) dotspacemacs-mode-line-unicode-symbols t ;; If non-nil smooth scrolling (native-scrolling) is enabled. Smooth @@ -368,6 +379,7 @@ It should only modify the values of Spacemacs settings." ;; :size-limit-kb 1000) ;; (default nil) dotspacemacs-line-numbers '(:relative t :disabled-for-modes org-mode pdf-view-mode) + ;; Code folding method. Possible values are `evil' and `origami'. ;; (default 'evil) dotspacemacs-folding-method 'evil @@ -384,19 +396,27 @@ It should only modify the values of Spacemacs settings." ;; Select a scope to highlight delimiters. Possible values are `any', ;; `current', `all' or `nil'. Default is `all' (highlight any scope and ;; emphasis the current one). (default 'all) - dotspacemacs-highlight-delimiters nil - ;; If non nil, advise quit functions to keep server open when quitting. + dotspacemacs-highlight-delimiters 'all + + ;; If non-nil, start an Emacs server if one is not already running. + ;; (default nil) + dotspacemacs-enable-server nil + + ;; Set the emacs server socket location. + ;; If nil, uses whatever the Emacs default is, otherwise a directory path + ;; like \"~/.emacs.d/server\". It has no effect if + ;; `dotspacemacs-enable-server' is nil. + ;; (default nil) + dotspacemacs-server-socket-dir nil + + ;; If non-nil, advise quit functions to keep server open when quitting. ;; (default nil) dotspacemacs-persistent-server nil ;; List of search tool executable names. Spacemacs uses the first installed - ;; tool of the list. Supported tools are `ag', `pt', `ack' and `grep'. - ;; (default '("ag" "pt" "ack" "grep")) - dotspacemacs-search-tools '("ag") - ;; The default package repository used if no explicit repository has been - ;; specified with an installed package. - ;; Not used for now. (default nil) - dotspacemacs-default-package-repository nil + ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'. + ;; (default '("rg" "ag" "pt" "ack" "grep")) + dotspacemacs-search-tools '("rg" "ag" "pt" "ack" "grep") ;; Format specification for setting the frame title. ;; %a - the `abbreviated-file-name', or `buffer-name' @@ -755,7 +775,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen unfill toml-mode toc-org tide typescript-mode tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons all-the-icons memoize spaceline powerline smeargle slime-company slime slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci purescript-mode psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-category-capture org-present org-pomodoro alert log4e gntp org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magithub ghub+ apiwrap magit-svn magit-gitflow magit-gh-pulls macrostep lorem-ipsum livid-mode skewer-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator hierarchy js2-refactor js2-mode js-doc jinja2-mode intero interleave indent-guide importmagic epc ctable concurrent deferred impatient-mode simple-httpd hungry-delete htmlize hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers parent-mode highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose window-purpose imenu-list helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore request helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets haml-mode google-translate golden-ratio gnuplot gitignore-mode github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe+ git-gutter-fringe fringe-helper git-gutter+ git-gutter gist gh marshal logito pcache ht gh-md fuzzy flyspell-correct-helm flyspell-correct flycheck-rust flycheck-pos-tip pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido flx fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit magit git-commit ghub let-alist with-editor evil-lisp-state evil-lion evil-indent-plus evil-iedit-state iedit evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens smartparens evil-args evil-anzu anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dockerfile-mode docker json-mode tablist magit-popup docker-tramp json-snatcher json-reformat diff-hl define-word dante lcr flycheck cython-mode csv-mode counsel-projectile projectile counsel swiper ivy company-web web-completion-data company-tern dash-functional tern company-statistics company-restclient restclient know-your-http-well company-plsense company-nixos-options nixos-options company-lua lua-mode company-ghci company-ghc ghc haskell-mode company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor inflections edn multiple-cursors paredit peg clean-aindent-mode cider-eval-sexp-fu eval-sexp-fu highlight cider seq spinner queue clojure-mode chruby centered-cursor-mode cargo markdown-mode rust-mode bundler inf-ruby browse-at-remote auto-yasnippet yasnippet auto-highlight-symbol auto-dictionary auto-compile packed auctex-latexmk auctex ansible-doc ansible anaconda-mode pythonic f alchemist s company dash elixir-mode pkg-info epl aggressive-indent ace-window ace-link ace-jump-helm-line helm avy helm-core ac-ispell auto-complete popup which-key use-package pcre2el org-plus-contrib hydra font-lock+ evil goto-chg undo-tree diminish bind-map bind-key async)))) + (web-mode pyvenv pipenv org-download ob-restclient nix-mode magithub intero gitignore-templates evil-magit evil-goggles dockerfile-mode docker company-ansible aggressive-indent counsel ivy smartparens projectile magit rust-mode helm helm-core cider sesman clojure-mode js2-mode slime spaceline org-plus-contrib hydra yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit tablist symon swiper swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pytest pyenv-mode py-isort pug-mode psci psc-ide powershell powerline popwin pippel pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-bullets org-brain open-junk-file ob-http ob-elixir neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magit-svn magit-gitflow magit-gh-pulls macrostep lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator json-mode js2-refactor js-doc jinja2-mode interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist ghub+ gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode docker-tramp diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From bf106243933fb19dec1f78921afa63dd280fac44 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:17:03 -0300 Subject: Add nu-clojure layer --- spacemacs.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 1268e53..539ae18 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -56,7 +56,9 @@ This function should only modify configuration layer settings." ruby swift typescript - clojure + (clojure :variables + clojure-enable-fancify-symbols t) + nu-clojure haskell javascript finance -- cgit v1.2.3 From 1c0f02dee1e71f1e271fb7903ac69ef6371b0f3d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:17:12 -0300 Subject: Add ansible layer --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 539ae18..8e41dc4 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -82,7 +82,7 @@ This function should only modify configuration layer settings." restclient latex docker - ;; media + ansible github nixos) -- cgit v1.2.3 From 95f7c7fbb7bff1951ecf1e4c99463c7e610aae5e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:20:46 -0300 Subject: Cleanup Spacemacs custom Elisp code --- spacemacs.el | 234 ++++++++++++++--------------------------------------------- 1 file changed, 54 insertions(+), 180 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 8e41dc4..8d5c5ee 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -2,12 +2,6 @@ ;; This file is loaded by Spacemacs at startup. ;; It must be stored in your home directory. -;; FIXME -;; macOS TLS error, fix from: -;; https://blog.vifortech.com/posts/emacs-tls-fix/ -(require 'gnutls) -(add-to-list 'gnutls-trustfiles "/usr/local/etc/openssl/cert.pem") - (defun dotspacemacs/layers () "Layer configuration: This function should only modify configuration layer settings." @@ -93,11 +87,9 @@ This function should only modify configuration layer settings." ;; To use a local version of a package, use the `:location' property: ;; '(your-package :location "~/path/to/your-package/") ;; Also include the dependencies as they will not be resolved automatically. - ;; To use a local version of a package, use the `:location' property: - ;; '(your-package :location "~/path/to/your-package/") - ;; Also include the dependencies as they will not be resolved automatically. dotspacemacs-additional-packages '(paredit - interleave) + interleave + yasnippet-snippets) ;; A list of packages that cannot be updated. dotspacemacs-frozen-packages '() @@ -448,14 +440,34 @@ It should only modify the values of Spacemacs settings." ;; `trailing' to delete only the whitespace at end of lines, `changed' to ;; delete only whitespace for changed lines or `nil' to disable cleanup. ;; (default nil) - dotspacemacs-whitespace-cleanup 'trailing)) + dotspacemacs-whitespace-cleanup 'trailing -(defun dotspacemacs/user-init () - "Initialization function for user code. -It is called immediately after `dotspacemacs/init', before layer configuration executes. - This function is mostly useful for variables that need to be set before packages are loaded. If you are unsure, you should try in setting them in `dotspacemacs/user-config' first.") + ;; Either nil or a number of seconds. If non-nil zone out after the specified + ;; number of seconds. (default nil) + dotspacemacs-zone-out-when-idle nil + ;; Run `spacemacs/prettify-org-buffer' when + ;; visiting README.org files of Spacemacs. + ;; (default nil) + dotspacemacs-pretty-docs nil)) +(defun dotspacemacs/user-init () + "Initialization for user code: +This function is called immediately after `dotspacemacs/init', before layer +configuration. +It is mostly for variables that should be set before packages are loaded. +If you are unsure, try setting them in `dotspacemacs/user-config' first." + ) + +(defun dotspacemacs/user-load () + "Library to load while dumping. +This function is called while dumping Spacemacs configuration. You can +`require' or `load' the libraries of your choice that will be included +in the dump." + ) + + +;; TODO: merge upstream (defun git-link-pull-requests (remote) (interactive (list (git-link--select-remote))) (let ((remote-host (git-link--remote-host remote))) @@ -468,31 +480,10 @@ It is called immediately after `dotspacemacs/init', before layer configuration ("github.com" "pulls")))) (error "Remote `%s' is unknown or contains an unsupported URL" remote)))) -(defun set-custom-nu-clj-indent () - "Reset midje indent to default." - (define-clojure-indent - (fact 1) - (facts 1) - (against-background 1) - (provided 0) - (let-entities 3) - (flow 1) - (as-customer 1) - (for-all 1) - (confirmation-button 1) - (query 1) - (render 1) - (initial-state 1) - (ident 1) - (query 1) - (for-all 1) - (fdef 1) - (action 1) - (as-user 3) - (constraint-fn 1)) - - ;; dom/* indentation rules: React/Native helper fns +(defun set-custom-clj-indent () + "dom/* indentation rules: React/Native helper fns" (define-clojure-indent + ;; React (view 'defun) (text 'defun) (touchable-highlight 'defun) @@ -506,83 +497,18 @@ It is called immediately after `dotspacemacs/init', before layer configuration (a 'defun) (span 'defun) (svg 'defun) - (options 'defun))) - -(defun midje-load-facts () - "Load current namespace (or their test namespace) facts" - (interactive) - (cider-ensure-connected) - (when (buffer-file-name) - (let* ((ns (cider-current-ns)) - (test-ns (if (or (projectile-test-file-p (buffer-file-name)) (string-prefix-p "postman." ns)) ns (format "%s-test" ns))) - (cmd (format "(do (midje.repl/forget-facts *ns* '%s) (midje.repl/load-facts '%s))" test-ns test-ns))) - (cider-interactive-eval cmd)))) - -(defun helm-multi-swoop-projectile-all-files (&optional $query) - "Apply all opened buffers of the current project to helm-multi-swoop" - (interactive) - (setq helm-multi-swoop-query (helm-multi-swoop--get-query $query)) - (if (require 'projectile nil 'noerror) - ;; set filter function that is used in projectile-project-buffers - (let ((projectile-buffers-filter-function #'identity)) - (helm-multi-swoop--exec nil - :$query helm-multi-swoop-query - :$buflist (mapcar #'buffer-name - (projectile-project-buffers)))) - (error "Package 'projectile' is not available"))) - -(defun save-and-eval-clojure-buffer (&optional buffer) - (interactive) - (save-buffer buffer) - (cider-eval-buffer buffer)) - -(defun euandreh/cider-test-run-focused-test (&optional buffer) - (interactive) - (save-buffer buffer) - (spacemacs/cider-test-run-focused-test)) - -(defun save-and-test-elixir-buffer (&optional buffer) - (interactive) - (save-buffer buffer) - (alchemist-mix-test-this-buffer)) - -(defun save-and-rerun-last-test (&optional buffer) - (interactive) - (save-buffer buffer) - (alchemist-mix-rerun-last-test)) + (options 'defun) -(defun save-all-buffers-without-always-asking-me-for-confirmation-damn-it () - (interactive) - (save-some-buffers t)) + (action 1))) (defun euandreh/clear-repl-and-eval () (interactive) - (cider-find-and-clear-repl-output) + (cider-find-and-clear-repl-output t) (cider-eval-defun-at-point)) -;; Taken from -;; https://github.com/bhauman/lein-figwheel/wiki/Using-the-Figwheel-REPL-within-NRepl -(defun cider-figwheel-repl () - (interactive) - (save-some-buffers) - (with-current-buffer (cider-current-repl-buffer) - (goto-char (point-max)) - (insert "(require 'figwheel-sidecar.repl-api) - (figwheel-sidecar.repl-api/start-figwheel!) ; idempotent - (figwheel-sidecar.repl-api/cljs-repl)") - (cider-repl-return))) - -(defvar mode-pairs '(("\\.sbclrc$" . lisp-mode) - ("\\.tsx$" . typescript-mode) - ("\\.json\\.base$" . json-mode) - ("\\.lytex$" . latex-mode) - ("\\.ly$" . latex-mode) - ("rc$" . shell-script-mode))) - (defvar paredit-modes '(lisp-mode lisp-interaction-mode emacs-lisp-mode - ;; scheme-mode ielm-mode clojure-mode cider-mode @@ -592,72 +518,29 @@ It is called immediately after `dotspacemacs/init', before layer configuration clojurex-mode cider-clojure-interaction-mode)) -(defvar custom-el-files '("~/dev/nu/nudev/ides/emacs/nu.el" - "~/annex/dev/code/dotfiles/emacs/re-jump.el")) - -(defvar custom-keybindings '(("C-x M-b" . ibuffer) - ("M-SPC" . (lambda () (interactive) (just-one-space -1))) - ("M-ç" . (lambda () (interactive) (find-file "~/Nextcloud/txt/TODOs.org"))) - ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) - ("M-p" . interleave-mode) - ("C-i" . evil-jump-forward) - - ;; tabbar-mode - ("C-" . tabbar-forward) - ("C-" . tabbar-backward) - - ;; Ctrl-Super-* - ("C-H-e" . (lambda () (interactive) (insert "∋"))) - ("C-H-S-e" . (lambda () (interactive) (insert "∌"))) - ("C-H-3" . (lambda () (interactive) (insert "♯"))) - ("C-H-b" . (lambda () (interactive) (insert "♭"))) - - ;; Ctrl-Super-Alt-* - ("C-H-M-a" . (lambda () (interactive) (insert "α"))) - ("C-H-M-b" . (lambda () (interactive) (insert "β"))) - ("C-H-M-c" . (lambda () (interactive) (insert "γ"))) - ("C-H-M-d" . (lambda () (interactive) (insert "δ"))) - ("C-H-M-f" . (lambda () (interactive) (insert "ε"))))) - +(defvar custom-keybindings '(("M-ç" . (lambda () (interactive) (find-file "~/Nextcloud/txt/TODOs.org"))) + ("M-SPC" . (lambda () (interactive) (just-one-space -1))) + ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))))) (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." (require 'git-link) ;; for git-link-* - (require 'clojure-mode) ;; for set-nu-clj-indent - (require 'org-indent) ;; for org-indent-mode - (require 'helm-swoop) ;; for custom helm-multi-swoop-projectile-all-files + + (eval-after-load 'clojure-mode '(set-custom-clj-indent)) + (eval-after-load 'midje-mode '(set-custom-clj-indent)) (projectile-cleanup-known-projects) (spacemacs/set-leader-keys - "fS" 'save-all-buffers-without-always-asking-me-for-confirmation-damn-it ;; 'save-some-buffers - "w/" 'split-window-right-and-focus - "w-" 'split-window-below-and-focus - "d" 'spacemacs/delete-window - "sS" 'helm-multi-swoop-projectile-all-files "glh" 'git-link-homepage - "glp" 'git-link-pull-requests - "W" 'spacemacs/workspaces-transient-state/body) - - (spacemacs/set-leader-keys-for-major-mode 'elixir-mode - "tb" 'save-and-test-elixir-buffer - "tr" 'save-and-rerun-last-test) + "glp" 'git-link-pull-requests) (spacemacs/set-leader-keys-for-major-mode 'typescript-mode "." 'spacemacs/jump-to-definition "," 'tide-jump-back) - ;; https://github.com/nubank/nudev/pull/509 - (when (require 'exec-path-from-shell nil 'noerror) - ;; https://emacs.stackexchange.com/questions/17866/magit-how-to-use-systems-ssh-agent-and-dont-ask-for-password - (exec-path-from-shell-initialize) - (exec-path-from-shell-copy-env "SSH_AGENT_PID") - (exec-path-from-shell-copy-env "SSH_AUTH_SOCK") - ;; github layer - (exec-path-from-shell-copy-env "EMACS_GITHUB_TOKEN")) - ;; https://github.com/syl20bnr/spacemacs/issues/774 (unless (file-exists-p (concat spacemacs-cache-directory "undo")) (make-directory (concat spacemacs-cache-directory "undo"))) @@ -669,31 +552,27 @@ This is the place where most of your configurations should be done. Unless it is (add-hook 'hack-local-variables-hook (lambda () (spacemacs/toggle-truncate-lines-off))) - (dolist (mode-pair mode-pairs) + (dolist (mode-pair '(("\\.json\\.base$" . json-mode))) (setq auto-mode-alist (cons mode-pair auto-mode-alist))) - (dolist (path custom-el-files) + (dolist (path '("~/annex/dev/code/dotfiles/emacs/re-jump.el" + "~/quicklisp/slime-helper.el")) (when (file-exists-p path) (load path))) - (dolist (mode paredit-modes :done) (let ((mode-hook (intern (concat (symbol-name mode) "-hook"))) (mode-map (intern (concat (symbol-name mode) "-map")))) - (eval-after-load mode '(set-custom-nu-clj-indent)) - (eval-after-load mode '(sayid-setup-package)) (add-hook mode-hook 'paredit-mode) (add-hook mode-hook (lambda () (rainbow-delimiters-mode 1))) (spacemacs/set-leader-keys-for-major-mode mode - "E" 'euandreh/clear-repl-and-eval - "k" 'paredit-copy-as-kill - "K" 'paredit-copy-sexps-as-kill - "tm" 'midje-load-facts - "eb" 'save-and-eval-clojure-buffer - "tt" 'euandreh/cider-test-run-focused-test - "." 'spacemacs/jump-to-definition - "," 'cider-pop-back))) + "k" 'paredit-copy-as-kill + "." 'spacemacs/jump-to-definition + "," 'cider-pop-back))) + + (spacemacs/set-leader-keys-for-major-mode 'clojure-mode + "eF" 'euandreh/clear-repl-and-eval) ;; From the documentation: ;; https://cider.readthedocs.io/en/latest/code_completion/ @@ -707,9 +586,10 @@ This is the place where most of your configurations should be done. Unless it is (setq standard-indent 2 git-link-use-commit t vc-follow-symlinks t - org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) default-truncate-lines nil magit-diff-refine-hunk t + ispell-program-name "aspell" + TeX-view-program-selection '((output-pdf "Zathura")) ;; Indentation typescript-indent-level 2 @@ -724,27 +604,21 @@ This is the place where most of your configurations should be done. Unless it is ;; Clojure cljr-warn-on-eval nil - ;; cider-cljs-lein-repl "(do (require 'figwheel-sidecar.repl-api) - ;; (figwheel-sidecar.repl-api/start-figwheel!) - ;; (figwheel-sidecar.repl-api/cljs-repl))" + cider-repl-display-help-banner nil ;; Common Lisp - inferior-lisp-program "ros -L sbcl -Q -l ~/.sbclrc run" + inferior-lisp-program "sbcl" common-lisp-hyperspec-root (concat "file:" (expand-file-name "~/annex/docs/programming/hyperspec/HyperSpec/")) ;; Persistent undo undo-tree-auto-save-history t undo-tree-history-directory-alist `(("." . ,(concat spacemacs-cache-directory "undo"))) - ;; EMMS - emms-source-file-default-directory "~/annex/Banshee/queue/" - emms-source-file-directory-tree-function 'emms-source-file-directory-tree-find - emms-browser-get-track-field-function #'emms-browser-get-track-field-use-directory-name - ;; org-mode ;; Taken from: ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html + org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) org-agenda-files '("~/Nextcloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" org-default-notes-file "~/Nextcloud/txt/TODOs.org" -- cgit v1.2.3 From b3111940a844e2ea28b30ecb2c25f9a79711006f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:20:58 -0300 Subject: Add measure-time utility helper macro --- spacemacs.el | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 8d5c5ee..9db0854 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -522,6 +522,14 @@ in the dump." ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))))) +(defmacro measure-time (&rest body) + "Measure and return the running time of the code block." + (declare (indent defun)) + (let ((start (make-symbol "start"))) + `(let ((,start (float-time))) + ,@body + (- (float-time) ,start)))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. -- cgit v1.2.3 From e6680d6f958ab2f0bd808b6981570607ee08b61b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:31:36 -0300 Subject: Symlink private emacs package --- emacs/re-jump.elc | Bin 0 -> 1225 bytes encrypted/nu/nurc.sh | Bin 3843 -> 3912 bytes 2 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 emacs/re-jump.elc diff --git a/emacs/re-jump.elc b/emacs/re-jump.elc new file mode 100644 index 0000000..6b3d49f Binary files /dev/null and b/emacs/re-jump.elc differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index f481ce1..d30269e 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From a59d5bf6b7465fd326ed8b3a697bdc74a263515c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:31:53 -0300 Subject: Add #'recompile-el-files function --- spacemacs.el | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 9db0854..d19a92c 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -522,6 +522,9 @@ in the dump." ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))))) +(defvar custom-el-files '("~/annex/dev/code/dotfiles/emacs/re-jump.el" + "~/quicklisp/slime-helper.el")) + (defmacro measure-time (&rest body) "Measure and return the running time of the code block." (declare (indent defun)) @@ -530,6 +533,11 @@ in the dump." ,@body (- (float-time) ,start)))) +(defun recompile-el-files () + (dolist (path custom-el-files) + (when (file-exists-p path) + (byte-compile-file path t)))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. @@ -563,8 +571,7 @@ This is the place where most of your configurations should be done. Unless it is (dolist (mode-pair '(("\\.json\\.base$" . json-mode))) (setq auto-mode-alist (cons mode-pair auto-mode-alist))) - (dolist (path '("~/annex/dev/code/dotfiles/emacs/re-jump.el" - "~/quicklisp/slime-helper.el")) + (dolist (path custom-el-files) (when (file-exists-p path) (load path))) -- cgit v1.2.3 From c28b4bfab7442985cce8c985fb22809b2ddeec84 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:32:31 -0300 Subject: Remove riot-web and add back Frescobaldi packages --- nixos/configuration.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e254170..67ac1c5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -153,7 +153,7 @@ texlive.combined.scheme-full lilypond - # frescobaldi # FIXME + frescobaldi ## Programming tools @@ -201,7 +201,6 @@ firefox emacs tdesktop - riot-web vlc gnome3.evolution keepassx2-http -- cgit v1.2.3 From 4df12751f9b7f4f8ddfc69afedae3bec199df9bb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 13:33:46 -0300 Subject: Add packages to configuration.nix --- nixos/configuration.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 67ac1c5..06369e5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -114,7 +114,6 @@ gnome3.gconf # https://github.com/NixOS/nixpkgs/issues/15978 lsof pciutils - libffi # FIXME: Ruby depends on it for FFI python27Packages.pywatchman # =watchman-wait= libressl tree @@ -141,6 +140,18 @@ gitAndTools.hub # GitHub helper insomnia bind # =dig= + source-code-pro + file + gitlab-runner + source-code-pro + sshpass + zathura # for viewing Emacs PDF files + timidity + + + ## Spell checking + + (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) ## NixOS -- cgit v1.2.3 From 670c8748aa9c97f8680f0ac1f5cb83d212186f12 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 22:42:00 -0300 Subject: Comment broken require of cider-interaction from new cider --- emacs/re-jump.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/emacs/re-jump.el b/emacs/re-jump.el index b86728f..db8e787 100644 --- a/emacs/re-jump.el +++ b/emacs/re-jump.el @@ -31,7 +31,8 @@ (require 'cider-resolve) (require 'cider-client) (require 'cider-common) -(require 'cider-interaction) +;; FIXME +;; (require 'cider-interaction) (require 'clojure-mode) (defun re-frame-jump-to-reg () -- cgit v1.2.3 From 1480ee59473e37f32a954b6798f638a197edb686 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 22:42:39 -0300 Subject: Add mr alias --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index fac98a7..8687a07 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -11,6 +11,7 @@ alias copy="tr -d '\n' | xclip -sel clip" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 alias watch="watch " +alias mr="mr -s" alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From b5b0f1499b6cc74903b8f4a22056dbef264f7bdb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 22:43:16 -0300 Subject: Add jwt-claims.sh script --- scripts/jwt-claims.sh | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 scripts/jwt-claims.sh diff --git a/scripts/jwt-claims.sh b/scripts/jwt-claims.sh new file mode 100755 index 0000000..9738ec9 --- /dev/null +++ b/scripts/jwt-claims.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash + +# FIXME: move to nucli +awk '{print $2}' | awk -F. '{print $2}' | base64 --decode | jq -- cgit v1.2.3 From d8669c0a1061ec02c24c137ef5872ffb7f872177 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 22:44:27 -0300 Subject: Upgrade profiles.clj --- lein/profiles.clj | Bin 733 -> 1237 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index ae2aa82..2cb19bb 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From 4815ad572fecbcd598c0ec5f65001c616a39618c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 22:47:34 -0300 Subject: Enable Gnome keyring for andreh user --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 06369e5..69c6131 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -302,6 +302,7 @@ }; }; + security.pam.services.andreh.enableGnomeKeyring = true; security.sudo = { enable = true; ## FIXME: this shouldn't be necessary, since wheels group already has sudo -- cgit v1.2.3 From a429d306ed862c7f9f40c424f5e104d7c67ee70e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 22:49:19 -0300 Subject: Upgrade NixOS stateVersion --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 69c6131..a98b36b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -316,5 +316,5 @@ # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.nixos.stateVersion = "17.09"; # Did you read the comment? + system.stateVersion = "18.03"; # Did you read the comment? } -- cgit v1.2.3 From 16ce188467a913e0f8cf017e68ff520cf32ab0fe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 23:16:17 -0300 Subject: Update spacemacs.el from new things from spacemacs.template --- spacemacs.el | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index d19a92c..b16a9d8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -451,6 +451,14 @@ It should only modify the values of Spacemacs settings." ;; (default nil) dotspacemacs-pretty-docs nil)) +(defun dotspacemacs/user-env () + "Environment variables setup. +This function defines the environment variables for your Emacs session. By +default it calls `spacemacs/load-spacemacs-env' which loads the environment +variables declared in `~/.spacemacs.env' or `~/.spacemacs.d/.spacemacs.env'. +See the header of this file for more information." + (spacemacs/load-spacemacs-env)) + (defun dotspacemacs/user-init () "Initialization for user code: This function is called immediately after `dotspacemacs/init', before layer @@ -461,9 +469,9 @@ If you are unsure, try setting them in `dotspacemacs/user-config' first." (defun dotspacemacs/user-load () "Library to load while dumping. -This function is called while dumping Spacemacs configuration. You can -`require' or `load' the libraries of your choice that will be included -in the dump." +This function is called only while dumping Spacemacs configuration. You can +`require' or `load' the libraries of your choice that will be included in the +dump." ) -- cgit v1.2.3 From eafe9407a5b9b894cc720c604f83226a4aaf2383 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 23:23:40 -0300 Subject: Update generate spacemacs config --- spacemacs.el | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index b16a9d8..1d126de 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -674,7 +674,18 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (web-mode pyvenv pipenv org-download ob-restclient nix-mode magithub intero gitignore-templates evil-magit evil-goggles dockerfile-mode docker company-ansible aggressive-indent counsel ivy smartparens projectile magit rust-mode helm helm-core cider sesman clojure-mode js2-mode slime spaceline org-plus-contrib hydra yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit tablist symon swiper swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pytest pyenv-mode py-isort pug-mode psci psc-ide powershell powerline popwin pippel pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-bullets org-brain open-junk-file ob-http ob-elixir neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magit-svn magit-gitflow magit-gh-pulls macrostep lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator json-mode js2-refactor js-doc jinja2-mode interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist ghub+ gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode docker-tramp diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist ace-window ace-link ace-jump-helm-line ac-ispell)))) + (ledger-mode highlight-parentheses ivy smartparens helm cider company yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop sesman scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell))) + '(safe-local-variable-values + (quote + ((eval progn + (pp-buffer) + (indent-buffer)) + (typescript-backend . tide) + (typescript-backend . lsp) + (javascript-backend . tern) + (javascript-backend . lsp) + (elixir-enable-compilation-checking . t) + (elixir-enable-compilation-checking))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 827f9c87220cad65bc1dd35e24db18eb3bf642ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 5 Jul 2018 23:23:44 -0300 Subject: Change spacemacs env file path --- bash/bashrc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 0e2f264..319220d 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -20,4 +20,4 @@ source $DOTFILES/encrypted/env.sh set -h source ~/dev/nu/nucli/nu.bashcompletion -env > ~/.emacs.d/private/spacemacs.env +env > ~/.spacemacs.env -- cgit v1.2.3 From 7a31f0e01689f9fdf2039ccea8f6f3cf8fb5071c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:37:28 -0300 Subject: Update sovereign volume path --- encrypted/docker-compose.yml | Bin 1778 -> 1776 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/docker-compose.yml b/encrypted/docker-compose.yml index cf94fcf..af4d0bd 100644 Binary files a/encrypted/docker-compose.yml and b/encrypted/docker-compose.yml differ -- cgit v1.2.3 From 74e85bf0b37c6d5e9da198a32f9151a42f5d22fd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:38:04 -0300 Subject: Spacemacs generated conf --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 1d126de..02aa063 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -677,7 +677,8 @@ This function is called at the very end of Spacemacs initialization." (ledger-mode highlight-parentheses ivy smartparens helm cider company yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop sesman scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote - ((eval progn + ((checkdoc-minor-mode . 1) + (eval progn (pp-buffer) (indent-buffer)) (typescript-backend . tide) -- cgit v1.2.3 From 431dad90fd367893b0888ad1ec6d98b03138166b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:38:16 -0300 Subject: Add bash aliases to scp.sh --- scripts/scp.sh | 3 +++ vps/aliases.sh | 5 +++++ 2 files changed, 8 insertions(+) create mode 100644 vps/aliases.sh diff --git a/scripts/scp.sh b/scripts/scp.sh index 01e5d02..c32bc88 100755 --- a/scripts/scp.sh +++ b/scripts/scp.sh @@ -2,3 +2,6 @@ scp "$DOTFILES/encrypted/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" scp "$DOTFILES/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" + +scp "$DOTFILES/vps/aliases.sh" "$SOVEREIGN/.bash_aliases" +scp "$DOTFILES/vps/aliases.sh" "$NEXTCLOUD/.bash_aliases" diff --git a/vps/aliases.sh b/vps/aliases.sh new file mode 100644 index 0000000..e657d68 --- /dev/null +++ b/vps/aliases.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + + +alias l="ls -lahp" +alias ,r="source ~/.bashrc" -- cgit v1.2.3 From efe254ce3c7dd269ad45870185666a0127971bde Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:38:32 -0300 Subject: Add NEXTCLOUD env var --- encrypted/env.sh | Bin 3046 -> 3090 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/env.sh b/encrypted/env.sh index 07cb5f6..20a7c05 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ -- cgit v1.2.3 From b3fcc602a9093aa49b71be4ef5f69d81bcfe79d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:38:47 -0300 Subject: Add xdg.sh bash file to start routine --- bash/bashrc.sh | 1 + bash/xdg.sh | 15 +++++++++++++++ 2 files changed, 16 insertions(+) create mode 100644 bash/xdg.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 319220d..177311f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -16,6 +16,7 @@ source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/bash/npm.sh source $DOTFILES/bash/x.sh source $DOTFILES/encrypted/env.sh +source $DOTFILES/bash/xdg.sh set -h source ~/dev/nu/nucli/nu.bashcompletion diff --git a/bash/xdg.sh b/bash/xdg.sh new file mode 100644 index 0000000..ca8ee57 --- /dev/null +++ b/bash/xdg.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash + +mkdir -p ~/.local/share/applications/ + +cat << EOF > ~/.local/share/applications/evince-andreh.desktop +[Desktop Entry] +Type=Application +Name=evince +Comment=Evince PDF viewer +Terminal=false +Exec=evince +Categories=Network;WebBrowserEOF +EOF + +xdg-mime default evince-andreh.desktop application/pdf -- cgit v1.2.3 From 6d6176574c3afb053990a8c3c2c43fba1332fa8f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:39:14 -0300 Subject: Use -f instead of -p for ls --- bash/aliases.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 8687a07..093aa63 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -4,8 +4,8 @@ unalias -a alias open="xdg-open" alias ros="rlwrap ros -l ~/.sbclrc" -alias l="ls -lahF" -alias ll="ls -lhF" +alias l="ls -lahp" +alias ll="ls -lhp" alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" alias copy="tr -d '\n' | xclip -sel clip" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" -- cgit v1.2.3 From 0aa8d9ec7026a4d7eafd0533bf6d75e9bf2e2f2d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 18:41:27 -0300 Subject: Move docker-compose.yml and push-receive-deploy.sh to vps/ --- .gitattributes | 1 + encrypted/docker-compose.yml | Bin 1776 -> 0 bytes push-receive-redeploy.sh | 6 ------ vps/docker-compose.yml | Bin 0 -> 1776 bytes vps/push-receive-redeploy.sh | 6 ++++++ 5 files changed, 7 insertions(+), 6 deletions(-) delete mode 100644 encrypted/docker-compose.yml delete mode 100755 push-receive-redeploy.sh create mode 100644 vps/docker-compose.yml create mode 100755 vps/push-receive-redeploy.sh diff --git a/.gitattributes b/.gitattributes index 8151fce..6ae0aef 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,3 +2,4 @@ encrypted/**/* filter=git-crypt diff=git-crypt mail/* filter=git-crypt diff=git-crypt git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt +vps/docker-compose.yml filter=git-crypt diff=git-crypt diff --git a/encrypted/docker-compose.yml b/encrypted/docker-compose.yml deleted file mode 100644 index af4d0bd..0000000 Binary files a/encrypted/docker-compose.yml and /dev/null differ diff --git a/push-receive-redeploy.sh b/push-receive-redeploy.sh deleted file mode 100755 index 87fecd5..0000000 --- a/push-receive-redeploy.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -cd ~/ -docker pull registry.gitlab.com/euandreh/songbooks/prod:latest -docker-compose stop songbooks_app -docker-compose up -d --no-deps songbooks_app diff --git a/vps/docker-compose.yml b/vps/docker-compose.yml new file mode 100644 index 0000000..af4d0bd Binary files /dev/null and b/vps/docker-compose.yml differ diff --git a/vps/push-receive-redeploy.sh b/vps/push-receive-redeploy.sh new file mode 100755 index 0000000..87fecd5 --- /dev/null +++ b/vps/push-receive-redeploy.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +cd ~/ +docker pull registry.gitlab.com/euandreh/songbooks/prod:latest +docker-compose stop songbooks_app +docker-compose up -d --no-deps songbooks_app -- cgit v1.2.3 From 672321f8ce6545a1d852e2dfa39fcf060dda5602 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 20:45:30 -0300 Subject: Fix docker-compose.yml scp path --- scripts/scp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/scp.sh b/scripts/scp.sh index c32bc88..d8212f9 100755 --- a/scripts/scp.sh +++ b/scripts/scp.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -scp "$DOTFILES/encrypted/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" +scp "$DOTFILES/vps/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" scp "$DOTFILES/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" scp "$DOTFILES/vps/aliases.sh" "$SOVEREIGN/.bash_aliases" -- cgit v1.2.3 From c73a5c8d15e84d591b0c3b52ab6afae36c527994 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 20:45:47 -0300 Subject: Update SSH_SERVER_FOLDER var --- encrypted/env.sh | Bin 3090 -> 3081 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/env.sh b/encrypted/env.sh index 20a7c05..ca29591 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ -- cgit v1.2.3 From 39b09595cba1b33c206eeb95c61f30339d7591e6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 20:50:57 -0300 Subject: Fix another vps scp path --- scripts/scp.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/scp.sh b/scripts/scp.sh index d8212f9..d21c5d6 100755 --- a/scripts/scp.sh +++ b/scripts/scp.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash scp "$DOTFILES/vps/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" -scp "$DOTFILES/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" +scp "$DOTFILES/vps/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" scp "$DOTFILES/vps/aliases.sh" "$SOVEREIGN/.bash_aliases" scp "$DOTFILES/vps/aliases.sh" "$NEXTCLOUD/.bash_aliases" -- cgit v1.2.3 From c57da3ab7a4504a335674b5a97848209fe2f2d3a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Jul 2018 22:56:36 -0300 Subject: Add volumes to docker-compose songbooks --- vps/docker-compose.yml | Bin 1776 -> 1866 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vps/docker-compose.yml b/vps/docker-compose.yml index af4d0bd..d238449 100644 Binary files a/vps/docker-compose.yml and b/vps/docker-compose.yml differ -- cgit v1.2.3 From 207231a1721ffcd04abe73288c62741289e37055 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:56:25 -0300 Subject: Remove git sync alias --- git/gitconfig.ini | 1 - 1 file changed, 1 deletion(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 1662b59..4ffce94 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -34,7 +34,6 @@ prune-branches = !git branch --merged | grep -v master | xargs git branch -d lfs-pull = !git fetch && git lfs fetch --recent && git merge origin podcasts = !xargs git-annex importfeed < feeds.conf - sync = !AWS_ACCESS_KEY_ID=$ANNEX_AWS_ACCESS_KEY_ID AWS_SECRET_ACCESS_KEY=$ANNEX_AWS_SECRET_ACCESS_KEY git annex sync [annex] gnupg-options = --no-tty gnupg-decrypt-options = --no-tty -- cgit v1.2.3 From 17146f61d87fa04540e25107f61cd062c0fded6d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:56:36 -0300 Subject: Add laissinha cmd --- encrypted/env.sh | Bin 3081 -> 3186 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/env.sh b/encrypted/env.sh index ca29591..db9d9e8 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ -- cgit v1.2.3 From c1bd14b0b01b79c0023acbf91e89294b05fc1a67 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:56:48 -0300 Subject: Add GuixSD repos --- git/mrconfig.ini | Bin 8021 -> 9097 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 450a0d0..932df15 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 0a227b3272b9915fbb139816f7d2db52462d6931 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:57:03 -0300 Subject: Install qemu --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a98b36b..a3ebfd9 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -206,6 +206,7 @@ ## GUI programs + qemu thunderbird calibre quodlibet -- cgit v1.2.3 From 8ee692edd71feda9ed56c8738bf643d601645e83 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:57:15 -0300 Subject: Add watch alias to VPS --- vps/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/vps/aliases.sh b/vps/aliases.sh index e657d68..44064a8 100644 --- a/vps/aliases.sh +++ b/vps/aliases.sh @@ -3,3 +3,4 @@ alias l="ls -lahp" alias ,r="source ~/.bashrc" +alias watch="watch " -- cgit v1.2.3 From f3dcbe423b4a44a54780c27d8d786b15e06a3456 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:57:34 -0300 Subject: Add build volume to songbooks container --- vps/docker-compose.yml | Bin 1866 -> 1908 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vps/docker-compose.yml b/vps/docker-compose.yml index d238449..58c9a00 100644 Binary files a/vps/docker-compose.yml and b/vps/docker-compose.yml differ -- cgit v1.2.3 From 236299b2d1de341181fa6b3f8c5e77a6bd2d8d27 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 00:59:51 -0300 Subject: Make J and K in Emacs visual mode to move lines --- spacemacs.el | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 02aa063..d3aaf9d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -256,6 +256,14 @@ It should only modify the values of Spacemacs settings." ;; (default "C-M-m") dotspacemacs-major-mode-emacs-leader-key "C-M-m" + ;; If non-nil, the shift mappings `<' and `>' retain visual state if used + ;; there. (default t) + dotspacemacs-retain-visual-state-on-shift t + + ;; If non-nil, `J' and `K' move lines up and down when in visual mode. + ;; (default nil) + dotspacemacs-visual-line-move-text t + ;; These variables control whether separate commands are bound in the GUI to ;; the key pairs `C-i', `TAB' and `C-m', `RET'. ;; Setting it to a non-nil value, allows for separate commands under `C-i' -- cgit v1.2.3 From 39b19795b71a938ec17e4682f46c5d55a43f0531 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:00:14 -0300 Subject: emacs generated code --- spacemacs.el | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index d3aaf9d..b30e180 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -682,10 +682,13 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (ledger-mode highlight-parentheses ivy smartparens helm cider company yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop sesman scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell))) + (geiser ledger-mode highlight-parentheses ivy smartparens helm cider company yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop sesman scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote - ((checkdoc-minor-mode . 1) + ((eval modify-syntax-entry 43 "'") + (eval modify-syntax-entry 36 "'") + (eval modify-syntax-entry 126 "'") + (checkdoc-minor-mode . 1) (eval progn (pp-buffer) (indent-buffer)) -- cgit v1.2.3 From bf853b12a45d0fb22035a315919065de964f3c94 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:00:21 -0300 Subject: Add scheme layer --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index b30e180..dee5848 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -35,6 +35,7 @@ This function should only modify configuration layer settings." dotspacemacs-configuration-layers '(csv rust + scheme react sql perl5 -- cgit v1.2.3 From 22e02cd3d11ad9abe55a29e936f28e341f96477b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:00:29 -0300 Subject: Don't activate relative number in texinfo-mode --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index dee5848..43f7f31 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -381,7 +381,7 @@ It should only modify the values of Spacemacs settings." ;; text-mode ;; :size-limit-kb 1000) ;; (default nil) - dotspacemacs-line-numbers '(:relative t :disabled-for-modes org-mode pdf-view-mode) + dotspacemacs-line-numbers '(:relative t :disabled-for-modes org-mode pdf-view-mode texinfo-mode) ;; Code folding method. Possible values are `evil' and `origami'. ;; (default 'evil) -- cgit v1.2.3 From bdae3674445d87109d2e84980e0ad926e4ddda35 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:01:25 -0300 Subject: Auto generate Emacs layout name --- spacemacs.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 43f7f31..953c64d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -278,7 +278,7 @@ It should only modify the values of Spacemacs settings." ;; If non-nil the default layout name is displayed in the mode-line. ;; (default nil) - dotspacemacs-display-default-layout nil + dotspacemacs-display-default-layout t ;; If non-nil then the last auto saved layouts are resumed automatically upon ;; start. (default nil) @@ -286,7 +286,7 @@ It should only modify the values of Spacemacs settings." ;; If non-nil, auto-generate layout name when creating new layouts. Only has ;; effect when using the "jump to layout by number" commands. (default nil) - dotspacemacs-auto-generate-layout-names nil + dotspacemacs-auto-generate-layout-names t ;; Size (in MB) above which spacemacs will prompt to open the large file ;; literally to avoid performance issues. Opening a file literally means that -- cgit v1.2.3 From 75cf77d6da9089f67af22f678c836c706de49cc9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:02:25 -0300 Subject: Remove tab in gitconfig --- git/gitconfig.ini | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 4ffce94..9df4687 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -43,5 +43,5 @@ [commit] gpgsign = true [github] - oauth-token = $GITHUB_TOKEN - user = EuAndreh + oauth-token = $GITHUB_TOKEN + user = EuAndreh -- cgit v1.2.3 From 0581b7f28aaa22c752dac6c1f4e9e43a5e883904 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:04:44 -0300 Subject: Encrypt gitconfig --- .gitattributes | 1 + git/gitconfig.ini | Bin 1579 -> 1718 bytes 2 files changed, 1 insertion(+) diff --git a/.gitattributes b/.gitattributes index 6ae0aef..a5d5ce6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -3,3 +3,4 @@ mail/* filter=git-crypt diff=git-crypt git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt vps/docker-compose.yml filter=git-crypt diff=git-crypt +git/gitconfig.ini filter=git-crypt diff=git-crypt diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 9df4687..08a04e9 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 504d630f41bb8b04cb584432eff908311e2d5534 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:07:42 -0300 Subject: Run fake-symlinks after env.sh --- bash/bashrc.sh | 2 +- encrypted/env.sh | Bin 3186 -> 3234 bytes git/gitconfig.ini | Bin 1718 -> 1741 bytes 3 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 177311f..ddec66a 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -10,13 +10,13 @@ source $DOTFILES/bash/agents.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh source $DOTFILES/bash/tmuxinator-templates.sh -source $DOTFILES/bash/fake-symlinks.sh source $DOTFILES/bash/init.sh source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/bash/npm.sh source $DOTFILES/bash/x.sh source $DOTFILES/encrypted/env.sh source $DOTFILES/bash/xdg.sh +source $DOTFILES/bash/fake-symlinks.sh set -h source ~/dev/nu/nucli/nu.bashcompletion diff --git a/encrypted/env.sh b/encrypted/env.sh index db9d9e8..c2821f3 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 08a04e9..7216022 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 5d7859765643127c0e9b97a2efdcd0e85b9c8004 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:13:28 -0300 Subject: Always annotate sendemail --- encrypted/env.sh | Bin 3234 -> 3233 bytes git/gitconfig.ini | Bin 1741 -> 1757 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/env.sh b/encrypted/env.sh index c2821f3..5efcaba 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 7216022..5bf0a76 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 6f2a1da8d00001b3302a50f7e402f68a0b95b3ec Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 01:48:57 -0300 Subject: Never confirm before sending email --- git/gitconfig.ini | Bin 1757 -> 1818 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 5bf0a76..eb85ac4 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From ecaa5b5dd4a7715d9e11e2bd9008b6e944beb408 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 03:52:34 -0300 Subject: Add default sendemail.to in guix --- git/mrconfig.ini | Bin 9097 -> 9157 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 932df15..d324216 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 82656462688155493c190a9249a005aa78e6efca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 03:53:18 -0300 Subject: Move files to GPG --- encrypted/IMAP/EuAndreh.gpg | Bin 0 -> 638 bytes encrypted/IMAP/EuAndreh.txt | Bin 51 -> 0 bytes encrypted/IMAP/Gmail.gpg | Bin 0 -> 624 bytes encrypted/IMAP/Gmail.txt | Bin 38 -> 0 bytes encrypted/IMAP/nu.gpg | Bin 0 -> 629 bytes encrypted/IMAP/nu.txt | Bin 42 -> 0 bytes 6 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 encrypted/IMAP/EuAndreh.gpg delete mode 100644 encrypted/IMAP/EuAndreh.txt create mode 100644 encrypted/IMAP/Gmail.gpg delete mode 100644 encrypted/IMAP/Gmail.txt create mode 100644 encrypted/IMAP/nu.gpg delete mode 100644 encrypted/IMAP/nu.txt diff --git a/encrypted/IMAP/EuAndreh.gpg b/encrypted/IMAP/EuAndreh.gpg new file mode 100644 index 0000000..b857635 Binary files /dev/null and b/encrypted/IMAP/EuAndreh.gpg differ diff --git a/encrypted/IMAP/EuAndreh.txt b/encrypted/IMAP/EuAndreh.txt deleted file mode 100644 index 573b075..0000000 Binary files a/encrypted/IMAP/EuAndreh.txt and /dev/null differ diff --git a/encrypted/IMAP/Gmail.gpg b/encrypted/IMAP/Gmail.gpg new file mode 100644 index 0000000..48335fd Binary files /dev/null and b/encrypted/IMAP/Gmail.gpg differ diff --git a/encrypted/IMAP/Gmail.txt b/encrypted/IMAP/Gmail.txt deleted file mode 100644 index 6172698..0000000 Binary files a/encrypted/IMAP/Gmail.txt and /dev/null differ diff --git a/encrypted/IMAP/nu.gpg b/encrypted/IMAP/nu.gpg new file mode 100644 index 0000000..0ccf9b2 Binary files /dev/null and b/encrypted/IMAP/nu.gpg differ diff --git a/encrypted/IMAP/nu.txt b/encrypted/IMAP/nu.txt deleted file mode 100644 index 3de94f7..0000000 Binary files a/encrypted/IMAP/nu.txt and /dev/null differ -- cgit v1.2.3 From 92ca76aa3a050f5f1223be594ba4ae0bff8250f6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 20:16:27 -0300 Subject: Change Gmail.gpg --- encrypted/IMAP/Gmail.gpg | Bin 624 -> 710 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/IMAP/Gmail.gpg b/encrypted/IMAP/Gmail.gpg index 48335fd..82fb92c 100644 Binary files a/encrypted/IMAP/Gmail.gpg and b/encrypted/IMAP/Gmail.gpg differ -- cgit v1.2.3 From 636aa4c1cef82ea6c11124e3732a065aaa24690b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 20:21:52 -0300 Subject: Use $DOTFILES in decryption path --- mail/offlineimap.py | Bin 348 -> 371 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/offlineimap.py b/mail/offlineimap.py index 2372b5f..c92d665 100644 Binary files a/mail/offlineimap.py and b/mail/offlineimap.py differ -- cgit v1.2.3 From 932cad92f39da045da4dfcfd1483f6c9cf2500fc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Jul 2018 20:22:32 -0300 Subject: Add email CLI utilities packages --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a3ebfd9..cd1988e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -147,6 +147,9 @@ sshpass zathura # for viewing Emacs PDF files timidity + mu + offlineimap + cacert ## Spell checking -- cgit v1.2.3 From 2179b07724a152a72511e6ebd004e73f7c8a59e9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:25:37 -0300 Subject: Add website submodule --- git/mrconfig.ini | Bin 9157 -> 9182 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index d324216..43d2425 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 32cedbdaea222e55033d72f5203b28d52855dfe9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:26:33 -0300 Subject: Fix offlineimap.py typo --- mail/offlineimap.py | Bin 371 -> 372 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/offlineimap.py b/mail/offlineimap.py index c92d665..17f39f7 100644 Binary files a/mail/offlineimap.py and b/mail/offlineimap.py differ -- cgit v1.2.3 From c504e63a4d8f0a0f53cf4c8ea2934db574cdb24e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:27:15 -0300 Subject: Use environment variables for offlineimaprc.ini --- mail/mbsyncrc.ini | Bin 1757 -> 1830 bytes mail/offlineimaprc.ini | Bin 1314 -> 1261 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/mbsyncrc.ini b/mail/mbsyncrc.ini index 2ff5666..84bb90c 100644 Binary files a/mail/mbsyncrc.ini and b/mail/mbsyncrc.ini differ diff --git a/mail/offlineimaprc.ini b/mail/offlineimaprc.ini index 94699c4..608c9df 100644 Binary files a/mail/offlineimaprc.ini and b/mail/offlineimaprc.ini differ -- cgit v1.2.3 From ee5bc0ed333c2119603325d71a438587ad68c114 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:27:37 -0300 Subject: Revive OfflineIMAP dotfile symlink --- bash/symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 96f0f9b..28f7d38 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -44,6 +44,6 @@ ln -fs $DOTFILES/xmonad/xsession.sh ~/.xsession ln -fs $DOTFILES/xmonad/xmonad.hs ~/.xmonad/xmonad.hs ln -fs $DOTFILES/xmonad/xmobar.hs ~/.xmobarrc -## OfflineIMAP -# ln -fs $DOTFILES/mail/offlineimaprc.ini ~/.offlineimaprc +# OfflineIMAP +ln -fs $DOTFILES/mail/offlineimaprc.ini ~/.offlineimaprc # ln -fs $DOTFILES/mail/mbsyncrc.ini ~/.mbsyncrc -- cgit v1.2.3 From 448501b0ab152c1a860f2ad92592c15045246a33 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:28:27 -0300 Subject: Export ,u bash function --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 093aa63..bec3cc5 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -23,6 +23,7 @@ alias mux="tmuxinator" git annex info --fast | grep available; cd - > /dev/null; } +export -f ,u # git alias ,s="git status" -- cgit v1.2.3 From 5cad98ba5841d2c54b1ecd1e6bd6303843007bc2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:29:04 -0300 Subject: Add extra Emacs layers --- spacemacs.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 953c64d..d8626bf 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -33,7 +33,12 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - '(csv + '(clojure + shell-scripts + mu4e + pdf + epub + csv rust scheme react -- cgit v1.2.3 From 17f4dc00dd8fb2961445abe44ae22c3e870f9054 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:29:16 -0300 Subject: Change Emacs layouts configs --- spacemacs.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index d8626bf..ac37206 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -279,7 +279,7 @@ It should only modify the values of Spacemacs settings." dotspacemacs-distinguish-gui-tab nil ;; Name of the default layout (default "Default") - dotspacemacs-default-layout-name "annex+TODOs/dotfiles/global-config" + dotspacemacs-default-layout-name "home+dotfiles" ;; If non-nil the default layout name is displayed in the mode-line. ;; (default nil) @@ -287,7 +287,7 @@ It should only modify the values of Spacemacs settings." ;; If non-nil then the last auto saved layouts are resumed automatically upon ;; start. (default nil) - dotspacemacs-auto-resume-layouts nil + dotspacemacs-auto-resume-layouts t ;; If non-nil, auto-generate layout name when creating new layouts. Only has ;; effect when using the "jump to layout by number" commands. (default nil) -- cgit v1.2.3 From 526865a0c7299ac271169868e9ddff02c862cd37 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:30:02 -0300 Subject: Add extra 2 spaces indentation configs --- spacemacs.el | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index ac37206..833db0f 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -638,6 +638,11 @@ This is the place where most of your configurations should be done. Unless it is web-mode-code-indent-offset 2 web-mode-attr-indent-offset 2 perl6-indent-offset 2 + cperl-indent-level 2 + c-basic-offset 2 + sh-basic-offset 2 + sh-indentation 2 + smie-indent-basic 2 ;; Clojure cljr-warn-on-eval nil @@ -652,9 +657,9 @@ This is the place where most of your configurations should be done. Unless it is undo-tree-history-directory-alist `(("." . ,(concat spacemacs-cache-directory "undo"))) ;; org-mode - ;; Taken from: - ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda - ;; - http://doc.norang.ca/org-mode.html + ;;; Taken from: + ;;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda + ;;; - http://doc.norang.ca/org-mode.html org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) org-agenda-files '("~/Nextcloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" -- cgit v1.2.3 From c6751b147f88ca95b9d70239ac8e5cf777dfc708 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:30:23 -0300 Subject: Generated Emacs config --- spacemacs.el | 17 +---------------- 1 file changed, 1 insertion(+), 16 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 833db0f..07282e7 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -693,22 +693,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (geiser ledger-mode highlight-parentheses ivy smartparens helm cider company yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop sesman scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer queue pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell))) - '(safe-local-variable-values - (quote - ((eval modify-syntax-entry 43 "'") - (eval modify-syntax-entry 36 "'") - (eval modify-syntax-entry 126 "'") - (checkdoc-minor-mode . 1) - (eval progn - (pp-buffer) - (indent-buffer)) - (typescript-backend . tide) - (typescript-backend . lsp) - (javascript-backend . tern) - (javascript-backend . lsp) - (elixir-enable-compilation-checking . t) - (elixir-enable-compilation-checking))))) + (nov esxml pdf-tools mu4e-maildirs-extension mu4e-alert helm-mu debbugs insert-shebang flycheck-bashate fish-mode company-shell parinfer helm-gtags ggtags counsel-gtags yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 65fc2dc1c074eb8a484798ad358799ed1e583c63 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Jul 2018 14:31:16 -0300 Subject: Add diffoscope (and helpers), kiwix and gtypist layers --- nixos/configuration.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index cd1988e..d285ea4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -150,6 +150,12 @@ mu offlineimap cacert + kiwix + gtypist + + diffoscope # + poppler_utils # used by diffoscope for comparing PDF files + pdftk # ## Spell checking -- cgit v1.2.3 From 98970c437047c93b32c9bc865f63fb73db27634a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 10:05:08 -0300 Subject: Remove duplicated entries of sslcacertfile in offlineimaprc.ini --- mail/offlineimaprc.ini | Bin 1261 -> 1211 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/offlineimaprc.ini b/mail/offlineimaprc.ini index 608c9df..e2e3cc6 100644 Binary files a/mail/offlineimaprc.ini and b/mail/offlineimaprc.ini differ -- cgit v1.2.3 From 67284574a86b15808d75e1541db5e5d6e2e5894f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 10:05:46 -0300 Subject: Subscribe back --- encrypted/scripts/video-feed.sh | Bin 2475 -> 2473 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index 6298790..3d0e416 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From a6d8871174d7cba3d0e7030d8325243c6b16887e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 10:06:12 -0300 Subject: Remove prompt from gc.sh --- scripts/gc.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index d08c008..dcca50a 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -21,11 +21,11 @@ rm -rf ~/.local/share/Trash/files/* ## Erasing docker images -docker system prune -a +echo y | docker system prune -a docker rmi $(docker images -a -q) docker rm $(docker ps -a -f status=exited -q) docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) -docker volume prune +echo y | docker volume prune -- cgit v1.2.3 From b13edd632722a722e03a79ec5dab53c767432afb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 10:07:20 -0300 Subject: Add symlink to private layers folder --- bash/symlinks.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 28f7d38..bb170f0 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -4,7 +4,6 @@ ln -fs $DOTFILES/encrypted/borg ~/.config/ ln -fs $DOTFILES/bash/bashrc.sh ~/.bashrc ln -fs $DOTFILES/bash/bash_profile.sh ~/.bash_profile -ln -fs $DOTFILES/spacemacs.el ~/.spacemacs ln -fs $DOTFILES/git/gitattributes ~/.gitattributes ln -fs $DOTFILES/git/gitignore ~/.gitignore_global ln -fs $DOTFILES/git/bash_git.sh ~/.bash_git @@ -36,7 +35,10 @@ ln -fs $DOTFILES/tmux/tmux-gnu-linux.conf ~/.tmux-gnu-linux.conf ln -fs ~/Nextcloud/cache/autojump/ ~/.local/share/autojump/ ## Emacs -ln -fs ~/Nextcloud/cache/projectile-bookmarks.eld ~/.emacs.d/.cache/projectile-bookmarks.eld +mkdir -p $HOME/.emacs.d/private/layers/ +ln -fs $DOTFILES/spacemacs.el ~/.spacemacs +ln -fs ~/Nextcloud/cache/projectile-bookmarks.eld ~/.emacs.d/.cache/projectile-bookmarks.eld +ln -fs $DOTFILES/emacs/euandreh-layer $HOME/.emacs.d/private/layers/euandreh ## xmonad mkdir -p ~/.xmonad -- cgit v1.2.3 From 465acee8efcf3f29ca60c6146fc327c69fa15dc3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 10:07:53 -0300 Subject: Add symlink to authinfo.gpg --- bash/symlinks.sh | 3 +++ encrypted/IMAP/authinfo.gpg | Bin 0 -> 800 bytes 2 files changed, 3 insertions(+) create mode 100644 encrypted/IMAP/authinfo.gpg diff --git a/bash/symlinks.sh b/bash/symlinks.sh index bb170f0..a2f726f 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -49,3 +49,6 @@ ln -fs $DOTFILES/xmonad/xmobar.hs ~/.xmobarrc # OfflineIMAP ln -fs $DOTFILES/mail/offlineimaprc.ini ~/.offlineimaprc # ln -fs $DOTFILES/mail/mbsyncrc.ini ~/.mbsyncrc + +# GNUS +ln -fs $DOTFILES/encrypted/IMAP/authinfo.gpg ~/.authinfo.gpg diff --git a/encrypted/IMAP/authinfo.gpg b/encrypted/IMAP/authinfo.gpg new file mode 100644 index 0000000..95162ac Binary files /dev/null and b/encrypted/IMAP/authinfo.gpg differ -- cgit v1.2.3 From 1cdbb471fe40a43c116ee27424bd4b2140496fc3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 10:08:38 -0300 Subject: Install tor browser --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d285ea4..3327d8f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -226,7 +226,7 @@ gnome3.evolution keepassx2-http yubioath-desktop - # tor-browser-bundle-bin # FIXME + tor-browser-bundle-bin transmission_gtk libreoffice android-studio -- cgit v1.2.3 From bae7c75361a051682b29f48bc93ec5c51ebfc4d2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:40:26 -0300 Subject: Remove unused dependencies from profiles.clj --- lein/profiles.clj | Bin 1237 -> 1074 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 2cb19bb..1170512 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From c3716106ad50cf91e84283d80f2e0398fcffabb4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:43:05 -0300 Subject: Enable revealjs support for org-mode --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 07282e7..7ddcbb0 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -68,7 +68,8 @@ This function should only modify configuration layer settings." emacs-lisp git markdown - org + (org :variables + org-enable-reveal-js-support t) (shell :variables shell-default-height 30 shell-default-position 'bottom) -- cgit v1.2.3 From 43a013d4bb74a69d0e289958cdfd61ecf1f438a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:43:36 -0300 Subject: Add yaml layer --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 7ddcbb0..3050afc 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -33,7 +33,8 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - '(clojure + `(yaml + clojure shell-scripts mu4e pdf -- cgit v1.2.3 From 89d598e2296846160d31646bb7fa3e7eb1c0458c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:43:57 -0300 Subject: Do not generate layout names --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 3050afc..a883220 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -293,7 +293,7 @@ It should only modify the values of Spacemacs settings." ;; If non-nil, auto-generate layout name when creating new layouts. Only has ;; effect when using the "jump to layout by number" commands. (default nil) - dotspacemacs-auto-generate-layout-names t + dotspacemacs-auto-generate-layout-names nil ;; Size (in MB) above which spacemacs will prompt to open the large file ;; literally to avoid performance issues. Opening a file literally means that -- cgit v1.2.3 From 7b3c948c48bb2c35b80949720659053cc54b02e3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:44:16 -0300 Subject: Do not autoresume layouts, instead, manually load it from cached file --- bash/symlinks.sh | 1 + spacemacs.el | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index a2f726f..fdf1b1e 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -38,6 +38,7 @@ ln -fs ~/Nextcloud/cache/autojump/ ~/.local/share/autojump/ mkdir -p $HOME/.emacs.d/private/layers/ ln -fs $DOTFILES/spacemacs.el ~/.spacemacs ln -fs ~/Nextcloud/cache/projectile-bookmarks.eld ~/.emacs.d/.cache/projectile-bookmarks.eld +ln -fs ~/Nextcloud/cache/euandreh-auto-save.el ~/.emacs.d/.cache/layouts/euandreh-auto-save ln -fs $DOTFILES/emacs/euandreh-layer $HOME/.emacs.d/private/layers/euandreh ## xmonad diff --git a/spacemacs.el b/spacemacs.el index a883220..10c08bb 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -289,7 +289,7 @@ It should only modify the values of Spacemacs settings." ;; If non-nil then the last auto saved layouts are resumed automatically upon ;; start. (default nil) - dotspacemacs-auto-resume-layouts t + dotspacemacs-auto-resume-layouts nil ;; If non-nil, auto-generate layout name when creating new layouts. Only has ;; effect when using the "jump to layout by number" commands. (default nil) -- cgit v1.2.3 From e892d40315b678d57b295603215b47ac68334a87 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:49:56 -0300 Subject: Add global `comment` macro --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 10c08bb..be3efab 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -557,6 +557,9 @@ dump." ,@body (- (float-time) ,start)))) +(defmacro comment (&rest body) + nil) + (defun recompile-el-files () (dolist (path custom-el-files) (when (file-exists-p path) -- cgit v1.2.3 From 21c31f358cfa24b8b53465c315af70658c53596c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:50:32 -0300 Subject: Focus when a new window is created --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index be3efab..997cd06 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -577,6 +577,8 @@ This is the place where most of your configurations should be done. Unless it is (projectile-cleanup-known-projects) (spacemacs/set-leader-keys + "w/" 'split-window-right-and-focus + "w-" 'split-window-below-and-focus "glh" 'git-link-homepage "glp" 'git-link-pull-requests) -- cgit v1.2.3 From 620dcb46c6cecf2d42451887aa39bf54053c40d3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:56:16 -0300 Subject: Add initial gnus.el config --- .gitattributes | 1 + bash/symlinks.sh | 1 + emacs/gnus.el | Bin 0 -> 6085 bytes 3 files changed, 2 insertions(+) create mode 100644 emacs/gnus.el diff --git a/.gitattributes b/.gitattributes index a5d5ce6..c2a60e3 100644 --- a/.gitattributes +++ b/.gitattributes @@ -4,3 +4,4 @@ git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt vps/docker-compose.yml filter=git-crypt diff=git-crypt git/gitconfig.ini filter=git-crypt diff=git-crypt +emacs/gnus.el filter=git-crypt diff=git-crypt diff --git a/bash/symlinks.sh b/bash/symlinks.sh index fdf1b1e..76075f6 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -37,6 +37,7 @@ ln -fs ~/Nextcloud/cache/autojump/ ~/.local/share/autojump/ ## Emacs mkdir -p $HOME/.emacs.d/private/layers/ ln -fs $DOTFILES/spacemacs.el ~/.spacemacs +ln -fs $DOTFILES/emacs/gnus.el ~/.gnus.el ln -fs ~/Nextcloud/cache/projectile-bookmarks.eld ~/.emacs.d/.cache/projectile-bookmarks.eld ln -fs ~/Nextcloud/cache/euandreh-auto-save.el ~/.emacs.d/.cache/layouts/euandreh-auto-save ln -fs $DOTFILES/emacs/euandreh-layer $HOME/.emacs.d/private/layers/euandreh diff --git a/emacs/gnus.el b/emacs/gnus.el new file mode 100644 index 0000000..9a6efee Binary files /dev/null and b/emacs/gnus.el differ -- cgit v1.2.3 From bb835bd6abe638e5944539658ba04abdbc6a5fb5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:58:20 -0300 Subject: Enabel evil-mc-mode --- spacemacs.el | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 997cd06..8f58660 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -586,6 +586,8 @@ This is the place where most of your configurations should be done. Unless it is "." 'spacemacs/jump-to-definition "," 'tide-jump-back) + (global-evil-mc-mode) + ;; https://github.com/syl20bnr/spacemacs/issues/774 (unless (file-exists-p (concat spacemacs-cache-directory "undo")) (make-directory (concat spacemacs-cache-directory "undo"))) @@ -664,9 +666,9 @@ This is the place where most of your configurations should be done. Unless it is undo-tree-history-directory-alist `(("." . ,(concat spacemacs-cache-directory "undo"))) ;; org-mode - ;;; Taken from: - ;;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda - ;;; - http://doc.norang.ca/org-mode.html +;;; Taken from: +;;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda +;;; - http://doc.norang.ca/org-mode.html org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) org-agenda-files '("~/Nextcloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" -- cgit v1.2.3 From 68b4c003a0f9958ed8d5d4512b3ed4ad3c387f6b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:58:34 -0300 Subject: Emacs generated stuff --- spacemacs.el | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 8f58660..3529a17 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -702,7 +702,18 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (nov esxml pdf-tools mu4e-maildirs-extension mu4e-alert helm-mu debbugs insert-shebang flycheck-bashate fish-mode company-shell parinfer helm-gtags ggtags counsel-gtags yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flx-ido fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell)))) + (debbugs soap-client yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unfill toml-mode toc-org tide tagedit symon swift-mode string-inflection sql-indent spaceline-all-the-icons smtpmail-multi smeargle slime-company slim-mode shell-pop scss-mode sayid sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest midje-mode markdown-toc magithub magit-svn magit-gitflow magit-gh-pulls lorem-ipsum livid-mode live-py-mode linum-relative link-hint less-css-mode ledger-mode json-navigator js2-refactor js-doc jinja2-mode intero interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-pydoc helm-purpose helm-projectile helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate golden-ratio gnuplot gitignore-templates github-search github-clone gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gist gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-mc evil-matchit evil-magit evil-lisp-state evil-lion evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode dockerfile-mode docker diminish diff-hl define-word dante cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-restclient company-plsense company-nixos-options company-lua company-ghci company-ghc company-cabal company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent ace-window ace-link ace-jump-helm-line ac-ispell))) + '(safe-local-variable-values + (quote + ((eval progn + (pp-buffer) + (indent-buffer)) + (typescript-backend . tide) + (typescript-backend . lsp) + (javascript-backend . tern) + (javascript-backend . lsp) + (elixir-enable-compilation-checking . t) + (elixir-enable-compilation-checking))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From b78e4eb88a4c9e698c20922c1afb36c1cfd442ee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 12:59:06 -0300 Subject: Remove mu4e layer --- spacemacs.el | 1 - 1 file changed, 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 3529a17..d999692 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -36,7 +36,6 @@ This function should only modify configuration layer settings." `(yaml clojure shell-scripts - mu4e pdf epub csv -- cgit v1.2.3 From fd6f1073d40cd247310f7be0ebeab0b6a914dded Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 13:16:21 -0300 Subject: Sort layers --- spacemacs.el | 71 ++++++++++++++++++++++++++++++------------------------------ 1 file changed, 35 insertions(+), 36 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index d999692..c1c8d91 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -33,59 +33,58 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - `(yaml + `(ansible + auto-completion + better-defaults clojure - shell-scripts - pdf - epub + common-lisp csv - rust - scheme - react - sql + docker + elixir + elm + emacs-lisp + epub + erlang + finance + git + github + gnus + haskell + helm + html + javascript + latex + lua + markdown + nixos + nu-clojure + pdf perl5 perl6 purescript - windows-scripts - lua - erlang - elixir python - ansible - yaml + react + restclient ruby + rust + scheme + shell-scripts + sql swift + syntax-checking typescript + version-control + windows-scripts + yaml (clojure :variables clojure-enable-fancify-symbols t) - nu-clojure - haskell - javascript - finance - helm - auto-completion - better-defaults - emacs-lisp - git - markdown (org :variables org-enable-reveal-js-support t) (shell :variables shell-default-height 30 shell-default-position 'bottom) (spell-checking :variables - spell-checking-enable-auto-dictionary t) - syntax-checking - version-control - elm - html - common-lisp - restclient - latex - docker - ansible - github - nixos) + spell-checking-enable-auto-dictionary t)) ;; List of additional packages that will be installed without being ;; wrapped in a layer. If you need some configuration for these -- cgit v1.2.3 From 9b8fbb866aac1a1e8aee07218fe4f0e3b03327eb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 11 Jul 2018 13:19:40 -0300 Subject: Moved to nucli --- scripts/jwt-claims.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/jwt-claims.sh b/scripts/jwt-claims.sh index 9738ec9..b02575e 100755 --- a/scripts/jwt-claims.sh +++ b/scripts/jwt-claims.sh @@ -1,4 +1,3 @@ #!/usr/bin/env bash -# FIXME: move to nucli awk '{print $2}' | awk -F. '{print $2}' | base64 --decode | jq -- cgit v1.2.3 From dfa3ac3d0c1631865b3cb181f5d51bf9ef8c1c8f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 13:19:36 -0300 Subject: Remove sudo ad-hoc config for andreh --- nixos/configuration.nix | 11 +++-------- 1 file changed, 3 insertions(+), 8 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3327d8f..1ef1104 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -312,14 +312,9 @@ }; }; - security.pam.services.andreh.enableGnomeKeyring = true; - security.sudo = { - enable = true; - ## FIXME: this shouldn't be necessary, since wheels group already has sudo - extraConfig = - '' - andreh ALL=(ALL) ALL - ''; + security = { + pam.services.lightdm.enableGnomeKeyring = true; + sudo.enable = true; }; # This value determines the NixOS release with which your system is to be -- cgit v1.2.3 From c3f6561dfd026928033b73d4afb6e17db1348295 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 13:20:13 -0300 Subject: Change Gmail.gpg --- encrypted/IMAP/Gmail.gpg | Bin 710 -> 629 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/IMAP/Gmail.gpg b/encrypted/IMAP/Gmail.gpg index 82fb92c..5cd7ad8 100644 Binary files a/encrypted/IMAP/Gmail.gpg and b/encrypted/IMAP/Gmail.gpg differ -- cgit v1.2.3 From e527b40fc1fa96f5495bda5b44786696b162de7d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 13:20:27 -0300 Subject: Add repos to mrconfig --- git/mrconfig.ini | Bin 9182 -> 9239 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 43d2425..be460aa 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 9dc79a463c99f69cdab4587f1d8652d18f1729e2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 17:05:59 -0300 Subject: Add configuration for supporting Guix --- bash/env.sh | 7 +++++++ nixos/configuration.nix | 54 +++++++++++++++++++++++++++++++++++++++++++------ 2 files changed, 55 insertions(+), 6 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 93d03b4..25fd601 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -60,3 +60,10 @@ export LEIN_SUPPRESS_USER_LEVEL_REPO_WARNINGS=1 isLinux && { export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt } + + +# +# Guix +# + +export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1ef1104..dc4ad73 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -303,18 +303,60 @@ users = { mutableUsers = false; - extraUsers.andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - passwordFile = "/home/andreh/annex/dev/code/dotfiles/encrypted/password-hash.txt"; + + extraUsers = + let + andrehUser = { + andreh = { + isNormalUser = true; + uid = 1000; + description = "EuAndreh"; + passwordFile = "/home/andreh/annex/dev/code/dotfiles/encrypted/password-hash.txt"; + }; + }; + # From the Guix manual: + # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup + buildUser = (i: + { + "guixbuilder${i}" = { # guixbuilder$i + group = "guixbuild"; # -g guixbuild + extraGroups = ["guixbuild"]; # -G guixbuild + home = "/var/empty"; # -d /var/empty + shell = pkgs.nologin; # -s `which nologin` + description = "Guix build user ${i}"; # -c "Guix buid user $i" + isSystemUser = true; # --system + }; + } + ); + in + # merge all users + pkgs.lib.fold (str: acc: acc // buildUser str) + andrehUser + # for i in `seq -w 1 10` + (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n+1) 10)); + + extraGroups.guixbuild = { + name = "guixbuild"; }; }; security = { pam.services.lightdm.enableGnomeKeyring = true; sudo.enable = true; + # Derived from Guix guix-daemon.service.in + # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 + systemd.services.guix-daemon = { + enable = true; + description = "Build daemon for GNU Guix"; + serviceConfig = { + ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; + Environment="GUIX_LOCPATH=/root/.guix-profile/lib/locale"; + RemainAfterExit="yes"; + StandardOutput="syslog"; + StandardError="syslog"; + TaskMax= 8192; + }; + wantedBy = [ "multi-user.target" ]; }; # This value determines the NixOS release with which your system is to be -- cgit v1.2.3 From a1d0d89d04d24da3444decae0bf400657eedeb1e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 17:28:32 -0300 Subject: Add search-engine layer --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index c1c8d91..f8f29b7 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -67,6 +67,7 @@ This function should only modify configuration layer settings." restclient ruby rust + search-engine scheme shell-scripts sql @@ -575,6 +576,7 @@ This is the place where most of your configurations should be done. Unless it is (projectile-cleanup-known-projects) (spacemacs/set-leader-keys + "/" 'engine/search-duck-duck-go "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage -- cgit v1.2.3 From 1a71f9af8d1ace9909e096e8923edc488fa07c1d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 17:28:40 -0300 Subject: Use SPC-d to delete window --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index f8f29b7..35c7dea 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -577,6 +577,7 @@ This is the place where most of your configurations should be done. Unless it is (spacemacs/set-leader-keys "/" 'engine/search-duck-duck-go + "d" 'spacemacs/delete-window "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage -- cgit v1.2.3 From f9cb27a265c1123a24a09b20156d259ac0320efa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 17:32:30 -0300 Subject: Add gnome-keyring dependency for enableGnomeKeyring --- nixos/configuration.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dc4ad73..93714c7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -158,6 +158,9 @@ pdftk # + gnome3.libgnome-keyring + gnome3.gnome-keyring + ## Spell checking (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) @@ -301,6 +304,11 @@ pcscd.enable = true; # required by yubioath }; + security = { + pam.services.lightdm.enableGnomeKeyring = true; + sudo.enable = true; + }; + users = { mutableUsers = false; @@ -340,9 +348,6 @@ }; }; - security = { - pam.services.lightdm.enableGnomeKeyring = true; - sudo.enable = true; # Derived from Guix guix-daemon.service.in # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 systemd.services.guix-daemon = { -- cgit v1.2.3 From 9008160b26463265df5587c4b7b9be792382ca7c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 17:33:09 -0300 Subject: Fix missing extraGroup --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 93714c7..98f2f83 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -319,6 +319,7 @@ isNormalUser = true; uid = 1000; description = "EuAndreh"; + extraGroups = [ "wheel" "networkmanager" "docker" ]; passwordFile = "/home/andreh/annex/dev/code/dotfiles/encrypted/password-hash.txt"; }; }; -- cgit v1.2.3 From bda44d03927aae9ae0242c716ab6730f5ace36b0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 13 Jul 2018 22:46:24 -0300 Subject: Add Fira Code font to Emacs --- nixos/configuration.nix | 11 +++- spacemacs.el | 162 +++++++++++++++++++++++++++++++++++++++++++++++- 2 files changed, 167 insertions(+), 6 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 98f2f83..9bd5980 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -57,7 +57,14 @@ virtualisation.docker.enable = true; virtualisation.virtualbox.host.enable = true; - # $ nix-env -qaP | grep wget + fonts.fonts = with pkgs; [ + source-code-pro + fira-code + fira-mono + fira-code-symbols + freefont_ttf + ]; + environment.systemPackages = with pkgs; [ @@ -140,10 +147,8 @@ gitAndTools.hub # GitHub helper insomnia bind # =dig= - source-code-pro file gitlab-runner - source-code-pro sshpass zathura # for viewing Emacs PDF files timidity diff --git a/spacemacs.el b/spacemacs.el index 35c7dea..240828a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -74,6 +74,7 @@ This function should only modify configuration layer settings." swift syntax-checking typescript + unicode-fonts version-control windows-scripts yaml @@ -236,8 +237,9 @@ It should only modify the values of Spacemacs settings." ;; Default font, or prioritized list of fonts. `powerline-scale' allows to ;; quickly tweak the mode-line size to make separators look not too crappy. - dotspacemacs-default-font '("Source Code Pro" - :size 13 + ;; Alternatives: "FreeMono", "Source Code Pro", "Default" + dotspacemacs-default-font '("Fira Code" + :size 16 :weight normal :width normal) @@ -689,6 +691,160 @@ This is the place where most of your configurations should be done. Unless it is ("n" "Next Task" entry (file+headline org-default-notes-file "Tasks") "** NEXT %? \nDEADLINE: %t"))) + + + + + + + + +;;; Fira code +;; This works when using emacs --daemon + emacsclient +(add-hook 'after-make-frame-functions (lambda (frame) (set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol"))) +;; This works when using emacs without server/client +(set-fontset-font t '(#Xe100 . #Xe16f) "Fira Code Symbol") +;; I haven't found one statement that makes both of the above situations work, so I use both for now + +(defconst fira-code-font-lock-keywords-alist + (mapcar (lambda (regex-char-pair) + `(,(car regex-char-pair) + (0 (prog1 () + (compose-region (match-beginning 1) + (match-end 1) + ;; The first argument to concat is a string containing a literal tab + ,(concat " " (list (decode-char 'ucs (cadr regex-char-pair))))))))) + '(("\\(www\\)" #Xe100) + ("[^/]\\(\\*\\*\\)[^/]" #Xe101) + ("\\(\\*\\*\\*\\)" #Xe102) + ("\\(\\*\\*/\\)" #Xe103) + ("\\(\\*>\\)" #Xe104) + ("[^*]\\(\\*/\\)" #Xe105) + ("\\(\\\\\\\\\\)" #Xe106) + ("\\(\\\\\\\\\\\\\\)" #Xe107) + ("\\({-\\)" #Xe108) + ("\\(\\[\\]\\)" #Xe109) + ("\\(::\\)" #Xe10a) + ("\\(:::\\)" #Xe10b) + ("[^=]\\(:=\\)" #Xe10c) + ("\\(!!\\)" #Xe10d) + ("\\(!=\\)" #Xe10e) + ("\\(!==\\)" #Xe10f) + ("\\(-}\\)" #Xe110) + ("\\(--\\)" #Xe111) + ("\\(---\\)" #Xe112) + ("\\(-->\\)" #Xe113) + ("[^-]\\(->\\)" #Xe114) + ("\\(->>\\)" #Xe115) + ("\\(-<\\)" #Xe116) + ("\\(-<<\\)" #Xe117) + ("\\(-~\\)" #Xe118) + ("\\(#{\\)" #Xe119) + ("\\(#\\[\\)" #Xe11a) + ("\\(##\\)" #Xe11b) + ("\\(###\\)" #Xe11c) + ("\\(####\\)" #Xe11d) + ("\\(#(\\)" #Xe11e) + ("\\(#\\?\\)" #Xe11f) + ("\\(#_\\)" #Xe120) + ("\\(#_(\\)" #Xe121) + ("\\(\\.-\\)" #Xe122) + ("\\(\\.=\\)" #Xe123) + ("\\(\\.\\.\\)" #Xe124) + ("\\(\\.\\.<\\)" #Xe125) + ("\\(\\.\\.\\.\\)" #Xe126) + ("\\(\\?=\\)" #Xe127) + ("\\(\\?\\?\\)" #Xe128) + ("\\(;;\\)" #Xe129) + ("\\(/\\*\\)" #Xe12a) + ("\\(/\\*\\*\\)" #Xe12b) + ("\\(/=\\)" #Xe12c) + ("\\(/==\\)" #Xe12d) + ("\\(/>\\)" #Xe12e) + ("\\(//\\)" #Xe12f) + ("\\(///\\)" #Xe130) + ("\\(&&\\)" #Xe131) + ("\\(||\\)" #Xe132) + ("\\(||=\\)" #Xe133) + ("[^|]\\(|=\\)" #Xe134) + ("\\(|>\\)" #Xe135) + ("\\(\\^=\\)" #Xe136) + ("\\(\\$>\\)" #Xe137) + ("\\(\\+\\+\\)" #Xe138) + ("\\(\\+\\+\\+\\)" #Xe139) + ("\\(\\+>\\)" #Xe13a) + ("\\(=:=\\)" #Xe13b) + ("[^!/]\\(==\\)[^>]" #Xe13c) + ("\\(===\\)" #Xe13d) + ("\\(==>\\)" #Xe13e) + ("[^=]\\(=>\\)" #Xe13f) + ("\\(=>>\\)" #Xe140) + ("\\(<=\\)" #Xe141) + ("\\(=<<\\)" #Xe142) + ("\\(=/=\\)" #Xe143) + ("\\(>-\\)" #Xe144) + ("\\(>=\\)" #Xe145) + ("\\(>=>\\)" #Xe146) + ("[^-=]\\(>>\\)" #Xe147) + ("\\(>>-\\)" #Xe148) + ("\\(>>=\\)" #Xe149) + ("\\(>>>\\)" #Xe14a) + ("\\(<\\*\\)" #Xe14b) + ("\\(<\\*>\\)" #Xe14c) + ("\\(<|\\)" #Xe14d) + ("\\(<|>\\)" #Xe14e) + ("\\(<\\$\\)" #Xe14f) + ("\\(<\\$>\\)" #Xe150) + ("\\(\\)" #Xe113) - ("[^-]\\(->\\)" #Xe114) - ("\\(->>\\)" #Xe115) - ("\\(-<\\)" #Xe116) - ("\\(-<<\\)" #Xe117) - ("\\(-~\\)" #Xe118) - ("\\(#{\\)" #Xe119) - ("\\(#\\[\\)" #Xe11a) - ("\\(##\\)" #Xe11b) - ("\\(###\\)" #Xe11c) - ("\\(####\\)" #Xe11d) - ("\\(#(\\)" #Xe11e) - ("\\(#\\?\\)" #Xe11f) - ("\\(#_\\)" #Xe120) - ("\\(#_(\\)" #Xe121) - ("\\(\\.-\\)" #Xe122) - ("\\(\\.=\\)" #Xe123) - ("\\(\\.\\.\\)" #Xe124) - ("\\(\\.\\.<\\)" #Xe125) - ("\\(\\.\\.\\.\\)" #Xe126) - ("\\(\\?=\\)" #Xe127) - ("\\(\\?\\?\\)" #Xe128) - ("\\(;;\\)" #Xe129) - ("\\(/\\*\\)" #Xe12a) - ("\\(/\\*\\*\\)" #Xe12b) - ("\\(/=\\)" #Xe12c) - ("\\(/==\\)" #Xe12d) - ("\\(/>\\)" #Xe12e) - ("\\(//\\)" #Xe12f) - ("\\(///\\)" #Xe130) - ("\\(&&\\)" #Xe131) - ("\\(||\\)" #Xe132) - ("\\(||=\\)" #Xe133) - ("[^|]\\(|=\\)" #Xe134) - ("\\(|>\\)" #Xe135) - ("\\(\\^=\\)" #Xe136) - ("\\(\\$>\\)" #Xe137) - ("\\(\\+\\+\\)" #Xe138) - ("\\(\\+\\+\\+\\)" #Xe139) - ("\\(\\+>\\)" #Xe13a) - ("\\(=:=\\)" #Xe13b) - ("[^!/]\\(==\\)[^>]" #Xe13c) - ("\\(===\\)" #Xe13d) - ("\\(==>\\)" #Xe13e) - ("[^=]\\(=>\\)" #Xe13f) - ("\\(=>>\\)" #Xe140) - ("\\(<=\\)" #Xe141) - ("\\(=<<\\)" #Xe142) - ("\\(=/=\\)" #Xe143) - ("\\(>-\\)" #Xe144) - ("\\(>=\\)" #Xe145) - ("\\(>=>\\)" #Xe146) - ("[^-=]\\(>>\\)" #Xe147) - ("\\(>>-\\)" #Xe148) - ("\\(>>=\\)" #Xe149) - ("\\(>>>\\)" #Xe14a) - ("\\(<\\*\\)" #Xe14b) - ("\\(<\\*>\\)" #Xe14c) - ("\\(<|\\)" #Xe14d) - ("\\(<|>\\)" #Xe14e) - ("\\(<\\$\\)" #Xe14f) - ("\\(<\\$>\\)" #Xe150) - ("\\( doFullFloat) <+> manageHook def <+> manageScratchPad , handleEventHook = handleEventHook def <+> docksEventHook - , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts $ layoutHook def + -- , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts $ layoutHook def + , layoutHook = smartBorders $ avoidStruts $ layoutHook def , modMask = mod4Mask -- User Super instead of Alt , terminal = myTerminal , startupHook = startup -- cgit v1.2.3 From 5dbd999795d38446cd19589ee013b5085b777bfb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 08:03:22 -0200 Subject: Prune containers in gc.sh. --- scripts/gc.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/gc.sh b/scripts/gc.sh index 2d7a8f3..e6a1d0d 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -37,6 +37,7 @@ docker stop $(docker ps -a -q) docker rm $(docker ps -a -q) echo y | docker volume prune +echo y | docker container prune after=$(disk_space) -- cgit v1.2.3 From 2c009740698f5568b3b41be1e4e1384f60c40d6e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 08:04:34 -0200 Subject: docker-compose.yml. --- vps/docker-compose.yml | Bin 1908 -> 1957 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/vps/docker-compose.yml b/vps/docker-compose.yml index 58c9a00..d06af98 100644 Binary files a/vps/docker-compose.yml and b/vps/docker-compose.yml differ -- cgit v1.2.3 From 6741ac6690e5660305efad3bbe1bb2c832492e13 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 10:26:54 -0200 Subject: Add alias for fetching mail. --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index b106ed8..f316c6c 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -14,6 +14,7 @@ alias watch="watch " alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" +alias mail="mbsync -a && notmuch new" alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From bc5654083bf10e13db832d1601d7e1d7a8dbc474 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 10:50:19 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11104 -> 11065 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 4e5f0af..b502fca 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From ddf019522e73e06d8cb47be2c141452cea03b19c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 19:37:07 -0200 Subject: Use git-annex from 18.03 NixOS release. --- nixos/configuration.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a5a7646..edd764b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -69,6 +69,10 @@ environment.systemPackages = let pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; + pkgs-18-03 = import(pkgs.fetchzip { + url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; + sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; + }) {}; timidityWithEvenMoreFormats = with pkgs; timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; buildInputs = oldAttrs.buildInputs ++ [ libogg libvorbis flac ]; @@ -81,7 +85,7 @@ gitAndTools.git-open gitAndTools.gitFull gitAndTools.diff-so-fancy - gitAndTools.git-annex + pkgs-18-03.gitAndTools.git-annex gitAndTools.gitRemoteGcrypt gitAndTools.git-dit pkgsUnstable.gitAndTools.git-secrets -- cgit v1.2.3 From ab4cdc4e5a72eb602471d9bc7acbb34c61c8e9d7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 19:38:02 -0200 Subject: Remove unused =alert= alias. --- bash/aliases.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index f316c6c..f9649a2 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -16,7 +16,6 @@ alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" alias mail="mbsync -a && notmuch new" -alias alert='notify-send --urgency=low -i "$([ $? = 0 ] && echo terminal || echo error)" "$(history|tail -n1|sed -e '\''s/^\s*[0-9]\+\s*//;s/[;&|]\s*alert$//'\'')"' alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator" -- cgit v1.2.3 From bd103263fa07eabc05c63f60129d86b48e904f72 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 21:57:15 -0200 Subject: Unify crontab and alias command under scripts/mail.sh. --- bash/aliases.sh | 1 - nixos/configuration.nix | 3 ++- scripts/mail.sh | 1 + 3 files changed, 3 insertions(+), 2 deletions(-) create mode 100755 scripts/mail.sh diff --git a/bash/aliases.sh b/bash/aliases.sh index f9649a2..142b6a9 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -14,7 +14,6 @@ alias watch="watch " alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" -alias mail="mbsync -a && notmuch new" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index edd764b..7bfab11 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -290,7 +290,8 @@ services = { cron.enable = true; - cron.systemCronJobs = ["* * * * * andreh mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log"]; + # We can see the actual generated crontab at /etc/crontab + cron.systemCronJobs = ["* * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/mail.sh"]; xserver = { enable = true; diff --git a/scripts/mail.sh b/scripts/mail.sh new file mode 100755 index 0000000..e9f14d8 --- /dev/null +++ b/scripts/mail.sh @@ -0,0 +1 @@ +mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log -- cgit v1.2.3 From 8aa714eb5cb459647b92e979f553b1756397bb34 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 21:57:48 -0200 Subject: Reenable Guix in NixOS. --- bash/env.sh | 6 +++--- nixos/configuration.nix | 26 +++++++++++++------------- scripts/gc.sh | 6 ++++++ scripts/guix | 1 + 4 files changed, 23 insertions(+), 16 deletions(-) create mode 120000 scripts/guix diff --git a/bash/env.sh b/bash/env.sh index c537b4e..c81cba2 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -68,9 +68,9 @@ isLinux && { # export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" -# isLinux && { -# source "$GUIX_PROFILE" -# } +isLinux && { + source "$GUIX_PROFILE" +} export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7bfab11..0432380 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -411,19 +411,19 @@ services = { # Derived from Guix guix-daemon.service.in # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 -# guix-daemon = { -# enable = true; -# description = "Build daemon for GNU Guix"; -# serviceConfig = { -# ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; -# Environment="GUIX_LOCPATH=/root/.guix-profile/lib/locale"; -# RemainAfterExit="yes"; -# StandardOutput="syslog"; -# StandardError="syslog"; -# TaskMax= "8192"; -# }; -# wantedBy = [ "multi-user.target" ]; -# }; + guix-daemon = { + enable = true; + description = "Build daemon for GNU Guix"; + serviceConfig = { + ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; + Environment="GUIX_LOCPATH=/root/.guix-profile/lib/locale"; + RemainAfterExit="yes"; + StandardOutput="syslog"; + StandardError="syslog"; + TaskMax= "8192"; + }; + wantedBy = [ "multi-user.target" ]; + }; }; }; diff --git a/scripts/gc.sh b/scripts/gc.sh index e6a1d0d..9b98123 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -5,6 +5,7 @@ disk_space() { } before=$(disk_space) + yellow "Cleaning up the NixOS store" profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) @@ -20,6 +21,11 @@ nix-store --gc nix-collect-garbage -d +yellow "Cleaning up Guix store" + +guix gc + + yellow "Cleaning up up the Trash and /tmp folders" rm -rf ~/.local/share/Trash/files/* diff --git a/scripts/guix b/scripts/guix new file mode 120000 index 0000000..96901ae --- /dev/null +++ b/scripts/guix @@ -0,0 +1 @@ +/var/guix/profiles/per-user/root/guix-profile/bin/guix \ No newline at end of file -- cgit v1.2.3 From dfb9ea1b5186cf0b27925365f9404a6416a18236 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 21:59:00 -0200 Subject: Remove deprecated nix-repl. --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0432380..31e04f3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -190,7 +190,6 @@ pypi2nix bundix - # nix-repl ## Music -- cgit v1.2.3 From 0797990f6139dfb3ee120ae9b5673abf0b340aeb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 22:00:48 -0200 Subject: Remove thunderbird package. --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 31e04f3..e6d15b6 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -246,7 +246,6 @@ ## GUI programs qemu - thunderbird calibre # quodlibet rhythmbox -- cgit v1.2.3 From 14010fc4d9a06b60a9fab3e44825a447d273ca4b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 22:01:31 -0200 Subject: Remove evolution package. --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e6d15b6..81355eb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -254,7 +254,6 @@ emacs tdesktop vlc - gnome3.evolution keepassx2-http yubioath-desktop tor-browser-bundle-bin -- cgit v1.2.3 From 39572452b393a0f964a8b985824d8018cb7f1513 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 22:03:00 -0200 Subject: Stop using QuodLibet in favor of Rhythmbox. --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 81355eb..440aa4d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -247,7 +247,6 @@ qemu calibre - # quodlibet rhythmbox gpodder firefox -- cgit v1.2.3 From e66b03a61ab7715b16915744e127a9b379a04018 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 22:03:21 -0200 Subject: Arrange packages by category. --- nixos/configuration.nix | 39 +++++++++++++++++++++++++-------------- 1 file changed, 25 insertions(+), 14 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 440aa4d..d754f7b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -95,6 +95,7 @@ mr nextcloud-client borgbackup + git-sizer ## CLI tools @@ -144,18 +145,12 @@ feh # simplistic image viewer nixUnstable # =nix= zip - kubernetes zlib - vagrant - docker_compose - docker-machine redis alsaUtils # for xmonad volume commands - git-sizer multimarkdown # =markdown= pup # command-line HTML parsing https://github.com/ericchiang/pup binutils-unwrapped # =ar= command for cargo build - ant nssTools # =pk12util= gitAndTools.hub # GitHub helper insomnia @@ -164,8 +159,6 @@ gitlab-runner sshpass zathura # for viewing Emacs PDF files - notmuch - isync cacert gtypist pandoc @@ -178,14 +171,21 @@ poppler_utils # used by diffoscope for comparing PDF files pdftk # - gnome3.libgnome-keyring gnome3.gnome-keyring + + ## Mail + + notmuch + isync + + ## Spell checking (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) + ## NixOS pypi2nix @@ -207,7 +207,6 @@ leiningen python3 python - # nodejs-9_x yarn elixir openjdk @@ -218,14 +217,26 @@ cargo clojure # =clj= visualvm # JVM profiling tool + ant maven go_bootstrap - ansible rakudo bats ledger + ## Containers and VMs + + packer + docker_compose + docker-machine + vagrant + kubernetes + ansible + qemu + pkgsUnstable.gnome3.gtk-vnc + + ## xmonad xorg.xmodmap @@ -242,10 +253,8 @@ arandr - ## GUI programs - qemu calibre rhythmbox gpodder @@ -261,16 +270,18 @@ android-studio androidsdk_extras androidndk - pkgsUnstable.gnome3.gtk-vnc pkgsUnstable.patchwork-classic + ## Cryptocururencies electrum zbar # for on-screen QR Code scanning monero + ## nu specific packages + slack chromium ]; -- cgit v1.2.3 From cebd9537d0671f6f71371ed1a955f89ec6457c95 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 22:19:08 -0200 Subject: Fetch mail once an hour. Adapt mail.sh to be called on-demand. --- nixos/configuration.nix | 2 +- scripts/mail.sh | 6 +++++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d754f7b..8db07ea 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -298,7 +298,7 @@ services = { cron.enable = true; # We can see the actual generated crontab at /etc/crontab - cron.systemCronJobs = ["* * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/mail.sh"]; + cron.systemCronJobs = ["0 * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/mail.sh -s"]; xserver = { enable = true; diff --git a/scripts/mail.sh b/scripts/mail.sh index e9f14d8..c8f6522 100755 --- a/scripts/mail.sh +++ b/scripts/mail.sh @@ -1 +1,5 @@ -mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log +if [ "$1" = "-s" ]; then + mbsync -a &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log +else + mbsync -aV && notmuch new +fi -- cgit v1.2.3 From 029d65cb8942dc39b8f8c2ac6904c61243eca616 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Nov 2018 22:20:25 -0200 Subject: WIP: forcefully source autojump Bash setup. --- bash/bashrc.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 8613f65..18aeb9a 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -26,3 +26,5 @@ env > ~/.spacemacs.env # tmp FIXME: move to mrconfig.ini export PATH="$HOME/Desktop/hinarioespirita-db/songbooks/cli:$PATH" alias sb="songbooks" + +source "$(dirname $(readlink $(which autojump)))/../share/autojump/autojump.bash" -- cgit v1.2.3 From dd5bff7bd07f52c5ad4af47bc49141bc96beee65 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 24 Nov 2018 08:12:39 -0200 Subject: borgbackup. --- .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp index c80de98..5b1f054 100644 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp and b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp differ diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce index 33af8b5..00796f3 100644 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce and b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce differ -- cgit v1.2.3 From 1dbfbf65e7b80c850591a6c0c0f7f52ce9a9a50b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 24 Nov 2018 14:39:51 -0200 Subject: Add readline alias wrapper for =perl6=. --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 142b6a9..4e688f1 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -14,6 +14,7 @@ alias watch="watch " alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" +alias perl6="rlwrap perl6" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From 0ceb4ce700ce6e5c7d25dad9c4153efd9dd28f7c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 24 Nov 2018 21:18:41 -0200 Subject: Add =nnn= package. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8db07ea..ba986e4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -166,6 +166,7 @@ fzf ncdu fd + nnn diffoscope # poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From aab579a7add60f4024d03021d63e2d70bc549673 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 25 Nov 2018 15:15:17 -0200 Subject: Add startx script. --- scripts/startx | 3 +++ 1 file changed, 3 insertions(+) create mode 100644 scripts/startx diff --git a/scripts/startx b/scripts/startx new file mode 100644 index 0000000..9b1d153 --- /dev/null +++ b/scripts/startx @@ -0,0 +1,3 @@ +#!/bin/sh + +sudo systemctl restart display-manager & -- cgit v1.2.3 From 83c5b5cc6a3a2229960fae4f9f17e96747d56d4f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 25 Nov 2018 15:15:36 -0200 Subject: Update Spacemacs generated code. --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index a45d968..808602d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -757,7 +757,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen unicode-fonts ucs-utils font-utils unfill toml-mode toc-org tide typescript-mode tagedit systemd symon swift-mode string-inflection spaceline-all-the-icons spaceline powerline smeargle slime-company slime slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci purescript-mode psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode persistent-soft list-utils pcache pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-category-capture org-present org-pomodoro alert log4e gntp org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov esxml nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow macrostep lorem-ipsum livid-mode skewer-mode live-py-mode link-hint json-navigator hierarchy js2-refactor multiple-cursors js2-mode js-doc jinja2-mode interleave insert-shebang indent-guide importmagic epc ctable concurrent deferred impatient-mode simple-httpd hungry-delete htmlize hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers parent-mode highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose window-purpose imenu-list helm-projectile helm-org-rifle helm-notmuch notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore request helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets haml-mode google-translate google-c-style golden-ratio gnuplot gitignore-templates gitignore-mode gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe+ git-gutter-fringe fringe-helper git-gutter+ git-gutter gh-md geiser fuzzy flyspell-correct-helm flyspell-correct flycheck-rust flycheck-rtags flycheck-pos-tip pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flycheck flx-ido flx fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit magit git-commit ghub treepy graphql with-editor evil-lisp-state evil-lion evil-ledger ledger-mode evil-indent-plus evil-iedit-state iedit evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens smartparens paredit evil-args evil-anzu anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump doom-modeline eldoc-eval shrink-path all-the-icons memoize dockerfile-mode docker json-mode tablist magit-popup docker-tramp json-snatcher json-reformat disaster diff-hl define-word debbugs soap-client cython-mode csv-mode counsel-projectile projectile counsel swiper ivy company-web web-completion-data company-tern dash-functional tern company-statistics company-shell company-rtags rtags company-restclient restclient know-your-http-well company-plsense company-nixos-options nixos-options company-lua lua-mode company-ghci haskell-mode company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clean-aindent-mode clang-format cider-eval-sexp-fu eval-sexp-fu highlight cider sesman spinner queue clojure-mode chruby centered-cursor-mode cargo markdown-mode rust-mode bundler inf-ruby browse-at-remote auto-yasnippet yasnippet auto-highlight-symbol auto-dictionary auto-compile packed auctex-latexmk auctex ansible-doc ansible anaconda-mode pythonic alchemist company elixir-mode aggressive-indent adoc-mode markup-faces ace-window ace-link ace-jump-helm-line helm avy helm-core ac-ispell auto-complete popup which-key use-package pcre2el org-plus-contrib hydra evil goto-chg undo-tree dotenv-mode diminish bind-map bind-key async sql-indent perl6-mode font-lock+ evil-unimpaired)))) + (flyspell-popup yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 4e7eccdc7a7793e8d83daba1f7562959e809c483 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 25 Nov 2018 15:15:47 -0200 Subject: Fix verbose configuration for mbsync in mail.sh. --- scripts/mail.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/mail.sh b/scripts/mail.sh index c8f6522..a6d5adb 100755 --- a/scripts/mail.sh +++ b/scripts/mail.sh @@ -1,5 +1,5 @@ if [ "$1" = "-s" ]; then - mbsync -a &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log + mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log else - mbsync -aV && notmuch new + mbsync -a && notmuch new fi -- cgit v1.2.3 From 690086cdb38cae9604b660d186285dd296b78eea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 25 Nov 2018 15:16:04 -0200 Subject: Add =m= alias for mail.sh. --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 4e688f1..07c46ea 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -15,6 +15,7 @@ alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" alias perl6="rlwrap perl6" +alias m="mail.sh" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From 23861b2cea88465518586131ff50c113bb6609fc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 25 Nov 2018 15:16:15 -0200 Subject: Add nurl script. --- encrypted/nu/scripts/nurl | Bin 0 -> 44 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 encrypted/nu/scripts/nurl diff --git a/encrypted/nu/scripts/nurl b/encrypted/nu/scripts/nurl new file mode 100644 index 0000000..1b7d03f Binary files /dev/null and b/encrypted/nu/scripts/nurl differ -- cgit v1.2.3 From f7b2f093fc1268024aee7c169dc50fd807f98e93 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 29 Nov 2018 06:41:44 -0200 Subject: Sync emails in parallel. --- scripts/mail.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/mail.sh b/scripts/mail.sh index a6d5adb..a7c8208 100755 --- a/scripts/mail.sh +++ b/scripts/mail.sh @@ -1,5 +1,9 @@ if [ "$1" = "-s" ]; then mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log else - mbsync -a && notmuch new + mbsync EuAndreh & + mbsync Nubank & + mbsync Gmail & + wait + notmuch new fi -- cgit v1.2.3 From 420257bc76cacc0f50a85c2b9cafed9fae059452 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 29 Nov 2018 06:41:59 -0200 Subject: Add sample command for deleting emails. --- scripts/gc.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/gc.sh b/scripts/gc.sh index 9b98123..9670149 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -51,3 +51,8 @@ green "Done." green "Disk space before and after:" blue " before: ${before}" blue " after: ${after}" + +# Clean up deleted email files: +# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ +# notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" +# notmuch new -- cgit v1.2.3 From df698c7c23196b8f503ddc3dd0547f887c2adbb4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 29 Nov 2018 06:42:16 -0200 Subject: tmp: add bin paths. --- bash/bashrc.sh | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 18aeb9a..8af4dc4 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -24,7 +24,14 @@ source ~/dev/nu/nucli/nu.bashcompletion env > ~/.spacemacs.env # tmp FIXME: move to mrconfig.ini -export PATH="$HOME/Desktop/hinarioespirita-db/songbooks/cli:$PATH" +export PATH="$HOME/annex/dev/code/songbooks/cli:$PATH" alias sb="songbooks" source "$(dirname $(readlink $(which autojump)))/../share/autojump/autojump.bash" + + +export PATH="$HOME/.perl6/bin:$PATH" + + +export PATH="$HOME/tmp/rakudobrew/bin:$PATH" +# export PATH="$HOME/songbooks/cli:$PATH" -- cgit v1.2.3 From 209e8e2c9358414e22686f6983f12a28f6d3cdbb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 29 Nov 2018 06:43:09 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11065 -> 11629 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index b502fca..78a2592 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 8a6efd84a125f7050e5c7e72ff98c369c69c63c5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Dec 2018 06:40:13 -0200 Subject: Remove duplicated clojure layer and explicitly enable clj-refactor. --- spacemacs.el | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 808602d..b03468b 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -45,7 +45,6 @@ This function should only modify configuration layer settings." auto-completion better-defaults c-c++ - clojure common-lisp csv docker @@ -86,7 +85,8 @@ This function should only modify configuration layer settings." windows-scripts yaml (clojure :variables - clojure-enable-fancify-symbols t) + clojure-enable-fancify-symbols t + clojure-enable-clj-refactor t) (org :variables org-enable-reveal-js-support t) (shell :variables @@ -757,7 +757,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (flyspell-popup yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (clj-refactor inflections edn peg flyspell-popup yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From e627f4b4db3b469abc7daa5850f2aa8b192502c7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Dec 2018 06:44:54 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11629 -> 11697 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 78a2592..b502dd1 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From b6a074e0f956c73f8173b1c70cbfac4ca30b493b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Dec 2018 11:30:44 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11697 -> 11783 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index b502dd1..ed6d597 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From b29a7744837c7ce14f3c8b9a75122199427760ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Dec 2018 12:07:37 -0200 Subject: Update Spacemacs generated code. --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index b03468b..e15981b 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -757,7 +757,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (clj-refactor inflections edn peg flyspell-popup yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From e6f6daf36a72cc9d0a52618bc7b815112274ec31 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Dec 2018 20:40:32 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11783 -> 11764 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index ed6d597..3b4295a 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From fe87ca5aab38de57dba831bb46b66dc627ca54b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Dec 2018 11:31:41 -0200 Subject: Prefer custom installed GNU tools over built in ones. --- bash/bashrc.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 8af4dc4..9ddaf6f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -33,5 +33,9 @@ source "$(dirname $(readlink $(which autojump)))/../share/autojump/autojump.bash export PATH="$HOME/.perl6/bin:$PATH" +isMac && { + PATH="/usr/local/opt/make/libexec/gnubin:$PATH" +} + export PATH="$HOME/tmp/rakudobrew/bin:$PATH" # export PATH="$HOME/songbooks/cli:$PATH" -- cgit v1.2.3 From fa1b564d7cb27438e718e0d43daff02c14f1629b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Dec 2018 07:57:10 -0200 Subject: macOS: prefer local bin over system bin. --- bash/bashrc.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 9ddaf6f..037083c 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -35,6 +35,7 @@ export PATH="$HOME/.perl6/bin:$PATH" isMac && { PATH="/usr/local/opt/make/libexec/gnubin:$PATH" + PATH="/usr/local/bin:$PATH" } export PATH="$HOME/tmp/rakudobrew/bin:$PATH" -- cgit v1.2.3 From a9c64c33f01e67af1c83cbbe893b7142fae266ef Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Dec 2018 07:58:44 -0200 Subject: Restrict autojump hack to Linux. --- bash/bashrc.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 037083c..d06692b 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -27,8 +27,9 @@ env > ~/.spacemacs.env export PATH="$HOME/annex/dev/code/songbooks/cli:$PATH" alias sb="songbooks" -source "$(dirname $(readlink $(which autojump)))/../share/autojump/autojump.bash" - +isLinux && { + source "$(dirname $(readlink $(which autojump)))/../share/autojump/autojump.bash" +} export PATH="$HOME/.perl6/bin:$PATH" -- cgit v1.2.3 From 3e7f6f2382a6d01835389d8ac2ba64bfeead6f7e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Dec 2018 12:19:23 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11764 -> 11817 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 3b4295a..0fdf351 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From e161fa9a0936e64d519a4164e9643735959b8efa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Dec 2018 12:20:56 -0200 Subject: Add inkscape package. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ba986e4..5a4a52d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -256,6 +256,7 @@ ## GUI programs + inkscape calibre rhythmbox gpodder -- cgit v1.2.3 From b584329740ab8453852cad6176558d4af4079b7c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Dec 2018 12:18:16 -0200 Subject: Add mail files to GC routine. --- scripts/gc.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index 9670149..ac1b412 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -45,14 +45,15 @@ docker rm $(docker ps -a -q) echo y | docker volume prune echo y | docker container prune + +# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ +yellow "Clean up deleted email files" +notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" +notmuch new + after=$(disk_space) green "Done." green "Disk space before and after:" blue " before: ${before}" blue " after: ${after}" - -# Clean up deleted email files: -# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ -# notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -# notmuch new -- cgit v1.2.3 From f2cc7b046501ebbf4c3b26018d0f964625e16d1a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Dec 2018 12:18:48 -0200 Subject: WIP: add custom version of Node.js. --- nixos/configuration.nix | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5a4a52d..e94b782 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -73,12 +73,23 @@ url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; }) {}; + timidityWithEvenMoreFormats = with pkgs; timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; buildInputs = oldAttrs.buildInputs ++ [ libogg libvorbis flac ]; }); + + # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 + buildNodejs = pkgs.callPackage {}; + nodejs-10_14_1 = buildNodejs { + enableNpm = true; + version = "10.14.1"; + sha256 = "0d5hg8hf4c1sshh77a6hy944bzm3q3ipqggbyim61q3r2szngvrx"; + # Uses HTTPS (https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/nodejs.nix#L45), safer to trust the hash (unless it's already compromised :shrug:) + }; in with pkgs; [ - pkgsUnstable.nodejs-10_x + pkgsUnstable.nodejs-10_x + # nodejs-10_14_1 ## Personal data tools -- cgit v1.2.3 From b560c85f4d8815121147cc113830993c0a414717 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Dec 2018 12:27:16 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11817 -> 11964 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 0fdf351..3745d0e 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 09c089d68d20759e5dd3d68c290717027f774415 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Dec 2018 07:04:33 -0200 Subject: Add custom alias for =copy= on macOS. --- bash/aliases.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 07c46ea..c8fa2b3 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -7,7 +7,12 @@ alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahp" alias ll="ls -lhp" alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" -alias copy="tr -d '\n' | xclip -sel clip" +isLinux && { + alias copy="tr -d '\n' | xclip -sel clip" +} +isMac && { + alias copy="tr -d '\n' | pbcopy" +} alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 alias watch="watch " -- cgit v1.2.3 From 42b98a3369b501f06602c79b1dacf323847e1dce Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Dec 2018 07:04:49 -0200 Subject: Add =lower= alias. --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index c8fa2b3..5e38c35 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -13,6 +13,7 @@ isLinux && { isMac && { alias copy="tr -d '\n' | pbcopy" } +alias lower="tr [:upper:] [:lower:]" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 alias watch="watch " -- cgit v1.2.3 From 705f3b755d8e9b735ae9045ede9b3f386ac13e68 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Dec 2018 11:42:41 -0200 Subject: Add trim bash alias. --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 5e38c35..b9a9218 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -13,6 +13,7 @@ isLinux && { isMac && { alias copy="tr -d '\n' | pbcopy" } +alias trim="tr -d '\n'" alias lower="tr [:upper:] [:lower:]" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 -- cgit v1.2.3 From 81cb475993f312a5945bda1330dcc6643efddf68 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Dec 2018 22:36:59 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11964 -> 11975 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 3745d0e..216beb1 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 6dc8a0dcba5ac44e56c451a622aca67d716822eb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Dec 2018 05:37:51 -0200 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3074 -> 3051 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index 38d6252..793e6cc 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 7b7fa5d425437a7efa4eef3aaa820798bfb9acaa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Dec 2018 05:38:04 -0200 Subject: Disable IPFS for now. --- nixos/configuration.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e94b782..cea2ca3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -375,9 +375,9 @@ # https://nixos.org/nixos/options.html#ipfs ipfs = { - enable = true; - enableGC = true; - autoMount = true; + enable = false; + enableGC = false; + autoMount = false; }; }; -- cgit v1.2.3 From 68c4dcdf7ee36693a6129ff3f000ad999cb46ca4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Dec 2018 05:38:58 -0200 Subject: WIP: set nautilus as the opener of directories. --- bash/x.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/x.sh b/bash/x.sh index 0759fc2..e0700e3 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -15,4 +15,6 @@ isLinux && { xdg-settings set default-web-browser firefox.desktop xdg-mime default firefox.desktop text/html xdg-mime default firefox.desktop text/xml + + xdg-mime default nautilus.desktop inode/directory # FIXME } -- cgit v1.2.3 From bdf65952685224824539ecf1aa3232ed54281486 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Dec 2018 05:41:54 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11975 -> 11831 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 216beb1..ec51012 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From f4f7ddd0a70acf9ec2a40c6532ce256eca01d54e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Dec 2018 06:19:40 -0200 Subject: Make yt-dl an exported function. --- bash/aliases.sh | 1 - bash/env.sh | 1 - bash/youtube.sh | 9 ++++++++- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index b9a9218..772cded 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -6,7 +6,6 @@ alias open="xdg-open" alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahp" alias ll="ls -lhp" -alias yt-dl="youtube-dl -o '$YT_TEMPLATE'" isLinux && { alias copy="tr -d '\n' | xclip -sel clip" } diff --git a/bash/env.sh b/bash/env.sh index c81cba2..a2e4785 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -32,7 +32,6 @@ export PATH=~/.local/bin:$PATH export EDITOR=vi export PATH="$DOTFILES/scripts/:$PATH" export PATH="$DOTFILES/encrypted/scripts/:$PATH" -export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" export INPUTRC=~/.inputrc export CACHE_DIR="~/Nextcloud/cache" diff --git a/bash/youtube.sh b/bash/youtube.sh index c732e26..3c5b56e 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -2,14 +2,20 @@ export DEFAULT_PLAYLIST_END=15 export DEFAULT_INC_STEP=10 +export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" +# Always downloads video, doesn't look at the download-archive +yt-dl() { + youtube-dl "$1" -o "$YT_TEMPLATE" +} +export -f yt-dl download() { youtube-dl "$1" \ --download-archive ~/Nextcloud/cache/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end $2 \ - --output "~/Downloads/yt-dl/%(uploader)s/%(upload_date)s - %(title)s.%(ext)s" + --output "$YT_TEMPLATE" } export -f download @@ -38,6 +44,7 @@ inc_download() { local step="${3-$DEFAULT_INC_STEP}" local file="$HOME/.yt-db/$id" + mkdir -p "$HOME/.yt-db" local n_count="$(cat $file 2> /dev/null || printf 10)" local n_count_new="$(($n_count + $step))" -- cgit v1.2.3 From 0d780c19821b9a261b5b5dc56f2104b01326b2d1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Dec 2018 06:58:51 -0200 Subject: Make yt-dl alias for yt_dl. --- bash/aliases.sh | 1 + bash/youtube.sh | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 772cded..a8205d7 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -6,6 +6,7 @@ alias open="xdg-open" alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahp" alias ll="ls -lhp" +alias yt-dl="yt_dl" isLinux && { alias copy="tr -d '\n' | xclip -sel clip" } diff --git a/bash/youtube.sh b/bash/youtube.sh index 3c5b56e..584d09b 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -5,10 +5,10 @@ export DEFAULT_INC_STEP=10 export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" # Always downloads video, doesn't look at the download-archive -yt-dl() { +yt_dl() { youtube-dl "$1" -o "$YT_TEMPLATE" } -export -f yt-dl +export -f yt_dl download() { youtube-dl "$1" \ -- cgit v1.2.3 From 4bae6ab8738556d57975ba0965974940c9e342f8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 11 Dec 2018 21:34:20 -0200 Subject: Add gnome-control-center alias. --- bash/aliases.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index a8205d7..c56375f 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -24,6 +24,8 @@ alias du="ncdu --color dark" alias perl6="rlwrap perl6" alias m="mail.sh" +alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" + alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator" -- cgit v1.2.3 From 53eb8b2c1d447cf8f2b483489cec413e59a78a34 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Dec 2018 09:53:00 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11831 -> 11853 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index ec51012..56b3181 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 782af14a03364a4ab32a6c0451a8c0f7fa0fba91 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Dec 2018 08:01:50 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11853 -> 11914 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 56b3181..8e21c68 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 5cb67aa36151fc8ca4e8789ce8fd1c42edde2935 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Dec 2018 13:52:31 -0200 Subject: profiles.clj. --- lein/profiles.clj | Bin 1124 -> 1185 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 3d52f93..5ead478 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From dd3608c72459b5508bd183d79d0be041bf45e13e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Dec 2018 13:52:50 -0200 Subject: Replace rust packages with rustup. --- nixos/configuration.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index cea2ca3..f9137c1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -224,8 +224,7 @@ openjdk solc bundler - rustc - rustfmt + rustup cargo clojure # =clj= visualvm # JVM profiling tool -- cgit v1.2.3 From 031846b97f4727afda5ee103886c76863d387733 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Dec 2018 16:30:32 -0200 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3051 -> 3061 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index 793e6cc..6efa22d 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 11084a9940dde6c3f0647d671c9e69db8af46824 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Dec 2018 08:51:03 -0200 Subject: Run reload after starting annex tmuxinator template. --- bash/aliases.sh | 1 + tmux/projects/annex.yml | 11 ++++++++--- 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index c56375f..fef53cc 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -49,4 +49,5 @@ alias ,s="git status" alias ,d="git diff" alias ,ds="git diff --staged" +alias reload="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" alias ,r="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 92acafe..50d34bc 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -5,6 +5,11 @@ windows: - annex+dotfiles: layout: main-vertical panes: - - cd - - j dotfiles && git status - - git status + - misc: + - cd + - dotfiles: + - j dotfiles && git status + - sleep 10 + - reload + - annex: + - git status -- cgit v1.2.3 From f163ca2351fe798cc1e50623ef274080b9cf91b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Dec 2018 16:05:50 -0200 Subject: Add save-exact=true to npmrc configuration. --- nixos/npmrc.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/npmrc.sh b/nixos/npmrc.sh index 2bc28dc..326ac0b 100644 --- a/nixos/npmrc.sh +++ b/nixos/npmrc.sh @@ -1 +1,4 @@ prefix="~/.npm-packages" +# Taken from: +# http://www.tomsquest.com/blog/2018/10/better-npm-ing/ +save-exact=true -- cgit v1.2.3 From df04ecc16f653ed2fcf86e2099d21630354a000f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Dec 2018 16:06:14 -0200 Subject: Add --write-description to youtube-dl scripts. --- bash/youtube.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index 584d09b..6ffb2da 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -6,15 +6,16 @@ export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(e # Always downloads video, doesn't look at the download-archive yt_dl() { - youtube-dl "$1" -o "$YT_TEMPLATE" + youtube-dl "$1" -o "$YT_TEMPLATE" --write-description } export -f yt_dl download() { youtube-dl "$1" \ --download-archive ~/Nextcloud/cache/youtube-dl-seen.conf \ - --prefer-free-formats \ - --playlist-end $2 \ + --prefer-free-formats \ + --playlist-end $2 \ + --write-description \ --output "$YT_TEMPLATE" } export -f download -- cgit v1.2.3 From 322e126d4326366d18797243ea69e410fb8bbab2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Dec 2018 16:06:48 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11914 -> 11901 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 8e21c68..f120008 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From d4e6648afd61205136c98fdc56cf151eb437a078 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 22 Dec 2018 18:19:29 -0200 Subject: Move external scripts to bin/. --- bin/git-blame-someone-else | 21 +++++++++++++++++++++ bin/sl | 13 +++++++++++++ bin/sleepsort | 20 ++++++++++++++++++++ scripts/bump.sh | 21 --------------------- scripts/git-blame-someone-else | 21 --------------------- scripts/sl | 13 ------------- scripts/sleepsort | 20 -------------------- 7 files changed, 54 insertions(+), 75 deletions(-) create mode 100755 bin/git-blame-someone-else create mode 100755 bin/sl create mode 100755 bin/sleepsort delete mode 100755 scripts/bump.sh delete mode 100755 scripts/git-blame-someone-else delete mode 100755 scripts/sl delete mode 100755 scripts/sleepsort diff --git a/bin/git-blame-someone-else b/bin/git-blame-someone-else new file mode 100755 index 0000000..dd71826 --- /dev/null +++ b/bin/git-blame-someone-else @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Taken from https://github.com/jayphelps/git-blame-someone-else/ + +if [ $# -ne 2 ]; then + >&2 echo "Usage: $0 " + exit 1 +fi + +AUTHOR=$1 +AUTHOR_NAME=$(echo $AUTHOR | perl -wlne '/^(.*?)\s*<.*>$/ and print $1') +AUTHOR_EMAIL=$(echo $AUTHOR | perl -wlne '/^.*\s*<(.*)>$/ and print $1') +COMMIT=$(git rev-parse --short $2) + +{ + GIT_SEQUENCE_EDITOR="sed -i -e 's/^pick $COMMIT/edit $COMMIT/'" git rebase -i $COMMIT~1^^ + GIT_COMMITTER_NAME="$AUTHOR_NAME" GIT_COMMITTER_EMAIL="$AUTHOR_EMAIL" git commit --amend --no-edit --author="$AUTHOR" + # git rebase --continue +} &> /dev/null + +echo "$AUTHOR_NAME is now the author of $COMMIT. You're officially an asshole."; diff --git a/bin/sl b/bin/sl new file mode 100755 index 0000000..2333462 --- /dev/null +++ b/bin/sl @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Taken from: +# https://gir.st/blog/sl-alt.htm + +# sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 + +LEN=$(ls "$@" |wc -L) # get the length of the longest line + +ls "$@" | rev | while read -r line +do + printf "%${LEN}.${LEN}s\\n" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' +done \ No newline at end of file diff --git a/bin/sleepsort b/bin/sleepsort new file mode 100755 index 0000000..ea20fcb --- /dev/null +++ b/bin/sleepsort @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# Taken from: +# https://www.quora.com/What-is-the-strangest-sorting-algorithm/answer/Nipun-Ramakrishnan + +function f() { + sleep "$1" + echo "$1" +} + +while [ -n "$1" ] +do + f "$1" & + shift +done + +wait + +# example usage: +# sleepsort 5 3 6 3 6 3 1 4 7 diff --git a/scripts/bump.sh b/scripts/bump.sh deleted file mode 100755 index 86eed54..0000000 --- a/scripts/bump.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -function latest_version() { - git tag | sort -V | tail -n 1 -} - -function overflow_bump() { - IFS=".$IFS" - read a b c - if [[ "$b" == 999 ]]; then - echo $((a + 1)).0.0 - elif [[ "$c" == 999 ]]; then - echo $a.$((b + 1)).0 - else - echo $a.$b.$((c + 1)) - fi -} - -latest_version | overflow_bump - -echo "$1" | overflow_bump diff --git a/scripts/git-blame-someone-else b/scripts/git-blame-someone-else deleted file mode 100755 index dd71826..0000000 --- a/scripts/git-blame-someone-else +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Taken from https://github.com/jayphelps/git-blame-someone-else/ - -if [ $# -ne 2 ]; then - >&2 echo "Usage: $0 " - exit 1 -fi - -AUTHOR=$1 -AUTHOR_NAME=$(echo $AUTHOR | perl -wlne '/^(.*?)\s*<.*>$/ and print $1') -AUTHOR_EMAIL=$(echo $AUTHOR | perl -wlne '/^.*\s*<(.*)>$/ and print $1') -COMMIT=$(git rev-parse --short $2) - -{ - GIT_SEQUENCE_EDITOR="sed -i -e 's/^pick $COMMIT/edit $COMMIT/'" git rebase -i $COMMIT~1^^ - GIT_COMMITTER_NAME="$AUTHOR_NAME" GIT_COMMITTER_EMAIL="$AUTHOR_EMAIL" git commit --amend --no-edit --author="$AUTHOR" - # git rebase --continue -} &> /dev/null - -echo "$AUTHOR_NAME is now the author of $COMMIT. You're officially an asshole."; diff --git a/scripts/sl b/scripts/sl deleted file mode 100755 index 2333462..0000000 --- a/scripts/sl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -# Taken from: -# https://gir.st/blog/sl-alt.htm - -# sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 - -LEN=$(ls "$@" |wc -L) # get the length of the longest line - -ls "$@" | rev | while read -r line -do - printf "%${LEN}.${LEN}s\\n" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' -done \ No newline at end of file diff --git a/scripts/sleepsort b/scripts/sleepsort deleted file mode 100755 index ea20fcb..0000000 --- a/scripts/sleepsort +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Taken from: -# https://www.quora.com/What-is-the-strangest-sorting-algorithm/answer/Nipun-Ramakrishnan - -function f() { - sleep "$1" - echo "$1" -} - -while [ -n "$1" ] -do - f "$1" & - shift -done - -wait - -# example usage: -# sleepsort 5 3 6 3 6 3 1 4 7 -- cgit v1.2.3 From 09d0598347522ce376d9c1be13795e7179896de9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 22 Dec 2018 18:20:41 -0200 Subject: Remove autotime script. --- scripts/autotime | 76 -------------------------------------------------------- 1 file changed, 76 deletions(-) delete mode 100755 scripts/autotime diff --git a/scripts/autotime b/scripts/autotime deleted file mode 100755 index fb01392..0000000 --- a/scripts/autotime +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env perl6 - -# FIXME: stdin support with lines() -# FIXME: --help and -h support - -sub from-timestamp(Int \timestamp) { - sub formatter($_) { - sprintf '%04d-%02d-%02d %02d:%02d:%02d', - .year, .month, .day, - .hour, .minute, .second, - } - given DateTime.new(+timestamp, :&formatter) { - when .Date.DateTime == $_ { return .Date } - default { return $_ } - } -} - -sub from-date-string(Str $date, Str $time?) { - my $d = Date.new($date); - if $time { - my ( $hour, $minute, $second ) = $time.split(':'); - return DateTime.new(date => $d, :$hour, :$minute, :$second); - } else { - return $d.DateTime; - } -} - -# FIXME: add test -multi sub convert(Int \timestamp) { - from-timestamp(+timestamp); -} - -# FIXME: add test -multi sub convert(Str $date where { try Date.new($_) }, Str $time?) { - from-date-string($date, $time).posix; -} - -# FIXME: add test -#| Convert timestamp to ISO date -multi sub MAIN(Int \timestamp) { - say convert(+timestamp); -} - -# FIXME: add test -#| Convert ISO date to timestamp -multi sub MAIN(Str $date where { try Date.new($_) }, Str $time?) { - say convert($date, $time); -} - -# multi sub MAIN() { -# for lines() -> $line { - -# } -# } - -#| Run internal tests -multi sub MAIN('test') is hidden-from-USAGE { - use Test; - plan 2; - subtest 'timestamp', { - plan 2; - is-deeply from-timestamp(1450915200), Date.new('2015-12-24'), - 'Date';; - my $dt = from-timestamp(1450915201); - is $dt, "2015-12-24 00:00:01", - 'DateTime with string formatting'; - }; - subtest 'from-date-string', { - plan 2; - is from-date-string('2015-12-24').posix, 1450915200, - 'one argument'; - is from-date-string('2015-12-24', '00:00:01').posix, - 1450915201, - 'two arguments'; - }; -} -- cgit v1.2.3 From 58eb3754ce258a7a1fe2f8d399aa15310e92c8ec Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 22 Dec 2018 18:20:48 -0200 Subject: Install languagetool package. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f9137c1..36e2cb1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -196,6 +196,7 @@ ## Spell checking (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) + languagetool ## NixOS -- cgit v1.2.3 From b920331c39434dc5b801e8bdcaa339bed6692070 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Dec 2018 09:25:18 -0200 Subject: Add ssh_config.conf file with a symlink at ~/.ssh/config pointing to it. --- .gitattributes | 1 + bash/symlinks.sh | 4 ++++ ssh_config.conf | Bin 0 -> 50 bytes 3 files changed, 5 insertions(+) create mode 100644 ssh_config.conf diff --git a/.gitattributes b/.gitattributes index a2fa862..76d2343 100644 --- a/.gitattributes +++ b/.gitattributes @@ -7,3 +7,4 @@ git/gitconfig.ini filter=git-crypt diff=git-crypt emacs/gnus.el filter=git-crypt diff=git-crypt emacs/not-much.el filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt +ssh_config.conf filter=git-crypt diff=git-crypt diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 335189a..6425557 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -23,6 +23,10 @@ isLinux && { ln -fs $DOTFILES/nixos/npmrc.sh ~/.npmrc } +## SSH config +mkdir -p ~/.ssh +ln -fs $DOTFILES/ssh_config.conf ~/.ssh/config + ln -fs $DOTFILES/git/mrconfig.ini ~/.mrconfig upsert_dir_symlink $MEDIA_PREFIX/UTCLOUD ~/UTCLOUD diff --git a/ssh_config.conf b/ssh_config.conf new file mode 100644 index 0000000..01d3196 Binary files /dev/null and b/ssh_config.conf differ -- cgit v1.2.3 From 6cba09e456c39a74a6e1d0cc4a00f80c79de98f1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Dec 2018 21:36:09 -0200 Subject: Add fireplace additional Spacemacs package. --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index e15981b..c28ddf0 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -106,6 +106,7 @@ This function should only modify configuration layer settings." dotspacemacs-additional-packages '(paredit interleave debbugs + fireplace ;; emacs-guix ) ;; A list of packages that cannot be updated. @@ -757,7 +758,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From b89385e035b0fe55edb9afc05496a639d5c4664e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Dec 2018 21:38:11 -0200 Subject: Add cp-todos.sh. --- scripts/cp-todos.sh | 1 + 1 file changed, 1 insertion(+) create mode 100755 scripts/cp-todos.sh diff --git a/scripts/cp-todos.sh b/scripts/cp-todos.sh new file mode 100755 index 0000000..4ec8962 --- /dev/null +++ b/scripts/cp-todos.sh @@ -0,0 +1 @@ +cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/Notes/org.txt" -- cgit v1.2.3 From 5fb50dc53a1bfdcda9083d1121709bdfde5d8eb9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 06:27:07 -0200 Subject: Add cp-todos.sh cronJob. --- nixos/configuration.nix | 8 +++++++- scripts/cp-todos.sh | 1 + 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 36e2cb1..ba0054f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -311,7 +311,13 @@ services = { cron.enable = true; # We can see the actual generated crontab at /etc/crontab - cron.systemCronJobs = ["0 * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/mail.sh -s"]; + cron.systemCronJobs = [ + # Sync emails with mbsync every hour + "0 * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/mail.sh -s" + + # Make read-only copy of TODOs.org every hour + "0 * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/cp-todos.sh -s" + ]; xserver = { enable = true; diff --git a/scripts/cp-todos.sh b/scripts/cp-todos.sh index 4ec8962..5ec5a0f 100755 --- a/scripts/cp-todos.sh +++ b/scripts/cp-todos.sh @@ -1 +1,2 @@ cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/Notes/org.txt" +cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/cache/TODOs.org" -- cgit v1.2.3 From 6ce89ab1bab8e5e356d3750b5adef38ae17956fe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 06:28:44 -0200 Subject: Add android_sdk_accept_license Nix configuration. --- nixos/configuration.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ba0054f..a662943 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -299,7 +299,11 @@ chromium ]; - nixpkgs.config.allowUnfree = true; # Require for slack (unfree) derivation + nixpkgs.config = { + android_sdk.accept_license = true; + allowUnfree = true; # Require for slack (unfree) derivation + }; + # Look at # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro -- cgit v1.2.3 From 4cddd5ae3bbfa21ba3b80b08831efe81a34a7dc0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 17:24:54 -0200 Subject: Comment removed autotime tests. --- bash/tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/tests.sh b/bash/tests.sh index 1fdfd79..6941614 100644 --- a/bash/tests.sh +++ b/bash/tests.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -autotime test > /dev/null +# autotime test > /dev/null -- cgit v1.2.3 From 3957ed0e16c3a2f224b7dc74dc5476ce188fe2de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 17:26:12 -0200 Subject: Add website executable to $PATH. --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index a2e4785..8ac8a25 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -34,6 +34,7 @@ export PATH="$DOTFILES/scripts/:$PATH" export PATH="$DOTFILES/encrypted/scripts/:$PATH" export INPUTRC=~/.inputrc export CACHE_DIR="~/Nextcloud/cache" +export PATH="$HOME/dev/libre/website/:$PATH" -- cgit v1.2.3 From b91e79d3a4c8b5a8737aa3828d2ef3e97d35cdbb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 17:26:32 -0200 Subject: Add vi tmp files to global gitignore. --- git/gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/gitignore b/git/gitignore index 371fd16..12daa17 100644 --- a/git/gitignore +++ b/git/gitignore @@ -1,3 +1,4 @@ playground.clj req.http -.postman-ns \ No newline at end of file +.postman-ns +*.swp \ No newline at end of file -- cgit v1.2.3 From f939de99759d03609cfddfefd23720095478f35f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 17:26:42 -0200 Subject: Explicitly add Perl as an OS dependency. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a662943..a0fcd01 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -235,6 +235,7 @@ rakudo bats ledger + perl ## Containers and VMs -- cgit v1.2.3 From 5da03439de70f1441c19d7354bec204783805654 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 17:26:54 -0200 Subject: Add =slugify= command. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a0fcd01..85de39c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -178,6 +178,7 @@ ncdu fd nnn + python36Packages.python-slugify diffoscope # poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 73e02164cc78eca1b6e52aa4802972d681bab439 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 18:05:14 -0200 Subject: Set Perl indentation to 2 spaces. --- nixos/configuration.nix | 1 + spacemacs.el | 1 + 2 files changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 85de39c..c7de036 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -170,6 +170,7 @@ gitlab-runner sshpass zathura # for viewing Emacs PDF files + nvi cacert gtypist pandoc diff --git a/spacemacs.el b/spacemacs.el index c28ddf0..d8493b2 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -689,6 +689,7 @@ This is the place where most of your configurations should be done. Unless it is sh-basic-offset 2 sh-indentation 2 smie-indent-basic 2 + perl-indent-level 2 ;; Clojure cljr-warn-on-eval nil -- cgit v1.2.3 From 0714b19150de94debcfa94211e9d08cfdf02d8d7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 18:19:20 -0200 Subject: Make scripts/startx executable. --- scripts/startx | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/startx diff --git a/scripts/startx b/scripts/startx old mode 100644 new mode 100755 -- cgit v1.2.3 From aa5ef73235823c1e91195cec0905a45424af95b2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 19:33:21 -0200 Subject: Generate .build.yml files on fake-symlinks. --- bash/fake-symlinks.sh | 8 ++++++++ templates/sr-ht-build.yaml | 23 +++++++++++++++++++++++ 2 files changed, 31 insertions(+) create mode 100644 templates/sr-ht-build.yaml diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index b61e798..9361354 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -10,3 +10,11 @@ for repo in ${repos[@]}; do cp "$DOTFILES/git/gitlab-ci.yml" "$DOTFILES/../$repo/.gitlab-ci.yml" cp "$DOTFILES/git/default.nix" "$DOTFILES/../$repo/default.nix" done + + +SRHT_REPOS=("website" "mentat" "cement" "pouchdb-materialized-view") +SRHT_REPOS_PATH="$HOME/dev/libre" + +for repo in ${SRHT_REPOS[@]}; do + cat $DOTFILES/templates/sr-ht-build.yaml | REPO="$repo" envsubst > "$SRHT_REPOS_PATH/$repo/.build.yml" +done diff --git a/templates/sr-ht-build.yaml b/templates/sr-ht-build.yaml new file mode 100644 index 0000000..8c55df6 --- /dev/null +++ b/templates/sr-ht-build.yaml @@ -0,0 +1,23 @@ +image: debian/stretch +packages: + - curl +triggers: + - condition: failure + action: email + to: EuAndreh +sources: + - https://git.sr.ht/~euandreh/$REPO +secrets: + - 7159f943-811f-402d-bb6d-37cd764dc728 +tasks: + - setup: | + curl https://nixos.org/nix/install | sh + echo '. ~/.nix-profile/etc/profile.d/nix.sh' >> ~/.buildenv + - tests: | + cd $REPO/ + nix-build -A test + - docs: | + cd $REPO/ + nix-build -A publishScript + source env.sh + ./result/bin/publish.sh -- cgit v1.2.3 From 2b71ececcdac6e0d659309636da2b07aa768e69e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 19:33:38 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11901 -> 11973 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index f120008..284dc59 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 633d152b776b1311e749ca387a0aed4ae9d12e9e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 29 Dec 2018 19:33:46 -0200 Subject: Enable color to =watch= alias. --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index fef53cc..4f97cfa 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -17,7 +17,7 @@ alias trim="tr -d '\n'" alias lower="tr [:upper:] [:lower:]" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 -alias watch="watch " +alias watch="watch --color " alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" -- cgit v1.2.3 From e611d1019db163c35daa0b8ee2021943313f55d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Dec 2018 15:02:30 -0200 Subject: Add pires repo to fake-symlinks.sh list. --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 9361354..687395a 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -12,7 +12,7 @@ for repo in ${repos[@]}; do done -SRHT_REPOS=("website" "mentat" "cement" "pouchdb-materialized-view") +SRHT_REPOS=("website" "mentat" "cement" "pouchdb-materialized-view" "pires") SRHT_REPOS_PATH="$HOME/dev/libre" for repo in ${SRHT_REPOS[@]}; do -- cgit v1.2.3 From 732b265063bdbeca9ad00cec4ad3a61f74412641 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Dec 2018 15:02:54 -0200 Subject: Install vipe, bazel and graphviz packages. --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c7de036..125d452 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -180,6 +180,9 @@ fd nnn python36Packages.python-slugify + moreutils # =vipe= + bazel + graphviz # =dot= and others diffoscope # poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 6b3fc22c1e84f86abdc9ee64865152526d818db0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Dec 2018 15:59:03 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11973 -> 11938 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 284dc59..75de085 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 78195626c1d601eb9fb4e6f37992887f15454763 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Dec 2018 22:36:43 -0200 Subject: Add shellcheck, github-backup and node2nix packages. --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 125d452..657c37b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -242,6 +242,9 @@ ledger perl + nodePackages.node2nix + shellcheck + (haskell.lib.justStaticExecutables haskellPackages.github-backup) ## Containers and VMs -- cgit v1.2.3 From 67e642010bebd95b133592fc81637360d8fae0f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Dec 2018 22:37:39 -0200 Subject: Start playing with Dhall to generate yaml. --- dhall/dhall-gen.sh | 7 +++++++ dhall/repos.txt | 1 + dhall/sr-ht-build.dhall | 47 +++++++++++++++++++++++++++++++++++++++++++++++ nixos/configuration.nix | 3 ++- scripts/dhall-gen.sh | 1 + 5 files changed, 58 insertions(+), 1 deletion(-) create mode 100755 dhall/dhall-gen.sh create mode 100644 dhall/repos.txt create mode 100644 dhall/sr-ht-build.dhall create mode 120000 scripts/dhall-gen.sh diff --git a/dhall/dhall-gen.sh b/dhall/dhall-gen.sh new file mode 100755 index 0000000..9bba429 --- /dev/null +++ b/dhall/dhall-gen.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +REPOS_PATH="$HOME/dev/libre" + +for repo in $(cat repos.txt); do + dhall 2> /dev/null <<< "./sr-ht-build.dhall \"$repo\"" | dhall-to-json --pretty > "$REPOS_PATH/$repo/.build.yml" +done diff --git a/dhall/repos.txt b/dhall/repos.txt new file mode 100644 index 0000000..0154e4c --- /dev/null +++ b/dhall/repos.txt @@ -0,0 +1 @@ +website diff --git a/dhall/sr-ht-build.dhall b/dhall/sr-ht-build.dhall new file mode 100644 index 0000000..41b937b --- /dev/null +++ b/dhall/sr-ht-build.dhall @@ -0,0 +1,47 @@ +-- let buildTemplate = + λ ( repoName + : Text + ) + → { image = + "debian/stretch" + , packages = + [ "curl" ] + , triggers = + [ { condition = + "failure" + , action = + "email" + , to = + "EuAndreh " + } + ] + , sources = + [ "https://git.sr.ht/~euandreh/" ++ repoName ] + , secrets = + [ "7159f943-811f-402d-bb6d-37cd764dc728" ] + , tasks = + [ { mapKey = + "setup" + , mapValue = + '' + curl https://nixos.org/nix/install | sh + echo '. $HOME/.nix-profile/etc/profile.d/nix.sh' >> $HOME/.buildenv'' + }, + { mapKey = + "test" + , mapValue = + '' + cd ${repoName}/ + nix-build -A test'' + }, + { mapKey = + "publish" + , mapValue = + '' + cd ${repoName}/ + nix-build -A publishScript + source env.sh + ./result/bin/publish.sh'' + } + ] + } diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 657c37b..cfa4b02 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -241,7 +241,8 @@ bats ledger perl - + dhall + dhall-json nodePackages.node2nix shellcheck (haskell.lib.justStaticExecutables haskellPackages.github-backup) diff --git a/scripts/dhall-gen.sh b/scripts/dhall-gen.sh new file mode 120000 index 0000000..75b8290 --- /dev/null +++ b/scripts/dhall-gen.sh @@ -0,0 +1 @@ +../dhall/dhall-gen.sh \ No newline at end of file -- cgit v1.2.3 From ff4b73411dba6097b18266de204587279307be23 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 1 Jan 2019 17:36:26 -0200 Subject: Run shellcheck tests in srht builds. --- .build.yml | 18 ++++++++++++++++++ .gitignore | 1 + default.nix | 32 ++++++++++++++++++++++++++++++++ 3 files changed, 51 insertions(+) create mode 100644 .build.yml create mode 100644 default.nix diff --git a/.build.yml b/.build.yml new file mode 100644 index 0000000..33e6627 --- /dev/null +++ b/.build.yml @@ -0,0 +1,18 @@ +image: debian/stretch +packages: + - curl +triggers: + - condition: failure + action: email + to: EuAndreh +sources: + - https://git.sr.ht/~euandreh/dotfiles +secrets: + - 7159f943-811f-402d-bb6d-37cd764dc728 +tasks: + - setup: | + curl https://nixos.org/nix/install | sh + echo '. ~/.nix-profile/etc/profile.d/nix.sh' >> ~/.buildenv + - tests: | + cd dotfiles/ + nix-build -A test diff --git a/.gitignore b/.gitignore index 01e9f4e..e671f1e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ mail/offlineimap.pyc tam_required +/result diff --git a/default.nix b/default.nix new file mode 100644 index 0000000..8481db4 --- /dev/null +++ b/default.nix @@ -0,0 +1,32 @@ +let + pkgs = import {}; +in with pkgs; with pkgs.stdenv; rec { + subtasks = rec { + shellcheck = mkDerivation rec { + name = "dotfiles-shellcheck"; + src = ./.; + phases = "unpackPhase buildPhase"; + buildInputs = [ pkgs.shellcheck ]; + buildPhase = '' + find . -type f -name '*.sh' | xargs shellcheck + touch $out + ''; + }; + }; + test = mkDerivation rec { + name = "dotfiles-test"; + src = ./.; + phases = "unpackPhase buildPhase"; + buildInputs = [ + subtasks.shellcheck + ]; + buildPhase = '' + echo "Ran tests for:" + for d in ${builtins.toString buildInputs}; do + echo " $d" + done + echo "All tests passed!" + touch $out + ''; + }; +} -- cgit v1.2.3 From 349b888f365e83008c7a3401d13d67262cd6a2ad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 1 Jan 2019 17:37:00 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11938 -> 11998 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 75de085..bac3414 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 4e8c39da58d078167a0a1bc88c4f9248b76e8fed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 1 Jan 2019 17:37:27 -0200 Subject: Lint some bash files with shellcheck. --- bash/agents.sh | 7 +++++-- bash/aliases.sh | 12 +++++------- bash/fake-symlinks.sh | 15 +++++++-------- bash/youtube.sh | 14 ++++++++------ templates/env.sh | 6 ++++++ 5 files changed, 31 insertions(+), 23 deletions(-) create mode 100644 templates/env.sh diff --git a/bash/agents.sh b/bash/agents.sh index 7ce1fef..5dec196 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -2,7 +2,8 @@ eval "$(thefuck --alias f)" -export GPG_TTY=$(tty) +GPG_TTY=$(tty) +export GPG_TTY export SSH_ENV="$HOME/.ssh/environment" start_agent() { @@ -10,13 +11,15 @@ start_agent() { ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" + # shellcheck source=/dev/null . "${SSH_ENV}" > /dev/null ssh-add } [ -f "${SSH_ENV}" ] && { + # shellcheck source=/dev/null . "${SSH_ENV}" > /dev/null - ps -ef | grep ${SSH_AGENT_PID} | grep ssh-agent$ > /dev/null || { + pgrep ^ssh-agent$ > /dev/null || { start_agent } } || start_agent diff --git a/bash/aliases.sh b/bash/aliases.sh index 4f97cfa..403709c 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -30,14 +30,12 @@ alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator" -isLinux && { - ,u() { - cd ~/annex; - git annex info --fast | grep available; - cd - > /dev/null; - } - export -f ,u +u() { + pushd ~/annex > /dev/null; + git annex info --fast | grep available; + popd > /dev/null; } +export -f u MY_PS1="$PS1" ps1() { diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 687395a..336f0c5 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -4,17 +4,16 @@ if [[ -n "$GITHUB_TOKEN" ]]; then cat $DOTFILES/git/gitconfig.ini | envsubst > ~/.gitconfig fi -repos=("org.euandreh.misc" "org.euandreh.http") -for repo in ${repos[@]}; do - cp "$DOTFILES/git/gitlab-ci.yml" "$DOTFILES/../$repo/.gitlab-ci.yml" - cp "$DOTFILES/git/default.nix" "$DOTFILES/../$repo/default.nix" -done - - -SRHT_REPOS=("website" "mentat" "cement" "pouchdb-materialized-view" "pires") +SRHT_REPOS=("website" "mentat" "cement" "pouchdb-materialized-view" "pires" "superlogin" "superlogin-client") SRHT_REPOS_PATH="$HOME/dev/libre" for repo in ${SRHT_REPOS[@]}; do cat $DOTFILES/templates/sr-ht-build.yaml | REPO="$repo" envsubst > "$SRHT_REPOS_PATH/$repo/.build.yml" done + +for repo in ${SRHT_REPOS[@]}; do + if [[ "$repo" != "website" ]]; then + cat "$DOTFILES/templates/env.sh" | REPO="$repo" envsubst > "$SRHT_REPOS_PATH/$repo/env.sh" + fi +done diff --git a/bash/youtube.sh b/bash/youtube.sh index 6ffb2da..c40e0a7 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -14,7 +14,7 @@ download() { youtube-dl "$1" \ --download-archive ~/Nextcloud/cache/youtube-dl-seen.conf \ --prefer-free-formats \ - --playlist-end $2 \ + --playlist-end "$2" \ --write-description \ --output "$YT_TEMPLATE" } @@ -22,19 +22,19 @@ export -f download download_user() { - download "https://www.youtube.com/user/$1" ${2-$DEFAULT_PLAYLIST_END} + download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" } export -f download_user download_channel() { - download "https://www.youtube.com/channel/$1" ${2-$DEFAULT_PLAYLIST_END} + download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" } export -f download_channel download_playlist() { - download "https://www.youtube.com/playlist?list=$1" ${2-$DEFAULT_PLAYLIST_END} + download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" } export -f download_playlist @@ -46,8 +46,10 @@ inc_download() { local file="$HOME/.yt-db/$id" mkdir -p "$HOME/.yt-db" - local n_count="$(cat $file 2> /dev/null || printf 10)" - local n_count_new="$(($n_count + $step))" + n_count="$(cat "$file" 2> /dev/null || printf 10)" + local n_count + n_count_new="$((n_count + step))" + local n_count_new echo "$n_count_new" > "$file" diff --git a/templates/env.sh b/templates/env.sh new file mode 100644 index 0000000..4ff21f2 --- /dev/null +++ b/templates/env.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +export SERVER_URL=root@euandre.org +export DOCS_SERVER_PATH="/home/user-data/www/default/$REPO/" -- cgit v1.2.3 From ee75e6be5a958370c9a0f61589d5e35df78ecadc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Jan 2019 11:54:02 -0200 Subject: Enable followTags in gitconfig. --- git/gitconfig.ini | Bin 2122 -> 2142 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 879e156..2c06b8a 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From cb04b68de762a75ce666943da29db6c4cdca5ee4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Jan 2019 11:54:17 -0200 Subject: Enable forward searches in bash. --- bash/config.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/config.sh b/bash/config.sh index ac9f7c2..37a4806 100644 --- a/bash/config.sh +++ b/bash/config.sh @@ -30,3 +30,5 @@ shopt -s checkwinsize isLinux && { shopt -s globstar } + +stty -ixon -- cgit v1.2.3 From fb9f7c38a140a7f0549f94b9f0370b6d87eb1430 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Jan 2019 15:41:53 -0200 Subject: Add custom nu gitconfig options in nugitconfig.ini file. --- bash/symlinks.sh | 1 + encrypted/nugitconfig.ini | Bin 0 -> 85 bytes git/gitconfig.ini | Bin 2142 -> 2198 bytes 3 files changed, 1 insertion(+) create mode 100644 encrypted/nugitconfig.ini diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 6425557..39d0a0b 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -16,6 +16,7 @@ ln -fs $DOTFILES/bash/bash_profile.sh ~/.bash_profile ln -fs $DOTFILES/git/gitattributes ~/.gitattributes ln -fs $DOTFILES/git/gitignore ~/.gitignore_global ln -fs $DOTFILES/git/bash_git.sh ~/.bash_git +ln -fs $DOTFILES/encrypted/nugitconfig.ini ~/.nugitconfig ln -fs $DOTFILES/sbclrc.lisp ~/.sbclrc ln -fs $DOTFILES/inputrc.conf ~/.inputrc ln -fs $DOTFILES/Xmodmap.conf ~/.Xmodmap diff --git a/encrypted/nugitconfig.ini b/encrypted/nugitconfig.ini new file mode 100644 index 0000000..53b0b86 Binary files /dev/null and b/encrypted/nugitconfig.ini differ diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 2c06b8a..df83354 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From b679e7d91f7af2d97bead966a17b715cdb020b1a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Jan 2019 06:12:39 -0200 Subject: Fix shellcheck ofsenses on bash scripts. --- bash/agents.sh | 3 +- bash/aliases.sh | 13 ++++--- bash/bash_profile.sh | 2 + bash/bashrc.sh | 5 ++- bash/colors.sh | 3 +- bash/env.sh | 2 +- bash/facepalm/rotten-apple.sh | 4 +- bash/fake-symlinks.sh | 26 ++++++++++--- bash/init.sh | 12 +++--- bash/npm.sh | 4 +- bash/platform.sh | 4 +- bash/symlinks.sh | 80 ++++++++++++++++++++-------------------- bash/tmuxinator-templates.sh | 9 ----- bash/util.sh | 32 ++++++++-------- bash/youtube.sh | 2 +- dhall/dhall-gen.sh | 7 ---- dhall/repos.txt | 1 - dhall/sr-ht-build.dhall | 47 ----------------------- encrypted/env.sh | Bin 3340 -> 3342 bytes encrypted/nu/nurc.sh | Bin 4124 -> 4240 bytes encrypted/scripts/video-feed.sh | Bin 3061 -> 3071 bytes nixos/npmrc.sh | 3 +- scripts/backup.sh | 12 +++--- scripts/cp-todos.sh | 2 + scripts/dhall-gen.sh | 1 - scripts/gc.sh | 12 +++--- scripts/mail.sh | 2 + scripts/once-only-nextcloud.sh | 2 +- scripts/single-monitor.sh | 2 +- scripts/startx | 2 +- scripts/three-monitors.sh | 2 +- templates/sr-ht-build.dhall | 47 +++++++++++++++++++++++ vps/push-receive-redeploy.sh | 4 +- xmonad/xsession.sh | 2 + 34 files changed, 178 insertions(+), 171 deletions(-) delete mode 100755 bash/tmuxinator-templates.sh delete mode 100755 dhall/dhall-gen.sh delete mode 100644 dhall/repos.txt delete mode 100644 dhall/sr-ht-build.dhall delete mode 120000 scripts/dhall-gen.sh create mode 100644 templates/sr-ht-build.dhall diff --git a/bash/agents.sh b/bash/agents.sh index 5dec196..d49757b 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC2015 eval "$(thefuck --alias f)" @@ -11,13 +12,11 @@ start_agent() { ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" - # shellcheck source=/dev/null . "${SSH_ENV}" > /dev/null ssh-add } [ -f "${SSH_ENV}" ] && { - # shellcheck source=/dev/null . "${SSH_ENV}" > /dev/null pgrep ^ssh-agent$ > /dev/null || { start_agent diff --git a/bash/aliases.sh b/bash/aliases.sh index 403709c..52d24b4 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -8,13 +8,14 @@ alias l="ls -lahp" alias ll="ls -lhp" alias yt-dl="yt_dl" isLinux && { - alias copy="tr -d '\n' | xclip -sel clip" + alias copy="tr -d '\\n' | xclip -sel clip" } isMac && { - alias copy="tr -d '\n' | pbcopy" + alias copy="tr -d '\\n' | pbcopy" } -alias trim="tr -d '\n'" -alias lower="tr [:upper:] [:lower:]" +alias trim="tr -d '\\n'" +alias lowercase="tr [:upper:] [:lower:]" +alias lc="tr [:upper:] [:lower:]" alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 alias watch="watch --color " @@ -31,9 +32,9 @@ alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator" u() { - pushd ~/annex > /dev/null; + pushd ~/annex > /dev/null || exit 1; git annex info --fast | grep available; - popd > /dev/null; + popd > /dev/null || exit 1; } export -f u diff --git a/bash/bash_profile.sh b/bash/bash_profile.sh index 12ce7f9..41bc7e9 100644 --- a/bash/bash_profile.sh +++ b/bash/bash_profile.sh @@ -1 +1,3 @@ +#!/usr/bin/env bash + source ~/annex/dev/code/dotfiles/bash/bashrc.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index d06692b..a895df1 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env bash + export DOTFILES=~/annex/dev/code/dotfiles source $DOTFILES/bash/platform.sh @@ -10,7 +12,6 @@ source $DOTFILES/bash/agents.sh source $DOTFILES/bash/init.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh -source $DOTFILES/bash/tmuxinator-templates.sh source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/bash/npm.sh source $DOTFILES/bash/x.sh @@ -28,7 +29,7 @@ export PATH="$HOME/annex/dev/code/songbooks/cli:$PATH" alias sb="songbooks" isLinux && { - source "$(dirname $(readlink $(which autojump)))/../share/autojump/autojump.bash" + source "$(dirname "$(readlink "$(command -v autojump)")")/../share/autojump/autojump.bash" } export PATH="$HOME/.perl6/bin:$PATH" diff --git a/bash/colors.sh b/bash/colors.sh index 90cabc4..68acb06 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=1117 disable=1004 disable=2034 disable=2154 # Customize BASH PS1 prompt to show current GIT repository and branch. # by Mike Stewart - http://MediaDoneRight.com @@ -208,7 +209,7 @@ function lightblueb { } export -f lightblueb -function ,colors { +function colors { black "black" blackb "blackb" white "white" diff --git a/bash/env.sh b/bash/env.sh index 8ac8a25..5a09663 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -33,7 +33,7 @@ export EDITOR=vi export PATH="$DOTFILES/scripts/:$PATH" export PATH="$DOTFILES/encrypted/scripts/:$PATH" export INPUTRC=~/.inputrc -export CACHE_DIR="~/Nextcloud/cache" +export CACHE_DIR="$HOME/Nextcloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh index 50d85c8..222a2b0 100644 --- a/bash/facepalm/rotten-apple.sh +++ b/bash/facepalm/rotten-apple.sh @@ -6,8 +6,8 @@ isMac && { alias limpar-derived-data="rm -rf ~/Library/Developer/Xcode/DerivedData/" alias fim="afplay $DOTFILES/bash/facepalm/Positive.mp3" - if [ -f $(brew --prefix)/etc/bash_completion ]; then - . $(brew --prefix)/etc/bash_completion + if [ -f "$(brew --prefix)/etc/bash_completion" ]; then + . "$(brew --prefix)/etc/bash_completion" fi [ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 336f0c5..3927b0c 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,19 +1,33 @@ #!/usr/bin/env bash if [[ -n "$GITHUB_TOKEN" ]]; then - cat $DOTFILES/git/gitconfig.ini | envsubst > ~/.gitconfig + envsubst < "$DOTFILES/git/gitconfig.ini" > ~/.gitconfig fi -SRHT_REPOS=("website" "mentat" "cement" "pouchdb-materialized-view" "pires" "superlogin" "superlogin-client") +SRHT_REPOS=(website mentat cement pouchdb-materialized-view pires superlogin superlogin-client) SRHT_REPOS_PATH="$HOME/dev/libre" -for repo in ${SRHT_REPOS[@]}; do - cat $DOTFILES/templates/sr-ht-build.yaml | REPO="$repo" envsubst > "$SRHT_REPOS_PATH/$repo/.build.yml" +for repo in "${SRHT_REPOS[@]}"; do + REPO="$repo" envsubst < "$DOTFILES/templates/sr-ht-build.yaml" > "$SRHT_REPOS_PATH/$repo/.build.yml" done -for repo in ${SRHT_REPOS[@]}; do +for repo in "${SRHT_REPOS[@]}"; do if [[ "$repo" != "website" ]]; then - cat "$DOTFILES/templates/env.sh" | REPO="$repo" envsubst > "$SRHT_REPOS_PATH/$repo/env.sh" + REPO="$repo" envsubst < "$DOTFILES/templates/env.sh" > "$SRHT_REPOS_PATH/$repo/env.sh" fi done + +mkdir -p ~/.tmuxinator + +TMUXINATOR_TEMPLATES=(annex pires songbooks sosps) + +for template in "${TMUXINATOR_TEMPLATES[@]}"; do + cp "$DOTFILES/tmux/projects/$template.yml" "$HOME/.tmuxinator/$template.yml" +done + +# DHALL_BUILD_REPOS=(website) + +# for repo in "${DHALL_BUILD_REPOS[@]}"; do +# dhall 2> /dev/null <<< "./sr-ht-build.dhall \"$repo\"" | dhall-to-json --pretty > "$SRHT_REPOS_PATH/$repo/.build.yml" +# done diff --git a/bash/init.sh b/bash/init.sh index 777a322..4e0ee65 100644 --- a/bash/init.sh +++ b/bash/init.sh @@ -1,10 +1,10 @@ #!/usr/bin/env bash locked_init() { - pushd ~/ > /dev/null + pushd ~/ > /dev/null || exit 1 mkdir -p ~/.emacs.d/.cache/ - mkdir -p $(dirname "$AUTOJUMP_TXT") + mkdir -p "$(dirname "$AUTOJUMP_TXT")" touch "$AUTOJUMP_TXT" # clone all missing repos @@ -13,12 +13,12 @@ locked_init() { printf "" > /tmp/mr-repos mr inject > /dev/null - printf "(\n" > /tmp/mr-projectile + printf "(\\n" > /tmp/mr-projectile sed -E 's/\/home\/andreh/~/' /tmp/mr-repos | awk '{print "\""$1"/""\""}' >> /tmp/mr-projectile printf ")" >> /tmp/mr-projectile cp /tmp/mr-projectile ~/.emacs.d/.cache/projectile-bookmarks.eld - popd > /dev/null + popd > /dev/null || exit 1 } export -f locked_init @@ -32,7 +32,7 @@ export -f locked_init # Tests -pushd $DOTFILES > /dev/null +pushd "$DOTFILES" > /dev/null || exit 1 sizes=$(git diff-files --ignore-submodules | awk '{print $6}' | xargs du | awk '{print $1}') for size in $sizes; do @@ -42,4 +42,4 @@ for size in $sizes; do fi done -popd > /dev/null +popd > /dev/null || exit 1 diff --git a/bash/npm.sh b/bash/npm.sh index c23c074..7fbe4f7 100644 --- a/bash/npm.sh +++ b/bash/npm.sh @@ -2,9 +2,9 @@ # FIXME: port to NixOS npm_i() { - (which $1 &> /dev/null) || { + (command -v "$1" &> /dev/null) || { yellow "Installing $2" - npm i -g $2 + npm i -g "$2" } } diff --git a/bash/platform.sh b/bash/platform.sh index efa5061..eb262e9 100644 --- a/bash/platform.sh +++ b/bash/platform.sh @@ -1,11 +1,11 @@ #!/usr/bin/env bash isMac () { - [[ `uname` == 'Darwin' ]] + [[ "$(uname)" == 'Darwin' ]] } isLinux () { - [[ `uname` == 'Linux' ]] + [[ "$(uname)" == 'Linux' ]] } isMac && { diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 39d0a0b..e56ee58 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -1,77 +1,77 @@ #!/usr/bin/env bash function upsert_dir_symlink() { - local readonly from="$1" - local readonly to="$2" - ([ -d "$to" ] || [ -L "$to" ]) || { + local from="$1" + local to="$2" + { [ -d "$to" ] || [ -L "$to" ]; } || { ln -s "$from" "$to" } } export -f upsert_dir_symlink -upsert_dir_symlink $DOTFILES/encrypted/borg ~/.config/borg +upsert_dir_symlink "$DOTFILES/encrypted/borg" ~/.config/borg -ln -fs $DOTFILES/bash/bashrc.sh ~/.bashrc -ln -fs $DOTFILES/bash/bash_profile.sh ~/.bash_profile -ln -fs $DOTFILES/git/gitattributes ~/.gitattributes -ln -fs $DOTFILES/git/gitignore ~/.gitignore_global -ln -fs $DOTFILES/git/bash_git.sh ~/.bash_git -ln -fs $DOTFILES/encrypted/nugitconfig.ini ~/.nugitconfig -ln -fs $DOTFILES/sbclrc.lisp ~/.sbclrc -ln -fs $DOTFILES/inputrc.conf ~/.inputrc -ln -fs $DOTFILES/Xmodmap.conf ~/.Xmodmap +ln -fs "$DOTFILES/bash/bashrc.sh" ~/.bashrc +ln -fs "$DOTFILES/bash/bash_profile.sh" ~/.bash_profile +ln -fs "$DOTFILES/git/gitattributes" ~/.gitattributes +ln -fs "$DOTFILES/git/gitignore" ~/.gitignore_global +ln -fs "$DOTFILES/git/bash_git.sh" ~/.bash_git +ln -fs "$DOTFILES/encrypted/nugitconfig.ini" ~/.nugitconfig +ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc +ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc +ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap isLinux && { - ln -fs $DOTFILES/nixos/npmrc.sh ~/.npmrc + ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc } ## SSH config mkdir -p ~/.ssh -ln -fs $DOTFILES/ssh_config.conf ~/.ssh/config +ln -fs "$DOTFILES/ssh_config.conf" ~/.ssh/config -ln -fs $DOTFILES/git/mrconfig.ini ~/.mrconfig +ln -fs "$DOTFILES/git/mrconfig.ini" ~/.mrconfig -upsert_dir_symlink $MEDIA_PREFIX/UTCLOUD ~/UTCLOUD -upsert_dir_symlink $MEDIA_PREFIX/SNEAKER ~/SNEAKER +upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD +upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER ## Clojure mkdir -p ~/.lein ~/.clojure -ln -fs $DOTFILES/lein/profiles.clj ~/.lein/profiles.clj -ln -fs $DOTFILES/lein/deps.edn ~/.clojure/deps.edn +ln -fs "$DOTFILES/lein/profiles.clj" ~/.lein/profiles.clj +ln -fs "$DOTFILES/lein/deps.edn" ~/.clojure/deps.edn ## AWS mkdir -p ~/.aws -ln -fs $DOTFILES/encrypted/aws/config ~/.aws/config -ln -fs $DOTFILES/encrypted/aws/credentials ~/.aws/credentials +ln -fs "$DOTFILES/encrypted/aws/config" ~/.aws/config +ln -fs "$DOTFILES/encrypted/aws/credentials" ~/.aws/credentials ## tmux -ln -fs $DOTFILES/tmux/tmux.conf ~/.tmux.conf -ln -fs $DOTFILES/tmux/tmux-macos.conf ~/.tmux-macos.conf -ln -fs $DOTFILES/tmux/tmux-gnu-linux.conf ~/.tmux-gnu-linux.conf +ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf +ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf +ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf ## NixOS -ln -fs $DOTFILES/nixos/evince.destkop ~/.local/share/applications/evince.desktop -ln -fs $DOTFILES/nixos/firefox.destkop ~/.local/share/applications/firefox.desktop +ln -fs "$DOTFILES/nixos/evince.destkop" ~/.local/share/applications/evince.desktop +ln -fs "$DOTFILES/nixos/firefox.destkop" ~/.local/share/applications/firefox.desktop ## Emacs -mkdir -p $HOME/.emacs.d/private/layers/ -ln -fs $DOTFILES/spacemacs.el ~/.spacemacs -ln -fs $DOTFILES/emacs/gnus.el ~/.gnus.el -ln -fs $CACHE_DIR/euandreh-auto-save.el ~/.emacs.d/.cache/layouts/euandreh-auto-save +mkdir -p "$HOME/.emacs.d/private/layers/" +ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs +ln -fs "$DOTFILES/emacs/gnus.el" ~/.gnus.el +ln -fs "$CACHE_DIR/euandreh-auto-save.el" ~/.emacs.d/.cache/layouts/euandreh-auto-save ## xmonad mkdir -p ~/.xmonad -ln -fs $DOTFILES/xmonad/xsession.sh ~/.xsession -ln -fs $DOTFILES/xmonad/xmonad.hs ~/.xmonad/xmonad.hs -ln -fs $DOTFILES/xmonad/xmobar.hs ~/.xmobarrc +ln -fs "$DOTFILES/xmonad/xsession.sh" ~/.xsession +ln -fs "$DOTFILES/xmonad/xmonad.hs" ~/.xmonad/xmonad.hs +ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc ## Mail mkdir -p ~/mbsync/.notmuch/hooks ~/mbsync/EuAndreh ~/mbsync/Gmail ~/mbsync/Nubank -ln -fs $DOTFILES/mail/notmuch-post.sh ~/mbsync/.notmuch/hooks/post-new -ln -fs $DOTFILES/mail/mbsyncrc.ini ~/.mbsyncrc -ln -fs $DOTFILES/mail/notmuch.ini ~/.notmuch-config -ln -fs /tmp/mbsync.$(date +%Y-%m-%d).log /tmp/mbsync.log -ln -fs /tmp/notmuch.$(date +%Y-%m-%d).log /tmp/notmuch.log +ln -fs "$DOTFILES/mail/notmuch-post.sh" ~/mbsync/.notmuch/hooks/post-new +ln -fs "$DOTFILES/mail/mbsyncrc.ini" ~/.mbsyncrc +ln -fs "$DOTFILES/mail/notmuch.ini" ~/.notmuch-config +ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log +ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log ## GNUS -ln -fs $DOTFILES/encrypted/IMAP/authinfo.gpg ~/.authinfo.gpg +ln -fs "$DOTFILES/encrypted/IMAP/authinfo.gpg" ~/.authinfo.gpg diff --git a/bash/tmuxinator-templates.sh b/bash/tmuxinator-templates.sh deleted file mode 100755 index adbbb5c..0000000 --- a/bash/tmuxinator-templates.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -mkdir -p ~/.tmuxinator - -templates=(annex pires songbooks sosps) - -for template in ${templates[@]}; do - cp $DOTFILES/tmux/projects/$template.yml ~/.tmuxinator/$template.yml -done diff --git a/bash/util.sh b/bash/util.sh index 833bc9c..e29d02f 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -1,20 +1,20 @@ #!/usr/bin/env bash extract () { - if [ -f $1 ] ; then - case $1 in - *.tar.bz2) tar xvjf $1 ;; - *.tar.gz) tar xvzf $1 ;; - *.bz2) bunzip2 $1 ;; - *.rar) unrar x $1 ;; - *.gz) gunzip $1 ;; - *.tar) tar xvf $1 ;; - *.tbz2) tar xvjf $1 ;; - *.tgz) tar xvzf $1 ;; - *.zip) unzip $1 ;; - *.Z) uncompress $1 ;; - *.7z) 7z x $1 ;; - *.xz) unxz $1 ;; + if [ -f "$1" ] ; then + case "$1" in + *.tar.bz2) tar xvjf "$1" ;; + *.tar.gz) tar xvzf "$1" ;; + *.bz2) bunzip2 "$1" ;; + *.rar) unrar x "$1" ;; + *.gz) gunzip "$1" ;; + *.tar) tar xvf "$1" ;; + *.tbz2) tar xvjf "$1" ;; + *.tgz) tar xvzf "$1" ;; + *.zip) unzip "$1" ;; + *.Z) uncompress "$1" ;; + *.7z) 7z x "$1" ;; + *.xz) unxz "$1" ;; *) echo "don't know how to extract '$1'..." ;; esac else @@ -24,11 +24,11 @@ extract () { merkle-tree () { dirname="${1-.}" - pushd "$dirname" > /dev/null + pushd "$dirname" > /dev/null || exit 1 find . -type f | \ sort | \ xargs -I{} sha256sum "{}" | \ sha256sum | \ awk '{print $1}' - popd > /dev/null + popd > /dev/null || exit 1 } diff --git a/bash/youtube.sh b/bash/youtube.sh index c40e0a7..19c9af0 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -2,7 +2,7 @@ export DEFAULT_PLAYLIST_END=15 export DEFAULT_INC_STEP=10 -export YT_TEMPLATE="~/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" +export YT_TEMPLATE="$HOME/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" # Always downloads video, doesn't look at the download-archive yt_dl() { diff --git a/dhall/dhall-gen.sh b/dhall/dhall-gen.sh deleted file mode 100755 index 9bba429..0000000 --- a/dhall/dhall-gen.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -REPOS_PATH="$HOME/dev/libre" - -for repo in $(cat repos.txt); do - dhall 2> /dev/null <<< "./sr-ht-build.dhall \"$repo\"" | dhall-to-json --pretty > "$REPOS_PATH/$repo/.build.yml" -done diff --git a/dhall/repos.txt b/dhall/repos.txt deleted file mode 100644 index 0154e4c..0000000 --- a/dhall/repos.txt +++ /dev/null @@ -1 +0,0 @@ -website diff --git a/dhall/sr-ht-build.dhall b/dhall/sr-ht-build.dhall deleted file mode 100644 index 41b937b..0000000 --- a/dhall/sr-ht-build.dhall +++ /dev/null @@ -1,47 +0,0 @@ --- let buildTemplate = - λ ( repoName - : Text - ) - → { image = - "debian/stretch" - , packages = - [ "curl" ] - , triggers = - [ { condition = - "failure" - , action = - "email" - , to = - "EuAndreh " - } - ] - , sources = - [ "https://git.sr.ht/~euandreh/" ++ repoName ] - , secrets = - [ "7159f943-811f-402d-bb6d-37cd764dc728" ] - , tasks = - [ { mapKey = - "setup" - , mapValue = - '' - curl https://nixos.org/nix/install | sh - echo '. $HOME/.nix-profile/etc/profile.d/nix.sh' >> $HOME/.buildenv'' - }, - { mapKey = - "test" - , mapValue = - '' - cd ${repoName}/ - nix-build -A test'' - }, - { mapKey = - "publish" - , mapValue = - '' - cd ${repoName}/ - nix-build -A publishScript - source env.sh - ./result/bin/publish.sh'' - } - ] - } diff --git a/encrypted/env.sh b/encrypted/env.sh index af98c5c..e4ebb21 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index a8532c2..b92a178 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index 6efa22d..a6e17d9 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ diff --git a/nixos/npmrc.sh b/nixos/npmrc.sh index 326ac0b..2669f85 100644 --- a/nixos/npmrc.sh +++ b/nixos/npmrc.sh @@ -1,4 +1,5 @@ -prefix="~/.npm-packages" +# shellcheck disable=2148 disable=2034 +prefix="$HOME/.npm-packages" # Taken from: # http://www.tomsquest.com/blog/2018/10/better-npm-ing/ save-exact=true diff --git a/scripts/backup.sh b/scripts/backup.sh index a33a630..6a4de25 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -6,12 +6,12 @@ # if [ ! -d ~/UTCLOUD/ ]; then - red "~/UTCLOUD not attached. Backup not started." + red "$HOME/UTCLOUD not attached. Backup not started." exit 1 fi if [ ! -d ~/borgbackup/ ]; then - yellow "~/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/" + yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/" # The initial borg repo was created with: # $ borg init --append-only --encryption=keyfile ~/borgbackup # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode @@ -46,7 +46,7 @@ green "Done" # yellow "Backing up git repos" -pushd ~/ +pushd ~/ || exit 1 mr -s master mr -s status @@ -54,13 +54,13 @@ mr -s -j16 update mr -s hd mr -s -j4 rsyncnet -popd +popd || exit 1 yellow "Syncing annex" -pushd ~/annex/ +pushd ~/annex/ || exit 1 git annex sync -popd +popd || exit 1 green "Done" diff --git a/scripts/cp-todos.sh b/scripts/cp-todos.sh index 5ec5a0f..d8e6f30 100755 --- a/scripts/cp-todos.sh +++ b/scripts/cp-todos.sh @@ -1,2 +1,4 @@ +#!/usr/bin/env bash + cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/Notes/org.txt" cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/cache/TODOs.org" diff --git a/scripts/dhall-gen.sh b/scripts/dhall-gen.sh deleted file mode 120000 index 75b8290..0000000 --- a/scripts/dhall-gen.sh +++ /dev/null @@ -1 +0,0 @@ -../dhall/dhall-gen.sh \ No newline at end of file diff --git a/scripts/gc.sh b/scripts/gc.sh index ac1b412..c4d3ec3 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -10,8 +10,8 @@ yellow "Cleaning up the NixOS store" profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) -for p in ${profiles[@]}; do - sudo nix-env --delete-generations old -p /nix/var/nix/profiles/$p +for p in "${profiles[@]}"; do + sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" done # Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= @@ -36,11 +36,11 @@ sudo find /tmp -type f -atime +10 -delete yellow "Erasing docker images" echo y | docker system prune -a -docker rmi $(docker images -a -q) -docker rm $(docker ps -a -f status=exited -q) +docker rmi "$(docker images -a -q)" +docker rm "$(docker ps -a -f status=exited -q)" -docker stop $(docker ps -a -q) -docker rm $(docker ps -a -q) +docker stop "$(docker ps -a -q)" +docker rm "$(docker ps -a -q)" echo y | docker volume prune echo y | docker container prune diff --git a/scripts/mail.sh b/scripts/mail.sh index a7c8208..00c111f 100755 --- a/scripts/mail.sh +++ b/scripts/mail.sh @@ -1,3 +1,5 @@ +#!/usr/bin/env bash + if [ "$1" = "-s" ]; then mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log else diff --git a/scripts/once-only-nextcloud.sh b/scripts/once-only-nextcloud.sh index 8400080..7886b6f 100755 --- a/scripts/once-only-nextcloud.sh +++ b/scripts/once-only-nextcloud.sh @@ -1,4 +1,4 @@ -#!/bin/sh +#!/usr/bin/env bash if [ "$(pidof nextcloud)" ] then diff --git a/scripts/single-monitor.sh b/scripts/single-monitor.sh index ec6c5e2..5b0d03e 100755 --- a/scripts/single-monitor.sh +++ b/scripts/single-monitor.sh @@ -1,2 +1,2 @@ -#!/bin/sh +#!/usr/bin/env bash xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/startx b/scripts/startx index 9b1d153..cca34a2 100755 --- a/scripts/startx +++ b/scripts/startx @@ -1,3 +1,3 @@ -#!/bin/sh +#!/usr/bin/env bash sudo systemctl restart display-manager & diff --git a/scripts/three-monitors.sh b/scripts/three-monitors.sh index d1ef7c6..d8c4e53 100755 --- a/scripts/three-monitors.sh +++ b/scripts/three-monitors.sh @@ -1,2 +1,2 @@ -#!/bin/sh +#!/usr/bin/env bash xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/templates/sr-ht-build.dhall b/templates/sr-ht-build.dhall new file mode 100644 index 0000000..41b937b --- /dev/null +++ b/templates/sr-ht-build.dhall @@ -0,0 +1,47 @@ +-- let buildTemplate = + λ ( repoName + : Text + ) + → { image = + "debian/stretch" + , packages = + [ "curl" ] + , triggers = + [ { condition = + "failure" + , action = + "email" + , to = + "EuAndreh " + } + ] + , sources = + [ "https://git.sr.ht/~euandreh/" ++ repoName ] + , secrets = + [ "7159f943-811f-402d-bb6d-37cd764dc728" ] + , tasks = + [ { mapKey = + "setup" + , mapValue = + '' + curl https://nixos.org/nix/install | sh + echo '. $HOME/.nix-profile/etc/profile.d/nix.sh' >> $HOME/.buildenv'' + }, + { mapKey = + "test" + , mapValue = + '' + cd ${repoName}/ + nix-build -A test'' + }, + { mapKey = + "publish" + , mapValue = + '' + cd ${repoName}/ + nix-build -A publishScript + source env.sh + ./result/bin/publish.sh'' + } + ] + } diff --git a/vps/push-receive-redeploy.sh b/vps/push-receive-redeploy.sh index 87fecd5..46a65bc 100755 --- a/vps/push-receive-redeploy.sh +++ b/vps/push-receive-redeploy.sh @@ -1,6 +1,6 @@ -#!/bin/sh +#!/usr/bin/env bash -cd ~/ +cd ~/ || exit 1 docker pull registry.gitlab.com/euandreh/songbooks/prod:latest docker-compose stop songbooks_app docker-compose up -d --no-deps songbooks_app diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh index b25a9a1..542994f 100644 --- a/xmonad/xsession.sh +++ b/xmonad/xsession.sh @@ -1 +1,3 @@ +#!/usr/bin/env bash + xmonad -- cgit v1.2.3 From 9be46264e1965ad98627ce5652d771c5a598444a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Jan 2019 06:43:39 -0200 Subject: Disable 1090, 1091 and 2139 shellcheck rules. --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 8481db4..298d1af 100644 --- a/default.nix +++ b/default.nix @@ -8,7 +8,7 @@ in with pkgs; with pkgs.stdenv; rec { phases = "unpackPhase buildPhase"; buildInputs = [ pkgs.shellcheck ]; buildPhase = '' - find . -type f -name '*.sh' | xargs shellcheck + find . -type f -name '*.sh' | grep -v os-installation.sh | xargs shellcheck -e SC1090 -e SC1091 -e SC2139 touch $out ''; }; -- cgit v1.2.3 From b5700937691e27b1662e87f018d73cac6d4e338c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Jan 2019 06:48:57 -0200 Subject: Don't run checks on git-crypt files. --- default.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 298d1af..c27faff 100644 --- a/default.nix +++ b/default.nix @@ -8,7 +8,9 @@ in with pkgs; with pkgs.stdenv; rec { phases = "unpackPhase buildPhase"; buildInputs = [ pkgs.shellcheck ]; buildPhase = '' - find . -type f -name '*.sh' | grep -v os-installation.sh | xargs shellcheck -e SC1090 -e SC1091 -e SC2139 + export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" + ignored='(encrypted|os-installation.sh|notmuch-post.sh)' + find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck touch $out ''; }; -- cgit v1.2.3 From 79d6b9ce2c3bef376dcdc618df7eb8ef2f35cc0e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Jan 2019 12:01:16 -0200 Subject: Add build badge to README.org. --- README.org | 1 + 1 file changed, 1 insertion(+) diff --git a/README.org b/README.org index 26e9394..eebad02 100644 --- a/README.org +++ b/README.org @@ -1,4 +1,5 @@ * dotfiles +[[https://builds.sr.ht/~euandreh/dotfiles][file:https://builds.sr.ht/~euandreh/dotfiles.svg]] ** Instructions - setting up a new installation (NixOS) *** 1. Download NixOS image from [[https://nixos.org/][the website]]. *** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= -- cgit v1.2.3 From 6e73aa4e2065538e7e3a8cb954454893d8a6ee7d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Jan 2019 13:53:15 -0200 Subject: notmuch-post.sh. --- mail/notmuch-post.sh | Bin 338 -> 453 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 9fdc57c..06facd1 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From bfdce1cfcd264a1f5f070e31784b11914d4d11d1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Jan 2019 11:07:54 -0200 Subject: Add bin/ to $PATH. --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index 5a09663..f768173 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -35,6 +35,7 @@ export PATH="$DOTFILES/encrypted/scripts/:$PATH" export INPUTRC=~/.inputrc export CACHE_DIR="$HOME/Nextcloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" +export PATH="$DOTFILES/bin:$PATH" -- cgit v1.2.3 From 6bc32da42d856406399364f9bc401f5c6e7b07bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 14:57:59 -0200 Subject: ssh_config.conf. --- ssh_config.conf | Bin 50 -> 83 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ssh_config.conf b/ssh_config.conf index 01d3196..298ac3b 100644 Binary files a/ssh_config.conf and b/ssh_config.conf differ -- cgit v1.2.3 From 569abfc95209b00188a71dd4a199fb020ffe5218 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 14:58:12 -0200 Subject: gc.sh: use sudo to rm the trash folder. --- scripts/gc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index c4d3ec3..e3ada13 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -28,7 +28,7 @@ guix gc yellow "Cleaning up up the Trash and /tmp folders" -rm -rf ~/.local/share/Trash/files/* +sudo rm -rf ~/.local/share/Trash/files/* # https://askubuntu.com/a/609396 sudo find /tmp -type f -atime +10 -delete -- cgit v1.2.3 From fb27243da67e41ec1f6f157a4affbfd18c6c07cb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 15:00:17 -0200 Subject: gc.sh: s/,u/u/. --- scripts/gc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index e3ada13..c93c948 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash disk_space() { - ,u | awk '{print $5" "$6}' + u | awk '{print $5" "$6}' } before=$(disk_space) -- cgit v1.2.3 From b812e84714fc933f3c208945e166b409df1ae6ba Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 15:01:14 -0200 Subject: notmuch-post.sh. --- mail/notmuch-post.sh | Bin 453 -> 484 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 06facd1..b874d70 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From 4cd2d9244d9248f66bd6ce3f7a045e358600542d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 15:01:29 -0200 Subject: Remove superlogin from fake-symlink list. --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3927b0c..3a5e885 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -5,7 +5,7 @@ if [[ -n "$GITHUB_TOKEN" ]]; then fi -SRHT_REPOS=(website mentat cement pouchdb-materialized-view pires superlogin superlogin-client) +SRHT_REPOS=(website mentat cement pouchdb-materialized-view pires superlogin-client) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From 7667482a4a66e3b18be7d7de9b02e06781a5bbe7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 15:02:06 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11998 -> 11998 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index bac3414..d2d1538 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From f8e0f2d102ded6f11294c92159f9e5e9fdc734bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 15:07:35 -0200 Subject: Move dotfiles out of annex submodule. --- bash/bashrc.sh | 2 +- git/mrconfig.ini | Bin 11998 -> 12003 bytes tmux/projects/annex.yml | 2 +- 3 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index a895df1..eedc2bb 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -export DOTFILES=~/annex/dev/code/dotfiles +export DOTFILES=~/dev/libre/dotfiles source $DOTFILES/bash/platform.sh source $DOTFILES/bash/config.sh diff --git a/git/mrconfig.ini b/git/mrconfig.ini index d2d1538..9d25a9b 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 50d34bc..b6cfbcc 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -8,7 +8,7 @@ windows: - misc: - cd - dotfiles: - - j dotfiles && git status + - cd "$DOTFILES" && git status - sleep 10 - reload - annex: -- cgit v1.2.3 From 9276899be730b652ea663478ac5724edcfe78a5b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jan 2019 16:14:16 -0200 Subject: Fix cronjob path and remove cp-todos.sh job. --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index cfa4b02..ea971cc 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -327,10 +327,10 @@ # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = [ # Sync emails with mbsync every hour - "0 * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/mail.sh -s" + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/mail.sh -s" # Make read-only copy of TODOs.org every hour - "0 * * * * andreh /home/andreh/annex/dev/code/dotfiles/scripts/cp-todos.sh -s" + # "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cp-todos.sh -s" ]; xserver = { -- cgit v1.2.3 From 5ec74941d10b9d1a2db7a3968c3a0cbff9ef81a1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 14 Jan 2019 11:35:38 -0200 Subject: Setup org-babel for Rust. --- spacemacs.el | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index d8493b2..290ac9c 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -107,6 +107,7 @@ This function should only modify configuration layer settings." interleave debbugs fireplace + ob-rust ;; emacs-guix ) ;; A list of packages that cannot be updated. @@ -667,6 +668,21 @@ This is the place where most of your configurations should be done. Unless it is (dolist (keybinding custom-keybindings) (global-set-key (kbd (car keybinding)) (cdr keybinding))) + (org-babel-do-load-languages + 'org-babel-load-languages + '((elixir . t) + (http . t) + (restclient . t) + (shell . t) + (clojure . t) + (ruby . t) + (python . t) + (perl . t) + (js . t) + (C . t) + (emacs-lisp . t) + (rust . t))) + (setq standard-indent 2 git-link-use-commit t vc-follow-symlinks t @@ -759,7 +775,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From ec96a9b827c38c53928b5c611e3fd1e051a7ad21 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 14 Jan 2019 11:35:47 -0200 Subject: Add emidje package. --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 290ac9c..589e87c 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -107,6 +107,7 @@ This function should only modify configuration layer settings." interleave debbugs fireplace + emidje ob-rust ;; emacs-guix ) -- cgit v1.2.3 From 7f7ac488a546805703533e3eeae10d78203de60b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 14 Jan 2019 11:35:53 -0200 Subject: Install rustracer. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ea971cc..0e24b25 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -246,6 +246,7 @@ nodePackages.node2nix shellcheck (haskell.lib.justStaticExecutables haskellPackages.github-backup) + rustracer ## Containers and VMs -- cgit v1.2.3 From ad615c1d627f135f96c12bb4af5c797f0fdeef83 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 15 Jan 2019 10:19:00 -0200 Subject: Add flutter to $PATH. --- bash/env.sh | 1 + git/mrconfig.ini | Bin 12003 -> 12103 bytes 2 files changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index f768173..3e63aa3 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -36,6 +36,7 @@ export INPUTRC=~/.inputrc export CACHE_DIR="$HOME/Nextcloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" +export PATH="$HOME/dev/misc/flutter/bin:$PATH" diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 9d25a9b..5bb4cf1 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 9a80c5fc610cc8642593f1ea93a9ab64423a3127 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 18 Jan 2019 14:05:32 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 12103 -> 12126 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 5bb4cf1..9c789a3 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 6b3e109de8615899fe5f74dd4298b2a7e60feb0c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 20 Jan 2019 00:46:13 -0200 Subject: Add selectric layer. --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 589e87c..aa59eec 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -75,6 +75,7 @@ This function should only modify configuration layer settings." ruby rust scheme + selectric shell-scripts sql swift @@ -776,7 +777,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (selectric-mode ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From bafea5e5ecc629f701c9468b7518eaed516283a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 20 Jan 2019 22:59:27 -0200 Subject: Setup newsboat configuration. --- .gitattributes | 1 + bash/env.sh | 1 + bash/symlinks.sh | 5 +++++ newsboat/config | 1 + newsboat/urls | Bin 0 -> 589 bytes nixos/configuration.nix | 1 + 6 files changed, 9 insertions(+) create mode 100644 newsboat/config create mode 100644 newsboat/urls diff --git a/.gitattributes b/.gitattributes index 76d2343..74fe0d5 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,3 +8,4 @@ emacs/gnus.el filter=git-crypt diff=git-crypt emacs/not-much.el filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt ssh_config.conf filter=git-crypt diff=git-crypt +newsboat/urls filter=git-crypt diff=git-crypt diff --git a/bash/env.sh b/bash/env.sh index 3e63aa3..d8233be 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -37,6 +37,7 @@ export CACHE_DIR="$HOME/Nextcloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" export PATH="$HOME/dev/misc/flutter/bin:$PATH" +#export BROWSER="firefox" diff --git a/bash/symlinks.sh b/bash/symlinks.sh index e56ee58..70e66af 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -49,6 +49,11 @@ ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf +## Newsboat +mkdir -p ~/.newsboat +ln -fs "$DOTFILES/newsboat/urls" ~/.newsboat/urls +ln -fs "$DOTFILES/newsboat/config" ~/.newsboat/config + ## NixOS ln -fs "$DOTFILES/nixos/evince.destkop" ~/.local/share/applications/evince.desktop ln -fs "$DOTFILES/nixos/firefox.destkop" ~/.local/share/applications/firefox.desktop diff --git a/newsboat/config b/newsboat/config new file mode 100644 index 0000000..a7998d9 --- /dev/null +++ b/newsboat/config @@ -0,0 +1 @@ +browser firefox \ No newline at end of file diff --git a/newsboat/urls b/newsboat/urls new file mode 100644 index 0000000..444e1a7 Binary files /dev/null and b/newsboat/urls differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0e24b25..fc48b78 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -240,6 +240,7 @@ rakudo bats ledger + newsboat perl dhall dhall-json -- cgit v1.2.3 From 1a6d394eb6d7a065b4372595ac2610089e6dafe7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 20 Jan 2019 23:00:42 -0200 Subject: Add ledger alias and helpers. --- encrypted/env.sh | Bin 3342 -> 3436 bytes spacemacs.el | 1 + 2 files changed, 1 insertion(+) diff --git a/encrypted/env.sh b/encrypted/env.sh index e4ebb21..bc1a0bf 100644 Binary files a/encrypted/env.sh and b/encrypted/env.sh differ diff --git a/spacemacs.el b/spacemacs.el index aa59eec..65a66ce 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -573,6 +573,7 @@ dump." (defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) + ("M-p" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-]" . (lambda () (interactive) (find-file "~/Nextcloud/Notes/TODOs.txt"))) -- cgit v1.2.3 From a5859fad8b43fbefc24f969b6f794c9a8abe797c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 20 Jan 2019 23:34:12 -0200 Subject: Initial setup for buku. --- nixos/configuration.nix | 2 ++ scripts/buku-add.sh | 3 +++ xmonad/xmonad.hs | 5 +++++ 3 files changed, 10 insertions(+) create mode 100755 scripts/buku-add.sh diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fc48b78..36a2474 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -248,6 +248,8 @@ shellcheck (haskell.lib.justStaticExecutables haskellPackages.github-backup) rustracer + xsel + buku ## Containers and VMs diff --git a/scripts/buku-add.sh b/scripts/buku-add.sh new file mode 100755 index 0000000..beccd0a --- /dev/null +++ b/scripts/buku-add.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +xsel | xargs -I{} buku -a "{}" ril diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index dd46d25..1f7d47a 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -95,6 +95,11 @@ myKeyBindings = -- restart network , ((mod4Mask, xK_x), spawn "gksudo -S systemctl restart network-manager") + + -- save selection (link) in buku + , ((mod4Mask, xK_c), + -- spawn "gksudo -S systemctl restart network-manager") + spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh") ] startup :: X() -- cgit v1.2.3 From 8d490839b7ef11549bee6c92fdd86ef60afd55e0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Jan 2019 01:25:07 -0200 Subject: Generate local RSS feed from buku tags. --- .gitignore | 3 +++ bash/aliases.sh | 1 + newsboat/urls | Bin 589 -> 653 bytes nixos/configuration.nix | 3 +++ scripts/atom.js | 22 ++++++++++++++++++++++ scripts/atom.sh | 19 +++++++++++++++++++ 6 files changed, 48 insertions(+) create mode 100644 scripts/atom.js create mode 100755 scripts/atom.sh diff --git a/.gitignore b/.gitignore index e671f1e..68b7e2f 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,6 @@ mail/offlineimap.pyc tam_required /result + +/scripts/node_modules/ +/scripts/package-lock.json \ No newline at end of file diff --git a/bash/aliases.sh b/bash/aliases.sh index 52d24b4..e8ff449 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -24,6 +24,7 @@ alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" alias perl6="rlwrap perl6" alias m="mail.sh" +alias a="atom.sh" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" diff --git a/newsboat/urls b/newsboat/urls index 444e1a7..1047793 100644 Binary files a/newsboat/urls and b/newsboat/urls differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 36a2474..6f8c7e0 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -333,6 +333,9 @@ # Sync emails with mbsync every hour "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/mail.sh -s" + # Refresh local RSS files every hour + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/atom.sh" + # Make read-only copy of TODOs.org every hour # "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cp-todos.sh -s" ]; diff --git a/scripts/atom.js b/scripts/atom.js new file mode 100644 index 0000000..878df05 --- /dev/null +++ b/scripts/atom.js @@ -0,0 +1,22 @@ +const RSS = require('rss'); + +const feedName = process.argv[2]; +const feedSrc = process.argv[3]; + +const feed = new RSS({ + title: `Buku feed tag for '${feedName}'.`, + description: `Buku feed tag for ${feedName}`, +}); + +const items = require(feedSrc); +items.forEach(({ title, description, uri }) => { + feed.item({ + title, + description, + url: uri + }); +}); + +const xml = feed.xml({indent: true}); + +console.log(xml); diff --git a/scripts/atom.sh b/scripts/atom.sh new file mode 100755 index 0000000..73c35ec --- /dev/null +++ b/scripts/atom.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +if [[ ! -d "node_modules" ]]; then + npm i rss +fi + +feed() { + local tag="$1" + local tmp="/tmp/$tag.json" + buku -t "$tag" --json > "$tmp" + node atom.js "$tag" "$tmp" +} + +mkdir -p ~/.newsboat +feed ril > ~/.newsboat/ril.xml +feed simple-archive > ~/.newsboat/simple-archive.xml +feed inbox > ~/.newsboat/inbox.xml -- cgit v1.2.3 From ebdfd3c70ca16a358c2debbbd18ffa14bd7c674b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Jan 2019 09:18:50 -0200 Subject: urls. --- newsboat/urls | Bin 653 -> 770 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 1047793..6f4ddff 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 01228f89c43d9a40f79eb8e2e9556d8d9fa01fc7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Jan 2019 09:19:32 -0200 Subject: WIP: add extra keybindings for Buku actions. --- bash/aliases.sh | 9 +++++---- scripts/buku-archive.sh | 15 +++++++++++++++ scripts/buku-delete.sh | 14 ++++++++++++++ xmonad/xmonad.hs | 9 ++++++++- 4 files changed, 42 insertions(+), 5 deletions(-) create mode 100755 scripts/buku-archive.sh create mode 100755 scripts/buku-delete.sh diff --git a/bash/aliases.sh b/bash/aliases.sh index e8ff449..2149d86 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -25,6 +25,7 @@ alias du="ncdu --color dark" alias perl6="rlwrap perl6" alias m="mail.sh" alias a="atom.sh" +alias n="newsboat" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" @@ -45,9 +46,9 @@ ps1() { } # git -alias ,s="git status" -alias ,d="git diff" -alias ,ds="git diff --staged" +alias s="git status" +alias d="git diff" +alias ds="git diff --staged" alias reload="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" -alias ,r="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" +alias r="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" diff --git a/scripts/buku-archive.sh b/scripts/buku-archive.sh new file mode 100755 index 0000000..5af56a0 --- /dev/null +++ b/scripts/buku-archive.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env bash +set -x + +SEL="$(xsel)" +BOOKMARK_ID="$(buku "$SEL" -f 1 --tacit | tail -n +2 | awk '{print $1}')" +# tail to trim unwanted "waiting for input" output from buku https://github.com/jarun/Buku/blob/d60d56bc9f7f5e1410e99dc8bb4e35abf5068a14/buku#L4619 + +if [[ ! -z "$BOOKMARK_ID" ]]; then + echo "Archiving $BOOKMARK_ID." + buku -u "$BOOKMARK_ID" --tag - ril + buku -u "$BOOKMARK_ID" --tag + simple-archive +else + echo "Bookmark for '$SEL' not found." + exit 1 +fi diff --git a/scripts/buku-delete.sh b/scripts/buku-delete.sh new file mode 100755 index 0000000..3e2f3dd --- /dev/null +++ b/scripts/buku-delete.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -x + +SEL="$(xsel)" +BOOKMARK_ID="$(buku "$SEL" -f 1 --tacit | tail -n +2 | awk '{print $1}')" +# tail to trim unwanted "waiting for input" output from buku https://github.com/jarun/Buku/blob/d60d56bc9f7f5e1410e99dc8bb4e35abf5068a14/buku#L4619 + +if [[ ! -z "$BOOKMARK_ID" ]]; then + echo "Deleting $BOOKMARK_ID." + buku -d "$BOOKMARK_ID" --tacit +else + echo "Bookmark for '$SEL' not found." + exit 1 +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 1f7d47a..ff14005 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -98,8 +98,15 @@ myKeyBindings = -- save selection (link) in buku , ((mod4Mask, xK_c), - -- spawn "gksudo -S systemctl restart network-manager") spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh") + + -- delete selection (link) from buku + , ((mod4Mask, xK_d), + spawn "$HOME/dev/libre/dotfiles/scripts/buku-delete.sh > ~/tmp/dbg-delete") + + -- archive selection (link) in buku + , ((mod4Mask, xK_a), + spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh > ~/tmp/dbg-archive") ] startup :: X() -- cgit v1.2.3 From be7edc6fe6c3aeca011ad0da730249a7bd3bd73b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Jan 2019 10:22:45 -0200 Subject: Add balance ledger report. --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 65a66ce..9c19ac2 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -776,6 +776,9 @@ This function is called at the very end of Spacemacs initialization." ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. + '(ledger-reports + (quote + (("balance" "ledger -f money.ledger balance Assets Liabilities")))) '(package-selected-packages (quote (selectric-mode ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) -- cgit v1.2.3 From e3c43cf89e296afd1ec0b7659c36b309bed084ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Jan 2019 10:23:02 -0200 Subject: gitconfig. --- git/gitconfig.ini | Bin 2198 -> 1861 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index df83354..f1f4d78 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From c71d427f78f5a5548ce4512c8ec4e87d406b4377 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 13:08:43 -0200 Subject: Integrate buku with newsboat. --- bash/symlinks.sh | 1 - newsboat/urls | Bin 770 -> 706 bytes scripts/atom.sh | 20 +++++++++++++++----- 3 files changed, 15 insertions(+), 6 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 70e66af..573c817 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -51,7 +51,6 @@ ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf ## Newsboat mkdir -p ~/.newsboat -ln -fs "$DOTFILES/newsboat/urls" ~/.newsboat/urls ln -fs "$DOTFILES/newsboat/config" ~/.newsboat/config ## NixOS diff --git a/newsboat/urls b/newsboat/urls index 6f4ddff..ce88f4c 100644 Binary files a/newsboat/urls and b/newsboat/urls differ diff --git a/scripts/atom.sh b/scripts/atom.sh index 73c35ec..d1e968f 100755 --- a/scripts/atom.sh +++ b/scripts/atom.sh @@ -6,14 +6,24 @@ if [[ ! -d "node_modules" ]]; then npm i rss fi +RSS_DIR="$HOME/.newsboat" +LINKS_OUT="$RSS_DIR/gen/buku.urls" + +mkdir -p "$RSS_DIR/gen" + +# Empty the text file +> "$LINKS_OUT" + feed() { local tag="$1" local tmp="/tmp/$tag.json" buku -t "$tag" --json > "$tmp" - node atom.js "$tag" "$tmp" + node atom.js "$tag" "$tmp" > "$RSS_DIR/gen/$1.xml" + echo "file://$RSS_DIR/gen/$1.xml" >> "$LINKS_OUT" } -mkdir -p ~/.newsboat -feed ril > ~/.newsboat/ril.xml -feed simple-archive > ~/.newsboat/simple-archive.xml -feed inbox > ~/.newsboat/inbox.xml +feed ril +feed simple-archive +feed ril-batch + +cat "$DOTFILES/newsboat/urls" <(echo) "$LINKS_OUT" > "$RSS_DIR/urls" -- cgit v1.2.3 From 3e938ac726a9470083148ef31507e9dc6123ae0c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 13:11:35 -0200 Subject: Setup integration between buku and newsboat. --- bash/symlinks.sh | 3 +++ scripts/buku-add.sh | 2 +- scripts/buku-archive.sh | 26 +++++++++++++++++++++----- scripts/buku-delete.sh | 26 +++++++++++++++++++++----- xmonad/xmonad.hs | 6 +++--- 5 files changed, 49 insertions(+), 14 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 573c817..f6adb0c 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -79,3 +79,6 @@ ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log ## GNUS ln -fs "$DOTFILES/encrypted/IMAP/authinfo.gpg" ~/.authinfo.gpg + +## Buku +ln -fs /tmp/buku-xmonad."$(date +%Y-%m-%d)".log /tmp/buku-xmonad.log diff --git a/scripts/buku-add.sh b/scripts/buku-add.sh index beccd0a..005adbd 100755 --- a/scripts/buku-add.sh +++ b/scripts/buku-add.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -xsel | xargs -I{} buku -a "{}" ril +xclip -o | xargs -I{} buku -a "{}" ril diff --git a/scripts/buku-archive.sh b/scripts/buku-archive.sh index 5af56a0..6ce1e80 100755 --- a/scripts/buku-archive.sh +++ b/scripts/buku-archive.sh @@ -1,12 +1,28 @@ #!/usr/bin/env bash -set -x -SEL="$(xsel)" -BOOKMARK_ID="$(buku "$SEL" -f 1 --tacit | tail -n +2 | awk '{print $1}')" -# tail to trim unwanted "waiting for input" output from buku https://github.com/jarun/Buku/blob/d60d56bc9f7f5e1410e99dc8bb4e35abf5068a14/buku#L4619 +SEL="$(xclip -o | tr -d '\n')" +if [[ -z "${SEL// }" ]]; then + echo "Empty selection." + exit 1 +fi +BOOKMARK_ID= +IFS=" +" +BOOKMARKS="$(buku "$SEL" -f 1 --tacit)" + +for bookmark in $BOOKMARKS; do + echo "$bookmark" + ID="$(echo "$bookmark" | cut -d$'\t' -f 1)" + URL="$(echo "$bookmark" | cut -d$'\t' -f 2)" + if [[ "$URL" = "$SEL" ]]; then + BOOKMARK_ID="$ID" + break + fi +done + if [[ ! -z "$BOOKMARK_ID" ]]; then - echo "Archiving $BOOKMARK_ID." + echo "Archiving $BOOKMARK_ID (URL: $SEL)." buku -u "$BOOKMARK_ID" --tag - ril buku -u "$BOOKMARK_ID" --tag + simple-archive else diff --git a/scripts/buku-delete.sh b/scripts/buku-delete.sh index 3e2f3dd..552d6b0 100755 --- a/scripts/buku-delete.sh +++ b/scripts/buku-delete.sh @@ -1,12 +1,28 @@ #!/usr/bin/env bash -set -x -SEL="$(xsel)" -BOOKMARK_ID="$(buku "$SEL" -f 1 --tacit | tail -n +2 | awk '{print $1}')" -# tail to trim unwanted "waiting for input" output from buku https://github.com/jarun/Buku/blob/d60d56bc9f7f5e1410e99dc8bb4e35abf5068a14/buku#L4619 +SEL="$(xclip -o | tr -d '\n')" +if [[ -z "${SEL// }" ]]; then + echo "Empty selection." + exit 1 +fi +BOOKMARK_ID= +IFS=" +" +BOOKMARKS="$(buku "$SEL" -f 1 --tacit)" + +for bookmark in $BOOKMARKS; do + echo "$bookmark" + ID="$(echo "$bookmark" | cut -d$'\t' -f 1)" + URL="$(echo "$bookmark" | cut -d$'\t' -f 2)" + if [[ "$URL" = "$SEL" ]]; then + BOOKMARK_ID="$ID" + break + fi +done + if [[ ! -z "$BOOKMARK_ID" ]]; then - echo "Deleting $BOOKMARK_ID." + echo "Deleting $BOOKMARK_ID (URL: $SEL)." buku -d "$BOOKMARK_ID" --tacit else echo "Bookmark for '$SEL' not found." diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index ff14005..8c12ae5 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -98,15 +98,15 @@ myKeyBindings = -- save selection (link) in buku , ((mod4Mask, xK_c), - spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh") + spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh >> /tmp/buku-xmonad.log") -- delete selection (link) from buku , ((mod4Mask, xK_d), - spawn "$HOME/dev/libre/dotfiles/scripts/buku-delete.sh > ~/tmp/dbg-delete") + spawn "$HOME/dev/libre/dotfiles/scripts/buku-delete.sh >> /tmp/buku-xmonad.log") -- archive selection (link) in buku , ((mod4Mask, xK_a), - spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh > ~/tmp/dbg-archive") + spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh >> /tmp/buku-xmonad.log") ] startup :: X() -- cgit v1.2.3 From 4541e1126a934e7c4e8e9eb69ed751f9ac91e364 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 13:12:05 -0200 Subject: Remove $HOME variable from npmrc.sh. --- nixos/npmrc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/npmrc.sh b/nixos/npmrc.sh index 2669f85..0bc6ecb 100644 --- a/nixos/npmrc.sh +++ b/nixos/npmrc.sh @@ -1,5 +1,5 @@ # shellcheck disable=2148 disable=2034 -prefix="$HOME/.npm-packages" +prefix=/home/andreh/.npm-packages # Taken from: # http://www.tomsquest.com/blog/2018/10/better-npm-ing/ save-exact=true -- cgit v1.2.3 From 5e0919db80267d5ed476c744e3f13f8d8f711571 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 16:39:17 -0200 Subject: Nextcloud -> ownCloud Client change only. --- bash/env.sh | 4 +--- bash/youtube.sh | 2 +- nixos/configuration.nix | 3 ++- scripts/backup.sh | 2 +- scripts/cp-todos.sh | 4 ++-- scripts/once-only-nextcloud.sh | 9 --------- scripts/once-only-owncloud.sh | 9 +++++++++ spacemacs.el | 7 ++++--- xmonad/xmonad.hs | 2 +- 9 files changed, 21 insertions(+), 21 deletions(-) delete mode 100755 scripts/once-only-nextcloud.sh create mode 100755 scripts/once-only-owncloud.sh diff --git a/bash/env.sh b/bash/env.sh index d8233be..a0b750f 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash -export PATH="$HOME/Nextcloud/bin/:$PATH" - # # Git Annex # @@ -33,7 +31,7 @@ export EDITOR=vi export PATH="$DOTFILES/scripts/:$PATH" export PATH="$DOTFILES/encrypted/scripts/:$PATH" export INPUTRC=~/.inputrc -export CACHE_DIR="$HOME/Nextcloud/cache" +export CACHE_DIR="$HOME/ownCloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" export PATH="$HOME/dev/misc/flutter/bin:$PATH" diff --git a/bash/youtube.sh b/bash/youtube.sh index 19c9af0..14d0371 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -12,7 +12,7 @@ export -f yt_dl download() { youtube-dl "$1" \ - --download-archive ~/Nextcloud/cache/youtube-dl-seen.conf \ + --download-archive ~/ownCloud/cache/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end "$2" \ --write-description \ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6f8c7e0..95a3b27 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -105,6 +105,7 @@ gnupg mr nextcloud-client + owncloud-client borgbackup git-sizer @@ -366,7 +367,7 @@ # xmodmap -e 'keycode 118 = bar Greek_lamda' sessionCommands = '' ${pkgs.haskellPackages.xmobar}/bin/xmobar ~/.xmobarrc & - ${pkgs.fvwm}/bin/xpmroot ~/Nextcloud/Images/emotion.png & + ${pkgs.fvwm}/bin/xpmroot ~/ownCloud/Images/emotion.png & ''; }; }; diff --git a/scripts/backup.sh b/scripts/backup.sh index 6a4de25..f31a503 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -27,7 +27,7 @@ borg create \ --progress \ --compression lzma,6 \ ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ - ~/Nextcloud/ \ + ~/ownCloud/ \ ~/mbsync/ # add folders to be backed up here green "Done" diff --git a/scripts/cp-todos.sh b/scripts/cp-todos.sh index d8e6f30..e839ae8 100755 --- a/scripts/cp-todos.sh +++ b/scripts/cp-todos.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash -cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/Notes/org.txt" -cp "$HOME/annex/txt/TODOs.org" "$HOME/Nextcloud/cache/TODOs.org" +cp "$HOME/annex/txt/TODOs.org" "$HOME/ownCloud/Notes/org.txt" +cp "$HOME/annex/txt/TODOs.org" "$HOME/ownCloud/cache/TODOs.org" diff --git a/scripts/once-only-nextcloud.sh b/scripts/once-only-nextcloud.sh deleted file mode 100755 index 7886b6f..0000000 --- a/scripts/once-only-nextcloud.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -if [ "$(pidof nextcloud)" ] -then - echo "Nextcloud already running." -else - echo "Nextcloud not running yet. Starting it." - nextcloud & disown -fi diff --git a/scripts/once-only-owncloud.sh b/scripts/once-only-owncloud.sh new file mode 100755 index 0000000..66b3ee4 --- /dev/null +++ b/scripts/once-only-owncloud.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +if [ "$(pidof owncloud)" ] +then + echo "ownCloud already running." +else + echo "ownCloud not running yet. Starting it." + owncloud & disown +fi diff --git a/spacemacs.el b/spacemacs.el index 9c19ac2..f30415d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -576,7 +576,7 @@ dump." ("M-p" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) - ("M-]" . (lambda () (interactive) (find-file "~/Nextcloud/Notes/TODOs.txt"))) + ("M-]" . (lambda () (interactive) (find-file "~/ownCloud/Notes/TODOs.txt"))) ("M-s-q" . (lambda () (interactive) (insert "/"))) ("M-s-w" . (lambda () (interactive) (insert "?"))) ("M-s-a" . (lambda () (interactive) (insert "\\"))) @@ -728,7 +728,7 @@ This is the place where most of your configurations should be done. Unless it is ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) - org-agenda-files '("~/Nextcloud/txt/TODOs.org") + org-agenda-files '("~/ownCloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" org-default-notes-file "~/annex/txt/TODOs.org" org-scratch-notes-file "~/annex/txt/TODOs.org" @@ -778,7 +778,8 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(ledger-reports (quote - (("balance" "ledger -f money.ledger balance Assets Liabilities")))) + (("balance-rs" "ledger -f money.ledger balance Assets Liabilities -V") + ("balance" "ledger -f money.ledger balance Assets Liabilities")))) '(package-selected-packages (quote (selectric-mode ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 8c12ae5..c266676 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -115,5 +115,5 @@ startup = do spawn "xmobar ~/.xmobarrc" spawn "killall trayer; trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" spawn "nm-applet" - spawn "~/annex/dev/code/dotfiles/scripts/once-only-nextcloud.sh" + spawn "~/annex/dev/code/dotfiles/scripts/once-only-owncloud.sh" setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad -- cgit v1.2.3 From 7cf187582a6af17fed55d580e8d173e59805ea01 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 20:40:13 -0200 Subject: Fix dotfiles path. --- bash/bash_profile.sh | 2 +- mail/mbsyncrc.ini | Bin 2117 -> 2102 bytes nixos/configuration.nix | 2 +- spacemacs.el | 2 +- xmonad/xmonad.hs | 6 +++--- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bash/bash_profile.sh b/bash/bash_profile.sh index 41bc7e9..0383eaa 100644 --- a/bash/bash_profile.sh +++ b/bash/bash_profile.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -source ~/annex/dev/code/dotfiles/bash/bashrc.sh +source ~/dev/libre/dotfiles/bash/bashrc.sh diff --git a/mail/mbsyncrc.ini b/mail/mbsyncrc.ini index c3d1bc0..a74c30e 100644 Binary files a/mail/mbsyncrc.ini and b/mail/mbsyncrc.ini differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 95a3b27..bcd52a9 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -426,7 +426,7 @@ uid = 1000; description = "EuAndreh"; extraGroups = [ "wheel" "networkmanager" "docker" ]; - passwordFile = "/home/andreh/annex/dev/code/dotfiles/encrypted/password-hash.txt"; + passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; }; }; # From the Guix manual: diff --git a/spacemacs.el b/spacemacs.el index f30415d..f3cb704 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -582,7 +582,7 @@ dump." ("M-s-a" . (lambda () (interactive) (insert "\\"))) ("M-s-s" . (lambda () (interactive) (insert "|"))))) -(defvar custom-el-files '("~/annex/dev/code/dotfiles/emacs/not-much.el" +(defvar custom-el-files '("~/dev/libre/dotfiles/emacs/not-much.el" "~/.quicklisp/slime-helper.el")) (defmacro measure-time (&rest body) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index c266676..43e918b 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -86,11 +86,11 @@ myKeyBindings = -- xrandr single monitor setup , ((mod4Mask .|. controlMask, xK_1), - spawn "~/annex/dev/code/dotfiles/scripts/single-monitor.sh") + spawn "~/dev/libre/dotfiles/scripts/single-monitor.sh") -- xrandr three monitor setup , ((mod4Mask .|. controlMask, xK_3), - spawn "~/annex/dev/code/dotfiles/scripts/three-monitors.sh") + spawn "~/dev/libre/dotfiles/scripts/three-monitors.sh") -- restart network , ((mod4Mask, xK_x), @@ -115,5 +115,5 @@ startup = do spawn "xmobar ~/.xmobarrc" spawn "killall trayer; trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" spawn "nm-applet" - spawn "~/annex/dev/code/dotfiles/scripts/once-only-owncloud.sh" + spawn "~/dev/libre/dotfiles/scripts/once-only-owncloud.sh" setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad -- cgit v1.2.3 From 5f469e121073ad632b2c1ed3d936a36e74afd9af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 20:40:29 -0200 Subject: RSS urls. --- newsboat/urls | Bin 706 -> 756 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index ce88f4c..50f7cbf 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 79566a629ee25f500b01f244b8d292a67fe608dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Jan 2019 20:41:33 -0200 Subject: Use NixOS image in build.yml. --- .build.yml | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/.build.yml b/.build.yml index 33e6627..4f3c8ce 100644 --- a/.build.yml +++ b/.build.yml @@ -1,18 +1,11 @@ -image: debian/stretch -packages: - - curl +image: nixos/latest triggers: - condition: failure action: email to: EuAndreh sources: - https://git.sr.ht/~euandreh/dotfiles -secrets: - - 7159f943-811f-402d-bb6d-37cd764dc728 tasks: - - setup: | - curl https://nixos.org/nix/install | sh - echo '. ~/.nix-profile/etc/profile.d/nix.sh' >> ~/.buildenv - tests: | cd dotfiles/ nix-build -A test -- cgit v1.2.3 From a5b833c375d0610f5c148eb90bb1b7dd2191a431 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Jan 2019 00:17:27 -0200 Subject: urls. --- newsboat/urls | Bin 756 -> 869 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 50f7cbf..90db802 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 522ea27dc31a79bb06510f8ffd1f15614ed052a8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Jan 2019 22:37:16 -0200 Subject: Remove ril-batch feed. --- scripts/atom.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/atom.sh b/scripts/atom.sh index d1e968f..64c9a14 100755 --- a/scripts/atom.sh +++ b/scripts/atom.sh @@ -24,6 +24,5 @@ feed() { feed ril feed simple-archive -feed ril-batch cat "$DOTFILES/newsboat/urls" <(echo) "$LINKS_OUT" > "$RSS_DIR/urls" -- cgit v1.2.3 From da92df2cc003213a15ff598a6ce194038ccb2cb3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Jan 2019 22:37:25 -0200 Subject: RSS feeds. --- newsboat/urls | Bin 869 -> 1006 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 90db802..9eeac3c 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From e77117dd559401c309a1b3da67b676dd897cbfff Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Jan 2019 00:12:05 -0200 Subject: Don't generate XML for emtpy tags. --- scripts/atom.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/atom.sh b/scripts/atom.sh index 64c9a14..4d09815 100755 --- a/scripts/atom.sh +++ b/scripts/atom.sh @@ -18,8 +18,10 @@ feed() { local tag="$1" local tmp="/tmp/$tag.json" buku -t "$tag" --json > "$tmp" - node atom.js "$tag" "$tmp" > "$RSS_DIR/gen/$1.xml" - echo "file://$RSS_DIR/gen/$1.xml" >> "$LINKS_OUT" + if [[ -s "$tmp" ]]; then + node atom.js "$tag" "$tmp" > "$RSS_DIR/gen/$1.xml" + echo "file://$RSS_DIR/gen/$1.xml" >> "$LINKS_OUT" + fi } feed ril -- cgit v1.2.3 From 46bc516d5e4ce6332719e8e67b197e7acea40f93 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Jan 2019 11:35:29 -0200 Subject: RSS. --- newsboat/urls | Bin 1006 -> 1035 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 9eeac3c..36efe8d 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 6926efa3e6c40ec60badcb553c1f34d490cf775f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Jan 2019 11:36:12 -0200 Subject: Ledger cmd. --- spacemacs.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index f3cb704..c3e1cff 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -778,8 +778,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(ledger-reports (quote - (("balance-rs" "ledger -f money.ledger balance Assets Liabilities -V") - ("balance" "ledger -f money.ledger balance Assets Liabilities")))) + (("balance" "ledger -f money.ledger balance Assets Liabilities")))) '(package-selected-packages (quote (selectric-mode ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) -- cgit v1.2.3 From 6a655f0ad23f58137d5afdf1282cc23172cd0b20 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Jan 2019 21:56:57 -0200 Subject: RSS. --- newsboat/urls | Bin 1035 -> 1073 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 36efe8d..18f3457 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From aa46dfc6e3a8a1a68ee0614e86fb2b306df91150 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Jan 2019 21:57:15 -0200 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3071 -> 3158 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index a6e17d9..b023b97 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 2c80d1907acca9febc57281b6771134b36252963 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 07:07:43 -0200 Subject: Change remaining annex submodule path. --- bash/bashrc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index eedc2bb..2e68b80 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -25,7 +25,7 @@ source ~/dev/nu/nucli/nu.bashcompletion env > ~/.spacemacs.env # tmp FIXME: move to mrconfig.ini -export PATH="$HOME/annex/dev/code/songbooks/cli:$PATH" +export PATH="$HOME/dev/libre/songbooks/cli:$PATH" alias sb="songbooks" isLinux && { -- cgit v1.2.3 From d62fc6a2e4d59753f01ed01c7d6e48f804fb370c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 07:09:07 -0200 Subject: Update Spacemacs generated code. --- spacemacs.el | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index c3e1cff..a115c8a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -776,12 +776,9 @@ This function is called at the very end of Spacemacs initialization." ;; If you edit it by hand, you could mess it up, so be careful. ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. - '(ledger-reports - (quote - (("balance" "ledger -f money.ledger balance Assets Liabilities")))) '(package-selected-packages (quote - (selectric-mode ob-rust fireplace writeroom-mode visual-fill-column yasnippet-snippets yapfify yaml-mode xterm-color ws-butler winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 73262275665bf9f906bcc5fcfd9c4db1812a4a42 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 07:09:46 -0200 Subject: Toogle fullscreen mode of xmobar with mod-shift-f. --- xmonad/xmonad.hs | 16 ++++++---------- 1 file changed, 6 insertions(+), 10 deletions(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 43e918b..97786c7 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -15,7 +15,7 @@ main = xmonad $ def -- Fullscreen handling: -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar - { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> manageHook def <+> manageScratchPad + { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def , handleEventHook = handleEventHook def <+> docksEventHook -- , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts $ layoutHook def , layoutHook = smartBorders $ avoidStruts $ layoutHook def @@ -26,14 +26,6 @@ main = myTerminal = "gnome-terminal" -manageScratchPad :: ManageHook -manageScratchPad = scratchpadManageHook (W.RationalRect l t w h) - where - h = 0.1 -- terminal height, 10% - w = 1 -- terminal width, 100% - t = 1 - h -- distance from top edge, 90% - l = 1 - w -- distance from left edge, 0% - myKeyBindings :: [((ButtonMask, KeySym), X())] myKeyBindings = [ -- XF86MonBrightnessUp @@ -107,13 +99,17 @@ myKeyBindings = -- archive selection (link) in buku , ((mod4Mask, xK_a), spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh >> /tmp/buku-xmonad.log") + + -- toggle appearence of xmobar + -- https://stackoverflow.com/a/27646652 + , ((mod4Mask .|. shiftMask, xK_f), sendMessage ToggleStruts) ] startup :: X() startup = do spawn "xbacklight =100" spawn "xmobar ~/.xmobarrc" - spawn "killall trayer; trayer --edge top --align right --SetDockType true --SetPartialStrut true --expand true --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" + spawn "killall trayer; trayer --edge top --align right --SetDockType false --SetPartialStrut false --expand false --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" spawn "nm-applet" spawn "~/dev/libre/dotfiles/scripts/once-only-owncloud.sh" setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad -- cgit v1.2.3 From 3fb1134c53c2b2a06b3a7f4ff597604df8f627fa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 07:10:03 -0200 Subject: Add URL in RSS list. --- newsboat/urls | Bin 1073 -> 1107 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 18f3457..0a40e81 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 5a85c5d6feb53cd9cdf2491f89aa860a9d174373 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 07:10:48 -0200 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 12126 -> 12270 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 9c789a3..aa46485 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 4c0f54ea371f5388148db7ea7cba3ff672355728 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 07:11:31 -0200 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3158 -> 3210 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index b023b97..c8c50d2 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 6ba02593179a5fcd8fdc33081cb12ac262496103 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 13:29:11 -0200 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3210 -> 3307 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index c8c50d2..ebc0b6c 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 6a4e2e89a4223b30e524d47d0f8a62c88ef9911e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Feb 2019 13:31:07 -0200 Subject: Install python-ly and lame in configuration.nix. --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index bcd52a9..5220a2e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -215,6 +215,8 @@ texlive.combined.scheme-full lilypond + python36Packages.python-ly + lame frescobaldi timidityWithEvenMoreFormats -- cgit v1.2.3 From fbd317953220c081f32df8e521aca6d2ed7d3177 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Feb 2019 00:51:17 -0200 Subject: Cleanup subscriptions. --- encrypted/scripts/video-feed.sh | Bin 3307 -> 3169 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index ebc0b6c..5cb7ffb 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 728e4d2eee8c56ec095ab95cb85c03be515a5496 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Feb 2019 00:51:24 -0200 Subject: Add URL to feed. --- newsboat/urls | Bin 1107 -> 1145 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 0a40e81..d61da21 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 45b50d7389be137a30ab8e211f57479a16875d4e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Feb 2019 00:51:43 -0200 Subject: Remove description from video download. --- bash/youtube.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index 14d0371..b5bec8c 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -15,8 +15,8 @@ download() { --download-archive ~/ownCloud/cache/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end "$2" \ - --write-description \ --output "$YT_TEMPLATE" + # --write-description \ } export -f download -- cgit v1.2.3 From 38d858f8f559054902f6039af25959595b57ede7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Feb 2019 01:05:36 -0200 Subject: Readd write-description. --- bash/youtube.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index b5bec8c..14d0371 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -15,8 +15,8 @@ download() { --download-archive ~/ownCloud/cache/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end "$2" \ + --write-description \ --output "$YT_TEMPLATE" - # --write-description \ } export -f download -- cgit v1.2.3 From fce8defe3b3d6d64b3a74e074ac4c0018eaa1d87 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Feb 2019 21:18:58 -0200 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3169 -> 3290 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index 5cb7ffb..fc3868b 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 0bb3522feea9b9d4085ef3586cebcc68a69aeb0e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Mar 2019 16:48:27 -0300 Subject: Add RSS subscription. --- newsboat/urls | Bin 1145 -> 1195 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index d61da21..50f2256 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From d1e32636a6e288791a22eb54a1fc8860489c184e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Mar 2019 12:43:36 -0300 Subject: Fix inc_download of youtube.sh. --- bash/youtube.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index 14d0371..fe22169 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -38,7 +38,6 @@ download_playlist() { } export -f download_playlist - inc_download() { local fn="$1" local id="$2" @@ -46,10 +45,9 @@ inc_download() { local file="$HOME/.yt-db/$id" mkdir -p "$HOME/.yt-db" - n_count="$(cat "$file" 2> /dev/null || printf 10)" - local n_count - n_count_new="$((n_count + step))" - local n_count_new + cat "$file" 2> /dev/null + local n_count="$(cat "$file" 2> /dev/null || printf 10)" + local n_count_new="$((n_count + step))" echo "$n_count_new" > "$file" -- cgit v1.2.3 From 41f019a35a25fb6f9ffd313830008ae85046560a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Mar 2019 12:44:09 -0300 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3290 -> 3214 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index fc3868b..6ed5a57 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 93441ebbde6eeb536b4234a5a5b6b04c8433ebb6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Mar 2019 12:44:27 -0300 Subject: Remove gpaste. --- nixos/configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5220a2e..adcfd7e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -301,6 +301,7 @@ androidsdk_extras androidndk pkgsUnstable.patchwork-classic + # gnome3.gpaste ## Cryptocururencies @@ -378,7 +379,7 @@ gnome-keyring.enable = true; seahorse.enable = true; gnome-terminal-server.enable = true; - gpaste.enable = true; # clipboard manager + # gpaste.enable = true; # clipboard manager tracker.enable = true; sushi.enable = true; # nautilus previewer gnome-online-accounts.enable = true; -- cgit v1.2.3 From f830325cdffd646a548f654a7c28417414f20967 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Mar 2019 12:44:35 -0300 Subject: Uninstall Tor browser. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index adcfd7e..7043ce0 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -294,7 +294,7 @@ vlc keepassx2-http yubioath-desktop - tor-browser-bundle-bin + # tor-browser-bundle-bin transmission_gtk libreoffice android-studio -- cgit v1.2.3 From 6f01fc2debc1de3a3c108007b2796941546b0f99 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Mar 2019 12:45:18 -0300 Subject: SSH vagrant config. --- ssh_config.conf | Bin 83 -> 231 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ssh_config.conf b/ssh_config.conf index 298ac3b..2d025d6 100644 Binary files a/ssh_config.conf and b/ssh_config.conf differ -- cgit v1.2.3 From 31afffa0cdd1b31029b6954e02aa9cdef2a3a7b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Mar 2019 23:01:01 -0300 Subject: Add vpn tmuxinator template. --- encrypted/nu/tmux/projects/vpn.yml | Bin 0 -> 239 bytes 1 file changed, 0 insertions(+), 0 deletions(-) create mode 100644 encrypted/nu/tmux/projects/vpn.yml diff --git a/encrypted/nu/tmux/projects/vpn.yml b/encrypted/nu/tmux/projects/vpn.yml new file mode 100644 index 0000000..4febb54 Binary files /dev/null and b/encrypted/nu/tmux/projects/vpn.yml differ -- cgit v1.2.3 From f293e3203f934c92fb8bc9422a34ed1317fba578 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Mar 2019 23:01:12 -0300 Subject: Add sshuttle package (for VPN network). --- encrypted/SSH/known_hosts.txt | Bin 4114 -> 4289 bytes nixos/configuration.nix | 1 + 2 files changed, 1 insertion(+) diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt index 79c3e9e..ec99d68 100644 Binary files a/encrypted/SSH/known_hosts.txt and b/encrypted/SSH/known_hosts.txt differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7043ce0..18831f9 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -313,6 +313,7 @@ ## nu specific packages + sshuttle slack chromium ]; -- cgit v1.2.3 From c779a8244dbc41138c2c485a7f7a16a5a1b15b73 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Mar 2019 23:32:05 -0300 Subject: Add cozy audiobook package. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 18831f9..f5b38b3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -286,6 +286,7 @@ inkscape calibre + pkgsUnstable.cozy rhythmbox gpodder firefox -- cgit v1.2.3 From 63273ef0e6bff06ec8cd91baa8751ea7ecbad0aa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 18:39:33 -0300 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 12270 -> 12148 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index aa46485..053db14 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 84ef92c909868f09b8f3d89621eb03e981250a2a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 18:43:11 -0300 Subject: Fix shellcheck warnings. --- bash/youtube.sh | 3 ++- scripts/atom.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index fe22169..275e0b8 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -46,7 +46,8 @@ inc_download() { local file="$HOME/.yt-db/$id" mkdir -p "$HOME/.yt-db" cat "$file" 2> /dev/null - local n_count="$(cat "$file" 2> /dev/null || printf 10)" + local n_count + n_count="$(cat "$file" 2> /dev/null || printf 10)" local n_count_new="$((n_count + step))" echo "$n_count_new" > "$file" diff --git a/scripts/atom.sh b/scripts/atom.sh index 4d09815..6ca4110 100755 --- a/scripts/atom.sh +++ b/scripts/atom.sh @@ -12,7 +12,7 @@ LINKS_OUT="$RSS_DIR/gen/buku.urls" mkdir -p "$RSS_DIR/gen" # Empty the text file -> "$LINKS_OUT" +true > "$LINKS_OUT" feed() { local tag="$1" -- cgit v1.2.3 From 817178e5c04563398708dd6dfe2128a915d5d1f8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 18:48:40 -0300 Subject: Use debian instead of NixOS. --- .build.yml | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index 4f3c8ce..43cde57 100644 --- a/.build.yml +++ b/.build.yml @@ -1,4 +1,6 @@ -image: nixos/latest +image: debian/stretch +packages: + - curl triggers: - condition: failure action: email @@ -6,6 +8,9 @@ triggers: sources: - https://git.sr.ht/~euandreh/dotfiles tasks: + - setup: | + wget -O- https://nixos.org/nix/install | sh + echo '. ~/.nix-profile/etc/profile.d/nix.sh' >> ~/.buildenv - tests: | cd dotfiles/ nix-build -A test -- cgit v1.2.3 From 1dcc6a9408f52653a6e22ea5de01832c2999b90f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 18:53:55 -0300 Subject: dbg NixOS build. --- .build.yml | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/.build.yml b/.build.yml index 43cde57..6987493 100644 --- a/.build.yml +++ b/.build.yml @@ -1,6 +1,6 @@ -image: debian/stretch +image: nixos/latest packages: - - curl + - shellcheck triggers: - condition: failure action: email @@ -8,9 +8,7 @@ triggers: sources: - https://git.sr.ht/~euandreh/dotfiles tasks: - - setup: | - wget -O- https://nixos.org/nix/install | sh - echo '. ~/.nix-profile/etc/profile.d/nix.sh' >> ~/.buildenv - tests: | cd dotfiles/ + which shellcheck nix-build -A test -- cgit v1.2.3 From ffe685dc83ee22783a178ef3eb6775a340ce8971 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 18:59:40 -0300 Subject: Add NixOS unstable channel. --- .build.yml | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index 6987493..8ff6edf 100644 --- a/.build.yml +++ b/.build.yml @@ -1,4 +1,6 @@ -image: nixos/latest +image: nixos/unstable +repositories: + unstable: https://nixos.org/channels/nixos-unstable packages: - shellcheck triggers: -- cgit v1.2.3 From 2a92f3312248b2b4ddff5a6df20139a52eb02405 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 19:03:40 -0300 Subject: Add nixpkgs.prefix. --- .build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index 8ff6edf..27e59fc 100644 --- a/.build.yml +++ b/.build.yml @@ -2,7 +2,7 @@ image: nixos/unstable repositories: unstable: https://nixos.org/channels/nixos-unstable packages: - - shellcheck + - nixpkgs.shellcheck triggers: - condition: failure action: email -- cgit v1.2.3 From a434d49d4b32bd1eaaba60d082511de9101fb539 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 19:04:36 -0300 Subject: Remove shellcheck pkgs. --- .build.yml | 2 -- 1 file changed, 2 deletions(-) diff --git a/.build.yml b/.build.yml index 27e59fc..5225d44 100644 --- a/.build.yml +++ b/.build.yml @@ -1,8 +1,6 @@ image: nixos/unstable repositories: unstable: https://nixos.org/channels/nixos-unstable -packages: - - nixpkgs.shellcheck triggers: - condition: failure action: email -- cgit v1.2.3 From aa408b464311b57538808f0f470998a174566d81 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 19:06:19 -0300 Subject: Remove =which shellcheck=. --- .build.yml | 1 - 1 file changed, 1 deletion(-) diff --git a/.build.yml b/.build.yml index 5225d44..3e4c585 100644 --- a/.build.yml +++ b/.build.yml @@ -10,5 +10,4 @@ sources: tasks: - tests: | cd dotfiles/ - which shellcheck nix-build -A test -- cgit v1.2.3 From edbd14ec6c4c9dbf585a658d0d2580b85ae324aa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 19:09:08 -0300 Subject: Use nixpkgs repository. --- .build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index 3e4c585..ee25164 100644 --- a/.build.yml +++ b/.build.yml @@ -1,6 +1,6 @@ image: nixos/unstable repositories: - unstable: https://nixos.org/channels/nixos-unstable + nixpkgs: https://nixos.org/channels/nixpkgs-unstable triggers: - condition: failure action: email -- cgit v1.2.3 From 8066b7a666943dab0aed422f1e595bd926a4a745 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 19:12:30 -0300 Subject: Replace =! -z= for =-n=. --- scripts/buku-archive.sh | 2 +- scripts/buku-delete.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/buku-archive.sh b/scripts/buku-archive.sh index 6ce1e80..2a2a702 100755 --- a/scripts/buku-archive.sh +++ b/scripts/buku-archive.sh @@ -21,7 +21,7 @@ for bookmark in $BOOKMARKS; do done -if [[ ! -z "$BOOKMARK_ID" ]]; then +if [[ -n "$BOOKMARK_ID" ]]; then echo "Archiving $BOOKMARK_ID (URL: $SEL)." buku -u "$BOOKMARK_ID" --tag - ril buku -u "$BOOKMARK_ID" --tag + simple-archive diff --git a/scripts/buku-delete.sh b/scripts/buku-delete.sh index 552d6b0..01de451 100755 --- a/scripts/buku-delete.sh +++ b/scripts/buku-delete.sh @@ -21,7 +21,7 @@ for bookmark in $BOOKMARKS; do done -if [[ ! -z "$BOOKMARK_ID" ]]; then +if [[ -n "$BOOKMARK_ID" ]]; then echo "Deleting $BOOKMARK_ID (URL: $SEL)." buku -d "$BOOKMARK_ID" --tacit else -- cgit v1.2.3 From 07e41aa9d567020080e51ff6a394f1cc30792844 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Apr 2019 21:12:18 -0300 Subject: Split vagrant cmds. --- encrypted/nu/tmux/projects/vpn.yml | Bin 239 -> 326 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/tmux/projects/vpn.yml b/encrypted/nu/tmux/projects/vpn.yml index 4febb54..0e9ead1 100644 Binary files a/encrypted/nu/tmux/projects/vpn.yml and b/encrypted/nu/tmux/projects/vpn.yml differ -- cgit v1.2.3 From d9234325dbbb752a1df67939a40dcbfdcd42595b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Apr 2019 12:01:21 +0000 Subject: Remove duplicated partition labeling. --- nixos/os-installation.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh index 36342cb..23fa1af 100644 --- a/nixos/os-installation.sh +++ b/nixos/os-installation.sh @@ -46,7 +46,6 @@ n # create new partition 3 # partition number ENTER # use default first sector ENTER # partition size is the remaining of the disk -EF00 # set partition type to "EFI System" 8E00 # set partition type to "Linux LVM" w -- cgit v1.2.3 From 1165e6905fd9d167f1ce0c459b2106be5b235ac3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Apr 2019 21:04:45 +0000 Subject: Update os-installation.sh --- nixos/os-installation.sh | 27 +++++++++++++++++---------- 1 file changed, 17 insertions(+), 10 deletions(-) diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh index 23fa1af..614ca0d 100644 --- a/nixos/os-installation.sh +++ b/nixos/os-installation.sh @@ -10,7 +10,9 @@ sudo umount /dev/sdc1 sudo dd if=nixos.iso of=/dev/sdc # -# Derived from https://www.maketecheasier.com/nixos-review/ +# Derived from: +# https://www.maketecheasier.com/nixos-review/ +# https://chris-martin.org/2015/installing-nixos # First, get an internet connection, either by using an ethernet cable or using =wpa_supplicant=: # https://wiki.archlinux.org/index.php/WPA_supplicant @@ -66,19 +68,25 @@ mkswap -L swap /dev/vg/swap mount /dev/vg/root /mnt mkdir /mnt/boot mount /dev/nvme0n1p2 /mnt/boot +swapon /dev/vg/swap - -mkswap -L swap /dev/sda1 -swapon /dev/sda1 -mkfs.ext4 -L nixos /dev/sda2 -mount /dev/disk/by-label/nixos /mnt nixos-generate-config --root /mnt # START Edit NixOS configuration file vi /mnt/etc/nixos/configuration.nix -# Uncomment: -boot.loader.grub.device = “/dev/sda” +# System configuration: +boot.initrd.luks.devices = [ + { + name = "root"; + device = "/dev/sda3"; + preLVM = true; + } +]; +boot.loader.grub.device = "/dev/sda"; +networking.wireless.enable = true; + +# Initial package set: enviroment.systemPackages = with pkgs; [ wget vim @@ -88,10 +96,9 @@ enviroment.systemPackages = with pkgs; [ gitAndTools.gitRemoteGcrypt lsof gnupg - gnupg1 ] -# Add: +# Desktop environment: services = { xserver = { enable = true; -- cgit v1.2.3 From 8ddbc3678823d8a4e21701ff4a06919e62e26f64 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Apr 2019 22:04:56 +0000 Subject: Update os-installation.sh --- nixos/os-installation.sh | 22 +++++----------------- 1 file changed, 5 insertions(+), 17 deletions(-) diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh index 614ca0d..519ee5a 100644 --- a/nixos/os-installation.sh +++ b/nixos/os-installation.sh @@ -14,9 +14,12 @@ sudo dd if=nixos.iso of=/dev/sdc # # https://www.maketecheasier.com/nixos-review/ # https://chris-martin.org/2015/installing-nixos -# First, get an internet connection, either by using an ethernet cable or using =wpa_supplicant=: +# First, get an internet connection. +# The easiest way is to start the GUI and use the network manager applet: +systemctl start display-manager +# If the ISO doesn't contain GUI, try getting an internet connection either by using an ethernet cable or using =wpa_supplicant=: # https://wiki.archlinux.org/index.php/WPA_supplicant -wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) +# wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) # Change keyboard to pt_BR layout: loadkeys br-abnt2 @@ -84,28 +87,13 @@ boot.initrd.luks.devices = [ } ]; boot.loader.grub.device = "/dev/sda"; -networking.wireless.enable = true; # Initial package set: enviroment.systemPackages = with pkgs; [ wget vim - firefox - gitAndTools.gitFull - gitAndTools.git-annex - gitAndTools.gitRemoteGcrypt - lsof - gnupg ] -# Desktop environment: -services = { - xserver = { - enable = true; - desktopManager.gnome3.enable = true; - displayManager.gdm.enable = true; - }; -}; # END nixos-install -- cgit v1.2.3 From 80a744253e96def922c6f77ab4db2abba8363aad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Apr 2019 15:56:26 -0300 Subject: mrconfig.ini. --- configuration.nix | 44 ++++++++++++++++++++++++++++++++++++++++++++ git/mrconfig.ini | Bin 12148 -> 11694 bytes 2 files changed, 44 insertions(+) create mode 100644 configuration.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..0756d89 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,44 @@ +{ config, pkgs, ... }: + +{ + imports = + [ # Include the results of the hardware scan. + ./hardware-configuration.nix + ]; + + # Use the systemd-boot EFI boot loader. + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + boot.initrd.luks.devices = [ + { + name = "root"; + device = "/dev/sda3"; + preLVM = true; + } + ]; + + environment.systemPackages = with pkgs; [ + wget vim + ]; + + services = { + xserver = { + enable = true; + windowManager.default = "xmonad"; + windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + }; + desktopManager = { + default = "none"; + xterm.enable = false; + gnome3.enable = true; + }; + displayManager = { + lightdm.enable = true; + }; + }; + }; + + system.stateVersion = "19.03"; # Did you read the comment? +} diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 053db14..ae02cb9 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 577e04ac7898d9c916c2a4494c088da35fe80479 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Apr 2019 16:46:02 -0300 Subject: Remove stale link to bash_git.sh. --- bash/symlinks.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index f6adb0c..b96f952 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -15,7 +15,6 @@ ln -fs "$DOTFILES/bash/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/bash/bash_profile.sh" ~/.bash_profile ln -fs "$DOTFILES/git/gitattributes" ~/.gitattributes ln -fs "$DOTFILES/git/gitignore" ~/.gitignore_global -ln -fs "$DOTFILES/git/bash_git.sh" ~/.bash_git ln -fs "$DOTFILES/encrypted/nugitconfig.ini" ~/.nugitconfig ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc -- cgit v1.2.3 From 6eeca14d9b56d8a648e4733594ae1409aff377cc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Apr 2019 16:48:05 -0300 Subject: Deactivate npm_i helper. --- bash/npm.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/bash/npm.sh b/bash/npm.sh index 7fbe4f7..dc1974c 100644 --- a/bash/npm.sh +++ b/bash/npm.sh @@ -8,12 +8,12 @@ npm_i() { } } -npm_i eq edn-eq -npm_i react-native react-native-cli -npm_i detox detox-cli -npm_i xml2json xml2json-command -npm_i tern tern -npm_i git-ssb git-ssb -npm_i git-ssb-web git-ssb-web -npm_i shadow-cljs shadow-cljs -npm_i heroku heroku +# npm_i eq edn-eq +# npm_i react-native react-native-cli +# npm_i detox detox-cli +# npm_i xml2json xml2json-command +# npm_i tern tern +# npm_i git-ssb git-ssb +# npm_i git-ssb-web git-ssb-web +# npm_i shadow-cljs shadow-cljs +# npm_i heroku heroku -- cgit v1.2.3 From 71383ec467e8f8112981384ebc2966be27d98357 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:05:17 -0300 Subject: Disable $GUIX_PROFILE sourcing. --- bash/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index a0b750f..b1eeae5 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -70,7 +70,7 @@ isLinux && { export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" isLinux && { - source "$GUIX_PROFILE" + # source "$GUIX_PROFILE" } export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" -- cgit v1.2.3 From 8ae570f147887954cb3f89470dec39cba0dcf326 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:05:33 -0300 Subject: Comment grub.device NixOS configuration. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f5b38b3..ae3b35e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -11,7 +11,7 @@ loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = true; - grub.device = "/dev/nvme0n1"; + # grub.device = "/dev/sda"; }; initrd = { luks.devices = [ -- cgit v1.2.3 From 55e90c705c8ced2be7c27f5e18a4c2eab0ef83d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:05:46 -0300 Subject: Change device from nvme0n1 to sda. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ae3b35e..48eb974 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -17,7 +17,7 @@ luks.devices = [ { name = "root"; - device = "/dev/nvme0n1p3"; + device = "/dev/sda3"; preLVM = true; } ]; -- cgit v1.2.3 From c9962040d4aaeb40466e3c9ee69159202c0f4b62 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:06:14 -0300 Subject: Fix indentation of packages. --- nixos/configuration.nix | 460 ++++++++++++++++++++++++------------------------ 1 file changed, 230 insertions(+), 230 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 48eb974..dcfa64c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -88,236 +88,236 @@ # Uses HTTPS (https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/nodejs.nix#L45), safer to trust the hash (unless it's already compromised :shrug:) }; in with pkgs; [ - pkgsUnstable.nodejs-10_x - # nodejs-10_14_1 - - ## Personal data tools - - gitAndTools.git-open - gitAndTools.gitFull - gitAndTools.diff-so-fancy - pkgs-18-03.gitAndTools.git-annex - gitAndTools.gitRemoteGcrypt - gitAndTools.git-dit - pkgsUnstable.gitAndTools.git-secrets - git-crypt - git-lfs - gnupg - mr - nextcloud-client - owncloud-client - borgbackup - git-sizer - - - ## CLI tools - - bash - bash-completion - nix-bash-completions - youtube-dl - wget - vim - thefuck - tmux - tmuxinator - sox # =play= - gettext # =envsubst= - ag - gnugrep - ack - htop - rlwrap - awscli - jq - openvpn - xclip - bc # binary calculator used in nucli - sassc - watchman - pkgsUnstable.ipfs - gnumake - gcc - psmisc # =killall= - xorg.xkill - autojump - bfg-repo-cleaner - pwgen - gksu # =gksudo= - gnome2.GConf # https://github.com/NixOS/nixpkgs/issues/15978 - lsof - pciutils - python27Packages.pywatchman # =watchman-wait= - libressl - tree - i2p - libxml2 # =xmllint= - unzip # used by extract bash function and Clojure go-to-source - odt2txt # used to diff odf files - feh # simplistic image viewer - nixUnstable # =nix= - zip - zlib - redis - alsaUtils # for xmonad volume commands - multimarkdown # =markdown= - pup # command-line HTML parsing https://github.com/ericchiang/pup - binutils-unwrapped # =ar= command for cargo build - nssTools # =pk12util= - gitAndTools.hub # GitHub helper - insomnia - bind # =dig= - file - gitlab-runner - sshpass - zathura # for viewing Emacs PDF files - nvi - cacert - gtypist - pandoc - inotify-tools - fzf - ncdu - fd - nnn - python36Packages.python-slugify - moreutils # =vipe= - bazel - graphviz # =dot= and others - - diffoscope # - poppler_utils # used by diffoscope for comparing PDF files - pdftk # - - gnome3.libgnome-keyring - gnome3.gnome-keyring - - - ## Mail - - notmuch - isync - - - ## Spell checking - - (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) - languagetool - - - ## NixOS - - pypi2nix - bundix - - - ## Music - - texlive.combined.scheme-full - lilypond - python36Packages.python-ly - lame - frescobaldi - timidityWithEvenMoreFormats - - - ## Programming tools - - sbcl - stack - leiningen - python3 - python - yarn - elixir - openjdk - solc - bundler - rustup - cargo - clojure # =clj= - visualvm # JVM profiling tool - ant - maven - go_bootstrap - rakudo - bats - ledger - newsboat - perl - dhall - dhall-json - nodePackages.node2nix - shellcheck - (haskell.lib.justStaticExecutables haskellPackages.github-backup) - rustracer - xsel - buku - - ## Containers and VMs - - packer - docker_compose - docker-machine - vagrant - kubernetes - ansible - qemu - pkgsUnstable.gnome3.gtk-vnc - - - ## xmonad - - xorg.xmodmap - trayer - dmenu - escrotum - xorg.xbacklight - networkmanagerapplet - playerctl - lightdm - fvwm # =xpmroot= - haskellPackages.xmobar - haskellPackages.yeganesh - arandr - - - ## GUI programs - - inkscape - calibre - pkgsUnstable.cozy - rhythmbox - gpodder - firefox - emacs - tdesktop - vlc - keepassx2-http - yubioath-desktop - # tor-browser-bundle-bin - transmission_gtk - libreoffice - android-studio - androidsdk_extras - androidndk - pkgsUnstable.patchwork-classic - # gnome3.gpaste - - - ## Cryptocururencies - - electrum - zbar # for on-screen QR Code scanning - monero - - - ## nu specific packages - - sshuttle - slack - chromium - ]; + pkgsUnstable.nodejs-10_x + # nodejs-10_14_1 + + ## Personal data tools + + gitAndTools.git-open + gitAndTools.gitFull + gitAndTools.diff-so-fancy + pkgs-18-03.gitAndTools.git-annex + gitAndTools.gitRemoteGcrypt + gitAndTools.git-dit + pkgsUnstable.gitAndTools.git-secrets + git-crypt + git-lfs + gnupg + mr + nextcloud-client + owncloud-client + borgbackup + git-sizer + + + ## CLI tools + + bash + bash-completion + nix-bash-completions + youtube-dl + wget + vim + thefuck + tmux + tmuxinator + sox # =play= + gettext # =envsubst= + ag + gnugrep + ack + htop + rlwrap + awscli + jq + openvpn + xclip + bc # binary calculator used in nucli + sassc + watchman + pkgsUnstable.ipfs + gnumake + gcc + psmisc # =killall= + xorg.xkill + autojump + bfg-repo-cleaner + pwgen + gksu # =gksudo= + gnome2.GConf # https://github.com/NixOS/nixpkgs/issues/15978 + lsof + pciutils + python27Packages.pywatchman # =watchman-wait= + libressl + tree + i2p + libxml2 # =xmllint= + unzip # used by extract bash function and Clojure go-to-source + odt2txt # used to diff odf files + feh # simplistic image viewer + nixUnstable # =nix= + zip + zlib + redis + alsaUtils # for xmonad volume commands + multimarkdown # =markdown= + pup # command-line HTML parsing https://github.com/ericchiang/pup + binutils-unwrapped # =ar= command for cargo build + nssTools # =pk12util= + gitAndTools.hub # GitHub helper + insomnia + bind # =dig= + file + gitlab-runner + sshpass + zathura # for viewing Emacs PDF files + nvi + cacert + gtypist + pandoc + inotify-tools + fzf + ncdu + fd + nnn + python36Packages.python-slugify + moreutils # =vipe= + bazel + graphviz # =dot= and others + + diffoscope # + poppler_utils # used by diffoscope for comparing PDF files + pdftk # + + gnome3.libgnome-keyring + gnome3.gnome-keyring + + + ## Mail + + notmuch + isync + + + ## Spell checking + + (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) + languagetool + + + ## NixOS + + pypi2nix + bundix + + + ## Music + + texlive.combined.scheme-full + lilypond + python36Packages.python-ly + lame + frescobaldi + timidityWithEvenMoreFormats + + + ## Programming tools + + sbcl + stack + leiningen + python3 + python + yarn + elixir + openjdk + solc + bundler + rustup + cargo + clojure # =clj= + visualvm # JVM profiling tool + ant + maven + go_bootstrap + rakudo + bats + ledger + newsboat + perl + dhall + dhall-json + nodePackages.node2nix + shellcheck + # (haskell.lib.justStaticExecutables haskellPackages.github-backup) + rustracer + xsel + buku + + ## Containers and VMs + + packer + docker_compose + docker-machine + vagrant + kubernetes + ansible + qemu + pkgsUnstable.gnome3.gtk-vnc + + + ## xmonad + + xorg.xmodmap + trayer + dmenu + escrotum + xorg.xbacklight + networkmanagerapplet + playerctl + lightdm + fvwm # =xpmroot= + haskellPackages.xmobar + haskellPackages.yeganesh + arandr + + + ## GUI programs + + inkscape + calibre + pkgsUnstable.cozy + rhythmbox + gpodder + firefox + emacs + tdesktop + vlc + keepassx2-http + yubioath-desktop + # tor-browser-bundle-bin + transmission_gtk + libreoffice + android-studio + # androidsdk_extras + # androidndk + pkgsUnstable.patchwork-classic + # gnome3.gpaste + + + ## Cryptocururencies + + electrum + zbar # for on-screen QR Code scanning + monero + + + ## nu specific packages + + sshuttle + slack + chromium + ]; nixpkgs.config = { android_sdk.accept_license = true; -- cgit v1.2.3 From 799a0f70ce2eed77adc064d5c6603f7d278598dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:06:27 -0300 Subject: Disable Guix daemon in configuration.nix. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dcfa64c..897212a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -465,7 +465,7 @@ # Derived from Guix guix-daemon.service.in # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 guix-daemon = { - enable = true; + enable = false; description = "Build daemon for GNU Guix"; serviceConfig = { ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; -- cgit v1.2.3 From 5f49c90603a6b9072ed45b46fdc09af199175f48 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:06:41 -0300 Subject: Update system.stateVersion from 18.09 to 19.03. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 897212a..687e8e3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -484,5 +484,5 @@ # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.stateVersion = "18.09"; # Did you read the comment? + system.stateVersion = "19.03"; # Did you read the comment? } -- cgit v1.2.3 From 335da8b586b8426ebe3a9160f63839a71f007950 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:07:17 -0300 Subject: Add backup nixos/hardware-configuration.nix. --- nixos/hardware-configuration.nix | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 nixos/hardware-configuration.nix diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix new file mode 100644 index 0000000..2670a09 --- /dev/null +++ b/nixos/hardware-configuration.nix @@ -0,0 +1,31 @@ +# Do not modify this file! It was generated by ‘nixos-generate-config’ +# and may be overwritten by future invocations. Please make changes +# to /etc/nixos/configuration.nix instead. +{ config, lib, pkgs, ... }: + +{ + imports = + [ + ]; + + boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ]; + boot.kernelModules = [ "kvm-intel" ]; + boot.extraModulePackages = [ ]; + + fileSystems."/" = + { device = "/dev/disk/by-uuid/337ad499-b479-4fe9-ad98-0a9b2b92f4e9"; + fsType = "ext4"; + }; + + fileSystems."/boot" = + { device = "/dev/disk/by-uuid/0975-7A26"; + fsType = "vfat"; + }; + + swapDevices = + [ { device = "/dev/disk/by-uuid/c08158aa-677a-4984-83fe-c938edb7021e"; } + ]; + + nix.maxJobs = lib.mkDefault 4; + powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; +} -- cgit v1.2.3 From 3391772b2d98d9528401352e2a9301a1e618c3b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 01:09:37 -0300 Subject: Comment $GUIX_PROFILE definition. --- bash/env.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index b1eeae5..74a497f 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -68,10 +68,10 @@ isLinux && { # Guix # -export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" -isLinux && { - # source "$GUIX_PROFILE" -} +# export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" +# isLinux && { +# source "$GUIX_PROFILE" +# } export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales -- cgit v1.2.3 From 2440df6012f5a6cf5c0c5b9a33141f53c3bedb20 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 10:54:00 -0300 Subject: Remove commented grub.device configuration. --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 687e8e3..fe3db65 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -11,7 +11,6 @@ loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = true; - # grub.device = "/dev/sda"; }; initrd = { luks.devices = [ -- cgit v1.2.3 From b951afac3bb02bbcec7fb2628a3eee84ced21896 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 10:54:17 -0300 Subject: Rename hostName from "nixos" to "velhinho-nixos". --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fe3db65..ff0dfa8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -31,7 +31,7 @@ }; }; - networking.hostName = "nixos"; # Define your hostname. + networking.hostName = "velhinho-nixos"; # Define your hostname. networking.networkmanager.enable = true; # Auto-upgrade channel -- cgit v1.2.3 From d9d9eed1860d7ac30019c3086d4f53569dc72c18 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 10:55:50 -0300 Subject: Remove custom build of Nods.js. --- nixos/configuration.nix | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ff0dfa8..01e3b78 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -79,17 +79,7 @@ }); # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 - buildNodejs = pkgs.callPackage {}; - nodejs-10_14_1 = buildNodejs { - enableNpm = true; - version = "10.14.1"; - sha256 = "0d5hg8hf4c1sshh77a6hy944bzm3q3ipqggbyim61q3r2szngvrx"; - # Uses HTTPS (https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/nodejs.nix#L45), safer to trust the hash (unless it's already compromised :shrug:) - }; in with pkgs; [ - pkgsUnstable.nodejs-10_x - # nodejs-10_14_1 - ## Personal data tools gitAndTools.git-open @@ -252,6 +242,8 @@ rustracer xsel buku + nodejs-10_x + ## Containers and VMs -- cgit v1.2.3 From c0b7d6da8d048be7951a957c4e4b9dd9ac59b23b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 11:07:12 -0300 Subject: Put device specific configuration in local-configuration.nix file. --- nixos/configuration.nix | 6 ++++-- nixos/velhinho.nix | 4 ++++ 2 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 nixos/velhinho.nix diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 01e3b78..5411570 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,5 +1,7 @@ { config, pkgs, ... }: +let localConfiguration = import /etc/nixos/local-configuration.nix; +in { imports = [ # Include the results of the hardware scan. @@ -16,7 +18,7 @@ luks.devices = [ { name = "root"; - device = "/dev/sda3"; + device = localConfiguration.luksDevice; preLVM = true; } ]; @@ -31,7 +33,7 @@ }; }; - networking.hostName = "velhinho-nixos"; # Define your hostname. + networking.hostName = localConfiguration.hostName; networking.networkmanager.enable = true; # Auto-upgrade channel diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix new file mode 100644 index 0000000..d06ed5f --- /dev/null +++ b/nixos/velhinho.nix @@ -0,0 +1,4 @@ +{ + hostName = "velhinho-nixos"; + luksDevice = "/dev/sda3"; +} -- cgit v1.2.3 From 84d4a284c541448ea556e6120aa7364b89e98715 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 11:07:45 -0300 Subject: Use default versions of packages instead of unstable versions. --- nixos/configuration.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5411570..d8877bc 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -87,10 +87,10 @@ in gitAndTools.git-open gitAndTools.gitFull gitAndTools.diff-so-fancy - pkgs-18-03.gitAndTools.git-annex + gitAndTools.git-annex gitAndTools.gitRemoteGcrypt gitAndTools.git-dit - pkgsUnstable.gitAndTools.git-secrets + gitAndTools.git-secrets git-crypt git-lfs gnupg @@ -126,7 +126,7 @@ in bc # binary calculator used in nucli sassc watchman - pkgsUnstable.ipfs + ipfs gnumake gcc psmisc # =killall= @@ -256,7 +256,7 @@ in kubernetes ansible qemu - pkgsUnstable.gnome3.gtk-vnc + gnome3.gtk-vnc ## xmonad @@ -279,7 +279,7 @@ in inkscape calibre - pkgsUnstable.cozy + cozy rhythmbox gpodder firefox @@ -294,7 +294,7 @@ in android-studio # androidsdk_extras # androidndk - pkgsUnstable.patchwork-classic + patchwork-classic # gnome3.gpaste -- cgit v1.2.3 From 9801e4beef805841f641ad78280d61128e66f547 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 11:12:49 -0300 Subject: Comment definition of pkgsUnstable. --- nixos/configuration.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d8877bc..2b6576d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -69,11 +69,11 @@ in environment.systemPackages = let - pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; - pkgs-18-03 = import(pkgs.fetchzip { - url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; - sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; - }) {}; + # pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; + # pkgs-18-03 = import(pkgs.fetchzip { + # url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; + # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; + # }) {}; timidityWithEvenMoreFormats = with pkgs; timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; -- cgit v1.2.3 From 628d09c6a78263645ad0be9962c34e8bebe98dbb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 14:34:03 -0300 Subject: Add stub mentat tmuxinator template. --- tmux/projects/mentat.yml | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 tmux/projects/mentat.yml diff --git a/tmux/projects/mentat.yml b/tmux/projects/mentat.yml new file mode 100644 index 0000000..6cdcaab --- /dev/null +++ b/tmux/projects/mentat.yml @@ -0,0 +1,10 @@ +name: mentat +root: ~/dev/libre/mentat/ + +windows: + - mentat: + layout: main-vertical + panes: + - git status + - git status + - git status -- cgit v1.2.3 From 0a16a309f184212976e77f320284e8697d64977e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 14:34:17 -0300 Subject: Derive tmuxinator templates from files instead of static list. --- bash/fake-symlinks.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3a5e885..a3d1003 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -20,10 +20,8 @@ done mkdir -p ~/.tmuxinator -TMUXINATOR_TEMPLATES=(annex pires songbooks sosps) - -for template in "${TMUXINATOR_TEMPLATES[@]}"; do - cp "$DOTFILES/tmux/projects/$template.yml" "$HOME/.tmuxinator/$template.yml" +for template in "$DOTFILES"/tmux/projects/*; do + cp "$template" "$HOME/.tmuxinator/$(basename "$template")" done # DHALL_BUILD_REPOS=(website) -- cgit v1.2.3 From fb118d122d6c627eb28768bfdcc7f3e5c2b92d13 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 14:35:19 -0300 Subject: Use NixOS image in sr.ht build template. --- templates/sr-ht-build.yaml | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/templates/sr-ht-build.yaml b/templates/sr-ht-build.yaml index 8c55df6..656819e 100644 --- a/templates/sr-ht-build.yaml +++ b/templates/sr-ht-build.yaml @@ -1,6 +1,6 @@ -image: debian/stretch -packages: - - curl +image: nixos/unstable +repositories: + nixpkgs: https://nixos.org/channels/nixpkgs-unstable triggers: - condition: failure action: email @@ -10,9 +10,6 @@ sources: secrets: - 7159f943-811f-402d-bb6d-37cd764dc728 tasks: - - setup: | - curl https://nixos.org/nix/install | sh - echo '. ~/.nix-profile/etc/profile.d/nix.sh' >> ~/.buildenv - tests: | cd $REPO/ nix-build -A test -- cgit v1.2.3 From 345123418ee8928fd986df506f8f8b4af7a3c288 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 15:01:32 -0300 Subject: Start with nix-shell instead of git status on mentat tmuxinator template. --- tmux/projects/mentat.yml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/tmux/projects/mentat.yml b/tmux/projects/mentat.yml index 6cdcaab..9b89d46 100644 --- a/tmux/projects/mentat.yml +++ b/tmux/projects/mentat.yml @@ -5,6 +5,6 @@ windows: - mentat: layout: main-vertical panes: - - git status - - git status - - git status + - nix-shell + - nix-shell + - nix-shell -- cgit v1.2.3 From 59da8bdf9a84ff8ca46a89805a100a9d58b9f6a3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 15:01:54 -0300 Subject: Add untested-quodlibet-full package. --- nixos/configuration.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2b6576d..08f8a38 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -80,6 +80,12 @@ in buildInputs = oldAttrs.buildInputs ++ [ libogg libvorbis flac ]; }); + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet-full = with pkgs; quodlibet-full.overrideAttrs (oldAttrs: { + doInstallCheck = false; + doCheck = false; + }); + # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; [ ## Personal data tools @@ -277,6 +283,7 @@ in ## GUI programs + untested-quodlibet-full inkscape calibre cozy -- cgit v1.2.3 From ed0ba1b925bad782debc56b68731b0be507f5925 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 15:02:16 -0300 Subject: known_hosts.txt. --- encrypted/SSH/known_hosts.txt | Bin 4289 -> 4390 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt index ec99d68..9b4c1f1 100644 Binary files a/encrypted/SSH/known_hosts.txt and b/encrypted/SSH/known_hosts.txt differ -- cgit v1.2.3 From 2ee46e7bbe3a4de238b726de06a138f6c7a9f6ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 20:24:42 -0300 Subject: Reload after starting nix-shell in mentat tmuxinator template. --- tmux/projects/mentat.yml | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/tmux/projects/mentat.yml b/tmux/projects/mentat.yml index 9b89d46..fdd81d1 100644 --- a/tmux/projects/mentat.yml +++ b/tmux/projects/mentat.yml @@ -5,6 +5,9 @@ windows: - mentat: layout: main-vertical panes: - - nix-shell - - nix-shell - - nix-shell + - first: + - nix-shell + - reload + - second: + - nix-shell + - reload -- cgit v1.2.3 From 094b42f9650276cdec679eaff78532e51b9cf8f5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 1 May 2019 20:53:05 -0300 Subject: video-feed.sh. --- encrypted/scripts/video-feed.sh | Bin 3214 -> 3227 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh index 6ed5a57..26fe03c 100755 Binary files a/encrypted/scripts/video-feed.sh and b/encrypted/scripts/video-feed.sh differ -- cgit v1.2.3 From 2d103af16b9e907c8390f054a85ab785eea9bfbd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 20:24:11 -0300 Subject: Disable PostgreSQL service. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 08f8a38..8b50140 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -395,7 +395,7 @@ in # Taken from: # https://unix.stackexchange.com/questions/378711/how-do-i-configure-postgress-authorization-settings-in-nixos postgresql = { - enable = true; + enable = false; package = pkgs.postgresql; authentication = pkgs.lib.mkForce '' # Generated file; do not edit! -- cgit v1.2.3 From 71a8ff0cca52fedfbd1d312a1911ca1495c0704f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 20:24:59 -0300 Subject: Move passwordFile to local-configuration.nix. --- nixos/configuration.nix | 3 ++- nixos/velhinho.nix | 2 ++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8b50140..9f71ae0 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -431,7 +431,8 @@ in uid = 1000; description = "EuAndreh"; extraGroups = [ "wheel" "networkmanager" "docker" ]; - passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; + # FIXME: document how to create a password hash file + passwordFile = localConfiguration.passwordFile; }; }; # From the Guix manual: diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index d06ed5f..d2bf246 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,4 +1,6 @@ { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; + # FIXME: change password + passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; } -- cgit v1.2.3 From 8b93839c4ea8eeccfc49d09290b3db50ea94f050 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 20:35:08 -0300 Subject: Delete npm.sh. --- bash/bashrc.sh | 1 - bash/npm.sh | 19 ------------------- 2 files changed, 20 deletions(-) delete mode 100644 bash/npm.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 2e68b80..b433184 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -13,7 +13,6 @@ source $DOTFILES/bash/init.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh source $DOTFILES/bash/facepalm/rotten-apple.sh -source $DOTFILES/bash/npm.sh source $DOTFILES/bash/x.sh source $DOTFILES/encrypted/env.sh source $DOTFILES/bash/xdg.sh diff --git a/bash/npm.sh b/bash/npm.sh deleted file mode 100644 index dc1974c..0000000 --- a/bash/npm.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -# FIXME: port to NixOS -npm_i() { - (command -v "$1" &> /dev/null) || { - yellow "Installing $2" - npm i -g "$2" - } -} - -# npm_i eq edn-eq -# npm_i react-native react-native-cli -# npm_i detox detox-cli -# npm_i xml2json xml2json-command -# npm_i tern tern -# npm_i git-ssb git-ssb -# npm_i git-ssb-web git-ssb-web -# npm_i shadow-cljs shadow-cljs -# npm_i heroku heroku -- cgit v1.2.3 From ae3eb06e0c1921dbe5936185dfb6e969df783262 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 20:38:12 -0300 Subject: Put songbooks bash configuration in the correct files. --- bash/aliases.sh | 1 + bash/bashrc.sh | 4 ---- bash/env.sh | 1 + encrypted/nu/nurc.sh | Bin 4240 -> 4197 bytes 4 files changed, 2 insertions(+), 4 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 2149d86..47fbdef 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -26,6 +26,7 @@ alias perl6="rlwrap perl6" alias m="mail.sh" alias a="atom.sh" alias n="newsboat" +alias sb="songbooks" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" diff --git a/bash/bashrc.sh b/bash/bashrc.sh index b433184..fd67d30 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -23,10 +23,6 @@ source ~/dev/nu/nucli/nu.bashcompletion env > ~/.spacemacs.env -# tmp FIXME: move to mrconfig.ini -export PATH="$HOME/dev/libre/songbooks/cli:$PATH" -alias sb="songbooks" - isLinux && { source "$(dirname "$(readlink "$(command -v autojump)")")/../share/autojump/autojump.bash" } diff --git a/bash/env.sh b/bash/env.sh index 74a497f..659f411 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -35,6 +35,7 @@ export CACHE_DIR="$HOME/ownCloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" export PATH="$HOME/dev/misc/flutter/bin:$PATH" +export PATH="$HOME/dev/libre/songbooks/cli:$PATH" #export BROWSER="firefox" diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index b92a178..471b46c 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 3281dd983e1e731513410eaaef430ccca348f2e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 20:47:29 -0300 Subject: Add note on generating password hash file. --- nixos/configuration.nix | 4 +++- nixos/velhinho.nix | 1 - 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9f71ae0..a7a3006 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -181,6 +181,7 @@ in moreutils # =vipe= bazel graphviz # =dot= and others + mkpasswd diffoscope # poppler_utils # used by diffoscope for comparing PDF files @@ -431,7 +432,8 @@ in uid = 1000; description = "EuAndreh"; extraGroups = [ "wheel" "networkmanager" "docker" ]; - # FIXME: document how to create a password hash file + # Generated with: + # mkpasswd -m sha-512 > password-file.txt passwordFile = localConfiguration.passwordFile; }; }; diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index d2bf246..f2f270f 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,6 +1,5 @@ { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; - # FIXME: change password passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; } -- cgit v1.2.3 From 962d492d0d8949e0be22e38b35b26813fe2fb9f6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 20:49:11 -0300 Subject: Add fixme subtask to test derivation. --- bash/x.sh | 2 +- default.nix | 12 ++++++++++++ 2 files changed, 13 insertions(+), 1 deletion(-) diff --git a/bash/x.sh b/bash/x.sh index e0700e3..e75cff3 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -16,5 +16,5 @@ isLinux && { xdg-mime default firefox.desktop text/html xdg-mime default firefox.desktop text/xml - xdg-mime default nautilus.desktop inode/directory # FIXME + xdg-mime default nautilus.desktop inode/directory } diff --git a/default.nix b/default.nix index c27faff..9ce1e8a 100644 --- a/default.nix +++ b/default.nix @@ -14,6 +14,17 @@ in with pkgs; with pkgs.stdenv; rec { touch $out ''; }; + fixme = mkDerivation { + name = "dotfiles-fixme"; + src = ./.; + phases = "unpackPhase buildPhase"; + buildInputs = [ pkgs.ag ]; + buildPhase = '' + ag FIXME --ignore default.nix || { + touch $out + } + ''; + }; }; test = mkDerivation rec { name = "dotfiles-test"; @@ -21,6 +32,7 @@ in with pkgs; with pkgs.stdenv; rec { phases = "unpackPhase buildPhase"; buildInputs = [ subtasks.shellcheck + subtasks.fixme ]; buildPhase = '' echo "Ran tests for:" -- cgit v1.2.3 From 0ae48fd2789f269a530ca6dd9e73c7bb570d5eaf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 2 May 2019 23:02:40 -0300 Subject: Add instruction on restoring paperkey GPG key. --- README.org | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.org b/README.org index eebad02..3f7df2b 100644 --- a/README.org +++ b/README.org @@ -45,7 +45,7 @@ Paperkey generate using: #+BEGIN_SRC shell cat < paperket.txt +gpg --export-secret-keys EuAndreh | paperkey > paperkey-content.txt # QR codes of paper key gpg --export-secret-keys EuAndreh | paperkey | qrencode -o out.png -S -v 16 @@ -53,3 +53,7 @@ montage *.png -tile 1x2 -geometry +0+0 concatenate-out.png rm out* EOF #+END_SRC +To recover a paperkey: +#+BEGIN_SRC shell +paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import +#+END_SRC -- cgit v1.2.3 From 33c23b7d6710a6232468309e33a8121960e4cfda Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 May 2019 19:54:40 -0300 Subject: Clean up $SRHT_REPOS list. --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a3d1003..c06319b 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -5,7 +5,7 @@ if [[ -n "$GITHUB_TOKEN" ]]; then fi -SRHT_REPOS=(website mentat cement pouchdb-materialized-view pires superlogin-client) +SRHT_REPOS=(website mentat cement) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From 2acd7793acf061d59a497ef6fe41acbb81eb879d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 May 2019 19:54:57 -0300 Subject: Add $RST_SRC_PATH environment variable. --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index 659f411..fd15a0f 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -91,3 +91,4 @@ export PATH="$GOPATH/bin:$PATH" # Rust # export PATH="$HOME/.cargo/bin:$PATH" +export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src" -- cgit v1.2.3 From 3e20bf0e8fa9078be7de571de193b3501726b34e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 May 2019 19:55:29 -0300 Subject: mrconfig.ini. --- git/mrconfig.ini | Bin 11694 -> 10931 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index ae02cb9..141417f 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 4b63521b579539efe00c7f177923a55c353517e8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 May 2019 19:55:37 -0300 Subject: Change default email address for sr-ht-build.yaml. --- templates/sr-ht-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/sr-ht-build.yaml b/templates/sr-ht-build.yaml index 656819e..91e6ff2 100644 --- a/templates/sr-ht-build.yaml +++ b/templates/sr-ht-build.yaml @@ -4,7 +4,7 @@ repositories: triggers: - condition: failure action: email - to: EuAndreh + to: EuAndreh sources: - https://git.sr.ht/~euandreh/$REPO secrets: -- cgit v1.2.3 From 50149aa073e3977205d8952799107992e7990910 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 May 2019 19:56:40 -0300 Subject: Remove mentat from $SRHT_REPOS. --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index c06319b..55ec8d4 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -5,7 +5,7 @@ if [[ -n "$GITHUB_TOKEN" ]]; then fi -SRHT_REPOS=(website mentat cement) +SRHT_REPOS=(website cement) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From 0fcb1af57ecc3005d4215e07d1e0f3f1a84d8704 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 9 May 2019 19:34:17 -0300 Subject: newsboat/urls. --- newsboat/urls | Bin 1195 -> 1234 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 50f2256..a35e008 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From b21388664d21efe2551067caf9527442c2529f93 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 May 2019 22:42:07 -0300 Subject: Revert "Remove mentat from $SRHT_REPOS." This reverts commit 50149aa073e3977205d8952799107992e7990910. --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 55ec8d4..c06319b 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -5,7 +5,7 @@ if [[ -n "$GITHUB_TOKEN" ]]; then fi -SRHT_REPOS=(website cement) +SRHT_REPOS=(website mentat cement) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From 5e9efb6478e7ef38ee2fcf2921634db0c27f5d05 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 May 2019 22:51:41 -0300 Subject: Remove Guix compatibility code. Remove: - systemd definition; - guixbuilder users; - guixbuild groud; - guix binary symlink; - mr repository configurations; - gc.sh instructions; - Emacs configuration; - environment variables. --- bash/env.sh | 15 ------------ git/mrconfig.ini | Bin 10931 -> 9635 bytes nixos/configuration.nix | 64 ++++++------------------------------------------ scripts/gc.sh | 5 ---- scripts/guix | 1 - spacemacs.el | 4 --- 6 files changed, 8 insertions(+), 81 deletions(-) delete mode 120000 scripts/guix diff --git a/bash/env.sh b/bash/env.sh index fd15a0f..e18f2e7 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -65,21 +65,6 @@ isLinux && { } -# -# Guix -# - -# export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" -# isLinux && { -# source "$GUIX_PROFILE" -# } -export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" -export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" -export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales -# https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 -export NIX_BUILD_CORES=0 - - # # Go # diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 141417f..744b1bb 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a7a3006..036a3da 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -424,62 +424,14 @@ in users = { mutableUsers = false; - extraUsers = - let - andrehUser = { - andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - # Generated with: - # mkpasswd -m sha-512 > password-file.txt - passwordFile = localConfiguration.passwordFile; - }; - }; - # From the Guix manual: - # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup - buildUser = (i: - { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = ["guixbuild"]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.nologin; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system - }; - } - ); - in - # merge all users - pkgs.lib.fold (str: acc: acc // buildUser str) - andrehUser - # for i in `seq -w 1 10` - (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n+1) 10)); - - extraGroups.guixbuild = { - name = "guixbuild"; - }; - }; - - systemd = { - services = { - # Derived from Guix guix-daemon.service.in - # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 - guix-daemon = { - enable = false; - description = "Build daemon for GNU Guix"; - serviceConfig = { - ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; - Environment="GUIX_LOCPATH=/root/.guix-profile/lib/locale"; - RemainAfterExit="yes"; - StandardOutput="syslog"; - StandardError="syslog"; - TaskMax= "8192"; - }; - wantedBy = [ "multi-user.target" ]; - }; + extraUsers.andreh = { + isNormalUser = true; + uid = 1000; + description = "EuAndreh"; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + # Generated with: + # mkpasswd -m sha-512 > password-file.txt + passwordFile = localConfiguration.passwordFile; }; }; diff --git a/scripts/gc.sh b/scripts/gc.sh index c93c948..e094476 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -21,11 +21,6 @@ nix-store --gc nix-collect-garbage -d -yellow "Cleaning up Guix store" - -guix gc - - yellow "Cleaning up up the Trash and /tmp folders" sudo rm -rf ~/.local/share/Trash/files/* diff --git a/scripts/guix b/scripts/guix deleted file mode 120000 index 96901ae..0000000 --- a/scripts/guix +++ /dev/null @@ -1 +0,0 @@ -/var/guix/profiles/per-user/root/guix-profile/bin/guix \ No newline at end of file diff --git a/spacemacs.el b/spacemacs.el index a115c8a..bc21ca5 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -760,10 +760,6 @@ This is the place where most of your configurations should be done. Unless it is filename commit start))) - - ;; (require 'geiser-guile) - ;; (with-eval-after-load 'geiser-guile - ;; (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) t) (defun dotspacemacs/emacs-custom-settings () -- cgit v1.2.3 From 480f3d0dd591d75a1f9af8980adbaf9f594c634f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 May 2019 22:56:46 -0300 Subject: Remove buku configuration. --- bash/symlinks.sh | 3 --- nixos/configuration.nix | 1 - scripts/atom.js | 22 ---------------------- scripts/atom.sh | 30 ------------------------------ scripts/buku-add.sh | 3 --- scripts/buku-archive.sh | 31 ------------------------------- scripts/buku-delete.sh | 30 ------------------------------ xmonad/xmonad.hs | 12 ------------ 8 files changed, 132 deletions(-) delete mode 100644 scripts/atom.js delete mode 100755 scripts/atom.sh delete mode 100755 scripts/buku-add.sh delete mode 100755 scripts/buku-archive.sh delete mode 100755 scripts/buku-delete.sh diff --git a/bash/symlinks.sh b/bash/symlinks.sh index b96f952..2250a86 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -78,6 +78,3 @@ ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log ## GNUS ln -fs "$DOTFILES/encrypted/IMAP/authinfo.gpg" ~/.authinfo.gpg - -## Buku -ln -fs /tmp/buku-xmonad."$(date +%Y-%m-%d)".log /tmp/buku-xmonad.log diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 036a3da..774c1bb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -250,7 +250,6 @@ in # (haskell.lib.justStaticExecutables haskellPackages.github-backup) rustracer xsel - buku nodejs-10_x diff --git a/scripts/atom.js b/scripts/atom.js deleted file mode 100644 index 878df05..0000000 --- a/scripts/atom.js +++ /dev/null @@ -1,22 +0,0 @@ -const RSS = require('rss'); - -const feedName = process.argv[2]; -const feedSrc = process.argv[3]; - -const feed = new RSS({ - title: `Buku feed tag for '${feedName}'.`, - description: `Buku feed tag for ${feedName}`, -}); - -const items = require(feedSrc); -items.forEach(({ title, description, uri }) => { - feed.item({ - title, - description, - url: uri - }); -}); - -const xml = feed.xml({indent: true}); - -console.log(xml); diff --git a/scripts/atom.sh b/scripts/atom.sh deleted file mode 100755 index 6ca4110..0000000 --- a/scripts/atom.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -if [[ ! -d "node_modules" ]]; then - npm i rss -fi - -RSS_DIR="$HOME/.newsboat" -LINKS_OUT="$RSS_DIR/gen/buku.urls" - -mkdir -p "$RSS_DIR/gen" - -# Empty the text file -true > "$LINKS_OUT" - -feed() { - local tag="$1" - local tmp="/tmp/$tag.json" - buku -t "$tag" --json > "$tmp" - if [[ -s "$tmp" ]]; then - node atom.js "$tag" "$tmp" > "$RSS_DIR/gen/$1.xml" - echo "file://$RSS_DIR/gen/$1.xml" >> "$LINKS_OUT" - fi -} - -feed ril -feed simple-archive - -cat "$DOTFILES/newsboat/urls" <(echo) "$LINKS_OUT" > "$RSS_DIR/urls" diff --git a/scripts/buku-add.sh b/scripts/buku-add.sh deleted file mode 100755 index 005adbd..0000000 --- a/scripts/buku-add.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -xclip -o | xargs -I{} buku -a "{}" ril diff --git a/scripts/buku-archive.sh b/scripts/buku-archive.sh deleted file mode 100755 index 2a2a702..0000000 --- a/scripts/buku-archive.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash - -SEL="$(xclip -o | tr -d '\n')" -if [[ -z "${SEL// }" ]]; then - echo "Empty selection." - exit 1 -fi -BOOKMARK_ID= -IFS=" -" -BOOKMARKS="$(buku "$SEL" -f 1 --tacit)" - -for bookmark in $BOOKMARKS; do - echo "$bookmark" - ID="$(echo "$bookmark" | cut -d$'\t' -f 1)" - URL="$(echo "$bookmark" | cut -d$'\t' -f 2)" - if [[ "$URL" = "$SEL" ]]; then - BOOKMARK_ID="$ID" - break - fi -done - - -if [[ -n "$BOOKMARK_ID" ]]; then - echo "Archiving $BOOKMARK_ID (URL: $SEL)." - buku -u "$BOOKMARK_ID" --tag - ril - buku -u "$BOOKMARK_ID" --tag + simple-archive -else - echo "Bookmark for '$SEL' not found." - exit 1 -fi diff --git a/scripts/buku-delete.sh b/scripts/buku-delete.sh deleted file mode 100755 index 01de451..0000000 --- a/scripts/buku-delete.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/usr/bin/env bash - -SEL="$(xclip -o | tr -d '\n')" -if [[ -z "${SEL// }" ]]; then - echo "Empty selection." - exit 1 -fi -BOOKMARK_ID= -IFS=" -" -BOOKMARKS="$(buku "$SEL" -f 1 --tacit)" - -for bookmark in $BOOKMARKS; do - echo "$bookmark" - ID="$(echo "$bookmark" | cut -d$'\t' -f 1)" - URL="$(echo "$bookmark" | cut -d$'\t' -f 2)" - if [[ "$URL" = "$SEL" ]]; then - BOOKMARK_ID="$ID" - break - fi -done - - -if [[ -n "$BOOKMARK_ID" ]]; then - echo "Deleting $BOOKMARK_ID (URL: $SEL)." - buku -d "$BOOKMARK_ID" --tacit -else - echo "Bookmark for '$SEL' not found." - exit 1 -fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 97786c7..74d4d63 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -88,18 +88,6 @@ myKeyBindings = , ((mod4Mask, xK_x), spawn "gksudo -S systemctl restart network-manager") - -- save selection (link) in buku - , ((mod4Mask, xK_c), - spawn "$HOME/dev/libre/dotfiles/scripts/buku-add.sh >> /tmp/buku-xmonad.log") - - -- delete selection (link) from buku - , ((mod4Mask, xK_d), - spawn "$HOME/dev/libre/dotfiles/scripts/buku-delete.sh >> /tmp/buku-xmonad.log") - - -- archive selection (link) in buku - , ((mod4Mask, xK_a), - spawn "$HOME/dev/libre/dotfiles/scripts/buku-archive.sh >> /tmp/buku-xmonad.log") - -- toggle appearence of xmobar -- https://stackoverflow.com/a/27646652 , ((mod4Mask .|. shiftMask, xK_f), sendMessage ToggleStruts) -- cgit v1.2.3 From a81f86270b0d8d013b5c3081b99e34aa0034503d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 May 2019 22:59:21 -0300 Subject: Remove unused executables. --- scripts/cp-todos.sh | 4 ---- scripts/cq | 1 - scripts/jwt-claims.sh | 3 --- scripts/md5 | 3 --- 4 files changed, 11 deletions(-) delete mode 100755 scripts/cp-todos.sh delete mode 120000 scripts/cq delete mode 100755 scripts/jwt-claims.sh delete mode 100755 scripts/md5 diff --git a/scripts/cp-todos.sh b/scripts/cp-todos.sh deleted file mode 100755 index e839ae8..0000000 --- a/scripts/cp-todos.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash - -cp "$HOME/annex/txt/TODOs.org" "$HOME/ownCloud/Notes/org.txt" -cp "$HOME/annex/txt/TODOs.org" "$HOME/ownCloud/cache/TODOs.org" diff --git a/scripts/cq b/scripts/cq deleted file mode 120000 index 476614d..0000000 --- a/scripts/cq +++ /dev/null @@ -1 +0,0 @@ -/home/andreh/dev/cq/cq \ No newline at end of file diff --git a/scripts/jwt-claims.sh b/scripts/jwt-claims.sh deleted file mode 100755 index b02575e..0000000 --- a/scripts/jwt-claims.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -awk '{print $2}' | awk -F. '{print $2}' | base64 --decode | jq diff --git a/scripts/md5 b/scripts/md5 deleted file mode 100755 index acd6035..0000000 --- a/scripts/md5 +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -md5sum "$@" -- cgit v1.2.3 From fff54cb3eb4398a56990ca3d29d658b267718556 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 May 2019 23:01:33 -0300 Subject: Define and export variable separately. Shellcheck 2155. --- bash/env.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index e18f2e7..7fe5f65 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -76,4 +76,5 @@ export PATH="$GOPATH/bin:$PATH" # Rust # export PATH="$HOME/.cargo/bin:$PATH" -export RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src" +RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src" +export RUST_SRC_PATH -- cgit v1.2.3 From fc7d47a722f88112bea2e4038bc8bd0dae92bdbb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 May 2019 23:58:32 -0300 Subject: Add swift package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 774c1bb..ccd695f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -251,6 +251,7 @@ in rustracer xsel nodejs-10_x + swift ## Containers and VMs -- cgit v1.2.3 From f12216438e5519709a6dcabb35fe0106f075c048 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 18 May 2019 20:46:30 -0300 Subject: Remove unused cronjob. --- nixos/configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ccd695f..d865be4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -343,8 +343,6 @@ in # Refresh local RSS files every hour "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/atom.sh" - # Make read-only copy of TODOs.org every hour - # "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cp-todos.sh -s" ]; xserver = { -- cgit v1.2.3 From 4ae3a10f2b28bd87d7a9394805b4a6e985df41ad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 18 May 2019 20:46:40 -0300 Subject: Add cljr flag for cider --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index bc21ca5..6ee52ce 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -712,6 +712,7 @@ This is the place where most of your configurations should be done. Unless it is ;; Clojure cljr-warn-on-eval nil + cljr-eagerly-build-asts-on-startup nil cljr-assume-language-context "clj" cider-repl-display-help-banner nil -- cgit v1.2.3 From f6b508cc67c79b225d88f66c0fbfce787c80ace2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 18 May 2019 23:10:32 -0300 Subject: Add ArchiveBox setup - add repo to mrconfig; - create daily log file; - add `archivebox` executable to $PATH; - create cronjob to run every 12 hours; - backup ~/archive/ folder. Side note: medium.com DNS resolves to an IPv6 address but rejects connections from clients that try to reach medium using it. I had to force an IPv4 connection instead. --- bash/env.sh | 1 + bash/symlinks.sh | 1 + .../manifest-timestamp | Bin 48 -> 48 bytes .../nonce | Bin 38 -> 38 bytes git/mrconfig.ini | Bin 9635 -> 9729 bytes nixos/configuration.nix | 7 +++--- scripts/archive.sh | 13 ++++++++++ scripts/backup.sh | 27 +++++++++++++++------ scripts/wget-4.sh | 2 ++ 9 files changed, 39 insertions(+), 12 deletions(-) create mode 100755 scripts/archive.sh create mode 100755 scripts/wget-4.sh diff --git a/bash/env.sh b/bash/env.sh index 7fe5f65..da62d73 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -36,6 +36,7 @@ export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" export PATH="$HOME/dev/misc/flutter/bin:$PATH" export PATH="$HOME/dev/libre/songbooks/cli:$PATH" +export PATH="$HOME/dev/misc/ArchiveBox/bin:$PATH" #export BROWSER="firefox" diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 2250a86..fbc4a4d 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -75,6 +75,7 @@ ln -fs "$DOTFILES/mail/mbsyncrc.ini" ~/.mbsyncrc ln -fs "$DOTFILES/mail/notmuch.ini" ~/.notmuch-config ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log +ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log ## GNUS ln -fs "$DOTFILES/encrypted/IMAP/authinfo.gpg" ~/.authinfo.gpg diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp index 5b1f054..1bcd04c 100644 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp and b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp differ diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce index 00796f3..2e27c8b 100644 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce and b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce differ diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 744b1bb..88c6884 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d865be4..c050ef5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -338,11 +338,10 @@ in # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = [ # Sync emails with mbsync every hour - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/mail.sh -s" - - # Refresh local RSS files every hour - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/atom.sh" + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/mail.sh -s" + # Archive Pocket data every 12 hours + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh" ]; xserver = { diff --git a/scripts/archive.sh b/scripts/archive.sh new file mode 100755 index 0000000..416b833 --- /dev/null +++ b/scripts/archive.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +export POCKET_ARCHIVE='https://getpocket.com/users/euandreh/feed/read' +export OUTPUT_DIR="$HOME/archive/archivebox/" +export WGET_BINARY="$PWD/wget-4.sh" +export FETCH_MEDIA=False +if [ "${1-}" = "-s" ]; then + curl -s "$POCKET_ARCHIVE" | archivebox >> /tmp/archivebox.log +else + curl -s "$POCKET_ARCHIVE" | archivebox +fi diff --git a/scripts/backup.sh b/scripts/backup.sh index f31a503..b13108f 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -6,16 +6,21 @@ # if [ ! -d ~/UTCLOUD/ ]; then - red "$HOME/UTCLOUD not attached. Backup not started." - exit 1 + red "$HOME/UTCLOUD not attached. Backup not started." + exit 1 +fi + +if [ ! -d ~/archive/ ]; then + yellow "$HOME/archive/ folder doesn't exist. Downloading latest version from ~/UTCLOUD/archive/ into ~/archive/." + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/archive/ ~/archive fi if [ ! -d ~/borgbackup/ ]; then - yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/" - # The initial borg repo was created with: - # $ borg init --append-only --encryption=keyfile ~/borgbackup - # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/borg/borgbackup/ ~/borgbackup + yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/." + # The initial borg repo was created with: + # $ borg init --append-only --encryption=keyfile ~/borgbackup + # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/borg/borgbackup/ ~/borgbackup fi BACKUP_TAG="${1-default}" @@ -28,10 +33,16 @@ borg create \ --compression lzma,6 \ ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ ~/ownCloud/ \ - ~/mbsync/ + ~/Nextcloud/ \ + ~/mbsync/ \ + ~/archive/ # add folders to be backed up here green "Done" +yellow "Syncing ~/archive to ~/UTCLOUD/archive" +rsync --verbose --progress --stats --update --recursive ~/archive/ ~/UTCLOUD/archive/ +green "Done" + yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/borg/borgbackup/ green "Done" diff --git a/scripts/wget-4.sh b/scripts/wget-4.sh new file mode 100755 index 0000000..1066441 --- /dev/null +++ b/scripts/wget-4.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +wget -4 "$@" -- cgit v1.2.3 From 808973ad5a52af84ba7ce0096e1e80e276d2f423 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 19 May 2019 11:41:15 -0300 Subject: mrconfig.ini --- git/mrconfig.ini | Bin 9729 -> 9869 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 88c6884..51cdb5a 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 5c2c39e84adbaaad149e7a43cb6494f105bb8023 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 19 May 2019 19:05:32 -0300 Subject: README: remove shreded private key --- README.org | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) diff --git a/README.org b/README.org index 3f7df2b..3c39614 100644 --- a/README.org +++ b/README.org @@ -9,26 +9,29 @@ gpg --export-secret-keys -a EuAndreh > private gpg --cipher-algo AES256 -c private shred private + rm private mv public.gpg ~/UTCLOUD/public.gpg mv private.gpg ~/UTCLOUD/private.gpg cp $DOTFILES/encrypted/password-hash.txt ~/UTCLOUD/password-hash.txt #+END_SRC *** 4. Import GPG keys in new OS #+BEGIN_SRC shell -gpg -o private -d private.gpg -gpg --import public.gpg -gpg --import private -gpg --edit-key EuAndreh + gpg -o private -d private.gpg + gpg --import public.gpg + gpg --import private + gpg --edit-key EuAndreh -# Inside GPG prompt -trust -5 -quit + # Inside GPG prompt + trust + 5 + quit -# end of GPG prompt -shred private -shred private.gpg -rm public.gpg + # end of GPG prompt + shred private + shred private.gpg + rm private + rm private.gpg + rm public.gpg #+END_SRC *** 5. Clone annex repo from HD and setup remotes #+BEGIN_SRC shell -- cgit v1.2.3 From 1a80294a2c56a6b7822d913ad4c58415e7add2df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 19 May 2019 19:05:45 -0300 Subject: Add nixops package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c050ef5..f40e05e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -264,6 +264,7 @@ in ansible qemu gnome3.gtk-vnc + nixops ## xmonad -- cgit v1.2.3 From 492d1d1d9d8978d0ec7ea8a25e314e51a42f7c1b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 19 May 2019 23:41:07 -0300 Subject: Redirect ArchiveBox output to logfile --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f40e05e..2648aa6 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -342,7 +342,7 @@ in "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/mail.sh -s" # Archive Pocket data every 12 hours - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh" + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s" ]; xserver = { -- cgit v1.2.3 From 7cd494daeda2e3132b8a5d9221bc5387dc882faa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 20:38:23 -0300 Subject: urls --- newsboat/urls | Bin 1234 -> 1345 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index a35e008..49f5114 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 74458847ae2f8b9c6b914ab464f54694dde48320 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:33:50 -0300 Subject: Remove encrypted/nu/vpn/* --- encrypted/nu/vpn/auth.txt | Bin 62 -> 0 bytes encrypted/nu/vpn/config.zip | Bin 6295 -> 0 bytes encrypted/nu/vpn/patched.txt | Bin 11519 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/nu/vpn/auth.txt delete mode 100644 encrypted/nu/vpn/config.zip delete mode 100644 encrypted/nu/vpn/patched.txt diff --git a/encrypted/nu/vpn/auth.txt b/encrypted/nu/vpn/auth.txt deleted file mode 100644 index 3284272..0000000 Binary files a/encrypted/nu/vpn/auth.txt and /dev/null differ diff --git a/encrypted/nu/vpn/config.zip b/encrypted/nu/vpn/config.zip deleted file mode 100644 index 77a1638..0000000 Binary files a/encrypted/nu/vpn/config.zip and /dev/null differ diff --git a/encrypted/nu/vpn/patched.txt b/encrypted/nu/vpn/patched.txt deleted file mode 100644 index 19a8d95..0000000 Binary files a/encrypted/nu/vpn/patched.txt and /dev/null differ -- cgit v1.2.3 From dd431cb7062a390f31d7247f1ce669666fc341e2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:34:02 -0300 Subject: Remove encrypted/nu/scripts/ --- bash/env.sh | 1 - encrypted/nu/scripts/nurl | Bin 44 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 encrypted/nu/scripts/nurl diff --git a/bash/env.sh b/bash/env.sh index da62d73..7b51529 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -29,7 +29,6 @@ export PATH=~/.local/bin:$PATH export EDITOR=vi export PATH="$DOTFILES/scripts/:$PATH" -export PATH="$DOTFILES/encrypted/scripts/:$PATH" export INPUTRC=~/.inputrc export CACHE_DIR="$HOME/ownCloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" diff --git a/encrypted/nu/scripts/nurl b/encrypted/nu/scripts/nurl deleted file mode 100644 index 1b7d03f..0000000 Binary files a/encrypted/nu/scripts/nurl and /dev/null differ -- cgit v1.2.3 From 52fe9c85d26f801278e9e65e46e7cd3bc1e8abf6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:35:32 -0300 Subject: Remove encrypted/nugitconfig.ini --- encrypted/nugitconfig.ini | Bin 85 -> 0 bytes git/gitconfig.ini | Bin 1861 -> 1805 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/nugitconfig.ini diff --git a/encrypted/nugitconfig.ini b/encrypted/nugitconfig.ini deleted file mode 100644 index 53b0b86..0000000 Binary files a/encrypted/nugitconfig.ini and /dev/null differ diff --git a/git/gitconfig.ini b/git/gitconfig.ini index f1f4d78..630c762 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From f2d111266a8df9cae2a7619ffbf44c736d791c66 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:36:44 -0300 Subject: Remove encrypted/SMTP/authinfo.txt --- encrypted/SMTP/authinfo.txt | Bin 114 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/SMTP/authinfo.txt diff --git a/encrypted/SMTP/authinfo.txt b/encrypted/SMTP/authinfo.txt deleted file mode 100644 index 6b5a37a..0000000 Binary files a/encrypted/SMTP/authinfo.txt and /dev/null differ -- cgit v1.2.3 From 5491cee1253cc3ecef45d9cb92fcf3e3a134cc7e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:37:24 -0300 Subject: Remove encrypted/IMAP/Pires.txt --- encrypted/IMAP/Pires.txt | Bin 32 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/IMAP/Pires.txt diff --git a/encrypted/IMAP/Pires.txt b/encrypted/IMAP/Pires.txt deleted file mode 100644 index d2cc9d6..0000000 Binary files a/encrypted/IMAP/Pires.txt and /dev/null differ -- cgit v1.2.3 From c1443e510dff36a761faf42f23a2596953036430 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:38:24 -0300 Subject: Remove git/default.nix --- git/default.nix | 27 --------------------------- 1 file changed, 27 deletions(-) delete mode 100644 git/default.nix diff --git a/git/default.nix b/git/default.nix deleted file mode 100644 index e406e9f..0000000 --- a/git/default.nix +++ /dev/null @@ -1,27 +0,0 @@ -let - pkgsOriginal = import {}; - pkgsSrc = pkgsOriginal.fetchzip { - url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; - sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; - }; - pkgs = import (pkgsSrc) {}; - -in { - proseDocs = with pkgs; stdenv.mkDerivation rec { - name = "proseDocs"; - src = ./.; - buildInputs = [ emacs ]; - builder = builtins.toFile "builder.sh" '' - source $stdenv/setup - mkdir $out - cp $src/DOCUMENTATION.org $out/DOCUMENTATION.org - ls -lahp $out - - pushd $out - emacs DOCUMENTATION.org --eval '(setq org-export-allow-bind-keywords t org-html-postamble t)' --batch -f org-html-export-to-html --kill - rm DOCUMENTATION.org - mv DOCUMENTATION.html index.html - popd - ''; - }; -} -- cgit v1.2.3 From 4808b4f2c5c3077cbf23e0f4792c7afe08ce6e2d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:41:16 -0300 Subject: Remove emacs/{gnus.el,re-jump.el,re-jump.elc} --- emacs/gnus.el | Bin 6085 -> 0 bytes emacs/re-jump.el | 56 ------------------------------------------------------ emacs/re-jump.elc | Bin 1225 -> 0 bytes 3 files changed, 56 deletions(-) delete mode 100644 emacs/gnus.el delete mode 100644 emacs/re-jump.el delete mode 100644 emacs/re-jump.elc diff --git a/emacs/gnus.el b/emacs/gnus.el deleted file mode 100644 index 9a6efee..0000000 Binary files a/emacs/gnus.el and /dev/null differ diff --git a/emacs/re-jump.el b/emacs/re-jump.el deleted file mode 100644 index 86f0d00..0000000 --- a/emacs/re-jump.el +++ /dev/null @@ -1,56 +0,0 @@ -;; Taken from: -;; https://github.com/oliyh/re-jump.el - -;;; re-jump.el --- emacs navigation for re-frame projects - -;; Copyright © 2017 Oliver Hine -;; -;; Author: Oliver Hine - -;; This program is free software: you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation, either version 3 of the License, or -;; (at your option) any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program. If not, see . - -;; This file is not part of GNU Emacs. - -;;; Commentary: - -;; Jump to registrations of re-frame subscriptions, event handlers and fx - -;;; Code: -(require 'cider-util) -(require 'cider-resolve) -(require 'cider-client) -(require 'cider-common) -(require 'clojure-mode) - -(defun re-frame-jump-to-reg () - (interactive) - (let* ((kw (cider-symbol-at-point 'look-back)) - (ns-qualifier (and - (string-match "^:+\\(.+\\)/.+$" kw) - (match-string 1 kw))) - (kw-ns (if ns-qualifier - (cider-resolve-alias (cider-current-ns) ns-qualifier) - (cider-current-ns))) - (kw-to-find (concat "::" (replace-regexp-in-string "^:+\\(.+/\\)?" "" kw)))) - - (when (and ns-qualifier (string= kw-ns (cider-current-ns))) - (error "Could not resolve alias \"%s\" in %s" ns-qualifier (cider-current-ns))) - - (progn (cider-find-ns "-" kw-ns) - (search-forward-regexp (concat "reg-[a-zA-Z-]*[ \\\n]+" kw-to-find) nil 'noerror)))) - -(global-set-key (kbd "M->") 're-frame-jump-to-reg) - -(provide 're-jump) -;;; re-jump.el ends here diff --git a/emacs/re-jump.elc b/emacs/re-jump.elc deleted file mode 100644 index 6b3d49f..0000000 Binary files a/emacs/re-jump.elc and /dev/null differ -- cgit v1.2.3 From 20f76e536fc1c43ccea7dbe5e47a2c8118861d46 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:42:19 -0300 Subject: Move emacs/not-much.el -> mail/not-much.el --- emacs/not-much.el | Bin 1125 -> 0 bytes mail/not-much.el | Bin 0 -> 1125 bytes spacemacs.el | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 emacs/not-much.el create mode 100644 mail/not-much.el diff --git a/emacs/not-much.el b/emacs/not-much.el deleted file mode 100644 index fdb18ad..0000000 Binary files a/emacs/not-much.el and /dev/null differ diff --git a/mail/not-much.el b/mail/not-much.el new file mode 100644 index 0000000..fdb18ad Binary files /dev/null and b/mail/not-much.el differ diff --git a/spacemacs.el b/spacemacs.el index 6ee52ce..7960ea5 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -582,7 +582,7 @@ dump." ("M-s-a" . (lambda () (interactive) (insert "\\"))) ("M-s-s" . (lambda () (interactive) (insert "|"))))) -(defvar custom-el-files '("~/dev/libre/dotfiles/emacs/not-much.el" +(defvar custom-el-files '("~/dev/libre/dotfiles/mail/not-much.el" "~/.quicklisp/slime-helper.el")) (defmacro measure-time (&rest body) -- cgit v1.2.3 From 7813fc74d83e6da0838ffe0f44187443dd343928 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:44:08 -0300 Subject: Remove ./configuration.nix --- configuration.nix | 44 -------------------------------------------- 1 file changed, 44 deletions(-) delete mode 100644 configuration.nix diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index 0756d89..0000000 --- a/configuration.nix +++ /dev/null @@ -1,44 +0,0 @@ -{ config, pkgs, ... }: - -{ - imports = - [ # Include the results of the hardware scan. - ./hardware-configuration.nix - ]; - - # Use the systemd-boot EFI boot loader. - boot.loader.systemd-boot.enable = true; - boot.loader.efi.canTouchEfiVariables = true; - boot.initrd.luks.devices = [ - { - name = "root"; - device = "/dev/sda3"; - preLVM = true; - } - ]; - - environment.systemPackages = with pkgs; [ - wget vim - ]; - - services = { - xserver = { - enable = true; - windowManager.default = "xmonad"; - windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - }; - desktopManager = { - default = "none"; - xterm.enable = false; - gnome3.enable = true; - }; - displayManager = { - lightdm.enable = true; - }; - }; - }; - - system.stateVersion = "19.03"; # Did you read the comment? -} -- cgit v1.2.3 From 8e3421b0ad3280e906fe8a6a75171a3276788295 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:52:07 -0300 Subject: Refactor default.nix to use a baseTask --- default.nix | 39 ++++++++++++++++++++++----------------- 1 file changed, 22 insertions(+), 17 deletions(-) diff --git a/default.nix b/default.nix index 9ce1e8a..b6e85bd 100644 --- a/default.nix +++ b/default.nix @@ -1,35 +1,40 @@ let pkgs = import {}; + rootSrc = pkgs.nix-gitignore.gitignoreSource [] ./.; + baseTask = pkgs.stdenv.mkDerivation { + name = "dotfiles-task"; + src = rootSrc; + buildInputs = []; + phases = "unpackPhase buildPhase"; + buildPhase = '' + echo "ERROR: base task buildPhase not overriden." + exit 1 + ''; + }; in with pkgs; with pkgs.stdenv; rec { subtasks = rec { - shellcheck = mkDerivation rec { - name = "dotfiles-shellcheck"; - src = ./.; - phases = "unpackPhase buildPhase"; - buildInputs = [ pkgs.shellcheck ]; + shellcheck = baseTask.overrideAttrs(baseAttrs: { + name = "${baseAttrs.name}-shellcheck"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; buildPhase = '' export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" ignored='(encrypted|os-installation.sh|notmuch-post.sh)' find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck touch $out ''; - }; - fixme = mkDerivation { - name = "dotfiles-fixme"; - src = ./.; - phases = "unpackPhase buildPhase"; - buildInputs = [ pkgs.ag ]; + }); + fixme = baseTask.overrideAttrs(baseAttrs: { + name = "${baseAttrs.name}-fixme"; + buildInputs = baseAttrs.buildInputs ++ [ ag ]; buildPhase = '' ag FIXME --ignore default.nix || { touch $out } ''; - }; + }); }; - test = mkDerivation rec { - name = "dotfiles-test"; - src = ./.; - phases = "unpackPhase buildPhase"; + test = baseTask.overrideAttrs(baseAttrs: rec { + name = "${baseAttrs.name}-test"; buildInputs = [ subtasks.shellcheck subtasks.fixme @@ -42,5 +47,5 @@ in with pkgs; with pkgs.stdenv; rec { echo "All tests passed!" touch $out ''; - }; + }); } -- cgit v1.2.3 From 56291d36e8ecc3fe15bb1eb268f024b27a38bf10 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:57:05 -0300 Subject: Change failure email config --- .build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index ee25164..b5dc46d 100644 --- a/.build.yml +++ b/.build.yml @@ -4,7 +4,7 @@ repositories: triggers: - condition: failure action: email - to: EuAndreh + to: EuAndreh sources: - https://git.sr.ht/~euandreh/dotfiles tasks: -- cgit v1.2.3 From d8d9643f8d15ae013f294d7564c6066500b795eb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:58:00 -0300 Subject: Remove mentat from $SRHT_REPOS --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index c06319b..55ec8d4 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -5,7 +5,7 @@ if [[ -n "$GITHUB_TOKEN" ]]; then fi -SRHT_REPOS=(website mentat cement) +SRHT_REPOS=(website cement) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From b1be92b1c37da6e5845e84dab24ad196200004dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 May 2019 21:59:27 -0300 Subject: nurc.sh --- encrypted/nu/nurc.sh | Bin 4197 -> 4093 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 471b46c..73cfd05 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From e6efcd8e1cb0139390b28c137cc282ed4ccc1188 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 May 2019 07:18:23 -0300 Subject: notmuch config --- mail/not-much.el | Bin 1125 -> 1652 bytes mail/notmuch-post.sh | Bin 484 -> 673 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/not-much.el b/mail/not-much.el index fdb18ad..f6cdf1e 100644 Binary files a/mail/not-much.el and b/mail/not-much.el differ diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index b874d70..55af1e4 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From ad12bcab7e91ed6e7f99b7e647d0dd774f71f9f6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 13:33:36 -0300 Subject: Polish mailing list workflow with notmuch --- mail/not-much.el | Bin 1652 -> 1652 bytes mail/notmuch-post.sh | Bin 673 -> 1299 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/not-much.el b/mail/not-much.el index f6cdf1e..5c500dd 100644 Binary files a/mail/not-much.el and b/mail/not-much.el differ diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 55af1e4..5922a1a 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From 855bdab766dc092f8edc1d06aa387c28603cebd7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 14:34:22 -0300 Subject: mail/notmuch-post.sh --- mail/notmuch-post.sh | Bin 1299 -> 1311 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 5922a1a..2ffa367 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From e60eac054d2f3b7205c5de90f130c38f9521fae4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 16:55:06 -0300 Subject: Rename mail/not-much.el -> mail/notmuch.el --- mail/not-much.el | Bin 1652 -> 0 bytes mail/notmuch.el | Bin 0 -> 1571 bytes spacemacs.el | 2 +- 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 mail/not-much.el create mode 100644 mail/notmuch.el diff --git a/mail/not-much.el b/mail/not-much.el deleted file mode 100644 index 5c500dd..0000000 Binary files a/mail/not-much.el and /dev/null differ diff --git a/mail/notmuch.el b/mail/notmuch.el new file mode 100644 index 0000000..a6a111d Binary files /dev/null and b/mail/notmuch.el differ diff --git a/spacemacs.el b/spacemacs.el index 7960ea5..2fd7d6a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -582,7 +582,7 @@ dump." ("M-s-a" . (lambda () (interactive) (insert "\\"))) ("M-s-s" . (lambda () (interactive) (insert "|"))))) -(defvar custom-el-files '("~/dev/libre/dotfiles/mail/not-much.el" +(defvar custom-el-files '("~/dev/libre/dotfiles/mail/notmuch.el" "~/.quicklisp/slime-helper.el")) (defmacro measure-time (&rest body) -- cgit v1.2.3 From 173303575ee18af7b6c443373908fde2f9cb3629 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 21:59:51 -0300 Subject: Dump notmuch database during backup. --- scripts/backup.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index b13108f..2baffea 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -25,6 +25,10 @@ fi BACKUP_TAG="${1-default}" +yellow "Creating backup of notmuch data" +notmuch dump --output=$HOME/mbsync/notmuch-dump.txt +green "Done" + yellow "Creating new borg archive entry" borg create \ --verbose \ -- cgit v1.2.3 From 38fc2ebec16ba48f1abfeac7ff24a8751604556c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 22:07:27 -0300 Subject: mrconfig.ini --- mail/notmuch-post.sh | Bin 1311 -> 2202 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 2ffa367..9abc38d 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From 37ff2b4c845bc1e2c7fa0d62dc293dda8349193e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 22:12:55 -0300 Subject: Revert "Remove Guix compatibility code." This reverts commit 5e9efb6478e7ef38ee2fcf2921634db0c27f5d05. --- bash/env.sh | 15 ++++++++++++ git/mrconfig.ini | Bin 9869 -> 11111 bytes nixos/configuration.nix | 64 ++++++++++++++++++++++++++++++++++++++++++------ scripts/gc.sh | 5 ++++ scripts/guix | 1 + spacemacs.el | 4 +++ 6 files changed, 81 insertions(+), 8 deletions(-) create mode 120000 scripts/guix diff --git a/bash/env.sh b/bash/env.sh index 7b51529..d86a89b 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -65,6 +65,21 @@ isLinux && { } +# +# Guix +# + +# export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" +# isLinux && { +# source "$GUIX_PROFILE" +# } +export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" +export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" +export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales +# https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 +export NIX_BUILD_CORES=0 + + # # Go # diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 51cdb5a..4250937 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2648aa6..b555977 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -422,14 +422,62 @@ in users = { mutableUsers = false; - extraUsers.andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - # Generated with: - # mkpasswd -m sha-512 > password-file.txt - passwordFile = localConfiguration.passwordFile; + extraUsers = + let + andrehUser = { + andreh = { + isNormalUser = true; + uid = 1000; + description = "EuAndreh"; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + # Generated with: + # mkpasswd -m sha-512 > password-file.txt + passwordFile = localConfiguration.passwordFile; + }; + }; + # From the Guix manual: + # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup + buildUser = (i: + { + "guixbuilder${i}" = { # guixbuilder$i + group = "guixbuild"; # -g guixbuild + extraGroups = ["guixbuild"]; # -G guixbuild + home = "/var/empty"; # -d /var/empty + shell = pkgs.nologin; # -s `which nologin` + description = "Guix build user ${i}"; # -c "Guix buid user $i" + isSystemUser = true; # --system + }; + } + ); + in + # merge all users + pkgs.lib.fold (str: acc: acc // buildUser str) + andrehUser + # for i in `seq -w 1 10` + (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n+1) 10)); + + extraGroups.guixbuild = { + name = "guixbuild"; + }; + }; + + systemd = { + services = { + # Derived from Guix guix-daemon.service.in + # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 + guix-daemon = { + enable = false; + description = "Build daemon for GNU Guix"; + serviceConfig = { + ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; + Environment="GUIX_LOCPATH=/root/.guix-profile/lib/locale"; + RemainAfterExit="yes"; + StandardOutput="syslog"; + StandardError="syslog"; + TaskMax= "8192"; + }; + wantedBy = [ "multi-user.target" ]; + }; }; }; diff --git a/scripts/gc.sh b/scripts/gc.sh index e094476..c93c948 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -21,6 +21,11 @@ nix-store --gc nix-collect-garbage -d +yellow "Cleaning up Guix store" + +guix gc + + yellow "Cleaning up up the Trash and /tmp folders" sudo rm -rf ~/.local/share/Trash/files/* diff --git a/scripts/guix b/scripts/guix new file mode 120000 index 0000000..96901ae --- /dev/null +++ b/scripts/guix @@ -0,0 +1 @@ +/var/guix/profiles/per-user/root/guix-profile/bin/guix \ No newline at end of file diff --git a/spacemacs.el b/spacemacs.el index 2fd7d6a..6ff2ef8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -761,6 +761,10 @@ This is the place where most of your configurations should be done. Unless it is filename commit start))) + + ;; (require 'geiser-guile) + ;; (with-eval-after-load 'geiser-guile + ;; (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) t) (defun dotspacemacs/emacs-custom-settings () -- cgit v1.2.3 From 6ed4d411bde23bfb5060f9738e7f81f60b62e0f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 May 2019 23:38:28 -0300 Subject: Add quotes to notmuch dump output (shellcheck offense) --- scripts/backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 2baffea..a703114 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -26,7 +26,7 @@ fi BACKUP_TAG="${1-default}" yellow "Creating backup of notmuch data" -notmuch dump --output=$HOME/mbsync/notmuch-dump.txt +notmuch dump --output="$HOME/mbsync/notmuch-dump.txt" green "Done" yellow "Creating new borg archive entry" -- cgit v1.2.3 From b07b38d4651bf0721f90d88941c428cfc40015a1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 May 2019 08:37:28 -0300 Subject: Delete unused mail/offlineimap* files --- mail/offlineimap.py | Bin 372 -> 0 bytes mail/offlineimaprc.ini | Bin 1211 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mail/offlineimap.py delete mode 100644 mail/offlineimaprc.ini diff --git a/mail/offlineimap.py b/mail/offlineimap.py deleted file mode 100644 index 17f39f7..0000000 Binary files a/mail/offlineimap.py and /dev/null differ diff --git a/mail/offlineimaprc.ini b/mail/offlineimaprc.ini deleted file mode 100644 index e2e3cc6..0000000 Binary files a/mail/offlineimaprc.ini and /dev/null differ -- cgit v1.2.3 From cb60f8d9f387499ff2c8e011e7cfa5c129c2005f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 May 2019 22:15:05 -0300 Subject: urls --- newsboat/urls | Bin 1345 -> 1405 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 49f5114..44881de 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From c1bb368331fcd89f9d7836ea5b156d1a50c5820f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:43:01 -0300 Subject: urls --- newsboat/urls | Bin 1405 -> 1761 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index 44881de..bfc530f 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 1db59e4e66f6fd586d9e1c249576da8f51b83494 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:46:53 -0300 Subject: Include newsboat dump in backup data --- scripts/backup.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index a703114..e5dfac3 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -29,6 +29,11 @@ yellow "Creating backup of notmuch data" notmuch dump --output="$HOME/mbsync/notmuch-dump.txt" green "Done" +yellow "Creating backup for newsboat data" +mkdir -p "$HOME/backup/" +newsboat -E "$HOME/backup/newsboat.txt" +green "Done" + yellow "Creating new borg archive entry" borg create \ --verbose \ -- cgit v1.2.3 From 1d6e3ecc49a46f4f891f75c45cace5dca5fe388d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:47:11 -0300 Subject: Recreate newsboat urls symlink --- bash/symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index fbc4a4d..cd4ed7d 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -50,6 +50,7 @@ ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf ## Newsboat mkdir -p ~/.newsboat +ln -fs "$DOTFILES/newsboat/urls" ~/.newsboat/urls ln -fs "$DOTFILES/newsboat/config" ~/.newsboat/config ## NixOS -- cgit v1.2.3 From 27e0c81d548f09f78872689ff41d058df5c8ba70 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:47:25 -0300 Subject: Refresh newsboat when opening (alias) --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 47fbdef..305520b 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -25,7 +25,7 @@ alias du="ncdu --color dark" alias perl6="rlwrap perl6" alias m="mail.sh" alias a="atom.sh" -alias n="newsboat" +alias n="newsboat -r" alias sb="songbooks" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" -- cgit v1.2.3 From 507bb8ee95890cd183282bf4898179456d521f73 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:47:44 -0300 Subject: Setup direnv hook --- bash/agents.sh | 2 ++ nixos/configuration.nix | 1 + 2 files changed, 3 insertions(+) diff --git a/bash/agents.sh b/bash/agents.sh index d49757b..698d1ac 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -24,3 +24,5 @@ start_agent() { } || start_agent gpg -q -d "$DOTFILES/bash/debug.gpg" + +eval "$(direnv hook bash)" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b555977..fd2fd15 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -182,6 +182,7 @@ in bazel graphviz # =dot= and others mkpasswd + direnv diffoscope # poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From b3305fde729756548d69592aca16b3562285d911 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:50:37 -0300 Subject: Use Nextcloud back again instead of ownCloud --- nixos/configuration.nix | 1 + scripts/once-only-owncloud.sh | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fd2fd15..99485f7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -103,6 +103,7 @@ in mr nextcloud-client owncloud-client + nextcloud-client borgbackup git-sizer diff --git a/scripts/once-only-owncloud.sh b/scripts/once-only-owncloud.sh index 66b3ee4..874ba56 100755 --- a/scripts/once-only-owncloud.sh +++ b/scripts/once-only-owncloud.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -if [ "$(pidof owncloud)" ] +if [ "$(pidof nextcloud)" ] then echo "ownCloud already running." else -- cgit v1.2.3 From a87789983592954ff6c8ada06d1a43de13fae205 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 22:55:23 -0300 Subject: Delete VPS scripts from vps/ folder --- .gitattributes | 1 - vps/aliases.sh | 6 ------ vps/docker-compose.yml | Bin 1957 -> 0 bytes vps/push-receive-redeploy.sh | 6 ------ 4 files changed, 13 deletions(-) delete mode 100644 vps/aliases.sh delete mode 100644 vps/docker-compose.yml delete mode 100755 vps/push-receive-redeploy.sh diff --git a/.gitattributes b/.gitattributes index 74fe0d5..b450020 100644 --- a/.gitattributes +++ b/.gitattributes @@ -2,7 +2,6 @@ encrypted/**/* filter=git-crypt diff=git-crypt mail/* filter=git-crypt diff=git-crypt git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt -vps/docker-compose.yml filter=git-crypt diff=git-crypt git/gitconfig.ini filter=git-crypt diff=git-crypt emacs/gnus.el filter=git-crypt diff=git-crypt emacs/not-much.el filter=git-crypt diff=git-crypt diff --git a/vps/aliases.sh b/vps/aliases.sh deleted file mode 100644 index 44064a8..0000000 --- a/vps/aliases.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - - -alias l="ls -lahp" -alias ,r="source ~/.bashrc" -alias watch="watch " diff --git a/vps/docker-compose.yml b/vps/docker-compose.yml deleted file mode 100644 index d06af98..0000000 Binary files a/vps/docker-compose.yml and /dev/null differ diff --git a/vps/push-receive-redeploy.sh b/vps/push-receive-redeploy.sh deleted file mode 100755 index 46a65bc..0000000 --- a/vps/push-receive-redeploy.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash - -cd ~/ || exit 1 -docker pull registry.gitlab.com/euandreh/songbooks/prod:latest -docker-compose stop songbooks_app -docker-compose up -d --no-deps songbooks_app -- cgit v1.2.3 From 8fdb4bb6958e7f76613a702e06df23bb6aaabfdc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 23:35:53 -0300 Subject: Refine notmuch refiling --- mail/notmuch-post.sh | Bin 2202 -> 5010 bytes mail/notmuch.el | Bin 1571 -> 1910 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 9abc38d..60a7a4d 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ diff --git a/mail/notmuch.el b/mail/notmuch.el index a6a111d..3504ae8 100644 Binary files a/mail/notmuch.el and b/mail/notmuch.el differ -- cgit v1.2.3 From e04178bb5853cc9cfab284652d21374bbd6d1f24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 23:36:03 -0300 Subject: urls --- newsboat/urls | Bin 1761 -> 1806 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index bfc530f..dfc29d5 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From ffa666481c36bfe6a717fee1f7bc905f9ac5d190 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 May 2019 23:57:40 -0300 Subject: Reverse sort notmuch in Emacs --- mail/notmuch-post.sh | Bin 5010 -> 4944 bytes mail/notmuch.el | Bin 1910 -> 2036 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 60a7a4d..a686bd9 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ diff --git a/mail/notmuch.el b/mail/notmuch.el index 3504ae8..2df8338 100644 Binary files a/mail/notmuch.el and b/mail/notmuch.el differ -- cgit v1.2.3 From dcc521333bde7c29ebef911b36e51c776484b21f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 00:02:23 -0300 Subject: mrconfig.ini --- git/mrconfig.ini | Bin 11111 -> 11087 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 4250937..7a8540a 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 7ac742d7e7c04dda40e71424960c4b1012417eec Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 10:54:35 -0300 Subject: notmuch.el --- mail/notmuch.el | Bin 2036 -> 2218 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch.el b/mail/notmuch.el index 2df8338..7eaf0f7 100644 Binary files a/mail/notmuch.el and b/mail/notmuch.el differ -- cgit v1.2.3 From 6fbe3d73cf5d3c074aaf6666976a140246dbeded Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 10:54:43 -0300 Subject: Add nixfmt package --- nixos/configuration.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 99485f7..dc5f8cf 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -86,8 +86,13 @@ in doCheck = false; }); + + nixfmt = import (builtins.fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; + # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; [ + nixfmt + ## Personal data tools gitAndTools.git-open -- cgit v1.2.3 From f329d9ef3072a02ca85446d575b2b91c11b3fcf8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 19:02:59 -0300 Subject: known_hosts.txt --- encrypted/SSH/known_hosts.txt | Bin 4390 -> 4577 bytes newsboat/urls | Bin 1806 -> 1841 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt index 9b4c1f1..6bd4ea6 100644 Binary files a/encrypted/SSH/known_hosts.txt and b/encrypted/SSH/known_hosts.txt differ diff --git a/newsboat/urls b/newsboat/urls index dfc29d5..b28ba51 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From c12ab9016ff9b31984882fcc1ea7c4f2d4f85fc7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 19:03:12 -0300 Subject: Install terraform-full --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dc5f8cf..d6346a0 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -272,6 +272,7 @@ in qemu gnome3.gtk-vnc nixops + terraform-full ## xmonad -- cgit v1.2.3 From c90bf9ce7bc4ee7aec7a8c72f6363c832364ec0f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 19:03:52 -0300 Subject: ssh_config.conf --- ssh_config.conf | Bin 231 -> 316 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ssh_config.conf b/ssh_config.conf index 2d025d6..5e02a55 100644 Binary files a/ssh_config.conf and b/ssh_config.conf differ -- cgit v1.2.3 From b77ddfc8dd8dbba046e768501ef9995434458676 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 25 May 2019 19:45:56 -0300 Subject: Add note on declarative disk partitioning --- nixos/os-installation.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh index 519ee5a..0936f94 100644 --- a/nixos/os-installation.sh +++ b/nixos/os-installation.sh @@ -24,6 +24,7 @@ systemctl start display-manager # Change keyboard to pt_BR layout: loadkeys br-abnt2 +# FIXME: make it declarative # Format disk: gdisk /dev/nvme0n1 # disk found using lsblk -- cgit v1.2.3 From bcc8c6a57d8ead8c783dd9f729bef5ae01baa3a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 May 2019 10:19:56 -0300 Subject: mrconfig.ini --- git/mrconfig.ini | Bin 11087 -> 11115 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 7a8540a..e96a9ad 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From af905f36f706db06a0125ad3a7175a035c871d38 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 May 2019 18:02:11 -0300 Subject: Customize org-todo-keyword-faces Interesting note: DOING, WAITING and MEETING all have the same color, thus the same visual status. This helps reinfoce visually WIP limits, since they're not DONE ;) --- spacemacs.el | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 6ff2ef8..095c60d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -728,7 +728,17 @@ This is the place where most of your configurations should be done. Unless it is ;; Taken from: ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html - org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "INACTIVE" "CANCELLED" "MEETING" "DOING" "|" "DONE")) + org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "MEETING" "INACTIVE" "CANCELLED" "DOING" "|" "DONE")) + org-todo-keyword-faces '(("TODO" . (:foreground "orange" :weight bold)) + + ("DOING" . (:foreground "white" :weight bold)) + ("WAITING" . (:foreground "white" :weight bold)) + ("MEETING" . (:foreground "white" :weight bold)) + + ("NEXT" . (:foreground "orange" :weight bold)) + + ("CANCELLED" . (:foreground "green" :weight bold)) + ("DONE" . (:foreground "green" :weight bold))) org-agenda-files '("~/ownCloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" org-default-notes-file "~/annex/txt/TODOs.org" -- cgit v1.2.3 From 88b7240dfafb0ef95b75fffe56003602e2ce8e11 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 May 2019 18:03:18 -0300 Subject: Customize split-width-threshold to 120 Make it more likely to split vertically. --- spacemacs.el | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 095c60d..bd7b189 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -755,7 +755,10 @@ This is the place where most of your configurations should be done. Unless it is ("i" "Idea" entry (file org-default-notes-file) "* %? :IDEA: \n%t" :clock-in t :clock-resume t) ("n" "Next Task" entry (file+headline org-default-notes-file "Tasks") - "** NEXT %? \nDEADLINE: %t"))) + "** NEXT %? \nDEADLINE: %t")) + + ;; Make splitting vertically more likely on smaller (velhinho) screens + split-width-threshold 120) (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From bd057b4d540d35207db262c097bacf03d6b2163f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 18:48:33 -0300 Subject: Change IdentityFile name for TLD --- ssh_config.conf | Bin 316 -> 317 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/ssh_config.conf b/ssh_config.conf index 5e02a55..e672cef 100644 Binary files a/ssh_config.conf and b/ssh_config.conf differ -- cgit v1.2.3 From 858e711431670ae562911efaa1ccec3f1b07c51d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 18:49:02 -0300 Subject: Extend =l= alias --- bash/aliases.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 305520b..6a06af9 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -4,8 +4,7 @@ unalias -a alias open="xdg-open" alias ros="rlwrap ros -l ~/.sbclrc" -alias l="ls -lahp" -alias ll="ls -lhp" +alias l="ls -lahp --color" alias yt-dl="yt_dl" isLinux && { alias copy="tr -d '\\n' | xclip -sel clip" -- cgit v1.2.3 From 84895bb5fcde385f707c048d5a4b8885530525c7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 18:49:20 -0300 Subject: Add extra Bash history configurations --- bash/config.sh | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-) diff --git a/bash/config.sh b/bash/config.sh index 37a4806..1a5d48d 100644 --- a/bash/config.sh +++ b/bash/config.sh @@ -11,8 +11,10 @@ case $- in *) return;; esac -# don't put duplicate linesin the history. # See bash(1) for more options -HISTCONTROL=ignoredups +# Don't put duplicate linesin the history. +# Don't store commands that start with an empty space. +# See bash(1) for more options +HISTCONTROL=ignoreboth # append to the history file, don't overwrite it shopt -s histappend @@ -32,3 +34,19 @@ isLinux && { } stty -ixon + + +# Taken from: +# https://sanctum.geek.nz/arabesque/better-bash-history/ + +# Record timestamps +# If you set $HISTTIMEFORMAT to something useful, Bash will record the timestamp of each command in its history. In this variable you can specify the format in which you want this timestamp displayed when viewed with history. I find the full date and time to be useful, because it can be sorted easily and works well with tools like cut and awk. +HISTTIMEFORMAT='%F %T ' + +# Use one command per line +# To make your .bash_history file a little easier to parse, you can force commands that you entered on more than one line to be adjusted to fit on only one with the cmdhist option: +shopt -s cmdhist + +# Store history immediately +# By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: +PROMPT_COMMAND='history -a' -- cgit v1.2.3 From 9e63c1abde049923c0f6ae5c91055416dbe0a464 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 18:49:52 -0300 Subject: urls --- newsboat/urls | Bin 1841 -> 1903 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index b28ba51..f7da629 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From a37fe9356b13166d36868c5337cc78e0aa13e801 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 18:50:18 -0300 Subject: borg --- .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 68 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 68 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 68 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 68 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 68 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes .../key-type | Bin 0 -> 23 bytes .../location | Bin 0 -> 68 bytes .../manifest-timestamp | Bin 0 -> 48 bytes .../nonce | Bin 0 -> 38 bytes 24 files changed, 0 insertions(+), 0 deletions(-) create mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type create mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location create mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp create mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce create mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type create mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location create mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp create mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce create mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type create mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location create mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp create mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce create mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type create mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location create mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp create mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce create mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type create mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location create mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp create mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce create mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type create mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location create mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp create mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type new file mode 100644 index 0000000..9141051 Binary files /dev/null and b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location new file mode 100644 index 0000000..004bc97 Binary files /dev/null and b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp new file mode 100644 index 0000000..be597d7 Binary files /dev/null and b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type new file mode 100644 index 0000000..9141051 Binary files /dev/null and b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location new file mode 100644 index 0000000..004bc97 Binary files /dev/null and b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp new file mode 100644 index 0000000..c14f5fb Binary files /dev/null and b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type new file mode 100644 index 0000000..9141051 Binary files /dev/null and b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location new file mode 100644 index 0000000..004bc97 Binary files /dev/null and b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp new file mode 100644 index 0000000..c08266b Binary files /dev/null and b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type new file mode 100644 index 0000000..9141051 Binary files /dev/null and b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location new file mode 100644 index 0000000..004bc97 Binary files /dev/null and b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp new file mode 100644 index 0000000..6acfe4c Binary files /dev/null and b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce new file mode 100644 index 0000000..f0f5e61 Binary files /dev/null and b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type new file mode 100644 index 0000000..9141051 Binary files /dev/null and b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location new file mode 100644 index 0000000..004bc97 Binary files /dev/null and b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp new file mode 100644 index 0000000..baf5a45 Binary files /dev/null and b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type new file mode 100644 index 0000000..9141051 Binary files /dev/null and b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location new file mode 100644 index 0000000..004bc97 Binary files /dev/null and b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp new file mode 100644 index 0000000..ea593f6 Binary files /dev/null and b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce new file mode 100644 index 0000000..1d577b5 Binary files /dev/null and b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce differ -- cgit v1.2.3 From 2420f3cbb39bfecdded664ff43a975fe33c8203e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 18:59:55 -0300 Subject: Add VPS project and newsboat to tmuxinator annex.yaml template --- tmux/projects/annex.yml | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index b6cfbcc..a964d67 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -1,15 +1,27 @@ name: annex -root: ~/annex/ windows: - annex+dotfiles: + root: ~/annex/ layout: main-vertical panes: - misc: + - cd + - newsboat: - cd + - n - dotfiles: - cd "$DOTFILES" && git status - sleep 10 - reload - annex: - git status + - vps: + root: ~/dev/libre/vps/ + layout: main-vertical + panes: + - vps: + - s + - vps-state: + - cd ../vps-state/ + - s -- cgit v1.2.3 From 715f84473591fcde7927784b3a1d7b3bbeff6cd0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 19:04:25 -0300 Subject: notmuch-post.sh --- mail/notmuch-post.sh | Bin 4944 -> 4990 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index a686bd9..961402e 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From 1725e61bfd4885b17c3c0c6a60a083805ed87594 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 19:05:45 -0300 Subject: notmuch-post.sh --- mail/notmuch-post.sh | Bin 4990 -> 4979 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh index 961402e..3eaec19 100755 Binary files a/mail/notmuch-post.sh and b/mail/notmuch-post.sh differ -- cgit v1.2.3 From 477b7584828e9b1fc48e3c86b4d62942d0eafcd5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 19:27:34 -0300 Subject: urls --- newsboat/urls | Bin 1903 -> 1872 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/newsboat/urls b/newsboat/urls index f7da629..cbc039f 100644 Binary files a/newsboat/urls and b/newsboat/urls differ -- cgit v1.2.3 From 495336d9c6a91a34bbcdc7ee63772a24bf01cfee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 19:48:14 -0300 Subject: TODOs.org --- TODOs.org | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 TODOs.org diff --git a/TODOs.org b/TODOs.org new file mode 100644 index 0000000..52748f0 --- /dev/null +++ b/TODOs.org @@ -0,0 +1,32 @@ +* Tasks +** TODO Simplify the installation of NixOS +*** TODO Preparation phase +Create =burn-nixos.sh= with something like: +#+BEGIN_SOURCE shell +NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-graphical-19.03.172764.50d5d73e22b-x86_64-linux.iso' +burn-nixos.sh "$NIXOS_URL" /dev/sdb +#+END_SOURCE +*** TODO Installation phase +**** TODO Make disk partitioning declarative +**** TODO Choose proper tool +=fdisk=? =gdisk=? =gparted=? Why? Why not? +**** TODO Always use UEFI and GPT (which I think is better) +**** TODO Parameterize the disk to be partitioned +So I can give the installation script an argument and reuse later on the program. Something like: +#+BEGIN_SOURCE shell +$ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda +#+END_SOURCE +**** TODO Publish =install-nixos.sh= in CI run +Add =publishScript= derivation and run it in builds.sr.ht. +*** TODO Setup phase +**** TODO Fix bootstrap order of installing and importing packages +**** TODO Automate annex setup +** TODO Automate setup of =builds.sr.ht= for other projects +*** TODO Add =utils.nix= with common derivations +*** TODO Generate yaml from Dhall +** TODO Remove borg content from repository +** TODO Remove encrypted files from repository +** TODO Make creation of a new shell faster +Profile =bash/bashrc.sh=. +** TODO Improve README.org +** TODO Automate backup.sh -- cgit v1.2.3 From fb48bdcdc34016a3851a84d17b67f5cac5cdb041 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 20:17:59 -0300 Subject: Add scripts/burn-nixos.sh --- TODOs.org | 3 ++- scripts/burn-nixos.sh | 21 +++++++++++++++++++++ 2 files changed, 23 insertions(+), 1 deletion(-) create mode 100755 scripts/burn-nixos.sh diff --git a/TODOs.org b/TODOs.org index 52748f0..0d1dc58 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,6 +1,7 @@ * Tasks ** TODO Simplify the installation of NixOS -*** TODO Preparation phase +*** DONE Preparation phase +CLOSED: [2019-05-30 Thu 20:17] Create =burn-nixos.sh= with something like: #+BEGIN_SOURCE shell NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-graphical-19.03.172764.50d5d73e22b-x86_64-linux.iso' diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh new file mode 100755 index 0000000..7518c1e --- /dev/null +++ b/scripts/burn-nixos.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +NIXOS_URL="$1" +USB_STICK="$2" +ISO_PATH='/tmp/nixos.iso' + +yellow "Downloading NixOS ISO..." +wget -O "${ISO_PATH}" "${NIXOS_URL}" +wget -O "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" +diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { + red "SHA256 didn't match!" + exit 1 +} +green "Done. SHA256 match." + +yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." +umount "${USB_STICK}1" ||: +ls -lahp --color "${ISO_PATH}" +sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress +green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." -- cgit v1.2.3 From 055b7f42e1070fe5062e13f471daba4da5ccc8da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 20:43:37 -0300 Subject: Add USAGE information to burn-nixos.sh --- scripts/burn-nixos.sh | 33 ++++++++++++++++++++++++++++++--- 1 file changed, 30 insertions(+), 3 deletions(-) diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh index 7518c1e..43903d7 100755 --- a/scripts/burn-nixos.sh +++ b/scripts/burn-nixos.sh @@ -1,10 +1,37 @@ #!/usr/bin/env bash set -Eeuo pipefail -NIXOS_URL="$1" -USB_STICK="$2" +usage() { + red "Missing argument $1." + cat < + + Arguments: + NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html + USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. + +Examples: + Download NixOS 19.03 x86_64 and burn it into stick on /dev/sdb: + NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' + burn-nixos.sh "\$NIXOS_URL" /dev/sdb +EOF +} + +NIXOS_URL="${1:-}" +USB_STICK="${2:-}" ISO_PATH='/tmp/nixos.iso' +[[ -z "${NIXOS_URL}" ]] && { + usage 'NIXOS_URL' + exit 2 +} + +[[ -z "${USB_STICK}" ]] && { + usage 'USB_STICK' + exit 2 +} + yellow "Downloading NixOS ISO..." wget -O "${ISO_PATH}" "${NIXOS_URL}" wget -O "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" @@ -16,6 +43,6 @@ green "Done. SHA256 match." yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." umount "${USB_STICK}1" ||: -ls -lahp --color "${ISO_PATH}" +blue "$(du -hs /tmp/nixos.iso)" sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." -- cgit v1.2.3 From be1768f4404bfc9cd7226ad26a1770370fa49752 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:00:46 -0300 Subject: Use -c to continue wget download of NixOS ISO --- scripts/burn-nixos.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh index 43903d7..947fd0d 100755 --- a/scripts/burn-nixos.sh +++ b/scripts/burn-nixos.sh @@ -33,8 +33,8 @@ ISO_PATH='/tmp/nixos.iso' } yellow "Downloading NixOS ISO..." -wget -O "${ISO_PATH}" "${NIXOS_URL}" -wget -O "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" +wget -cO "${ISO_PATH}" "${NIXOS_URL}" +wget -cO "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { red "SHA256 didn't match!" exit 1 -- cgit v1.2.3 From 5351538c30ddc5d4693b40bcf8a9a7b1e036c70a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:13:27 -0300 Subject: Simple USAGE text change on burn-nixos.sh --- scripts/burn-nixos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh index 947fd0d..85ab9e2 100755 --- a/scripts/burn-nixos.sh +++ b/scripts/burn-nixos.sh @@ -12,7 +12,7 @@ Usage: USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. Examples: - Download NixOS 19.03 x86_64 and burn it into stick on /dev/sdb: + Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' burn-nixos.sh "\$NIXOS_URL" /dev/sdb EOF -- cgit v1.2.3 From 28bdfef01b1fde7eb421d830e93df2bbaab5edca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:19:23 -0300 Subject: Remove empty string from tmux.conf --- tmux/tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 3ae1b39..3cf53cb 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -12,7 +12,7 @@ bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" # Holy answer that properly implements copying from tmux! # https://unix.stackexchange.com/a/349020/276661 -if-shell "uname | grep -q Darwin" "source-file ~/.tmux-macos.conf" " source-file ~/.tmux-gnu-linux.conf" +if-shell "uname | grep -q Darwin" "source-file ~/.tmux-macos.conf" "source-file ~/.tmux-gnu-linux.conf" # Moving around panes bind-key h select-pane -L -- cgit v1.2.3 From b11b4267d4869c114f2abc1e5caf1a5fa1a6aab5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:19:46 -0300 Subject: Copy '$R:vps-backup/' into UTCLOUD in backup.sh --- scripts/backup.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index e5dfac3..5d215a3 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -60,6 +60,10 @@ yellow "Syncing ~/borgbackup to $R:borgbackup/" rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" green "Done" +yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" +rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/borg/vps-borgbackup/ +green "Done" + # # mr -- cgit v1.2.3 From be39c81841fc65bb03b7654b85fd2d3543af3cf5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:21:51 -0300 Subject: Add initial elfeed configuration --- .gitattributes | 1 + TODOs.org | 2 ++ bash/symlinks.sh | 1 + newsboat/elfeed.org | Bin 0 -> 71 bytes spacemacs.el | 4 +++- 5 files changed, 7 insertions(+), 1 deletion(-) create mode 100644 newsboat/elfeed.org diff --git a/.gitattributes b/.gitattributes index b450020..214f4d6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -8,3 +8,4 @@ emacs/not-much.el filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt ssh_config.conf filter=git-crypt diff=git-crypt newsboat/urls filter=git-crypt diff=git-crypt +newsboat/elfeed.org filter=git-crypt diff=git-crypt diff --git a/TODOs.org b/TODOs.org index 0d1dc58..c590c51 100644 --- a/TODOs.org +++ b/TODOs.org @@ -31,3 +31,5 @@ Add =publishScript= derivation and run it in builds.sr.ht. Profile =bash/bashrc.sh=. ** TODO Improve README.org ** TODO Automate backup.sh +* Nice to have +** TODO Test elfeed diff --git a/bash/symlinks.sh b/bash/symlinks.sh index cd4ed7d..2f6460f 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -59,6 +59,7 @@ ln -fs "$DOTFILES/nixos/firefox.destkop" ~/.local/share/applications/fire ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" +ln -fs "$DOTFILES/newsboat/elfeed.org" ~/.emacs.d/private/elfeed.org ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs ln -fs "$DOTFILES/emacs/gnus.el" ~/.gnus.el ln -fs "$CACHE_DIR/euandreh-auto-save.el" ~/.emacs.d/.cache/layouts/euandreh-auto-save diff --git a/newsboat/elfeed.org b/newsboat/elfeed.org new file mode 100644 index 0000000..46b13ef Binary files /dev/null and b/newsboat/elfeed.org differ diff --git a/spacemacs.el b/spacemacs.el index bd7b189..6e7697c 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -48,6 +48,8 @@ This function should only modify configuration layer settings." common-lisp csv docker + (elfeed :variables + rmh-elfeed-org-files '("~/.emacs.d/private/elfeed.org")) elixir elm emacs-lisp @@ -792,7 +794,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 9dd8058203b105459596dda2100dfd106d2cbcd4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:22:28 -0300 Subject: Annotate files with FIXME --- bash/x.sh | 3 +++ tmux/projects/annex.yml | 1 + 2 files changed, 4 insertions(+) diff --git a/bash/x.sh b/bash/x.sh index e75cff3..1855dac 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash isLinux && { + # FIXME: make this declarative xmodmap ~/.Xmodmap xset r rate 250 50 @@ -17,4 +18,6 @@ isLinux && { xdg-mime default firefox.desktop text/xml xdg-mime default nautilus.desktop inode/directory + + # FIXME: add .description files } diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index a964d67..00b3a8a 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -3,6 +3,7 @@ name: annex windows: - annex+dotfiles: root: ~/annex/ + # FIXME layout: main-vertical panes: - misc: -- cgit v1.2.3 From f77fc421dee47ddc45106891b155ebd1693fe9ba Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 21:51:13 -0300 Subject: Format all Nix code with nixfmt --- default.nix | 51 +--- nixos/configuration.nix | 637 +++++++++++++++++++-------------------- nixos/hardware-configuration.nix | 26 +- nixos/utils.nix | 118 ++++++++ nixos/velhinho.nix | 2 +- 5 files changed, 453 insertions(+), 381 deletions(-) create mode 100644 nixos/utils.nix diff --git a/default.nix b/default.nix index b6e85bd..268ff9d 100644 --- a/default.nix +++ b/default.nix @@ -1,43 +1,22 @@ let - pkgs = import {}; - rootSrc = pkgs.nix-gitignore.gitignoreSource [] ./.; - baseTask = pkgs.stdenv.mkDerivation { - name = "dotfiles-task"; - src = rootSrc; - buildInputs = []; - phases = "unpackPhase buildPhase"; - buildPhase = '' - echo "ERROR: base task buildPhase not overriden." - exit 1 - ''; - }; -in with pkgs; with pkgs.stdenv; rec { - subtasks = rec { - shellcheck = baseTask.overrideAttrs(baseAttrs: { - name = "${baseAttrs.name}-shellcheck"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; - buildPhase = '' - export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" - ignored='(encrypted|os-installation.sh|notmuch-post.sh)' - find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck - touch $out - ''; - }); - fixme = baseTask.overrideAttrs(baseAttrs: { - name = "${baseAttrs.name}-fixme"; - buildInputs = baseAttrs.buildInputs ++ [ ag ]; - buildPhase = '' - ag FIXME --ignore default.nix || { - touch $out - } - ''; - }); + pkgs = import { }; + rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; + + utils = import ./nixos/utils.nix { + pkgs = pkgs; + rootSrc = rootSrc; # FIXME: remove the need for this + baseName = "dotfiles"; }; - test = baseTask.overrideAttrs(baseAttrs: rec { +in with pkgs; +with pkgs.stdenv; rec { + test = utils.baseTask.overrideAttrs (baseAttrs: rec { name = "${baseAttrs.name}-test"; buildInputs = [ - subtasks.shellcheck - subtasks.fixme + utils.formatNix + # subtasks.shellcheck + # subtasks.fixme + # subtasks.uniqueFeeds + # subtasks.formatNix ]; buildPhase = '' echo "Ran tests for:" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d6346a0..805413b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,12 +1,10 @@ { config, pkgs, ... }: let localConfiguration = import /etc/nixos/local-configuration.nix; -in -{ - imports = - [ # Include the results of the hardware scan. - /etc/nixos/hardware-configuration.nix - ]; +in { + imports = [ # Include the results of the hardware scan. + /etc/nixos/hardware-configuration.nix + ]; # Use the systemd-boot EFI boot loader. boot = { @@ -15,13 +13,11 @@ in efi.canTouchEfiVariables = true; }; initrd = { - luks.devices = [ - { - name = "root"; - device = localConfiguration.luksDevice; - preLVM = true; - } - ]; + luks.devices = [{ + name = "root"; + device = localConfiguration.luksDevice; + preLVM = true; + }]; }; }; @@ -66,281 +62,268 @@ in freefont_ttf ]; - - environment.systemPackages = - let - # pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; - # pkgs-18-03 = import(pkgs.fetchzip { - # url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; - # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; - # }) {}; - - timidityWithEvenMoreFormats = with pkgs; timidity.overrideAttrs (oldAttrs: { - configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; - buildInputs = oldAttrs.buildInputs ++ [ libogg libvorbis flac ]; - }); - - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet-full = with pkgs; quodlibet-full.overrideAttrs (oldAttrs: { - doInstallCheck = false; - doCheck = false; - }); - - - nixfmt = import (builtins.fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; - - # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 - in with pkgs; [ - nixfmt - - ## Personal data tools - - gitAndTools.git-open - gitAndTools.gitFull - gitAndTools.diff-so-fancy - gitAndTools.git-annex - gitAndTools.gitRemoteGcrypt - gitAndTools.git-dit - gitAndTools.git-secrets - git-crypt - git-lfs - gnupg - mr - nextcloud-client - owncloud-client - nextcloud-client - borgbackup - git-sizer - - - ## CLI tools - - bash - bash-completion - nix-bash-completions - youtube-dl - wget - vim - thefuck - tmux - tmuxinator - sox # =play= - gettext # =envsubst= - ag - gnugrep - ack - htop - rlwrap - awscli - jq - openvpn - xclip - bc # binary calculator used in nucli - sassc - watchman - ipfs - gnumake - gcc - psmisc # =killall= - xorg.xkill - autojump - bfg-repo-cleaner - pwgen - gksu # =gksudo= - gnome2.GConf # https://github.com/NixOS/nixpkgs/issues/15978 - lsof - pciutils - python27Packages.pywatchman # =watchman-wait= - libressl - tree - i2p - libxml2 # =xmllint= - unzip # used by extract bash function and Clojure go-to-source - odt2txt # used to diff odf files - feh # simplistic image viewer - nixUnstable # =nix= - zip - zlib - redis - alsaUtils # for xmonad volume commands - multimarkdown # =markdown= - pup # command-line HTML parsing https://github.com/ericchiang/pup - binutils-unwrapped # =ar= command for cargo build - nssTools # =pk12util= - gitAndTools.hub # GitHub helper - insomnia - bind # =dig= - file - gitlab-runner - sshpass - zathura # for viewing Emacs PDF files - nvi - cacert - gtypist - pandoc - inotify-tools - fzf - ncdu - fd - nnn - python36Packages.python-slugify - moreutils # =vipe= - bazel - graphviz # =dot= and others - mkpasswd - direnv - - diffoscope # - poppler_utils # used by diffoscope for comparing PDF files - pdftk # - - gnome3.libgnome-keyring - gnome3.gnome-keyring - - - ## Mail - - notmuch - isync - - - ## Spell checking - - (aspellWithDicts (ps : with ps; [ en eo fr pt_BR ])) - languagetool - - - ## NixOS - - pypi2nix - bundix - - - ## Music - - texlive.combined.scheme-full - lilypond - python36Packages.python-ly - lame - frescobaldi - timidityWithEvenMoreFormats - - - ## Programming tools - - sbcl - stack - leiningen - python3 - python - yarn - elixir - openjdk - solc - bundler - rustup - cargo - clojure # =clj= - visualvm # JVM profiling tool - ant - maven - go_bootstrap - rakudo - bats - ledger - newsboat - perl - dhall - dhall-json - nodePackages.node2nix - shellcheck - # (haskell.lib.justStaticExecutables haskellPackages.github-backup) - rustracer - xsel - nodejs-10_x - swift - - - ## Containers and VMs - - packer - docker_compose - docker-machine - vagrant - kubernetes - ansible - qemu - gnome3.gtk-vnc - nixops - terraform-full - - - ## xmonad - - xorg.xmodmap - trayer - dmenu - escrotum - xorg.xbacklight - networkmanagerapplet - playerctl - lightdm - fvwm # =xpmroot= - haskellPackages.xmobar - haskellPackages.yeganesh - arandr - - - ## GUI programs - - untested-quodlibet-full - inkscape - calibre - cozy - rhythmbox - gpodder - firefox - emacs - tdesktop - vlc - keepassx2-http - yubioath-desktop - # tor-browser-bundle-bin - transmission_gtk - libreoffice - android-studio - # androidsdk_extras - # androidndk - patchwork-classic - # gnome3.gpaste - - - ## Cryptocururencies - - electrum - zbar # for on-screen QR Code scanning - monero - - - ## nu specific packages - - sshuttle - slack - chromium - ]; + environment.systemPackages = let + # pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; + # pkgs-18-03 = import(pkgs.fetchzip { + # url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; + # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; + # }) {}; + + timidityWithEvenMoreFormats = with pkgs; + timidity.overrideAttrs (oldAttrs: { + configureFlags = oldAttrs.configureFlags + ++ [ "--enable-audio=vorbis,flac" ]; + buildInputs = oldAttrs.buildInputs ++ [ libogg libvorbis flac ]; + }); + + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet-full = with pkgs; + quodlibet-full.overrideAttrs (oldAttrs: { + doInstallCheck = false; + doCheck = false; + }); + + nixfmt = import (builtins.fetchTarball + "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; + + # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 + in with pkgs; [ + nixfmt + + ## Personal data tools + + gitAndTools.git-open + gitAndTools.gitFull + gitAndTools.diff-so-fancy + gitAndTools.git-annex + gitAndTools.gitRemoteGcrypt + gitAndTools.git-dit + gitAndTools.git-secrets + git-crypt + git-lfs + gnupg + mr + nextcloud-client + owncloud-client + nextcloud-client + borgbackup + git-sizer + + ## CLI tools + + bash + bash-completion + nix-bash-completions + youtube-dl + wget + vim + thefuck + tmux + tmuxinator + sox # =play= + gettext # =envsubst= + ag + gnugrep + ack + htop + rlwrap + awscli + jq + openvpn + xclip + bc # binary calculator used in nucli + sassc + watchman + ipfs + gnumake + gcc + psmisc # =killall= + xorg.xkill + autojump + bfg-repo-cleaner + pwgen + gksu # =gksudo= + gnome2.GConf # https://github.com/NixOS/nixpkgs/issues/15978 + lsof + pciutils + python27Packages.pywatchman # =watchman-wait= + libressl + tree + i2p + libxml2 # =xmllint= + unzip # used by extract bash function and Clojure go-to-source + odt2txt # used to diff odf files + feh # simplistic image viewer + nixUnstable # =nix= + zip + zlib + redis + alsaUtils # for xmonad volume commands + multimarkdown # =markdown= + pup # command-line HTML parsing https://github.com/ericchiang/pup + binutils-unwrapped # =ar= command for cargo build + nssTools # =pk12util= + gitAndTools.hub # GitHub helper + insomnia + bind # =dig= + file + gitlab-runner + sshpass + zathura # for viewing Emacs PDF files + nvi + cacert + gtypist + pandoc + inotify-tools + fzf + ncdu + fd + nnn + python36Packages.python-slugify + moreutils # =vipe= + bazel + graphviz # =dot= and others + mkpasswd + direnv + + diffoscope + poppler_utils # used by diffoscope for comparing PDF files + pdftk + + gnome3.libgnome-keyring + gnome3.gnome-keyring + + ## Mail + + notmuch + isync + + ## Spell checking + + (aspellWithDicts (ps: with ps; [ en eo fr pt_BR ])) + languagetool + + ## NixOS + + pypi2nix + bundix + + ## Music + + texlive.combined.scheme-full + lilypond + python36Packages.python-ly + lame + frescobaldi + timidityWithEvenMoreFormats + + ## Programming tools + + sbcl + stack + leiningen + python3 + python + yarn + elixir + openjdk + solc + bundler + rustup + cargo + clojure # =clj= + visualvm # JVM profiling tool + ant + maven + go_bootstrap + rakudo + bats + ledger + newsboat + perl + dhall + dhall-json + nodePackages.node2nix + shellcheck + # (haskell.lib.justStaticExecutables haskellPackages.github-backup) + rustracer + xsel + nodejs-10_x + swift + + ## Containers and VMs + + packer + docker_compose + docker-machine + vagrant + kubernetes + ansible + qemu + gnome3.gtk-vnc + nixops + terraform-full + + ## xmonad + + xorg.xmodmap + trayer + dmenu + escrotum + xorg.xbacklight + networkmanagerapplet + playerctl + lightdm + fvwm # =xpmroot= + haskellPackages.xmobar + haskellPackages.yeganesh + arandr + + ## GUI programs + + untested-quodlibet-full + inkscape + calibre + cozy + rhythmbox + gpodder + firefox + emacs + tdesktop + vlc + keepassx2-http + yubioath-desktop + # tor-browser-bundle-bin + transmission_gtk + libreoffice + android-studio + # androidsdk_extras + # androidndk + patchwork-classic + # gnome3.gpaste + + ## Cryptocururencies + + electrum + zbar # for on-screen QR Code scanning + monero + + ## nu specific packages + + sshuttle + slack + chromium + ]; nixpkgs.config = { android_sdk.accept_license = true; allowUnfree = true; # Require for slack (unfree) derivation }; - # Look at # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro - programs = { - bash.enableCompletion = true; - }; + programs = { bash.enableCompletion = true; }; services = { cron.enable = true; @@ -390,14 +373,14 @@ in gnome-terminal-server.enable = true; # gpaste.enable = true; # clipboard manager tracker.enable = true; - sushi.enable = true; # nautilus previewer + sushi.enable = true; # nautilus previewer gnome-online-accounts.enable = true; gnome-documents.enable = true; evolution-data-server.enable = true; gvfs.enable = true; }; - pcscd.enable = true; # required by yubioath + pcscd.enable = true; # required by yubioath # Taken from: # https://unix.stackexchange.com/questions/378711/how-do-i-configure-postgress-authorization-settings-in-nixos @@ -430,62 +413,56 @@ in users = { mutableUsers = false; - extraUsers = - let - andrehUser = { - andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - # Generated with: - # mkpasswd -m sha-512 > password-file.txt - passwordFile = localConfiguration.passwordFile; - }; + extraUsers = let + andrehUser = { + andreh = { + isNormalUser = true; + uid = 1000; + description = "EuAndreh"; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + # Generated with: + # mkpasswd -m sha-512 > password-file.txt + passwordFile = localConfiguration.passwordFile; }; - # From the Guix manual: - # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup - buildUser = (i: - { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = ["guixbuild"]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.nologin; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system - }; - } - ); - in - # merge all users - pkgs.lib.fold (str: acc: acc // buildUser str) - andrehUser - # for i in `seq -w 1 10` - (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n+1) 10)); - - extraGroups.guixbuild = { - name = "guixbuild"; - }; + }; + # From the Guix manual: + # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup + buildUser = (i: { + "guixbuilder${i}" = { # guixbuilder$i + group = "guixbuild"; # -g guixbuild + extraGroups = [ "guixbuild" ]; # -G guixbuild + home = "/var/empty"; # -d /var/empty + shell = pkgs.nologin; # -s `which nologin` + description = "Guix build user ${i}"; # -c "Guix buid user $i" + isSystemUser = true; # --system + }; + }); + # merge all users + in pkgs.lib.fold (str: acc: acc // buildUser str) andrehUser + # for i in `seq -w 1 10` + (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n + 1) 10)); + + extraGroups.guixbuild = { name = "guixbuild"; }; }; systemd = { services = { # Derived from Guix guix-daemon.service.in # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 - guix-daemon = { - enable = false; - description = "Build daemon for GNU Guix"; - serviceConfig = { - ExecStart = "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; - Environment="GUIX_LOCPATH=/root/.guix-profile/lib/locale"; - RemainAfterExit="yes"; - StandardOutput="syslog"; - StandardError="syslog"; - TaskMax= "8192"; - }; - wantedBy = [ "multi-user.target" ]; - }; + guix-daemon = { + enable = false; + description = "Build daemon for GNU Guix"; + serviceConfig = { + ExecStart = + "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; + Environment = "GUIX_LOCPATH=/root/.guix-profile/lib/locale"; + RemainAfterExit = "yes"; + StandardOutput = "syslog"; + StandardError = "syslog"; + TaskMax = "8192"; + }; + wantedBy = [ "multi-user.target" ]; + }; }; }; diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix index 2670a09..a07470d 100644 --- a/nixos/hardware-configuration.nix +++ b/nixos/hardware-configuration.nix @@ -4,27 +4,25 @@ { config, lib, pkgs, ... }: { - imports = - [ - ]; + imports = [ ]; - boot.initrd.availableKernelModules = [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ]; + boot.initrd.availableKernelModules = + [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; - fileSystems."/" = - { device = "/dev/disk/by-uuid/337ad499-b479-4fe9-ad98-0a9b2b92f4e9"; - fsType = "ext4"; - }; + fileSystems."/" = { + device = "/dev/disk/by-uuid/337ad499-b479-4fe9-ad98-0a9b2b92f4e9"; + fsType = "ext4"; + }; - fileSystems."/boot" = - { device = "/dev/disk/by-uuid/0975-7A26"; - fsType = "vfat"; - }; + fileSystems."/boot" = { + device = "/dev/disk/by-uuid/0975-7A26"; + fsType = "vfat"; + }; swapDevices = - [ { device = "/dev/disk/by-uuid/c08158aa-677a-4984-83fe-c938edb7021e"; } - ]; + [{ device = "/dev/disk/by-uuid/c08158aa-677a-4984-83fe-c938edb7021e"; }]; nix.maxJobs = lib.mkDefault 4; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; diff --git a/nixos/utils.nix b/nixos/utils.nix new file mode 100644 index 0000000..f809dd9 --- /dev/null +++ b/nixos/utils.nix @@ -0,0 +1,118 @@ +{ pkgs, rootSrc ? pkgs.nix-gitignore.gitignoreSource [ ] ./., baseName }: +let + nixfmt = import (builtins.fetchTarball + "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; + +in rec { + baseTask = pkgs.stdenv.mkDerivation { + name = "${baseName}-task"; + src = rootSrc; + buildInputs = [ ]; + phases = "unpackPhase buildPhase"; + buildPhase = '' + echo "ERROR: base task buildPhase not overriden." + exit 1 + ''; + }; + shellcheck = baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-shellcheck"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; + buildPhase = '' + export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" + ignored='(encrypted|os-installation.sh|notmuch-post.sh)' + find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck + touch $out + ''; + }); + formatNix = baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-nixfmt"; + buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; + buildPhase = '' + format() { + nix_file="$1" + diff <(nixfmt < "$nix_file") "$nix_file" || { + echo "The $nix_file is unformatted. To fix it, run:" + echo " nixfmt $nix_file" + exit 1 + } + } + export -f format + find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" \; + touch $out + ''; + }); + + fixme = baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-fixme"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; + buildPhase = '' + ag FIXME --ignore default.nix || { + touch $out + exit 0 + } + echo "^^^^^^^^^^^^^^^^^" + echo " Found dangling FIXME markers on the project xp" + exit 1 + ''; + }); + + test = testDerivations: + baseTask.overrideAttrs (baseAttrs: { + + name = "${baseAttrs.name}-test"; + buildPhase = '' + echo "Ran tests for:" + for d in ${builtins.toString testDerivations}; do + echo " $d" + done + echo "All tests passed!" + touch $out + ''; + }); +} + +# subtasks = rec { +# shellcheck = baseTask.overrideAttrs(baseAttrs: { +# name = "${baseAttrs.name}-shellcheck"; +# buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; +# buildPhase = '' +# export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" +# ignored='(encrypted|os-installation.sh|notmuch-post.sh)' +# find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck +# touch $out +# ''; +# }); +# fixme = baseTask.overrideAttrs(baseAttrs: { +# name = "${baseAttrs.name}-fixme"; +# buildInputs = baseAttrs.buildInputs ++ [ ag ]; +# buildPhase = '' +# ag FIXME --ignore default.nix || { +# touch $out +# } +# ''; +# }); +# uniqueFeeds = baseTask.overrideAttrs (baseAttrs: { +# name = "${baseAttrs.name}-unique-feeds"; +# buildPhase = '' +# OUT="$(uniq -D <(sort ./newsboat/urls))" +# [[ $OUT = "" ]] || { +# echo "Duplicate subscriptions found in ./newsboat/urls:" +# echo "$OUT" +# exit 1 +# } +# touch $out +# ''; +# }); +# formatNix = baseTask.overrideAttrs (baseAttrs: { +# name = "${baseAttrs.name}-nixfmt"; +# buildInputs = baseAttrs.buildInputs ++ [nixfmt]; +# buildPhase = '' +# diff <(nixfmt < default.nix) default.nix || { +# echo "The default.nix is unformatted. To fix it, run:" +# echo " nixfmt default.nix" +# exit 1 +# } +# touch $out +# ''; +# }); +# }; diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index f2f270f..3de1d77 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,5 +1,5 @@ { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; - passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; + passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; } -- cgit v1.2.3 From 657c872b0c3dc40e5abef38812f285b69509c236 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 22:47:31 -0300 Subject: Move shellCheck derivation to utils.nix --- TODOs.org | 1 + bash/agents.sh | 1 + bash/aliases.sh | 1 + bash/bash_profile.sh | 1 + bash/bashrc.sh | 1 + bash/facepalm/rotten-apple.sh | 3 +++ default.nix | 30 +++++++++--------------------- nixos/utils.nix | 7 +++---- 8 files changed, 20 insertions(+), 25 deletions(-) diff --git a/TODOs.org b/TODOs.org index c590c51..ba7329d 100644 --- a/TODOs.org +++ b/TODOs.org @@ -31,5 +31,6 @@ Add =publishScript= derivation and run it in builds.sr.ht. Profile =bash/bashrc.sh=. ** TODO Improve README.org ** TODO Automate backup.sh +** TODO Remove =shellcheck disable= directives * Nice to have ** TODO Test elfeed diff --git a/bash/agents.sh b/bash/agents.sh index 698d1ac..9a26567 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash # shellcheck disable=SC2015 +# shellcheck disable=SC1090 eval "$(thefuck --alias f)" diff --git a/bash/aliases.sh b/bash/aliases.sh index 6a06af9..8e8c3b2 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC2139 unalias -a diff --git a/bash/bash_profile.sh b/bash/bash_profile.sh index 0383eaa..b6e2254 100644 --- a/bash/bash_profile.sh +++ b/bash/bash_profile.sh @@ -1,3 +1,4 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 source ~/dev/libre/dotfiles/bash/bashrc.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index fd67d30..f6fae35 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 export DOTFILES=~/dev/libre/dotfiles diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh index 222a2b0..b42bf21 100644 --- a/bash/facepalm/rotten-apple.sh +++ b/bash/facepalm/rotten-apple.sh @@ -1,4 +1,7 @@ #!/usr/bin/env bash +# shellcheck disable=SC1090 +# shellcheck disable=SC1091 +# shellcheck disable=SC2139 isMac && { unalias open diff --git a/default.nix b/default.nix index 268ff9d..7b6e001 100644 --- a/default.nix +++ b/default.nix @@ -1,30 +1,18 @@ let pkgs = import { }; rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; - +in with pkgs; +with pkgs.stdenv; rec { utils = import ./nixos/utils.nix { pkgs = pkgs; rootSrc = rootSrc; # FIXME: remove the need for this baseName = "dotfiles"; }; -in with pkgs; -with pkgs.stdenv; rec { - test = utils.baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-test"; - buildInputs = [ - utils.formatNix - # subtasks.shellcheck - # subtasks.fixme - # subtasks.uniqueFeeds - # subtasks.formatNix - ]; - buildPhase = '' - echo "Ran tests for:" - for d in ${builtins.toString buildInputs}; do - echo " $d" - done - echo "All tests passed!" - touch $out - ''; - }); + test = utils.test [ + utils.formatNix + (utils.shellcheck ".*(encrypted|os-installation.sh).*") + # subtasks.fixme + # subtasks.uniqueFeeds + # subtasks.formatNix + ]; } diff --git a/nixos/utils.nix b/nixos/utils.nix index f809dd9..30110a4 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -14,13 +14,12 @@ in rec { exit 1 ''; }; - shellcheck = baseTask.overrideAttrs (baseAttrs: { + shellcheck = ignoredFindPattern: + baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-shellcheck"; buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; buildPhase = '' - export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" - ignored='(encrypted|os-installation.sh|notmuch-post.sh)' - find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck + find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredFindPattern}' \) -print0 | xargs -0 shellcheck touch $out ''; }); -- cgit v1.2.3 From e215d02457b5eb850109d43ab577c9e994fcbe7f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:11:07 -0300 Subject: Polish and use utils.fixme derivation --- TODOs.org | 4 ++++ bash/x.sh | 3 --- default.nix | 6 ++---- nixos/os-installation.sh | 1 - nixos/utils.nix | 17 ++++++++++------- tmux/projects/annex.yml | 1 - 6 files changed, 16 insertions(+), 16 deletions(-) diff --git a/TODOs.org b/TODOs.org index ba7329d..6934bb4 100644 --- a/TODOs.org +++ b/TODOs.org @@ -34,3 +34,7 @@ Profile =bash/bashrc.sh=. ** TODO Remove =shellcheck disable= directives * Nice to have ** TODO Test elfeed +* Fixes +** TODO Adjust layout for =annex.yml= tmuxinator template +** TODO Make xmodmap commands declarative +** TODO Open =.description= files with text editor diff --git a/bash/x.sh b/bash/x.sh index 1855dac..e75cff3 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash isLinux && { - # FIXME: make this declarative xmodmap ~/.Xmodmap xset r rate 250 50 @@ -18,6 +17,4 @@ isLinux && { xdg-mime default firefox.desktop text/xml xdg-mime default nautilus.desktop inode/directory - - # FIXME: add .description files } diff --git a/default.nix b/default.nix index 7b6e001..8cd6397 100644 --- a/default.nix +++ b/default.nix @@ -1,8 +1,7 @@ let pkgs = import { }; rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; -in with pkgs; -with pkgs.stdenv; rec { +in rec { utils = import ./nixos/utils.nix { pkgs = pkgs; rootSrc = rootSrc; # FIXME: remove the need for this @@ -11,8 +10,7 @@ with pkgs.stdenv; rec { test = utils.test [ utils.formatNix (utils.shellcheck ".*(encrypted|os-installation.sh).*") - # subtasks.fixme + (utils.fixme [ "default.nix" "utils.nix" ]) # subtasks.uniqueFeeds - # subtasks.formatNix ]; } diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh index 0936f94..519ee5a 100644 --- a/nixos/os-installation.sh +++ b/nixos/os-installation.sh @@ -24,7 +24,6 @@ systemctl start display-manager # Change keyboard to pt_BR layout: loadkeys br-abnt2 -# FIXME: make it declarative # Format disk: gdisk /dev/nvme0n1 # disk found using lsblk diff --git a/nixos/utils.nix b/nixos/utils.nix index 30110a4..4a1b8fd 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -40,24 +40,27 @@ in rec { touch $out ''; }); - - fixme = baseTask.overrideAttrs (baseAttrs: { + fixme = ignoredFiles: + baseTask.overrideAttrs (baseAttrs: rec { name = "${baseAttrs.name}-fixme"; buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; + ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" + (if ignoredFiles == null then [ + "default.nix" + "TODOs.org" + ] else + ignoredFiles); buildPhase = '' - ag FIXME --ignore default.nix || { + ag FIXME ${ignoredPattern} || { touch $out exit 0 } - echo "^^^^^^^^^^^^^^^^^" - echo " Found dangling FIXME markers on the project xp" + echo " Found dangling FIXME markers on the project." exit 1 ''; }); - test = testDerivations: baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-test"; buildPhase = '' echo "Ran tests for:" diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 00b3a8a..a964d67 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -3,7 +3,6 @@ name: annex windows: - annex+dotfiles: root: ~/annex/ - # FIXME layout: main-vertical panes: - misc: -- cgit v1.2.3 From 2af311e26a4727866242ce897927f93f56a805fb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:13:03 -0300 Subject: Restore subtasks.uniqueFeed derivation --- default.nix | 16 +++++++++++++++- nixos/utils.nix | 46 ---------------------------------------------- 2 files changed, 15 insertions(+), 47 deletions(-) diff --git a/default.nix b/default.nix index 8cd6397..b138123 100644 --- a/default.nix +++ b/default.nix @@ -2,6 +2,20 @@ let pkgs = import { }; rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; in rec { + subtasks = rec { + uniqueFeeds = utils.baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-unique-feeds"; + buildPhase = '' + OUT="$(uniq -D <(sort ./newsboat/urls))" + [[ $OUT = "" ]] || { + echo "Duplicate subscriptions found in ./newsboat/urls:" + echo "$OUT" + exit 1 + } + touch $out + ''; + }); + }; utils = import ./nixos/utils.nix { pkgs = pkgs; rootSrc = rootSrc; # FIXME: remove the need for this @@ -11,6 +25,6 @@ in rec { utils.formatNix (utils.shellcheck ".*(encrypted|os-installation.sh).*") (utils.fixme [ "default.nix" "utils.nix" ]) - # subtasks.uniqueFeeds + subtasks.uniqueFeeds ]; } diff --git a/nixos/utils.nix b/nixos/utils.nix index 4a1b8fd..06a7e55 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -72,49 +72,3 @@ in rec { ''; }); } - -# subtasks = rec { -# shellcheck = baseTask.overrideAttrs(baseAttrs: { -# name = "${baseAttrs.name}-shellcheck"; -# buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; -# buildPhase = '' -# export SHELLCHECK_OPTS="-e SC1090 -e SC1091 -e SC2139" -# ignored='(encrypted|os-installation.sh|notmuch-post.sh)' -# find . -type f -name '*.sh' | grep -E -v $ignored | xargs shellcheck -# touch $out -# ''; -# }); -# fixme = baseTask.overrideAttrs(baseAttrs: { -# name = "${baseAttrs.name}-fixme"; -# buildInputs = baseAttrs.buildInputs ++ [ ag ]; -# buildPhase = '' -# ag FIXME --ignore default.nix || { -# touch $out -# } -# ''; -# }); -# uniqueFeeds = baseTask.overrideAttrs (baseAttrs: { -# name = "${baseAttrs.name}-unique-feeds"; -# buildPhase = '' -# OUT="$(uniq -D <(sort ./newsboat/urls))" -# [[ $OUT = "" ]] || { -# echo "Duplicate subscriptions found in ./newsboat/urls:" -# echo "$OUT" -# exit 1 -# } -# touch $out -# ''; -# }); -# formatNix = baseTask.overrideAttrs (baseAttrs: { -# name = "${baseAttrs.name}-nixfmt"; -# buildInputs = baseAttrs.buildInputs ++ [nixfmt]; -# buildPhase = '' -# diff <(nixfmt < default.nix) default.nix || { -# echo "The default.nix is unformatted. To fix it, run:" -# echo " nixfmt default.nix" -# exit 1 -# } -# touch $out -# ''; -# }); -# }; -- cgit v1.2.3 From 80d11afbbc0826df593e93d7b0d2bb904362f9ff Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:13:43 -0300 Subject: Remove default value of rootSrc --- default.nix | 2 +- nixos/utils.nix | 5 ++--- 2 files changed, 3 insertions(+), 4 deletions(-) diff --git a/default.nix b/default.nix index b138123..42dc0f0 100644 --- a/default.nix +++ b/default.nix @@ -18,7 +18,7 @@ in rec { }; utils = import ./nixos/utils.nix { pkgs = pkgs; - rootSrc = rootSrc; # FIXME: remove the need for this + src = rootSrc; baseName = "dotfiles"; }; test = utils.test [ diff --git a/nixos/utils.nix b/nixos/utils.nix index 06a7e55..6aea0dc 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -1,12 +1,11 @@ -{ pkgs, rootSrc ? pkgs.nix-gitignore.gitignoreSource [ ] ./., baseName }: +{ pkgs, src, baseName }: let nixfmt = import (builtins.fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; - in rec { baseTask = pkgs.stdenv.mkDerivation { name = "${baseName}-task"; - src = rootSrc; + src = src; buildInputs = [ ]; phases = "unpackPhase buildPhase"; buildPhase = '' -- cgit v1.2.3 From 3d597496423522d36db7caaf7684056cc1692e06 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:30:05 -0300 Subject: TODOs.org --- TODOs.org | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 6934bb4..6403bbf 100644 --- a/TODOs.org +++ b/TODOs.org @@ -23,7 +23,8 @@ Add =publishScript= derivation and run it in builds.sr.ht. **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup ** TODO Automate setup of =builds.sr.ht= for other projects -*** TODO Add =utils.nix= with common derivations +*** DONE Add =utils.nix= with common derivations +CLOSED: [2019-05-30 Thu 23:16] *** TODO Generate yaml from Dhall ** TODO Remove borg content from repository ** TODO Remove encrypted files from repository -- cgit v1.2.3 From e3c6aba94e7a162aa5f1b8b0a7658081cab6687a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:40:57 -0300 Subject: Publish contents for public/ folder --- .build.yml | 7 +++++++ TODOs.org | 9 +++++---- bash/fake-symlinks.sh | 2 +- default.nix | 8 ++++++++ env.sh | 6 ++++++ nixos/utils.nix | 12 ++++++++++++ public/configuration.nix | 1 + public/hardware-configuration.nix | 1 + public/install-nixos.sh | 7 +++++++ 9 files changed, 48 insertions(+), 5 deletions(-) create mode 100644 env.sh create mode 120000 public/configuration.nix create mode 120000 public/hardware-configuration.nix create mode 100644 public/install-nixos.sh diff --git a/.build.yml b/.build.yml index b5dc46d..7340c4f 100644 --- a/.build.yml +++ b/.build.yml @@ -7,7 +7,14 @@ triggers: to: EuAndreh sources: - https://git.sr.ht/~euandreh/dotfiles +secrets: + - 7159f943-811f-402d-bb6d-37cd764dc728 tasks: - tests: | cd dotfiles/ nix-build -A test + - docs: | + cd dotfiles/ + nix-build -A publishScript + source env.sh + ./result/bin/publish.sh diff --git a/TODOs.org b/TODOs.org index 6403bbf..70cf504 100644 --- a/TODOs.org +++ b/TODOs.org @@ -7,17 +7,18 @@ Create =burn-nixos.sh= with something like: NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-graphical-19.03.172764.50d5d73e22b-x86_64-linux.iso' burn-nixos.sh "$NIXOS_URL" /dev/sdb #+END_SOURCE -*** TODO Installation phase -**** TODO Make disk partitioning declarative -**** TODO Choose proper tool +*** DOING Installation phase +**** DOING Choose proper tool =fdisk=? =gdisk=? =gparted=? Why? Why not? +**** TODO Make disk partitioning declarative **** TODO Always use UEFI and GPT (which I think is better) **** TODO Parameterize the disk to be partitioned So I can give the installation script an argument and reuse later on the program. Something like: #+BEGIN_SOURCE shell $ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda #+END_SOURCE -**** TODO Publish =install-nixos.sh= in CI run +**** DONE Publish =install-nixos.sh= in CI run +CLOSED: [2019-05-30 Thu 23:42] Add =publishScript= derivation and run it in builds.sr.ht. *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 55ec8d4..06f1243 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -5,7 +5,7 @@ if [[ -n "$GITHUB_TOKEN" ]]; then fi -SRHT_REPOS=(website cement) +SRHT_REPOS=(website cement dotfiles) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do diff --git a/default.nix b/default.nix index 42dc0f0..1418ecb 100644 --- a/default.nix +++ b/default.nix @@ -15,6 +15,13 @@ in rec { touch $out ''; }); + docs = utils.baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-docs"; + buildPhase = '' + mkdir $out + cp -Lr public/* $out/ + ''; + }); }; utils = import ./nixos/utils.nix { pkgs = pkgs; @@ -27,4 +34,5 @@ in rec { (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; + publishScript = utils.publishScript subtasks.docs; } diff --git a/env.sh b/env.sh new file mode 100644 index 0000000..60a9d60 --- /dev/null +++ b/env.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +export SERVER_URL=root@euandre.org +export DOCS_SERVER_PATH="/home/user-data/www/default/dotfiles/" diff --git a/nixos/utils.nix b/nixos/utils.nix index 6aea0dc..7c76882 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -70,4 +70,16 @@ in rec { touch $out ''; }); + publishScript = docsDerivation: pkgs.writeShellScriptBin "publish.sh" '' + set -euo pipefail + ${pkgs.rsync}/bin/rsync --verbose \ + --copy-links \ + --progress \ + --stats \ + --update \ + --recursive \ + --rsh="ssh -o StrictHostKeyChecking=no" \ + ${docsDerivation}/ \ + "$SERVER_URL:$DOCS_SERVER_PATH" + ''; } diff --git a/public/configuration.nix b/public/configuration.nix new file mode 120000 index 0000000..f0b535b --- /dev/null +++ b/public/configuration.nix @@ -0,0 +1 @@ +../nixos/configuration.nix \ No newline at end of file diff --git a/public/hardware-configuration.nix b/public/hardware-configuration.nix new file mode 120000 index 0000000..6ebf69f --- /dev/null +++ b/public/hardware-configuration.nix @@ -0,0 +1 @@ +../nixos/hardware-configuration.nix \ No newline at end of file diff --git a/public/install-nixos.sh b/public/install-nixos.sh new file mode 100644 index 0000000..fbb826e --- /dev/null +++ b/public/install-nixos.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# download nix files before starting +# generate local nix-file: get input for hostName + +# fdisk -- cgit v1.2.3 From 1a5c64a4521a5e02ff00cdbc2b2c878b2303aae3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:45:24 -0300 Subject: Exclude notmuch-post.sh from shellcheck analysis --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 1418ecb..36f689a 100644 --- a/default.nix +++ b/default.nix @@ -30,7 +30,7 @@ in rec { }; test = utils.test [ utils.formatNix - (utils.shellcheck ".*(encrypted|os-installation.sh).*") + (utils.shellcheck ".*(encrypted|os-installation.sh|notmuch-post.sh).*") (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; -- cgit v1.2.3 From 84203aa6c0e9f9bf7af3a96703cc9c4954b94085 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 May 2019 23:46:09 -0300 Subject: Format nixos/utils.nix (linter offense) --- nixos/utils.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/utils.nix b/nixos/utils.nix index 7c76882..502615e 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -70,7 +70,8 @@ in rec { touch $out ''; }); - publishScript = docsDerivation: pkgs.writeShellScriptBin "publish.sh" '' + publishScript = docsDerivation: + pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail ${pkgs.rsync}/bin/rsync --verbose \ --copy-links \ -- cgit v1.2.3 From bc196c376339a2a7ac6ce908003821e7fe7d82dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 06:33:30 -0300 Subject: Add orgMkDocs derivation to utils.nix --- default.nix | 10 +++++----- nixos/utils.nix | 16 ++++++++++++++++ 2 files changed, 21 insertions(+), 5 deletions(-) diff --git a/default.nix b/default.nix index 36f689a..abc4694 100644 --- a/default.nix +++ b/default.nix @@ -2,6 +2,11 @@ let pkgs = import { }; rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; in rec { + utils = import ./nixos/utils.nix { + pkgs = pkgs; + src = rootSrc; + baseName = "dotfiles"; + }; subtasks = rec { uniqueFeeds = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-unique-feeds"; @@ -23,11 +28,6 @@ in rec { ''; }); }; - utils = import ./nixos/utils.nix { - pkgs = pkgs; - src = rootSrc; - baseName = "dotfiles"; - }; test = utils.test [ utils.formatNix (utils.shellcheck ".*(encrypted|os-installation.sh|notmuch-post.sh).*") diff --git a/nixos/utils.nix b/nixos/utils.nix index 502615e..e1a339a 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -58,6 +58,22 @@ in rec { exit 1 ''; }); + orgMkDocs = title: baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-docs"; + buildInputs = [pkgs.pandoc pkgs.mkdocs]; + buildPhase = '' + # Convert from org-mode to markdown with pandoc + find docs/ -type f -name '*.org' -print0 | xargs -0 -I{} pandoc -o {}.md {}.org + + # Give the generated markdown files to MkDocs + mkdocs build + + # Build remaining one-off files + pandoc README.org -o site/index.html --css docs/README.css --to=html5 --self-contained --metadata title="${title}" + + mv site/ $out/ + ''; + }); test = testDerivations: baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-test"; -- cgit v1.2.3 From 623f4482eeec94693e7aeecdc639afb6204da9f2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 06:33:52 -0300 Subject: cp utils.nix in fake-symlinks.sh --- bash/fake-symlinks.sh | 5 +---- utils.nix | 1 + 2 files changed, 2 insertions(+), 4 deletions(-) create mode 120000 utils.nix diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 06f1243..42a483b 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -4,15 +4,12 @@ if [[ -n "$GITHUB_TOKEN" ]]; then envsubst < "$DOTFILES/git/gitconfig.ini" > ~/.gitconfig fi - SRHT_REPOS=(website cement dotfiles) SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do REPO="$repo" envsubst < "$DOTFILES/templates/sr-ht-build.yaml" > "$SRHT_REPOS_PATH/$repo/.build.yml" -done - -for repo in "${SRHT_REPOS[@]}"; do + cp "$DOTFILES/nixos/utils.nix" "$SRHT_REPOS_PATH/$repo/utils.nix" if [[ "$repo" != "website" ]]; then REPO="$repo" envsubst < "$DOTFILES/templates/env.sh" > "$SRHT_REPOS_PATH/$repo/env.sh" fi diff --git a/utils.nix b/utils.nix new file mode 120000 index 0000000..f386d80 --- /dev/null +++ b/utils.nix @@ -0,0 +1 @@ +nixos/utils.nix \ No newline at end of file -- cgit v1.2.3 From 935e012aa2aa505f79caad04b1cca7bc39aafca3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 06:48:53 -0300 Subject: Add template.nix as public (published) file --- public/template.nix | 5 +++++ 1 file changed, 5 insertions(+) create mode 100644 public/template.nix diff --git a/public/template.nix b/public/template.nix new file mode 100644 index 0000000..263a69d --- /dev/null +++ b/public/template.nix @@ -0,0 +1,5 @@ +{ + hostName = "$host_name"; + luksDevice = "$device"; + passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/$host_name/password-hash.txt"; +} -- cgit v1.2.3 From 03a9f6965e88f385cfedcd56f6867e34cc97e2bd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 06:49:20 -0300 Subject: Use nix-shell shebang for public/install-nixos.sh --- public/install-nixos.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) mode change 100644 => 100755 public/install-nixos.sh diff --git a/public/install-nixos.sh b/public/install-nixos.sh old mode 100644 new mode 100755 index fbb826e..311205f --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -1,4 +1,6 @@ -#!/usr/bin/env bash +#!/usr/bin/env nix-shell +#!nix-shell --pure -i bash -p bash jq envsubst +# shellcheck shell=bash set -Eeuo pipefail # download nix files before starting -- cgit v1.2.3 From cecc9511bfa7c7173b9375a38d82225a0bd20209 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 06:57:33 -0300 Subject: Format Nix files (linter offense) --- nixos/utils.nix | 27 ++++++++++++++------------- public/template.nix | 3 ++- 2 files changed, 16 insertions(+), 14 deletions(-) diff --git a/nixos/utils.nix b/nixos/utils.nix index e1a339a..704dd56 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -58,22 +58,23 @@ in rec { exit 1 ''; }); - orgMkDocs = title: baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-docs"; - buildInputs = [pkgs.pandoc pkgs.mkdocs]; - buildPhase = '' - # Convert from org-mode to markdown with pandoc - find docs/ -type f -name '*.org' -print0 | xargs -0 -I{} pandoc -o {}.md {}.org + orgMkDocs = title: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-docs"; + buildInputs = [ pkgs.pandoc pkgs.mkdocs ]; + buildPhase = '' + # Convert from org-mode to markdown with pandoc + find docs/ -type f -name '*.org' -print0 | xargs -0 -I{} pandoc -o {}.md {}.org - # Give the generated markdown files to MkDocs - mkdocs build + # Give the generated markdown files to MkDocs + mkdocs build - # Build remaining one-off files - pandoc README.org -o site/index.html --css docs/README.css --to=html5 --self-contained --metadata title="${title}" + # Build remaining one-off files + pandoc README.org -o site/index.html --css docs/README.css --to=html5 --self-contained --metadata title="${title}" - mv site/ $out/ - ''; - }); + mv site/ $out/ + ''; + }); test = testDerivations: baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-test"; diff --git a/public/template.nix b/public/template.nix index 263a69d..b0da84f 100644 --- a/public/template.nix +++ b/public/template.nix @@ -1,5 +1,6 @@ { hostName = "$host_name"; luksDevice = "$device"; - passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/$host_name/password-hash.txt"; + passwordFile = + "/home/andreh/dev/libre/dotfiles/encrypted/$host_name/password-hash.txt"; } -- cgit v1.2.3 From 10119c5f822319bf81fcdf792665bdfef5648185 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 06:58:53 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index 70cf504..c93256e 100644 --- a/TODOs.org +++ b/TODOs.org @@ -34,6 +34,8 @@ Profile =bash/bashrc.sh=. ** TODO Improve README.org ** TODO Automate backup.sh ** TODO Remove =shellcheck disable= directives +** TODO Put commit 50 characters limit +See https://drewdevault.com/2019/02/25/Using-git-with-discipline.html * Nice to have ** TODO Test elfeed * Fixes -- cgit v1.2.3 From 82d81e90b6679bbfd0d732891bc692139a3a6528 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 07:13:45 -0300 Subject: Add USAGE to public/install-nixos.sh --- public/install-nixos.sh | 67 ++++++++++++++++++++++++++++++++++++++++++++++--- public/template.nix | 6 ++--- scripts/burn-nixos.sh | 2 +- 3 files changed, 68 insertions(+), 7 deletions(-) diff --git a/public/install-nixos.sh b/public/install-nixos.sh index 311205f..f5bf321 100755 --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -1,9 +1,70 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst +#!nix-shell --pure -i bash -p bash jq envsubst wget # shellcheck shell=bash set -Eeuo pipefail -# download nix files before starting -# generate local nix-file: get input for hostName +end="\033[0m" + +green() { + green_color="\033[0;32m" + echo -e "${green_color}${1}${end}" +} + +yellow() { + yellow_color="\033[0;33m" + echo -e "${yellow_color}${1}${end}" +} + +blue() { + blue_color="\033[0;34m" + echo -e "${blue_color}${1}${end}" +} + +red() { + red_color="\033[0;31m" + echo -e "${red_color}${1}${end}" +} + +usage() { + red "Missing input argument $1.\n" + cat < + + Arguments + HOST_NAME The networking.hostName of the installation. Something like 'velhinho-nixos'. + DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name. + +Examples: + Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda3' as LUKS device: + wget -O- https://euandre.org/dotfiles/install-nixos.sh | sh -s velhinho-nixos /dev/sda3 +EOF +} + +HOST_NAME="${1:-}" +DEVICE="${2:-}" + +[[ -z "${HOST_NAME}" ]] && { + usage 'HOST_NAME' + exit 2 +} + +[[ -z "${DEVICE}" ]] && { + usage 'DEVICE' + exit 2 +} + +SERVER="https://euandre.org/dotfiles" + +yellow "Downloading Nix files..." +TMP_DIR="$(mktemp -d)" +wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix" +wget -O "${TMP_DIR}/hardware-configuration.nix" "${SERVER}/hardware-configuration.nix" +wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" +green "Done." + +export HOST_NAME +export DEVICE +envsubst < "${TMP_DIR}/template.nix" > /etc/nixos/local-configuration.nix # fdisk diff --git a/public/template.nix b/public/template.nix index b0da84f..5cfc9f8 100644 --- a/public/template.nix +++ b/public/template.nix @@ -1,6 +1,6 @@ { - hostName = "$host_name"; - luksDevice = "$device"; + hostName = "$HOST_NAME"; + luksDevice = "$DEVICE"; passwordFile = - "/home/andreh/dev/libre/dotfiles/encrypted/$host_name/password-hash.txt"; + "/home/andreh/dev/libre/dotfiles/encrypted/$HOST_NAME/password-hash.txt"; } diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh index 85ab9e2..b88ba79 100755 --- a/scripts/burn-nixos.sh +++ b/scripts/burn-nixos.sh @@ -2,7 +2,7 @@ set -Eeuo pipefail usage() { - red "Missing argument $1." + red "Missing argument $1.\n" cat < -- cgit v1.2.3 From 747d01c33d74635570318c68d1cf0671c3de6567 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 19:13:14 -0300 Subject: Use --archive option in rsync inside publishScript derivation --- nixos/utils.nix | 11 ++--------- 1 file changed, 2 insertions(+), 9 deletions(-) diff --git a/nixos/utils.nix b/nixos/utils.nix index 704dd56..1b4d724 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -90,14 +90,7 @@ in rec { publishScript = docsDerivation: pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail - ${pkgs.rsync}/bin/rsync --verbose \ - --copy-links \ - --progress \ - --stats \ - --update \ - --recursive \ - --rsh="ssh -o StrictHostKeyChecking=no" \ - ${docsDerivation}/ \ - "$SERVER_URL:$DOCS_SERVER_PATH" + OUT_DOCS="${docsDerivation}" + ${pkgs.rsync}/bin/rsync -avzP "$OUT_DOCS" "$SERVER_URL:$DOCS_SERVER_PATH" ''; } -- cgit v1.2.3 From bce22a1e2f5c99798484f606eda417f0a3805120 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 19:22:58 -0300 Subject: Disable StrictHostKeyChecking Security implications considerations: Since during the build script we're not copying private data, not performing critical commands or any sensitive actions, the risk of connecting to a spoofed SSH server is minimal. All the files should already be publicly accesible. --- nixos/utils.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/utils.nix b/nixos/utils.nix index 1b4d724..ad5d4a0 100644 --- a/nixos/utils.nix +++ b/nixos/utils.nix @@ -91,6 +91,9 @@ in rec { pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail OUT_DOCS="${docsDerivation}" - ${pkgs.rsync}/bin/rsync -avzP "$OUT_DOCS" "$SERVER_URL:$DOCS_SERVER_PATH" + ${pkgs.rsync}/bin/rsync -avzP + --rsh="ssh -o StrictHostKeyChecking=no" \ + "$OUT_DOCS" \ + "$SERVER_URL:$DOCS_SERVER_PATH" ''; } -- cgit v1.2.3 From 9b49c24016ad2ab2e34cf18ebbb99e84809ce41a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 19:27:27 -0300 Subject: Remove symlink to nixos/utils.nix --- bash/fake-symlinks.sh | 4 +- default.nix | 2 +- nixos/utils.nix | 99 ------------------------------------------------- utils.nix | 100 +++++++++++++++++++++++++++++++++++++++++++++++++- 4 files changed, 103 insertions(+), 102 deletions(-) delete mode 100644 nixos/utils.nix mode change 120000 => 100644 utils.nix diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 42a483b..939f519 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -9,7 +9,9 @@ SRHT_REPOS_PATH="$HOME/dev/libre" for repo in "${SRHT_REPOS[@]}"; do REPO="$repo" envsubst < "$DOTFILES/templates/sr-ht-build.yaml" > "$SRHT_REPOS_PATH/$repo/.build.yml" - cp "$DOTFILES/nixos/utils.nix" "$SRHT_REPOS_PATH/$repo/utils.nix" + if [[ "$repo" != "dotfiles" ]]; then + cp "$DOTFILES/utils.nix" "$SRHT_REPOS_PATH/$repo/utils.nix" + fi if [[ "$repo" != "website" ]]; then REPO="$repo" envsubst < "$DOTFILES/templates/env.sh" > "$SRHT_REPOS_PATH/$repo/env.sh" fi diff --git a/default.nix b/default.nix index abc4694..da5e3f9 100644 --- a/default.nix +++ b/default.nix @@ -2,7 +2,7 @@ let pkgs = import { }; rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; in rec { - utils = import ./nixos/utils.nix { + utils = import ./utils.nix { pkgs = pkgs; src = rootSrc; baseName = "dotfiles"; diff --git a/nixos/utils.nix b/nixos/utils.nix deleted file mode 100644 index ad5d4a0..0000000 --- a/nixos/utils.nix +++ /dev/null @@ -1,99 +0,0 @@ -{ pkgs, src, baseName }: -let - nixfmt = import (builtins.fetchTarball - "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; -in rec { - baseTask = pkgs.stdenv.mkDerivation { - name = "${baseName}-task"; - src = src; - buildInputs = [ ]; - phases = "unpackPhase buildPhase"; - buildPhase = '' - echo "ERROR: base task buildPhase not overriden." - exit 1 - ''; - }; - shellcheck = ignoredFindPattern: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-shellcheck"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; - buildPhase = '' - find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredFindPattern}' \) -print0 | xargs -0 shellcheck - touch $out - ''; - }); - formatNix = baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-nixfmt"; - buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; - buildPhase = '' - format() { - nix_file="$1" - diff <(nixfmt < "$nix_file") "$nix_file" || { - echo "The $nix_file is unformatted. To fix it, run:" - echo " nixfmt $nix_file" - exit 1 - } - } - export -f format - find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" \; - touch $out - ''; - }); - fixme = ignoredFiles: - baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-fixme"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; - ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" - (if ignoredFiles == null then [ - "default.nix" - "TODOs.org" - ] else - ignoredFiles); - buildPhase = '' - ag FIXME ${ignoredPattern} || { - touch $out - exit 0 - } - echo " Found dangling FIXME markers on the project." - exit 1 - ''; - }); - orgMkDocs = title: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-docs"; - buildInputs = [ pkgs.pandoc pkgs.mkdocs ]; - buildPhase = '' - # Convert from org-mode to markdown with pandoc - find docs/ -type f -name '*.org' -print0 | xargs -0 -I{} pandoc -o {}.md {}.org - - # Give the generated markdown files to MkDocs - mkdocs build - - # Build remaining one-off files - pandoc README.org -o site/index.html --css docs/README.css --to=html5 --self-contained --metadata title="${title}" - - mv site/ $out/ - ''; - }); - test = testDerivations: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-test"; - buildPhase = '' - echo "Ran tests for:" - for d in ${builtins.toString testDerivations}; do - echo " $d" - done - echo "All tests passed!" - touch $out - ''; - }); - publishScript = docsDerivation: - pkgs.writeShellScriptBin "publish.sh" '' - set -euo pipefail - OUT_DOCS="${docsDerivation}" - ${pkgs.rsync}/bin/rsync -avzP - --rsh="ssh -o StrictHostKeyChecking=no" \ - "$OUT_DOCS" \ - "$SERVER_URL:$DOCS_SERVER_PATH" - ''; -} diff --git a/utils.nix b/utils.nix deleted file mode 120000 index f386d80..0000000 --- a/utils.nix +++ /dev/null @@ -1 +0,0 @@ -nixos/utils.nix \ No newline at end of file diff --git a/utils.nix b/utils.nix new file mode 100644 index 0000000..ad5d4a0 --- /dev/null +++ b/utils.nix @@ -0,0 +1,99 @@ +{ pkgs, src, baseName }: +let + nixfmt = import (builtins.fetchTarball + "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; +in rec { + baseTask = pkgs.stdenv.mkDerivation { + name = "${baseName}-task"; + src = src; + buildInputs = [ ]; + phases = "unpackPhase buildPhase"; + buildPhase = '' + echo "ERROR: base task buildPhase not overriden." + exit 1 + ''; + }; + shellcheck = ignoredFindPattern: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-shellcheck"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; + buildPhase = '' + find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredFindPattern}' \) -print0 | xargs -0 shellcheck + touch $out + ''; + }); + formatNix = baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-nixfmt"; + buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; + buildPhase = '' + format() { + nix_file="$1" + diff <(nixfmt < "$nix_file") "$nix_file" || { + echo "The $nix_file is unformatted. To fix it, run:" + echo " nixfmt $nix_file" + exit 1 + } + } + export -f format + find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" \; + touch $out + ''; + }); + fixme = ignoredFiles: + baseTask.overrideAttrs (baseAttrs: rec { + name = "${baseAttrs.name}-fixme"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; + ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" + (if ignoredFiles == null then [ + "default.nix" + "TODOs.org" + ] else + ignoredFiles); + buildPhase = '' + ag FIXME ${ignoredPattern} || { + touch $out + exit 0 + } + echo " Found dangling FIXME markers on the project." + exit 1 + ''; + }); + orgMkDocs = title: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-docs"; + buildInputs = [ pkgs.pandoc pkgs.mkdocs ]; + buildPhase = '' + # Convert from org-mode to markdown with pandoc + find docs/ -type f -name '*.org' -print0 | xargs -0 -I{} pandoc -o {}.md {}.org + + # Give the generated markdown files to MkDocs + mkdocs build + + # Build remaining one-off files + pandoc README.org -o site/index.html --css docs/README.css --to=html5 --self-contained --metadata title="${title}" + + mv site/ $out/ + ''; + }); + test = testDerivations: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-test"; + buildPhase = '' + echo "Ran tests for:" + for d in ${builtins.toString testDerivations}; do + echo " $d" + done + echo "All tests passed!" + touch $out + ''; + }); + publishScript = docsDerivation: + pkgs.writeShellScriptBin "publish.sh" '' + set -euo pipefail + OUT_DOCS="${docsDerivation}" + ${pkgs.rsync}/bin/rsync -avzP + --rsh="ssh -o StrictHostKeyChecking=no" \ + "$OUT_DOCS" \ + "$SERVER_URL:$DOCS_SERVER_PATH" + ''; +} -- cgit v1.2.3 From 1d34067b36f3c5d3e873a3578ba715f13ea74bad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 19:36:57 -0300 Subject: Fix missing newline scaping in publishScript --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index ad5d4a0..4b5edd2 100644 --- a/utils.nix +++ b/utils.nix @@ -91,7 +91,7 @@ in rec { pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail OUT_DOCS="${docsDerivation}" - ${pkgs.rsync}/bin/rsync -avzP + ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ "$OUT_DOCS" \ "$SERVER_URL:$DOCS_SERVER_PATH" -- cgit v1.2.3 From edcaf3d023b5a0b680651eb37a9072c8039e113f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 19:47:51 -0300 Subject: rsync outdir content instead of folder --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 4b5edd2..dcf2a03 100644 --- a/utils.nix +++ b/utils.nix @@ -93,7 +93,7 @@ in rec { OUT_DOCS="${docsDerivation}" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ - "$OUT_DOCS" \ + "$OUT_DOCS/" \ "$SERVER_URL:$DOCS_SERVER_PATH" ''; } -- cgit v1.2.3 From 5eef33bca4db857b7748e5d5eb4a20f93f846388 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 19:50:05 -0300 Subject: Add extra explanation on =fixme= derivation error --- utils.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/utils.nix b/utils.nix index dcf2a03..8c63cc9 100644 --- a/utils.nix +++ b/utils.nix @@ -55,6 +55,7 @@ in rec { exit 0 } echo " Found dangling FIXME markers on the project." + echo " You should write them down properly on TODOs.org." exit 1 ''; }); -- cgit v1.2.3 From 0022d95be7c99aa711c16bbc53d358a1fd8c4e08 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 21:04:04 -0300 Subject: Add Bash confirmation before writing local-configuration.nix Taken from: https://stackoverflow.com/questions/1885525/how-do-i-prompt-a-user-for-confirmation-in-bash-script --- public/install-nixos.sh | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/public/install-nixos.sh b/public/install-nixos.sh index f5bf321..b1eb126 100755 --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -63,8 +63,22 @@ wget -O "${TMP_DIR}/hardware-configuration.nix" "${SERVER}/hardware-configuratio wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" green "Done." +yellow "Creating content of '/etc/nixos/local-configuration.nix'..." export HOST_NAME export DEVICE -envsubst < "${TMP_DIR}/template.nix" > /etc/nixos/local-configuration.nix +envsubst < "${TMP_DIR}/template.nix" > "${TMP_DIR}/local-configuration.nix" +blue "$(cat "${TMP_DIR}/local-configuration.nix")" +read -p "Confirm content of '/etc/nixos/local-configuration.nix'? (y/N) " -n 1 -r +echo # Move to a new line +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + red "Unconfirmed content of '/etc/nixos/local-configuration.nix'." + red "Exitting." + exit 1 +fi +green "Done." + +yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." +echo mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix +green "Done." # fdisk -- cgit v1.2.3 From 4d3350af61bdd257caa6ba425360ff78d6e5dc42 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 May 2019 21:44:04 -0300 Subject: TODOs.org --- TODOs.org | 22 ++++++++++++++++------ 1 file changed, 16 insertions(+), 6 deletions(-) diff --git a/TODOs.org b/TODOs.org index c93256e..610a79f 100644 --- a/TODOs.org +++ b/TODOs.org @@ -8,11 +8,18 @@ NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b burn-nixos.sh "$NIXOS_URL" /dev/sdb #+END_SOURCE *** DOING Installation phase -**** DOING Choose proper tool +**** DONE Choose proper tool +CLOSED: [2019-05-31 Fri 21:40] =fdisk=? =gdisk=? =gparted=? Why? Why not? -**** TODO Make disk partitioning declarative -**** TODO Always use UEFI and GPT (which I think is better) -**** TODO Parameterize the disk to be partitioned + +=parted= allows for CLI based interactions instead of interactive only. It also supports GPT partitions, and is a GNU project :) +**** DONE Make disk partitioning declarative +CLOSED: [2019-05-31 Fri 21:40] +Not really declarative, but scripted instead. +**** DONE Always use UEFI and GPT (which I think is better) +CLOSED: [2019-05-31 Fri 21:40] +**** DONE Parameterize the disk to be partitioned +CLOSED: [2019-05-31 Fri 21:41] So I can give the installation script an argument and reuse later on the program. Something like: #+BEGIN_SOURCE shell $ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda @@ -20,13 +27,16 @@ $ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda **** DONE Publish =install-nixos.sh= in CI run CLOSED: [2019-05-30 Thu 23:42] Add =publishScript= derivation and run it in builds.sr.ht. +**** DOING Partition, format and encrypt *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup -** TODO Automate setup of =builds.sr.ht= for other projects +** DONE Automate setup of =builds.sr.ht= for other projects +CLOSED: [2019-05-31 Fri 21:43] *** DONE Add =utils.nix= with common derivations CLOSED: [2019-05-30 Thu 23:16] -*** TODO Generate yaml from Dhall +*** CANCELLED Generate yaml from Dhall +No need, =envsubst= suffices. ** TODO Remove borg content from repository ** TODO Remove encrypted files from repository ** TODO Make creation of a new shell faster -- cgit v1.2.3 From f68daad7db1897fc35ac4c17e5373c72b56db6c6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 09:12:44 -0300 Subject: Add fallback null value to the shelcheck derivation input --- utils.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/utils.nix b/utils.nix index 8c63cc9..fd25021 100644 --- a/utils.nix +++ b/utils.nix @@ -14,11 +14,13 @@ in rec { ''; }; shellcheck = ignoredFindPattern: - baseTask.overrideAttrs (baseAttrs: { + baseTask.overrideAttrs (baseAttrs: rec { name = "${baseAttrs.name}-shellcheck"; buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; + ignoredPattern = + if ignoredFindPattern == null then "" else ignoredFindPattern; buildPhase = '' - find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredFindPattern}' \) -print0 | xargs -0 shellcheck + find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck touch $out ''; }); -- cgit v1.2.3 From c19fadf9062341f8129a8ff83e897cc06f8c2145 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 09:15:26 -0300 Subject: WIP: format, encrypt and partition the disk in install-nixos.sh The LUKS encryption and disk formatting commands are coherent, but the partitionig isn't. I just copied them from the manual to get a rough idea of how it should look like. --- public/install-nixos.sh | 53 +++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 49 insertions(+), 4 deletions(-) diff --git a/public/install-nixos.sh b/public/install-nixos.sh index b1eb126..95030b5 100755 --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -58,9 +58,8 @@ SERVER="https://euandre.org/dotfiles" yellow "Downloading Nix files..." TMP_DIR="$(mktemp -d)" -wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix" -wget -O "${TMP_DIR}/hardware-configuration.nix" "${SERVER}/hardware-configuration.nix" -wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" +wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix" +wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" green "Done." yellow "Creating content of '/etc/nixos/local-configuration.nix'..." @@ -81,4 +80,50 @@ yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." echo mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix green "Done." -# fdisk +yellow "Partitioning '${DEVICE}'..." +# Create a GPT partition table. +parted "${DEVICE}" -- mklabel gpt +# Add the root partition. This will fill the disk except for the end part, where the swap will live, and the space left in front (512MiB) which will be used by the boot partition. +parted "${DEVICE}" -- mkpart primary 512MiB -8GiB +# Add a swap partition of 8GiB. +parted "${DEVICE}" -- mkpart primary linux-swap -8GiB 100% +# Add the boot partition. NixOS by default uses the ESP (EFI system partition) as its /boot partition. It uses the initially reserved 512MiB at the start of the disk. +parted "${DEVICE}" -- mkpart ESP fat32 1MiB 512MiB +parted "${DEVICE}" -- set 3 boot on +green "Done." + +yellow "Configuring LUKS encryption on '${DEVICE}3'..." +cryptsetup luksFormat "${DEVICE}3" +cryptsetup luksOpen "${DEVICE}3" enc-pv +pvcreate /dev/mapper/enc-pv +vgcreate vg /dev/mapper/enc-pv +lvcreate -n swap vg -L 10G +lvcreate -n root vg -l 100%FREE +green "Done." + +yellow "Formatting '${DEVICE}'..." +mkfs.vfat -n BOOT "${DEVICE}2" +mkfs.ext4 -L root /dev/vg/root +mkswap -L swap /dev/vg/swap +green "Done." + +yellow "Mounting and activating swap..." +mount /dev/vg/root /mnt +mkdir /mnt/boot +mount "${DEVICE}2" /mnt/boot +swapon /dev/vg/swap +green "Done." + +yellow "Generating '/etc/nixos/*' Nix files'..." +nixos-generate-config --root /mnt +mv /etc/nixos/configuration.nix /etc/nixos/bkp-configuration.nix +mv "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix +green "Done." + +blue "Now inspect '/etc/nixos/configuration.nix', " +yellow "Installing NixOS!" +nixos-install +green "Done." + +yellow "Rebooting..." +reboot -- cgit v1.2.3 From 4e15cb57fa53a86bef41481bcdd905d87ebc82d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 15:31:59 -0300 Subject: Show if nix-shell is pure or impure in $PS1 --- bash/colors.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/colors.sh b/bash/colors.sh index 68acb06..fba940e 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -105,7 +105,7 @@ if [ $? -eq 0 ]; then \ echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ - echo "\n'$IBlack'~>'$Color_Off' '$Purple'nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ + echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ fi)$(if [[ $GUIX_ENVIRONMENT != "" ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$Purple'guix environment'$Color_Off' ('$BIBlue'$GUIX_ENVIRONMENT'$Color_Off')'$Color_Off'" ;\ fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' -- cgit v1.2.3 From 8e92e2a8e4398c6c46c56eea6752ae1c4ee2077a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:06:56 -0300 Subject: Use sgdisk to automate the creation of partitions --- public/install-nixos.sh | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/public/install-nixos.sh b/public/install-nixos.sh index 95030b5..5f6f8ce 100755 --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -36,8 +36,8 @@ Usage: DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name. Examples: - Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda3' as LUKS device: - wget -O- https://euandre.org/dotfiles/install-nixos.sh | sh -s velhinho-nixos /dev/sda3 + Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: + wget -O- https://euandre.org/dotfiles/install-nixos.sh | sh -s velhinho-nixos /dev/sda EOF } @@ -80,16 +80,15 @@ yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." echo mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix green "Done." -yellow "Partitioning '${DEVICE}'..." -# Create a GPT partition table. -parted "${DEVICE}" -- mklabel gpt -# Add the root partition. This will fill the disk except for the end part, where the swap will live, and the space left in front (512MiB) which will be used by the boot partition. -parted "${DEVICE}" -- mkpart primary 512MiB -8GiB -# Add a swap partition of 8GiB. -parted "${DEVICE}" -- mkpart primary linux-swap -8GiB 100% -# Add the boot partition. NixOS by default uses the ESP (EFI system partition) as its /boot partition. It uses the initially reserved 512MiB at the start of the disk. -parted "${DEVICE}" -- mkpart ESP fat32 1MiB 512MiB -parted "${DEVICE}" -- set 3 boot on +yellow "Wiping '${DEVICE}'and partitioning it..." +wipefs --all --force "${DEVICE}" +sgdisk --clear "${DEVICE}" # Unclear the v +sgdisk --zap-all "${DEVICE}" # order here ^ +sgdisk --mbrtogpt "${DEVICE}" +sgdisk --new 1:2048:4095 --change-name 1:"BIOS boot partition" --typecode 1:EF02 "${DEVICE}" +sgdisk --new 2:4096:1028095 --change-name 2:"EFI System" --typecode 2:EF00 "${DEVICE}" +sgdisk --new 3:1028095:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}" +sgdisk --print "${DEVICE}" green "Done." yellow "Configuring LUKS encryption on '${DEVICE}3'..." -- cgit v1.2.3 From 7ae63ca6930be5042f2b54c3098e9998998c2872 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:27:29 -0300 Subject: Add utillinux to install-nixos.sh installation list In order to include the wipefs program. --- public/install-nixos.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/public/install-nixos.sh b/public/install-nixos.sh index 5f6f8ce..3f0fa81 100755 --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux # shellcheck shell=bash set -Eeuo pipefail @@ -37,7 +37,9 @@ Usage: Examples: Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: - wget -O- https://euandre.org/dotfiles/install-nixos.sh | sh -s velhinho-nixos /dev/sda + curl https://euandre.org/dotfiles/install-nixos.sh > install-nixos.sh + chmod +x install-nixos.sh + ./install-nixos.sh velhinho-nixos /dev/sda EOF } -- cgit v1.2.3 From 59b31b1015a5d018e3132d044340d147e1d0f49b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:27:58 -0300 Subject: TODOs.org --- TODOs.org | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 610a79f..167a4f5 100644 --- a/TODOs.org +++ b/TODOs.org @@ -44,8 +44,10 @@ Profile =bash/bashrc.sh=. ** TODO Improve README.org ** TODO Automate backup.sh ** TODO Remove =shellcheck disable= directives -** TODO Put commit 50 characters limit +** CANCELLED Put commit 50 characters limit See https://drewdevault.com/2019/02/25/Using-git-with-discipline.html + +Couldn't configure it properly right now, no impactul at all on current workflow. * Nice to have ** TODO Test elfeed * Fixes -- cgit v1.2.3 From 1e6dcd188d474a080948b51e69c5f23413a5bac5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:35:48 -0300 Subject: Generate /etc/nixos/password-hash.txt during execution --- public/install-nixos.sh | 15 +++++++++++++-- public/template.nix | 2 +- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/public/install-nixos.sh b/public/install-nixos.sh index 3f0fa81..5e160da 100755 --- a/public/install-nixos.sh +++ b/public/install-nixos.sh @@ -79,7 +79,7 @@ fi green "Done." yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." -echo mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix +mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix green "Done." yellow "Wiping '${DEVICE}'and partitioning it..." @@ -121,7 +121,18 @@ mv /etc/nixos/configuration.nix /etc/nixos/bkp-configuration.nix mv "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix green "Done." -blue "Now inspect '/etc/nixos/configuration.nix', " +yellow "Generating password-hash.txt file for user login..." +while true; do + read -s -p "Password: " password + echo + read -s -p "Password (again): " password_confirmation + echo + [ "$password" = "$password_confirmation" ] && break + red "Please try again" +done +mkpasswd -m sha-512 "$password" > /etc/nixos/password-hash.txt +green "Done." + yellow "Installing NixOS!" nixos-install green "Done." diff --git a/public/template.nix b/public/template.nix index 5cfc9f8..53bb695 100644 --- a/public/template.nix +++ b/public/template.nix @@ -2,5 +2,5 @@ hostName = "$HOST_NAME"; luksDevice = "$DEVICE"; passwordFile = - "/home/andreh/dev/libre/dotfiles/encrypted/$HOST_NAME/password-hash.txt"; + "/etc/nixos/password-hash.txt"; } -- cgit v1.2.3 From 4aaf01ca212d9a2afdad330ffd078abb7a93e166 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:40:02 -0300 Subject: Move NixOS public files into public/nixos/ folder --- public/configuration.nix | 1 - public/hardware-configuration.nix | 1 - public/install-nixos.sh | 141 -------------------------------------- public/nixos/configuration.nix | 1 + public/nixos/install.sh | 141 ++++++++++++++++++++++++++++++++++++++ public/nixos/template.nix | 6 ++ public/template.nix | 6 -- 7 files changed, 148 insertions(+), 149 deletions(-) delete mode 120000 public/configuration.nix delete mode 120000 public/hardware-configuration.nix delete mode 100755 public/install-nixos.sh create mode 120000 public/nixos/configuration.nix create mode 100755 public/nixos/install.sh create mode 100644 public/nixos/template.nix delete mode 100644 public/template.nix diff --git a/public/configuration.nix b/public/configuration.nix deleted file mode 120000 index f0b535b..0000000 --- a/public/configuration.nix +++ /dev/null @@ -1 +0,0 @@ -../nixos/configuration.nix \ No newline at end of file diff --git a/public/hardware-configuration.nix b/public/hardware-configuration.nix deleted file mode 120000 index 6ebf69f..0000000 --- a/public/hardware-configuration.nix +++ /dev/null @@ -1 +0,0 @@ -../nixos/hardware-configuration.nix \ No newline at end of file diff --git a/public/install-nixos.sh b/public/install-nixos.sh deleted file mode 100755 index 5e160da..0000000 --- a/public/install-nixos.sh +++ /dev/null @@ -1,141 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux -# shellcheck shell=bash -set -Eeuo pipefail - -end="\033[0m" - -green() { - green_color="\033[0;32m" - echo -e "${green_color}${1}${end}" -} - -yellow() { - yellow_color="\033[0;33m" - echo -e "${yellow_color}${1}${end}" -} - -blue() { - blue_color="\033[0;34m" - echo -e "${blue_color}${1}${end}" -} - -red() { - red_color="\033[0;31m" - echo -e "${red_color}${1}${end}" -} - -usage() { - red "Missing input argument $1.\n" - cat < - - Arguments - HOST_NAME The networking.hostName of the installation. Something like 'velhinho-nixos'. - DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name. - -Examples: - Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: - curl https://euandre.org/dotfiles/install-nixos.sh > install-nixos.sh - chmod +x install-nixos.sh - ./install-nixos.sh velhinho-nixos /dev/sda -EOF -} - -HOST_NAME="${1:-}" -DEVICE="${2:-}" - -[[ -z "${HOST_NAME}" ]] && { - usage 'HOST_NAME' - exit 2 -} - -[[ -z "${DEVICE}" ]] && { - usage 'DEVICE' - exit 2 -} - -SERVER="https://euandre.org/dotfiles" - -yellow "Downloading Nix files..." -TMP_DIR="$(mktemp -d)" -wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix" -wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" -green "Done." - -yellow "Creating content of '/etc/nixos/local-configuration.nix'..." -export HOST_NAME -export DEVICE -envsubst < "${TMP_DIR}/template.nix" > "${TMP_DIR}/local-configuration.nix" -blue "$(cat "${TMP_DIR}/local-configuration.nix")" -read -p "Confirm content of '/etc/nixos/local-configuration.nix'? (y/N) " -n 1 -r -echo # Move to a new line -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - red "Unconfirmed content of '/etc/nixos/local-configuration.nix'." - red "Exitting." - exit 1 -fi -green "Done." - -yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." -mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix -green "Done." - -yellow "Wiping '${DEVICE}'and partitioning it..." -wipefs --all --force "${DEVICE}" -sgdisk --clear "${DEVICE}" # Unclear the v -sgdisk --zap-all "${DEVICE}" # order here ^ -sgdisk --mbrtogpt "${DEVICE}" -sgdisk --new 1:2048:4095 --change-name 1:"BIOS boot partition" --typecode 1:EF02 "${DEVICE}" -sgdisk --new 2:4096:1028095 --change-name 2:"EFI System" --typecode 2:EF00 "${DEVICE}" -sgdisk --new 3:1028095:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}" -sgdisk --print "${DEVICE}" -green "Done." - -yellow "Configuring LUKS encryption on '${DEVICE}3'..." -cryptsetup luksFormat "${DEVICE}3" -cryptsetup luksOpen "${DEVICE}3" enc-pv -pvcreate /dev/mapper/enc-pv -vgcreate vg /dev/mapper/enc-pv -lvcreate -n swap vg -L 10G -lvcreate -n root vg -l 100%FREE -green "Done." - -yellow "Formatting '${DEVICE}'..." -mkfs.vfat -n BOOT "${DEVICE}2" -mkfs.ext4 -L root /dev/vg/root -mkswap -L swap /dev/vg/swap -green "Done." - -yellow "Mounting and activating swap..." -mount /dev/vg/root /mnt -mkdir /mnt/boot -mount "${DEVICE}2" /mnt/boot -swapon /dev/vg/swap -green "Done." - -yellow "Generating '/etc/nixos/*' Nix files'..." -nixos-generate-config --root /mnt -mv /etc/nixos/configuration.nix /etc/nixos/bkp-configuration.nix -mv "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix -green "Done." - -yellow "Generating password-hash.txt file for user login..." -while true; do - read -s -p "Password: " password - echo - read -s -p "Password (again): " password_confirmation - echo - [ "$password" = "$password_confirmation" ] && break - red "Please try again" -done -mkpasswd -m sha-512 "$password" > /etc/nixos/password-hash.txt -green "Done." - -yellow "Installing NixOS!" -nixos-install -green "Done." - -yellow "Rebooting..." -reboot diff --git a/public/nixos/configuration.nix b/public/nixos/configuration.nix new file mode 120000 index 0000000..8f24f66 --- /dev/null +++ b/public/nixos/configuration.nix @@ -0,0 +1 @@ +../../nixos/configuration.nix \ No newline at end of file diff --git a/public/nixos/install.sh b/public/nixos/install.sh new file mode 100755 index 0000000..5e160da --- /dev/null +++ b/public/nixos/install.sh @@ -0,0 +1,141 @@ +#!/usr/bin/env nix-shell +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux +# shellcheck shell=bash +set -Eeuo pipefail + +end="\033[0m" + +green() { + green_color="\033[0;32m" + echo -e "${green_color}${1}${end}" +} + +yellow() { + yellow_color="\033[0;33m" + echo -e "${yellow_color}${1}${end}" +} + +blue() { + blue_color="\033[0;34m" + echo -e "${blue_color}${1}${end}" +} + +red() { + red_color="\033[0;31m" + echo -e "${red_color}${1}${end}" +} + +usage() { + red "Missing input argument $1.\n" + cat < + + Arguments + HOST_NAME The networking.hostName of the installation. Something like 'velhinho-nixos'. + DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name. + +Examples: + Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: + curl https://euandre.org/dotfiles/install-nixos.sh > install-nixos.sh + chmod +x install-nixos.sh + ./install-nixos.sh velhinho-nixos /dev/sda +EOF +} + +HOST_NAME="${1:-}" +DEVICE="${2:-}" + +[[ -z "${HOST_NAME}" ]] && { + usage 'HOST_NAME' + exit 2 +} + +[[ -z "${DEVICE}" ]] && { + usage 'DEVICE' + exit 2 +} + +SERVER="https://euandre.org/dotfiles" + +yellow "Downloading Nix files..." +TMP_DIR="$(mktemp -d)" +wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix" +wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" +green "Done." + +yellow "Creating content of '/etc/nixos/local-configuration.nix'..." +export HOST_NAME +export DEVICE +envsubst < "${TMP_DIR}/template.nix" > "${TMP_DIR}/local-configuration.nix" +blue "$(cat "${TMP_DIR}/local-configuration.nix")" +read -p "Confirm content of '/etc/nixos/local-configuration.nix'? (y/N) " -n 1 -r +echo # Move to a new line +if [[ ! $REPLY =~ ^[Yy]$ ]]; then + red "Unconfirmed content of '/etc/nixos/local-configuration.nix'." + red "Exitting." + exit 1 +fi +green "Done." + +yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." +mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix +green "Done." + +yellow "Wiping '${DEVICE}'and partitioning it..." +wipefs --all --force "${DEVICE}" +sgdisk --clear "${DEVICE}" # Unclear the v +sgdisk --zap-all "${DEVICE}" # order here ^ +sgdisk --mbrtogpt "${DEVICE}" +sgdisk --new 1:2048:4095 --change-name 1:"BIOS boot partition" --typecode 1:EF02 "${DEVICE}" +sgdisk --new 2:4096:1028095 --change-name 2:"EFI System" --typecode 2:EF00 "${DEVICE}" +sgdisk --new 3:1028095:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}" +sgdisk --print "${DEVICE}" +green "Done." + +yellow "Configuring LUKS encryption on '${DEVICE}3'..." +cryptsetup luksFormat "${DEVICE}3" +cryptsetup luksOpen "${DEVICE}3" enc-pv +pvcreate /dev/mapper/enc-pv +vgcreate vg /dev/mapper/enc-pv +lvcreate -n swap vg -L 10G +lvcreate -n root vg -l 100%FREE +green "Done." + +yellow "Formatting '${DEVICE}'..." +mkfs.vfat -n BOOT "${DEVICE}2" +mkfs.ext4 -L root /dev/vg/root +mkswap -L swap /dev/vg/swap +green "Done." + +yellow "Mounting and activating swap..." +mount /dev/vg/root /mnt +mkdir /mnt/boot +mount "${DEVICE}2" /mnt/boot +swapon /dev/vg/swap +green "Done." + +yellow "Generating '/etc/nixos/*' Nix files'..." +nixos-generate-config --root /mnt +mv /etc/nixos/configuration.nix /etc/nixos/bkp-configuration.nix +mv "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix +green "Done." + +yellow "Generating password-hash.txt file for user login..." +while true; do + read -s -p "Password: " password + echo + read -s -p "Password (again): " password_confirmation + echo + [ "$password" = "$password_confirmation" ] && break + red "Please try again" +done +mkpasswd -m sha-512 "$password" > /etc/nixos/password-hash.txt +green "Done." + +yellow "Installing NixOS!" +nixos-install +green "Done." + +yellow "Rebooting..." +reboot diff --git a/public/nixos/template.nix b/public/nixos/template.nix new file mode 100644 index 0000000..53bb695 --- /dev/null +++ b/public/nixos/template.nix @@ -0,0 +1,6 @@ +{ + hostName = "$HOST_NAME"; + luksDevice = "$DEVICE"; + passwordFile = + "/etc/nixos/password-hash.txt"; +} diff --git a/public/template.nix b/public/template.nix deleted file mode 100644 index 53bb695..0000000 --- a/public/template.nix +++ /dev/null @@ -1,6 +0,0 @@ -{ - hostName = "$HOST_NAME"; - luksDevice = "$DEVICE"; - passwordFile = - "/etc/nixos/password-hash.txt"; -} -- cgit v1.2.3 From 0818219d5608554da0acf9bad00e178612ac245a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:41:19 -0300 Subject: Expose burn-nixos.sh file publicly --- public/nixos/burn.sh | 1 + 1 file changed, 1 insertion(+) create mode 120000 public/nixos/burn.sh diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh new file mode 120000 index 0000000..3b029a1 --- /dev/null +++ b/public/nixos/burn.sh @@ -0,0 +1 @@ +../../scripts/burn-nixos.sh \ No newline at end of file -- cgit v1.2.3 From d276c17a5c9117694217cbb8ac9c0d96ab870394 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:42:37 -0300 Subject: Run read with -r flag (linter offense) Taken from: https://github.com/koalaman/shellcheck/wiki/SC2162 --- public/nixos/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 5e160da..e690f01 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -123,9 +123,9 @@ green "Done." yellow "Generating password-hash.txt file for user login..." while true; do - read -s -p "Password: " password + read -r -s -p "Password: " password echo - read -s -p "Password (again): " password_confirmation + read -r -s -p "Password (again): " password_confirmation echo [ "$password" = "$password_confirmation" ] && break red "Please try again" -- cgit v1.2.3 From 2efa52c57617bb1ad2dc373dd3c35c5e2b0d7353 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:47:16 -0300 Subject: Indent template.nix (linter offense) --- public/nixos/template.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/public/nixos/template.nix b/public/nixos/template.nix index 53bb695..80367df 100644 --- a/public/nixos/template.nix +++ b/public/nixos/template.nix @@ -1,6 +1,5 @@ { hostName = "$HOST_NAME"; luksDevice = "$DEVICE"; - passwordFile = - "/etc/nixos/password-hash.txt"; + passwordFile = "/etc/nixos/password-hash.txt"; } -- cgit v1.2.3 From 4a423a6eceeea9b9d127f16b2825d5e3e1e6e97e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:48:33 -0300 Subject: Add reference to partitioning tutorials --- public/nixos/install.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index e690f01..63aedad 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -83,6 +83,9 @@ mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix green "Done." yellow "Wiping '${DEVICE}'and partitioning it..." +# Derived from: +# https://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html +# https://chris-martin.org/2015/installing-nixos wipefs --all --force "${DEVICE}" sgdisk --clear "${DEVICE}" # Unclear the v sgdisk --zap-all "${DEVICE}" # order here ^ -- cgit v1.2.3 From 50a5fede59f13d6983adc3f431fac438717713f9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 17:59:06 -0300 Subject: Delete existing documentation content in docs derivation --- default.nix | 2 +- utils.nix | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/default.nix b/default.nix index da5e3f9..b6741eb 100644 --- a/default.nix +++ b/default.nix @@ -34,5 +34,5 @@ in rec { (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; - publishScript = utils.publishScript subtasks.docs; + publishScript = utils.overwritingPublishScript subtasks.docs; } diff --git a/utils.nix b/utils.nix index fd25021..a13e0f4 100644 --- a/utils.nix +++ b/utils.nix @@ -90,10 +90,11 @@ in rec { touch $out ''; }); - publishScript = docsDerivation: + overwritingPublishScript = docsDerivation: pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail OUT_DOCS="${docsDerivation}" + ${pkgs.openssh}/bin/ssh "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ "$OUT_DOCS/" \ -- cgit v1.2.3 From 726904507bb97449c5e6cd51ca45a1cb54638e50 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:01:28 -0300 Subject: Fix server URL where to download public files from --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 63aedad..d8df69c 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -56,7 +56,7 @@ DEVICE="${2:-}" exit 2 } -SERVER="https://euandre.org/dotfiles" +SERVER="https://euandre.org/dotfiles/nixos" yellow "Downloading Nix files..." TMP_DIR="$(mktemp -d)" -- cgit v1.2.3 From 6405205ae04ae98e9a61bbd5acbaeedc2957ed5d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:05:32 -0300 Subject: Disable StrictHostKeyCHecking when deleting existing content --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index a13e0f4..3151fec 100644 --- a/utils.nix +++ b/utils.nix @@ -94,7 +94,7 @@ in rec { pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail OUT_DOCS="${docsDerivation}" - ${pkgs.openssh}/bin/ssh "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" + ${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ "$OUT_DOCS/" \ -- cgit v1.2.3 From be3b0db24d13ab28e569d2a8a3380a66eed44657 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:10:22 -0300 Subject: Add gptfdisk to install.sh nix-shell declaration The gptfdisk derivation includes the binary for sgdisk program. --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index d8df69c..30dce86 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk # shellcheck shell=bash set -Eeuo pipefail -- cgit v1.2.3 From 898c6bcf1535aa546d1fadbc3fd2422770097427 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:15:36 -0300 Subject: Fix off-by-one sector region in last sgdisk command --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 30dce86..dcb2147 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -92,7 +92,7 @@ sgdisk --zap-all "${DEVICE}" # order here ^ sgdisk --mbrtogpt "${DEVICE}" sgdisk --new 1:2048:4095 --change-name 1:"BIOS boot partition" --typecode 1:EF02 "${DEVICE}" sgdisk --new 2:4096:1028095 --change-name 2:"EFI System" --typecode 2:EF00 "${DEVICE}" -sgdisk --new 3:1028095:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}" +sgdisk --new 3:1028096:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}" sgdisk --print "${DEVICE}" green "Done." -- cgit v1.2.3 From 5995eab2871c4dde50616f2c055da37d850725ba Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:18:04 -0300 Subject: Add cryptsetup to install.sh nix-shell declaration --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index dcb2147..3c5f138 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup # shellcheck shell=bash set -Eeuo pipefail -- cgit v1.2.3 From 76c0b025ad23107f32df508f5126e0065ac08ccc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:25:16 -0300 Subject: Add lvm2 to install.sh nix-shell declaration The lvm2 derivation includes required binaries such as pvcreate, vgcreate and lvcreate required for configuring logical volumes in the new NixOS laptop's disk. --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 3c5f138..1d0a717 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 # shellcheck shell=bash set -Eeuo pipefail -- cgit v1.2.3 From e222ccafec971380bcc88cfbf84c4749bcb2aba7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:31:26 -0300 Subject: Shutdown instead of rebooting after install.sh runs --- public/nixos/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 1d0a717..2fb995f 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -140,5 +140,5 @@ yellow "Installing NixOS!" nixos-install green "Done." -yellow "Rebooting..." -reboot +yellow "Shutting down..." +shutdown now -- cgit v1.2.3 From 8213d7f4b6e96f860da36b226cc41ba0d741da8e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:38:33 -0300 Subject: Add dosfstools to install.sh nix-shell declaration The dosfstools derivation includes the mkfs.vfat program used inside install.sh. --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 2fb995f..16fbef9 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 dosfstools # shellcheck shell=bash set -Eeuo pipefail -- cgit v1.2.3 From 329bc86a71e32397a131350a7bec26cdaa5a1271 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:44:37 -0300 Subject: WIP: add scripts/mailing-list-import-mbox.sh Still only beginning to work, and only for GNU mailing lists. --- scripts/mailing-list-import-mbox.sh | 88 +++++++++++++++++++++++++++++++++++++ 1 file changed, 88 insertions(+) create mode 100755 scripts/mailing-list-import-mbox.sh diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh new file mode 100755 index 0000000..b0bb8ae --- /dev/null +++ b/scripts/mailing-list-import-mbox.sh @@ -0,0 +1,88 @@ +#!/usr/bin/env bash +#!/usr/bin/env nix-shell +#!nix-shell --pure -i bash -p bash +# shellcheck shell=bash +set -Eeuo pipefail + +MAILING_LIST_NAME="${1:-}" +GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' +OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" +TMP_DIR="$HOME/tmp/mbox-import/" +usage() { + cat < "${MAILING_LIST_NAME}.all.mbox" + mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" + popd +} + +google_groups_import() { + echo "google groups ${MAILING_LIST_NAME}" +} + +main() { + [[ -z "${MAILING_LIST_NAME}" ]] && { + red "Missing input argument MAILING_LIST_NAME.\n" + usage + exit 2 + } + + echo "(1) - GNU mailing lists (lists.gnu.org)" + echo "(2) - Google Groups" + read -p "Which type of mailing list do you want to import? " -n 1 -r + echo # Move to a new line + case "$REPLY" in + "1") + gnu_mailing_list_import + ;; + "2") + google_groups_import + ;; + *) + red "Unsupported mailing list type." + red "Exitting." + usage + exit 2 + ;; + esac +} + +main "$@" + +# notmuch search --output=files tag:spam \ + # and not folder:${PREFIX}junk \ + # and not folder:${PREFIX}greyspam \ + # and not folder:Koumbit/INBOX \ + # and not path:Koumbit/** \ + # | while read file; do +# mv "$file" "$HOME/Maildir/${PREFIX}junk/cur" +# done + + +# notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" + + + +# https://julien.danjou.info/why-notmuch-is-not-much-good/ +# https://www.reddit.com/r/emacs/comments/6z13yw/notmuch_vs_imap_and_sieve/ +# https://anarc.at/blog/2016-05-12-email-setup/ +# https://duckduckgo.com/?q=notmuch+sieve&t=ffab&atb=v166-1&ia=web -- cgit v1.2.3 From 670e137b5a7c5ccdf0915a8bf4796b8ae7adfad3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:45:59 -0300 Subject: TODOs.org --- TODOs.org | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/TODOs.org b/TODOs.org index 167a4f5..6b32d7c 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,5 +1,5 @@ * Tasks -** TODO Simplify the installation of NixOS +** DOING Simplify the installation of NixOS *** DONE Preparation phase CLOSED: [2019-05-30 Thu 20:17] Create =burn-nixos.sh= with something like: @@ -31,23 +31,29 @@ Add =publishScript= derivation and run it in builds.sr.ht. *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup -** DONE Automate setup of =builds.sr.ht= for other projects +** NEXT Workflow improvement +*** NEXT Finish importing mailing list emails +*** TODO Automate backup.sh +*** DONE Automate setup of =builds.sr.ht= for other projects CLOSED: [2019-05-31 Fri 21:43] -*** DONE Add =utils.nix= with common derivations +**** DONE Add =utils.nix= with common derivations CLOSED: [2019-05-30 Thu 23:16] -*** CANCELLED Generate yaml from Dhall -No need, =envsubst= suffices. -** TODO Remove borg content from repository -** TODO Remove encrypted files from repository -** TODO Make creation of a new shell faster -Profile =bash/bashrc.sh=. -** TODO Improve README.org -** TODO Automate backup.sh -** TODO Remove =shellcheck disable= directives -** CANCELLED Put commit 50 characters limit +**** CANCELLED Generate yaml from Dhall +No need, =envsubst= suffice +*** CANCELLED Put commit 50 characters limit See https://drewdevault.com/2019/02/25/Using-git-with-discipline.html Couldn't configure it properly right now, no impactul at all on current workflow. +** TODO Guix System +*** TODO Create =burn.sh=, =install.sh= and =setup.sh= =guix= installation scripts +*** TODO Consider using Btrfs? Why? Why not? +** TODO House keeping +*** TODO Remove borg content from repository +*** TODO Remove encrypted files from repository +*** TODO Make creation of a new shell faster +Profile =bash/bashrc.sh=. +*** TODO Improve README.org +*** TODO Remove =shellcheck disable= directives * Nice to have ** TODO Test elfeed * Fixes -- cgit v1.2.3 From 03532e9ebf27191bd1cfe3475651b523f6ca319e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:51:37 -0300 Subject: Add e2fsprogs to install.sh nix-shell declaration The e2fsprogs derivation includes the mkfs.ext4 program used by install.sh. --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 16fbef9..ca18a01 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 dosfstools +#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 dosfstools e2fsprogs # shellcheck shell=bash set -Eeuo pipefail -- cgit v1.2.3 From 04d3e1f241f1d9c26761e7f7ac3ddbb44d62d172 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 18:53:05 -0300 Subject: TODOs.org --- TODOs.org | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TODOs.org b/TODOs.org index 6b32d7c..378c33e 100644 --- a/TODOs.org +++ b/TODOs.org @@ -28,6 +28,10 @@ $ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda CLOSED: [2019-05-30 Thu 23:42] Add =publishScript= derivation and run it in builds.sr.ht. **** DOING Partition, format and encrypt +**** TODO Properly document (in README?) how to connect to the internet +#+BEGIN_SOURCE bash +$ wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) +#+END_SOURCE *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup -- cgit v1.2.3 From f5bce0c2ad5a15cf8e4be858ee920f84cc0bdb1e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 19:12:33 -0300 Subject: Add mkpasswd to install.sh nix-shell declaration Also don't run install.sh with the --pure flag, as it needs to run commands such as nixos-generate-config. --- public/nixos/install.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index ca18a01..b0329e4 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 dosfstools e2fsprogs +#!nix-shell -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 dosfstools e2fsprogs mkpasswd # shellcheck shell=bash set -Eeuo pipefail -- cgit v1.2.3 From afc738d6b67f1cdd0326daa05897943152d8584d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 19:13:16 -0300 Subject: TODOs.org --- TODOs.org | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 378c33e..42e9f52 100644 --- a/TODOs.org +++ b/TODOs.org @@ -30,7 +30,10 @@ Add =publishScript= derivation and run it in builds.sr.ht. **** DOING Partition, format and encrypt **** TODO Properly document (in README?) how to connect to the internet #+BEGIN_SOURCE bash -$ wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) +wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) +curl https://euandre.org/dotfiles/nixos/install.sh > install.sh +chmod +x ./install.sh +./install.sh #+END_SOURCE *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages -- cgit v1.2.3 From 7ad1253bbe78a845035aabd0c9aab1da6c87d7b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 19:18:01 -0300 Subject: Fix reference to install.sh URL --- public/nixos/install.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index b0329e4..ccb2278 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -37,9 +37,9 @@ Usage: Examples: Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: - curl https://euandre.org/dotfiles/install-nixos.sh > install-nixos.sh - chmod +x install-nixos.sh - ./install-nixos.sh velhinho-nixos /dev/sda + curl https://euandre.org/dotfiles/nixos/install.sh > install.sh + chmod +x install.sh + ./install.sh velhinho-nixos /dev/sda EOF } -- cgit v1.2.3 From 1b1c29a4b898312b28cae4eb60ad2824032c9592 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 20:08:04 -0300 Subject: Use /mnt as installation root --- public/nixos/install.sh | 12 ++++-------- 1 file changed, 4 insertions(+), 8 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index ccb2278..211f0f7 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -78,10 +78,6 @@ if [[ ! $REPLY =~ ^[Yy]$ ]]; then fi green "Done." -yellow "Moving presented content to '/etc/nixos/local-configuration.nix'..." -mv "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix -green "Done." - yellow "Wiping '${DEVICE}'and partitioning it..." # Derived from: # https://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html @@ -118,10 +114,10 @@ mount "${DEVICE}2" /mnt/boot swapon /dev/vg/swap green "Done." -yellow "Generating '/etc/nixos/*' Nix files'..." +yellow "Generating '/mnt/etc/nixos/*' Nix files'..." nixos-generate-config --root /mnt -mv /etc/nixos/configuration.nix /etc/nixos/bkp-configuration.nix -mv "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix +mv "${TMP_DIR}/configuration.nix" /mnt/etc/nixos/configuration.nix +mv "${TMP_DIR}/local-configuration.nix" /mnt/etc/nixos/local-configuration.nix green "Done." yellow "Generating password-hash.txt file for user login..." @@ -133,7 +129,7 @@ while true; do [ "$password" = "$password_confirmation" ] && break red "Please try again" done -mkpasswd -m sha-512 "$password" > /etc/nixos/password-hash.txt +mkpasswd -m sha-512 "$password" > /mnt/etc/nixos/password-hash.txt green "Done." yellow "Installing NixOS!" -- cgit v1.2.3 From 07543eb8898a59ef9a6ffbc2e2b9605439c56d0a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 20:16:29 -0300 Subject: Fix luksDevice interpolation in template.nix --- public/nixos/template.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/nixos/template.nix b/public/nixos/template.nix index 80367df..c44ab60 100644 --- a/public/nixos/template.nix +++ b/public/nixos/template.nix @@ -1,5 +1,5 @@ { - hostName = "$HOST_NAME"; - luksDevice = "$DEVICE"; + hostName = "${HOST_NAME}"; + luksDevice = "${DEVICE}3"; passwordFile = "/etc/nixos/password-hash.txt"; } -- cgit v1.2.3 From eb9770006a5c2c539b26c22463ab89681e788389 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 20:23:07 -0300 Subject: Remove with pkgs; usage from configuration.nix --- nixos/configuration.nix | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 805413b..601dcf5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -69,16 +69,16 @@ in { # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; # }) {}; - timidityWithEvenMoreFormats = with pkgs; - timidity.overrideAttrs (oldAttrs: { + timidityWithEvenMoreFormats = + pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; - buildInputs = oldAttrs.buildInputs ++ [ libogg libvorbis flac ]; + buildInputs = oldAttrs.buildInputs ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet-full = with pkgs; - quodlibet-full.overrideAttrs (oldAttrs: { + untested-quodlibet-full = + pkgs.quodlibet-full.overrideAttrs (oldAttrs: { doInstallCheck = false; doCheck = false; }); -- cgit v1.2.3 From 91e1212d4ba183c6426d8d751edaecb3d5db4904 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 20:23:25 -0300 Subject: Duplicate Nix files from /etc/nixos/* to /mnt/etc/nixos/ The /etc/nixos/ path is temporary, and vanishes once the computer is rebooted after finishing the installation. However, the Nix files downloaded by install.sh point to /etc/nixos/, and they will be afterwards be symlinked to the files in this git repository. This prevents me from using relative paths like ./hardware-configuration.nix or similar. The duplicate files are there to support building the OS during the installation phase (the nixos-install command) without needing to make it generic for everyday usage. --- public/nixos/install.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 211f0f7..f2b1abe 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -116,8 +116,11 @@ green "Done." yellow "Generating '/mnt/etc/nixos/*' Nix files'..." nixos-generate-config --root /mnt -mv "${TMP_DIR}/configuration.nix" /mnt/etc/nixos/configuration.nix -mv "${TMP_DIR}/local-configuration.nix" /mnt/etc/nixos/local-configuration.nix +cp /mnt/etc/nixos/hardware-configuration.nix /etc/nixos/hardware-configuration.nix +cp "${TMP_DIR}/configuration.nix" /mnt/etc/nixos/configuration.nix +cp "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix +cp "${TMP_DIR}/local-configuration.nix" /mnt/etc/nixos/local-configuration.nix +cp "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix green "Done." yellow "Generating password-hash.txt file for user login..." @@ -130,6 +133,7 @@ while true; do red "Please try again" done mkpasswd -m sha-512 "$password" > /mnt/etc/nixos/password-hash.txt +cp /mnt/etc/nixos/password-hash.txt /etc/nixos/password-hash.txt green "Done." yellow "Installing NixOS!" -- cgit v1.2.3 From eabe67dcbfa17d2571d41d275c8f4aed6ed4831b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 21:02:20 -0300 Subject: Move scripts/burn-nixos.sh -> public/nixos/burn.sh --- public/nixos/burn.sh | 49 ++++++++++++++++++++++++++++++++++++++++++++++++- scripts/burn-nixos.sh | 4 ++-- 2 files changed, 50 insertions(+), 3 deletions(-) mode change 120000 => 100755 public/nixos/burn.sh mode change 100755 => 100644 scripts/burn-nixos.sh diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh deleted file mode 120000 index 3b029a1..0000000 --- a/public/nixos/burn.sh +++ /dev/null @@ -1 +0,0 @@ -../../scripts/burn-nixos.sh \ No newline at end of file diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh new file mode 100755 index 0000000..85ce6cd --- /dev/null +++ b/public/nixos/burn.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +usage() { + red "Missing argument $1.\n" + cat < + + Arguments: + NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html + USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. + +Examples: + Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: + NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' + burn.sh "\$NIXOS_URL" /dev/sdb +EOF +} + +NIXOS_URL="${1:-}" +USB_STICK="${2:-}" +ISO_PATH='/tmp/nixos.iso' + +[[ -z "${NIXOS_URL}" ]] && { + usage 'NIXOS_URL' + exit 2 +} + +[[ -z "${USB_STICK}" ]] && { + usage 'USB_STICK' + exit 2 +} + +yellow "Downloading NixOS ISO..." +wget -cO "${ISO_PATH}" "${NIXOS_URL}" +wget -cO "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" +diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { + red "SHA256 didn't match!" + exit 1 +} +green "Done. SHA256 match." + +yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." +umount "${USB_STICK}1" ||: +blue "$(du -hs /tmp/nixos.iso)" +sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress +green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh old mode 100755 new mode 100644 index b88ba79..85ce6cd --- a/scripts/burn-nixos.sh +++ b/scripts/burn-nixos.sh @@ -5,7 +5,7 @@ usage() { red "Missing argument $1.\n" cat < + burn.sh Arguments: NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html @@ -14,7 +14,7 @@ Usage: Examples: Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' - burn-nixos.sh "\$NIXOS_URL" /dev/sdb + burn.sh "\$NIXOS_URL" /dev/sdb EOF } -- cgit v1.2.3 From 53eddee83584bc611d25a07975b84e45bcb3dcf2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 21:04:26 -0300 Subject: TODOs.org --- TODOs.org | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/TODOs.org b/TODOs.org index 42e9f52..263c257 100644 --- a/TODOs.org +++ b/TODOs.org @@ -38,6 +38,12 @@ chmod +x ./install.sh *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup +*** TODO Document the discrete three step phases +Put all of this on the README for future easy access. +**** Steps +1. Preparing the USB stick; +2. Performing a fresh install; +3. Bootstraping the new installation's configuration and data. ** NEXT Workflow improvement *** NEXT Finish importing mailing list emails *** TODO Automate backup.sh -- cgit v1.2.3 From 8a8ce183a776cfa0a53e8e9ad291892688e70f1a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 21:06:05 -0300 Subject: Delete nixos/os-installation.sh It's content were fully replaced by public/nixos/burn.sh and public/nixos/install.sh. Both are already accessible online (through https://euandre.org/dotfiles/nixos/burn.sh). --- default.nix | 2 +- nixos/os-installation.sh | 114 ----------------------------------------------- 2 files changed, 1 insertion(+), 115 deletions(-) delete mode 100644 nixos/os-installation.sh diff --git a/default.nix b/default.nix index b6741eb..abaa531 100644 --- a/default.nix +++ b/default.nix @@ -30,7 +30,7 @@ in rec { }; test = utils.test [ utils.formatNix - (utils.shellcheck ".*(encrypted|os-installation.sh|notmuch-post.sh).*") + (utils.shellcheck ".*(encrypted|notmuch-post.sh).*") (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; diff --git a/nixos/os-installation.sh b/nixos/os-installation.sh deleted file mode 100644 index 519ee5a..0000000 --- a/nixos/os-installation.sh +++ /dev/null @@ -1,114 +0,0 @@ -# Use GUI: it handles Wifi better! - -# Check the devices and it's partitions: -lsblk # to check the device names and sizes - -# If under /dev/sdc and mounted: -sudo umount /dev/sdc1 - -# Put the OS image on the USB stick: -sudo dd if=nixos.iso of=/dev/sdc # - - -# Derived from: -# https://www.maketecheasier.com/nixos-review/ -# https://chris-martin.org/2015/installing-nixos - -# First, get an internet connection. -# The easiest way is to start the GUI and use the network manager applet: -systemctl start display-manager -# If the ISO doesn't contain GUI, try getting an internet connection either by using an ethernet cable or using =wpa_supplicant=: -# https://wiki.archlinux.org/index.php/WPA_supplicant -# wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) - -# Change keyboard to pt_BR layout: -loadkeys br-abnt2 - -# Format disk: -gdisk /dev/nvme0n1 # disk found using lsblk - -# START Steps within gdisk - -d # first, delete all partitions with `d` -o # create a new GUID partition table (GPT) - -## Create the BIOS boot partition -n # create new partition -1 # partition number -ENTER # use default first sector -+1M # partition size of 1MB -EF02 # set partition type to "BIOS boot partition" - -## Create the EFI System Partition -n # create new partition -2 # partition number -ENTER # use default first sector -+500M # partition size of 500MB -EF00 # set partition type to "EFI System" - -## Create the Linux LVM (where LUKS goes) -n # create new partition -3 # partition number -ENTER # use default first sector -ENTER # partition size is the remaining of the disk -8E00 # set partition type to "Linux LVM" - -w -# END Steps within gdisk - -cryptsetup luksFormat /dev/nvme0n1p3 # Initialize the encrypted partition -cryptsetup luksOpen /dev/nvme0n1p3 enc-pv # Open encrypted partition volume - -pvcreate /dev/mapper/enc-pv -vgcreate vg /dev/mapper/enc-pv -lvcreate -n swap vg -L 10G -lvcreate -n root vg -l 100%FREE - -mkfs.vfat -n BOOT /dev/nvme0n1p2 -mkfs.ext4 -L root /dev/vg/root -mkswap -L swap /dev/vg/swap - -mount /dev/vg/root /mnt -mkdir /mnt/boot -mount /dev/nvme0n1p2 /mnt/boot -swapon /dev/vg/swap - -nixos-generate-config --root /mnt - -# START Edit NixOS configuration file -vi /mnt/etc/nixos/configuration.nix - -# System configuration: -boot.initrd.luks.devices = [ - { - name = "root"; - device = "/dev/sda3"; - preLVM = true; - } -]; -boot.loader.grub.device = "/dev/sda"; - -# Initial package set: -enviroment.systemPackages = with pkgs; [ - wget - vim -] - -# END - -nixos-install - -# OS will prompt for root UNIX password - -reboot - - -C-M- - useradd -m andreh - passwd andreh - # Setup UNIX password (for andreh) - - sudo vi /etc/sudoers - # START Add the following line below the `root` line - andreh ALL=(ALL) ALL - # END -- cgit v1.2.3 From 9a282c236549a4ba430a7cd278aa0b22378bd43a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 21:09:20 -0300 Subject: Format nixos/configuration.nix (linter offense) --- nixos/configuration.nix | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 601dcf5..2990a33 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -69,16 +69,15 @@ in { # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; # }) {}; - timidityWithEvenMoreFormats = - pkgs.timidity.overrideAttrs (oldAttrs: { + timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; - buildInputs = oldAttrs.buildInputs ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; + buildInputs = oldAttrs.buildInputs + ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet-full = - pkgs.quodlibet-full.overrideAttrs (oldAttrs: { + untested-quodlibet-full = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { doInstallCheck = false; doCheck = false; }); -- cgit v1.2.3 From bc97525d576ead85ddf11a15b00c9da74bbcbbfc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 21:12:06 -0300 Subject: TODOs.org --- TODOs.org | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODOs.org b/TODOs.org index 263c257..014aec9 100644 --- a/TODOs.org +++ b/TODOs.org @@ -47,6 +47,8 @@ Put all of this on the README for future easy access. ** NEXT Workflow improvement *** NEXT Finish importing mailing list emails *** TODO Automate backup.sh +*** CANCELLED eCryptFS +LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects CLOSED: [2019-05-31 Fri 21:43] **** DONE Add =utils.nix= with common derivations @@ -60,6 +62,7 @@ Couldn't configure it properly right now, no impactul at all on current workflow ** TODO Guix System *** TODO Create =burn.sh=, =install.sh= and =setup.sh= =guix= installation scripts *** TODO Consider using Btrfs? Why? Why not? +*** TODO Is there a Hydra equivalent for Guix? Add it to the VPS? ** TODO House keeping *** TODO Remove borg content from repository *** TODO Remove encrypted files from repository -- cgit v1.2.3 From 7cb001904d3ae5733ada05f139d4141e414ac858 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 21:37:25 -0300 Subject: Add -E to template env.sh file --- templates/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/env.sh b/templates/env.sh index 4ff21f2..3007d89 100644 --- a/templates/env.sh +++ b/templates/env.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail +set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" export SERVER_URL=root@euandre.org -- cgit v1.2.3 From 39dc2aa80598fe056439af5b42732d5e52dc623f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 22:05:02 -0300 Subject: Add instructions on how to install NixOS automatically on README --- README.org | 36 ++++++++++++++++++++++++++++++++++++ TODOs.org | 3 ++- public/nixos/burn.sh | 2 +- public/nixos/setup.sh | 17 +++++++++++++++++ 4 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 public/nixos/setup.sh diff --git a/README.org b/README.org index 3c39614..b1ce6c8 100644 --- a/README.org +++ b/README.org @@ -1,5 +1,41 @@ * dotfiles [[https://builds.sr.ht/~euandreh/dotfiles][file:https://builds.sr.ht/~euandreh/dotfiles.svg]] +** Instructions - setting up a new NixOS installation +*** 1. Prepare the USB stick +Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] and burn it to the USB stick: +#+BEGIN_SOURCE shell +NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' +curl https://euandre.org/dotfiles/nixos/burn.sh | bash -s "$NIXOS_URL" /dev/sdb +#+END_SOURCE +*** 2. Performing a fresh install +Put the USB stick in the new laptop and boot from it. + +First we need to get the internet connection working. Check that the wireless interface name is actually =wlp2s0= or something else (use =ip a= of =ifconfig= for that), and use =wpa_supplicant= to perform the connection: +#+BEGIN_SOURCE shell +wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) +#+END_SOURCE +Now we need to also double check the driver name with =lsblk=. We'll assume it's =/dev/sda=. + +After that all we need is to download the installation script and run it with the correct arguments: +#+BEGIN_SOURCE shell +curl https://euandre.org/dotfiles/nixos/install.sh > install.sh +chmod +x install.sh +LAPTOP_NAME='velhinho-nixos' +./install.sh "${LAPTOP_NAME}" /dev/sda +#+END_SOURCE +*** 3. Bootstraping the new installation's configuration and data +After booting up from the freshly installed NixOS, we'll need the GPG keys to decrypt the Git Annex repo, decrypt the SSH keys and bootstrap from there. + +Get the =keys.gpg= file with both private and public keys (see [[#exporting-gpg-key-pairs][exporting GPG keys]] below on how to do that) and run the setup script: +#+BEGIN_SOURCE shell +curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ~/path/to/keys.gpg +#+END_SOURCE +Now open up Firefox and login back to it! That's all! +** Resources +*** Exporting GPG key pairs +:PROPERTIES: +:CUSTOM_ID: exporting-gpg-key-pairs +:END: ** Instructions - setting up a new installation (NixOS) *** 1. Download NixOS image from [[https://nixos.org/][the website]]. *** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= diff --git a/TODOs.org b/TODOs.org index 014aec9..5c8db24 100644 --- a/TODOs.org +++ b/TODOs.org @@ -38,7 +38,8 @@ chmod +x ./install.sh *** TODO Setup phase **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup -*** TODO Document the discrete three step phases +*** DONE Document the discrete three step phases +CLOSED: [2019-06-01 Sat 22:04] Put all of this on the README for future easy access. **** Steps 1. Preparing the USB stick; diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh index 85ce6cd..3e1dd7e 100755 --- a/public/nixos/burn.sh +++ b/public/nixos/burn.sh @@ -14,7 +14,7 @@ Usage: Examples: Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' - burn.sh "\$NIXOS_URL" /dev/sdb + curl https://euandre.org/dotfiles/nixos/burn.sh | bash -s "\$NIXOS_URL" /dev/sdb EOF } diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh new file mode 100644 index 0000000..c1a797a --- /dev/null +++ b/public/nixos/setup.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p bash +# shellcheck shell=bash +set -Eeuo pipefail + +# import GPG key pair +# download git annex +# get annex & +# download dotfiles +# mr checkout & +# wait +# restore mbsync from backup +# restore notmuch from backup +# restore newsboat from backup +# restore archive from backup +# open emacs # eval x +# open Nextcloud -- cgit v1.2.3 From 572da58d680c5377e764a97d7188fb440c849d11 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 22:11:19 -0300 Subject: TODOs.org --- TODOs.org | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TODOs.org b/TODOs.org index 5c8db24..5293c41 100644 --- a/TODOs.org +++ b/TODOs.org @@ -28,14 +28,15 @@ $ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda CLOSED: [2019-05-30 Thu 23:42] Add =publishScript= derivation and run it in builds.sr.ht. **** DOING Partition, format and encrypt -**** TODO Properly document (in README?) how to connect to the internet +**** DONE Properly document (in README?) how to connect to the internet +CLOSED: [2019-06-01 Sat 22:05] #+BEGIN_SOURCE bash wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) curl https://euandre.org/dotfiles/nixos/install.sh > install.sh chmod +x ./install.sh ./install.sh #+END_SOURCE -*** TODO Setup phase +*** DOING Setup phase **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup *** DONE Document the discrete three step phases @@ -73,6 +74,7 @@ Profile =bash/bashrc.sh=. *** TODO Remove =shellcheck disable= directives * Nice to have ** TODO Test elfeed +This way I can more easily link to an article from org-mode! * Fixes ** TODO Adjust layout for =annex.yml= tmuxinator template ** TODO Make xmodmap commands declarative -- cgit v1.2.3 From 3ac70ecc13269f4e52a473f52d5c51a32e77c753 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 22:16:14 -0300 Subject: WIP: Move scripts out of README.org into public/nixos/setup.sh --- README.org | 36 ++---------------------------------- public/nixos/setup.sh | 38 ++++++++++++++++++++++++++++++++++++-- 2 files changed, 38 insertions(+), 36 deletions(-) diff --git a/README.org b/README.org index b1ce6c8..10d6840 100644 --- a/README.org +++ b/README.org @@ -36,10 +36,7 @@ Now open up Firefox and login back to it! That's all! :PROPERTIES: :CUSTOM_ID: exporting-gpg-key-pairs :END: -** Instructions - setting up a new installation (NixOS) -*** 1. Download NixOS image from [[https://nixos.org/][the website]]. -*** 2. Follow USB ISO installation steps in =nixos/os-installation.sh= -*** 3. Put =private.gpg= and =public.gpg= files in UTCLOUD (the actual HD drive) +Put =private.gpg= and =public.gpg= files in UTCLOUD (the actual HD drive) #+BEGIN_SRC shell gpg --export -a EuAndreh > public.gpg gpg --export-secret-keys -a EuAndreh > private @@ -50,36 +47,7 @@ Now open up Firefox and login back to it! That's all! mv private.gpg ~/UTCLOUD/private.gpg cp $DOTFILES/encrypted/password-hash.txt ~/UTCLOUD/password-hash.txt #+END_SRC -*** 4. Import GPG keys in new OS -#+BEGIN_SRC shell - gpg -o private -d private.gpg - gpg --import public.gpg - gpg --import private - gpg --edit-key EuAndreh - - # Inside GPG prompt - trust - 5 - quit - - # end of GPG prompt - shred private - shred private.gpg - rm private - rm private.gpg - rm public.gpg -#+END_SRC -*** 5. Clone annex repo from HD and setup remotes -#+BEGIN_SRC shell -git clone gcrypt::/media/andreh/UTCLOUD/annex.git -cd annex -git annex describe here "repo description" -git annex enableremote hd -git annex enableremote gitlab -git annex enableremote rsyncnet -git annex enableremote s3 -#+END_SRC -** Paperkey +*** Paperkey Paperkey generate using: #+BEGIN_SRC shell cat < Date: Sat, 1 Jun 2019 22:45:44 -0300 Subject: Add helper scripts/export-keys.sh --- scripts/export-keys.sh | 23 +++++++++++++++++++++++ 1 file changed, 23 insertions(+) create mode 100755 scripts/export-keys.sh diff --git a/scripts/export-keys.sh b/scripts/export-keys.sh new file mode 100755 index 0000000..b7ef50d --- /dev/null +++ b/scripts/export-keys.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +yellow "Exporting public key..." +gpg --export --armor -a EuAndreh > keys +green "Done." + +yellow "Exporting private key..." +read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r +gpg --export-secret-keys --armor -a EuAndreh >> keys +green "Done." + +yellow "Encrypting key pair..." +read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r +gpg --cipher-algo AES256 -c keys +green "Done." + +yellow "Removing traces of private key..." +shred keys +rm keys +green "Done." + +blue "File 'keys.gpg' create!" -- cgit v1.2.3 From 52b0b58786b6227bc23635762df82d91e9fd0c27 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 23:03:04 -0300 Subject: Export ownertrust in export-keys.sh --- scripts/export-keys.sh | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/scripts/export-keys.sh b/scripts/export-keys.sh index b7ef50d..5807dbc 100755 --- a/scripts/export-keys.sh +++ b/scripts/export-keys.sh @@ -2,22 +2,34 @@ set -Eeuo pipefail yellow "Exporting public key..." -gpg --export --armor -a EuAndreh > keys +gpg --export --armor -a EuAndreh > keys.gpg green "Done." yellow "Exporting private key..." read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r -gpg --export-secret-keys --armor -a EuAndreh >> keys +gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg green "Done." -yellow "Encrypting key pair..." +yellow "Exporting ownertrust..." +gpg --export-ownertrust > trust.txt +green "Done." + +yellow "Creating tar with key pair and trust content..." +tar -cvf EuAndreh.tar keys.gpg trust.txt +green "Done." + +yellow "Encrypting tar file..." read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r -gpg --cipher-algo AES256 -c keys +gpg --cipher-algo AES256 -c EuAndreh.tar green "Done." yellow "Removing traces of private key..." -shred keys -rm keys +shred trust.txt +rm trust.txt +shred keys.gpg +rm keys.gpg +shred EuAndreh.tar +rm EuAndreh.tar green "Done." -blue "File 'keys.gpg' create!" +blue "File 'EuAndreh.tar.gpg' created!" -- cgit v1.2.3 From 558924939316144e0e1b8b19ac8c8b0970adac2b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 23:03:19 -0300 Subject: s/install-nixos.sh/install.sh/ --- public/nixos/install.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index f2b1abe..6d83b38 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -29,14 +29,14 @@ usage() { red "Missing input argument $1.\n" cat < + install.sh Arguments HOST_NAME The networking.hostName of the installation. Something like 'velhinho-nixos'. DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name. Examples: - Download install-nixos.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: + Download install.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: curl https://euandre.org/dotfiles/nixos/install.sh > install.sh chmod +x install.sh ./install.sh velhinho-nixos /dev/sda -- cgit v1.2.3 From c2de2503119d138c98d9686938bc783c652e59ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 23:08:14 -0300 Subject: Remove extra GPG exporting info from README.org --- README.org | 34 +++++++++++++++------------------- 1 file changed, 15 insertions(+), 19 deletions(-) diff --git a/README.org b/README.org index 10d6840..89d4f28 100644 --- a/README.org +++ b/README.org @@ -3,49 +3,45 @@ ** Instructions - setting up a new NixOS installation *** 1. Prepare the USB stick Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] and burn it to the USB stick: -#+BEGIN_SOURCE shell +#+BEGIN_SRC shell NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' curl https://euandre.org/dotfiles/nixos/burn.sh | bash -s "$NIXOS_URL" /dev/sdb -#+END_SOURCE +#+END_SRC *** 2. Performing a fresh install Put the USB stick in the new laptop and boot from it. First we need to get the internet connection working. Check that the wireless interface name is actually =wlp2s0= or something else (use =ip a= of =ifconfig= for that), and use =wpa_supplicant= to perform the connection: -#+BEGIN_SOURCE shell +#+BEGIN_SRC shell wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) -#+END_SOURCE +#+END_SRC Now we need to also double check the driver name with =lsblk=. We'll assume it's =/dev/sda=. After that all we need is to download the installation script and run it with the correct arguments: -#+BEGIN_SOURCE shell +#+BEGIN_SRC shell curl https://euandre.org/dotfiles/nixos/install.sh > install.sh chmod +x install.sh LAPTOP_NAME='velhinho-nixos' ./install.sh "${LAPTOP_NAME}" /dev/sda -#+END_SOURCE +#+END_SRC *** 3. Bootstraping the new installation's configuration and data -After booting up from the freshly installed NixOS, we'll need the GPG keys to decrypt the Git Annex repo, decrypt the SSH keys and bootstrap from there. +After booting up from the freshly installed NixOS, login into the *GNOME+Xorg* option on the top right corner. Connect again to the internet using the network applet and launch a terminal window. + +Now we'll need the GPG keys to decrypt the Git Annex repo, decrypt the SSH keys and bootstrap from there. -Get the =keys.gpg= file with both private and public keys (see [[#exporting-gpg-key-pairs][exporting GPG keys]] below on how to do that) and run the setup script: -#+BEGIN_SOURCE shell +Get the =keys.gpg= file with both private and public keys (see [[#exporting-gpg-key-pairs][exporting GPG keys]] below on how to do that) from the external disk and run the setup script: +#+BEGIN_SRC shell curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ~/path/to/keys.gpg -#+END_SOURCE +#+END_SRC Now open up Firefox and login back to it! That's all! ** Resources *** Exporting GPG key pairs :PROPERTIES: :CUSTOM_ID: exporting-gpg-key-pairs :END: -Put =private.gpg= and =public.gpg= files in UTCLOUD (the actual HD drive) +Export the GPG data using =export-keys.sh= and put it in a disk drive to do an offline transfer: #+BEGIN_SRC shell - gpg --export -a EuAndreh > public.gpg - gpg --export-secret-keys -a EuAndreh > private - gpg --cipher-algo AES256 -c private - shred private - rm private - mv public.gpg ~/UTCLOUD/public.gpg - mv private.gpg ~/UTCLOUD/private.gpg - cp $DOTFILES/encrypted/password-hash.txt ~/UTCLOUD/password-hash.txt +export-keys.sh +mv EuAndreh.tar.gpg ~/UTCLOUD/ #+END_SRC *** Paperkey Paperkey generate using: -- cgit v1.2.3 From c88354a1442243c2da2438cf139f71bdea40be16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 23:16:40 -0300 Subject: Add usage and import_gpg to setup.sh --- public/nixos/setup.sh | 82 +++++++++++++++++++++++++++++++++++++++------------ 1 file changed, 63 insertions(+), 19 deletions(-) diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index cfa88b5..50ea2b1 100644 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -3,6 +3,69 @@ # shellcheck shell=bash set -Eeuo pipefail +end="\033[0m" + +green() { + green_color="\033[0;32m" + echo -e "${green_color}${1}${end}" +} + +yellow() { + yellow_color="\033[0;33m" + echo -e "${yellow_color}${1}${end}" +} + +blue() { + blue_color="\033[0;34m" + echo -e "${blue_color}${1}${end}" +} + +red() { + red_color="\033[0;31m" + echo -e "${red_color}${1}${end}" +} + +usage() { + red "Missing input argument $1.\n" + cat < + + Arguments + TAR_PATH Path to the encrypted tar file with key pair and ownertrust information. + +Examples: + Download setup.sh and run it local './EuAndreh.tar.gpg' key pair: + curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ./EuAndreh.tar.gpg +EOF +} + +TAR_PATH="${1:-}" + +[[ -z "${TAR_PATH}" ]] && { + usage 'TAR_PATH' + exit 2 +} + +import_gpg() { + yellow "Import GPG data..." + gpg -o EuAndreh.tar -d "${KEY_PAIR_PATH}" + tar -xvf EuAndreh.tar + gpg --import keys.gpg + gpg --import-ownertrust trust.txt + + rm "${KEY_PAIR_PATH}" + shred trust.txt + rm trust.txt + shred keys.gpg + rm keys.gpg + shred EuAndreh.tar + rm EuAndreh.tar + green "Done." +} + +import_gpg + # import GPG key pair # download git annex from Nextcloud # wait for Nextcloud to finish sync @@ -20,25 +83,6 @@ set -Eeuo pipefail # sudo create symlink for /etc/nixos/configuration.nix and /etc/nixos/local-configuration.nix -# *** 4. Import GPG keys in new OS -# #+BEGIN_SRC shell -# gpg -o private -d private.gpg -# gpg --import public.gpg -# gpg --import private -# gpg --edit-key EuAndreh - -# # Inside GPG prompt -# trust -# 5 -# quit - -# # end of GPG prompt -# shred private -# shred private.gpg -# rm private -# rm private.gpg -# rm public.gpg -# #+END_SRC # *** 5. Clone annex repo from HD and setup remotes # #+BEGIN_SRC shell # git clone gcrypt::/media/andreh/UTCLOUD/annex.git -- cgit v1.2.3 From a9420d3aa8a6c17160ca3693e0a1ced46579e53b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 23:22:16 -0300 Subject: Wait for Nextcloud to fully sync before continuing with setup.sh --- public/nixos/setup.sh | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) mode change 100644 => 100755 public/nixos/setup.sh diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh old mode 100644 new mode 100755 index 50ea2b1..c79491a --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -64,9 +64,24 @@ import_gpg() { green "Done." } +start_nextcloud() { + yellow "Starting Nextcloud process and leaving it on the background..." + nextcloud &> /dev/null & + disown + green "Done." + + yellow "Waiting for Nextcloud Git Annex repo to become available..." + while true; do + read -r -p "Has Nextcloud finished syncing? (Type uppercase sync): " sync + [ "$sync" = 'SYNC' ] && break + red "Please try again." + done + green "Done." +} + import_gpg +start_nextcloud -# import GPG key pair # download git annex from Nextcloud # wait for Nextcloud to finish sync # git annex enable -- cgit v1.2.3 From 87225a0df0873a1a9b28dd14ca142d2031c95937 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 1 Jun 2019 23:35:28 -0300 Subject: Fix references from $KEY_PAIR_PATH to $TAR_PATH --- public/nixos/setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index c79491a..f659721 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -49,12 +49,12 @@ TAR_PATH="${1:-}" import_gpg() { yellow "Import GPG data..." - gpg -o EuAndreh.tar -d "${KEY_PAIR_PATH}" + gpg -o EuAndreh.tar -d "${TAR_PATH}" tar -xvf EuAndreh.tar gpg --import keys.gpg gpg --import-ownertrust trust.txt - rm "${KEY_PAIR_PATH}" + rm "${TAR_PATH}" shred trust.txt rm trust.txt shred keys.gpg -- cgit v1.2.3 From 4ec36c219d568bd9c3fab736ce465b0cdbf1b4ab Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:17:07 -0300 Subject: WIP: add 3 extra steps to setup.sh Add setup_git_annex, setup_dotfiles and restore_backups. --- public/nixos/setup.sh | 96 +++++++++++++++++++++++++++++++++++++-------------- 1 file changed, 70 insertions(+), 26 deletions(-) diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index f659721..64962fd 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -79,32 +79,76 @@ start_nextcloud() { green "Done." } +configure_git_annex() { + yellow "Setting up Git Annex repository..." + git clone "gcrypt::$HOME/Nextcloud/annex.git" "$HOME/annex/" + pushd ~/annex/ + read -r -p "What's the description of the local Git Annex repository? " DESCRIPTION + git config --global user.email "eu@euandre.org" + git config --global user.name "EuAndreh" + git annex describe here "${DESCRIPTION}" + + git annex enableremote nextcloud + git annex enableremote s3 + # FIXME: rsyncnet + # git annex enableremote hd + # gitlab + # rsyncnet + + git annex upgrade + git annex sync + popd + green "Done." +} + +configure_dotfiles() { + yellow "Setting up temporary SSH configuration and dotfiles repository..." + mkdir -p ~/.ssh + cp ~/annex/secret/SSH/id_rsa.pub.txt ~/.ssh/id_rsa.pub + cp ~/annex/secret/SSH/id_rsa.txt ~/.ssh/id_rsa + chmod 600 ~/.ssh/id_rsa + blue "Open up the password manager to decrypt the SSH private key" + read -p "A prompt for the SSH password will appear! (Press any key to continue)" -n 1 -r + + # FIXME: Is there an easier way? + export SSH_ENV="$HOME/.ssh/environment" + echo "Initialising new SSH agent..." + ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" + echo succeeded + chmod 600 "${SSH_ENV}" + . "${SSH_ENV}" > /dev/null + ssh-add + # FIXME: Is there an easier way? + + mkdir -p ~/dev/libre/ + git clone git@git.sr.ht:~euandreh/dotfiles ~/dev/libre/dotfiles/ + pushd ~/dev/libre/dotfiles/ + git crypt unlock + popd + pushd ~/ + source ~/dev/libre/dotfiles/bash/bashrc.sh + popd + + read -p "A prompt for the sudo password password will appear for the NixOS symlinks! (Press any key to continue)" -n 1 -r + sudo ln -fs ~/dev/libre/dotfiles/nixos/configuration.nix /etc/nixos/configuration.nix + # sudo create symlink for /etc/nixos/configuration.nix and /etc/nixos/local-configuration.nix + green "Done." +} + +restore_backups() { + # rsync + # borg serve + + # restore mbsync from backup + # restore notmuch from backup + # restore newsboat from backup + # restore archive from backup +} + import_gpg start_nextcloud +setup_git_annex +setup_dotfiles +restore_backups -# download git annex from Nextcloud -# wait for Nextcloud to finish sync -# git annex enable -# git annex describe -# get annex & -# download dotfiles -# mr checkout & -# wait -# restore mbsync from backup -# restore notmuch from backup -# restore newsboat from backup -# restore archive from backup -# open emacs # eval x -# sudo create symlink for /etc/nixos/configuration.nix and /etc/nixos/local-configuration.nix - - -# *** 5. Clone annex repo from HD and setup remotes -# #+BEGIN_SRC shell -# git clone gcrypt::/media/andreh/UTCLOUD/annex.git -# cd annex -# git annex describe here "repo description" -# git annex enableremote hd -# git annex enableremote gitlab -# git annex enableremote rsyncnet -# git annex enableremote s3 -# #+END_SRC +green "All done!" -- cgit v1.2.3 From 68e6d1d0a44cf60a5c986e0538673e1793a8aa8d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:17:36 -0300 Subject: Check if folder exists before creating nested symlink --- bash/symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 2f6460f..3301882 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -62,7 +62,7 @@ mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/newsboat/elfeed.org" ~/.emacs.d/private/elfeed.org ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs ln -fs "$DOTFILES/emacs/gnus.el" ~/.gnus.el -ln -fs "$CACHE_DIR/euandreh-auto-save.el" ~/.emacs.d/.cache/layouts/euandreh-auto-save +[[ -d ~/.emacs.d/.cache/layouts/ ]] && ln -fs "$CACHE_DIR/euandreh-auto-save.el" ~/.emacs.d/.cache/layouts/euandreh-auto-save ## xmonad mkdir -p ~/.xmonad -- cgit v1.2.3 From 01696213cce65209efff7d22b360bc0d06a0acc7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:18:00 -0300 Subject: Test if rust tooling is configured before using it --- bash/env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/env.sh b/bash/env.sh index d86a89b..41b8975 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -90,6 +90,8 @@ export PATH="$GOPATH/bin:$PATH" # # Rust # + +rustc --print sysroot &> /dev/null || (rustup install stable && rustup default stable) export PATH="$HOME/.cargo/bin:$PATH" RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src" export RUST_SRC_PATH -- cgit v1.2.3 From 45def142a589de05e12495f36266246736a9e3df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:26:36 -0300 Subject: Remove PostgreSQL configuration --- nixos/configuration.nix | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2990a33..3157b57 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -381,20 +381,6 @@ in { pcscd.enable = true; # required by yubioath - # Taken from: - # https://unix.stackexchange.com/questions/378711/how-do-i-configure-postgress-authorization-settings-in-nixos - postgresql = { - enable = false; - package = pkgs.postgresql; - authentication = pkgs.lib.mkForce '' - # Generated file; do not edit! - # TYPE DATABASE USER ADDRESS METHOD - local all all trust - host all all 127.0.0.1/32 trust - host all all ::1/128 trust - ''; - }; - # https://nixos.org/nixos/options.html#ipfs ipfs = { enable = false; -- cgit v1.2.3 From 1df157eadab8404aa3b8389a13794f2cd4f569e1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:48:44 -0300 Subject: Add public/static/README.css --- public/static/README.css | 335 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 335 insertions(+) create mode 100644 public/static/README.css diff --git a/public/static/README.css b/public/static/README.css new file mode 100644 index 0000000..c744528 --- /dev/null +++ b/public/static/README.css @@ -0,0 +1,335 @@ +/* + * Taken from: + * https://gist.github.com/killercup/5917178 + * Inspired by: + * https://github.com/jerieljan/posaune-pandoc-theme + */ + +/* + * I add this to html files generated with pandoc. + */ + +html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + color: #444; + font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; + font-size: 12px; + line-height: 1.7; + padding: 1em; + margin: auto; + max-width: 42em; + background: #fefefe; +} + +a { + color: #0645ad; + text-decoration: none; +} + +a:visited { + color: #0b0080; +} + +a:hover { + color: #06e; +} + +a:active { + color: #faa700; +} + +a:focus { + outline: thin dotted; +} + +*::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +*::selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +a::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +a::selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +p { + margin: 1em 0; +} + +img { + max-width: 100%; +} + +h1, h2, h3, h4, h5, h6 { + color: #111; + line-height: 125%; + margin-top: 2em; + font-weight: normal; +} + +h4, h5, h6 { + font-weight: bold; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; +} + +h3 { + font-size: 1.5em; +} + +h4 { + font-size: 1.2em; +} + +h5 { + font-size: 1em; +} + +h6 { + font-size: 0.9em; +} + +blockquote { + color: #666666; + margin: 0; + padding-left: 3em; + border-left: 0.5em #EEE solid; +} + +hr { + display: block; + height: 2px; + border: 0; + border-top: 1px solid #aaa; + border-bottom: 1px solid #eee; + margin: 1em 0; + padding: 0; +} + +pre, code, kbd, samp { + color: #000; + font-family: monospace, monospace; + _font-family: 'courier new', monospace; + font-size: 0.98em; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +b, strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +ins { + background: #ff9; + color: #000; + text-decoration: none; +} + +mark { + background: #ff0; + color: #000; + font-style: italic; + font-weight: bold; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +ul, ol { + margin: 1em 0; + padding: 0 0 0 2em; +} + +li p:last-child { + margin-bottom: 0; +} + +ul ul, ol ol { + margin: .3em 0; +} + +dl { + margin-bottom: 1em; +} + +dt { + font-weight: bold; + margin-bottom: .8em; +} + +dd { + margin: 0 0 .8em 2em; +} + +dd:last-child { + margin-bottom: 0; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; + vertical-align: middle; +} + +figure { + display: block; + text-align: center; + margin: 1em 0; +} + +figure img { + border: none; + margin: 0 auto; +} + +figcaption { + font-size: 0.8em; + font-style: italic; + margin: 0 0 .8em; +} + +table { + margin-bottom: 2em; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} + +table th { + padding: .2em 1em; + background-color: #eee; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; +} + +table td { + padding: .2em 1em; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + vertical-align: top; +} + +.author { + font-size: 1.2em; + text-align: center; +} + +@media only screen and (min-width: 480px) { + body { + font-size: 14px; + } +} +@media only screen and (min-width: 768px) { + body { + font-size: 16px; + } +} +@media print { + * { + background: transparent !important; + color: black !important; + filter: none !important; + -ms-filter: none !important; + } + + body { + font-size: 12pt; + max-width: 100%; + } + + a, a:visited { + text-decoration: underline; + } + + hr { + height: 1px; + border: 0; + border-bottom: 1px solid black; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { + content: ""; + } + + pre, blockquote { + border: 1px solid #999; + padding-right: 1em; + page-break-inside: avoid; + } + + tr, img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page :left { + margin: 15mm 20mm 15mm 10mm; +} + + @page :right { + margin: 15mm 10mm 15mm 20mm; +} + + p, h2, h3 { + orphans: 3; + widows: 3; + } + + h2, h3 { + page-break-after: avoid; + } +} -- cgit v1.2.3 From b8c47bbbdfdcf866e8966ec7e4e1ed9a7a12772b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:49:43 -0300 Subject: Fetch README.css from URL --- utils.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 3151fec..805f38a 100644 --- a/utils.nix +++ b/utils.nix @@ -61,6 +61,10 @@ in rec { exit 1 ''; }); + readmeCss = builtins.fetchurl { + url = https://euandre.org/dotfiles/static/README.css; + sha256 = "1c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"; + }; orgMkDocs = title: baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-docs"; @@ -73,7 +77,7 @@ in rec { mkdocs build # Build remaining one-off files - pandoc README.org -o site/index.html --css docs/README.css --to=html5 --self-contained --metadata title="${title}" + pandoc README.org -o site/index.html --css ${readmeCss} --to=html5 --self-contained --metadata title="${title}" mv site/ $out/ ''; -- cgit v1.2.3 From 76bd73b24e3d05606048c0ec463f5d577c33836f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:53:02 -0300 Subject: Build README.org HTML in utils.nix --- default.nix | 1 + utils.nix | 17 ++++------------- 2 files changed, 5 insertions(+), 13 deletions(-) diff --git a/default.nix b/default.nix index abaa531..fe8faae 100644 --- a/default.nix +++ b/default.nix @@ -24,6 +24,7 @@ in rec { name = "${baseAttrs.name}-docs"; buildPhase = '' mkdir $out + cp ${utils.readmeOrg "dotfiles"} $out/index.html cp -Lr public/* $out/ ''; }); diff --git a/utils.nix b/utils.nix index 805f38a..4c180d8 100644 --- a/utils.nix +++ b/utils.nix @@ -65,21 +65,12 @@ in rec { url = https://euandre.org/dotfiles/static/README.css; sha256 = "1c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"; }; - orgMkDocs = title: + readmeOrg = title: baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-docs"; - buildInputs = [ pkgs.pandoc pkgs.mkdocs ]; + name = "${baseAttrs.name}-readme-docs"; + buildInputs = [ pkgs.pandoc ]; buildPhase = '' - # Convert from org-mode to markdown with pandoc - find docs/ -type f -name '*.org' -print0 | xargs -0 -I{} pandoc -o {}.md {}.org - - # Give the generated markdown files to MkDocs - mkdocs build - - # Build remaining one-off files - pandoc README.org -o site/index.html --css ${readmeCss} --to=html5 --self-contained --metadata title="${title}" - - mv site/ $out/ + pandoc README.org -o $out --css ${readmeCss} --to=html5 --self-contained --metadata title="${title}" ''; }); test = testDerivations: -- cgit v1.2.3 From 31b3869fa50366ab582612ace2972caf2a7b7e9b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:55:31 -0300 Subject: TODOs.org --- TODOs.org | 6 +++++- public/nixos/setup.sh | 3 --- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/TODOs.org b/TODOs.org index 5293c41..b01455e 100644 --- a/TODOs.org +++ b/TODOs.org @@ -27,7 +27,8 @@ $ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda **** DONE Publish =install-nixos.sh= in CI run CLOSED: [2019-05-30 Thu 23:42] Add =publishScript= derivation and run it in builds.sr.ht. -**** DOING Partition, format and encrypt +**** DONE Partition, format and encrypt +CLOSED: [2019-06-02 Sun 01:54] **** DONE Properly document (in README?) how to connect to the internet CLOSED: [2019-06-01 Sat 22:05] #+BEGIN_SOURCE bash @@ -37,6 +38,8 @@ chmod +x ./install.sh ./install.sh #+END_SOURCE *** DOING Setup phase +**** TODO Fix =enabling= of Git Annex remotes +**** **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup *** DONE Document the discrete three step phases @@ -48,6 +51,7 @@ Put all of this on the README for future easy access. 3. Bootstraping the new installation's configuration and data. ** NEXT Workflow improvement *** NEXT Finish importing mailing list emails +*** TODO How to simplify configuring the =ssh-agent=? *** TODO Automate backup.sh *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index 64962fd..39b006c 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -90,7 +90,6 @@ configure_git_annex() { git annex enableremote nextcloud git annex enableremote s3 - # FIXME: rsyncnet # git annex enableremote hd # gitlab # rsyncnet @@ -110,7 +109,6 @@ configure_dotfiles() { blue "Open up the password manager to decrypt the SSH private key" read -p "A prompt for the SSH password will appear! (Press any key to continue)" -n 1 -r - # FIXME: Is there an easier way? export SSH_ENV="$HOME/.ssh/environment" echo "Initialising new SSH agent..." ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" @@ -118,7 +116,6 @@ configure_dotfiles() { chmod 600 "${SSH_ENV}" . "${SSH_ENV}" > /dev/null ssh-add - # FIXME: Is there an easier way? mkdir -p ~/dev/libre/ git clone git@git.sr.ht:~euandreh/dotfiles ~/dev/libre/dotfiles/ -- cgit v1.2.3 From f639e71f362f7bae929bc3df3c38fc39f21e93f3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:56:11 -0300 Subject: WIP: add stub body to function in setup.sh --- public/nixos/setup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index 39b006c..77137f0 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -133,8 +133,8 @@ configure_dotfiles() { } restore_backups() { - # rsync - # borg serve + echo rsync + echo borg serve # restore mbsync from backup # restore notmuch from backup -- cgit v1.2.3 From b8a07104bf99d241e5c1e9d0bc9ff936c6ebe6da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 01:56:31 -0300 Subject: Format utils.nix (linter offense) --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 4c180d8..99707da 100644 --- a/utils.nix +++ b/utils.nix @@ -62,7 +62,7 @@ in rec { ''; }); readmeCss = builtins.fetchurl { - url = https://euandre.org/dotfiles/static/README.css; + url = "https://euandre.org/dotfiles/static/README.css"; sha256 = "1c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"; }; readmeOrg = title: -- cgit v1.2.3 From 89244f2d3112e66e54e0d4e0ba973810d6dbe830 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:00:58 -0300 Subject: Disable ShellCheck 1090 for setup.sh --- public/nixos/setup.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index 77137f0..7d64823 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -114,6 +114,7 @@ configure_dotfiles() { ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" echo succeeded chmod 600 "${SSH_ENV}" + # shellcheck disable=1090 . "${SSH_ENV}" > /dev/null ssh-add @@ -123,6 +124,7 @@ configure_dotfiles() { git crypt unlock popd pushd ~/ + # shellcheck disable=1090 source ~/dev/libre/dotfiles/bash/bashrc.sh popd -- cgit v1.2.3 From 652f6b63477768d40c1ad9877655efdae05de9ad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:08:05 -0300 Subject: Remove badge from README --- README.org | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/README.org b/README.org index 89d4f28..d31f36d 100644 --- a/README.org +++ b/README.org @@ -1,5 +1,4 @@ -* dotfiles -[[https://builds.sr.ht/~euandreh/dotfiles][file:https://builds.sr.ht/~euandreh/dotfiles.svg]] +* dotfiles - EuAndreh's personal repository ** Instructions - setting up a new NixOS installation *** 1. Prepare the USB stick Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] and burn it to the USB stick: -- cgit v1.2.3 From c3c25fad60d5dbe056a85b6dff016b1144429e6b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:09:53 -0300 Subject: Fix README.css sha256 --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 99707da..f877b09 100644 --- a/utils.nix +++ b/utils.nix @@ -63,7 +63,7 @@ in rec { }); readmeCss = builtins.fetchurl { url = "https://euandre.org/dotfiles/static/README.css"; - sha256 = "1c26b46b68ffc68ff99b453c1d30413413422d706483bfa0f98a5e886266e7ae"; + sha256 = "1r7ak92zsbhjm1qxz0r3dig0yxb41l43zl0yai63izha2s5r54d4"; }; readmeOrg = title: baseTask.overrideAttrs (baseAttrs: { -- cgit v1.2.3 From 59f05acec7b127367c3f4d7e1d2055ddd02d5498 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:22:37 -0300 Subject: Add note on fetchTarball during nixos-install --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3157b57..fa5138a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -82,6 +82,8 @@ in { doCheck = false; }); + # Should be removed during fresh OS installation: + # https://github.com/NixOS/nix/issues/2497 nixfmt = import (builtins.fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; -- cgit v1.2.3 From 2e99d3097c0e484fa5d72b1c06697e7a9f491a3b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:23:09 -0300 Subject: TODOs.org --- TODOs.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index b01455e..2611e3c 100644 --- a/TODOs.org +++ b/TODOs.org @@ -39,7 +39,6 @@ chmod +x ./install.sh #+END_SOURCE *** DOING Setup phase **** TODO Fix =enabling= of Git Annex remotes -**** **** TODO Fix bootstrap order of installing and importing packages **** TODO Automate annex setup *** DONE Document the discrete three step phases @@ -52,6 +51,7 @@ Put all of this on the README for future easy access. ** NEXT Workflow improvement *** NEXT Finish importing mailing list emails *** TODO How to simplify configuring the =ssh-agent=? +https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt *** TODO Automate backup.sh *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. -- cgit v1.2.3 From 4c7bdd18e5a2ab2dcfb11e679dabb1d723a1a007 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:26:42 -0300 Subject: Tag NEXT with red instead of orange --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 6e7697c..d90fba8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -737,7 +737,7 @@ This is the place where most of your configurations should be done. Unless it is ("WAITING" . (:foreground "white" :weight bold)) ("MEETING" . (:foreground "white" :weight bold)) - ("NEXT" . (:foreground "orange" :weight bold)) + ("NEXT" . (:foreground "red" :weight bold)) ("CANCELLED" . (:foreground "green" :weight bold)) ("DONE" . (:foreground "green" :weight bold))) -- cgit v1.2.3 From 29b1e74e6aee05f9232b11a367a91a6639479e3b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 02:26:59 -0300 Subject: TODOs.org --- TODOs.org | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/TODOs.org b/TODOs.org index 2611e3c..d4bb349 100644 --- a/TODOs.org +++ b/TODOs.org @@ -7,7 +7,8 @@ Create =burn-nixos.sh= with something like: NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-graphical-19.03.172764.50d5d73e22b-x86_64-linux.iso' burn-nixos.sh "$NIXOS_URL" /dev/sdb #+END_SOURCE -*** DOING Installation phase +*** DONE Installation phase +CLOSED: [2019-06-02 Sun 02:26] **** DONE Choose proper tool CLOSED: [2019-05-31 Fri 21:40] =fdisk=? =gdisk=? =gparted=? Why? Why not? @@ -38,9 +39,7 @@ chmod +x ./install.sh ./install.sh #+END_SOURCE *** DOING Setup phase -**** TODO Fix =enabling= of Git Annex remotes -**** TODO Fix bootstrap order of installing and importing packages -**** TODO Automate annex setup +**** DOING Fix =enabling= of Git Annex remotes *** DONE Document the discrete three step phases CLOSED: [2019-06-01 Sat 22:04] Put all of this on the README for future easy access. @@ -68,13 +67,15 @@ Couldn't configure it properly right now, no impactul at all on current workflow ** TODO Guix System *** TODO Create =burn.sh=, =install.sh= and =setup.sh= =guix= installation scripts *** TODO Consider using Btrfs? Why? Why not? -*** TODO Is there a Hydra equivalent for Guix? Add it to the VPS? +*** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? +CLOSED: [2019-06-02 Sun 02:43] ** TODO House keeping *** TODO Remove borg content from repository *** TODO Remove encrypted files from repository *** TODO Make creation of a new shell faster Profile =bash/bashrc.sh=. -*** TODO Improve README.org +*** DONE Improve README.org +CLOSED: [2019-06-02 Sun 02:43] *** TODO Remove =shellcheck disable= directives * Nice to have ** TODO Test elfeed -- cgit v1.2.3 From b6aba0058b9991d3db359496b4fb43d4b0ecd9df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 10:11:30 -0300 Subject: README instructions rewording --- README.org | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/README.org b/README.org index d31f36d..6d27856 100644 --- a/README.org +++ b/README.org @@ -31,7 +31,9 @@ Get the =keys.gpg= file with both private and public keys (see [[#exporting-gpg- #+BEGIN_SRC shell curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ~/path/to/keys.gpg #+END_SRC -Now open up Firefox and login back to it! That's all! +Now just follow the instructions of the script. + +That's all! ** Resources *** Exporting GPG key pairs :PROPERTIES: -- cgit v1.2.3 From 7ab19c5221a5c43113d371fe2d44b18e520f6f75 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 10:11:45 -0300 Subject: Use default generated options in env.sh for Bash files --- env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/env.sh b/env.sh index 60a9d60..67259d0 100644 --- a/env.sh +++ b/env.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash -set -euo pipefail +set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" export SERVER_URL=root@euandre.org -- cgit v1.2.3 From 31f1d1573fa6af5c40d90a1ab603ccd9e36aa800 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 10:15:13 -0300 Subject: Use explicit HTML for badge in README.org The old link did work, but the =--self-contained= flag from pandoc would download the badge at build time and embed it as base64 data. I tried adding the =data-external="1"= attribute to the image, like: #+ATTR_HTML: :data-external 1 [[https://builds.sr.ht/~euandreh/dotfiles][file:https://builds.sr.ht/~euandreh/dotfiles.svg]] However this did *not* work for this link format. If I downloaded the image and referenced it instead, pandoc would keep the link: #+ATTR_HTML: :data-external 1 [[https://builds.sr.ht/~euandreh/dotfiles][./dotfiles.svg]] The hand-written HTML is to cover both cases: 1. do not embed the image at build time; 2. show the SVG image from the original source instead of the local copy. --- README.org | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/README.org b/README.org index 6d27856..6e1d50b 100644 --- a/README.org +++ b/README.org @@ -1,4 +1,11 @@ * dotfiles - EuAndreh's personal repository +#+BEGIN_HTML +

+ + + +

+#+END_HTML ** Instructions - setting up a new NixOS installation *** 1. Prepare the USB stick Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] and burn it to the USB stick: -- cgit v1.2.3 From caacd48680a0a05d585faaa34b41e4a0b582520d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 10:24:24 -0300 Subject: Add link to dotfiles repository in README.org --- README.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.org b/README.org index 6e1d50b..eeeb7ff 100644 --- a/README.org +++ b/README.org @@ -1,4 +1,4 @@ -* dotfiles - EuAndreh's personal repository +* [[https://git.sr.ht/~euandreh/dotfiles][dotfiles]] - EuAndreh's personal repository #+BEGIN_HTML

-- cgit v1.2.3 From 7bedf9f46ae408cfbbc575d938d5c004931084f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 10:33:52 -0300 Subject: Supress notmuch stderr messages Messages like: Note: Ignoring non-mail file: /home/andreh/mbsync/EuAndreh/.mbsyncstate --- scripts/mail.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/mail.sh b/scripts/mail.sh index 00c111f..1446485 100755 --- a/scripts/mail.sh +++ b/scripts/mail.sh @@ -7,5 +7,5 @@ else mbsync Nubank & mbsync Gmail & wait - notmuch new + notmuch new 2> /dev/null fi -- cgit v1.2.3 From 71ba36838d821afc04b930353c43a8226c12d14f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 11:45:08 -0300 Subject: Remove encrypted/borg/ --- encrypted/borg/exported-key.txt | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkp | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkp.2 | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkp.3 | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkp.4 | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkp.5 | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkp.6 | Bin 575 -> 0 bytes encrypted/borg/keys/borgbkpfoi | Bin 575 -> 0 bytes encrypted/borg/keys/home_andreh_borgbackup | Bin 575 -> 0 bytes encrypted/borg/keys/home_andreh_borgbackup.2 | Bin 575 -> 0 bytes encrypted/borg/keys/home_andreh_borgbackup.3 | Bin 575 -> 0 bytes encrypted/borg/keys/home_andreh_borgbkp | Bin 575 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 68 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 42 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 45 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 45 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 45 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 68 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 68 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 68 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 68 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 42 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 42 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 68 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 45 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes .../key-type | Bin 23 -> 0 bytes .../location | Bin 42 -> 0 bytes .../manifest-timestamp | Bin 48 -> 0 bytes .../nonce | Bin 38 -> 0 bytes 68 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/borg/exported-key.txt delete mode 100644 encrypted/borg/keys/borgbkp delete mode 100644 encrypted/borg/keys/borgbkp.2 delete mode 100644 encrypted/borg/keys/borgbkp.3 delete mode 100644 encrypted/borg/keys/borgbkp.4 delete mode 100644 encrypted/borg/keys/borgbkp.5 delete mode 100644 encrypted/borg/keys/borgbkp.6 delete mode 100644 encrypted/borg/keys/borgbkpfoi delete mode 100644 encrypted/borg/keys/home_andreh_borgbackup delete mode 100644 encrypted/borg/keys/home_andreh_borgbackup.2 delete mode 100644 encrypted/borg/keys/home_andreh_borgbackup.3 delete mode 100644 encrypted/borg/keys/home_andreh_borgbkp delete mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type delete mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location delete mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp delete mode 100644 encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce delete mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type delete mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location delete mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp delete mode 100644 encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce delete mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type delete mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location delete mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp delete mode 100644 encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce delete mode 100644 encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/key-type delete mode 100644 encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/location delete mode 100644 encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/manifest-timestamp delete mode 100644 encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/nonce delete mode 100644 encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/key-type delete mode 100644 encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/location delete mode 100644 encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp delete mode 100644 encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce delete mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type delete mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location delete mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp delete mode 100644 encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce delete mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type delete mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location delete mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp delete mode 100644 encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce delete mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type delete mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location delete mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp delete mode 100644 encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce delete mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type delete mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location delete mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp delete mode 100644 encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce delete mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type delete mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location delete mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp delete mode 100644 encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce delete mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type delete mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location delete mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp delete mode 100644 encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce delete mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type delete mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location delete mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp delete mode 100644 encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce delete mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type delete mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location delete mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp delete mode 100644 encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce delete mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type delete mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location delete mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp delete mode 100644 encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce diff --git a/encrypted/borg/exported-key.txt b/encrypted/borg/exported-key.txt deleted file mode 100644 index 61d1597..0000000 Binary files a/encrypted/borg/exported-key.txt and /dev/null differ diff --git a/encrypted/borg/keys/borgbkp b/encrypted/borg/keys/borgbkp deleted file mode 100644 index 61d1597..0000000 Binary files a/encrypted/borg/keys/borgbkp and /dev/null differ diff --git a/encrypted/borg/keys/borgbkp.2 b/encrypted/borg/keys/borgbkp.2 deleted file mode 100644 index 9c914c0..0000000 Binary files a/encrypted/borg/keys/borgbkp.2 and /dev/null differ diff --git a/encrypted/borg/keys/borgbkp.3 b/encrypted/borg/keys/borgbkp.3 deleted file mode 100644 index 16c7148..0000000 Binary files a/encrypted/borg/keys/borgbkp.3 and /dev/null differ diff --git a/encrypted/borg/keys/borgbkp.4 b/encrypted/borg/keys/borgbkp.4 deleted file mode 100644 index 3a916f3..0000000 Binary files a/encrypted/borg/keys/borgbkp.4 and /dev/null differ diff --git a/encrypted/borg/keys/borgbkp.5 b/encrypted/borg/keys/borgbkp.5 deleted file mode 100644 index c15bf1f..0000000 Binary files a/encrypted/borg/keys/borgbkp.5 and /dev/null differ diff --git a/encrypted/borg/keys/borgbkp.6 b/encrypted/borg/keys/borgbkp.6 deleted file mode 100644 index 92b3c2a..0000000 Binary files a/encrypted/borg/keys/borgbkp.6 and /dev/null differ diff --git a/encrypted/borg/keys/borgbkpfoi b/encrypted/borg/keys/borgbkpfoi deleted file mode 100644 index 38795b0..0000000 Binary files a/encrypted/borg/keys/borgbkpfoi and /dev/null differ diff --git a/encrypted/borg/keys/home_andreh_borgbackup b/encrypted/borg/keys/home_andreh_borgbackup deleted file mode 100644 index cd901f1..0000000 Binary files a/encrypted/borg/keys/home_andreh_borgbackup and /dev/null differ diff --git a/encrypted/borg/keys/home_andreh_borgbackup.2 b/encrypted/borg/keys/home_andreh_borgbackup.2 deleted file mode 100644 index 1541d22..0000000 Binary files a/encrypted/borg/keys/home_andreh_borgbackup.2 and /dev/null differ diff --git a/encrypted/borg/keys/home_andreh_borgbackup.3 b/encrypted/borg/keys/home_andreh_borgbackup.3 deleted file mode 100644 index a245fb9..0000000 Binary files a/encrypted/borg/keys/home_andreh_borgbackup.3 and /dev/null differ diff --git a/encrypted/borg/keys/home_andreh_borgbkp b/encrypted/borg/keys/home_andreh_borgbkp deleted file mode 100644 index b13eef9..0000000 Binary files a/encrypted/borg/keys/home_andreh_borgbkp and /dev/null differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type deleted file mode 100644 index 9141051..0000000 Binary files a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/key-type and /dev/null differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location deleted file mode 100644 index 004bc97..0000000 Binary files a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/location and /dev/null differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp deleted file mode 100644 index be597d7..0000000 Binary files a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce b/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/0ad5ac3b69d254f4f1ed8836844c2f43d990d0c166bd48d6781c275c535d06c9/nonce and /dev/null differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/key-type and /dev/null differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location deleted file mode 100644 index eaafc18..0000000 Binary files a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/location and /dev/null differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp deleted file mode 100644 index 581c6b1..0000000 Binary files a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce b/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce deleted file mode 100644 index 255e2aa..0000000 Binary files a/encrypted/borg/security/132e7d3e5915c0c2f08fc817e48f928bd74465a26ec6bad52965cb87703ac487/nonce and /dev/null differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/key-type and /dev/null differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location deleted file mode 100644 index d77e0a2..0000000 Binary files a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/location and /dev/null differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp deleted file mode 100644 index 2f7c4ac..0000000 Binary files a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce b/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce deleted file mode 100644 index a538999..0000000 Binary files a/encrypted/borg/security/2239e4b7f29c5f9a1bb7506987dade2ee677b3bed629ba310f338296c5b605ff/nonce and /dev/null differ diff --git a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/key-type b/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/key-type and /dev/null differ diff --git a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/location b/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/location deleted file mode 100644 index 451f778..0000000 Binary files a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/location and /dev/null differ diff --git a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/manifest-timestamp b/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/manifest-timestamp deleted file mode 100644 index b39d6c2..0000000 Binary files a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/nonce b/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/nonce deleted file mode 100644 index 33af8b5..0000000 Binary files a/encrypted/borg/security/36b83a5fb289c9faf2299e4a770d25e3400e8762290ae17cf7e91b1352302e60/nonce and /dev/null differ diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/key-type b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/key-type and /dev/null differ diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/location b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/location deleted file mode 100644 index 451f778..0000000 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/location and /dev/null differ diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp deleted file mode 100644 index 1bcd04c..0000000 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce b/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce deleted file mode 100644 index 2e27c8b..0000000 Binary files a/encrypted/borg/security/425dbda99f4623e1f6f8a6f4ebbfca53ff19bee74c920e10c86f6e2f6c737160/nonce and /dev/null differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type deleted file mode 100644 index 9141051..0000000 Binary files a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/key-type and /dev/null differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location deleted file mode 100644 index 004bc97..0000000 Binary files a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/location and /dev/null differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp deleted file mode 100644 index c14f5fb..0000000 Binary files a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce b/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/4ea874d718df637d31085f42804f8ac7316d11b8e89d7bed81534c886304ca29/nonce and /dev/null differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type deleted file mode 100644 index 9141051..0000000 Binary files a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/key-type and /dev/null differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location deleted file mode 100644 index 004bc97..0000000 Binary files a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/location and /dev/null differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp deleted file mode 100644 index c08266b..0000000 Binary files a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce b/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/6406bc55d42bb366c135001899ca45de9e8c5108bd983c08d88b43cc7c4ffc48/nonce and /dev/null differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type deleted file mode 100644 index 9141051..0000000 Binary files a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/key-type and /dev/null differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location deleted file mode 100644 index 004bc97..0000000 Binary files a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/location and /dev/null differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp deleted file mode 100644 index 6acfe4c..0000000 Binary files a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce b/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce deleted file mode 100644 index f0f5e61..0000000 Binary files a/encrypted/borg/security/923d812e60141a0f4405c648d95f80addf55978670fc126dbab5616b82caad79/nonce and /dev/null differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type deleted file mode 100644 index 9141051..0000000 Binary files a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/key-type and /dev/null differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location deleted file mode 100644 index 004bc97..0000000 Binary files a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/location and /dev/null differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp deleted file mode 100644 index baf5a45..0000000 Binary files a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce b/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/d15dce5b80a5c2cd7ffbe188a2dc4fe863630b9bf3d180cb048d1997d6a74b42/nonce and /dev/null differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/key-type and /dev/null differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location deleted file mode 100644 index eaafc18..0000000 Binary files a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/location and /dev/null differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp deleted file mode 100644 index b2ab182..0000000 Binary files a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce b/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/d5e34230f45420e848a38b53f8f8afef99d2cb94e3ae2cc7baff31e87a8d017d/nonce and /dev/null differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/key-type and /dev/null differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location deleted file mode 100644 index eaafc18..0000000 Binary files a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/location and /dev/null differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp deleted file mode 100644 index 6609466..0000000 Binary files a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce b/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/d729a6dbed5b93d086d210620269fda9d4dbb0533021e368b4f4c226aebe75f5/nonce and /dev/null differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type deleted file mode 100644 index 9141051..0000000 Binary files a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/key-type and /dev/null differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location deleted file mode 100644 index 004bc97..0000000 Binary files a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/location and /dev/null differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp deleted file mode 100644 index ea593f6..0000000 Binary files a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce b/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce deleted file mode 100644 index 1d577b5..0000000 Binary files a/encrypted/borg/security/e409213dca534bf7b1295bb29a2f41cab5a0f3581458067ba1f97f038d25d8a9/nonce and /dev/null differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/key-type and /dev/null differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location deleted file mode 100644 index 451f778..0000000 Binary files a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/location and /dev/null differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp deleted file mode 100644 index fd41e70..0000000 Binary files a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce b/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce deleted file mode 100644 index 56cda17..0000000 Binary files a/encrypted/borg/security/f0b5b410eb9a0b57eb3d304cb8856945c2ef72412cdfd3c89319bcc9ca5ed74a/nonce and /dev/null differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type deleted file mode 100644 index 6cdb8a2..0000000 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/key-type and /dev/null differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location deleted file mode 100644 index eaafc18..0000000 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/location and /dev/null differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp deleted file mode 100644 index e2ccf0d..0000000 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/manifest-timestamp and /dev/null differ diff --git a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce b/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce deleted file mode 100644 index 396ef7a..0000000 Binary files a/encrypted/borg/security/f742b4cea9ed19e0d6e7c79de77ba6186f5454dbed6c3a96e0848c4238548d25/nonce and /dev/null differ -- cgit v1.2.3 From f7bfd31dadd82b88d86e1773f9b6a661ec1ff982 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 11:46:28 -0300 Subject: Use ~/dev/libre/borg/ repository for config --- bash/symlinks.sh | 2 +- git/mrconfig.ini | Bin 11115 -> 11600 bytes 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 3301882..a7d92be 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -9,7 +9,7 @@ function upsert_dir_symlink() { } export -f upsert_dir_symlink -upsert_dir_symlink "$DOTFILES/encrypted/borg" ~/.config/borg +upsert_dir_symlink "$HOME/dev/libre/borg/config" ~/.config/borg ln -fs "$DOTFILES/bash/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/bash/bash_profile.sh" ~/.bash_profile diff --git a/git/mrconfig.ini b/git/mrconfig.ini index e96a9ad..50dd3ba 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From 60c9962de2e45f72de4bd440db3ecc21d2bc42e2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 11:47:16 -0300 Subject: TODOs.org --- TODOs.org | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index d4bb349..bdfb24d 100644 --- a/TODOs.org +++ b/TODOs.org @@ -70,7 +70,8 @@ Couldn't configure it properly right now, no impactul at all on current workflow *** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? CLOSED: [2019-06-02 Sun 02:43] ** TODO House keeping -*** TODO Remove borg content from repository +*** DONE Remove borg content from repository +CLOSED: [2019-06-02 Sun 11:47] *** TODO Remove encrypted files from repository *** TODO Make creation of a new shell faster Profile =bash/bashrc.sh=. -- cgit v1.2.3 From c342be66d16328549963cb03214fcec61cc1a7ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 11:48:48 -0300 Subject: Use ~/tmp/backup/ for backing up ad-hoc data --- scripts/backup.sh | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 5d215a3..32420ec 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -1,5 +1,5 @@ #!/usr/bin/env bash - +set -Eeuo pipefail # # BorgBackup @@ -25,13 +25,15 @@ fi BACKUP_TAG="${1-default}" +rm -rf "$HOME/tmp/backup/" +mkdir -p "$HOME/tmp/backup/" + yellow "Creating backup of notmuch data" -notmuch dump --output="$HOME/mbsync/notmuch-dump.txt" +notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" green "Done" yellow "Creating backup for newsboat data" -mkdir -p "$HOME/backup/" -newsboat -E "$HOME/backup/newsboat.txt" +newsboat -E "$HOME/tmp/backup/newsboat.txt" green "Done" yellow "Creating new borg archive entry" @@ -44,7 +46,8 @@ borg create \ ~/ownCloud/ \ ~/Nextcloud/ \ ~/mbsync/ \ - ~/archive/ + ~/archive/ \ + ~/tmp/backup/ # add folders to be backed up here green "Done" -- cgit v1.2.3 From 323892f73860f254242a7000fb336015798deff7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:19:58 -0300 Subject: Parameterize the overwriting of docs publishing --- default.nix | 4 +++- utils.nix | 4 ++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/default.nix b/default.nix index fe8faae..dc9418a 100644 --- a/default.nix +++ b/default.nix @@ -35,5 +35,7 @@ in rec { (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; - publishScript = utils.overwritingPublishScript subtasks.docs; + publishScript = utils.overwritingPublishScript { + docsDerivation = subtasks.docs; + }; } diff --git a/utils.nix b/utils.nix index f877b09..f02db70 100644 --- a/utils.nix +++ b/utils.nix @@ -85,11 +85,11 @@ in rec { touch $out ''; }); - overwritingPublishScript = docsDerivation: + overwritingPublishScript = { docsDerivation, overwrite ? true }: pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail OUT_DOCS="${docsDerivation}" - ${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" + ${if overwrite then "# " else ""}${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ "$OUT_DOCS/" \ -- cgit v1.2.3 From 8a47010a00d7383145138609d5521bfdd7e1650b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:41:54 -0300 Subject: Only backup.sh mr repos under ~/dev/libre/ --- scripts/backup.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 32420ec..6d8fb12 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -72,8 +72,8 @@ green "Done" # mr # -yellow "Backing up git repos" -pushd ~/ || exit 1 +yellow "Backing up ~/dev/libre/ git repos" +pushd ~/dev/libre/ || exit 1 mr -s master mr -s status -- cgit v1.2.3 From dcb9affb1c9df3639588ba9f6f6952bab6b710ad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:42:25 -0300 Subject: Backup newsboat before notmuch newsboat fails faster than notmuch. --- scripts/backup.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 6d8fb12..5c83eb4 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -28,14 +28,14 @@ BACKUP_TAG="${1-default}" rm -rf "$HOME/tmp/backup/" mkdir -p "$HOME/tmp/backup/" -yellow "Creating backup of notmuch data" -notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" -green "Done" - yellow "Creating backup for newsboat data" newsboat -E "$HOME/tmp/backup/newsboat.txt" green "Done" +yellow "Creating backup of notmuch data" +notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" +green "Done" + yellow "Creating new borg archive entry" borg create \ --verbose \ -- cgit v1.2.3 From c5a4a6f2fe2111fb20b889445847ef57c2eb925f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:42:54 -0300 Subject: Store borg updated files after borg create run --- scripts/backup.sh | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index 5c83eb4..73ef1c8 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -51,6 +51,14 @@ borg create \ # add folders to be backed up here green "Done" +yellow "Committing borg config changes..." +pushd ~/dev/libre/borg/ +git add . +git commit -m "JOB: automated update of borg config files after backup.sh" +git push origin master +popd +green "Done." + yellow "Syncing ~/archive to ~/UTCLOUD/archive" rsync --verbose --progress --stats --update --recursive ~/archive/ ~/UTCLOUD/archive/ green "Done" -- cgit v1.2.3 From a77ac3d93d3d03dace26c3876befca1db877f0c3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:44:57 -0300 Subject: Move definitely from ownCloud to Nextcloud --- bash/env.sh | 2 +- bash/youtube.sh | 2 +- nixos/configuration.nix | 2 +- scripts/backup.sh | 1 - scripts/once-only-nextcloud.sh | 9 +++++++++ scripts/once-only-owncloud.sh | 9 --------- spacemacs.el | 4 ++-- 7 files changed, 14 insertions(+), 15 deletions(-) create mode 100755 scripts/once-only-nextcloud.sh delete mode 100755 scripts/once-only-owncloud.sh diff --git a/bash/env.sh b/bash/env.sh index 41b8975..92833d4 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -30,7 +30,7 @@ export PATH=~/.local/bin:$PATH export EDITOR=vi export PATH="$DOTFILES/scripts/:$PATH" export INPUTRC=~/.inputrc -export CACHE_DIR="$HOME/ownCloud/cache" +export CACHE_DIR="$HOME/Nextcloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" export PATH="$HOME/dev/misc/flutter/bin:$PATH" diff --git a/bash/youtube.sh b/bash/youtube.sh index 275e0b8..c2882e1 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -12,7 +12,7 @@ export -f yt_dl download() { youtube-dl "$1" \ - --download-archive ~/ownCloud/cache/youtube-dl-seen.conf \ + --download-archive ~/Nextcloud/cache/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end "$2" \ --write-description \ diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fa5138a..d2d27b3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -363,7 +363,7 @@ in { # xmodmap -e 'keycode 118 = bar Greek_lamda' sessionCommands = '' ${pkgs.haskellPackages.xmobar}/bin/xmobar ~/.xmobarrc & - ${pkgs.fvwm}/bin/xpmroot ~/ownCloud/Images/emotion.png & + ${pkgs.fvwm}/bin/xpmroot ~/Nextcloud/Images/emotion.png & ''; }; }; diff --git a/scripts/backup.sh b/scripts/backup.sh index 73ef1c8..7501d1d 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -43,7 +43,6 @@ borg create \ --progress \ --compression lzma,6 \ ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ - ~/ownCloud/ \ ~/Nextcloud/ \ ~/mbsync/ \ ~/archive/ \ diff --git a/scripts/once-only-nextcloud.sh b/scripts/once-only-nextcloud.sh new file mode 100755 index 0000000..7754c34 --- /dev/null +++ b/scripts/once-only-nextcloud.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash + +if [ "$(pidof nextcloud)" ] +then + echo "Nextcloud already running." +else + echo "Nextcloud not running yet. Starting it." + owncloud & disown +fi diff --git a/scripts/once-only-owncloud.sh b/scripts/once-only-owncloud.sh deleted file mode 100755 index 874ba56..0000000 --- a/scripts/once-only-owncloud.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -if [ "$(pidof nextcloud)" ] -then - echo "ownCloud already running." -else - echo "ownCloud not running yet. Starting it." - owncloud & disown -fi diff --git a/spacemacs.el b/spacemacs.el index d90fba8..f45be89 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -578,7 +578,7 @@ dump." ("M-p" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) - ("M-]" . (lambda () (interactive) (find-file "~/ownCloud/Notes/TODOs.txt"))) + ("M-]" . (lambda () (interactive) (find-file "~/Nextcloud/Notes/TODOs.txt"))) ("M-s-q" . (lambda () (interactive) (insert "/"))) ("M-s-w" . (lambda () (interactive) (insert "?"))) ("M-s-a" . (lambda () (interactive) (insert "\\"))) @@ -741,7 +741,7 @@ This is the place where most of your configurations should be done. Unless it is ("CANCELLED" . (:foreground "green" :weight bold)) ("DONE" . (:foreground "green" :weight bold))) - org-agenda-files '("~/ownCloud/txt/TODOs.org") + org-agenda-files '("~/Nextcloud/txt/TODOs.org") org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" org-default-notes-file "~/annex/txt/TODOs.org" org-scratch-notes-file "~/annex/txt/TODOs.org" -- cgit v1.2.3 From f92b778bfb9f83a954ecf689ee484259ae23c46a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:50:48 -0300 Subject: Remove encrypted/SSH/ --- encrypted/SSH/id_rsa.pub.txt | Bin 762 -> 0 bytes encrypted/SSH/id_rsa.txt | Bin 3348 -> 0 bytes encrypted/SSH/known_hosts.txt | Bin 4577 -> 0 bytes encrypted/SSH/known_hosts_sources.txt | Bin 246 -> 0 bytes encrypted/nu/nurc.sh | Bin 4093 -> 4092 bytes 5 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/SSH/id_rsa.pub.txt delete mode 100644 encrypted/SSH/id_rsa.txt delete mode 100644 encrypted/SSH/known_hosts.txt delete mode 100644 encrypted/SSH/known_hosts_sources.txt diff --git a/encrypted/SSH/id_rsa.pub.txt b/encrypted/SSH/id_rsa.pub.txt deleted file mode 100644 index c1fcf97..0000000 Binary files a/encrypted/SSH/id_rsa.pub.txt and /dev/null differ diff --git a/encrypted/SSH/id_rsa.txt b/encrypted/SSH/id_rsa.txt deleted file mode 100644 index acc287b..0000000 Binary files a/encrypted/SSH/id_rsa.txt and /dev/null differ diff --git a/encrypted/SSH/known_hosts.txt b/encrypted/SSH/known_hosts.txt deleted file mode 100644 index 6bd4ea6..0000000 Binary files a/encrypted/SSH/known_hosts.txt and /dev/null differ diff --git a/encrypted/SSH/known_hosts_sources.txt b/encrypted/SSH/known_hosts_sources.txt deleted file mode 100644 index fbf4b8e..0000000 Binary files a/encrypted/SSH/known_hosts_sources.txt and /dev/null differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 73cfd05..41346e0 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From d78cd6acdd47fbdb489300c61d95f71431081868 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:53:42 -0300 Subject: Move IMAP credentials out of dotfiles repo Use Git Annex repo instead. --- bash/symlinks.sh | 2 +- encrypted/IMAP/EuAndreh.gpg | Bin 638 -> 0 bytes encrypted/IMAP/Gmail.gpg | Bin 629 -> 0 bytes encrypted/IMAP/authinfo.gpg | Bin 800 -> 0 bytes encrypted/IMAP/nu.gpg | Bin 629 -> 0 bytes mail/mbsyncrc.ini | Bin 2102 -> 2054 bytes 6 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 encrypted/IMAP/EuAndreh.gpg delete mode 100644 encrypted/IMAP/Gmail.gpg delete mode 100644 encrypted/IMAP/authinfo.gpg delete mode 100644 encrypted/IMAP/nu.gpg diff --git a/bash/symlinks.sh b/bash/symlinks.sh index a7d92be..aaeffe3 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -80,4 +80,4 @@ ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log ## GNUS -ln -fs "$DOTFILES/encrypted/IMAP/authinfo.gpg" ~/.authinfo.gpg +ln -fs "$HOME/annex/secret/IMAP/authinfo.gpg" ~/.authinfo.gpg diff --git a/encrypted/IMAP/EuAndreh.gpg b/encrypted/IMAP/EuAndreh.gpg deleted file mode 100644 index b857635..0000000 Binary files a/encrypted/IMAP/EuAndreh.gpg and /dev/null differ diff --git a/encrypted/IMAP/Gmail.gpg b/encrypted/IMAP/Gmail.gpg deleted file mode 100644 index 5cd7ad8..0000000 Binary files a/encrypted/IMAP/Gmail.gpg and /dev/null differ diff --git a/encrypted/IMAP/authinfo.gpg b/encrypted/IMAP/authinfo.gpg deleted file mode 100644 index 95162ac..0000000 Binary files a/encrypted/IMAP/authinfo.gpg and /dev/null differ diff --git a/encrypted/IMAP/nu.gpg b/encrypted/IMAP/nu.gpg deleted file mode 100644 index 0ccf9b2..0000000 Binary files a/encrypted/IMAP/nu.gpg and /dev/null differ diff --git a/mail/mbsyncrc.ini b/mail/mbsyncrc.ini index a74c30e..8760b19 100644 Binary files a/mail/mbsyncrc.ini and b/mail/mbsyncrc.ini differ -- cgit v1.2.3 From 01a77361117e3b7040116a1ce743bb3b769e24a7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:55:18 -0300 Subject: Remove Clojure credentials.clj.gpg Use Git Annex repo instead. --- encrypted/Clojure/credentials.clj.gpg | Bin 1524 -> 0 bytes encrypted/nu/nurc.sh | Bin 4092 -> 4091 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/Clojure/credentials.clj.gpg diff --git a/encrypted/Clojure/credentials.clj.gpg b/encrypted/Clojure/credentials.clj.gpg deleted file mode 100644 index 8016529..0000000 Binary files a/encrypted/Clojure/credentials.clj.gpg and /dev/null differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh index 41346e0..4b42f51 100644 Binary files a/encrypted/nu/nurc.sh and b/encrypted/nu/nurc.sh differ -- cgit v1.2.3 From 25ab15c4e9c6603227b22e021cf769edd59ca04e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 12:57:27 -0300 Subject: Remove AWS credentials Use Git Annex repo instead. --- bash/symlinks.sh | 4 ++-- encrypted/aws/config | Bin 99 -> 0 bytes encrypted/aws/credentials | Bin 371 -> 0 bytes 3 files changed, 2 insertions(+), 2 deletions(-) delete mode 100644 encrypted/aws/config delete mode 100644 encrypted/aws/credentials diff --git a/bash/symlinks.sh b/bash/symlinks.sh index aaeffe3..2a5b0b0 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -39,8 +39,8 @@ ln -fs "$DOTFILES/lein/deps.edn" ~/.clojure/deps.edn ## AWS mkdir -p ~/.aws -ln -fs "$DOTFILES/encrypted/aws/config" ~/.aws/config -ln -fs "$DOTFILES/encrypted/aws/credentials" ~/.aws/credentials +ln -fs "$HOME/annex/secret/AWS/config" ~/.aws/config +ln -fs "$HOME/annex/secret/AWS/credentials" ~/.aws/credentials ## tmux diff --git a/encrypted/aws/config b/encrypted/aws/config deleted file mode 100644 index 12454f9..0000000 Binary files a/encrypted/aws/config and /dev/null differ diff --git a/encrypted/aws/credentials b/encrypted/aws/credentials deleted file mode 100644 index d69d4ff..0000000 Binary files a/encrypted/aws/credentials and /dev/null differ -- cgit v1.2.3 From d8bf04d986847b3f17a0dd24dfc554819652931c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:00:59 -0300 Subject: Remove video-feed.sh from repo Use Git Annex repo instead. --- bash/env.sh | 3 ++- encrypted/scripts/video-feed.sh | Bin 3227 -> 0 bytes 2 files changed, 2 insertions(+), 1 deletion(-) delete mode 100755 encrypted/scripts/video-feed.sh diff --git a/bash/env.sh b/bash/env.sh index 92833d4..a582f4c 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -28,7 +28,8 @@ export PATH=~/.local/bin:$PATH # export EDITOR=vi -export PATH="$DOTFILES/scripts/:$PATH" +export PATH="$DOTFILES/scripts:$PATH" +export PATH="$HOME/annex/bin:$PATH" export INPUTRC=~/.inputrc export CACHE_DIR="$HOME/Nextcloud/cache" export PATH="$HOME/dev/libre/website/:$PATH" diff --git a/encrypted/scripts/video-feed.sh b/encrypted/scripts/video-feed.sh deleted file mode 100755 index 26fe03c..0000000 Binary files a/encrypted/scripts/video-feed.sh and /dev/null differ -- cgit v1.2.3 From 3b48b02cbbe4e2aa9e28c76d2625950cd0d17f82 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:09:35 -0300 Subject: Remove encrypted/ shell files Move Bash files to Git Annex repo. --- bash/bashrc.sh | 2 +- encrypted/env.sh | Bin 3436 -> 0 bytes encrypted/nu/nurc.sh | Bin 4091 -> 0 bytes 3 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 encrypted/env.sh delete mode 100644 encrypted/nu/nurc.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index f6fae35..9321dcc 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -15,7 +15,7 @@ source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/bash/x.sh -source $DOTFILES/encrypted/env.sh +source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/xdg.sh source $DOTFILES/bash/fake-symlinks.sh diff --git a/encrypted/env.sh b/encrypted/env.sh deleted file mode 100644 index bc1a0bf..0000000 Binary files a/encrypted/env.sh and /dev/null differ diff --git a/encrypted/nu/nurc.sh b/encrypted/nu/nurc.sh deleted file mode 100644 index 4b42f51..0000000 Binary files a/encrypted/nu/nurc.sh and /dev/null differ -- cgit v1.2.3 From bcc2c3cb9027714e9d4ec642253453d708e66bc7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:15:26 -0300 Subject: Remove symlinking actions to private data Do it in Git Annex repo instead. --- bash/symlinks.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 2a5b0b0..bae23a9 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -37,11 +37,6 @@ mkdir -p ~/.lein ~/.clojure ln -fs "$DOTFILES/lein/profiles.clj" ~/.lein/profiles.clj ln -fs "$DOTFILES/lein/deps.edn" ~/.clojure/deps.edn -## AWS -mkdir -p ~/.aws -ln -fs "$HOME/annex/secret/AWS/config" ~/.aws/config -ln -fs "$HOME/annex/secret/AWS/credentials" ~/.aws/credentials - ## tmux ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf @@ -78,6 +73,3 @@ ln -fs "$DOTFILES/mail/notmuch.ini" ~/.notmuch-config ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log - -## GNUS -ln -fs "$HOME/annex/secret/IMAP/authinfo.gpg" ~/.authinfo.gpg -- cgit v1.2.3 From 6eda4920f2081b4ce0f0290e8e45a301b251fed2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:15:48 -0300 Subject: WIP: mailing-list-import-mbox.sh --- scripts/mailing-list-import-mbox.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh index b0bb8ae..bde2841 100755 --- a/scripts/mailing-list-import-mbox.sh +++ b/scripts/mailing-list-import-mbox.sh @@ -77,6 +77,11 @@ main "$@" # mv "$file" "$HOME/Maildir/${PREFIX}junk/cur" # done +# notmuch search --output=files date:today AND folder:/INBOX/ +# +# notmuch search --output=files tag:new AND date:yesterday AND from:"DigitalOcean" | xargs -I{} mv {} ~/mbsync/EuAndreh/mailing-lists/new/ +# 1 +# mv mailing-lists/new/1559416464.17621_33.velhinho-nixos\,U\=5955\:2\, mailing-lists/new/1559416464.17621_33.velhinho-nixos # notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -- cgit v1.2.3 From d9cfd28ceead43a250fb76edecc72ec86f75e601 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:22:03 -0300 Subject: Remove tmuxinator templates Use Git Annex repo instead. --- encrypted/nu/tmux/projects/delivery-templates.yml | Bin 199 -> 0 bytes encrypted/nu/tmux/projects/facade.yml | Bin 460 -> 0 bytes encrypted/nu/tmux/projects/ghostflame.yml | Bin 228 -> 0 bytes encrypted/nu/tmux/projects/shuffle.yml | Bin 249 -> 0 bytes encrypted/nu/tmux/projects/tristram.yml | Bin 251 -> 0 bytes encrypted/nu/tmux/projects/vpn.yml | Bin 326 -> 0 bytes encrypted/nu/tmux/templates/nu-repo.yml | Bin 297 -> 0 bytes encrypted/nu/tmux/templates/nu-service.yml | Bin 584 -> 0 bytes 8 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 encrypted/nu/tmux/projects/delivery-templates.yml delete mode 100644 encrypted/nu/tmux/projects/facade.yml delete mode 100644 encrypted/nu/tmux/projects/ghostflame.yml delete mode 100644 encrypted/nu/tmux/projects/shuffle.yml delete mode 100644 encrypted/nu/tmux/projects/tristram.yml delete mode 100644 encrypted/nu/tmux/projects/vpn.yml delete mode 100644 encrypted/nu/tmux/templates/nu-repo.yml delete mode 100644 encrypted/nu/tmux/templates/nu-service.yml diff --git a/encrypted/nu/tmux/projects/delivery-templates.yml b/encrypted/nu/tmux/projects/delivery-templates.yml deleted file mode 100644 index 7408393..0000000 Binary files a/encrypted/nu/tmux/projects/delivery-templates.yml and /dev/null differ diff --git a/encrypted/nu/tmux/projects/facade.yml b/encrypted/nu/tmux/projects/facade.yml deleted file mode 100644 index 1b74a18..0000000 Binary files a/encrypted/nu/tmux/projects/facade.yml and /dev/null differ diff --git a/encrypted/nu/tmux/projects/ghostflame.yml b/encrypted/nu/tmux/projects/ghostflame.yml deleted file mode 100644 index 9069f23..0000000 Binary files a/encrypted/nu/tmux/projects/ghostflame.yml and /dev/null differ diff --git a/encrypted/nu/tmux/projects/shuffle.yml b/encrypted/nu/tmux/projects/shuffle.yml deleted file mode 100644 index b10f64f..0000000 Binary files a/encrypted/nu/tmux/projects/shuffle.yml and /dev/null differ diff --git a/encrypted/nu/tmux/projects/tristram.yml b/encrypted/nu/tmux/projects/tristram.yml deleted file mode 100644 index 08281e7..0000000 Binary files a/encrypted/nu/tmux/projects/tristram.yml and /dev/null differ diff --git a/encrypted/nu/tmux/projects/vpn.yml b/encrypted/nu/tmux/projects/vpn.yml deleted file mode 100644 index 0e9ead1..0000000 Binary files a/encrypted/nu/tmux/projects/vpn.yml and /dev/null differ diff --git a/encrypted/nu/tmux/templates/nu-repo.yml b/encrypted/nu/tmux/templates/nu-repo.yml deleted file mode 100644 index fd233a8..0000000 Binary files a/encrypted/nu/tmux/templates/nu-repo.yml and /dev/null differ diff --git a/encrypted/nu/tmux/templates/nu-service.yml b/encrypted/nu/tmux/templates/nu-service.yml deleted file mode 100644 index fb7c66c..0000000 Binary files a/encrypted/nu/tmux/templates/nu-service.yml and /dev/null differ -- cgit v1.2.3 From 9370877984c7576168abddc2d8675ce01c9c8a1b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:26:54 -0300 Subject: Remove password-hash.txt from repo Use Git Annex instead. --- encrypted/password-hash.txt | Bin 129 -> 0 bytes nixos/velhinho.nix | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 encrypted/password-hash.txt diff --git a/encrypted/password-hash.txt b/encrypted/password-hash.txt deleted file mode 100644 index a71014d..0000000 Binary files a/encrypted/password-hash.txt and /dev/null differ diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index 3de1d77..1162831 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,5 +1,5 @@ { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; - passwordFile = "/home/andreh/dev/libre/dotfiles/encrypted/password-hash.txt"; + passwordFile = "/home/andreh/annex/secret/NixOS/velhinho/password-hash.txt"; } -- cgit v1.2.3 From 183dc69b2de20939eb22c2e28ec9019c87cbc8f4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 13:28:21 -0300 Subject: TODOs.org --- TODOs.org | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/TODOs.org b/TODOs.org index bdfb24d..cfe5b03 100644 --- a/TODOs.org +++ b/TODOs.org @@ -47,11 +47,12 @@ Put all of this on the README for future easy access. 1. Preparing the USB stick; 2. Performing a fresh install; 3. Bootstraping the new installation's configuration and data. -** NEXT Workflow improvement -*** NEXT Finish importing mailing list emails +** DOING Workflow improvement +*** DOING Finish importing mailing list emails *** TODO How to simplify configuring the =ssh-agent=? https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt -*** TODO Automate backup.sh +*** DOING Simplify and automate backup.sh +*** TODO Automate ArchiveBox fetching *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects @@ -72,7 +73,8 @@ CLOSED: [2019-06-02 Sun 02:43] ** TODO House keeping *** DONE Remove borg content from repository CLOSED: [2019-06-02 Sun 11:47] -*** TODO Remove encrypted files from repository +*** DONE Remove encrypted files from repository +CLOSED: [2019-06-02 Sun 13:16] *** TODO Make creation of a new shell faster Profile =bash/bashrc.sh=. *** DONE Improve README.org -- cgit v1.2.3 From 3e0f6632d1ff2e283c3bcc4d7bf7bbe410b2ef7e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 14:11:49 -0300 Subject: Remove ad-hoc ~/archive/ rsync from backup --- scripts/backup.sh | 9 --------- 1 file changed, 9 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 7501d1d..739e94c 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -10,11 +10,6 @@ if [ ! -d ~/UTCLOUD/ ]; then exit 1 fi -if [ ! -d ~/archive/ ]; then - yellow "$HOME/archive/ folder doesn't exist. Downloading latest version from ~/UTCLOUD/archive/ into ~/archive/." - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/archive/ ~/archive -fi - if [ ! -d ~/borgbackup/ ]; then yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/." # The initial borg repo was created with: @@ -58,10 +53,6 @@ git push origin master popd green "Done." -yellow "Syncing ~/archive to ~/UTCLOUD/archive" -rsync --verbose --progress --stats --update --recursive ~/archive/ ~/UTCLOUD/archive/ -green "Done" - yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/borg/borgbackup/ green "Done" -- cgit v1.2.3 From e8b5f8c2599195faba04155ff1c459981b22454c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 14:14:15 -0300 Subject: Disable SC2086 --- bash/bashrc.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 9321dcc..c7b52a1 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash # shellcheck disable=SC1090 +# shellcheck disable=SC2086 export DOTFILES=~/dev/libre/dotfiles -- cgit v1.2.3 From 02c68276465dafbb0c8b597980067c5ccb286d5a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 14:15:09 -0300 Subject: Format Nix files (linter offense) --- default.nix | 5 ++--- utils.nix | 4 +++- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/default.nix b/default.nix index dc9418a..2050d31 100644 --- a/default.nix +++ b/default.nix @@ -35,7 +35,6 @@ in rec { (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; - publishScript = utils.overwritingPublishScript { - docsDerivation = subtasks.docs; - }; + publishScript = + utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; } diff --git a/utils.nix b/utils.nix index f02db70..942b202 100644 --- a/utils.nix +++ b/utils.nix @@ -89,7 +89,9 @@ in rec { pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail OUT_DOCS="${docsDerivation}" - ${if overwrite then "# " else ""}${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" + ${ + if overwrite then "# " else "" + }${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ "$OUT_DOCS/" \ -- cgit v1.2.3 From 87adb8d6039b1a6984247cc33f704b2e85ac27b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 14:23:26 -0300 Subject: mrconfig.ini --- git/mrconfig.ini | Bin 11600 -> 11670 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/mrconfig.ini b/git/mrconfig.ini index 50dd3ba..f67658a 100644 Binary files a/git/mrconfig.ini and b/git/mrconfig.ini differ -- cgit v1.2.3 From cc1ff3967f671ffeee98b69014815d6d98747330 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 16:03:32 -0300 Subject: Fix overwrite boolean logic bug --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 942b202..2c1a9d3 100644 --- a/utils.nix +++ b/utils.nix @@ -90,7 +90,7 @@ in rec { set -euo pipefail OUT_DOCS="${docsDerivation}" ${ - if overwrite then "# " else "" + if overwrite then "" else "# " }${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" ${pkgs.rsync}/bin/rsync -avzP \ --rsh="ssh -o StrictHostKeyChecking=no" \ -- cgit v1.2.3 From c197a368d0978e2a6378398c50bc993ae34bac65 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 16:05:02 -0300 Subject: TODOs.org --- TODOs.org | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/TODOs.org b/TODOs.org index cfe5b03..5869ff5 100644 --- a/TODOs.org +++ b/TODOs.org @@ -52,7 +52,8 @@ Put all of this on the README for future easy access. *** TODO How to simplify configuring the =ssh-agent=? https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt *** DOING Simplify and automate backup.sh -*** TODO Automate ArchiveBox fetching +*** TODO Fix screen brightness shotcuts :velhinho: +*** TODO Add play/pause, previous and next shortcuts :velhinho: *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects @@ -67,7 +68,11 @@ See https://drewdevault.com/2019/02/25/Using-git-with-discipline.html Couldn't configure it properly right now, no impactul at all on current workflow. ** TODO Guix System *** TODO Create =burn.sh=, =install.sh= and =setup.sh= =guix= installation scripts -*** TODO Consider using Btrfs? Why? Why not? +*** DONE Consider using Btrfs? Why? Why not? +CLOSED: [2019-06-02 Sun 15:04] +Guix already has initial support for it, and ZFS is incompatible with GPB :shrug: + +Test installing it on =velhinho=. *** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? CLOSED: [2019-06-02 Sun 02:43] ** TODO House keeping @@ -75,6 +80,12 @@ CLOSED: [2019-06-02 Sun 02:43] CLOSED: [2019-06-02 Sun 11:47] *** DONE Remove encrypted files from repository CLOSED: [2019-06-02 Sun 13:16] +Only the =encrypted/= folder was removed +*** TODO Change email address of git-crypt collaborator on builds.sr.ht +*** TODO Fix ArchiveBox error +*** TODO Finish ArchiveBox cronjob +*** TODO Remove public link to Pocket feed +*** TODO Remove dangling encrypted files *** TODO Make creation of a new shell faster Profile =bash/bashrc.sh=. *** DONE Improve README.org -- cgit v1.2.3 From 316939aa215181b1d22b69e94241eef757add98d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 16:11:12 -0300 Subject: Rename public/static/README.css -> docs/README.css Adapt utils.nix to point to it instead. Include README.css in fake-symlinks.sh. BONUS: Use "${VARIABLE}" instead of "$VARIABLE" in fake-symlinks.sh. --- bash/fake-symlinks.sh | 22 ++-- docs/README.css | 335 +++++++++++++++++++++++++++++++++++++++++++++++ public/static/README.css | 335 ----------------------------------------------- utils.nix | 6 +- 4 files changed, 348 insertions(+), 350 deletions(-) create mode 100644 docs/README.css delete mode 100644 public/static/README.css diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 939f519..cc83aa6 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,26 +1,28 @@ #!/usr/bin/env bash -if [[ -n "$GITHUB_TOKEN" ]]; then - envsubst < "$DOTFILES/git/gitconfig.ini" > ~/.gitconfig +if [[ -n "${GITHUB_TOKEN}" ]]; then + envsubst < "${DOTFILES}/git/gitconfig.ini" > ~/.gitconfig fi SRHT_REPOS=(website cement dotfiles) -SRHT_REPOS_PATH="$HOME/dev/libre" +SRHT_REPOS_PATH="${HOME}/dev/libre" for repo in "${SRHT_REPOS[@]}"; do - REPO="$repo" envsubst < "$DOTFILES/templates/sr-ht-build.yaml" > "$SRHT_REPOS_PATH/$repo/.build.yml" - if [[ "$repo" != "dotfiles" ]]; then - cp "$DOTFILES/utils.nix" "$SRHT_REPOS_PATH/$repo/utils.nix" + REPO="${repo}" envsubst < "${DOTFILES}/templates/sr-ht-build.yaml" > "${SRHT_REPOS_PATH}/${repo}/.build.yml" + if [[ "${repo}" != "dotfiles" ]]; then + cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/${repo}/utils.nix" + mkdir -p "${SRHT_REPOS_PATH}/${repo}/docs" + cp "${DOTFILES}/docs/README.css" "${SRHT_REPOS_PATH}/${repo}/docs/README.css" fi - if [[ "$repo" != "website" ]]; then - REPO="$repo" envsubst < "$DOTFILES/templates/env.sh" > "$SRHT_REPOS_PATH/$repo/env.sh" + if [[ "${repo}" != "website" ]]; then + REPO="${repo}" envsubst < "${DOTFILES}/templates/env.sh" > "${SRHT_REPOS_PATH}/${repo}/env.sh" fi done mkdir -p ~/.tmuxinator -for template in "$DOTFILES"/tmux/projects/*; do - cp "$template" "$HOME/.tmuxinator/$(basename "$template")" +for template in "${DOTFILES}"/tmux/projects/*; do + cp "${template}" "${HOME}/.tmuxinator/$(basename "$template")" done # DHALL_BUILD_REPOS=(website) diff --git a/docs/README.css b/docs/README.css new file mode 100644 index 0000000..c744528 --- /dev/null +++ b/docs/README.css @@ -0,0 +1,335 @@ +/* + * Taken from: + * https://gist.github.com/killercup/5917178 + * Inspired by: + * https://github.com/jerieljan/posaune-pandoc-theme + */ + +/* + * I add this to html files generated with pandoc. + */ + +html { + font-size: 100%; + overflow-y: scroll; + -webkit-text-size-adjust: 100%; + -ms-text-size-adjust: 100%; +} + +body { + color: #444; + font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; + font-size: 12px; + line-height: 1.7; + padding: 1em; + margin: auto; + max-width: 42em; + background: #fefefe; +} + +a { + color: #0645ad; + text-decoration: none; +} + +a:visited { + color: #0b0080; +} + +a:hover { + color: #06e; +} + +a:active { + color: #faa700; +} + +a:focus { + outline: thin dotted; +} + +*::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +*::selection { + background: rgba(255, 255, 0, 0.3); + color: #000; +} + +a::-moz-selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +a::selection { + background: rgba(255, 255, 0, 0.3); + color: #0645ad; +} + +p { + margin: 1em 0; +} + +img { + max-width: 100%; +} + +h1, h2, h3, h4, h5, h6 { + color: #111; + line-height: 125%; + margin-top: 2em; + font-weight: normal; +} + +h4, h5, h6 { + font-weight: bold; +} + +h1 { + font-size: 2.5em; +} + +h2 { + font-size: 2em; +} + +h3 { + font-size: 1.5em; +} + +h4 { + font-size: 1.2em; +} + +h5 { + font-size: 1em; +} + +h6 { + font-size: 0.9em; +} + +blockquote { + color: #666666; + margin: 0; + padding-left: 3em; + border-left: 0.5em #EEE solid; +} + +hr { + display: block; + height: 2px; + border: 0; + border-top: 1px solid #aaa; + border-bottom: 1px solid #eee; + margin: 1em 0; + padding: 0; +} + +pre, code, kbd, samp { + color: #000; + font-family: monospace, monospace; + _font-family: 'courier new', monospace; + font-size: 0.98em; +} + +pre { + white-space: pre; + white-space: pre-wrap; + word-wrap: break-word; +} + +b, strong { + font-weight: bold; +} + +dfn { + font-style: italic; +} + +ins { + background: #ff9; + color: #000; + text-decoration: none; +} + +mark { + background: #ff0; + color: #000; + font-style: italic; + font-weight: bold; +} + +sub, sup { + font-size: 75%; + line-height: 0; + position: relative; + vertical-align: baseline; +} + +sup { + top: -0.5em; +} + +sub { + bottom: -0.25em; +} + +ul, ol { + margin: 1em 0; + padding: 0 0 0 2em; +} + +li p:last-child { + margin-bottom: 0; +} + +ul ul, ol ol { + margin: .3em 0; +} + +dl { + margin-bottom: 1em; +} + +dt { + font-weight: bold; + margin-bottom: .8em; +} + +dd { + margin: 0 0 .8em 2em; +} + +dd:last-child { + margin-bottom: 0; +} + +img { + border: 0; + -ms-interpolation-mode: bicubic; + vertical-align: middle; +} + +figure { + display: block; + text-align: center; + margin: 1em 0; +} + +figure img { + border: none; + margin: 0 auto; +} + +figcaption { + font-size: 0.8em; + font-style: italic; + margin: 0 0 .8em; +} + +table { + margin-bottom: 2em; + border-bottom: 1px solid #ddd; + border-right: 1px solid #ddd; + border-spacing: 0; + border-collapse: collapse; +} + +table th { + padding: .2em 1em; + background-color: #eee; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; +} + +table td { + padding: .2em 1em; + border-top: 1px solid #ddd; + border-left: 1px solid #ddd; + vertical-align: top; +} + +.author { + font-size: 1.2em; + text-align: center; +} + +@media only screen and (min-width: 480px) { + body { + font-size: 14px; + } +} +@media only screen and (min-width: 768px) { + body { + font-size: 16px; + } +} +@media print { + * { + background: transparent !important; + color: black !important; + filter: none !important; + -ms-filter: none !important; + } + + body { + font-size: 12pt; + max-width: 100%; + } + + a, a:visited { + text-decoration: underline; + } + + hr { + height: 1px; + border: 0; + border-bottom: 1px solid black; + } + + a[href]:after { + content: " (" attr(href) ")"; + } + + abbr[title]:after { + content: " (" attr(title) ")"; + } + + .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { + content: ""; + } + + pre, blockquote { + border: 1px solid #999; + padding-right: 1em; + page-break-inside: avoid; + } + + tr, img { + page-break-inside: avoid; + } + + img { + max-width: 100% !important; + } + + @page :left { + margin: 15mm 20mm 15mm 10mm; +} + + @page :right { + margin: 15mm 10mm 15mm 20mm; +} + + p, h2, h3 { + orphans: 3; + widows: 3; + } + + h2, h3 { + page-break-after: avoid; + } +} diff --git a/public/static/README.css b/public/static/README.css deleted file mode 100644 index c744528..0000000 --- a/public/static/README.css +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Taken from: - * https://gist.github.com/killercup/5917178 - * Inspired by: - * https://github.com/jerieljan/posaune-pandoc-theme - */ - -/* - * I add this to html files generated with pandoc. - */ - -html { - font-size: 100%; - overflow-y: scroll; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - color: #444; - font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; - font-size: 12px; - line-height: 1.7; - padding: 1em; - margin: auto; - max-width: 42em; - background: #fefefe; -} - -a { - color: #0645ad; - text-decoration: none; -} - -a:visited { - color: #0b0080; -} - -a:hover { - color: #06e; -} - -a:active { - color: #faa700; -} - -a:focus { - outline: thin dotted; -} - -*::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -*::selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -a::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -a::selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -p { - margin: 1em 0; -} - -img { - max-width: 100%; -} - -h1, h2, h3, h4, h5, h6 { - color: #111; - line-height: 125%; - margin-top: 2em; - font-weight: normal; -} - -h4, h5, h6 { - font-weight: bold; -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; -} - -h3 { - font-size: 1.5em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1em; -} - -h6 { - font-size: 0.9em; -} - -blockquote { - color: #666666; - margin: 0; - padding-left: 3em; - border-left: 0.5em #EEE solid; -} - -hr { - display: block; - height: 2px; - border: 0; - border-top: 1px solid #aaa; - border-bottom: 1px solid #eee; - margin: 1em 0; - padding: 0; -} - -pre, code, kbd, samp { - color: #000; - font-family: monospace, monospace; - _font-family: 'courier new', monospace; - font-size: 0.98em; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -b, strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -ins { - background: #ff9; - color: #000; - text-decoration: none; -} - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold; -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -ul, ol { - margin: 1em 0; - padding: 0 0 0 2em; -} - -li p:last-child { - margin-bottom: 0; -} - -ul ul, ol ol { - margin: .3em 0; -} - -dl { - margin-bottom: 1em; -} - -dt { - font-weight: bold; - margin-bottom: .8em; -} - -dd { - margin: 0 0 .8em 2em; -} - -dd:last-child { - margin-bottom: 0; -} - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} - -figure { - display: block; - text-align: center; - margin: 1em 0; -} - -figure img { - border: none; - margin: 0 auto; -} - -figcaption { - font-size: 0.8em; - font-style: italic; - margin: 0 0 .8em; -} - -table { - margin-bottom: 2em; - border-bottom: 1px solid #ddd; - border-right: 1px solid #ddd; - border-spacing: 0; - border-collapse: collapse; -} - -table th { - padding: .2em 1em; - background-color: #eee; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; -} - -table td { - padding: .2em 1em; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; - vertical-align: top; -} - -.author { - font-size: 1.2em; - text-align: center; -} - -@media only screen and (min-width: 480px) { - body { - font-size: 14px; - } -} -@media only screen and (min-width: 768px) { - body { - font-size: 16px; - } -} -@media print { - * { - background: transparent !important; - color: black !important; - filter: none !important; - -ms-filter: none !important; - } - - body { - font-size: 12pt; - max-width: 100%; - } - - a, a:visited { - text-decoration: underline; - } - - hr { - height: 1px; - border: 0; - border-bottom: 1px solid black; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; - } - - pre, blockquote { - border: 1px solid #999; - padding-right: 1em; - page-break-inside: avoid; - } - - tr, img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page :left { - margin: 15mm 20mm 15mm 10mm; -} - - @page :right { - margin: 15mm 10mm 15mm 20mm; -} - - p, h2, h3 { - orphans: 3; - widows: 3; - } - - h2, h3 { - page-break-after: avoid; - } -} diff --git a/utils.nix b/utils.nix index 2c1a9d3..6870cba 100644 --- a/utils.nix +++ b/utils.nix @@ -61,16 +61,12 @@ in rec { exit 1 ''; }); - readmeCss = builtins.fetchurl { - url = "https://euandre.org/dotfiles/static/README.css"; - sha256 = "1r7ak92zsbhjm1qxz0r3dig0yxb41l43zl0yai63izha2s5r54d4"; - }; readmeOrg = title: baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-readme-docs"; buildInputs = [ pkgs.pandoc ]; buildPhase = '' - pandoc README.org -o $out --css ${readmeCss} --to=html5 --self-contained --metadata title="${title}" + pandoc README.org -o $out --css docs/README.css --to=html5 --self-contained --metadata title="${title}" ''; }); test = testDerivations: -- cgit v1.2.3 From 6b633dbce79b8ff6668f4e15d2edd3d825d10c28 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 16:26:06 -0300 Subject: TODOs.org --- TODOs.org | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/TODOs.org b/TODOs.org index 5869ff5..8d7fb7a 100644 --- a/TODOs.org +++ b/TODOs.org @@ -75,14 +75,14 @@ Guix already has initial support for it, and ZFS is incompatible with GPB :shrug Test installing it on =velhinho=. *** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? CLOSED: [2019-06-02 Sun 02:43] -** TODO House keeping +** DOING House keeping *** DONE Remove borg content from repository CLOSED: [2019-06-02 Sun 11:47] *** DONE Remove encrypted files from repository CLOSED: [2019-06-02 Sun 13:16] Only the =encrypted/= folder was removed *** TODO Change email address of git-crypt collaborator on builds.sr.ht -*** TODO Fix ArchiveBox error +*** DOING Fix ArchiveBox error *** TODO Finish ArchiveBox cronjob *** TODO Remove public link to Pocket feed *** TODO Remove dangling encrypted files @@ -95,6 +95,7 @@ CLOSED: [2019-06-02 Sun 02:43] ** TODO Test elfeed This way I can more easily link to an article from org-mode! * Fixes -** TODO Adjust layout for =annex.yml= tmuxinator template +** CANCELLED Adjust layout for =annex.yml= tmuxinator template +I actually got used to it and now I like it :) ** TODO Make xmodmap commands declarative ** TODO Open =.description= files with text editor -- cgit v1.2.3 From bb242485889f55aacad9f06788fa2be676ca83e4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 20:41:50 -0300 Subject: Remove ssh_config.conf file from repo Use Git Annex repository instead. --- .gitattributes | 1 - bash/symlinks.sh | 4 ---- ssh_config.conf | Bin 317 -> 0 bytes 3 files changed, 5 deletions(-) delete mode 100644 ssh_config.conf diff --git a/.gitattributes b/.gitattributes index 214f4d6..44e95a0 100644 --- a/.gitattributes +++ b/.gitattributes @@ -6,6 +6,5 @@ git/gitconfig.ini filter=git-crypt diff=git-crypt emacs/gnus.el filter=git-crypt diff=git-crypt emacs/not-much.el filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt -ssh_config.conf filter=git-crypt diff=git-crypt newsboat/urls filter=git-crypt diff=git-crypt newsboat/elfeed.org filter=git-crypt diff=git-crypt diff --git a/bash/symlinks.sh b/bash/symlinks.sh index bae23a9..2cb1d30 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -23,10 +23,6 @@ isLinux && { ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc } -## SSH config -mkdir -p ~/.ssh -ln -fs "$DOTFILES/ssh_config.conf" ~/.ssh/config - ln -fs "$DOTFILES/git/mrconfig.ini" ~/.mrconfig upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD diff --git a/ssh_config.conf b/ssh_config.conf deleted file mode 100644 index e672cef..0000000 Binary files a/ssh_config.conf and /dev/null differ -- cgit v1.2.3 From d56346d5144db7872fa026ea8513cfe0b264a2da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 21:00:46 -0300 Subject: Fix dangling references to owncloud instead of Nextcloud --- nixos/configuration.nix | 1 - scripts/once-only-nextcloud.sh | 2 +- xmonad/xmonad.hs | 2 +- 3 files changed, 2 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d2d27b3..5d891e6 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -105,7 +105,6 @@ in { gnupg mr nextcloud-client - owncloud-client nextcloud-client borgbackup git-sizer diff --git a/scripts/once-only-nextcloud.sh b/scripts/once-only-nextcloud.sh index 7754c34..7886b6f 100755 --- a/scripts/once-only-nextcloud.sh +++ b/scripts/once-only-nextcloud.sh @@ -5,5 +5,5 @@ then echo "Nextcloud already running." else echo "Nextcloud not running yet. Starting it." - owncloud & disown + nextcloud & disown fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 74d4d63..38c27b8 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -99,5 +99,5 @@ startup = do spawn "xmobar ~/.xmobarrc" spawn "killall trayer; trayer --edge top --align right --SetDockType false --SetPartialStrut false --expand false --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" spawn "nm-applet" - spawn "~/dev/libre/dotfiles/scripts/once-only-owncloud.sh" + spawn "~/dev/libre/dotfiles/scripts/once-only-nextcloud.sh" setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad -- cgit v1.2.3 From 9c87a4d987d34721b767eadd6e55eab4811b66c0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Jun 2019 21:01:25 -0300 Subject: Remove duplicate declaration of nextcloud-client package --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5d891e6..b491458 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -105,7 +105,6 @@ in { gnupg mr nextcloud-client - nextcloud-client borgbackup git-sizer -- cgit v1.2.3 From 956f5928d51cefa37a743d199e0de4fdc5eba8a7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 08:18:41 -0300 Subject: Remove mail/* Use Git Annex repo instead. --- .gitattributes | 1 - bash/symlinks.sh | 3 --- default.nix | 2 +- mail/mbsyncrc.ini | Bin 2054 -> 0 bytes mail/notmuch-post.sh | Bin 4979 -> 0 bytes mail/notmuch.el | Bin 2218 -> 0 bytes mail/notmuch.ini | Bin 278 -> 0 bytes spacemacs.el | 2 +- 8 files changed, 2 insertions(+), 6 deletions(-) delete mode 100644 mail/mbsyncrc.ini delete mode 100755 mail/notmuch-post.sh delete mode 100644 mail/notmuch.el delete mode 100644 mail/notmuch.ini diff --git a/.gitattributes b/.gitattributes index 44e95a0..db55335 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,4 @@ encrypted/**/* filter=git-crypt diff=git-crypt -mail/* filter=git-crypt diff=git-crypt git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt git/gitconfig.ini filter=git-crypt diff=git-crypt diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 2cb1d30..4c9abd5 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -63,9 +63,6 @@ ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc ## Mail mkdir -p ~/mbsync/.notmuch/hooks ~/mbsync/EuAndreh ~/mbsync/Gmail ~/mbsync/Nubank -ln -fs "$DOTFILES/mail/notmuch-post.sh" ~/mbsync/.notmuch/hooks/post-new -ln -fs "$DOTFILES/mail/mbsyncrc.ini" ~/.mbsyncrc -ln -fs "$DOTFILES/mail/notmuch.ini" ~/.notmuch-config ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log diff --git a/default.nix b/default.nix index 2050d31..873c9e0 100644 --- a/default.nix +++ b/default.nix @@ -31,7 +31,7 @@ in rec { }; test = utils.test [ utils.formatNix - (utils.shellcheck ".*(encrypted|notmuch-post.sh).*") + (utils.shellcheck ".*(encrypted).*") (utils.fixme [ "default.nix" "utils.nix" ]) subtasks.uniqueFeeds ]; diff --git a/mail/mbsyncrc.ini b/mail/mbsyncrc.ini deleted file mode 100644 index 8760b19..0000000 Binary files a/mail/mbsyncrc.ini and /dev/null differ diff --git a/mail/notmuch-post.sh b/mail/notmuch-post.sh deleted file mode 100755 index 3eaec19..0000000 Binary files a/mail/notmuch-post.sh and /dev/null differ diff --git a/mail/notmuch.el b/mail/notmuch.el deleted file mode 100644 index 7eaf0f7..0000000 Binary files a/mail/notmuch.el and /dev/null differ diff --git a/mail/notmuch.ini b/mail/notmuch.ini deleted file mode 100644 index df72a7d..0000000 Binary files a/mail/notmuch.ini and /dev/null differ diff --git a/spacemacs.el b/spacemacs.el index f45be89..04a0f3b 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -584,7 +584,7 @@ dump." ("M-s-a" . (lambda () (interactive) (insert "\\"))) ("M-s-s" . (lambda () (interactive) (insert "|"))))) -(defvar custom-el-files '("~/dev/libre/dotfiles/mail/notmuch.el" +(defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" "~/.quicklisp/slime-helper.el")) (defmacro measure-time (&rest body) -- cgit v1.2.3 From 0fbebfdee3d96817261a38111bb33e1312b13742 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 12:29:36 -0300 Subject: Rename mail.sh -> sync-mail.sh --- bash/aliases.sh | 2 +- nixos/configuration.nix | 2 +- scripts/mail.sh | 11 ----------- scripts/sync-mail.sh | 11 +++++++++++ 4 files changed, 13 insertions(+), 13 deletions(-) delete mode 100755 scripts/mail.sh create mode 100755 scripts/sync-mail.sh diff --git a/bash/aliases.sh b/bash/aliases.sh index 8e8c3b2..ffda8bd 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -23,7 +23,7 @@ alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" alias perl6="rlwrap perl6" -alias m="mail.sh" +alias m="sync-mail.sh" alias a="atom.sh" alias n="newsboat -r" alias sb="songbooks" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b491458..1765c7c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -329,7 +329,7 @@ in { # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = [ # Sync emails with mbsync every hour - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/mail.sh -s" + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/sync-mail.sh -s" # Archive Pocket data every 12 hours "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s" diff --git a/scripts/mail.sh b/scripts/mail.sh deleted file mode 100755 index 1446485..0000000 --- a/scripts/mail.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash - -if [ "$1" = "-s" ]; then - mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log -else - mbsync EuAndreh & - mbsync Nubank & - mbsync Gmail & - wait - notmuch new 2> /dev/null -fi diff --git a/scripts/sync-mail.sh b/scripts/sync-mail.sh new file mode 100755 index 0000000..00c111f --- /dev/null +++ b/scripts/sync-mail.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +if [ "$1" = "-s" ]; then + mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log +else + mbsync EuAndreh & + mbsync Nubank & + mbsync Gmail & + wait + notmuch new +fi -- cgit v1.2.3 From eea8eed87a0fe553e049fe8b5b380ea99917605e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 13:44:11 -0300 Subject: Add helper mail.sh email sender script --- scripts/mail.sh | 50 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 50 insertions(+) create mode 100755 scripts/mail.sh diff --git a/scripts/mail.sh b/scripts/mail.sh new file mode 100755 index 0000000..e8e5ca7 --- /dev/null +++ b/scripts/mail.sh @@ -0,0 +1,50 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname ${BASH_SOURCE[0]})" + +usage() { + red "Missing input argument '${1}'.\n" + cat < + + Arguments + RECIPIENTS Comma-separated string of emails to receive the email. + SUBJECT The text of the email subject. + BODY The body of the email. Can contain \n in the text. + FROM The from address to send from (be aware of matching DKIM signature). + +Examples: + Send an email to to@example.org: + mail.sh to@example.org Subject Body from@example.org +EOF +} + +RECIPIENTS="${1:-}" +SUBJECT="${2:-}" +BODY="${3:-}" +FROM="${4:-}" + +[[ -z "${RECIPIENTS}" ]] && { + usage 'RECIPIENTS' + exit 2 +} + +[[ -z "${SUBJECT}" ]] && { + usage 'SUBJECT' + exit 2 +} + +[[ -z "${BODY}" ]] && { + usage 'BODY' + exit 2 +} + +[[ -z "${FROM}" ]] && { + usage 'FROM' + exit 2 +} + +ssh euandre.org "echo \"${BODY}\" | mail -s \"${SUBJECT}\" \"${RECIPIENTS}\" -a BCC:cc@euandre.org -a From:\"${FROM}\" -a \"Content-Type: text/plain; charset=UTF-8\"" + +printf "Subject: $SUBJECT\nRecipient: $RECIPIENTS\n\n$BODY\n" >> "${HOME}/annex/txt/mail/$(date -Ins).txt" -- cgit v1.2.3 From 7fac9c6b6c0a2ef903fe20cba0894466c88deddc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 13:45:12 -0300 Subject: Import emails from GNU mailing lists automatically Working implementation of importing GNU mailing lists MBOX archives and putting them on the =mailing-lists= mbsync folder. The script also triggers an subscription to the mailing list via email, which does nothing in case I'm already subscribed to it. :tada: --- scripts/mailing-list-import-mbox.sh | 75 ++++++++++++++++--------------------- 1 file changed, 32 insertions(+), 43 deletions(-) diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh index bde2841..2cf0d9d 100755 --- a/scripts/mailing-list-import-mbox.sh +++ b/scripts/mailing-list-import-mbox.sh @@ -1,34 +1,40 @@ -#!/usr/bin/env bash #!/usr/bin/env nix-shell -#!nix-shell --pure -i bash -p bash +#!nix-shell -i bash -p bash wget mb2md # shellcheck shell=bash set -Eeuo pipefail -MAILING_LIST_NAME="${1:-}" +MAILING_LIST_PROVIDER="${1:-}" +MAILING_LIST_NAME="${2:-}" GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" -TMP_DIR="$HOME/tmp/mbox-import/" +TMP_DIR="$HOME/tmp/mbox-import" usage() { cat < Arguments - MAILING_LIST_NAME The name of the mailing list. + MAILING_LIST_NAME The name of the mailing list, e.g.: info-guix. + MAILING_LIST_PROVIDER The name of the host of the mailing list, e.g.: gnu. + Supported providers: + 'gnu' for GNU mailing lists + 'google' for Google Groups Examples: Download and import into mbsync the MBOX archive from info-guix mailing-list: - echo 1 | mailing-list-import-mbox.sh info-guix + mailing-list-import-mbox.sh gnu info-guix Download and import into mbsync the contents for lisp-br Google Groups: - echo 2 | mailing-list-import-mbox.sh lisp-br + mailing-list-import-mbox.sh google lisp-br EOF } -set -x gnu_mailing_list_import() { mkdir -p "${TMP_DIR}" pushd "${TMP_DIR}" + local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" + local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" + mail.sh "${recipient}" "${subject}" " " 'mailing-list@euandre.org' wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" @@ -40,54 +46,37 @@ google_groups_import() { } main() { + [[ -z "${MAILING_LIST_PROVIDER}" ]] && { + red "Missing input argument 'MAILING_LIST_PROVIDER'.\n" + usage + exit 2 + } + [[ -z "${MAILING_LIST_NAME}" ]] && { - red "Missing input argument MAILING_LIST_NAME.\n" + red "Missing input argument 'MAILING_LIST_NAME'.\n" usage exit 2 } - echo "(1) - GNU mailing lists (lists.gnu.org)" - echo "(2) - Google Groups" - read -p "Which type of mailing list do you want to import? " -n 1 -r - echo # Move to a new line - case "$REPLY" in - "1") + case "${MAILING_LIST_PROVIDER}" in + "gnu") gnu_mailing_list_import ;; - "2") + "google") google_groups_import ;; *) - red "Unsupported mailing list type." - red "Exitting." + red "Unsupported mailing list provider '${MAILING_LIST_PROVIDER}'." usage exit 2 ;; esac -} - -main "$@" - -# notmuch search --output=files tag:spam \ - # and not folder:${PREFIX}junk \ - # and not folder:${PREFIX}greyspam \ - # and not folder:Koumbit/INBOX \ - # and not path:Koumbit/** \ - # | while read file; do -# mv "$file" "$HOME/Maildir/${PREFIX}junk/cur" -# done - -# notmuch search --output=files date:today AND folder:/INBOX/ -# -# notmuch search --output=files tag:new AND date:yesterday AND from:"DigitalOcean" | xargs -I{} mv {} ~/mbsync/EuAndreh/mailing-lists/new/ -# 1 -# mv mailing-lists/new/1559416464.17621_33.velhinho-nixos\,U\=5955\:2\, mailing-lists/new/1559416464.17621_33.velhinho-nixos - -# notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" + echo "${MAILING_LIST_PROVIDER} ${MAILING_LIST_NAME}" >> ~/annex/txt/mailing-list-subscriptions.txt + green "Done." + yellow "Make sure to add the correct tagging rules for notmuch post-hook!" + blue "Remember to sync new changes by running sync-mail.sh!" +} -# https://julien.danjou.info/why-notmuch-is-not-much-good/ -# https://www.reddit.com/r/emacs/comments/6z13yw/notmuch_vs_imap_and_sieve/ -# https://anarc.at/blog/2016-05-12-email-setup/ -# https://duckduckgo.com/?q=notmuch+sieve&t=ffab&atb=v166-1&ia=web +main "$@" -- cgit v1.2.3 From 822047db1a7b20374db1c1113072c91123e91872 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 17:06:10 -0300 Subject: Remove newsboat and elfeed files Use Git Annex repository instead. --- .gitattributes | 2 -- bash/symlinks.sh | 6 ------ default.nix | 12 ------------ newsboat/config | 1 - newsboat/elfeed.org | Bin 71 -> 0 bytes newsboat/urls | Bin 1872 -> 0 bytes 6 files changed, 21 deletions(-) delete mode 100644 newsboat/config delete mode 100644 newsboat/elfeed.org delete mode 100644 newsboat/urls diff --git a/.gitattributes b/.gitattributes index db55335..b855d3c 100644 --- a/.gitattributes +++ b/.gitattributes @@ -5,5 +5,3 @@ git/gitconfig.ini filter=git-crypt diff=git-crypt emacs/gnus.el filter=git-crypt diff=git-crypt emacs/not-much.el filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt -newsboat/urls filter=git-crypt diff=git-crypt -newsboat/elfeed.org filter=git-crypt diff=git-crypt diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 4c9abd5..c8234a4 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -39,18 +39,12 @@ ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf -## Newsboat -mkdir -p ~/.newsboat -ln -fs "$DOTFILES/newsboat/urls" ~/.newsboat/urls -ln -fs "$DOTFILES/newsboat/config" ~/.newsboat/config - ## NixOS ln -fs "$DOTFILES/nixos/evince.destkop" ~/.local/share/applications/evince.desktop ln -fs "$DOTFILES/nixos/firefox.destkop" ~/.local/share/applications/firefox.desktop ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" -ln -fs "$DOTFILES/newsboat/elfeed.org" ~/.emacs.d/private/elfeed.org ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs ln -fs "$DOTFILES/emacs/gnus.el" ~/.gnus.el [[ -d ~/.emacs.d/.cache/layouts/ ]] && ln -fs "$CACHE_DIR/euandreh-auto-save.el" ~/.emacs.d/.cache/layouts/euandreh-auto-save diff --git a/default.nix b/default.nix index 873c9e0..4956c90 100644 --- a/default.nix +++ b/default.nix @@ -8,18 +8,6 @@ in rec { baseName = "dotfiles"; }; subtasks = rec { - uniqueFeeds = utils.baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-unique-feeds"; - buildPhase = '' - OUT="$(uniq -D <(sort ./newsboat/urls))" - [[ $OUT = "" ]] || { - echo "Duplicate subscriptions found in ./newsboat/urls:" - echo "$OUT" - exit 1 - } - touch $out - ''; - }); docs = utils.baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-docs"; buildPhase = '' diff --git a/newsboat/config b/newsboat/config deleted file mode 100644 index a7998d9..0000000 --- a/newsboat/config +++ /dev/null @@ -1 +0,0 @@ -browser firefox \ No newline at end of file diff --git a/newsboat/elfeed.org b/newsboat/elfeed.org deleted file mode 100644 index 46b13ef..0000000 Binary files a/newsboat/elfeed.org and /dev/null differ diff --git a/newsboat/urls b/newsboat/urls deleted file mode 100644 index cbc039f..0000000 Binary files a/newsboat/urls and /dev/null differ -- cgit v1.2.3 From bf432a8e4cfc9923fe1b17ef4433542e91c034ff Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 17:07:33 -0300 Subject: Suppress uidvalidity and mbsyncstate warnings from notmuch --- scripts/sync-mail.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/sync-mail.sh b/scripts/sync-mail.sh index 00c111f..ce95276 100755 --- a/scripts/sync-mail.sh +++ b/scripts/sync-mail.sh @@ -7,5 +7,5 @@ else mbsync Nubank & mbsync Gmail & wait - notmuch new + notmuch new 2> >(grep -E -v 'Note: Ignoring non-mail file: .*\.(uidvalidity|mbsyncstate)') fi -- cgit v1.2.3 From 32ea882894d5a1aed725c7041f029112332cb398 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 20:21:17 -0300 Subject: Re-enable Guix, update Guix paths --- bash/env.sh | 8 ++++---- nixos/configuration.nix | 4 ++-- scripts/guix | 2 +- 3 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index a582f4c..0c33b44 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -70,10 +70,10 @@ isLinux && { # Guix # -# export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" -# isLinux && { -# source "$GUIX_PROFILE" -# } +export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" +isLinux && { + source "$GUIX_PROFILE" +} export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1765c7c..6819f07 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -435,11 +435,11 @@ in { # Derived from Guix guix-daemon.service.in # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 guix-daemon = { - enable = false; + enable = true; description = "Build daemon for GNU Guix"; serviceConfig = { ExecStart = - "/var/guix/profiles/per-user/root/guix-profile/bin/guix-daemon --build-users-group=guixbuild"; + "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; Environment = "GUIX_LOCPATH=/root/.guix-profile/lib/locale"; RemainAfterExit = "yes"; StandardOutput = "syslog"; diff --git a/scripts/guix b/scripts/guix index 96901ae..65b4074 120000 --- a/scripts/guix +++ b/scripts/guix @@ -1 +1 @@ -/var/guix/profiles/per-user/root/guix-profile/bin/guix \ No newline at end of file +/var/guix/profiles/per-user/root/current-guix/bin/guix \ No newline at end of file -- cgit v1.2.3 From 086549790b8d1f55fbe26a97e62d95a3a20f72db Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Jun 2019 21:10:00 -0300 Subject: Remove dangling uniqueFeeds derivation from test --- default.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/default.nix b/default.nix index 4956c90..e6ba031 100644 --- a/default.nix +++ b/default.nix @@ -21,7 +21,6 @@ in rec { utils.formatNix (utils.shellcheck ".*(encrypted).*") (utils.fixme [ "default.nix" "utils.nix" ]) - subtasks.uniqueFeeds ]; publishScript = utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; -- cgit v1.2.3 From e6279b5f6d7258263c9621b6db1590d15244004f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 05:57:51 -0300 Subject: Add -x flag to shellcheck in utils.nix --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 6870cba..326966a 100644 --- a/utils.nix +++ b/utils.nix @@ -20,7 +20,7 @@ in rec { ignoredPattern = if ignoredFindPattern == null then "" else ignoredFindPattern; buildPhase = '' - find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck + find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck -x touch $out ''; }); -- cgit v1.2.3 From d750863666c0589e5a38b62f27dacee49fd77aa3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 05:58:48 -0300 Subject: Inline definition of rootSrc --- default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/default.nix b/default.nix index e6ba031..101d65b 100644 --- a/default.nix +++ b/default.nix @@ -1,10 +1,9 @@ let pkgs = import { }; - rootSrc = pkgs.nix-gitignore.gitignoreSource [ ] ./.; in rec { utils = import ./utils.nix { pkgs = pkgs; - src = rootSrc; + src = pkgs.nix-gitignore.gitignoreSource [ ] ./.; baseName = "dotfiles"; }; subtasks = rec { -- cgit v1.2.3 From 04fce6a62e75eda5b5f35e3bbb9f8681ada7ad10 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 06:03:01 -0300 Subject: Deregister encrypted/* from git crypt --- .gitattributes | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitattributes b/.gitattributes index b855d3c..da26a4b 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,3 @@ -encrypted/**/* filter=git-crypt diff=git-crypt git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt git/gitconfig.ini filter=git-crypt diff=git-crypt -- cgit v1.2.3 From 12206f448ea15dfe7139f2e87cf78a58b0f01904 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 08:27:17 -0300 Subject: Increase time of tmux display-panes-time --- tmux/tmux.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 3cf53cb..1adc419 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -59,3 +59,7 @@ set -sg escape-time 0 # Enable arrow key navigation set-option -gw xterm-keys on + +# Display pane numbers for longer +# https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q +set -g display-panes-time 2500 \ No newline at end of file -- cgit v1.2.3 From ac6272edea1b8a825e0d3d6977cf5815c45b56d5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 08:27:34 -0300 Subject: cp utils.nix into annex repository too --- bash/fake-symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index cc83aa6..9972b42 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -18,6 +18,7 @@ for repo in "${SRHT_REPOS[@]}"; do REPO="${repo}" envsubst < "${DOTFILES}/templates/env.sh" > "${SRHT_REPOS_PATH}/${repo}/env.sh" fi done +cp "${DOTFILES}/utils.nix" ~/annex/utils.nix mkdir -p ~/.tmuxinator -- cgit v1.2.3 From ad4bd3e536698786b3b0d4f1fa7dc74699180718 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 08:27:53 -0300 Subject: TODOs.org --- TODOs.org | 27 ++++++++++++++++++++++++++- 1 file changed, 26 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 8d7fb7a..ef23180 100644 --- a/TODOs.org +++ b/TODOs.org @@ -54,6 +54,14 @@ https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatical *** DOING Simplify and automate backup.sh *** TODO Fix screen brightness shotcuts :velhinho: *** TODO Add play/pause, previous and next shortcuts :velhinho: +*** TODO Use [[https://github.com/rycee/home-manager][home-manager]] instead of ad-hoc symlinking +*** TODO Show the package added by =nix-shell= in =$PS1= +*** TODO Use Spacemacs with NixOS +https://www.reddit.com/r/NixOS/comments/bw2ret/using_nixos_as_an_stateless_workstation/ +https://matthewbauer.us/bauer/ +https://github.com/matthewbauer/bauer +https://gitlab.com/rycee/configurations/blob/e3c1592544e9757ab7bc1026a89a31aa067f3b3e/user/emacs.nix +https://discourse.nixos.org/t/using-nixos-as-an-stateless-workstation/3081/8 *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects @@ -81,16 +89,33 @@ CLOSED: [2019-06-02 Sun 11:47] *** DONE Remove encrypted files from repository CLOSED: [2019-06-02 Sun 13:16] Only the =encrypted/= folder was removed -*** TODO Change email address of git-crypt collaborator on builds.sr.ht +*** TODO Change email address of SSH key pair in builds.sr.ht *** DOING Fix ArchiveBox error *** TODO Finish ArchiveBox cronjob +*** TODO Refile "archived" emails into actual Archive folder +Query for =tag:archive AND folder:/INBOX/= emails and refile them into =Archive= folder: +#+BEGIN_SRC shell +# WIP +OUT="${HOME}/mbsync/EuAndreh/Archive/cur" +notmuch search --output=files tag:archive AND folder:/INBOX/ | xargs -I{} mv "{}" "${OUT}/$(echo {} | awk -F, '{print $1}' | awk -F/ '{print $NF}')" +#+END_SRC +Make sure to keep existing tags from it? Will there be any case, since they're all INBOX emails? *** TODO Remove public link to Pocket feed *** TODO Remove dangling encrypted files *** TODO Make creation of a new shell faster Profile =bash/bashrc.sh=. +*** TODO Allow Emacs to link to =sr.ht= repository with =SPC g l L= +*** TODO Improve =mailing-list-import-mbox.sh= +**** TODO Import MBOX archive from sr.ht +Relatevant tickets: +- https://todo.sr.ht/~sircmpwn/lists.sr.ht/22 +- https://todo.sr.ht/~sircmpwn/lists.sr.ht/94 +**** TODO Import MBOX archive from Discourse *** DONE Improve README.org CLOSED: [2019-06-02 Sun 02:43] *** TODO Remove =shellcheck disable= directives +*** TODO Add clipboard manager +*** TODO Configure Emacs registers * Nice to have ** TODO Test elfeed This way I can more easily link to an article from org-mode! -- cgit v1.2.3 From f455645eb9cef820ab935583edbcd664c9bbbe6f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 09:13:52 -0300 Subject: Format default.nix (linter offense) --- default.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/default.nix b/default.nix index 101d65b..6d5e6f3 100644 --- a/default.nix +++ b/default.nix @@ -1,5 +1,4 @@ -let - pkgs = import { }; +let pkgs = import { }; in rec { utils = import ./utils.nix { pkgs = pkgs; -- cgit v1.2.3 From a0b1b8429917f18b6edf0fce2890bf79d687b820 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 09:36:33 -0300 Subject: Fix ShellCheck errors in Bash files --- bash/env.sh | 1 + scripts/mail.sh | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 0c33b44..0a777d4 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -72,6 +72,7 @@ isLinux && { export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" isLinux && { + # shellcheck disable=SC1090 source "$GUIX_PROFILE" } export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" diff --git a/scripts/mail.sh b/scripts/mail.sh index e8e5ca7..abf48f2 100755 --- a/scripts/mail.sh +++ b/scripts/mail.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -cd "$(dirname ${BASH_SOURCE[0]})" +cd "$(dirname "${BASH_SOURCE[0]}")" usage() { red "Missing input argument '${1}'.\n" @@ -45,6 +45,7 @@ FROM="${4:-}" exit 2 } +# shellcheck disable=SC2029 ssh euandre.org "echo \"${BODY}\" | mail -s \"${SUBJECT}\" \"${RECIPIENTS}\" -a BCC:cc@euandre.org -a From:\"${FROM}\" -a \"Content-Type: text/plain; charset=UTF-8\"" -printf "Subject: $SUBJECT\nRecipient: $RECIPIENTS\n\n$BODY\n" >> "${HOME}/annex/txt/mail/$(date -Ins).txt" +printf "Subject: %s\nRecipients: %s\n\n%s\n" "${SUBJECT}" "${RECIPIENTS}" "${BODY}" >> "${HOME}/annex/txt/mail/$(date -Ins).txt" -- cgit v1.2.3 From f6f9f1fb32f862c06205af01f42223f9814100dd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 09:37:50 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index ef23180..7b28e59 100644 --- a/TODOs.org +++ b/TODOs.org @@ -56,6 +56,8 @@ https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatical *** TODO Add play/pause, previous and next shortcuts :velhinho: *** TODO Use [[https://github.com/rycee/home-manager][home-manager]] instead of ad-hoc symlinking *** TODO Show the package added by =nix-shell= in =$PS1= +*** TODO Improve spam filtering +https://notmuchmail.org/initial_tagging/ *** TODO Use Spacemacs with NixOS https://www.reddit.com/r/NixOS/comments/bw2ret/using_nixos_as_an_stateless_workstation/ https://matthewbauer.us/bauer/ -- cgit v1.2.3 From e1cebbfff10e610e97b9b000a3f221c73479ebfb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 14:10:48 -0300 Subject: Install procmail package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6819f07..a2d5d5e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -196,6 +196,7 @@ in { notmuch isync + procmail # includes =formail= ## Spell checking -- cgit v1.2.3 From f0d7762111386a33624898027fac5b8176c2a8c4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 14:21:33 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index 7b28e59..4303da4 100644 --- a/TODOs.org +++ b/TODOs.org @@ -40,6 +40,7 @@ chmod +x ./install.sh #+END_SOURCE *** DOING Setup phase **** DOING Fix =enabling= of Git Annex remotes +**** TODO Install Guix *** DONE Document the discrete three step phases CLOSED: [2019-06-01 Sat 22:04] Put all of this on the README for future easy access. -- cgit v1.2.3 From 054d0749de102da52f385128a2b6c9bdf064aef6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jun 2019 14:41:27 -0300 Subject: TODOs.org --- TODOs.org | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/TODOs.org b/TODOs.org index 4303da4..3f4fbeb 100644 --- a/TODOs.org +++ b/TODOs.org @@ -96,11 +96,11 @@ Only the =encrypted/= folder was removed *** DOING Fix ArchiveBox error *** TODO Finish ArchiveBox cronjob *** TODO Refile "archived" emails into actual Archive folder -Query for =tag:archive AND folder:/INBOX/= emails and refile them into =Archive= folder: +Query for =tag:archive AND tag:euandreh AND folder:/INBOX/= emails and refile them into =Archive= folder: #+BEGIN_SRC shell # WIP OUT="${HOME}/mbsync/EuAndreh/Archive/cur" -notmuch search --output=files tag:archive AND folder:/INBOX/ | xargs -I{} mv "{}" "${OUT}/$(echo {} | awk -F, '{print $1}' | awk -F/ '{print $NF}')" +notmuch search --output=files tag:archive AND tag:euandreh AND folder:/INBOX/ | xargs -I{} mv "{}" "${OUT}/$(echo {} | awk -F, '{print $1}' | awk -F/ '{print $NF}')" #+END_SRC Make sure to keep existing tags from it? Will there be any case, since they're all INBOX emails? *** TODO Remove public link to Pocket feed -- cgit v1.2.3 From 9e7374961dad185948a0501307f240be08029d21 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jun 2019 17:35:00 -0300 Subject: Copy utils.nix to VPS repo --- bash/fake-symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 9972b42..0197028 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -19,6 +19,7 @@ for repo in "${SRHT_REPOS[@]}"; do fi done cp "${DOTFILES}/utils.nix" ~/annex/utils.nix +cp "${DOTFILES}/utils.nix" ~/dev/libre/vps/ mkdir -p ~/.tmuxinator -- cgit v1.2.3 From b71aedce4397986c7781d80c58d52b626e22052e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jun 2019 17:35:12 -0300 Subject: Ignore "utils.nix" by default instead of "default.nix" --- utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/utils.nix b/utils.nix index 326966a..3167399 100644 --- a/utils.nix +++ b/utils.nix @@ -47,7 +47,7 @@ in rec { buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" (if ignoredFiles == null then [ - "default.nix" + "utils.nix" "TODOs.org" ] else ignoredFiles); -- cgit v1.2.3 From b55f164c05fa427e116eefbec9c644d48775384a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Jun 2019 11:14:07 -0300 Subject: Add Spacemacs graphviz layer --- spacemacs.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 04a0f3b..6f85daf 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -39,7 +39,8 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - `(systemd + `(graphviz + systemd asciidoc ansible auto-completion @@ -794,7 +795,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From d04bd8bbc3ca61a7c725971d205a0a26b86b190f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Jun 2019 16:06:05 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index 3f4fbeb..e42c424 100644 --- a/TODOs.org +++ b/TODOs.org @@ -65,6 +65,8 @@ https://matthewbauer.us/bauer/ https://github.com/matthewbauer/bauer https://gitlab.com/rycee/configurations/blob/e3c1592544e9757ab7bc1026a89a31aa067f3b3e/user/emacs.nix https://discourse.nixos.org/t/using-nixos-as-an-stateless-workstation/3081/8 +*** TODO Universal =ace-open-link= or similar +This way I can use the same key to open links in commit messages, emails, elfeed articles, etc. *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects -- cgit v1.2.3 From 6cf733d420be2ea02402eb829d055f9f0de2db61 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Jun 2019 16:12:31 -0300 Subject: Backup elfeed instead of newsboat --- scripts/backup.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 739e94c..94cc6b7 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -23,10 +23,6 @@ BACKUP_TAG="${1-default}" rm -rf "$HOME/tmp/backup/" mkdir -p "$HOME/tmp/backup/" -yellow "Creating backup for newsboat data" -newsboat -E "$HOME/tmp/backup/newsboat.txt" -green "Done" - yellow "Creating backup of notmuch data" notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" green "Done" @@ -41,6 +37,7 @@ borg create \ ~/Nextcloud/ \ ~/mbsync/ \ ~/archive/ \ + ~/.elfeed/ \ ~/tmp/backup/ # add folders to be backed up here green "Done" -- cgit v1.2.3 From cf56804b6302de21076c6bc890b7f070b727df73 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Jun 2019 20:32:09 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index e42c424..587f949 100644 --- a/TODOs.org +++ b/TODOs.org @@ -65,6 +65,8 @@ https://matthewbauer.us/bauer/ https://github.com/matthewbauer/bauer https://gitlab.com/rycee/configurations/blob/e3c1592544e9757ab7bc1026a89a31aa067f3b3e/user/emacs.nix https://discourse.nixos.org/t/using-nixos-as-an-stateless-workstation/3081/8 +*** TODO Properly configure spell-checking in Emacs +Ensure automatic multi-language support. *** TODO Universal =ace-open-link= or similar This way I can use the same key to open links in commit messages, emails, elfeed articles, etc. *** CANCELLED eCryptFS -- cgit v1.2.3 From c2c22cf6a17f77f43ed14bcee14499939a552791 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 16:55:55 -0300 Subject: TODOs.org --- TODOs.org | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 587f949..769caeb 100644 --- a/TODOs.org +++ b/TODOs.org @@ -124,8 +124,10 @@ CLOSED: [2019-06-02 Sun 02:43] *** TODO Add clipboard manager *** TODO Configure Emacs registers * Nice to have -** TODO Test elfeed +** DONE Test elfeed +CLOSED: [2019-06-08 Sat 16:53] This way I can more easily link to an article from org-mode! +** TODO Put Btrfs on Guix * Fixes ** CANCELLED Adjust layout for =annex.yml= tmuxinator template I actually got used to it and now I like it :) -- cgit v1.2.3 From 258b792c50a6679aa0d98404da66166fb7cdb693 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 17:48:16 -0300 Subject: Add 'D' org-capture for Decisions.org --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 6f85daf..fc46fbf 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -747,6 +747,7 @@ This is the place where most of your configurations should be done. Unless it is org-default-notes-file "~/annex/txt/TODOs.org" org-scratch-notes-file "~/annex/txt/TODOs.org" org-diary-notes-file "~/annex/txt/Diary.org" + org-decision-notes-file "~/annex/txt/Decisions.org" org-capture-templates '(("t" "TODO" entry (file org-default-notes-file) "* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t) ("s" "Scratch" entry (file org-scratch-notes-file) @@ -755,6 +756,8 @@ This is the place where most of your configurations should be done. Unless it is "* MEETING with %? :MEETING:\n%t" :clock-in t :clock-resume t) ("d" "Diary" entry (file+datetree org-diary-notes-file) "* %?\n%U\n" :clock-in t :clock-resume t) + ("D" "Decision" entry (file+datetree org-decision-notes-file) + "* %?\n%U\n" :clock-in t :clock-resume t) ("i" "Idea" entry (file org-default-notes-file) "* %? :IDEA: \n%t" :clock-in t :clock-resume t) ("n" "Next Task" entry (file+headline org-default-notes-file "Tasks") -- cgit v1.2.3 From e46dbe1f59935d2101a23daa54921f62a3bc3da8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 18:02:17 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index 769caeb..c99e0e5 100644 --- a/TODOs.org +++ b/TODOs.org @@ -128,6 +128,7 @@ CLOSED: [2019-06-02 Sun 02:43] CLOSED: [2019-06-08 Sat 16:53] This way I can more easily link to an article from org-mode! ** TODO Put Btrfs on Guix +** TODO Configure =diffoscope= to diff SQLite files * Fixes ** CANCELLED Adjust layout for =annex.yml= tmuxinator template I actually got used to it and now I like it :) -- cgit v1.2.3 From 02274bad6bb35401133fa56e8c6102f485ac3e3e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 18:41:50 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index c99e0e5..8faca8c 100644 --- a/TODOs.org +++ b/TODOs.org @@ -69,6 +69,7 @@ https://discourse.nixos.org/t/using-nixos-as-an-stateless-workstation/3081/8 Ensure automatic multi-language support. *** TODO Universal =ace-open-link= or similar This way I can use the same key to open links in commit messages, emails, elfeed articles, etc. +*** TODO Add actual public key of the known =KnownHost= in utils.nix *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects -- cgit v1.2.3 From 5058b4e20868f7e055ac1fc21e1adfba7cb1850b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 19:06:27 -0300 Subject: TODOs.org --- TODOs.org | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/TODOs.org b/TODOs.org index 8faca8c..0708a1c 100644 --- a/TODOs.org +++ b/TODOs.org @@ -130,6 +130,14 @@ CLOSED: [2019-06-08 Sat 16:53] This way I can more easily link to an article from org-mode! ** TODO Put Btrfs on Guix ** TODO Configure =diffoscope= to diff SQLite files +** TODO Finish configuring cmus +https://github.com/cmus/cmus/wiki +https://github.com/cmus/cmus/wiki/status-display-programs +https://cmus.github.io/ +https://news.ycombinator.com/item?id=10430512 +https://musicbrainz.org/ +cmus: fuzzy search +** TODO Test cyanogen on old K10 * Fixes ** CANCELLED Adjust layout for =annex.yml= tmuxinator template I actually got used to it and now I like it :) -- cgit v1.2.3 From 8def1e7a80c423eb25f756db2345f445785e95a0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 20:20:58 -0300 Subject: Add recutils package Includes recsel. --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a2d5d5e..8124708 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -184,6 +184,7 @@ in { graphviz # =dot= and others mkpasswd direnv + recutils diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From e64f998580d571220a25c982302b91b9fec96683 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 22:19:26 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index 0708a1c..039b86e 100644 --- a/TODOs.org +++ b/TODOs.org @@ -138,6 +138,7 @@ https://news.ycombinator.com/item?id=10430512 https://musicbrainz.org/ cmus: fuzzy search ** TODO Test cyanogen on old K10 +** TODO =ETag= on static files * Fixes ** CANCELLED Adjust layout for =annex.yml= tmuxinator template I actually got used to it and now I like it :) -- cgit v1.2.3 From 7390ea632a6ee3bdd69f3765c8b9f2cb750d572e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Jun 2019 22:19:32 -0300 Subject: Exclude ~/mbsync/.notmuch/ from borg backup The notmuch database is already backed up on ~/tmp/backup/. --- scripts/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index 94cc6b7..727651b 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -29,6 +29,7 @@ green "Done" yellow "Creating new borg archive entry" borg create \ + --exclude ~/mbsync/.notmuch/ \ --verbose \ --stats \ --progress \ -- cgit v1.2.3 From 9ae20a94010df820af271d3218f4b57725c9ad8c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Jun 2019 11:35:38 -0300 Subject: Only download new content by default with ArchiveBox --- scripts/archive.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/archive.sh b/scripts/archive.sh index 416b833..0de9924 100755 --- a/scripts/archive.sh +++ b/scripts/archive.sh @@ -6,6 +6,7 @@ export POCKET_ARCHIVE='https://getpocket.com/users/euandreh/feed/read' export OUTPUT_DIR="$HOME/archive/archivebox/" export WGET_BINARY="$PWD/wget-4.sh" export FETCH_MEDIA=False +export ONLY_NEW=True if [ "${1-}" = "-s" ]; then curl -s "$POCKET_ARCHIVE" | archivebox >> /tmp/archivebox.log else -- cgit v1.2.3 From 2da878fd9d13e9b34dc10b7503edcbd749a06260 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Jun 2019 11:35:49 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index 039b86e..e78bf00 100644 --- a/TODOs.org +++ b/TODOs.org @@ -139,6 +139,8 @@ https://musicbrainz.org/ cmus: fuzzy search ** TODO Test cyanogen on old K10 ** TODO =ETag= on static files +** TODO = Wallabag integration (instead of Atom feed?) * Fixes ** CANCELLED Adjust layout for =annex.yml= tmuxinator template I actually got used to it and now I like it :) -- cgit v1.2.3 From 8758431f8d00f4f93847d3898abd43137ef426f8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Jun 2019 12:07:51 -0300 Subject: Run ArchiveBox every hour instead of once a day --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8124708..39d190f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -333,8 +333,8 @@ in { # Sync emails with mbsync every hour "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/sync-mail.sh -s" - # Archive Pocket data every 12 hours - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s" + # Run ArchiveBox data every 12 hours + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s" ]; xserver = { -- cgit v1.2.3 From 91d2c17240b3968eb01779fee2b81dc6f3483d5b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Jun 2019 20:55:22 -0300 Subject: s/archivebox/archivebox-output/ --- scripts/archive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/archive.sh b/scripts/archive.sh index 0de9924..805ea28 100755 --- a/scripts/archive.sh +++ b/scripts/archive.sh @@ -3,7 +3,7 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" export POCKET_ARCHIVE='https://getpocket.com/users/euandreh/feed/read' -export OUTPUT_DIR="$HOME/archive/archivebox/" +export OUTPUT_DIR="$HOME/archive/archivebox-output/" export WGET_BINARY="$PWD/wget-4.sh" export FETCH_MEDIA=False export ONLY_NEW=True -- cgit v1.2.3 From 1d6e14c774d2655a13a4e4c767652829c6e4a184 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 11 Jun 2019 14:04:34 -0300 Subject: Parameterize toggling of IPFS --- nixos/configuration.nix | 6 +++--- nixos/velhinho.nix | 1 + 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 39d190f..8c3986f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -385,9 +385,9 @@ in { # https://nixos.org/nixos/options.html#ipfs ipfs = { - enable = false; - enableGC = false; - autoMount = false; + enable = localConfiguration.enableIPFS; + enableGC = localConfiguration.enableIPFS; + autoMount = localConfiguration.enableIPFS; }; }; diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index 1162831..bd3c8c8 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -2,4 +2,5 @@ hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; passwordFile = "/home/andreh/annex/secret/NixOS/velhinho/password-hash.txt"; + enableIPFS = true; } -- cgit v1.2.3 From b20a66ff782a1626a0e90bb19b1b79d486fd1a30 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 11 Jun 2019 14:05:37 -0300 Subject: TODOs.org --- TODOs.org | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/TODOs.org b/TODOs.org index e78bf00..22d6d6b 100644 --- a/TODOs.org +++ b/TODOs.org @@ -49,11 +49,12 @@ Put all of this on the README for future easy access. 2. Performing a fresh install; 3. Bootstraping the new installation's configuration and data. ** DOING Workflow improvement -*** DOING Finish importing mailing list emails +*** WAITING Finish importing mailing list emails *** TODO How to simplify configuring the =ssh-agent=? https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt -*** DOING Simplify and automate backup.sh +*** WAITING Simplify and automate backup.sh *** TODO Fix screen brightness shotcuts :velhinho: +*** DOING Fix cronjob for ArchiveBox *** TODO Add play/pause, previous and next shortcuts :velhinho: *** TODO Use [[https://github.com/rycee/home-manager][home-manager]] instead of ad-hoc symlinking *** TODO Show the package added by =nix-shell= in =$PS1= @@ -70,6 +71,7 @@ Ensure automatic multi-language support. *** TODO Universal =ace-open-link= or similar This way I can use the same key to open links in commit messages, emails, elfeed articles, etc. *** TODO Add actual public key of the known =KnownHost= in utils.nix +*** TODO Add lock for running =sync-mail.sh= *** CANCELLED eCryptFS LUKS already covers most of my use case and renders eCryptFS not useful. *** DONE Automate setup of =builds.sr.ht= for other projects -- cgit v1.2.3 From db511596745a18bdaf7e71becd35ff5135f3606f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 11 Jun 2019 14:22:04 -0300 Subject: Remove git/mrconfig.ini Instead, use Git Annex repository. --- .gitattributes | 1 - git/mrconfig.ini | Bin 11670 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 git/mrconfig.ini diff --git a/.gitattributes b/.gitattributes index da26a4b..ecaa2b6 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,4 +1,3 @@ -git/mrconfig.ini filter=git-crypt diff=git-crypt lein/profiles.clj filter=git-crypt diff=git-crypt git/gitconfig.ini filter=git-crypt diff=git-crypt emacs/gnus.el filter=git-crypt diff=git-crypt diff --git a/git/mrconfig.ini b/git/mrconfig.ini deleted file mode 100644 index f67658a..0000000 Binary files a/git/mrconfig.ini and /dev/null differ -- cgit v1.2.3 From 850f22423ec70bc62b02d621e70e8cac7f3641f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 11 Jun 2019 14:22:32 -0300 Subject: Spacemacs: add terraform layer --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index fc46fbf..ffe62ac 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -83,6 +83,7 @@ This function should only modify configuration layer settings." sql swift syntax-checking + (terraform :variables terraform-auto-format-on-save t) typescript unicode-fonts version-control @@ -798,7 +799,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 485e41eb6b21f24a82cb6dbeaaacef8326b7c473 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:01:35 -0300 Subject: configuration.nix: Add graph-easy package --- nixos/configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8c3986f..b31e01b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -181,7 +181,8 @@ in { python36Packages.python-slugify moreutils # =vipe= bazel - graphviz # =dot= and others + graphviz # =dot= and others + graph-easy # ASCII drawings for GraphViz output mkpasswd direnv recutils -- cgit v1.2.3 From 253a44b31094834480af84e6ce9283b5350868b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:04:30 -0300 Subject: utils.nix: Add shell helper functions Add: - shellEnvironmentBuild: build input derivations that should be fed to =mkShell=; - shellEnvironment: create simple Nix shell with the given buildInputs. --- utils.nix | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/utils.nix b/utils.nix index 3167399..438a5d8 100644 --- a/utils.nix +++ b/utils.nix @@ -81,6 +81,20 @@ in rec { touch $out ''; }); + shellEnvironmentBuild = shellBuildInputs: + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-shell-build-inputs"; + buildPhase = '' + echo "Can build shell environment for shellBuildInputs!" + echo noop > $out + ''; + }); + shellEnvironment = shellBuildInputs: + baseTask.overrideAttrs (baseAttrs: + pkgs.mkshell { + name = "${baseAttrs.name}-shell"; + buildInputs = shellBuildInputs; + }); overwritingPublishScript = { docsDerivation, overwrite ? true }: pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail -- cgit v1.2.3 From a2958d372913745970a37e93623930f48227c714 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:08:09 -0300 Subject: bash: Split ps1.sh out of colors.sh --- TODOs.org | 2 ++ bash/bashrc.sh | 1 + bash/colors.sh | 110 -------------------------------------------------------- bash/ps1.sh | 111 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 114 insertions(+), 110 deletions(-) create mode 100644 bash/ps1.sh diff --git a/TODOs.org b/TODOs.org index 22d6d6b..601cc9d 100644 --- a/TODOs.org +++ b/TODOs.org @@ -102,6 +102,8 @@ Only the =encrypted/= folder was removed *** TODO Change email address of SSH key pair in builds.sr.ht *** DOING Fix ArchiveBox error *** TODO Finish ArchiveBox cronjob +*** TODO Remove duplicate ANSI color definitions +=ps1.sh= doesn't reuse colors defined in =colors.sh=. *** TODO Refile "archived" emails into actual Archive folder Query for =tag:archive AND tag:euandreh AND folder:/INBOX/= emails and refile them into =Archive= folder: #+BEGIN_SRC shell diff --git a/bash/bashrc.sh b/bash/bashrc.sh index c7b52a1..1aeaf44 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -8,6 +8,7 @@ source $DOTFILES/bash/platform.sh source $DOTFILES/bash/config.sh source $DOTFILES/bash/env.sh source $DOTFILES/bash/colors.sh +source $DOTFILES/bash/ps1.sh source $DOTFILES/bash/aliases.sh source $DOTFILES/bash/util.sh source $DOTFILES/bash/agents.sh diff --git a/bash/colors.sh b/bash/colors.sh index fba940e..ce21da0 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -1,116 +1,6 @@ #!/usr/bin/env bash # shellcheck disable=1117 disable=1004 disable=2034 disable=2154 -# Customize BASH PS1 prompt to show current GIT repository and branch. -# by Mike Stewart - http://MediaDoneRight.com - -# SETUP CONSTANTS -# Bunch-o-predefined colors. Makes reading code easier than escape sequences. -# I don't remember where I found this. o_O - -# Reset -Color_Off="\[\033[0m\]" # Text Reset - -# Regular Colors -Black="\[\033[0;30m\]" # Black -Red="\[\033[0;31m\]" # Red -Green="\[\033[0;32m\]" # Green -Yellow="\[\033[0;33m\]" # Yellow -Blue="\[\033[0;34m\]" # Blue -Purple="\[\033[0;35m\]" # Purple -Cyan="\[\033[0;36m\]" # Cyan -White="\[\033[0;37m\]" # White - -# Bold -BBlack="\[\033[1;30m\]" # Black -BRed="\[\033[1;31m\]" # Red -BGreen="\[\033[1;32m\]" # Green -BYellow="\[\033[1;33m\]" # Yellow -BBlue="\[\033[1;34m\]" # Blue -BPurple="\[\033[1;35m\]" # Purple -BCyan="\[\033[1;36m\]" # Cyan -BWhite="\[\033[1;37m\]" # White - -# Underline -UBlack="\[\033[4;30m\]" # Black -URed="\[\033[4;31m\]" # Red -UGreen="\[\033[4;32m\]" # Green -UYellow="\[\033[4;33m\]" # Yellow -UBlue="\[\033[4;34m\]" # Blue -UPurple="\[\033[4;35m\]" # Purple -UCyan="\[\033[4;36m\]" # Cyan -UWhite="\[\033[4;37m\]" # White - -# Background -On_Black="\[\033[40m\]" # Black -On_Red="\[\033[41m\]" # Red -On_Green="\[\033[42m\]" # Green -On_Yellow="\[\033[43m\]" # Yellow -On_Blue="\[\033[44m\]" # Blue -On_Purple="\[\033[45m\]" # Purple -On_Cyan="\[\033[46m\]" # Cyan -On_White="\[\033[47m\]" # White - -# High Intensty -IBlack="\[\033[0;90m\]" # Black -IRed="\[\033[0;91m\]" # Red -IGreen="\[\033[0;92m\]" # Green -IYellow="\[\033[0;93m\]" # Yellow -IBlue="\[\033[0;94m\]" # Blue -IPurple="\[\033[0;95m\]" # Purple -ICyan="\[\033[0;96m\]" # Cyan -IWhite="\[\033[0;97m\]" # White - -# Bold High Intensty -BIBlack="\[\033[1;90m\]" # Black -BIRed="\[\033[1;91m\]" # Red -BIGreen="\[\033[1;92m\]" # Green -BIYellow="\[\033[1;93m\]" # Yellow -BIBlue="\[\033[1;94m\]" # Blue -BIPurple="\[\033[1;95m\]" # Purple -BICyan="\[\033[1;96m\]" # Cyan -BIWhite="\[\033[1;97m\]" # White - -# High Intensty backgrounds -On_IBlack="\[\033[0;100m\]" # Black -On_IRed="\[\033[0;101m\]" # Red -On_IGreen="\[\033[0;102m\]" # Green -On_IYellow="\[\033[0;103m\]" # Yellow -On_IBlue="\[\033[0;104m\]" # Blue -On_IPurple="\[\033[10;95m\]" # Purple -On_ICyan="\[\033[0;106m\]" # Cyan -On_IWhite="\[\033[0;107m\]" # White - -# Various variables you might want for your PS1 prompt instead -Time12h="\T" -Time12a="\@" -PathShort="\w" -PathFull="\W" -NewLine="\n" -Jobs="\j" - - -# This PS1 snippet was adopted from code for MAC/BSD I saw from: http://allancraig.net/index.php?option=com_content&view=article&id=108:ps1-export-command-for-git&catid=45:general&Itemid=96 -# I tweaked it to work on UBUNTU 11.04 & 11.10 plus made it mo' better - -export PS1='$(if [ $? != 0 ]; then \ - echo "'$BIRed' (!!) '$Color_Off'"; \ -fi)'$IBlack$Time12h$Color_Off' '$BYellow$PathShort/$Color_Off'\ -$(git branch &>/dev/null;\ -if [ $? -eq 0 ]; then \ - echo "$(\ - echo `git status` | grep "Changes" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "to publish your local commits" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ - )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ -fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ - echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ -fi)$(if [[ $GUIX_ENVIRONMENT != "" ]]; then\ - echo "\n'$IBlack'~>'$Color_Off' '$Purple'guix environment'$Color_Off' ('$BIBlue'$GUIX_ENVIRONMENT'$Color_Off')'$Color_Off'" ;\ -fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' - - export end="\033[0m" export black="\033[0;30m" export blackb="\033[1;30m" diff --git a/bash/ps1.sh b/bash/ps1.sh new file mode 100644 index 0000000..7e6f3f1 --- /dev/null +++ b/bash/ps1.sh @@ -0,0 +1,111 @@ +#!/usr/bin/env bash +# shellcheck disable=1117 disable=1004 disable=2034 disable=2154 + +# Customize BASH PS1 prompt to show current GIT repository and branch. +# by Mike Stewart - http://MediaDoneRight.com + +# SETUP CONSTANTS +# Bunch-o-predefined colors. Makes reading code easier than escape sequences. +# I don't remember where I found this. o_O + +# Reset +Color_Off="\[\033[0m\]" # Text Reset + +# Regular Colors +Black="\[\033[0;30m\]" # Black +Red="\[\033[0;31m\]" # Red +Green="\[\033[0;32m\]" # Green +Yellow="\[\033[0;33m\]" # Yellow +Blue="\[\033[0;34m\]" # Blue +Purple="\[\033[0;35m\]" # Purple +Cyan="\[\033[0;36m\]" # Cyan +White="\[\033[0;37m\]" # White + +# Bold +BBlack="\[\033[1;30m\]" # Black +BRed="\[\033[1;31m\]" # Red +BGreen="\[\033[1;32m\]" # Green +BYellow="\[\033[1;33m\]" # Yellow +BBlue="\[\033[1;34m\]" # Blue +BPurple="\[\033[1;35m\]" # Purple +BCyan="\[\033[1;36m\]" # Cyan +BWhite="\[\033[1;37m\]" # White + +# Underline +UBlack="\[\033[4;30m\]" # Black +URed="\[\033[4;31m\]" # Red +UGreen="\[\033[4;32m\]" # Green +UYellow="\[\033[4;33m\]" # Yellow +UBlue="\[\033[4;34m\]" # Blue +UPurple="\[\033[4;35m\]" # Purple +UCyan="\[\033[4;36m\]" # Cyan +UWhite="\[\033[4;37m\]" # White + +# Background +On_Black="\[\033[40m\]" # Black +On_Red="\[\033[41m\]" # Red +On_Green="\[\033[42m\]" # Green +On_Yellow="\[\033[43m\]" # Yellow +On_Blue="\[\033[44m\]" # Blue +On_Purple="\[\033[45m\]" # Purple +On_Cyan="\[\033[46m\]" # Cyan +On_White="\[\033[47m\]" # White + +# High Intensty +IBlack="\[\033[0;90m\]" # Black +IRed="\[\033[0;91m\]" # Red +IGreen="\[\033[0;92m\]" # Green +IYellow="\[\033[0;93m\]" # Yellow +IBlue="\[\033[0;94m\]" # Blue +IPurple="\[\033[0;95m\]" # Purple +ICyan="\[\033[0;96m\]" # Cyan +IWhite="\[\033[0;97m\]" # White + +# Bold High Intensty +BIBlack="\[\033[1;90m\]" # Black +BIRed="\[\033[1;91m\]" # Red +BIGreen="\[\033[1;92m\]" # Green +BIYellow="\[\033[1;93m\]" # Yellow +BIBlue="\[\033[1;94m\]" # Blue +BIPurple="\[\033[1;95m\]" # Purple +BICyan="\[\033[1;96m\]" # Cyan +BIWhite="\[\033[1;97m\]" # White + +# High Intensty backgrounds +On_IBlack="\[\033[0;100m\]" # Black +On_IRed="\[\033[0;101m\]" # Red +On_IGreen="\[\033[0;102m\]" # Green +On_IYellow="\[\033[0;103m\]" # Yellow +On_IBlue="\[\033[0;104m\]" # Blue +On_IPurple="\[\033[10;95m\]" # Purple +On_ICyan="\[\033[0;106m\]" # Cyan +On_IWhite="\[\033[0;107m\]" # White + +# Various variables you might want for your PS1 prompt instead +Time12h="\T" +Time12a="\@" +PathShort="\w" +PathFull="\W" +NewLine="\n" +Jobs="\j" + + +# This PS1 snippet was adopted from code for MAC/BSD I saw from: http://allancraig.net/index.php?option=com_content&view=article&id=108:ps1-export-command-for-git&catid=45:general&Itemid=96 +# I tweaked it to work on UBUNTU 11.04 & 11.10 plus made it mo' better + +export PS1='$(if [ $? != 0 ]; then \ + echo "'$BIRed' (!!) '$Color_Off'"; \ +fi)'$IBlack$Time12h$Color_Off' '$BYellow$PathShort/$Color_Off'\ +$(git branch &>/dev/null;\ +if [ $? -eq 0 ]; then \ + echo "$(\ + echo `git status` | grep "Changes" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "to publish your local commits" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ + )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ +fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ + echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ +fi)$(if [[ $GUIX_ENVIRONMENT != "" ]]; then\ + echo "\n'$IBlack'~>'$Color_Off' '$Purple'guix environment'$Color_Off' ('$BIBlue'$GUIX_ENVIRONMENT'$Color_Off')'$Color_Off'" ;\ +fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' -- cgit v1.2.3 From f574a48b11a8cd004d469c54370ed49ce9e36254 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:08:50 -0300 Subject: Update symlink to mrconfig.ini --- bash/symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index c8234a4..fd415c9 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -23,7 +23,7 @@ isLinux && { ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc } -ln -fs "$DOTFILES/git/mrconfig.ini" ~/.mrconfig +ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER -- cgit v1.2.3 From af2fe65b28ac7e61f3a00de61c683df846e36721 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:09:20 -0300 Subject: fake-symlinks.sh: Copy colors.sh file --- bash/fake-symlinks.sh | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 0197028..4a089fb 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -4,22 +4,24 @@ if [[ -n "${GITHUB_TOKEN}" ]]; then envsubst < "${DOTFILES}/git/gitconfig.ini" > ~/.gitconfig fi -SRHT_REPOS=(website cement dotfiles) +SRHT_REPOS=(website cement dotfiles vps songbooks) SRHT_REPOS_PATH="${HOME}/dev/libre" for repo in "${SRHT_REPOS[@]}"; do - REPO="${repo}" envsubst < "${DOTFILES}/templates/sr-ht-build.yaml" > "${SRHT_REPOS_PATH}/${repo}/.build.yml" + if [[ "${repo}" != "vps" ]] && [[ "${repo}" != "songbooks" ]]; then + REPO="${repo}" envsubst < "${DOTFILES}/templates/sr-ht-build.yaml" > "${SRHT_REPOS_PATH}/${repo}/.build.yml" + fi if [[ "${repo}" != "dotfiles" ]]; then cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/${repo}/utils.nix" mkdir -p "${SRHT_REPOS_PATH}/${repo}/docs" cp "${DOTFILES}/docs/README.css" "${SRHT_REPOS_PATH}/${repo}/docs/README.css" + cp "${DOTFILES}/bash/colors.sh" "${SRHT_REPOS_PATH}/${repo}/colors.sh" fi - if [[ "${repo}" != "website" ]]; then + if [[ "${repo}" != "website" ]] && [[ "${repo}" != "vps" ]]; then REPO="${repo}" envsubst < "${DOTFILES}/templates/env.sh" > "${SRHT_REPOS_PATH}/${repo}/env.sh" fi done cp "${DOTFILES}/utils.nix" ~/annex/utils.nix -cp "${DOTFILES}/utils.nix" ~/dev/libre/vps/ mkdir -p ~/.tmuxinator -- cgit v1.2.3 From b0c88714a266d3e4b98641d4eac7d883dc12e80d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:09:33 -0300 Subject: env.sh: Add more Guix-specific environment variables --- bash/env.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index 0a777d4..329700b 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -80,7 +80,9 @@ export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 - +export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs" +export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" +export GIT_SSL_CAINFO="$SSL_CERT_FILE" # # Go -- cgit v1.2.3 From 68f069923d0cfdd438e2c6c2927fd186c2417416 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:12:02 -0300 Subject: tmuxinator: Add songbooks window to annex.yml template --- tmux/projects/annex.yml | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index a964d67..07b24aa 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -16,6 +16,14 @@ windows: - reload - annex: - git status + - songbooks: + root: ~/dev/libre/songbooks/ + layout: main-vertical + panes: + - songbooks-main: + - s + - songbooks-test: + - s - vps: root: ~/dev/libre/vps/ layout: main-vertical -- cgit v1.2.3 From 4f921c901d8f575f0914ef12da7dcd3bcc412043 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:13:02 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index 601cc9d..d411207 100644 --- a/TODOs.org +++ b/TODOs.org @@ -114,6 +114,8 @@ notmuch search --output=files tag:archive AND tag:euandreh AND folder:/INBOX/ | Make sure to keep existing tags from it? Will there be any case, since they're all INBOX emails? *** TODO Remove public link to Pocket feed *** TODO Remove dangling encrypted files +*** TODO Double-check magit line limit configuration +https://tbaggery.com/2008/04/19/a-note-about-git-commit-messages.html *** TODO Make creation of a new shell faster Profile =bash/bashrc.sh=. *** TODO Allow Emacs to link to =sr.ht= repository with =SPC g l L= -- cgit v1.2.3 From f7d76ec0c3bf1f7346c347a8fcd3d42698a31484 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:24:18 -0300 Subject: configuration.nix: Add SQLite 3 package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b31e01b..c5e8773 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -186,6 +186,7 @@ in { mkpasswd direnv recutils + sqlite3 diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 0d60d6e96324a36170218163158d9a4be806aae0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Jun 2019 22:48:37 -0300 Subject: utils.nix: fix shellEnvironment function --- utils.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/utils.nix b/utils.nix index 438a5d8..ac49ac2 100644 --- a/utils.nix +++ b/utils.nix @@ -90,11 +90,10 @@ in rec { ''; }); shellEnvironment = shellBuildInputs: - baseTask.overrideAttrs (baseAttrs: - pkgs.mkshell { - name = "${baseAttrs.name}-shell"; + pkgs.mkShell { + name = "${baseName}-shell"; buildInputs = shellBuildInputs; - }); + }; overwritingPublishScript = { docsDerivation, overwrite ? true }: pkgs.writeShellScriptBin "publish.sh" '' set -euo pipefail -- cgit v1.2.3 From 7ad3e08bd68e0fab249e27fbd6429906f2ea315b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:18:57 -0300 Subject: aliases.sh: Add =cop= alias --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index ffda8bd..0d1ba88 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -9,6 +9,7 @@ alias l="ls -lahp --color" alias yt-dl="yt_dl" isLinux && { alias copy="tr -d '\\n' | xclip -sel clip" + alias cop="xclip -sel clip" } isMac && { alias copy="tr -d '\\n' | pbcopy" -- cgit v1.2.3 From 0c8c5eea7a6ecf94e901e209582ef149d2f6e823 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:19:18 -0300 Subject: tmux: s/annex/annex+home/ --- tmux/projects/annex.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 07b24aa..00f8c29 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -1,4 +1,4 @@ -name: annex +name: annex+home windows: - annex+dotfiles: -- cgit v1.2.3 From 1de46e17233778e7920d95a40e6e29eeb2f9eb8c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:22:15 -0300 Subject: env.sh: Add Guix installation directory to $INFOPATH --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index 329700b..e3ec8c7 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -83,6 +83,7 @@ export NIX_BUILD_CORES=0 export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs" export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" export GIT_SSL_CAINFO="$SSL_CERT_FILE" +export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH" # # Go -- cgit v1.2.3 From 4dafdf07b042918a7fc14ea98a26080ed6f24fae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:23:37 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index d411207..546e39e 100644 --- a/TODOs.org +++ b/TODOs.org @@ -52,6 +52,8 @@ Put all of this on the README for future easy access. *** WAITING Finish importing mailing list emails *** TODO How to simplify configuring the =ssh-agent=? https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt +*** TODO Declare layouts and workspaces declaratively +Similar approach to how tmuxinator is working. *** WAITING Simplify and automate backup.sh *** TODO Fix screen brightness shotcuts :velhinho: *** DOING Fix cronjob for ArchiveBox -- cgit v1.2.3 From d4fdb3a4a63d4be8b24606628faa49ffa8b30ea7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:24:11 -0300 Subject: Add toplevel logfiles for cronjobs The code inside the scripts already write to logfiles, but these files don't capture output in case the script itself fails to run. --- bash/symlinks.sh | 10 ++++++---- nixos/configuration.nix | 4 ++-- 2 files changed, 8 insertions(+), 6 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index fd415c9..cd7f3ac 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -55,8 +55,10 @@ ln -fs "$DOTFILES/xmonad/xsession.sh" ~/.xsession ln -fs "$DOTFILES/xmonad/xmonad.hs" ~/.xmonad/xmonad.hs ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc -## Mail +## Cron logs mkdir -p ~/mbsync/.notmuch/hooks ~/mbsync/EuAndreh ~/mbsync/Gmail ~/mbsync/Nubank -ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log -ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log -ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log +ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log +ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log +ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log +ln -fs /tmp/cron-dbg.sync-mail."$(date +%Y-%m-%d)".log /tmp/cron-dbg.sync-mail.log +ln -fs /tmp/cron-dbg.archive."$(date +%Y-%m-%d)".log /tmp/cron-dbg.archive.log diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c5e8773..9762aeb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -333,10 +333,10 @@ in { # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = [ # Sync emails with mbsync every hour - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/sync-mail.sh -s" + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/sync-mail.sh -s 2>&1 >> /tmp/cron-dbg.sync-mail.log" # Run ArchiveBox data every 12 hours - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s" + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s 2>&1 >> /tmp/cron-dbg.archive.log" ]; xserver = { -- cgit v1.2.3 From 788d9a43c8dabbb2f926e579a70a3cc78ad59aa5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:25:04 -0300 Subject: WIP: Spacemacs: configure Guix toolset. --- spacemacs.el | 29 +++++++++++++++++++++++------ 1 file changed, 23 insertions(+), 6 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index ffe62ac..f637f65 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -114,8 +114,7 @@ This function should only modify configuration layer settings." fireplace emidje ob-rust - ;; emacs-guix - ) + guix) ;; A list of packages that cannot be updated. dotspacemacs-frozen-packages '() @@ -782,9 +781,16 @@ This is the place where most of your configurations should be done. Unless it is commit start))) - ;; (require 'geiser-guile) - ;; (with-eval-after-load 'geiser-guile - ;; (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) + (with-eval-after-load 'geiser-guile + (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) + (with-eval-after-load 'yasnippet + (add-to-list 'yas-snippet-dirs "~/dev/guix/guix/etc/snippets")) + ; (setq geiser-active-implementations '(guile)) + (add-hook 'scheme-mode-hook 'guix-devel-mode) + + (with-eval-after-load 'info-lookup-mode + (turn-off-evil-mode)) + t) (defun dotspacemacs/emacs-custom-settings () @@ -799,7 +805,18 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)))) + (company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + '(safe-local-variable-values + (quote + ((eval modify-syntax-entry 43 "'") + (eval modify-syntax-entry 36 "'") + (eval modify-syntax-entry 126 "'") + (typescript-backend . tide) + (typescript-backend . lsp) + (javascript-backend . tern) + (javascript-backend . lsp) + (elixir-enable-compilation-checking . t) + (elixir-enable-compilation-checking))))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From 2f5891523ac0a7354a773d0024d749fc0a19f0ce Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:25:45 -0300 Subject: WIP: import mailing list archive from Google Groups --- scripts/import-gg.sh | 8 ++++++++ scripts/mailing-list-import-mbox.sh | 36 ++++++++++++++++++++++++++++++++++-- 2 files changed, 42 insertions(+), 2 deletions(-) create mode 100755 scripts/import-gg.sh diff --git a/scripts/import-gg.sh b/scripts/import-gg.sh new file mode 100755 index 0000000..1682adc --- /dev/null +++ b/scripts/import-gg.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +GGROUPS=() + +for group in "${GGROUPS[@]}"; do + mailing-list-import-mbox.sh google "${group}" +done diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh index 2cf0d9d..1136b4f 100755 --- a/scripts/mailing-list-import-mbox.sh +++ b/scripts/mailing-list-import-mbox.sh @@ -32,17 +32,49 @@ EOF gnu_mailing_list_import() { mkdir -p "${TMP_DIR}" pushd "${TMP_DIR}" + + # Subscribe to the mailing list local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail.sh "${recipient}" "${subject}" " " 'mailing-list@euandre.org' + mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' + + # Download existing archive as MBOX files wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" + + # Concatenate all MBOX files into as single MBOX file cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" + + # Transform the MBOX file into a MailDir format and put it on the right place mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" popd } google_groups_import() { - echo "google groups ${MAILING_LIST_NAME}" + [[ -f ~/dev/misc/google-group-crawler/crawler.sh ]] || { + red "Missing ${HOME}/dev/misc/google-group-crawler/crawler.sh file." + red "Clone it before importing Google Groups emails." + exit 1 + } + mkdir -p "${TMP_DIR}" + pushd "${TMP_DIR}" + + # Subscribe to the mailing list + local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" + local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" + echo FIXME mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' + + # Download existing messages into MBOX Files + CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" + export _GROUP="${MAILING_LIST_NAME}" + ~/dev/misc/google-group-crawler/crawler.sh -sh > "${CRAWLER_FILE}" + bash "${CRAWLER_FILE}" + + cat "${MAILING_LIST_NAME}/mbox/"* > "${MAILING_LIST_NAME}.all.mbox" + + echo before + echo mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" + echo after + popd } main() { -- cgit v1.2.3 From b8582caa28ea1d9694b0c141b76403c4f0f8c1ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:27:29 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index 546e39e..42cb681 100644 --- a/TODOs.org +++ b/TODOs.org @@ -50,6 +50,7 @@ Put all of this on the README for future easy access. 3. Bootstraping the new installation's configuration and data. ** DOING Workflow improvement *** WAITING Finish importing mailing list emails +less /nix/store/255i0f5k8k6n6q94fmw5h4mj95dxbh8p-mb2md-3.20/bin/.mb2md-wrapped *** TODO How to simplify configuring the =ssh-agent=? https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt *** TODO Declare layouts and workspaces declaratively -- cgit v1.2.3 From 46609ee24f0c2279a1a3835c6d7e1800755a50e9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:33:06 -0300 Subject: Put env.sh into ./docs/ folder or repositories --- .build.yml | 2 +- bash/fake-symlinks.sh | 3 ++- docs/env.sh | 6 ++++++ env.sh | 6 ------ templates/sr-ht-build.yaml | 2 +- 5 files changed, 10 insertions(+), 9 deletions(-) create mode 100644 docs/env.sh delete mode 100644 env.sh diff --git a/.build.yml b/.build.yml index 7340c4f..3e27bd7 100644 --- a/.build.yml +++ b/.build.yml @@ -16,5 +16,5 @@ tasks: - docs: | cd dotfiles/ nix-build -A publishScript - source env.sh + source docs/env.sh ./result/bin/publish.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 4a089fb..bfba3ad 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -18,7 +18,8 @@ for repo in "${SRHT_REPOS[@]}"; do cp "${DOTFILES}/bash/colors.sh" "${SRHT_REPOS_PATH}/${repo}/colors.sh" fi if [[ "${repo}" != "website" ]] && [[ "${repo}" != "vps" ]]; then - REPO="${repo}" envsubst < "${DOTFILES}/templates/env.sh" > "${SRHT_REPOS_PATH}/${repo}/env.sh" + mkdir -p "${SRHT_REPOS_PATH}/${repo}/docs" + REPO="${repo}" envsubst < "${DOTFILES}/templates/env.sh" > "${SRHT_REPOS_PATH}/${repo}/docs/env.sh" fi done cp "${DOTFILES}/utils.nix" ~/annex/utils.nix diff --git a/docs/env.sh b/docs/env.sh new file mode 100644 index 0000000..67259d0 --- /dev/null +++ b/docs/env.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +export SERVER_URL=root@euandre.org +export DOCS_SERVER_PATH="/home/user-data/www/default/dotfiles/" diff --git a/env.sh b/env.sh deleted file mode 100644 index 67259d0..0000000 --- a/env.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -export SERVER_URL=root@euandre.org -export DOCS_SERVER_PATH="/home/user-data/www/default/dotfiles/" diff --git a/templates/sr-ht-build.yaml b/templates/sr-ht-build.yaml index 91e6ff2..5f2ea06 100644 --- a/templates/sr-ht-build.yaml +++ b/templates/sr-ht-build.yaml @@ -16,5 +16,5 @@ tasks: - docs: | cd $REPO/ nix-build -A publishScript - source env.sh + source ./docs/env.sh ./result/bin/publish.sh -- cgit v1.2.3 From 7b8140cc7a448d6dc8ce5c457876b873d60af71b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:34:11 -0300 Subject: TODOs.org --- TODOs.org | 4 +++- scripts/mailing-list-import-mbox.sh | 2 +- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/TODOs.org b/TODOs.org index 42cb681..7f7ff7a 100644 --- a/TODOs.org +++ b/TODOs.org @@ -50,7 +50,9 @@ Put all of this on the README for future easy access. 3. Bootstraping the new installation's configuration and data. ** DOING Workflow improvement *** WAITING Finish importing mailing list emails -less /nix/store/255i0f5k8k6n6q94fmw5h4mj95dxbh8p-mb2md-3.20/bin/.mb2md-wrapped +Right now, the =mb2md= doesn't recognize the concatenated MBOX file as valid. + +: less /nix/store/255i0f5k8k6n6q94fmw5h4mj95dxbh8p-mb2md-3.20/bin/.mb2md-wrapped *** TODO How to simplify configuring the =ssh-agent=? https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt *** TODO Declare layouts and workspaces declaratively diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh index 1136b4f..2fe14aa 100755 --- a/scripts/mailing-list-import-mbox.sh +++ b/scripts/mailing-list-import-mbox.sh @@ -61,7 +61,7 @@ google_groups_import() { # Subscribe to the mailing list local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - echo FIXME mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' + mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' # Download existing messages into MBOX Files CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" -- cgit v1.2.3 From a3b4bc85fd0ff0781b8923227eaf2442f021e371 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:34:46 -0300 Subject: configuration.nix: Format with nixfmt --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9762aeb..97f4c7c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -181,7 +181,7 @@ in { python36Packages.python-slugify moreutils # =vipe= bazel - graphviz # =dot= and others + graphviz # =dot= and others graph-easy # ASCII drawings for GraphViz output mkpasswd direnv -- cgit v1.2.3 From ce6076af861774222589e7f02b3610d6b501301b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 16:44:03 -0300 Subject: Remove =cd= from sourced env.sh --- docs/env.sh | 1 - templates/env.sh | 1 - 2 files changed, 2 deletions(-) diff --git a/docs/env.sh b/docs/env.sh index 67259d0..ee71c37 100644 --- a/docs/env.sh +++ b/docs/env.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" export SERVER_URL=root@euandre.org export DOCS_SERVER_PATH="/home/user-data/www/default/dotfiles/" diff --git a/templates/env.sh b/templates/env.sh index 3007d89..0f7848a 100644 --- a/templates/env.sh +++ b/templates/env.sh @@ -1,6 +1,5 @@ #!/usr/bin/env bash set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" export SERVER_URL=root@euandre.org export DOCS_SERVER_PATH="/home/user-data/www/default/$REPO/" -- cgit v1.2.3 From ec6a487e02122352a029d99b4fb130b29cd210df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 17:43:02 -0300 Subject: Update generated .build.yml --- .build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index 3e27bd7..3557b36 100644 --- a/.build.yml +++ b/.build.yml @@ -16,5 +16,5 @@ tasks: - docs: | cd dotfiles/ nix-build -A publishScript - source docs/env.sh + source ./docs/env.sh ./result/bin/publish.sh -- cgit v1.2.3 From 237ac9d391ffe35dcfdf6e4c0082ad9160cfea9a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 21:02:01 -0300 Subject: Increase $TIMEOUT for ArchiveBox to 3 minutes --- scripts/archive.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/archive.sh b/scripts/archive.sh index 805ea28..b9f57e6 100755 --- a/scripts/archive.sh +++ b/scripts/archive.sh @@ -7,6 +7,7 @@ export OUTPUT_DIR="$HOME/archive/archivebox-output/" export WGET_BINARY="$PWD/wget-4.sh" export FETCH_MEDIA=False export ONLY_NEW=True +export TIMEOUT=180 if [ "${1-}" = "-s" ]; then curl -s "$POCKET_ARCHIVE" | archivebox >> /tmp/archivebox.log else -- cgit v1.2.3 From fc6c6fb933b930eadaf59c77ae6531d9c3c016f1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 21:05:33 -0300 Subject: Set the keyboard to Esperanto --- bash/x.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/x.sh b/bash/x.sh index e75cff3..a8b3040 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -2,6 +2,7 @@ isLinux && { xmodmap ~/.Xmodmap + setxkbmap -option esperanto:qwerty xset r rate 250 50 # query with: xdg-mime query filetype -- cgit v1.2.3 From 4d659738b56424689f2fe8301d36f26983a708ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Jun 2019 21:06:25 -0300 Subject: TODOs.org --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index 7f7ff7a..1504129 100644 --- a/TODOs.org +++ b/TODOs.org @@ -62,6 +62,8 @@ Similar approach to how tmuxinator is working. *** DOING Fix cronjob for ArchiveBox *** TODO Add play/pause, previous and next shortcuts :velhinho: *** TODO Use [[https://github.com/rycee/home-manager][home-manager]] instead of ad-hoc symlinking +*** TODO Make =mbsync= faster +Either polling, fetching a subset of folders, etc. *** TODO Show the package added by =nix-shell= in =$PS1= *** TODO Improve spam filtering https://notmuchmail.org/initial_tagging/ -- cgit v1.2.3 From 58fd28f1d581d8ae8243620644629613269b69f2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Jun 2019 06:08:00 -0300 Subject: configuration.nix: Fix typo in SQLite package s/sqlite3/sqlite/. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 97f4c7c..b7052bd 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -186,7 +186,7 @@ in { mkpasswd direnv recutils - sqlite3 + sqlite diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From cb09eb32826eff95f382114b8fd25cb02c773096 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Jun 2019 06:08:31 -0300 Subject: Use hashedPassword instead of passwordFile Make configuration password less brittle. Don't allow for changing password file location to break login. --- nixos/configuration.nix | 4 ++-- nixos/velhinho.nix | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b7052bd..3c24ab4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -410,8 +410,8 @@ in { description = "EuAndreh"; extraGroups = [ "wheel" "networkmanager" "docker" ]; # Generated with: - # mkpasswd -m sha-512 > password-file.txt - passwordFile = localConfiguration.passwordFile; + # mkpasswd -m sha-512 + hashedPassword = localConfiguration.hashedPassword; }; }; # From the Guix manual: diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index bd3c8c8..b2ea722 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,6 +1,7 @@ -{ +let privateConfiguration = import /etc/nixos/private-configuration.nix; +in { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; - passwordFile = "/home/andreh/annex/secret/NixOS/velhinho/password-hash.txt"; + hashedPassword = privateConfiguration.hashedPassword; enableIPFS = true; } -- cgit v1.2.3 From cf96ed73269d8adbdc50a6bfbec7318b738b653a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Jun 2019 23:35:27 -0300 Subject: env.sh: Add rakudo installation paths --- bash/env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/env.sh b/bash/env.sh index e3ec8c7..34e08f6 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -13,6 +13,8 @@ export R=$RSYNC_NET_URL # export PATH=~/.rakudobrew/bin:$PATH +export PATH="${HOME}/rakudo/bin:${PATH}" +export PATH="${HOME}/rakudo/share/perl6/site/bin:${PATH}" # -- cgit v1.2.3 From 48562d24398e4580afa29821c575965934b07fef Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 14:39:11 -0300 Subject: configuration.nix: Install Buku --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3c24ab4..832abea 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -253,6 +253,7 @@ in { xsel nodejs-10_x swift + buku ## Containers and VMs -- cgit v1.2.3 From 2de629fe32e383632719ee718d864ebd9e8d85be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 14:48:11 -0300 Subject: env.sh: Move ~/rakudo/ -> ~/.rakudo/ --- bash/env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 34e08f6..068ffab 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -13,8 +13,8 @@ export R=$RSYNC_NET_URL # export PATH=~/.rakudobrew/bin:$PATH -export PATH="${HOME}/rakudo/bin:${PATH}" -export PATH="${HOME}/rakudo/share/perl6/site/bin:${PATH}" +export PATH="${HOME}/.rakudo/bin:${PATH}" +export PATH="${HOME}/.rakudo/share/perl6/site/bin:${PATH}" # -- cgit v1.2.3 From 063f754294c75959e87b191dd19d0ea5f2f56b68 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 18:15:10 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index 1504129..010dac5 100644 --- a/TODOs.org +++ b/TODOs.org @@ -109,6 +109,7 @@ Only the =encrypted/= folder was removed *** TODO Change email address of SSH key pair in builds.sr.ht *** DOING Fix ArchiveBox error *** TODO Finish ArchiveBox cronjob +*** TODO Add weekly cronjob for running backup.sh *** TODO Remove duplicate ANSI color definitions =ps1.sh= doesn't reuse colors defined in =colors.sh=. *** TODO Refile "archived" emails into actual Archive folder -- cgit v1.2.3 From 65e2c885b8da25edec34009b8fc9c3b67bef6a84 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 18:16:00 -0300 Subject: backup.sh: Push to GitLab in backup.sh --- scripts/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index 727651b..d9450df 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -76,6 +76,7 @@ mr -s status mr -s -j16 update mr -s hd mr -s -j4 rsyncnet +mr -s -j4 gitlab popd || exit 1 -- cgit v1.2.3 From 85b2078a9883511563ce128e8db988a416aa0fc1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 19:00:47 -0300 Subject: configuration.nix: Remove buku. Use Firefox bookmarks instead! --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 832abea..3c24ab4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -253,7 +253,6 @@ in { xsel nodejs-10_x swift - buku ## Containers and VMs -- cgit v1.2.3 From af1732339c9fa28d5108819fdb5fef26d5609132 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 19:30:29 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index 010dac5..4fd748d 100644 --- a/TODOs.org +++ b/TODOs.org @@ -62,6 +62,7 @@ Similar approach to how tmuxinator is working. *** DOING Fix cronjob for ArchiveBox *** TODO Add play/pause, previous and next shortcuts :velhinho: *** TODO Use [[https://github.com/rycee/home-manager][home-manager]] instead of ad-hoc symlinking +*** TODO Show DiskIO and Network in xmobar *** TODO Make =mbsync= faster Either polling, fetching a subset of folders, etc. *** TODO Show the package added by =nix-shell= in =$PS1= -- cgit v1.2.3 From 6c0c6ecb62d2e935f413b3e59a51cf15ffcd2941 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Jun 2019 19:31:50 -0300 Subject: backup.sh: Add ~/.mozilla/ --- scripts/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index d9450df..e528d32 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -39,6 +39,7 @@ borg create \ ~/mbsync/ \ ~/archive/ \ ~/.elfeed/ \ + ~/.mozilla/ \ ~/tmp/backup/ # add folders to be backed up here green "Done" -- cgit v1.2.3 From 0e97c3c88a9c30b29f7e92bc8314c2f5111c5bcf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Jun 2019 11:34:48 -0300 Subject: xmonad.hs: Rewrite keybindings using additionalKeysP and Emacs-style keybindings --- nixos/configuration.nix | 9 +++++ scripts/once-only-nextcloud.sh | 9 ----- scripts/once-only.sh | 18 +++++++++ xmonad/xmonad.hs | 91 +++++++++++++++--------------------------- 4 files changed, 60 insertions(+), 67 deletions(-) delete mode 100755 scripts/once-only-nextcloud.sh create mode 100755 scripts/once-only.sh diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3c24ab4..d1c52cd 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -270,6 +270,7 @@ in { ## xmonad xorg.xmodmap + xorg.xmessage trayer dmenu escrotum @@ -344,6 +345,14 @@ in { layout = "br"; xkbOptions = "caps:swapescape"; + config = '' + Section "Device" + Identifier "Intel Graphics" + Driver "intel01" + Option "Backlight" "intel_backlight" + EndSection + ''; + windowManager.default = "xmonad"; windowManager.xmonad = { enable = true; diff --git a/scripts/once-only-nextcloud.sh b/scripts/once-only-nextcloud.sh deleted file mode 100755 index 7886b6f..0000000 --- a/scripts/once-only-nextcloud.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash - -if [ "$(pidof nextcloud)" ] -then - echo "Nextcloud already running." -else - echo "Nextcloud not running yet. Starting it." - nextcloud & disown -fi diff --git a/scripts/once-only.sh b/scripts/once-only.sh new file mode 100755 index 0000000..f207077 --- /dev/null +++ b/scripts/once-only.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +COMMAND="${1:-}" + +[[ -z "$COMMAND" ]] && { + red 'Input argument $COMMAND is undefined.' + exit 2 +} + +if [[ "$(pidof "${COMMAND}")" ]] +then + echo "'${COMMAND}' is already running." +else + echo "'${COMMAND}' is not running. Starting it." + exec "$@" & + disown +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 38c27b8..ab284d0 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -2,7 +2,7 @@ import XMonad import XMonad.Actions.SpawnOn import XMonad.Hooks.DynamicLog() import XMonad.Hooks.ManageDocks -import XMonad.Util.EZConfig(additionalKeys) +import XMonad.Util.EZConfig(additionalKeysP) import System.IO() import XMonad.Layout.NoBorders import XMonad.Hooks.SetWMName @@ -17,87 +17,62 @@ main = -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def , handleEventHook = handleEventHook def <+> docksEventHook - -- , layoutHook = smartBorders $ lessBorders OnlyFloat $ avoidStruts $ layoutHook def , layoutHook = smartBorders $ avoidStruts $ layoutHook def , modMask = mod4Mask -- User Super instead of Alt , terminal = myTerminal - , startupHook = startup - } `additionalKeys` myKeyBindings + , startupHook = myStartup + } `additionalKeysP` myKeyPBindings myTerminal = "gnome-terminal" -myKeyBindings :: [((ButtonMask, KeySym), X())] -myKeyBindings = - [ -- XF86MonBrightnessUp - ((0, 0x1008ff02), - spawn "xbacklight +10") +myKeyPBindings :: [(String, X ())] +myKeyPBindings = + [ -- Volume + ("", spawn "amixer -q sset Master toggle") + , ("", spawn "amixer -q sset Master 5%- unmute") + , ("", spawn "amixer -q sset Master 5%+ unmute") - -- XF86MonBrightnessDown - , ((0, 0x1008ff03), - spawn "xbacklight -10") + -- Playback + , ("", spawn "playerctl previous") + , ("", spawn "playerctl play-pause") + , ("", spawn "playerctl next") - -- XF86AudioMute - , ((0, 0x1008ff12), - spawn "amixer -q sset Master toggle") - - -- XF86AudioLowerVolume - , ((0, 0x1008ff11), - spawn "amixer -q sset Master 5%- unmute") - - -- XF86AudioRaiseVolume - , ((0, 0x1008ff13), - spawn "amixer -q sset Master 5%+ unmute") - - -- XF86AudioPrev - , ((0, 0x1008ff16), - spawn "playerctl previous") - - -- XF86AudioPlay - , ((0, 0x1008ff14), - spawn "playerctl play-pause") - - -- XF86AudioNext - , ((0, 0x1008ff17), - spawn "playerctl next") + -- Brightness: FIXME + , ("", spawn "xbacklight +10") + , ("", spawn "xbacklight -10") -- yeganesh launcher - , ((mod4Mask, xK_p), - spawnHere "exe=$(yeganesh -x) && exec $exe") + , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") -- Lock screen - , ((mod4Mask .|. controlMask, xK_l), - spawn "dm-tool lock & systemctl suspend") - - -- print screen of clicked window - , ((mod4Mask .|. controlMask, xK_Print), - spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s") + , ("C-M-l", spawn "dm-tool lock & systemctl suspend") -- print whole screen - , ((mod4Mask, xK_Print), - spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png") + , ("M-", spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png") + -- print screen of clicked window + , ("C-M-", spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup - , ((mod4Mask .|. controlMask, xK_1), - spawn "~/dev/libre/dotfiles/scripts/single-monitor.sh") + , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/single-monitor.sh") -- xrandr three monitor setup - , ((mod4Mask .|. controlMask, xK_3), - spawn "~/dev/libre/dotfiles/scripts/three-monitors.sh") + , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/three-monitors.sh") -- restart network - , ((mod4Mask, xK_x), - spawn "gksudo -S systemctl restart network-manager") + , ("M-x", spawn "gksudo -S systemctl restart network-manager") - -- toggle appearence of xmobar + -- Toggle appearence of xmobar -- https://stackoverflow.com/a/27646652 - , ((mod4Mask .|. shiftMask, xK_f), sendMessage ToggleStruts) + , ("M-S-f", sendMessage ToggleStruts) + + , ("M-a", spawn "xmessage 'xmonad EuAndreh debug'") ] -startup :: X() -startup = do +myStartup :: X () +myStartup = do spawn "xbacklight =100" - spawn "xmobar ~/.xmobarrc" - spawn "killall trayer; trayer --edge top --align right --SetDockType false --SetPartialStrut false --expand false --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" + spawn "killall xmobar; xmobar ~/.xmobarrc" + spawn " trayer --edge top --align right --SetDockType false --SetPartialStrut false --expand false --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" spawn "nm-applet" - spawn "~/dev/libre/dotfiles/scripts/once-only-nextcloud.sh" + spawn "~/dev/libre/dotfiles/scripts/once-only.sh nextcloud" setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad -- cgit v1.2.3 From 489a702b1ca1df05073a72d3bbc68b748a30d6ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 15:15:32 -0300 Subject: xmonad: Improve playerctl integration and keybindings --- scripts/rotate-mpris-player.sh | 28 ++++++++++++++++++++++++++++ xmonad/xmonad.hs | 16 ++++++++++++---- 2 files changed, 40 insertions(+), 4 deletions(-) create mode 100755 scripts/rotate-mpris-player.sh diff --git a/scripts/rotate-mpris-player.sh b/scripts/rotate-mpris-player.sh new file mode 100755 index 0000000..cc8c701 --- /dev/null +++ b/scripts/rotate-mpris-player.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +mkdir -p "${HOME}/.cache/andreh/" +CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" +AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" +CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" + +pick_first() { + echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" +} + +if [[ "${CURRENT_PLAYER}" = "" ]]; then + pick_first +elif ! echo "${AVAILABLE_PLAYERS}" | grep "${CURRENT_PLAYER}" > /dev/null; then + # Unknown $CURRENT_PLAYER, pick anyone + pick_first +else + INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" + LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" + if [[ "${INDEX}" = "${LENGTH}" ]]; then + # Reached the end of the $AVAILABLE_PLAYERS list, wrapping + pick_first + else + # Get the next player instead + echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" + fi +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index ab284d0..2848d61 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -23,8 +23,12 @@ main = , startupHook = myStartup } `additionalKeysP` myKeyPBindings +myTerminal :: String myTerminal = "gnome-terminal" +dbg :: String +dbg = "xmessage 'xmonad EuAndreh debug'" + myKeyPBindings :: [(String, X ())] myKeyPBindings = [ -- Volume @@ -33,14 +37,18 @@ myKeyPBindings = , ("", spawn "amixer -q sset Master 5%+ unmute") -- Playback - , ("", spawn "playerctl previous") - , ("", spawn "playerctl play-pause") - , ("", spawn "playerctl next") + , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10-") + , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) previous") + , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) play-pause") + , ("S-", spawn "~/dev/libre/dotfiles/scripts/rotate-mpris-player.sh") + , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10+") + , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") -- Brightness: FIXME , ("", spawn "xbacklight +10") , ("", spawn "xbacklight -10") + -- yeganesh launcher , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") @@ -65,7 +73,7 @@ myKeyPBindings = -- https://stackoverflow.com/a/27646652 , ("M-S-f", sendMessage ToggleStruts) - , ("M-a", spawn "xmessage 'xmonad EuAndreh debug'") + , ("M-a", spawn dbg) ] myStartup :: X () -- cgit v1.2.3 From abb5d3ae74428de35847c7337213e5a6f5fd9e6b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 15:16:02 -0300 Subject: configuration.nix: Install latest version of cmus It includes support for MPRIS and playerctl. --- nixos/configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d1c52cd..d3929b8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -63,7 +63,7 @@ in { ]; environment.systemPackages = let - # pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; + pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; # pkgs-18-03 = import(pkgs.fetchzip { # url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; @@ -219,6 +219,7 @@ in { lame frescobaldi timidityWithEvenMoreFormats + pkgsUnstable.cmus ## Programming tools -- cgit v1.2.3 From 75e8107eabc38ed79584a4792ffef7e6ff03db2e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 15:17:07 -0300 Subject: configuration.nix: Add sqlitebrowser --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d3929b8..aeea352 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -187,6 +187,7 @@ in { direnv recutils sqlite + sqlitebrowser diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From f25d75ca6435cf67dcba9832e40674baab3fc1e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 15:17:20 -0300 Subject: Add alias for playerctl to always select the current focused player --- bash/aliases.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 0d1ba88..bc30e40 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -31,6 +31,8 @@ alias sb="songbooks" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" +alias playerctl="playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt)" + alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator" -- cgit v1.2.3 From 2f73638e559b4eda97eb9b52bebd62a4b82f1907 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 15:40:48 -0300 Subject: tmuxinator: Adapt annex.yml custom layout for cmus --- tmux/projects/annex.yml | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 00f8c29..dcdb065 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -3,19 +3,21 @@ name: annex+home windows: - annex+dotfiles: root: ~/annex/ - layout: main-vertical + # Output from =tmux list-windows= + # Taken from: + # https://stackoverflow.com/questions/9812000/specify-pane-percentage-in-tmuxinator-project/9976282#9976282 + layout: 64e7,150x39,0,0[150x25,0,0{85x25,0,0,98,64x25,86,0[64x14,86,0,119,64x10,86,15,120]},150x13,0,26,118] panes: - misc: - cd - - newsboat: - - cd - - n - dotfiles: - cd "$DOTFILES" && git status - sleep 10 - reload - annex: - git status + - cmus: + - cmus - songbooks: root: ~/dev/libre/songbooks/ layout: main-vertical -- cgit v1.2.3 From 46194d46d5a22dd54a7fdd5704e7108a23969a9a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 18:48:25 -0300 Subject: xmobar: Full refactor - drop trayer; - integrate with media with playerctl through MPRIS; - use default values and configurations for xmobar Commands. --- bash/util.sh | 4 +++ scripts/xmobar-mpris.sh | 38 +++++++++++++++++++++++++++ xmonad/xmobar.hs | 68 +++++++++++++++---------------------------------- xmonad/xmonad.hs | 23 +++++++---------- 4 files changed, 72 insertions(+), 61 deletions(-) create mode 100755 scripts/xmobar-mpris.sh diff --git a/bash/util.sh b/bash/util.sh index e29d02f..a1186fa 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -32,3 +32,7 @@ merkle-tree () { awk '{print $1}' popd > /dev/null || exit 1 } + +# Taken from: +# https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell +urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } diff --git a/scripts/xmobar-mpris.sh b/scripts/xmobar-mpris.sh new file mode 100755 index 0000000..cd98452 --- /dev/null +++ b/scripts/xmobar-mpris.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +default_status() { + CUR="${1}" + printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" +} + +main() { + CUR="$(cat ~/.cache/andreh/mpris-player.txt)" + if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then + printf "%s\n" "${CUR}" + else + case "${CUR}" in + cmus) + default_status "${CUR}" + ;; + vlc) + # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp + NAME="$(basename "$(playerctl metadata xesam:url)")" + FILE="$(urldecode "${NAME%.*}" | cut -d' ' -f2-)" + printf "%s: %s\n" "${CUR}" "${FILE}" + ;; + *) + default_status "${CUR}" + ;; + esac + fi +} +export -f main + +while true +do + main + sleep 1 +done diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 4bba66b..690bf6b 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -1,47 +1,21 @@ -Config { font = "-*-Fixed-Bold-R-Normal-*-13-*-*-*-*-*-*-*" - , bgColor = "black" - , fgColor = "grey" - , position = TopW L 90 - , additionalFonts = [] - , borderColor = "black" - , border = TopB - , alpha = 255 - , textOffset = -1 - , iconOffset = -1 - , lowerOnStart = True - , pickBroadest = False - , persistent = False - , hideOnStart = False - , iconRoot = "." - , allDesktops = True - , overrideRedirect = True - , commands = [ Run Weather "EGPF" ["-t",": C", - "-L","18","-H","25", - "--normal","green", - "--high","red", - "--low","lightblue"] 36000 - , Run Network "wlp2s0" ["-L","0","-H","32","--normal","green","--high","red"] 10 - - , Run Cpu ["-L","3","-H","50", - "--normal","green","--high","red"] 10 - , Run Memory ["-t","Mem: %"] 10 - , Run Swap [] 10 - , Run Com "uname" ["-s","-r"] "" 36000 - , Run Date "%a %b %_d %Y %H:%M:%S" "date" 10 - - , Run Battery [ - "-t", ": % - ", - "--", - --"-c", "charge_full", - "-O", "AC", - "-o", "Bat", - "-h", "green", - "-l", "red" - ] 10 - , Run StdinReader - , Run CommandReader "/usr/bin/ledmon" "LED" - ] - , sepChar = "%" - , alignSep = "}{" - , template = " %date% | %battery% } { %memory% * %swap% | %cpu% | %wlp2s0% " - } +Config { + font = "xft:DejaVu Sans Mono:size=10" + , commands = [ + Run Cpu ["-L","3","-H","50", "--normal","green","--high","red"] 10 + , Run Memory ["-t","Mem: %"] 30 + , Run Swap [] 30 + , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 + , Run DiskU [("/", "/")] [] 600 + , Run Wireless "wlp1s0" [] 10 + , Run Battery [ + "-t", ": % - ", + "--", + "-O", "AC", + "-o", "Bat", + "-h", "green", + "-l", "red"] + 10 + , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-mpris.sh" "mpris" + ] + , template = " %date% | %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " +} diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 2848d61..9549632 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -1,20 +1,18 @@ import XMonad -import XMonad.Actions.SpawnOn -import XMonad.Hooks.DynamicLog() +import XMonad.Actions.SpawnOn(spawnHere) import XMonad.Hooks.ManageDocks import XMonad.Util.EZConfig(additionalKeysP) -import System.IO() import XMonad.Layout.NoBorders import XMonad.Hooks.SetWMName import XMonad.Hooks.ManageHelpers -import XMonad.Util.Scratchpad -import qualified XMonad.StackSet as W +import XMonad.Util.Run(spawnPipe) main :: IO () -main = +main = do + xmproc <- spawnPipe "xmobar ~/.xmobarrc" xmonad $ def - -- Fullscreen handling: - -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar + -- Fullscreen handling: + -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def , handleEventHook = handleEventHook def <+> docksEventHook , layoutHook = smartBorders $ avoidStruts $ layoutHook def @@ -78,9 +76,6 @@ myKeyPBindings = myStartup :: X () myStartup = do - spawn "xbacklight =100" - spawn "killall xmobar; xmobar ~/.xmobarrc" - spawn " trayer --edge top --align right --SetDockType false --SetPartialStrut false --expand false --width 10 --transparent true --tint 0x191970 --height 17 --monitor 1" - spawn "nm-applet" - spawn "~/dev/libre/dotfiles/scripts/once-only.sh nextcloud" - setWMName "LG3D" -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad + -- Taken from: + -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad + setWMName "LG3D" -- cgit v1.2.3 From 00aa18e63863015fe5dfcbdbda8bfa15f7224b08 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 18:49:33 -0300 Subject: Reorder annex.yml --- tmux/projects/annex.yml | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index dcdb065..0639881 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -18,14 +18,6 @@ windows: - git status - cmus: - cmus - - songbooks: - root: ~/dev/libre/songbooks/ - layout: main-vertical - panes: - - songbooks-main: - - s - - songbooks-test: - - s - vps: root: ~/dev/libre/vps/ layout: main-vertical @@ -35,3 +27,11 @@ windows: - vps-state: - cd ../vps-state/ - s + - songbooks: + root: ~/dev/libre/songbooks/ + layout: main-vertical + panes: + - songbooks-main: + - s + - songbooks-test: + - s -- cgit v1.2.3 From 1c9996f4328ee6bb1d47210cc3f6b3f0ed0f35bf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 18:49:49 -0300 Subject: aliases.hs: Make playerctl dynamic --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index bc30e40..b9b8a4c 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -31,7 +31,7 @@ alias sb="songbooks" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" -alias playerctl="playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt)" +alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -- cgit v1.2.3 From 7887a4a58e6c6d998590a520c0226e91f48ae57a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 18:50:07 -0300 Subject: aliases.sh: Make mux alias shorter --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index b9b8a4c..dfc343f 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -35,7 +35,7 @@ alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" -alias mux="tmuxinator" +alias mux="tmuxinator start" u() { pushd ~/annex > /dev/null || exit 1; -- cgit v1.2.3 From 0503b5c640038b063906e177d3cb0a772b177afa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 18:50:23 -0300 Subject: TODOs.org Move content from Git Annex TODOs.org. --- TODOs.org | 270 ++++++++++++++++++++++++++++++++++++++++---------------------- 1 file changed, 177 insertions(+), 93 deletions(-) diff --git a/TODOs.org b/TODOs.org index 4fd748d..d38179e 100644 --- a/TODOs.org +++ b/TODOs.org @@ -41,6 +41,9 @@ chmod +x ./install.sh *** DOING Setup phase **** DOING Fix =enabling= of Git Annex remotes **** TODO Install Guix +**** TODO Symlink Bash +: sudo ln -s /bin/sh /bin/bash +**** TODO Configure Git Annex *** DONE Document the discrete three step phases CLOSED: [2019-06-01 Sat 22:04] Put all of this on the README for future easy access. @@ -49,115 +52,196 @@ Put all of this on the README for future easy access. 2. Performing a fresh install; 3. Bootstraping the new installation's configuration and data. ** DOING Workflow improvement -*** WAITING Finish importing mailing list emails +*** TODO Guix +**** TODO Create =burn.sh=, =install.sh= and =setup.sh= Guix installation scripts +**** TODO Put Btrfs on Guix +**** DONE Consider using Btrfs? Why? Why not? +CLOSED: [2019-06-02 Sun 15:04] +Guix already has initial support for it, and ZFS is incompatible with GPL :shrug: + +Test installing it on =velhinho=. +**** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? +CLOSED: [2019-06-02 Sun 02:43] +Cuirass! Yes! +*** TODO cmus FIXME +**** TODO Fetch metadata from [[https://musicbrainz.org/][MusicBrainz]] +**** TODO Add covers to albums +**** TODO How to fuzzy search? +*** TODO GPG +**** TODO Is it possible to use GPG (sub)key for SSH access? +**** TODO GPG YubiKey Setup +- https://github.com/drduh/YubiKey-Guide +- https://nullprogram.com/blog/2017/03/12/ +- https://alexcabal.com/creating-the-perfect-gpg-keypair +- https://rzetterberg.github.io/yubikey-gpg-nixos.html +**** TODO Make KeePassXC interop with Firefox +**** TODO Make Nextcloud pick password from KeePassXC or GPG file +Remove all passwords from Firefox and put them all in KeePassXC. +**** TODO Use horcrux keys beyond paperkey (in case of fire) +*** TODO Misc +**** TODO =say= command +With quality comparable to macOS. +**** TODO Make =thefuck= great again +**** TODO Make xmodmap commands declarative +**** TODO Test cyanogen on old K10 +**** TODO Install OpenBazaar +**** TODO Open =.description= files with text editor +**** TODO Change email address of SSH key pair in builds.sr.ht +**** CANCELLED Adjust layout for =annex.yml= tmuxinator template +I actually got used to it and now I like it :) +**** DONE Improve README.org +**** DONE Test elfeed +CLOSED: [2019-06-08 Sat 16:53] +This way I can more easily link to an article from org-mode! +CLOSED: [2019-06-02 Sun 02:43] +*** TODO xmonad +**** TODO Show DiskIO and Network in xmobar +**** TODO Nextcloud out of trayer: where to put it now? +**** TODO Show playerctl $CURRENT_PLAYER in center +Stylized? +vlc -> VLC +cmus -> ? +**** TODO Show playerctl stats in center +**** TODO Show memory and CPU history besides the current number +**** TODO Show network upload and download +**** TODO Show temperature +**** TODO Show cmus song +**** TODO Fix screen brightness shortcuts :velhinho: +**** TODO Add clipboard manager +**** DONE Add play/pause, previous and next shortcuts :velhinho: +*** TODO Borg +**** TODO Copy content of Borg to S3 and Glacier +**** WAITING Simplify and automate backup.sh +**** TODO Add weekly cronjob for running backup.sh +*** TODO ArchiveBox +**** DOING Fix cronjob for ArchiveBox +**** DOING Fix ArchiveBox errors +**** DONE Remove public link to Pocket feed +CLOSED: [2019-06-16 Sun 12:14] +**** CANCELLED First class ArchiveBox <-> Wallabag integration (instead of Atom feed?) +Use Firefox bookmarks instead. +*** TODO Git Annex +**** TODO Configure small disk in usurpador to not download get some Git Annex folders +**** TODO Fix AWS_SECRET_KEY env var +Make embedcreds actually work. +**** TODO Use Glacier as Git Annex remote +**** TODO Make HD cheaper than S3 +**** TODO Tune =numcopies=, =git annex copy= +**** TODO Add more cheap remotes? +**** TODO Add GitLab as git-remote-gcrypt remote? +Can it perform incremental SSH pushes? +*** TODO Email +**** WAITING Finish importing mailing list emails Right now, the =mb2md= doesn't recognize the concatenated MBOX file as valid. : less /nix/store/255i0f5k8k6n6q94fmw5h4mj95dxbh8p-mb2md-3.20/bin/.mb2md-wrapped -*** TODO How to simplify configuring the =ssh-agent=? -https://unix.stackexchange.com/questions/90853/how-can-i-run-ssh-add-automatically-without-a-password-prompt -*** TODO Declare layouts and workspaces declaratively -Similar approach to how tmuxinator is working. -*** WAITING Simplify and automate backup.sh -*** TODO Fix screen brightness shotcuts :velhinho: -*** DOING Fix cronjob for ArchiveBox -*** TODO Add play/pause, previous and next shortcuts :velhinho: -*** TODO Use [[https://github.com/rycee/home-manager][home-manager]] instead of ad-hoc symlinking -*** TODO Show DiskIO and Network in xmobar -*** TODO Make =mbsync= faster +**** TODO Allow notmuch to enqueue email when offline +**** TODO Make =mbsync= faster Either polling, fetching a subset of folders, etc. -*** TODO Show the package added by =nix-shell= in =$PS1= -*** TODO Improve spam filtering +**** TODO Improve spam filtering https://notmuchmail.org/initial_tagging/ -*** TODO Use Spacemacs with NixOS +**** TODO notmuch: send email from mor SMTP accounts +**** TODO Add lock for running =sync-mail.sh= +**** TODO Refile "archived" emails into actual Archive folder +Query for =tag:archive AND tag:euandreh AND folder:/INBOX/= emails and refile them into =Archive= folder: +#+BEGIN_SRC shell +# WIP +OUT="${HOME}/mbsync/EuAndreh/Archive/cur" +notmuch search --output=files tag:archive AND tag:euandreh AND folder:/INBOX/ | xargs -I{} mv "{}" "${OUT}/$(echo {} | awk -F, '{print $1}' | awk -F/ '{print $NF}')" +#+END_SRC +Make sure to keep existing tags from it? Will there be any case, since they're all INBOX emails? +**** TODO Improve =mailing-list-import-mbox.sh= +***** TODO Import MBOX archive from sr.ht +Relatevant tickets: +- https://todo.sr.ht/~sircmpwn/lists.sr.ht/22 +- https://todo.sr.ht/~sircmpwn/lists.sr.ht/94 +***** TODO Import MBOX archive from Discourse +*** TODO Emacs +**** TODO = Wallabag integration (instead of Atom feed?) -* Fixes -** CANCELLED Adjust layout for =annex.yml= tmuxinator template -I actually got used to it and now I like it :) -** TODO Make xmodmap commands declarative -** TODO Open =.description= files with text editor -- cgit v1.2.3 From 6ec975afb426e1ae859add87a9681f23c3543f9b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 22:46:24 -0300 Subject: backup.sh: Update UTCLOUD paths --- scripts/backup.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index e528d32..732a76c 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -11,11 +11,11 @@ if [ ! -d ~/UTCLOUD/ ]; then fi if [ ! -d ~/borgbackup/ ]; then - yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/." + yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/backups/borg/borgbackup/ into ~/borgbackup/." # The initial borg repo was created with: # $ borg init --append-only --encryption=keyfile ~/borgbackup # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/borg/borgbackup/ ~/borgbackup + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup fi BACKUP_TAG="${1-default}" @@ -53,7 +53,7 @@ popd green "Done." yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/borg/borgbackup/ +rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ green "Done" yellow "Syncing ~/borgbackup to $R:borgbackup/" @@ -61,7 +61,7 @@ rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgba green "Done" yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" -rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/borg/vps-borgbackup/ +rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ green "Done" -- cgit v1.2.3 From 3864c16ec28d5fef4fd0cbb622c7de4510d08353 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 23:28:29 -0300 Subject: xmobar-mpris.sh: Add custom label for VLC --- scripts/xmobar-mpris.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/xmobar-mpris.sh b/scripts/xmobar-mpris.sh index cd98452..469a4e6 100755 --- a/scripts/xmobar-mpris.sh +++ b/scripts/xmobar-mpris.sh @@ -21,7 +21,7 @@ main() { # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp NAME="$(basename "$(playerctl metadata xesam:url)")" FILE="$(urldecode "${NAME%.*}" | cut -d' ' -f2-)" - printf "%s: %s\n" "${CUR}" "${FILE}" + printf "VLC: %s\n" "${FILE}" ;; *) default_status "${CUR}" -- cgit v1.2.3 From 9ace1c7381155484cb05b4e7ada8d4a7ff790da3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Jun 2019 23:29:02 -0300 Subject: archive.sh: Refator out of Pocket into Firefox bookmarks --- scripts/archive.sh | 44 +++++++++++++++++++++++++++++++++++--------- 1 file changed, 35 insertions(+), 9 deletions(-) diff --git a/scripts/archive.sh b/scripts/archive.sh index b9f57e6..6a79dfb 100755 --- a/scripts/archive.sh +++ b/scripts/archive.sh @@ -2,14 +2,40 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -export POCKET_ARCHIVE='https://getpocket.com/users/euandreh/feed/read' -export OUTPUT_DIR="$HOME/archive/archivebox-output/" -export WGET_BINARY="$PWD/wget-4.sh" +TMPDIR="$(mktemp -d)" +pushd "${TMPDIR}" > /dev/null + +# Derived from ArchiveBox: +# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 +PROFILE_PLACES_DB=$(ls ~/.mozilla/firefox/*.default/places.sqlite) +yellow "Exporting content from ${PROFILE_PLACES_DB} in ${TMPDIR}..." +cp "${PROFILE_PLACES_DB}" places.sqlite +QUERY=$(cat < bookmarks-archive.json +green "Done." + +export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" export FETCH_MEDIA=False -export ONLY_NEW=True export TIMEOUT=180 -if [ "${1-}" = "-s" ]; then - curl -s "$POCKET_ARCHIVE" | archivebox >> /tmp/archivebox.log -else - curl -s "$POCKET_ARCHIVE" | archivebox -fi +archivebox "${TMPDIR}/bookmarks-archive.json" + +popd > /dev/null -- cgit v1.2.3 From 0999cbcda13a48bbcbde795cea74a5f4d5e6b3da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 13:51:32 -0300 Subject: Add 'yt' script - enqueue in VLC when ran with 'VLC=1'; - support URLs and batch files; --- bash/aliases.sh | 1 - bash/youtube.sh | 8 +------- scripts/yt | 36 ++++++++++++++++++++++++++++++++++++ 3 files changed, 37 insertions(+), 8 deletions(-) create mode 100755 scripts/yt diff --git a/bash/aliases.sh b/bash/aliases.sh index dfc343f..b9ec0df 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -6,7 +6,6 @@ unalias -a alias open="xdg-open" alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahp --color" -alias yt-dl="yt_dl" isLinux && { alias copy="tr -d '\\n' | xclip -sel clip" alias cop="xclip -sel clip" diff --git a/bash/youtube.sh b/bash/youtube.sh index c2882e1..c8a6784 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -2,13 +2,7 @@ export DEFAULT_PLAYLIST_END=15 export DEFAULT_INC_STEP=10 -export YT_TEMPLATE="$HOME/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" - -# Always downloads video, doesn't look at the download-archive -yt_dl() { - youtube-dl "$1" -o "$YT_TEMPLATE" --write-description -} -export -f yt_dl +export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" download() { youtube-dl "$1" \ diff --git a/scripts/yt b/scripts/yt new file mode 100755 index 0000000..a9abd97 --- /dev/null +++ b/scripts/yt @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Always downloads video, doesn't look at the download-archive + +URL_OR_PATH="${1:-}" +[[ -z "${URL_OR_PATH}" ]] && { + echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr + exit 2 +} + +if [[ -f "${URL_OR_PATH}" ]]; then + echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr + youtube-dl --batch-file "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --write-description \ + 1>&2 + FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --get-filename)" +else + echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr + youtube-dl "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --write-description \ + 1>&2 + FILES="$(youtube-dl "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --get-filename)" +fi + +if [[ ! -z "${VLC:-}" ]]; then + while IFS=$'\n' read -r file; do + vlc "${file}" + done <<<"${FILES}" +fi -- cgit v1.2.3 From aa649ffcb9cb801800427b2de4c2cf4b6da0c5af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 13:52:45 -0300 Subject: TODOs.org --- TODOs.org | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TODOs.org b/TODOs.org index d38179e..eaff27d 100644 --- a/TODOs.org +++ b/TODOs.org @@ -81,6 +81,7 @@ Remove all passwords from Firefox and put them all in KeePassXC. *** TODO Misc **** TODO =say= command With quality comparable to macOS. +**** TODO Write URL to file when downloading with =yt= **** TODO Make =thefuck= great again **** TODO Make xmodmap commands declarative **** TODO Test cyanogen on old K10 @@ -94,6 +95,9 @@ I actually got used to it and now I like it :) CLOSED: [2019-06-08 Sat 16:53] This way I can more easily link to an article from org-mode! CLOSED: [2019-06-02 Sun 02:43] +*** TODO Tmux +**** TODO Add =C-S-k= to kill line +The original terminal kill =C-k= is overriden by tmux. *** TODO xmonad **** TODO Show DiskIO and Network in xmobar **** TODO Nextcloud out of trayer: where to put it now? -- cgit v1.2.3 From 9135e13fcb4dc800c55ec7f66b488207ee58e432 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 13:53:05 -0300 Subject: configuration.nix: Remove call to xmobar in sessionCommands --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index aeea352..702644c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -375,7 +375,6 @@ in { # To test a keycode: # xmodmap -e 'keycode 118 = bar Greek_lamda' sessionCommands = '' - ${pkgs.haskellPackages.xmobar}/bin/xmobar ~/.xmobarrc & ${pkgs.fvwm}/bin/xpmroot ~/Nextcloud/Images/emotion.png & ''; }; -- cgit v1.2.3 From e36bd3f5a37af381412cc60420fb4ac9c57a6b59 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 13:53:23 -0300 Subject: xmobar.hs: Run Wireless every 10 seconds instead of every second --- xmonad/xmobar.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 690bf6b..f9e7674 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -6,7 +6,7 @@ Config { , Run Swap [] 30 , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 , Run DiskU [("/", "/")] [] 600 - , Run Wireless "wlp1s0" [] 10 + , Run Wireless "wlp1s0" [] 100 , Run Battery [ "-t", ": % - ", "--", -- cgit v1.2.3 From ce1b96dda870d20406c0620f499263c5fecfe578 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 16:32:50 -0300 Subject: backup.sh: Don't run mr tasks in parallel --- scripts/backup.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/backup.sh b/scripts/backup.sh index 732a76c..3721330 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -74,10 +74,10 @@ pushd ~/dev/libre/ || exit 1 mr -s master mr -s status -mr -s -j16 update +mr -s update mr -s hd -mr -s -j4 rsyncnet -mr -s -j4 gitlab +mr -s rsyncnet +mr -s gitlab popd || exit 1 -- cgit v1.2.3 From 2e1995aaf4140af7114b37e0cbe2eb7be9cf638b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 16:33:03 -0300 Subject: backup.sh: Assert master branch before starting backup --- scripts/backup.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/scripts/backup.sh b/scripts/backup.sh index 3721330..04cd7bf 100755 --- a/scripts/backup.sh +++ b/scripts/backup.sh @@ -18,6 +18,11 @@ if [ ! -d ~/borgbackup/ ]; then rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup fi +pushd ~/dev/libre/ || exit 1 +mr -s notmaster +popd || exit 1 + + BACKUP_TAG="${1-default}" rm -rf "$HOME/tmp/backup/" -- cgit v1.2.3 From 1a7c6215cf98e19f9d6976086c8c369dc64c5d49 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 17:06:09 -0300 Subject: yt: Color VLC output --- scripts/yt | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/yt b/scripts/yt index a9abd97..ad78887 100755 --- a/scripts/yt +++ b/scripts/yt @@ -32,5 +32,6 @@ fi if [[ ! -z "${VLC:-}" ]]; then while IFS=$'\n' read -r file; do vlc "${file}" + blue "Enqueued ${file} in VLC." done <<<"${FILES}" fi -- cgit v1.2.3 From 2bd5298a782ebcb01a97e9579b338c3ea73beb80 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 19:35:17 -0300 Subject: archive.sh: popd before running ArchiveBox --- scripts/archive.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/archive.sh b/scripts/archive.sh index 6a79dfb..66d6f03 100755 --- a/scripts/archive.sh +++ b/scripts/archive.sh @@ -32,10 +32,11 @@ EOF ) sqlite3 places.sqlite "${QUERY}" | jq > bookmarks-archive.json green "Done." +popd > /dev/null export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" export FETCH_MEDIA=False export TIMEOUT=180 +export ONLY_NEW=True +export WGET_BINARY="$PWD/wget-4.sh" archivebox "${TMPDIR}/bookmarks-archive.json" - -popd > /dev/null -- cgit v1.2.3 From 4553fb9a2c8f32fa4f9b338c7f2479f716f234f5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 19:35:38 -0300 Subject: cron: Log ISO8601 timestamp --- scripts/archive.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/archive.sh b/scripts/archive.sh index 66d6f03..54f6d8c 100755 --- a/scripts/archive.sh +++ b/scripts/archive.sh @@ -2,6 +2,7 @@ set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" +date -Is TMPDIR="$(mktemp -d)" pushd "${TMPDIR}" > /dev/null -- cgit v1.2.3 From 71b99524e71809a1db2d7258052bc80102b53125 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 18 Jun 2019 19:36:06 -0300 Subject: sync-mail.sh: Run serially instead of in parallel --- scripts/sync-mail.sh | 14 +++++--------- 1 file changed, 5 insertions(+), 9 deletions(-) diff --git a/scripts/sync-mail.sh b/scripts/sync-mail.sh index ce95276..adcad30 100755 --- a/scripts/sync-mail.sh +++ b/scripts/sync-mail.sh @@ -1,11 +1,7 @@ #!/usr/bin/env bash +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" -if [ "$1" = "-s" ]; then - mbsync -aV &>> /tmp/mbsync.log && notmuch new &>> /tmp/notmuch.log -else - mbsync EuAndreh & - mbsync Nubank & - mbsync Gmail & - wait - notmuch new 2> >(grep -E -v 'Note: Ignoring non-mail file: .*\.(uidvalidity|mbsyncstate)') -fi +date -Is +mbsync -aV +notmuch new -- cgit v1.2.3 From 621b9a280c2a8aabf385a59d7f6b92592f9a597b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:31:52 -0300 Subject: Move scripts/* into scripts/cron/ and scripts/ad-hoc/ --- scripts/ad-hoc/burn-nixos.sh | 48 ++++++++++++ scripts/ad-hoc/export-keys.sh | 35 +++++++++ scripts/ad-hoc/gc.sh | 59 +++++++++++++++ scripts/ad-hoc/guix | 1 + scripts/ad-hoc/import-gg.sh | 8 ++ scripts/ad-hoc/mail.sh | 51 +++++++++++++ scripts/ad-hoc/mailing-list-import-mbox.sh | 114 +++++++++++++++++++++++++++++ scripts/ad-hoc/once-only.sh | 18 +++++ scripts/ad-hoc/rotate-mpris-player.sh | 28 +++++++ scripts/ad-hoc/scp.sh | 7 ++ scripts/ad-hoc/single-monitor.sh | 2 + scripts/ad-hoc/startx | 3 + scripts/ad-hoc/three-monitors.sh | 2 + scripts/backup.sh | 96 ------------------------ scripts/burn-nixos.sh | 48 ------------ scripts/cron/backup.sh | 96 ++++++++++++++++++++++++ scripts/cron/wget-4.sh | 2 + scripts/export-keys.sh | 35 --------- scripts/gc.sh | 59 --------------- scripts/guix | 1 - scripts/import-gg.sh | 8 -- scripts/mail.sh | 51 ------------- scripts/mailing-list-import-mbox.sh | 114 ----------------------------- scripts/once-only.sh | 18 ----- scripts/rotate-mpris-player.sh | 28 ------- scripts/scp.sh | 7 -- scripts/single-monitor.sh | 2 - scripts/startx | 3 - scripts/three-monitors.sh | 2 - scripts/wget-4.sh | 2 - 30 files changed, 474 insertions(+), 474 deletions(-) create mode 100644 scripts/ad-hoc/burn-nixos.sh create mode 100755 scripts/ad-hoc/export-keys.sh create mode 100755 scripts/ad-hoc/gc.sh create mode 120000 scripts/ad-hoc/guix create mode 100755 scripts/ad-hoc/import-gg.sh create mode 100755 scripts/ad-hoc/mail.sh create mode 100755 scripts/ad-hoc/mailing-list-import-mbox.sh create mode 100755 scripts/ad-hoc/once-only.sh create mode 100755 scripts/ad-hoc/rotate-mpris-player.sh create mode 100755 scripts/ad-hoc/scp.sh create mode 100755 scripts/ad-hoc/single-monitor.sh create mode 100755 scripts/ad-hoc/startx create mode 100755 scripts/ad-hoc/three-monitors.sh delete mode 100755 scripts/backup.sh delete mode 100644 scripts/burn-nixos.sh create mode 100755 scripts/cron/backup.sh create mode 100755 scripts/cron/wget-4.sh delete mode 100755 scripts/export-keys.sh delete mode 100755 scripts/gc.sh delete mode 120000 scripts/guix delete mode 100755 scripts/import-gg.sh delete mode 100755 scripts/mail.sh delete mode 100755 scripts/mailing-list-import-mbox.sh delete mode 100755 scripts/once-only.sh delete mode 100755 scripts/rotate-mpris-player.sh delete mode 100755 scripts/scp.sh delete mode 100755 scripts/single-monitor.sh delete mode 100755 scripts/startx delete mode 100755 scripts/three-monitors.sh delete mode 100755 scripts/wget-4.sh diff --git a/scripts/ad-hoc/burn-nixos.sh b/scripts/ad-hoc/burn-nixos.sh new file mode 100644 index 0000000..85ce6cd --- /dev/null +++ b/scripts/ad-hoc/burn-nixos.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +usage() { + red "Missing argument $1.\n" + cat < + + Arguments: + NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html + USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. + +Examples: + Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: + NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' + burn.sh "\$NIXOS_URL" /dev/sdb +EOF +} + +NIXOS_URL="${1:-}" +USB_STICK="${2:-}" +ISO_PATH='/tmp/nixos.iso' + +[[ -z "${NIXOS_URL}" ]] && { + usage 'NIXOS_URL' + exit 2 +} + +[[ -z "${USB_STICK}" ]] && { + usage 'USB_STICK' + exit 2 +} + +yellow "Downloading NixOS ISO..." +wget -cO "${ISO_PATH}" "${NIXOS_URL}" +wget -cO "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" +diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { + red "SHA256 didn't match!" + exit 1 +} +green "Done. SHA256 match." + +yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." +umount "${USB_STICK}1" ||: +blue "$(du -hs /tmp/nixos.iso)" +sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress +green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." diff --git a/scripts/ad-hoc/export-keys.sh b/scripts/ad-hoc/export-keys.sh new file mode 100755 index 0000000..5807dbc --- /dev/null +++ b/scripts/ad-hoc/export-keys.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +yellow "Exporting public key..." +gpg --export --armor -a EuAndreh > keys.gpg +green "Done." + +yellow "Exporting private key..." +read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r +gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg +green "Done." + +yellow "Exporting ownertrust..." +gpg --export-ownertrust > trust.txt +green "Done." + +yellow "Creating tar with key pair and trust content..." +tar -cvf EuAndreh.tar keys.gpg trust.txt +green "Done." + +yellow "Encrypting tar file..." +read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r +gpg --cipher-algo AES256 -c EuAndreh.tar +green "Done." + +yellow "Removing traces of private key..." +shred trust.txt +rm trust.txt +shred keys.gpg +rm keys.gpg +shred EuAndreh.tar +rm EuAndreh.tar +green "Done." + +blue "File 'EuAndreh.tar.gpg' created!" diff --git a/scripts/ad-hoc/gc.sh b/scripts/ad-hoc/gc.sh new file mode 100755 index 0000000..c93c948 --- /dev/null +++ b/scripts/ad-hoc/gc.sh @@ -0,0 +1,59 @@ +#!/usr/bin/env bash + +disk_space() { + u | awk '{print $5" "$6}' +} + +before=$(disk_space) + +yellow "Cleaning up the NixOS store" + +profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) + +for p in "${profiles[@]}"; do + sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" +done + +# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= +nix-env --delete-generations old + +nix-store --gc +nix-collect-garbage -d + + +yellow "Cleaning up Guix store" + +guix gc + + +yellow "Cleaning up up the Trash and /tmp folders" + +sudo rm -rf ~/.local/share/Trash/files/* +# https://askubuntu.com/a/609396 +sudo find /tmp -type f -atime +10 -delete + + +yellow "Erasing docker images" + +echo y | docker system prune -a +docker rmi "$(docker images -a -q)" +docker rm "$(docker ps -a -f status=exited -q)" + +docker stop "$(docker ps -a -q)" +docker rm "$(docker ps -a -q)" + +echo y | docker volume prune +echo y | docker container prune + + +# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ +yellow "Clean up deleted email files" +notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" +notmuch new + +after=$(disk_space) + +green "Done." +green "Disk space before and after:" +blue " before: ${before}" +blue " after: ${after}" diff --git a/scripts/ad-hoc/guix b/scripts/ad-hoc/guix new file mode 120000 index 0000000..65b4074 --- /dev/null +++ b/scripts/ad-hoc/guix @@ -0,0 +1 @@ +/var/guix/profiles/per-user/root/current-guix/bin/guix \ No newline at end of file diff --git a/scripts/ad-hoc/import-gg.sh b/scripts/ad-hoc/import-gg.sh new file mode 100755 index 0000000..1682adc --- /dev/null +++ b/scripts/ad-hoc/import-gg.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +GGROUPS=() + +for group in "${GGROUPS[@]}"; do + mailing-list-import-mbox.sh google "${group}" +done diff --git a/scripts/ad-hoc/mail.sh b/scripts/ad-hoc/mail.sh new file mode 100755 index 0000000..abf48f2 --- /dev/null +++ b/scripts/ad-hoc/mail.sh @@ -0,0 +1,51 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +usage() { + red "Missing input argument '${1}'.\n" + cat < + + Arguments + RECIPIENTS Comma-separated string of emails to receive the email. + SUBJECT The text of the email subject. + BODY The body of the email. Can contain \n in the text. + FROM The from address to send from (be aware of matching DKIM signature). + +Examples: + Send an email to to@example.org: + mail.sh to@example.org Subject Body from@example.org +EOF +} + +RECIPIENTS="${1:-}" +SUBJECT="${2:-}" +BODY="${3:-}" +FROM="${4:-}" + +[[ -z "${RECIPIENTS}" ]] && { + usage 'RECIPIENTS' + exit 2 +} + +[[ -z "${SUBJECT}" ]] && { + usage 'SUBJECT' + exit 2 +} + +[[ -z "${BODY}" ]] && { + usage 'BODY' + exit 2 +} + +[[ -z "${FROM}" ]] && { + usage 'FROM' + exit 2 +} + +# shellcheck disable=SC2029 +ssh euandre.org "echo \"${BODY}\" | mail -s \"${SUBJECT}\" \"${RECIPIENTS}\" -a BCC:cc@euandre.org -a From:\"${FROM}\" -a \"Content-Type: text/plain; charset=UTF-8\"" + +printf "Subject: %s\nRecipients: %s\n\n%s\n" "${SUBJECT}" "${RECIPIENTS}" "${BODY}" >> "${HOME}/annex/txt/mail/$(date -Ins).txt" diff --git a/scripts/ad-hoc/mailing-list-import-mbox.sh b/scripts/ad-hoc/mailing-list-import-mbox.sh new file mode 100755 index 0000000..2fe14aa --- /dev/null +++ b/scripts/ad-hoc/mailing-list-import-mbox.sh @@ -0,0 +1,114 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p bash wget mb2md +# shellcheck shell=bash +set -Eeuo pipefail + +MAILING_LIST_PROVIDER="${1:-}" +MAILING_LIST_NAME="${2:-}" +GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' +OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" +TMP_DIR="$HOME/tmp/mbox-import" +usage() { + cat < + + Arguments + MAILING_LIST_NAME The name of the mailing list, e.g.: info-guix. + MAILING_LIST_PROVIDER The name of the host of the mailing list, e.g.: gnu. + Supported providers: + 'gnu' for GNU mailing lists + 'google' for Google Groups + +Examples: + Download and import into mbsync the MBOX archive from info-guix mailing-list: + mailing-list-import-mbox.sh gnu info-guix + + Download and import into mbsync the contents for lisp-br Google Groups: + mailing-list-import-mbox.sh google lisp-br +EOF +} + +gnu_mailing_list_import() { + mkdir -p "${TMP_DIR}" + pushd "${TMP_DIR}" + + # Subscribe to the mailing list + local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" + local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" + mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' + + # Download existing archive as MBOX files + wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" + + # Concatenate all MBOX files into as single MBOX file + cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" + + # Transform the MBOX file into a MailDir format and put it on the right place + mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" + popd +} + +google_groups_import() { + [[ -f ~/dev/misc/google-group-crawler/crawler.sh ]] || { + red "Missing ${HOME}/dev/misc/google-group-crawler/crawler.sh file." + red "Clone it before importing Google Groups emails." + exit 1 + } + mkdir -p "${TMP_DIR}" + pushd "${TMP_DIR}" + + # Subscribe to the mailing list + local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" + local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" + mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' + + # Download existing messages into MBOX Files + CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" + export _GROUP="${MAILING_LIST_NAME}" + ~/dev/misc/google-group-crawler/crawler.sh -sh > "${CRAWLER_FILE}" + bash "${CRAWLER_FILE}" + + cat "${MAILING_LIST_NAME}/mbox/"* > "${MAILING_LIST_NAME}.all.mbox" + + echo before + echo mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" + echo after + popd +} + +main() { + [[ -z "${MAILING_LIST_PROVIDER}" ]] && { + red "Missing input argument 'MAILING_LIST_PROVIDER'.\n" + usage + exit 2 + } + + [[ -z "${MAILING_LIST_NAME}" ]] && { + red "Missing input argument 'MAILING_LIST_NAME'.\n" + usage + exit 2 + } + + case "${MAILING_LIST_PROVIDER}" in + "gnu") + gnu_mailing_list_import + ;; + "google") + google_groups_import + ;; + *) + red "Unsupported mailing list provider '${MAILING_LIST_PROVIDER}'." + usage + exit 2 + ;; + esac + + echo "${MAILING_LIST_PROVIDER} ${MAILING_LIST_NAME}" >> ~/annex/txt/mailing-list-subscriptions.txt + + green "Done." + yellow "Make sure to add the correct tagging rules for notmuch post-hook!" + blue "Remember to sync new changes by running sync-mail.sh!" +} + +main "$@" diff --git a/scripts/ad-hoc/once-only.sh b/scripts/ad-hoc/once-only.sh new file mode 100755 index 0000000..f207077 --- /dev/null +++ b/scripts/ad-hoc/once-only.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +COMMAND="${1:-}" + +[[ -z "$COMMAND" ]] && { + red 'Input argument $COMMAND is undefined.' + exit 2 +} + +if [[ "$(pidof "${COMMAND}")" ]] +then + echo "'${COMMAND}' is already running." +else + echo "'${COMMAND}' is not running. Starting it." + exec "$@" & + disown +fi diff --git a/scripts/ad-hoc/rotate-mpris-player.sh b/scripts/ad-hoc/rotate-mpris-player.sh new file mode 100755 index 0000000..cc8c701 --- /dev/null +++ b/scripts/ad-hoc/rotate-mpris-player.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +mkdir -p "${HOME}/.cache/andreh/" +CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" +AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" +CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" + +pick_first() { + echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" +} + +if [[ "${CURRENT_PLAYER}" = "" ]]; then + pick_first +elif ! echo "${AVAILABLE_PLAYERS}" | grep "${CURRENT_PLAYER}" > /dev/null; then + # Unknown $CURRENT_PLAYER, pick anyone + pick_first +else + INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" + LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" + if [[ "${INDEX}" = "${LENGTH}" ]]; then + # Reached the end of the $AVAILABLE_PLAYERS list, wrapping + pick_first + else + # Get the next player instead + echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" + fi +fi diff --git a/scripts/ad-hoc/scp.sh b/scripts/ad-hoc/scp.sh new file mode 100755 index 0000000..d21c5d6 --- /dev/null +++ b/scripts/ad-hoc/scp.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash + +scp "$DOTFILES/vps/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" +scp "$DOTFILES/vps/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" + +scp "$DOTFILES/vps/aliases.sh" "$SOVEREIGN/.bash_aliases" +scp "$DOTFILES/vps/aliases.sh" "$NEXTCLOUD/.bash_aliases" diff --git a/scripts/ad-hoc/single-monitor.sh b/scripts/ad-hoc/single-monitor.sh new file mode 100755 index 0000000..5b0d03e --- /dev/null +++ b/scripts/ad-hoc/single-monitor.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/ad-hoc/startx b/scripts/ad-hoc/startx new file mode 100755 index 0000000..cca34a2 --- /dev/null +++ b/scripts/ad-hoc/startx @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +sudo systemctl restart display-manager & diff --git a/scripts/ad-hoc/three-monitors.sh b/scripts/ad-hoc/three-monitors.sh new file mode 100755 index 0000000..d8c4e53 --- /dev/null +++ b/scripts/ad-hoc/three-monitors.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/scripts/backup.sh b/scripts/backup.sh deleted file mode 100755 index 04cd7bf..0000000 --- a/scripts/backup.sh +++ /dev/null @@ -1,96 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -# -# BorgBackup -# - -if [ ! -d ~/UTCLOUD/ ]; then - red "$HOME/UTCLOUD not attached. Backup not started." - exit 1 -fi - -if [ ! -d ~/borgbackup/ ]; then - yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/backups/borg/borgbackup/ into ~/borgbackup/." - # The initial borg repo was created with: - # $ borg init --append-only --encryption=keyfile ~/borgbackup - # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup -fi - -pushd ~/dev/libre/ || exit 1 -mr -s notmaster -popd || exit 1 - - -BACKUP_TAG="${1-default}" - -rm -rf "$HOME/tmp/backup/" -mkdir -p "$HOME/tmp/backup/" - -yellow "Creating backup of notmuch data" -notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" -green "Done" - -yellow "Creating new borg archive entry" -borg create \ - --exclude ~/mbsync/.notmuch/ \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ - ~/Nextcloud/ \ - ~/mbsync/ \ - ~/archive/ \ - ~/.elfeed/ \ - ~/.mozilla/ \ - ~/tmp/backup/ - # add folders to be backed up here -green "Done" - -yellow "Committing borg config changes..." -pushd ~/dev/libre/borg/ -git add . -git commit -m "JOB: automated update of borg config files after backup.sh" -git push origin master -popd -green "Done." - -yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ -green "Done" - -yellow "Syncing ~/borgbackup to $R:borgbackup/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" -green "Done" - -yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" -rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ -green "Done" - - -# -# mr -# - -yellow "Backing up ~/dev/libre/ git repos" -pushd ~/dev/libre/ || exit 1 - -mr -s master -mr -s status -mr -s update -mr -s hd -mr -s rsyncnet -mr -s gitlab - -popd || exit 1 - -yellow "Syncing annex" -pushd ~/annex/ || exit 1 - -git annex sync - -popd || exit 1 - -green "Done" diff --git a/scripts/burn-nixos.sh b/scripts/burn-nixos.sh deleted file mode 100644 index 85ce6cd..0000000 --- a/scripts/burn-nixos.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -usage() { - red "Missing argument $1.\n" - cat < - - Arguments: - NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html - USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. - -Examples: - Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: - NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' - burn.sh "\$NIXOS_URL" /dev/sdb -EOF -} - -NIXOS_URL="${1:-}" -USB_STICK="${2:-}" -ISO_PATH='/tmp/nixos.iso' - -[[ -z "${NIXOS_URL}" ]] && { - usage 'NIXOS_URL' - exit 2 -} - -[[ -z "${USB_STICK}" ]] && { - usage 'USB_STICK' - exit 2 -} - -yellow "Downloading NixOS ISO..." -wget -cO "${ISO_PATH}" "${NIXOS_URL}" -wget -cO "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" -diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { - red "SHA256 didn't match!" - exit 1 -} -green "Done. SHA256 match." - -yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." -umount "${USB_STICK}1" ||: -blue "$(du -hs /tmp/nixos.iso)" -sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress -green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." diff --git a/scripts/cron/backup.sh b/scripts/cron/backup.sh new file mode 100755 index 0000000..04cd7bf --- /dev/null +++ b/scripts/cron/backup.sh @@ -0,0 +1,96 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# +# BorgBackup +# + +if [ ! -d ~/UTCLOUD/ ]; then + red "$HOME/UTCLOUD not attached. Backup not started." + exit 1 +fi + +if [ ! -d ~/borgbackup/ ]; then + yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/backups/borg/borgbackup/ into ~/borgbackup/." + # The initial borg repo was created with: + # $ borg init --append-only --encryption=keyfile ~/borgbackup + # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup +fi + +pushd ~/dev/libre/ || exit 1 +mr -s notmaster +popd || exit 1 + + +BACKUP_TAG="${1-default}" + +rm -rf "$HOME/tmp/backup/" +mkdir -p "$HOME/tmp/backup/" + +yellow "Creating backup of notmuch data" +notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" +green "Done" + +yellow "Creating new borg archive entry" +borg create \ + --exclude ~/mbsync/.notmuch/ \ + --verbose \ + --stats \ + --progress \ + --compression lzma,6 \ + ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ + ~/Nextcloud/ \ + ~/mbsync/ \ + ~/archive/ \ + ~/.elfeed/ \ + ~/.mozilla/ \ + ~/tmp/backup/ + # add folders to be backed up here +green "Done" + +yellow "Committing borg config changes..." +pushd ~/dev/libre/borg/ +git add . +git commit -m "JOB: automated update of borg config files after backup.sh" +git push origin master +popd +green "Done." + +yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" +rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ +green "Done" + +yellow "Syncing ~/borgbackup to $R:borgbackup/" +rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" +green "Done" + +yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" +rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ +green "Done" + + +# +# mr +# + +yellow "Backing up ~/dev/libre/ git repos" +pushd ~/dev/libre/ || exit 1 + +mr -s master +mr -s status +mr -s update +mr -s hd +mr -s rsyncnet +mr -s gitlab + +popd || exit 1 + +yellow "Syncing annex" +pushd ~/annex/ || exit 1 + +git annex sync + +popd || exit 1 + +green "Done" diff --git a/scripts/cron/wget-4.sh b/scripts/cron/wget-4.sh new file mode 100755 index 0000000..1066441 --- /dev/null +++ b/scripts/cron/wget-4.sh @@ -0,0 +1,2 @@ +#!/usr/bin/env bash +wget -4 "$@" diff --git a/scripts/export-keys.sh b/scripts/export-keys.sh deleted file mode 100755 index 5807dbc..0000000 --- a/scripts/export-keys.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -yellow "Exporting public key..." -gpg --export --armor -a EuAndreh > keys.gpg -green "Done." - -yellow "Exporting private key..." -read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r -gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg -green "Done." - -yellow "Exporting ownertrust..." -gpg --export-ownertrust > trust.txt -green "Done." - -yellow "Creating tar with key pair and trust content..." -tar -cvf EuAndreh.tar keys.gpg trust.txt -green "Done." - -yellow "Encrypting tar file..." -read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r -gpg --cipher-algo AES256 -c EuAndreh.tar -green "Done." - -yellow "Removing traces of private key..." -shred trust.txt -rm trust.txt -shred keys.gpg -rm keys.gpg -shred EuAndreh.tar -rm EuAndreh.tar -green "Done." - -blue "File 'EuAndreh.tar.gpg' created!" diff --git a/scripts/gc.sh b/scripts/gc.sh deleted file mode 100755 index c93c948..0000000 --- a/scripts/gc.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/usr/bin/env bash - -disk_space() { - u | awk '{print $5" "$6}' -} - -before=$(disk_space) - -yellow "Cleaning up the NixOS store" - -profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) - -for p in "${profiles[@]}"; do - sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" -done - -# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= -nix-env --delete-generations old - -nix-store --gc -nix-collect-garbage -d - - -yellow "Cleaning up Guix store" - -guix gc - - -yellow "Cleaning up up the Trash and /tmp folders" - -sudo rm -rf ~/.local/share/Trash/files/* -# https://askubuntu.com/a/609396 -sudo find /tmp -type f -atime +10 -delete - - -yellow "Erasing docker images" - -echo y | docker system prune -a -docker rmi "$(docker images -a -q)" -docker rm "$(docker ps -a -f status=exited -q)" - -docker stop "$(docker ps -a -q)" -docker rm "$(docker ps -a -q)" - -echo y | docker volume prune -echo y | docker container prune - - -# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ -yellow "Clean up deleted email files" -notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -notmuch new - -after=$(disk_space) - -green "Done." -green "Disk space before and after:" -blue " before: ${before}" -blue " after: ${after}" diff --git a/scripts/guix b/scripts/guix deleted file mode 120000 index 65b4074..0000000 --- a/scripts/guix +++ /dev/null @@ -1 +0,0 @@ -/var/guix/profiles/per-user/root/current-guix/bin/guix \ No newline at end of file diff --git a/scripts/import-gg.sh b/scripts/import-gg.sh deleted file mode 100755 index 1682adc..0000000 --- a/scripts/import-gg.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -GGROUPS=() - -for group in "${GGROUPS[@]}"; do - mailing-list-import-mbox.sh google "${group}" -done diff --git a/scripts/mail.sh b/scripts/mail.sh deleted file mode 100755 index abf48f2..0000000 --- a/scripts/mail.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -usage() { - red "Missing input argument '${1}'.\n" - cat < - - Arguments - RECIPIENTS Comma-separated string of emails to receive the email. - SUBJECT The text of the email subject. - BODY The body of the email. Can contain \n in the text. - FROM The from address to send from (be aware of matching DKIM signature). - -Examples: - Send an email to to@example.org: - mail.sh to@example.org Subject Body from@example.org -EOF -} - -RECIPIENTS="${1:-}" -SUBJECT="${2:-}" -BODY="${3:-}" -FROM="${4:-}" - -[[ -z "${RECIPIENTS}" ]] && { - usage 'RECIPIENTS' - exit 2 -} - -[[ -z "${SUBJECT}" ]] && { - usage 'SUBJECT' - exit 2 -} - -[[ -z "${BODY}" ]] && { - usage 'BODY' - exit 2 -} - -[[ -z "${FROM}" ]] && { - usage 'FROM' - exit 2 -} - -# shellcheck disable=SC2029 -ssh euandre.org "echo \"${BODY}\" | mail -s \"${SUBJECT}\" \"${RECIPIENTS}\" -a BCC:cc@euandre.org -a From:\"${FROM}\" -a \"Content-Type: text/plain; charset=UTF-8\"" - -printf "Subject: %s\nRecipients: %s\n\n%s\n" "${SUBJECT}" "${RECIPIENTS}" "${BODY}" >> "${HOME}/annex/txt/mail/$(date -Ins).txt" diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh deleted file mode 100755 index 2fe14aa..0000000 --- a/scripts/mailing-list-import-mbox.sh +++ /dev/null @@ -1,114 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p bash wget mb2md -# shellcheck shell=bash -set -Eeuo pipefail - -MAILING_LIST_PROVIDER="${1:-}" -MAILING_LIST_NAME="${2:-}" -GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' -OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" -TMP_DIR="$HOME/tmp/mbox-import" -usage() { - cat < - - Arguments - MAILING_LIST_NAME The name of the mailing list, e.g.: info-guix. - MAILING_LIST_PROVIDER The name of the host of the mailing list, e.g.: gnu. - Supported providers: - 'gnu' for GNU mailing lists - 'google' for Google Groups - -Examples: - Download and import into mbsync the MBOX archive from info-guix mailing-list: - mailing-list-import-mbox.sh gnu info-guix - - Download and import into mbsync the contents for lisp-br Google Groups: - mailing-list-import-mbox.sh google lisp-br -EOF -} - -gnu_mailing_list_import() { - mkdir -p "${TMP_DIR}" - pushd "${TMP_DIR}" - - # Subscribe to the mailing list - local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" - local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' - - # Download existing archive as MBOX files - wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" - - # Concatenate all MBOX files into as single MBOX file - cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" - - # Transform the MBOX file into a MailDir format and put it on the right place - mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" - popd -} - -google_groups_import() { - [[ -f ~/dev/misc/google-group-crawler/crawler.sh ]] || { - red "Missing ${HOME}/dev/misc/google-group-crawler/crawler.sh file." - red "Clone it before importing Google Groups emails." - exit 1 - } - mkdir -p "${TMP_DIR}" - pushd "${TMP_DIR}" - - # Subscribe to the mailing list - local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" - local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' - - # Download existing messages into MBOX Files - CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" - export _GROUP="${MAILING_LIST_NAME}" - ~/dev/misc/google-group-crawler/crawler.sh -sh > "${CRAWLER_FILE}" - bash "${CRAWLER_FILE}" - - cat "${MAILING_LIST_NAME}/mbox/"* > "${MAILING_LIST_NAME}.all.mbox" - - echo before - echo mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" - echo after - popd -} - -main() { - [[ -z "${MAILING_LIST_PROVIDER}" ]] && { - red "Missing input argument 'MAILING_LIST_PROVIDER'.\n" - usage - exit 2 - } - - [[ -z "${MAILING_LIST_NAME}" ]] && { - red "Missing input argument 'MAILING_LIST_NAME'.\n" - usage - exit 2 - } - - case "${MAILING_LIST_PROVIDER}" in - "gnu") - gnu_mailing_list_import - ;; - "google") - google_groups_import - ;; - *) - red "Unsupported mailing list provider '${MAILING_LIST_PROVIDER}'." - usage - exit 2 - ;; - esac - - echo "${MAILING_LIST_PROVIDER} ${MAILING_LIST_NAME}" >> ~/annex/txt/mailing-list-subscriptions.txt - - green "Done." - yellow "Make sure to add the correct tagging rules for notmuch post-hook!" - blue "Remember to sync new changes by running sync-mail.sh!" -} - -main "$@" diff --git a/scripts/once-only.sh b/scripts/once-only.sh deleted file mode 100755 index f207077..0000000 --- a/scripts/once-only.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -COMMAND="${1:-}" - -[[ -z "$COMMAND" ]] && { - red 'Input argument $COMMAND is undefined.' - exit 2 -} - -if [[ "$(pidof "${COMMAND}")" ]] -then - echo "'${COMMAND}' is already running." -else - echo "'${COMMAND}' is not running. Starting it." - exec "$@" & - disown -fi diff --git a/scripts/rotate-mpris-player.sh b/scripts/rotate-mpris-player.sh deleted file mode 100755 index cc8c701..0000000 --- a/scripts/rotate-mpris-player.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -mkdir -p "${HOME}/.cache/andreh/" -CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" -AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" -CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" - -pick_first() { - echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" -} - -if [[ "${CURRENT_PLAYER}" = "" ]]; then - pick_first -elif ! echo "${AVAILABLE_PLAYERS}" | grep "${CURRENT_PLAYER}" > /dev/null; then - # Unknown $CURRENT_PLAYER, pick anyone - pick_first -else - INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" - LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" - if [[ "${INDEX}" = "${LENGTH}" ]]; then - # Reached the end of the $AVAILABLE_PLAYERS list, wrapping - pick_first - else - # Get the next player instead - echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" - fi -fi diff --git a/scripts/scp.sh b/scripts/scp.sh deleted file mode 100755 index d21c5d6..0000000 --- a/scripts/scp.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -scp "$DOTFILES/vps/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" -scp "$DOTFILES/vps/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" - -scp "$DOTFILES/vps/aliases.sh" "$SOVEREIGN/.bash_aliases" -scp "$DOTFILES/vps/aliases.sh" "$NEXTCLOUD/.bash_aliases" diff --git a/scripts/single-monitor.sh b/scripts/single-monitor.sh deleted file mode 100755 index 5b0d03e..0000000 --- a/scripts/single-monitor.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/startx b/scripts/startx deleted file mode 100755 index cca34a2..0000000 --- a/scripts/startx +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -sudo systemctl restart display-manager & diff --git a/scripts/three-monitors.sh b/scripts/three-monitors.sh deleted file mode 100755 index d8c4e53..0000000 --- a/scripts/three-monitors.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/scripts/wget-4.sh b/scripts/wget-4.sh deleted file mode 100755 index 1066441..0000000 --- a/scripts/wget-4.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -wget -4 "$@" -- cgit v1.2.3 From 5fcaff097496912bd624b2e582c455fd31984cc1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:32:41 -0300 Subject: yt: Enqueue in VLC by default --- scripts/ad-hoc/yt | 37 +++++++++++++++++++++++++++++++++++++ scripts/yt | 37 ------------------------------------- 2 files changed, 37 insertions(+), 37 deletions(-) create mode 100755 scripts/ad-hoc/yt delete mode 100755 scripts/yt diff --git a/scripts/ad-hoc/yt b/scripts/ad-hoc/yt new file mode 100755 index 0000000..c7198dc --- /dev/null +++ b/scripts/ad-hoc/yt @@ -0,0 +1,37 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Always downloads video, doesn't look at the download-archive + +URL_OR_PATH="${1:-}" +[[ -z "${URL_OR_PATH}" ]] && { + echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr + exit 2 +} + +if [[ -f "${URL_OR_PATH}" ]]; then + echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr + youtube-dl --batch-file "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --write-description \ + 1>&2 + FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --get-filename)" +else + echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr + youtube-dl "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --write-description \ + 1>&2 + FILES="$(youtube-dl "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --get-filename)" +fi + +# if [[ ! -z "${VLC:-}" ]]; then +while IFS=$'\n' read -r file; do + vlc "${file}" + blue "Enqueued ${file} in VLC." +done <<<"${FILES}" +# fi diff --git a/scripts/yt b/scripts/yt deleted file mode 100755 index ad78887..0000000 --- a/scripts/yt +++ /dev/null @@ -1,37 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -# Always downloads video, doesn't look at the download-archive - -URL_OR_PATH="${1:-}" -[[ -z "${URL_OR_PATH}" ]] && { - echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr - exit 2 -} - -if [[ -f "${URL_OR_PATH}" ]]; then - echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr - youtube-dl --batch-file "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --write-description \ - 1>&2 - FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --get-filename)" -else - echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr - youtube-dl "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --write-description \ - 1>&2 - FILES="$(youtube-dl "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --get-filename)" -fi - -if [[ ! -z "${VLC:-}" ]]; then - while IFS=$'\n' read -r file; do - vlc "${file}" - blue "Enqueued ${file} in VLC." - done <<<"${FILES}" -fi -- cgit v1.2.3 From 519706f801347b553074e646a6ec15accd74a6f9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:33:11 -0300 Subject: Update path references to scripts --- bash/env.sh | 3 ++- xmonad/xmonad.hs | 6 +++--- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 068ffab..ed1cb16 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -30,7 +30,8 @@ export PATH=~/.local/bin:$PATH # export EDITOR=vi -export PATH="$DOTFILES/scripts:$PATH" +export PATH="${DOTFILES}/scripts/ad-hoc:${PATH}" +export PATH="${DOTFILES}/scripts/cron:${PATH}" export PATH="$HOME/annex/bin:$PATH" export INPUTRC=~/.inputrc export CACHE_DIR="$HOME/Nextcloud/cache" diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 9549632..7f281ee 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -38,7 +38,7 @@ myKeyPBindings = , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10-") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) previous") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) play-pause") - , ("S-", spawn "~/dev/libre/dotfiles/scripts/rotate-mpris-player.sh") + , ("S-", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/rotate-mpris-player.sh") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") @@ -59,10 +59,10 @@ myKeyPBindings = , ("C-M-", spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup - , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/single-monitor.sh") + , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/single-monitor.sh") -- xrandr three monitor setup - , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/three-monitors.sh") + , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/three-monitors.sh") -- restart network , ("M-x", spawn "gksudo -S systemctl restart network-manager") -- cgit v1.2.3 From c2fc3697136807cf1dc4ee9d71820746ba3c822d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:34:01 -0300 Subject: TODOs.org --- TODOs.org | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/TODOs.org b/TODOs.org index eaff27d..842bc77 100644 --- a/TODOs.org +++ b/TODOs.org @@ -100,6 +100,7 @@ CLOSED: [2019-06-02 Sun 02:43] The original terminal kill =C-k= is overriden by tmux. *** TODO xmonad **** TODO Show DiskIO and Network in xmobar +**** TODO Spawn xmobar once **** TODO Nextcloud out of trayer: where to put it now? **** TODO Show playerctl $CURRENT_PLAYER in center Stylized? @@ -118,8 +119,12 @@ cmus -> ? **** WAITING Simplify and automate backup.sh **** TODO Add weekly cronjob for running backup.sh *** TODO ArchiveBox -**** DOING Fix cronjob for ArchiveBox -**** DOING Fix ArchiveBox errors +**** DONE Fix cronjob for ArchiveBox +CLOSED: [2019-06-19 Wed 18:11] +**** TODO How to not keep always updating archived webpages? +**** TODO Remove the need for =trayer= and =nm-applet= when interacting with wireless network +**** DONE Fix ArchiveBox errors +CLOSED: [2019-06-19 Wed 18:11] **** DONE Remove public link to Pocket feed CLOSED: [2019-06-16 Sun 12:14] **** CANCELLED First class ArchiveBox <-> Wallabag integration (instead of Atom feed?) -- cgit v1.2.3 From 25477f86e19b68f220e36d38e5a0dd923c11f988 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:34:14 -0300 Subject: xmobar-mpris.sh: Use default $CUR when printing VLC --- scripts/ad-hoc/xmobar-mpris.sh | 38 ++++++++++++++++++++++++++++++++++++++ scripts/xmobar-mpris.sh | 38 -------------------------------------- 2 files changed, 38 insertions(+), 38 deletions(-) create mode 100755 scripts/ad-hoc/xmobar-mpris.sh delete mode 100755 scripts/xmobar-mpris.sh diff --git a/scripts/ad-hoc/xmobar-mpris.sh b/scripts/ad-hoc/xmobar-mpris.sh new file mode 100755 index 0000000..cd98452 --- /dev/null +++ b/scripts/ad-hoc/xmobar-mpris.sh @@ -0,0 +1,38 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +default_status() { + CUR="${1}" + printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" +} + +main() { + CUR="$(cat ~/.cache/andreh/mpris-player.txt)" + if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then + printf "%s\n" "${CUR}" + else + case "${CUR}" in + cmus) + default_status "${CUR}" + ;; + vlc) + # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp + NAME="$(basename "$(playerctl metadata xesam:url)")" + FILE="$(urldecode "${NAME%.*}" | cut -d' ' -f2-)" + printf "%s: %s\n" "${CUR}" "${FILE}" + ;; + *) + default_status "${CUR}" + ;; + esac + fi +} +export -f main + +while true +do + main + sleep 1 +done diff --git a/scripts/xmobar-mpris.sh b/scripts/xmobar-mpris.sh deleted file mode 100755 index 469a4e6..0000000 --- a/scripts/xmobar-mpris.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - -default_status() { - CUR="${1}" - printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" -} - -main() { - CUR="$(cat ~/.cache/andreh/mpris-player.txt)" - if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then - printf "%s\n" "${CUR}" - else - case "${CUR}" in - cmus) - default_status "${CUR}" - ;; - vlc) - # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp - NAME="$(basename "$(playerctl metadata xesam:url)")" - FILE="$(urldecode "${NAME%.*}" | cut -d' ' -f2-)" - printf "VLC: %s\n" "${FILE}" - ;; - *) - default_status "${CUR}" - ;; - esac - fi -} -export -f main - -while true -do - main - sleep 1 -done -- cgit v1.2.3 From 91415fcc0f051235a3ffedf52ba56a6d5d17681c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:35:09 -0300 Subject: symlinks.sh: Don't create symlinks to cron log files --- bash/symlinks.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index cd7f3ac..d24d841 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -54,11 +54,3 @@ mkdir -p ~/.xmonad ln -fs "$DOTFILES/xmonad/xsession.sh" ~/.xsession ln -fs "$DOTFILES/xmonad/xmonad.hs" ~/.xmonad/xmonad.hs ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc - -## Cron logs -mkdir -p ~/mbsync/.notmuch/hooks ~/mbsync/EuAndreh ~/mbsync/Gmail ~/mbsync/Nubank -ln -fs /tmp/mbsync."$(date +%Y-%m-%d)".log /tmp/mbsync.log -ln -fs /tmp/notmuch."$(date +%Y-%m-%d)".log /tmp/notmuch.log -ln -fs /tmp/archivebox."$(date +%Y-%m-%d)".log /tmp/archivebox.log -ln -fs /tmp/cron-dbg.sync-mail."$(date +%Y-%m-%d)".log /tmp/cron-dbg.sync-mail.log -ln -fs /tmp/cron-dbg.archive."$(date +%Y-%m-%d)".log /tmp/cron-dbg.archive.log -- cgit v1.2.3 From 29d5f8cc563c1a34003fd66207b530038d270d45 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:36:22 -0300 Subject: configuration.nix: Remove quodlibet package --- nixos/configuration.nix | 7 ------- 1 file changed, 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 702644c..a4c0d09 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -76,12 +76,6 @@ in { ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet-full = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { - doInstallCheck = false; - doCheck = false; - }); - # Should be removed during fresh OS installation: # https://github.com/NixOS/nix/issues/2497 nixfmt = import (builtins.fetchTarball @@ -287,7 +281,6 @@ in { ## GUI programs - untested-quodlibet-full inkscape calibre cozy -- cgit v1.2.3 From 7df3ff73b7e15472cd5eccfec43b85f136258c05 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:36:43 -0300 Subject: configuration.nix: Remove commented pkgs-18-03 channel --- nixos/configuration.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a4c0d09..6209fc6 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -64,10 +64,6 @@ in { environment.systemPackages = let pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; - # pkgs-18-03 = import(pkgs.fetchzip { - # url = "https://github.com/NixOS/nixpkgs/archive/18.03.zip"; - # sha256 = "0hk4y2vkgm1qadpsm4b0q1vxq889jhxzjx3ragybrlwwg54mzp4f"; - # }) {}; timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags -- cgit v1.2.3 From 84a97f1bb2fb0ece61a6cc49db017af2fade44b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:37:21 -0300 Subject: configuration.nix: cron: Polish mail and archivebox jobs --- nixos/configuration.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6209fc6..dc59e85 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -325,10 +325,10 @@ in { # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = [ # Sync emails with mbsync every hour - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/sync-mail.sh -s 2>&1 >> /tmp/cron-dbg.sync-mail.log" + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1" - # Run ArchiveBox data every 12 hours - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/archive.sh -s 2>&1 >> /tmp/cron-dbg.archive.log" + # Run ArchiveBox data once every day at 12h + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1" ]; xserver = { -- cgit v1.2.3 From 9867aa642e42032c54c8bb168eaa49820abca5b7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:38:24 -0300 Subject: configuration.nix: Fix format with nixfmt --- nixos/configuration.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dc59e85..48ba429 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -63,7 +63,9 @@ in { ]; environment.systemPackages = let - pkgsUnstable = import(fetchTarball https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz) {}; + pkgsUnstable = import (fetchTarball + "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz") + { }; timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags @@ -74,8 +76,9 @@ in { # Should be removed during fresh OS installation: # https://github.com/NixOS/nix/issues/2497 - nixfmt = import (builtins.fetchTarball - "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; + nixfmt = import + (fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") + { }; # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; [ -- cgit v1.2.3 From 251c15ff810f1e936accfb7552e030a38b42adcf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:39:41 -0300 Subject: archive.sh: Use nix-shell for running more reproducibly in cron --- scripts/archive.sh | 43 -------------------------------- scripts/cron/archive.sh | 65 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 65 insertions(+), 43 deletions(-) delete mode 100755 scripts/archive.sh create mode 100755 scripts/cron/archive.sh diff --git a/scripts/archive.sh b/scripts/archive.sh deleted file mode 100755 index 54f6d8c..0000000 --- a/scripts/archive.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -date -Is -TMPDIR="$(mktemp -d)" -pushd "${TMPDIR}" > /dev/null - -# Derived from ArchiveBox: -# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 -PROFILE_PLACES_DB=$(ls ~/.mozilla/firefox/*.default/places.sqlite) -yellow "Exporting content from ${PROFILE_PLACES_DB} in ${TMPDIR}..." -cp "${PROFILE_PLACES_DB}" places.sqlite -QUERY=$(cat < bookmarks-archive.json -green "Done." -popd > /dev/null - -export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" -export FETCH_MEDIA=False -export TIMEOUT=180 -export ONLY_NEW=True -export WGET_BINARY="$PWD/wget-4.sh" -archivebox "${TMPDIR}/bookmarks-archive.json" diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh new file mode 100755 index 0000000..9844da2 --- /dev/null +++ b/scripts/cron/archive.sh @@ -0,0 +1,65 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p jq sqlite python3 chromium curl gitMinimal which wget youtube-dl --pure -I nixpkgs=channel:nixos-unstable +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +ARCHIVE_BOX="${HOME}/dev/misc/ArchiveBox/bin/archivebox" +[[ -f "${ARCHIVE_BOX}" ]] || { + echo "ArchiveBox executable not found. Exitting." + exit 2 +} + +export end="\033[0m" +export green="\033[0;32m" +export yellow="\033[0;33m" +green() { echo -e "${green}${1}${end}"; } +yellow() { echo -e "${yellow}${1}${end}"; } + +TMPDIR="$(mktemp -d)" +pushd "${TMPDIR}" > /dev/null + +# Derived from ArchiveBox: +# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 +PROFILE_PLACES_DB=$(ls ~/.mozilla/firefox/*.default/places.sqlite) +yellow "Exporting content from ${PROFILE_PLACES_DB} in ${TMPDIR}..." +cp "${PROFILE_PLACES_DB}" places.sqlite +QUERY=$(cat < bookmarks-archive.json +green "Done." +popd > /dev/null + +export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" +export FETCH_MEDIA=False +export TIMEOUT=180 +export ONLY_NEW=True +export WGET_BINARY="${PWD}/wget-4.sh" + +# Required for wget +export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt +export SSL_CERT_DIR=~/.guix-profile/etc/ssl/certs +export GIT_SSL_CAINFO=~/.guix-profile/etc/ssl/certs/ca-certificates.crt +"${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From d30611878a3328aeff0d364e247bd65738e1bde2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:45:11 -0300 Subject: sync-mail.sh: Use nix-shell and log properly for more reproducibility when running cron --- scripts/cron/sync-mail.sh | 12 ++++++++++++ scripts/sync-mail.sh | 7 ------- 2 files changed, 12 insertions(+), 7 deletions(-) create mode 100755 scripts/cron/sync-mail.sh delete mode 100755 scripts/sync-mail.sh diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh new file mode 100755 index 0000000..8ec771a --- /dev/null +++ b/scripts/cron/sync-mail.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p isync gnupg notmuch --pure -I nixpkgs=channel:nixos-unstable +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +mbsync -aV +notmuch new + +echo "Finishing: $(date -Is)" diff --git a/scripts/sync-mail.sh b/scripts/sync-mail.sh deleted file mode 100755 index adcad30..0000000 --- a/scripts/sync-mail.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash -set -euo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -date -Is -mbsync -aV -notmuch new -- cgit v1.2.3 From 0f89967447267df3a4a325931cebd0680df64483 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:46:20 -0300 Subject: velhinho.nix: Disable IPFS for now --- nixos/velhinho.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index b2ea722..46e1787 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -3,5 +3,5 @@ in { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; hashedPassword = privateConfiguration.hashedPassword; - enableIPFS = true; + enableIPFS = false; } -- cgit v1.2.3 From 4fb316049b21273e155d28e6e9b2c9e2a5d87078 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:46:44 -0300 Subject: xmobar.hs: Decrease font to fit song names --- xmonad/xmobar.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index f9e7674..3a34356 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -1,5 +1,5 @@ Config { - font = "xft:DejaVu Sans Mono:size=10" + font = "xft:DejaVu Sans Mono:size=9" , commands = [ Run Cpu ["-L","3","-H","50", "--normal","green","--high","red"] 10 , Run Memory ["-t","Mem: %"] 30 -- cgit v1.2.3 From 6803a7f6a51ffaa955da392be6871b5cd5adb42a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:47:01 -0300 Subject: xmobar.hs: Add Volume command --- xmonad/xmobar.hs | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 3a34356..3f3ffba 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -7,6 +7,7 @@ Config { , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 , Run DiskU [("/", "/")] [] 600 , Run Wireless "wlp1s0" [] 100 + , Run Volume "default" "Master" [] 10 , Run Battery [ "-t", ": % - ", "--", @@ -17,5 +18,5 @@ Config { 10 , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-mpris.sh" "mpris" ] - , template = " %date% | %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " + , template = " %date% | %default:Master%| %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From e49aec00d7453cc6432639f5f8edad0f20a321ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:47:22 -0300 Subject: xmobar.hs: Fix path to xmobar-mpris.sh script --- xmonad/xmobar.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 3f3ffba..0defad5 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -16,7 +16,7 @@ Config { "-h", "green", "-l", "red"] 10 - , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-mpris.sh" "mpris" + , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" ] , template = " %date% | %default:Master%| %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From 55e5cee72d5cddffba82b73dc8b8fb9b33fb0bd5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:47:44 -0300 Subject: xmobar.hs: Change color of low CPU load --- xmonad/xmobar.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 0defad5..04f2592 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -1,7 +1,7 @@ Config { font = "xft:DejaVu Sans Mono:size=9" , commands = [ - Run Cpu ["-L","3","-H","50", "--normal","green","--high","red"] 10 + Run Cpu ["-L","3","-H","50", "--normal","#5ea2a4","--high","red"] 10 , Run Memory ["-t","Mem: %"] 30 , Run Swap [] 30 , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 -- cgit v1.2.3 From eb31ae193ecb978ccfe48786d370b52d7d896b29 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:55:48 -0300 Subject: Fix ShellCheck errors --- scripts/ad-hoc/once-only.sh | 1 + scripts/cron/archive.sh | 1 + scripts/cron/sync-mail.sh | 1 + 3 files changed, 3 insertions(+) diff --git a/scripts/ad-hoc/once-only.sh b/scripts/ad-hoc/once-only.sh index f207077..b863beb 100755 --- a/scripts/ad-hoc/once-only.sh +++ b/scripts/ad-hoc/once-only.sh @@ -4,6 +4,7 @@ set -Eeuo pipefail COMMAND="${1:-}" [[ -z "$COMMAND" ]] && { + # shellcheck disable=SC2016 red 'Input argument $COMMAND is undefined.' exit 2 } diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh index 9844da2..dc71807 100755 --- a/scripts/cron/archive.sh +++ b/scripts/cron/archive.sh @@ -1,5 +1,6 @@ #!/usr/bin/env nix-shell #!nix-shell -i bash -p jq sqlite python3 chromium curl gitMinimal which wget youtube-dl --pure -I nixpkgs=channel:nixos-unstable +# shellcheck shell=bash set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index 8ec771a..f0b7c81 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -1,5 +1,6 @@ #!/usr/bin/env nix-shell #!nix-shell -i bash -p isync gnupg notmuch --pure -I nixpkgs=channel:nixos-unstable +# shellcheck shell=bash set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -- cgit v1.2.3 From d3088c20263899c3bd41b16d0d5a41882761f669 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 18:55:57 -0300 Subject: TODOs.org --- TODOs.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 842bc77..7a0037f 100644 --- a/TODOs.org +++ b/TODOs.org @@ -63,7 +63,7 @@ Test installing it on =velhinho=. **** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? CLOSED: [2019-06-02 Sun 02:43] Cuirass! Yes! -*** TODO cmus FIXME +*** TODO cmus **** TODO Fetch metadata from [[https://musicbrainz.org/][MusicBrainz]] **** TODO Add covers to albums **** TODO How to fuzzy search? -- cgit v1.2.3 From 6a2cd77b0a3454ce2c77983631c9a303a618de29 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 19:17:33 -0300 Subject: XDG: fix references to custom .desktop files and add one for Nautilus Some application were opening the baobab GNOME disk utility instead of Nautilus. --- bash/symlinks.sh | 5 +++-- bash/xdg.sh | 17 ----------------- nixos/nautilus.desktop | 8 ++++++++ 3 files changed, 11 insertions(+), 19 deletions(-) delete mode 100644 bash/xdg.sh create mode 100644 nixos/nautilus.desktop diff --git a/bash/symlinks.sh b/bash/symlinks.sh index d24d841..e822f0f 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -40,8 +40,9 @@ ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf ## NixOS -ln -fs "$DOTFILES/nixos/evince.destkop" ~/.local/share/applications/evince.desktop -ln -fs "$DOTFILES/nixos/firefox.destkop" ~/.local/share/applications/firefox.desktop +ln -fs "${DOTFILES}/nixos/evince.desktop" ~/.local/share/applications/evince.desktop +ln -fs "${DOTFILES}/nixos/firefox.desktop" ~/.local/share/applications/firefox.desktop +ln -fs "${DOTFILES}/nixos/nautilus.desktop" ~/.local/share/applications/nautilus.desktop ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" diff --git a/bash/xdg.sh b/bash/xdg.sh deleted file mode 100644 index 6b8981a..0000000 --- a/bash/xdg.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash - -isLinux && { - mkdir -p ~/.local/share/applications/ - - cat << EOF > ~/.local/share/applications/evince-andreh.desktop -[Desktop Entry] -Type=Application -Name=evince -Comment=Evince PDF viewer -Terminal=false -Exec=evince -Categories=Network;WebBrowserEOF -EOF - - xdg-mime default evince-andreh.desktop application/pdf -} diff --git a/nixos/nautilus.desktop b/nixos/nautilus.desktop new file mode 100644 index 0000000..5b1e7e2 --- /dev/null +++ b/nixos/nautilus.desktop @@ -0,0 +1,8 @@ +[Desktop Entry] +Type=Application +Name=nautilus +Comment=Evince PDF viewer +Terminal=false +Exec=nautilus +MimeType=inode/directory +Categories=GTK;GNOME;System;Filesystem -- cgit v1.2.3 From 9e42504023ec56d11cc9d420f7a07e62380c90de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 19:18:44 -0300 Subject: yt: Use '--format best' to know the correct file name to be added to VLC Source: https://github.com/ytdl-org/youtube-dl/issues/5710#issuecomment-102394231 --- scripts/ad-hoc/yt | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/ad-hoc/yt b/scripts/ad-hoc/yt index c7198dc..97e0f51 100755 --- a/scripts/ad-hoc/yt +++ b/scripts/ad-hoc/yt @@ -12,20 +12,24 @@ URL_OR_PATH="${1:-}" if [[ -f "${URL_OR_PATH}" ]]; then echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr youtube-dl --batch-file "${URL_OR_PATH}" \ + --format best \ --output "${YT_TEMPLATE}" \ --write-description \ 1>&2 FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ --output "${YT_TEMPLATE}" \ + --format best \ --get-filename)" else echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr youtube-dl "${URL_OR_PATH}" \ --output "${YT_TEMPLATE}" \ + --format best \ --write-description \ 1>&2 FILES="$(youtube-dl "${URL_OR_PATH}" \ --output "${YT_TEMPLATE}" \ + --format best \ --get-filename)" fi -- cgit v1.2.3 From 61895fd6270d0e0301b30964743f8b627a5c5e62 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Jun 2019 19:25:43 -0300 Subject: TODOs.org --- TODOs.org | 1 + xmonad/xmonad.hs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 7a0037f..f6e6295 100644 --- a/TODOs.org +++ b/TODOs.org @@ -101,6 +101,7 @@ The original terminal kill =C-k= is overriden by tmux. *** TODO xmonad **** TODO Show DiskIO and Network in xmobar **** TODO Spawn xmobar once +**** TODO Double-check brightness commands **** TODO Nextcloud out of trayer: where to put it now? **** TODO Show playerctl $CURRENT_PLAYER in center Stylized? diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 7f281ee..70dcd2a 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -42,7 +42,7 @@ myKeyPBindings = , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") - -- Brightness: FIXME + -- Brightness , ("", spawn "xbacklight +10") , ("", spawn "xbacklight -10") -- cgit v1.2.3 From c1904edb348fa1ee9df2e6a1b8dc90e4f7e3e0a9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 07:52:37 -0300 Subject: bashrc.sh: Remove sourcing of deleted xdg.sh --- bash/bashrc.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 1aeaf44..f75ab58 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -18,7 +18,6 @@ source $DOTFILES/bash/youtube.sh source $DOTFILES/bash/facepalm/rotten-apple.sh source $DOTFILES/bash/x.sh source $HOME/annex/bin/misc/env.sh -source $DOTFILES/bash/xdg.sh source $DOTFILES/bash/fake-symlinks.sh set -h -- cgit v1.2.3 From cf514da2265dd2b98d132acffa678e889b139521 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 07:52:55 -0300 Subject: configuration.nix: Use latest versions of notmuch and KeePassXC --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 48ba429..493bf5c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -191,7 +191,7 @@ in { ## Mail - notmuch + pkgsUnstable.notmuch isync procmail # includes =formail= @@ -289,7 +289,7 @@ in { emacs tdesktop vlc - keepassx2-http + pkgsUnstable.keepassxc yubioath-desktop # tor-browser-bundle-bin transmission_gtk -- cgit v1.2.3 From 39b0d77bede5222c35bc51b07b28bb26b705a5ef Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 07:53:25 -0300 Subject: README.org: Use wget instead of curl | bash --- README.org | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/README.org b/README.org index eeeb7ff..94316e3 100644 --- a/README.org +++ b/README.org @@ -11,7 +11,8 @@ Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] and burn it to the USB stick: #+BEGIN_SRC shell NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' -curl https://euandre.org/dotfiles/nixos/burn.sh | bash -s "$NIXOS_URL" /dev/sdb +wget https://euandre.org/dotfiles/nixos/burn.sh +./burn.sh "$NIXOS_URL" /dev/sdb #+END_SRC *** 2. Performing a fresh install Put the USB stick in the new laptop and boot from it. -- cgit v1.2.3 From ba3cc0ea707fd5d4570d9019a251e9eb7b0aef63 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 07:53:46 -0300 Subject: TODOs.org --- TODOs.org | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index f6e6295..f76319c 100644 --- a/TODOs.org +++ b/TODOs.org @@ -82,7 +82,8 @@ Remove all passwords from Firefox and put them all in KeePassXC. **** TODO =say= command With quality comparable to macOS. **** TODO Write URL to file when downloading with =yt= -**** TODO Make =thefuck= great again +**** DONE Make =thefuck= great again +CLOSED: [2019-06-20 Thu 07:47] **** TODO Make xmodmap commands declarative **** TODO Test cyanogen on old K10 **** TODO Install OpenBazaar -- cgit v1.2.3 From 1977f03aa10fd322ada61db0ba22589fc0fcb71a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 15:30:54 -0300 Subject: Add nextcloud.sh script and register it as a cron job --- nixos/configuration.nix | 7 +++++-- scripts/cron/nextcloud.sh | 19 +++++++++++++++++++ 2 files changed, 24 insertions(+), 2 deletions(-) create mode 100755 scripts/cron/nextcloud.sh diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 493bf5c..63d9da1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -95,9 +95,9 @@ in { gitAndTools.git-secrets git-crypt git-lfs - gnupg + pkgsUnstable.gnupg mr - nextcloud-client + pkgsUnstable.nextcloud-client borgbackup git-sizer @@ -332,6 +332,9 @@ in { # Run ArchiveBox data once every day at 12h "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1" + + # Sync Nextcloud using nextcloudcmd + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1" ]; xserver = { diff --git a/scripts/cron/nextcloud.sh b/scripts/cron/nextcloud.sh new file mode 100755 index 0000000..02373e9 --- /dev/null +++ b/scripts/cron/nextcloud.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p nextcloud-client --pure -I nixpkgs=channel:nixos-unstable +# shellcheck shell=bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[@]}")" + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +USER='andreh' +PASSWORD="$(cat ~/annex/secret/Nextcloud/password.txt)" +URL="$(cat ~/annex/secret/Nextcloud/url.txt)" +nextcloudcmd -h \ + -u "${USER}" \ + -p "${PASSWORD}" \ + ~/Nextcloud/ \ + "${URL}" + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 52963e7009f4d17d501af3faf536f9e6614aff93 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 16:04:04 -0300 Subject: backup.sh: Finish polishing to run in cron job --- scripts/cron/backup.sh | 68 +++++++++++++++++++++++++++++++++++++------------- 1 file changed, 51 insertions(+), 17 deletions(-) diff --git a/scripts/cron/backup.sh b/scripts/cron/backup.sh index 04cd7bf..d9c67a4 100755 --- a/scripts/cron/backup.sh +++ b/scripts/cron/backup.sh @@ -1,13 +1,39 @@ -#!/usr/bin/env bash +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p mr gitAndTools.gitFull notmuch borgbackup gnupg gitAndTools.gitRemoteGcrypt rsync openssh gitAndTools.git-annex nix --pure -I nixpkgs=channel:nixos-unstable +# shellcheck shell=bash set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +export end="\033[0m" +export red="\033[0;31m" +export green="\033[0;32m" +export yellow="\033[0;33m" +red() { echo -e "${red}${1}${end}"; } +green() { echo -e "${green}${1}${end}"; } +yellow() { echo -e "${yellow}${1}${end}"; } + +BACKUP_TAG="${1-default}" +[[ -f "${BACKUP_TAG}" ]] || { + yellow "No '$BACKUP_TAG' provided, falling back to default." +} + +. "${HOME}/.ssh/environment" > /dev/null +export BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" +export R="$(cat ~/annex/secret/rsync.net/addr.txt)" +# Required for properly running Git Annex +# Related issue: +# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ +export LANG=C.UTF-8 # # BorgBackup # if [ ! -d ~/UTCLOUD/ ]; then - red "$HOME/UTCLOUD not attached. Backup not started." - exit 1 + red "$HOME/UTCLOUD not attached, the backup will not be synced there." fi if [ ! -d ~/borgbackup/ ]; then @@ -22,9 +48,6 @@ pushd ~/dev/libre/ || exit 1 mr -s notmaster popd || exit 1 - -BACKUP_TAG="${1-default}" - rm -rf "$HOME/tmp/backup/" mkdir -p "$HOME/tmp/backup/" @@ -57,18 +80,21 @@ git push origin master popd green "Done." -yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ -green "Done" +if [ ! -d ~/UTCLOUD/ ]; then + red '$HOME/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and $R:vps-borgbackup/ there.' +else + yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" + rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ + green "Done" + yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" + rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ + green "Done" +fi yellow "Syncing ~/borgbackup to $R:borgbackup/" rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" green "Done" -yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" -rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ -green "Done" - # # mr @@ -80,17 +106,25 @@ pushd ~/dev/libre/ || exit 1 mr -s master mr -s status mr -s update -mr -s hd mr -s rsyncnet mr -s gitlab +if [ ! -d ~/UTCLOUD/ ]; then + red '$HOME/UTCLOUD/ not attached, not storing mr repositories there.' +else + mr -s hd +fi + popd || exit 1 +yellow "Syncing Nextcloud" +./nextcloud.sh +green "Done" + yellow "Syncing annex" pushd ~/annex/ || exit 1 - git annex sync - popd || exit 1 - green "Done" + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 640835020a25e696f6f2453b1a8aed69750f51b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 16:04:57 -0300 Subject: archive.sh: Add red color printing --- scripts/cron/archive.sh | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh index dc71807..b2718db 100755 --- a/scripts/cron/archive.sh +++ b/scripts/cron/archive.sh @@ -1,24 +1,26 @@ #!/usr/bin/env nix-shell #!nix-shell -i bash -p jq sqlite python3 chromium curl gitMinimal which wget youtube-dl --pure -I nixpkgs=channel:nixos-unstable # shellcheck shell=bash -set -euo pipefail +set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" exec &> /dev/stdout echo "Starting: $(date -Is)" -ARCHIVE_BOX="${HOME}/dev/misc/ArchiveBox/bin/archivebox" -[[ -f "${ARCHIVE_BOX}" ]] || { - echo "ArchiveBox executable not found. Exitting." - exit 2 -} - export end="\033[0m" +export red="\033[0;31m" export green="\033[0;32m" export yellow="\033[0;33m" +red() { echo -e "${red}${1}${end}"; } green() { echo -e "${green}${1}${end}"; } yellow() { echo -e "${yellow}${1}${end}"; } +ARCHIVE_BOX="${HOME}/dev/misc/ArchiveBox/bin/archivebox" +[[ -f "${ARCHIVE_BOX}" ]] || { + red "ArchiveBox executable not found. Exitting." + exit 2 +} + TMPDIR="$(mktemp -d)" pushd "${TMPDIR}" > /dev/null -- cgit v1.2.3 From 4f8bcf92e5b2b0d55c54da3d8aa4b62e0b034675 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 16:05:24 -0300 Subject: env.sh: Move definition of $R --- bash/env.sh | 8 -------- 1 file changed, 8 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index ed1cb16..43b4bb9 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -1,13 +1,5 @@ #!/usr/bin/env bash -# -# Git Annex -# - -export RSYNC_NET_URL=16686@ch-s010.rsync.net -export R=$RSYNC_NET_URL - - # # Perl6 # -- cgit v1.2.3 From 20569208993e4fb9d1f1db0a52bd95be46162779 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 16:05:36 -0300 Subject: aliases.sh: Change 'n' alias to nextcloud.sh --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index b9ec0df..8ffa763 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -25,7 +25,7 @@ alias du="ncdu --color dark" alias perl6="rlwrap perl6" alias m="sync-mail.sh" alias a="atom.sh" -alias n="newsboat -r" +alias n="nextcloud.sh" alias sb="songbooks" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" -- cgit v1.2.3 From d66ff5a78006fd5d66f3a6865fac6823dc909633 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 16:05:51 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index f76319c..d8ebdfc 100644 --- a/TODOs.org +++ b/TODOs.org @@ -153,6 +153,7 @@ Either polling, fetching a subset of folders, etc. https://notmuchmail.org/initial_tagging/ **** TODO notmuch: send email from mor SMTP accounts **** TODO Add lock for running =sync-mail.sh= +**** TODO Change =m= jump to search for =tag:ml AND date:"last 7 days"= **** TODO Refile "archived" emails into actual Archive folder Query for =tag:archive AND tag:euandreh AND folder:/INBOX/= emails and refile them into =Archive= folder: #+BEGIN_SRC shell -- cgit v1.2.3 From 13d8118e06bee5f4acbaebd8432bc7ebfe4f2bef Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Jun 2019 16:14:39 -0300 Subject: backup.sh: Fix ShellCheck offenses --- scripts/cron/backup.sh | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/scripts/cron/backup.sh b/scripts/cron/backup.sh index d9c67a4..5c69ec6 100755 --- a/scripts/cron/backup.sh +++ b/scripts/cron/backup.sh @@ -20,9 +20,12 @@ BACKUP_TAG="${1-default}" yellow "No '$BACKUP_TAG' provided, falling back to default." } +# shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null -export BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" -export R="$(cat ~/annex/secret/rsync.net/addr.txt)" +BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" +export BORG_PASSPHRASE +R="$(cat ~/annex/secret/rsync.net/addr.txt)" +export R # Required for properly running Git Annex # Related issue: # https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ @@ -81,6 +84,7 @@ popd green "Done." if [ ! -d ~/UTCLOUD/ ]; then + # shellcheck disable=SC2016 red '$HOME/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and $R:vps-borgbackup/ there.' else yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" @@ -110,6 +114,7 @@ mr -s rsyncnet mr -s gitlab if [ ! -d ~/UTCLOUD/ ]; then + # shellcheck disable=SC2016 red '$HOME/UTCLOUD/ not attached, not storing mr repositories there.' else mr -s hd -- cgit v1.2.3 From fd3652f69e68e402cedb42ef2be31d1d4baa4b22 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Jun 2019 09:26:09 -0300 Subject: configuration.nix: Run cron backup.sh once a month --- nixos/configuration.nix | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 63d9da1..ab14282 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -330,11 +330,14 @@ in { # Sync emails with mbsync every hour "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1" + # Sync Nextcloud using nextcloudcmd every 15 minutes + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1" + # Run ArchiveBox data once every day at 12h "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1" - # Sync Nextcloud using nextcloudcmd - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1" + # Borg backup once a month + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1" ]; xserver = { -- cgit v1.2.3 From 998795460f4f0a3261707fd3efd81fa76e1cb284 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Jun 2019 09:27:21 -0300 Subject: configuration.nix: Disable automatic nix.gc --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ab14282..2be33fc 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -37,7 +37,7 @@ in { system.autoUpgrade.enable = true; nix.gc = { - automatic = true; + automatic = false; dates = "03:15"; # change to hour? }; -- cgit v1.2.3 From dacb7bdc78e1a614ecc418b4883a27e68845e116 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Jun 2019 14:27:07 -0300 Subject: configuration.nix: Add EasyTAG package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2be33fc..36b1d9d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -214,6 +214,7 @@ in { frescobaldi timidityWithEvenMoreFormats pkgsUnstable.cmus + easytag ## Programming tools -- cgit v1.2.3 From 1662930c01af5a24bae11daae7034e72d7c3ffa2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Jun 2019 20:14:08 -0300 Subject: Revert "configuration.nix: Remove quodlibet package" This reverts commit 29d5f8cc563c1a34003fd66207b530038d270d45. --- nixos/configuration.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 36b1d9d..3e0b5fd 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -74,6 +74,12 @@ in { ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet-full = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { + doInstallCheck = false; + doCheck = false; + }); + # Should be removed during fresh OS installation: # https://github.com/NixOS/nix/issues/2497 nixfmt = import @@ -281,6 +287,7 @@ in { ## GUI programs + untested-quodlibet-full inkscape calibre cozy -- cgit v1.2.3 From a50bac74f617f93b83c09b9a9af2e224f682d964 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 22 Jun 2019 14:11:39 -0300 Subject: Fallback to QuodLibet instead of cmus --- nixos/configuration.nix | 5 +---- scripts/cron/backup.sh | 1 + tmux/projects/annex.yml | 5 ++--- 3 files changed, 4 insertions(+), 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3e0b5fd..35e6c7e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -219,8 +219,7 @@ in { lame frescobaldi timidityWithEvenMoreFormats - pkgsUnstable.cmus - easytag + untested-quodlibet-full ## Programming tools @@ -287,11 +286,9 @@ in { ## GUI programs - untested-quodlibet-full inkscape calibre cozy - rhythmbox gpodder firefox emacs diff --git a/scripts/cron/backup.sh b/scripts/cron/backup.sh index 5c69ec6..a8c72b5 100755 --- a/scripts/cron/backup.sh +++ b/scripts/cron/backup.sh @@ -71,6 +71,7 @@ borg create \ ~/archive/ \ ~/.elfeed/ \ ~/.mozilla/ \ + ~/.config/quodlibet/ \ ~/tmp/backup/ # add folders to be backed up here green "Done" diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 0639881..1046eec 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -6,7 +6,8 @@ windows: # Output from =tmux list-windows= # Taken from: # https://stackoverflow.com/questions/9812000/specify-pane-percentage-in-tmuxinator-project/9976282#9976282 - layout: 64e7,150x39,0,0[150x25,0,0{85x25,0,0,98,64x25,86,0[64x14,86,0,119,64x10,86,15,120]},150x13,0,26,118] + # layout: 64e7,150x39,0,0[150x25,0,0{85x25,0,0,98,64x25,86,0[64x14,86,0,119,64x10,86,15,120]},150x13,0,26,118] + layout: main-vertical panes: - misc: - cd @@ -16,8 +17,6 @@ windows: - reload - annex: - git status - - cmus: - - cmus - vps: root: ~/dev/libre/vps/ layout: main-vertical -- cgit v1.2.3 From 8838583366b582c9cc3297bb0bc8e90f915ed28a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 25 Jun 2019 11:23:57 -0300 Subject: configuration.nix: Split machine specific packages --- nixos/configuration.nix | 23 +++++++++-------------- nixos/usurpador.nix | 15 +++++++++++++++ nixos/velhinho.nix | 5 +++++ 3 files changed, 29 insertions(+), 14 deletions(-) create mode 100644 nixos/usurpador.nix diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 35e6c7e..e970a32 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,6 +1,10 @@ { config, pkgs, ... }: -let localConfiguration = import /etc/nixos/local-configuration.nix; +let + pkgsUnstable = import (fetchTarball + "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz") + { }; + localConfiguration = pkgs.callPackage /etc/nixos/local-configuration.nix { }; in { imports = [ # Include the results of the hardware scan. /etc/nixos/hardware-configuration.nix @@ -63,10 +67,6 @@ in { ]; environment.systemPackages = let - pkgsUnstable = import (fetchTarball - "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz") - { }; - timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; @@ -87,7 +87,8 @@ in { { }; # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 - in with pkgs; [ + in with pkgs; + [ nixfmt ## Personal data tools @@ -297,7 +298,6 @@ in { pkgsUnstable.keepassxc yubioath-desktop # tor-browser-bundle-bin - transmission_gtk libreoffice android-studio # androidsdk_extras @@ -311,16 +311,11 @@ in { zbar # for on-screen QR Code scanning monero - ## nu specific packages - - sshuttle - slack - chromium - ]; + ] ++ localConfiguration.packages; nixpkgs.config = { android_sdk.accept_license = true; - allowUnfree = true; # Require for slack (unfree) derivation + allowUnfree = localConfiguration.allowUnfree; }; # Look at diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix new file mode 100644 index 0000000..e302503 --- /dev/null +++ b/nixos/usurpador.nix @@ -0,0 +1,15 @@ +{ pkgs }: +let privateConfiguration = import /etc/nixos/private-configuration.nix; +in { + hostName = "usurpador-nixos"; + luksDevice = "/dev/sda3"; + hashedPassword = privateConfiguration.hashedPassword; + enableIPFS = false; + allowUnfree = true; # Required for slack (unfree) derivation + packages = with pkgs; [ + ## nu specific packages + sshuttle + slack + chromium + ]; +} diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index 46e1787..31e602b 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,7 +1,12 @@ +{ pkgs }: let privateConfiguration = import /etc/nixos/private-configuration.nix; in { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; + allowUnfree = false; + packages = with pkgs; [ + transmission-gtk + ]; } -- cgit v1.2.3 From d0476c9280061c60ea000ada26a8c6e83447f8f2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 25 Jun 2019 11:24:36 -0300 Subject: env.sh: Add Perl 6 path --- bash/env.sh | 1 + bash/facepalm/rotten-apple.sh | 3 +++ 2 files changed, 4 insertions(+) diff --git a/bash/env.sh b/bash/env.sh index 43b4bb9..5193e9d 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -7,6 +7,7 @@ export PATH=~/.rakudobrew/bin:$PATH export PATH="${HOME}/.rakudo/bin:${PATH}" export PATH="${HOME}/.rakudo/share/perl6/site/bin:${PATH}" +export PATH="$HOME/.perl6/bin:$PATH" # diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh index b42bf21..5ced46f 100644 --- a/bash/facepalm/rotten-apple.sh +++ b/bash/facepalm/rotten-apple.sh @@ -25,4 +25,7 @@ isMac && { [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion eval "$(rbenv init -)" + + PATH="/usr/local/opt/make/libexec/gnubin:$PATH" + PATH="/usr/local/bin:$PATH" } -- cgit v1.2.3 From 676620aacfe56492e4b749a779b59a1fddb33602 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 25 Jun 2019 11:24:57 -0300 Subject: configuration.nix: Add trash-cli package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e970a32..6ee4cd1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -188,6 +188,7 @@ in { recutils sqlite sqlitebrowser + trash-cli diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From c3fb7e5703d718595bfedc2545e88b51ba6b08cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 25 Jun 2019 11:32:21 -0300 Subject: bashrc.sh: Remove ad-hoc configuration --- bash/bashrc.sh | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index f75ab58..9650a2f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -20,22 +20,8 @@ source $DOTFILES/bash/x.sh source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/fake-symlinks.sh -set -h -source ~/dev/nu/nucli/nu.bashcompletion - env > ~/.spacemacs.env isLinux && { source "$(dirname "$(readlink "$(command -v autojump)")")/../share/autojump/autojump.bash" } - -export PATH="$HOME/.perl6/bin:$PATH" - - -isMac && { - PATH="/usr/local/opt/make/libexec/gnubin:$PATH" - PATH="/usr/local/bin:$PATH" -} - -export PATH="$HOME/tmp/rakudobrew/bin:$PATH" -# export PATH="$HOME/songbooks/cli:$PATH" -- cgit v1.2.3 From 8f73524c5ac464139a6cf4c178a5bc36370ace04 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 25 Jun 2019 11:46:06 -0300 Subject: configuration.nix: Use autojump from NixOS module instead of from nixpkgs --- bash/bashrc.sh | 4 ---- nixos/configuration.nix | 6 ++++-- 2 files changed, 4 insertions(+), 6 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 9650a2f..3cf0a0f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -21,7 +21,3 @@ source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/fake-symlinks.sh env > ~/.spacemacs.env - -isLinux && { - source "$(dirname "$(readlink "$(command -v autojump)")")/../share/autojump/autojump.bash" -} diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6ee4cd1..99d8a96 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -138,7 +138,6 @@ in { gcc psmisc # =killall= xorg.xkill - autojump bfg-repo-cleaner pwgen gksu # =gksudo= @@ -322,7 +321,10 @@ in { # Look at # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro - programs = { bash.enableCompletion = true; }; + programs = { + bash.enableCompletion = true; + autojump.enable = true; + }; services = { cron.enable = true; -- cgit v1.2.3 From 9771ca3b2d931f5fd4e3e405a7d3e7b5a9bda89c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 25 Jun 2019 11:46:37 -0300 Subject: configuration.nix: Move cronjob definitions into common.nix --- nixos/common.nix | 19 +++++++++++++++++++ nixos/configuration.nix | 14 +------------- nixos/usurpador.nix | 1 + nixos/velhinho.nix | 12 +++++++++--- 4 files changed, 30 insertions(+), 16 deletions(-) create mode 100644 nixos/common.nix diff --git a/nixos/common.nix b/nixos/common.nix new file mode 100644 index 0000000..4495ecf --- /dev/null +++ b/nixos/common.nix @@ -0,0 +1,19 @@ +{ + common = { + # Sync emails with mbsync every hour + mail = + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; + + # Sync Nextcloud using nextcloudcmd every 15 minutes + nextcloud = + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1"; + + # Run ArchiveBox data once every day at 12h + archivebox = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1"; + + # Borg backup once a month + borg = + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1"; + }; +} diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 99d8a96..666cdf4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -329,19 +329,7 @@ in { services = { cron.enable = true; # We can see the actual generated crontab at /etc/crontab - cron.systemCronJobs = [ - # Sync emails with mbsync every hour - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1" - - # Sync Nextcloud using nextcloudcmd every 15 minutes - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1" - - # Run ArchiveBox data once every day at 12h - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1" - - # Borg backup once a month - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1" - ]; + cron.systemCronJobs = localConfiguration.cronJobs; xserver = { enable = true; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index e302503..f4e1fb9 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -12,4 +12,5 @@ in { slack chromium ]; + cronJobs = [ ]; } diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index 31e602b..f52091d 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -1,12 +1,18 @@ { pkgs }: -let privateConfiguration = import /etc/nixos/private-configuration.nix; +let + privateConfiguration = import /etc/nixos/private-configuration.nix; + common = import /etc/nixos/common.nix; in { hostName = "velhinho-nixos"; luksDevice = "/dev/sda3"; hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; allowUnfree = false; - packages = with pkgs; [ - transmission-gtk + packages = with pkgs; [ transmission-gtk ]; + cronJobs = [ + common.cron.mail + common.cron.nextcloud + common.cron.archivebox + common.cron.borg ]; } -- cgit v1.2.3 From 9f091c79cc444ee3ec403c03de1d1437c0c533bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Jun 2019 13:48:21 -0300 Subject: symlinks.sh: Add symlink to GPG configuration file --- bash/symlinks.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index e822f0f..aa36571 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -23,7 +23,9 @@ isLinux && { ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc } -ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig +mkdir -p ~/.gnupg +ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf +ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER -- cgit v1.2.3 From 189f47e05c8f39dc7e55a056e21b03fb6ea2ccac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Jun 2019 14:51:10 -0300 Subject: spacemacs.el: Add custom ledger report --- spacemacs.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index f637f65..a987651 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -764,7 +764,9 @@ This is the place where most of your configurations should be done. Unless it is "** NEXT %? \nDEADLINE: %t")) ;; Make splitting vertically more likely on smaller (velhinho) screens - split-width-threshold 120) + split-width-threshold 120 + + ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared"))) (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From 8c395aa52f084d642b8be0cbfba38923eeb6b233 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Jun 2019 17:45:37 -0300 Subject: aliases.sh: Add 'll' alias --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 8ffa763..e00cf57 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -6,6 +6,7 @@ unalias -a alias open="xdg-open" alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahp --color" +alias ll="ls -lhp --color" isLinux && { alias copy="tr -d '\\n' | xclip -sel clip" alias cop="xclip -sel clip" -- cgit v1.2.3 From 1ce01c91c6cddc172a925c1af8fff94a988353a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Jun 2019 17:46:07 -0300 Subject: xmobar: Add custom color for battery --- xmonad/xmobar.hs | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 04f2592..e98bb56 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -8,14 +8,7 @@ Config { , Run DiskU [("/", "/")] [] 600 , Run Wireless "wlp1s0" [] 100 , Run Volume "default" "Master" [] 10 - , Run Battery [ - "-t", ": % - ", - "--", - "-O", "AC", - "-o", "Bat", - "-h", "green", - "-l", "red"] - 10 + , Run Battery ["-t", ": % - "] 10 , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" ] , template = " %date% | %default:Master%| %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " -- cgit v1.2.3 From f7b1392b10e132b2ef36545db32888cb47e687b4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Jun 2019 13:40:18 -0300 Subject: xmobar: Finish customizing Battery --- xmonad/xmobar.hs | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index e98bb56..f9d5839 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -8,7 +8,16 @@ Config { , Run DiskU [("/", "/")] [] 600 , Run Wireless "wlp1s0" [] 100 , Run Volume "default" "Master" [] 10 - , Run Battery ["-t", ": % - "] 10 + , Run Battery [ + "-t", ": % - ", + "--", + "-O", "AC", + "-i", "Full", + "-o", "Bat", + "-p", "orange", + "-h", "green", + "-l", "red"] + 10 , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" ] , template = " %date% | %default:Master%| %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " -- cgit v1.2.3 From d042a1b214a7bf2852785b532dd117ba24c1e99f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Jun 2019 13:40:31 -0300 Subject: Fix typo in common.nix --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index 4495ecf..1209363 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,5 +1,5 @@ { - common = { + cron = { # Sync emails with mbsync every hour mail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; -- cgit v1.2.3 From 7c51902aead9c365c622bcf33a66c0ae2ff7dced Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Jun 2019 13:40:42 -0300 Subject: configuration.nix: Uninstall old rakudo --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 666cdf4..dcfe36b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -241,7 +241,6 @@ in { ant maven go_bootstrap - rakudo bats ledger newsboat -- cgit v1.2.3 From 39b4417fa55896098bdc83a94cdf347aad3c225a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Jun 2019 15:40:18 -0300 Subject: usurpador.nix: Activate Nextcloud cronjob --- nixos/usurpador.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index f4e1fb9..6338dad 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -1,5 +1,7 @@ { pkgs }: -let privateConfiguration = import /etc/nixos/private-configuration.nix; +let + privateConfiguration = import /etc/nixos/private-configuration.nix; + common = import /etc/nixos/common.nix; in { hostName = "usurpador-nixos"; luksDevice = "/dev/sda3"; @@ -7,10 +9,11 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ - ## nu specific packages sshuttle slack chromium ]; - cronJobs = [ ]; + cronJobs = [ + common.cron.nextcloud + ]; } -- cgit v1.2.3 From 9cf16bee3b8df2d820e4c77101325992459e9230 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Jun 2019 15:46:17 -0300 Subject: usurpador.nix: Format with nixfmt --- nixos/usurpador.nix | 10 ++-------- 1 file changed, 2 insertions(+), 8 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 6338dad..ad02928 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -8,12 +8,6 @@ in { hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation - packages = with pkgs; [ - sshuttle - slack - chromium - ]; - cronJobs = [ - common.cron.nextcloud - ]; + packages = with pkgs; [ sshuttle slack chromium ]; + cronJobs = [ common.cron.nextcloud ]; } -- cgit v1.2.3 From a38a08cf340907e71b46fb894146a222191b3493 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Jun 2019 16:31:43 -0300 Subject: Improve first run of xmobar-mpris.sh --- scripts/ad-hoc/xmobar-mpris.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/ad-hoc/xmobar-mpris.sh b/scripts/ad-hoc/xmobar-mpris.sh index cd98452..f0d3ce6 100755 --- a/scripts/ad-hoc/xmobar-mpris.sh +++ b/scripts/ad-hoc/xmobar-mpris.sh @@ -1,6 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail +CUR_PATH="${HOME}/.cache/andreh/mpris-player.txt" + urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } default_status() { @@ -9,7 +11,7 @@ default_status() { } main() { - CUR="$(cat ~/.cache/andreh/mpris-player.txt)" + CUR="$(cat "${CUR_PATH}")" if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then printf "%s\n" "${CUR}" else @@ -31,6 +33,9 @@ main() { } export -f main +mkdir -p "$(dirname "${CUR_PATH}")" +touch "${CUR_PATH}" + while true do main -- cgit v1.2.3 From 514b7fa0f16301e09ae621660b2359f6be93e50c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Jul 2019 06:35:39 -0300 Subject: Deactivate email in velhinho and activate in usurpador --- nixos/usurpador.nix | 2 +- nixos/velhinho.nix | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index ad02928..f8b0bd0 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,5 +9,5 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; - cronJobs = [ common.cron.nextcloud ]; + cronJobs = [ common.cron.mail common.cron.nextcloud ]; } diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index f52091d..90b018a 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -10,7 +10,7 @@ in { allowUnfree = false; packages = with pkgs; [ transmission-gtk ]; cronJobs = [ - common.cron.mail + # common.cron.mail common.cron.nextcloud common.cron.archivebox common.cron.borg -- cgit v1.2.3 From a6bf91fdee78e751af06b77b4e90c02cbf317667 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Jul 2019 19:37:00 -0300 Subject: spacemacs.sl: Remove "SPC d" 'spacemacs/delete-window keybinding --- spacemacs.el | 1 - 1 file changed, 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index a987651..09525fe 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -619,7 +619,6 @@ This is the place where most of your configurations should be done. Unless it is (spacemacs/set-leader-keys "p C-r" 'euandreh/projectile-reload-known-projects "an" 'notmuch - "d" 'spacemacs/delete-window "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage) -- cgit v1.2.3 From f6d1e4dc99d8f5ce0ad257b9c034369e958ad4be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Jul 2019 19:37:42 -0300 Subject: velhinho.nix: Activate common.cron.mail again --- nixos/velhinho.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index 90b018a..f52091d 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -10,7 +10,7 @@ in { allowUnfree = false; packages = with pkgs; [ transmission-gtk ]; cronJobs = [ - # common.cron.mail + common.cron.mail common.cron.nextcloud common.cron.archivebox common.cron.borg -- cgit v1.2.3 From 8d1150f0070bc32951a66a95eafb09654b7c37e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Jul 2019 19:37:58 -0300 Subject: configuration.nix: Use unstable version of cozy --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dcfe36b..c06c5a7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -288,7 +288,7 @@ in { inkscape calibre - cozy + pkgsUnstable.cozy gpodder firefox emacs -- cgit v1.2.3 From 9fda1cec681bc133e293079e742829bfe33c703f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Jul 2019 11:48:04 -0300 Subject: profiles.clj: Update cider-nrepl version --- lein/profiles.clj | Bin 1185 -> 1176 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 5ead478..9b978b8 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From 4c3a4ba2a363358f50560dbc70a14672b5ac9e32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Jul 2019 12:53:05 -0300 Subject: Update Wireless xmobar configuration --- xmonad/xmobar.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index f9d5839..1ab32d5 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -6,7 +6,7 @@ Config { , Run Swap [] 30 , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 , Run DiskU [("/", "/")] [] 600 - , Run Wireless "wlp1s0" [] 100 + , Run Wireless "wlp2s0" [] 100 , Run Volume "default" "Master" [] 10 , Run Battery [ "-t", ": % - ", @@ -20,5 +20,5 @@ Config { 10 , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" ] - , template = " %date% | %default:Master%| %mpris% } { | %wlp1s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " + , template = " %date% | %default:Master%| %mpris% } { | %wlp2s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From 6ffa9511638270a328222c2d0e68e99b460485ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 31 Jul 2019 18:09:41 -0300 Subject: x.sh: Run xmodmap at the end of the file --- bash/x.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/x.sh b/bash/x.sh index a8b3040..454696a 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash isLinux && { - xmodmap ~/.Xmodmap setxkbmap -option esperanto:qwerty xset r rate 250 50 @@ -18,4 +17,5 @@ isLinux && { xdg-mime default firefox.desktop text/xml xdg-mime default nautilus.desktop inode/directory + xmodmap ~/.Xmodmap } -- cgit v1.2.3 From 3bb43839fce786009c8e8c0a8fa011808c9d6fc1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 31 Jul 2019 19:21:58 -0300 Subject: Add Go layer and gocode language tool --- nixos/configuration.nix | 1 + spacemacs.el | 5 +++-- 2 files changed, 4 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c06c5a7..9a26e96 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -254,6 +254,7 @@ in { xsel nodejs-10_x swift + gocode ## Containers and VMs diff --git a/spacemacs.el b/spacemacs.el index 09525fe..372446d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -39,7 +39,8 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - `(graphviz + `(go + graphviz systemd asciidoc ansible @@ -806,7 +807,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval modify-syntax-entry 43 "'") -- cgit v1.2.3 From b3bb8707e46b0a91ae8394c95fb45280ee121663 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 7 Aug 2019 22:19:02 -0300 Subject: configuration.nix: Add qrencode package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c06c5a7..938893b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -188,6 +188,7 @@ in { sqlite sqlitebrowser trash-cli + qrencode diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From ab990a94210be40c9f86cdaee01158abb505641f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 9 Aug 2019 17:04:09 -0300 Subject: spacemacs.el: Add indentation rule for flow macro --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 372446d..f2eca74 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -545,6 +545,7 @@ dump." (tabular 'defun) (for-all 'defun) + (flow 1) (facts 1) (fact 1))) -- cgit v1.2.3 From 494f90bc2868a85720757b50f3513017267b704d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 12 Aug 2019 08:28:57 -0300 Subject: profile.clj --- lein/profiles.clj | Bin 1176 -> 1170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 9b978b8..87f437e 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From b69d703877f9c7f4eca37c1094da7375d4669d07 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 12 Aug 2019 10:00:05 -0300 Subject: profiles.clj --- lein/profiles.clj | Bin 1170 -> 1170 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 87f437e..871f541 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From 34bb9a1e84125e4e28bb092c9e586c26bdc0cb8d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 17 Aug 2019 14:26:53 -0300 Subject: Move mail from velhinho to usurpador --- nixos/usurpador.nix | 3 ++- nixos/velhinho.nix | 1 - 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index f8b0bd0..bc1399d 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,5 +9,6 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; - cronJobs = [ common.cron.mail common.cron.nextcloud ]; + cronJobs = [ common.cron.mail common.cron.nextcloud common.cron.mail + ]; } diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index f52091d..ac13476 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -10,7 +10,6 @@ in { allowUnfree = false; packages = with pkgs; [ transmission-gtk ]; cronJobs = [ - common.cron.mail common.cron.nextcloud common.cron.archivebox common.cron.borg -- cgit v1.2.3 From f5ff47868b2e62bbdba2dc868b869f3e72481d01 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 17 Aug 2019 14:54:04 -0300 Subject: Format Nix files with newer nixfmt --- default.nix | 2 +- nixos/common.nix | 8 +-- nixos/configuration.nix | 14 ++-- nixos/hardware-configuration.nix | 4 +- nixos/usurpador.nix | 3 +- nixos/velhinho.nix | 6 +- utils.nix | 140 +++++++++++++++++++-------------------- 7 files changed, 86 insertions(+), 91 deletions(-) diff --git a/default.nix b/default.nix index 6d5e6f3..aebb66e 100644 --- a/default.nix +++ b/default.nix @@ -21,5 +21,5 @@ in rec { (utils.fixme [ "default.nix" "utils.nix" ]) ]; publishScript = - utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; + utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; } diff --git a/nixos/common.nix b/nixos/common.nix index 1209363..cb263a3 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,18 +2,18 @@ cron = { # Sync emails with mbsync every hour mail = - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1"; + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1"; # Run ArchiveBox data once every day at 12h archivebox = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1"; + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1"; # Borg backup once a month borg = - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1"; + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1"; }; } diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7a1c043..30964f5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -2,8 +2,8 @@ let pkgsUnstable = import (fetchTarball - "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz") - { }; + "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz") + { }; localConfiguration = pkgs.callPackage /etc/nixos/local-configuration.nix { }; in { imports = [ # Include the results of the hardware scan. @@ -69,9 +69,9 @@ in { environment.systemPackages = let timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags - ++ [ "--enable-audio=vorbis,flac" ]; + ++ [ "--enable-audio=vorbis,flac" ]; buildInputs = oldAttrs.buildInputs - ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; + ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 @@ -83,8 +83,8 @@ in { # Should be removed during fresh OS installation: # https://github.com/NixOS/nix/issues/2497 nixfmt = import - (fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") - { }; + (fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") + { }; # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; @@ -443,7 +443,7 @@ in { description = "Build daemon for GNU Guix"; serviceConfig = { ExecStart = - "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; + "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; Environment = "GUIX_LOCPATH=/root/.guix-profile/lib/locale"; RemainAfterExit = "yes"; StandardOutput = "syslog"; diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix index a07470d..e7ea0ff 100644 --- a/nixos/hardware-configuration.nix +++ b/nixos/hardware-configuration.nix @@ -7,7 +7,7 @@ imports = [ ]; boot.initrd.availableKernelModules = - [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ]; + [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ]; boot.kernelModules = [ "kvm-intel" ]; boot.extraModulePackages = [ ]; @@ -22,7 +22,7 @@ }; swapDevices = - [{ device = "/dev/disk/by-uuid/c08158aa-677a-4984-83fe-c938edb7021e"; }]; + [{ device = "/dev/disk/by-uuid/c08158aa-677a-4984-83fe-c938edb7021e"; }]; nix.maxJobs = lib.mkDefault 4; powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index bc1399d..289e651 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,6 +9,5 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; - cronJobs = [ common.cron.mail common.cron.nextcloud common.cron.mail - ]; + cronJobs = [ common.cron.mail common.cron.nextcloud common.cron.mail ]; } diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index ac13476..9ba1ed6 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -9,9 +9,5 @@ in { enableIPFS = false; allowUnfree = false; packages = with pkgs; [ transmission-gtk ]; - cronJobs = [ - common.cron.nextcloud - common.cron.archivebox - common.cron.borg - ]; + cronJobs = [ common.cron.nextcloud common.cron.archivebox common.cron.borg ]; } diff --git a/utils.nix b/utils.nix index ac49ac2..7e3a6db 100644 --- a/utils.nix +++ b/utils.nix @@ -1,7 +1,7 @@ { pkgs, src, baseName }: let nixfmt = import (builtins.fetchTarball - "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; + "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; in rec { baseTask = pkgs.stdenv.mkDerivation { name = "${baseName}-task"; @@ -14,16 +14,16 @@ in rec { ''; }; shellcheck = ignoredFindPattern: - baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-shellcheck"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; - ignoredPattern = - if ignoredFindPattern == null then "" else ignoredFindPattern; - buildPhase = '' - find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck -x - touch $out - ''; - }); + baseTask.overrideAttrs (baseAttrs: rec { + name = "${baseAttrs.name}-shellcheck"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; + ignoredPattern = + if ignoredFindPattern == null then "" else ignoredFindPattern; + buildPhase = '' + find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck -x + touch $out + ''; + }); formatNix = baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-nixfmt"; buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; @@ -42,68 +42,68 @@ in rec { ''; }); fixme = ignoredFiles: - baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-fixme"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; - ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" - (if ignoredFiles == null then [ - "utils.nix" - "TODOs.org" - ] else - ignoredFiles); - buildPhase = '' - ag FIXME ${ignoredPattern} || { - touch $out - exit 0 - } - echo " Found dangling FIXME markers on the project." - echo " You should write them down properly on TODOs.org." - exit 1 - ''; - }); + baseTask.overrideAttrs (baseAttrs: rec { + name = "${baseAttrs.name}-fixme"; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; + ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" + (if ignoredFiles == null then [ + "utils.nix" + "TODOs.org" + ] else + ignoredFiles); + buildPhase = '' + ag FIXME ${ignoredPattern} || { + touch $out + exit 0 + } + echo " Found dangling FIXME markers on the project." + echo " You should write them down properly on TODOs.org." + exit 1 + ''; + }); readmeOrg = title: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-readme-docs"; - buildInputs = [ pkgs.pandoc ]; - buildPhase = '' - pandoc README.org -o $out --css docs/README.css --to=html5 --self-contained --metadata title="${title}" - ''; - }); + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-readme-docs"; + buildInputs = [ pkgs.pandoc ]; + buildPhase = '' + pandoc README.org -o $out --css docs/README.css --to=html5 --self-contained --metadata title="${title}" + ''; + }); test = testDerivations: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-test"; - buildPhase = '' - echo "Ran tests for:" - for d in ${builtins.toString testDerivations}; do - echo " $d" - done - echo "All tests passed!" - touch $out - ''; - }); + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-test"; + buildPhase = '' + echo "Ran tests for:" + for d in ${builtins.toString testDerivations}; do + echo " $d" + done + echo "All tests passed!" + touch $out + ''; + }); shellEnvironmentBuild = shellBuildInputs: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-shell-build-inputs"; - buildPhase = '' - echo "Can build shell environment for shellBuildInputs!" - echo noop > $out - ''; - }); + baseTask.overrideAttrs (baseAttrs: { + name = "${baseAttrs.name}-shell-build-inputs"; + buildPhase = '' + echo "Can build shell environment for shellBuildInputs!" + echo noop > $out + ''; + }); shellEnvironment = shellBuildInputs: - pkgs.mkShell { - name = "${baseName}-shell"; - buildInputs = shellBuildInputs; - }; + pkgs.mkShell { + name = "${baseName}-shell"; + buildInputs = shellBuildInputs; + }; overwritingPublishScript = { docsDerivation, overwrite ? true }: - pkgs.writeShellScriptBin "publish.sh" '' - set -euo pipefail - OUT_DOCS="${docsDerivation}" - ${ - if overwrite then "" else "# " - }${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" - ${pkgs.rsync}/bin/rsync -avzP \ - --rsh="ssh -o StrictHostKeyChecking=no" \ - "$OUT_DOCS/" \ - "$SERVER_URL:$DOCS_SERVER_PATH" - ''; + pkgs.writeShellScriptBin "publish.sh" '' + set -euo pipefail + OUT_DOCS="${docsDerivation}" + ${ + if overwrite then "" else "# " + }${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" + ${pkgs.rsync}/bin/rsync -avzP \ + --rsh="ssh -o StrictHostKeyChecking=no" \ + "$OUT_DOCS/" \ + "$SERVER_URL:$DOCS_SERVER_PATH" + ''; } -- cgit v1.2.3 From 8e3bb502decbb6251def040d5c0d209c58d81613 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 20 Aug 2019 16:37:11 -0300 Subject: Add Scala packages --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 30964f5..142870a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -256,6 +256,9 @@ in { nodejs-10_x swift gocode + jetbrains.idea-community + scala + sbt ## Containers and VMs -- cgit v1.2.3 From 2295b855de63442767f2e5a3ee5ec034f5e6bc30 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 20 Aug 2019 16:37:39 -0300 Subject: Add indentation rule for =let-entities= --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index f2eca74..0f143fc 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -537,6 +537,7 @@ dump." (stage 1) (job 1) + (let-entities 4) (action 1) (as-user 1) -- cgit v1.2.3 From 5629bb60056a180b8b883627c6dbd9614e902e3e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 4 Sep 2019 21:16:03 -0300 Subject: spacemacs.el: add indentation rule for assoc --- spacemacs.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 0f143fc..b7aa7f1 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -548,7 +548,9 @@ dump." (flow 1) (facts 1) - (fact 1))) + (fact 1) + + (assoc 1))) (defun euandreh/clear-repl-and-eval () (interactive) -- cgit v1.2.3 From 4a1ce6fc06bcaf1409be37757af9dda585805a7d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Sep 2019 21:18:47 -0300 Subject: Use KeePassXC from main channel instead of pkgsUnstable --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 142870a..46eb8cc 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -299,7 +299,7 @@ in { emacs tdesktop vlc - pkgsUnstable.keepassxc + keepassxc yubioath-desktop # tor-browser-bundle-bin libreoffice -- cgit v1.2.3 From a4ab14f894a1eec128aa45dff734b8c5acd1abc5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Sep 2019 21:24:47 -0300 Subject: xmonad.hs: cocnfigure brightness keys --- scripts/ad-hoc/brightness.sh | 26 ++++++++++++++++++++++++++ xmonad/xmonad.hs | 4 ++-- 2 files changed, 28 insertions(+), 2 deletions(-) create mode 100755 scripts/ad-hoc/brightness.sh diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh new file mode 100755 index 0000000..e09b2d5 --- /dev/null +++ b/scripts/ad-hoc/brightness.sh @@ -0,0 +1,26 @@ +#!/usr/bin/env bash + +# base dir for backlight class +basedir="/sys/class/backlight/" + +# get the backlight handler +handler=$basedir$(ls $basedir)"/" + +# get current brightness +old_brightness=$(cat $handler"brightness") + +# get max brightness +max_brightness=$(cat $handler"max_brightness") + +# get current brightness % +old_brightness_p=$(( 100 * $old_brightness / $max_brightness )) + +# calculate new brightness % +new_brightness_p=$(($old_brightness_p $1)) + +# calculate new brightness value +new_brightness=$(( $max_brightness * $new_brightness_p / 100 )) + +# set the new brightness value +### sudo chmod 666 $handler"brightness" +echo $new_brightness > $handler"brightness" diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 70dcd2a..fb9ec56 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -43,8 +43,8 @@ myKeyPBindings = , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") -- Brightness - , ("", spawn "xbacklight +10") - , ("", spawn "xbacklight -10") + , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh -10") + , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh +10") -- yeganesh launcher -- cgit v1.2.3 From b4a43e8542d4cb49f053a287bc1406c60ec5b722 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Sep 2019 21:51:11 -0300 Subject: brightness.sh: fix ShellCheck offenses, add min/max boundaries --- scripts/ad-hoc/brightness.sh | 23 ++++++++++++++--------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh index e09b2d5..367a81e 100755 --- a/scripts/ad-hoc/brightness.sh +++ b/scripts/ad-hoc/brightness.sh @@ -1,26 +1,31 @@ #!/usr/bin/env bash +set -Eeuo pipefail +set -x +BRIGHTNESS_DIFF="${1}" # base dir for backlight class -basedir="/sys/class/backlight/" +BASEDIR='/sys/class/backlight/' # get the backlight handler -handler=$basedir$(ls $basedir)"/" +HANDLER="${BASEDIR}$(ls "${BASEDIR}")" # get current brightness -old_brightness=$(cat $handler"brightness") +OLD_BRIGHTNESS="$(cat "${HANDLER}/brightness")" # get max brightness -max_brightness=$(cat $handler"max_brightness") +MAX_BRIGHTNESS="$(cat "${HANDLER}/max_brightness")" # get current brightness % -old_brightness_p=$(( 100 * $old_brightness / $max_brightness )) +OLD_BRIGHTNESS_P=$(( 100 * "${OLD_BRIGHTNESS}" / "${MAX_BRIGHTNESS}" )) -# calculate new brightness % -new_brightness_p=$(($old_brightness_p $1)) +# calculate new brightness %, bounded by 0 100 range +NEW_BRIGHTNESS_P=$(("${OLD_BRIGHTNESS_P}" + "${BRIGHTNESS_DIFF}")) +NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" > 100 ? 100 : "${NEW_BRIGHTNESS_P}")) +NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) # calculate new brightness value -new_brightness=$(( $max_brightness * $new_brightness_p / 100 )) +NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) # set the new brightness value ### sudo chmod 666 $handler"brightness" -echo $new_brightness > $handler"brightness" +echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" -- cgit v1.2.3 From 62ca59276b2c72d38f8bb139e99948e1a6218e4e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Sep 2019 21:56:59 -0300 Subject: brightness.sh: debug statement --- scripts/ad-hoc/brightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh index 367a81e..6d74b90 100755 --- a/scripts/ad-hoc/brightness.sh +++ b/scripts/ad-hoc/brightness.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -set -x + BRIGHTNESS_DIFF="${1}" # base dir for backlight class -- cgit v1.2.3 From 29b608db5c0d95367332870ad65b149691074852 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 17 Sep 2019 21:57:52 -0300 Subject: usurpador.nix: Remove duplicated cronjob entry --- nixos/usurpador.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 289e651..f8b0bd0 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,5 +9,5 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; - cronJobs = [ common.cron.mail common.cron.nextcloud common.cron.mail ]; + cronJobs = [ common.cron.mail common.cron.nextcloud ]; } -- cgit v1.2.3 From 959759811499418192755f1ac8c4120fdc9ba5e1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 21 Sep 2019 21:18:36 -0300 Subject: sync-mail.sh: Run mbsync in parallel --- scripts/cron/sync-mail.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index f0b7c81..96bfdbc 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -7,7 +7,10 @@ cd "$(dirname "${BASH_SOURCE[0]}")" exec &> /dev/stdout echo "Starting: $(date -Is)" -mbsync -aV +mbsync EuAndreh & +mbsync Nubank & +mbsync Gmail & +wait notmuch new echo "Finishing: $(date -Is)" -- cgit v1.2.3 From b1e6b63d7ad3c8af6823b1ac39b70f0facdc3ceb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 30 Sep 2019 17:20:31 -0300 Subject: Split out standalone gc-mail.sh file --- scripts/ad-hoc/gc-mail.sh | 5 +++++ scripts/ad-hoc/gc.sh | 6 +----- 2 files changed, 6 insertions(+), 5 deletions(-) create mode 100755 scripts/ad-hoc/gc-mail.sh diff --git a/scripts/ad-hoc/gc-mail.sh b/scripts/ad-hoc/gc-mail.sh new file mode 100755 index 0000000..df29295 --- /dev/null +++ b/scripts/ad-hoc/gc-mail.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash + +# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ +yellow "Clean up deleted email files" +notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" diff --git a/scripts/ad-hoc/gc.sh b/scripts/ad-hoc/gc.sh index c93c948..ffee10b 100755 --- a/scripts/ad-hoc/gc.sh +++ b/scripts/ad-hoc/gc.sh @@ -45,11 +45,7 @@ docker rm "$(docker ps -a -q)" echo y | docker volume prune echo y | docker container prune - -# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ -yellow "Clean up deleted email files" -notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -notmuch new +gc-mail.sh after=$(disk_space) -- cgit v1.2.3 From 3f3d8d78136a7aa3cbe02584366b0099d5c99a79 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Oct 2019 21:08:23 -0300 Subject: brightness.sh: Change file permission when changing it fails --- scripts/ad-hoc/brightness.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh index 6d74b90..e34b306 100755 --- a/scripts/ad-hoc/brightness.sh +++ b/scripts/ad-hoc/brightness.sh @@ -27,5 +27,4 @@ NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) # set the new brightness value -### sudo chmod 666 $handler"brightness" -echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" +echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" # || sudo chmod 666 "${HANDLER}/brightness" -- cgit v1.2.3 From a49d1fdbf3f513b09cc67a3a0c1efdb431575e0d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Oct 2019 21:17:07 -0300 Subject: default.nix: ignore npmrc.sh in ShellCheck --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index aebb66e..6095aaa 100644 --- a/default.nix +++ b/default.nix @@ -17,7 +17,7 @@ in rec { }; test = utils.test [ utils.formatNix - (utils.shellcheck ".*(encrypted).*") + (utils.shellcheck ".*(encrypted|npmrc).*") (utils.fixme [ "default.nix" "utils.nix" ]) ]; publishScript = -- cgit v1.2.3 From 841f06f32f22574d9e99ee17da9ff46c606b95b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Oct 2019 05:42:44 -0300 Subject: configuration.nix: Use unstable version of KeePassXC again --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 46eb8cc..142870a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -299,7 +299,7 @@ in { emacs tdesktop vlc - keepassxc + pkgsUnstable.keepassxc yubioath-desktop # tor-browser-bundle-bin libreoffice -- cgit v1.2.3 From c560f1fe6b0079c1f823e91961a54a2af888ea82 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Oct 2019 13:51:50 -0300 Subject: configuration.nix: Chage to fr_FR locale --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 142870a..71f5419 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -49,7 +49,7 @@ in { i18n = { consoleFont = "Lat2-Terminus16"; consoleKeyMap = "br-abnt2"; - defaultLocale = "en_US.UTF-8"; + defaultLocale = "fr_FR.UTF-8"; }; # Set your time zone. -- cgit v1.2.3 From 895dac434550b0b0c501b7202998e76d3c9e8b00 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Oct 2019 17:46:42 -0300 Subject: configuration.nix: Add heroku package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 71f5419..1d958ba 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -259,6 +259,7 @@ in { jetbrains.idea-community scala sbt + heroku ## Containers and VMs -- cgit v1.2.3 From 84a87284edae7942a26f9f260b37263fe96a6ebe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Oct 2019 19:07:35 -0300 Subject: xmonad: Use M-f to toggle xmobar fullscreeness --- xmonad/xmonad.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index fb9ec56..4ba7139 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -69,7 +69,7 @@ myKeyPBindings = -- Toggle appearence of xmobar -- https://stackoverflow.com/a/27646652 - , ("M-S-f", sendMessage ToggleStruts) + , ("M-f", sendMessage ToggleStruts) , ("M-a", spawn dbg) ] -- cgit v1.2.3 From df7290f132348fc5b0f08f2a25a22da9b5409b16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Oct 2019 01:18:05 -0300 Subject: brightness.sh: Uncomment permission changing code --- scripts/ad-hoc/brightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh index e34b306..0af3426 100755 --- a/scripts/ad-hoc/brightness.sh +++ b/scripts/ad-hoc/brightness.sh @@ -27,4 +27,4 @@ NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) # set the new brightness value -echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" # || sudo chmod 666 "${HANDLER}/brightness" +echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" -- cgit v1.2.3 From 25448c5413db06a06bf766a6286b0945b5f92ede Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 15 Oct 2019 00:54:55 -0300 Subject: configuration.nix: Add Jekyll and Ruby packages --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1d958ba..157a99d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -260,6 +260,8 @@ in { scala sbt heroku + jekyll + ruby ## Containers and VMs -- cgit v1.2.3 From 4d8e42bdb0deb49cf70abb9bee9058c4cbfd77a9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 15 Oct 2019 01:16:25 -0300 Subject: configuration.nix: Add peek package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 157a99d..eb96269 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -189,6 +189,7 @@ in { sqlitebrowser trash-cli qrencode + peek # GIF recorder diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 62788e610066deab8119908f25a7ae7ddb581b0d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 16 Oct 2019 08:23:32 -0300 Subject: Change PS1 Git text for fr_FR --- bash/ps1.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 7e6f3f1..8487f44 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -100,9 +100,9 @@ $(git branch &>/dev/null;\ if [ $? -eq 0 ]; then \ echo "$(\ echo `git status` | grep "Changes" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "to publish your local commits" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "to update your local branch" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E -v "to publish|update your local branch" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E "Votre branche est en retard" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ + echo `git status` | grep -v "Changes" | grep -E -v "Votre branche est en retard|Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ -- cgit v1.2.3 From da3df08e62a87296fd44ef47c68e28a26cb9c454 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Oct 2019 09:29:53 -0300 Subject: Rename Nextcloud cache folder --- bash/env.sh | 2 +- bash/youtube.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 5193e9d..a3e5aeb 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -27,7 +27,7 @@ export PATH="${DOTFILES}/scripts/ad-hoc:${PATH}" export PATH="${DOTFILES}/scripts/cron:${PATH}" export PATH="$HOME/annex/bin:$PATH" export INPUTRC=~/.inputrc -export CACHE_DIR="$HOME/Nextcloud/cache" +export CACHE_DIR="$HOME/Nextcloud/Cache" export PATH="$HOME/dev/libre/website/:$PATH" export PATH="$DOTFILES/bin:$PATH" export PATH="$HOME/dev/misc/flutter/bin:$PATH" diff --git a/bash/youtube.sh b/bash/youtube.sh index c8a6784..fac6469 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -6,7 +6,7 @@ export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title download() { youtube-dl "$1" \ - --download-archive ~/Nextcloud/cache/youtube-dl-seen.conf \ + --download-archive ~/Nextcloud/Cache/youtube-dl-seen.conf \ --prefer-free-formats \ --playlist-end "$2" \ --write-description \ -- cgit v1.2.3 From 8e4c13228e83acc9ae41dc1572f393527a8eacca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Oct 2019 09:30:13 -0300 Subject: Update annex.yml --- tmux/projects/annex.yml | 40 +++++++++++++++++++++++++++------------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 1046eec..a975506 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -17,20 +17,34 @@ windows: - reload - annex: - git status - - vps: - root: ~/dev/libre/vps/ + - pires: + root: ~/dev/libre/pires/ layout: main-vertical panes: - - vps: - - s - - vps-state: - - cd ../vps-state/ - - s - - songbooks: - root: ~/dev/libre/songbooks/ - layout: main-vertical - panes: - - songbooks-main: + - misc: - s - - songbooks-test: + - client: + - cd client/ + - elm reactor + - server: + - cd server + - nix-shell --run 'cabal run' + - root: - s + # - vps: + # root: ~/dev/libre/vps/ + # layout: main-vertical + # panes: + # - vps: + # - s + # - vps-state: + # - cd ../vps-state/ + # - s + # - songbooks: + # root: ~/dev/libre/songbooks/ + # layout: main-vertical + # panes: + # - songbooks-main: + # - s + # - songbooks-test: + # - s -- cgit v1.2.3 From 205974f72cbe0fb982c1ac07be6f012298a2087c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Oct 2019 09:32:09 -0300 Subject: WIP: Setup Haskell development environment It is still a bit broken, though. --- nixos/configuration.nix | 3 +++ spacemacs.el | 20 +++++++++++++++++--- 2 files changed, 20 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index eb96269..63e7b79 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -67,6 +67,8 @@ in { ]; environment.systemPackages = let + all-hies = import (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") {}; + timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; @@ -190,6 +192,7 @@ in { trash-cli qrencode peek # GIF recorder + (all-hies.selection { selector = p: { inherit (p) ghc865 ghc864; }; }) diffoscope poppler_utils # used by diffoscope for comparing PDF files diff --git a/spacemacs.el b/spacemacs.el index b7aa7f1..973e32c 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -73,7 +73,7 @@ This function should only modify configuration layer settings." perl5 perl6 purescript - python + ;; python FIXME: error with lsp dependency react restclient ruby @@ -100,7 +100,19 @@ This function should only modify configuration layer settings." shell-default-position 'bottom) (spell-checking :variables spell-checking-enable-by-default nil - spell-checking-enable-auto-dictionary t)) + spell-checking-enable-auto-dictionary t) + (lsp :variables + default-nix-wrapper (lambda (args) + (append + (append (list "nix-shell" "-I" "." "--command" ) + (list (mapconcat 'identity args " "))) + (list (nix-current-sandbox)))) + + lsp-haskell-process-wrapper-function default-nix-wrapper) + (haskell :variables + haskell-enable-hindent t + haskell-completion-backend 'lsp + haskell-process-type 'cabal-new-repl)) ;; List of additional packages that will be installed without being ;; wrapped in a layer. If you need some configuration for these @@ -115,7 +127,9 @@ This function should only modify configuration layer settings." fireplace emidje ob-rust - guix) + guix + direnv + nix-sandbox) ;; A list of packages that cannot be updated. dotspacemacs-frozen-packages '() -- cgit v1.2.3 From 94e3f3a05ede92ac928c2e5e538f82df39160ea5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Oct 2019 09:32:40 -0300 Subject: configuration.nix: Add andreh as trusted-user --- nixos/configuration.nix | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 63e7b79..f3f7b7d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -40,9 +40,15 @@ in { # https://nixos.org/nixos/manual/index.html#idm140737316795120 system.autoUpgrade.enable = true; - nix.gc = { - automatic = false; - dates = "03:15"; # change to hour? + nix = { + gc = { + automatic = false; + dates = "03:15"; # change to hour? + }; + extraOptions = + '' + trusted-users = root andreh + ''; }; # Select internationalisation properties. -- cgit v1.2.3 From 20c7a1f1a9fe6430a8fac403481e05291fbda8fe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Oct 2019 09:32:53 -0300 Subject: configuration.nix: Install (many) Haskell packages --- nixos/configuration.nix | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f3f7b7d..5f21279 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -198,7 +198,17 @@ in { trash-cli qrencode peek # GIF recorder + pkgsUnstable.cachix + pkgsUnstable.cabal-install + entr + elmPackages.elm + mariadb + now-cli + ghc + cabal2nix + nix-prefetch-git (all-hies.selection { selector = p: { inherit (p) ghc865 ghc864; }; }) + hlint diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From ac7db2f2e4db6fe01e65d2cb738f310cb80b4248 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Oct 2019 16:23:31 -0300 Subject: configuration.nix: Install nix-prefetch-docker, elm2nix and elm-format --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5f21279..b5d7092 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -209,6 +209,9 @@ in { nix-prefetch-git (all-hies.selection { selector = p: { inherit (p) ghc865 ghc864; }; }) hlint + pkgsUnstable.nix-prefetch-docker + elm2nix + elmPackages.elm-format diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From af26e1b8c408099a9d06c314242436013cef52f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 26 Oct 2019 08:47:39 -0300 Subject: spacemacs.el: Re-add python layer --- spacemacs.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 973e32c..61d191a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -73,7 +73,7 @@ This function should only modify configuration layer settings." perl5 perl6 purescript - ;; python FIXME: error with lsp dependency + python react restclient ruby @@ -825,7 +825,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval modify-syntax-entry 43 "'") -- cgit v1.2.3 From bd2ef89ce039b67db0085fb5f5ff0b471e49677d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 26 Oct 2019 08:48:32 -0300 Subject: Add zero-brightness.sh script --- scripts/ad-hoc/zero-brightness.sh | 11 +++++++++++ xmonad/xmonad.hs | 5 +++-- 2 files changed, 14 insertions(+), 2 deletions(-) create mode 100755 scripts/ad-hoc/zero-brightness.sh diff --git a/scripts/ad-hoc/zero-brightness.sh b/scripts/ad-hoc/zero-brightness.sh new file mode 100755 index 0000000..ccea46b --- /dev/null +++ b/scripts/ad-hoc/zero-brightness.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# base dir for backlight class +BASEDIR='/sys/class/backlight/' + +# get the backlight handler +HANDLER="${BASEDIR}$(ls "${BASEDIR}")" + +# set the new brightness value +echo 0 > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 4ba7139..fba06f4 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -43,8 +43,9 @@ myKeyPBindings = , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") -- Brightness - , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh -10") - , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh +10") + , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh -10") + , ("S-", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/zero-brightness.sh") + , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh +10") -- yeganesh launcher -- cgit v1.2.3 From 95dc42fefd9e6311b81852c0041e50574a2bc00e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 26 Oct 2019 10:15:14 -0300 Subject: configuration.nix: Format code with nixfmt --- nixos/configuration.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b5d7092..f4b6a5e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -45,8 +45,7 @@ in { automatic = false; dates = "03:15"; # change to hour? }; - extraOptions = - '' + extraOptions = '' trusted-users = root andreh ''; }; @@ -73,7 +72,8 @@ in { ]; environment.systemPackages = let - all-hies = import (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") {}; + all-hies = import + (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") { }; timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags -- cgit v1.2.3 From b12bac59778ad177ef8c98ed59590cce9440f72e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 26 Oct 2019 23:47:37 -0300 Subject: ps1.sh: Translate 'Changes' in PS1 command --- bash/ps1.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 8487f44..4f4dc1d 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -99,10 +99,10 @@ fi)'$IBlack$Time12h$Color_Off' '$BYellow$PathShort/$Color_Off'\ $(git branch &>/dev/null;\ if [ $? -eq 0 ]; then \ echo "$(\ - echo `git status` | grep "Changes" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ + echo `git status` | grep "Modifications" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ echo `git status` | grep -v "Changes" | grep -E "Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ echo `git status` | grep -v "Changes" | grep -E "Votre branche est en retard" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E -v "Votre branche est en retard|Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ + echo `git status` | grep -v "Modifications" | grep -E -v "Votre branche est en retard|Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ -- cgit v1.2.3 From 56b10cb49d7f80e526a93bd3ca056a71a98ed675 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Oct 2019 14:37:05 -0300 Subject: configuration.nix: Add ormolu package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f4b6a5e..eeda593 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -209,6 +209,7 @@ in { nix-prefetch-git (all-hies.selection { selector = p: { inherit (p) ghc865 ghc864; }; }) hlint + pkgsUnstable.ormolu pkgsUnstable.nix-prefetch-docker elm2nix elmPackages.elm-format -- cgit v1.2.3 From b5754515ae2820e851e14dcea254012582f820d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 28 Oct 2019 16:05:40 -0300 Subject: configuration.nix: Install hie only for ghc865 --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index eeda593..4acb3e1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -207,7 +207,7 @@ in { ghc cabal2nix nix-prefetch-git - (all-hies.selection { selector = p: { inherit (p) ghc865 ghc864; }; }) + (all-hies.selection { selector = p: { inherit (p) ghc865; }; }) hlint pkgsUnstable.ormolu pkgsUnstable.nix-prefetch-docker -- cgit v1.2.3 From 7df3d11acd3257741053a952ade147e1fe5ae55b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 28 Oct 2019 16:06:49 -0300 Subject: Use dante for Haskell backend --- spacemacs.el | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 61d191a..1c125b8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -101,17 +101,9 @@ This function should only modify configuration layer settings." (spell-checking :variables spell-checking-enable-by-default nil spell-checking-enable-auto-dictionary t) - (lsp :variables - default-nix-wrapper (lambda (args) - (append - (append (list "nix-shell" "-I" "." "--command" ) - (list (mapconcat 'identity args " "))) - (list (nix-current-sandbox)))) - - lsp-haskell-process-wrapper-function default-nix-wrapper) (haskell :variables haskell-enable-hindent t - haskell-completion-backend 'lsp + haskell-completion-backend 'dante haskell-process-type 'cabal-new-repl)) ;; List of additional packages that will be installed without being @@ -634,6 +626,7 @@ This is the place where most of your configurations should be done. Unless it is (eval-after-load 'clojure-mode '(set-custom-clj-indent)) (eval-after-load 'midje-mode '(set-custom-clj-indent)) + (add-hook 'dante-mode-hook 'flycheck-mode) (spacemacs/set-leader-keys "p C-r" 'euandreh/projectile-reload-known-projects @@ -825,7 +818,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval modify-syntax-entry 43 "'") -- cgit v1.2.3 From ae208a09327894a6d9cfa44c45a0336691c79a66 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 28 Oct 2019 16:16:36 -0300 Subject: configuration.nix: Add stylish-haskell --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4acb3e1..40faf53 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -213,6 +213,7 @@ in { pkgsUnstable.nix-prefetch-docker elm2nix elmPackages.elm-format + pkgsUnstable.stylish-haskell diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 730d189ce4c8614b2c6e056d50f9174a378702bf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 28 Oct 2019 19:55:25 -0300 Subject: configuration.nix: Upgrade system.stateVersion --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 40faf53..4bc107d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -490,5 +490,5 @@ in { # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.stateVersion = "19.03"; # Did you read the comment? + system.stateVersion = "19.09"; # Did you read the comment? } -- cgit v1.2.3 From 970b01e760174cd6111df6d5a663834d258d9980 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 2 Nov 2019 16:36:02 -0300 Subject: configuration.nix: dump warnings --- nixos/configuration.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4bc107d..717c712 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -246,7 +246,7 @@ in { lame frescobaldi timidityWithEvenMoreFormats - untested-quodlibet-full + # untested-quodlibet-full ## Programming tools @@ -401,6 +401,11 @@ in { }; }; + # trace: warning: The option `services.gnome3.gvfs.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `services.gvfs.enable'. + # trace: warning: The option `services.gnome3.seahorse.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `programs.seahorse.enable'. + # trace: warning: The option `services.gnome3.gnome-terminal-server.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `programs.gnome-terminal.enable'. + # trace: warning: The option `services.gnome3.gnome-documents.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `programs.gnome-documents.enable'. + gnome3 = { gnome-keyring.enable = true; seahorse.enable = true; -- cgit v1.2.3 From 42e615618abe7c8fe057621137d5a4ec401faafc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Nov 2019 17:04:46 -0300 Subject: configuration.nix: Fix services warnings --- nixos/configuration.nix | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 717c712..57e85f2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -359,6 +359,8 @@ in { }; services = { + gvfs.enable = true; + cron.enable = true; # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = localConfiguration.cronJobs; @@ -401,22 +403,12 @@ in { }; }; - # trace: warning: The option `services.gnome3.gvfs.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `services.gvfs.enable'. - # trace: warning: The option `services.gnome3.seahorse.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `programs.seahorse.enable'. - # trace: warning: The option `services.gnome3.gnome-terminal-server.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `programs.gnome-terminal.enable'. - # trace: warning: The option `services.gnome3.gnome-documents.enable' defined in `/etc/nixos/configuration.nix' has been renamed to `programs.gnome-documents.enable'. - gnome3 = { gnome-keyring.enable = true; - seahorse.enable = true; - gnome-terminal-server.enable = true; - # gpaste.enable = true; # clipboard manager tracker.enable = true; sushi.enable = true; # nautilus previewer gnome-online-accounts.enable = true; - gnome-documents.enable = true; evolution-data-server.enable = true; - gvfs.enable = true; }; pcscd.enable = true; # required by yubioath -- cgit v1.2.3 From f5a30a3c516a539fb351bd706f48ebf48fa1e6d8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 3 Nov 2019 18:04:50 -0300 Subject: configuration.nix: Force installation of quodlibet --- nixos/configuration.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 57e85f2..6e6921c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -86,6 +86,9 @@ in { untested-quodlibet-full = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { doInstallCheck = false; doCheck = false; + meta = { + broken = false; + }; }); # Should be removed during fresh OS installation: @@ -246,7 +249,7 @@ in { lame frescobaldi timidityWithEvenMoreFormats - # untested-quodlibet-full + untested-quodlibet-full ## Programming tools -- cgit v1.2.3 From 1963f1385b8cdd024c2f510bcf206746bde2cb16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 4 Nov 2019 08:20:22 -0300 Subject: sync-mail.sh: Run notmuch before running mbsync --- scripts/cron/sync-mail.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index 96bfdbc..ae23604 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -7,6 +7,7 @@ cd "$(dirname "${BASH_SOURCE[0]}")" exec &> /dev/stdout echo "Starting: $(date -Is)" +notmuch new mbsync EuAndreh & mbsync Nubank & mbsync Gmail & -- cgit v1.2.3 From a0d80116f0b53326eb87e6fbb9f6fabd74ca40a8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 4 Nov 2019 08:20:42 -0300 Subject: configuration.nix: Use unstable version of Vagrant --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6e6921c..5b1ef64 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -296,7 +296,7 @@ in { packer docker_compose docker-machine - vagrant + pkgsUnstable.vagrant kubernetes ansible qemu -- cgit v1.2.3 From 4ced25c46afcf68077320d44afe9003f35a34305 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 5 Nov 2019 20:00:14 -0300 Subject: TODOs.org --- TODOs.org | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODOs.org b/TODOs.org index d8ebdfc..a7d3166 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,4 +1,7 @@ * Tasks +** TODO Reproducible setup +*** TODO Add =cachix use=s to configuration.nix: +: substituters = https://cache.nixos.org/ https://miso-haskell.cachix.org https://all-hies.cachix.org ** DOING Simplify the installation of NixOS *** DONE Preparation phase CLOSED: [2019-05-30 Thu 20:17] -- cgit v1.2.3 From 90f2d5ca521f404b740b4dcca56b7c3ab759481c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 5 Nov 2019 20:27:43 -0300 Subject: TODOs.org --- TODOs.org | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.org b/TODOs.org index a7d3166..b63d925 100644 --- a/TODOs.org +++ b/TODOs.org @@ -104,6 +104,7 @@ CLOSED: [2019-06-02 Sun 02:43] The original terminal kill =C-k= is overriden by tmux. *** TODO xmonad **** TODO Show DiskIO and Network in xmobar +**** TODO Show red warning when battery is low **** TODO Spawn xmobar once **** TODO Double-check brightness commands **** TODO Nextcloud out of trayer: where to put it now? -- cgit v1.2.3 From 0b481cb8b5a1f11c6da1390227f7e01c53cd233d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 5 Nov 2019 20:28:31 -0300 Subject: TODOs.org --- TODOs.org | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODOs.org b/TODOs.org index b63d925..e44a0c7 100644 --- a/TODOs.org +++ b/TODOs.org @@ -238,6 +238,9 @@ programs = { LUKS already covers most of my use case and renders eCryptFS not useful. *** TODO Bash **** TODO Remove duplicate ANSI color definitions +**** TODO Optimize reloading =.bashrc= +**** TODO Run =backup.sh= in usurpador +**** TODO Run =archive.sh= in usurpador **** TODO Fix autojump alias installation **** TODO Remove =shellcheck disable= directives **** TODO Make creation of a new shell faster -- cgit v1.2.3 From ca301a0ecfed69074af9afae5f9dcc0e29569cf7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Nov 2019 08:58:32 -0300 Subject: configuration.nix: Enable GnuPG under programs As suggested in: - https://github.com/NixOS/nixpkgs/issues/72597#issuecomment-549060492 --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5b1ef64..7b7c90a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -359,6 +359,7 @@ in { programs = { bash.enableCompletion = true; autojump.enable = true; + gnupg.agent.enable = true; }; services = { -- cgit v1.2.3 From 5c8917c7253eb78c1bfd8dd907f5728fd24b5959 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Nov 2019 08:59:32 -0300 Subject: configuration.nix: Remove pkgsUnstable After changing NixOS channel to be nixos-unstable, there is no more need to have a pkgsUnstable variation of pkgs. --- nixos/configuration.nix | 25 +++++++++++-------------- 1 file changed, 11 insertions(+), 14 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7b7c90a..a33aafb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -1,9 +1,6 @@ { config, pkgs, ... }: let - pkgsUnstable = import (fetchTarball - "https://github.com/NixOS/nixpkgs-channels/archive/nixos-unstable.tar.gz") - { }; localConfiguration = pkgs.callPackage /etc/nixos/local-configuration.nix { }; in { imports = [ # Include the results of the hardware scan. @@ -113,9 +110,9 @@ in { gitAndTools.git-secrets git-crypt git-lfs - pkgsUnstable.gnupg + gnupg mr - pkgsUnstable.nextcloud-client + nextcloud-client borgbackup git-sizer @@ -201,8 +198,8 @@ in { trash-cli qrencode peek # GIF recorder - pkgsUnstable.cachix - pkgsUnstable.cabal-install + cachix + cabal-install entr elmPackages.elm mariadb @@ -212,11 +209,11 @@ in { nix-prefetch-git (all-hies.selection { selector = p: { inherit (p) ghc865; }; }) hlint - pkgsUnstable.ormolu - pkgsUnstable.nix-prefetch-docker + ormolu + nix-prefetch-docker elm2nix elmPackages.elm-format - pkgsUnstable.stylish-haskell + stylish-haskell diffoscope poppler_utils # used by diffoscope for comparing PDF files @@ -227,7 +224,7 @@ in { ## Mail - pkgsUnstable.notmuch + notmuch isync procmail # includes =formail= @@ -296,7 +293,7 @@ in { packer docker_compose docker-machine - pkgsUnstable.vagrant + vagrant kubernetes ansible qemu @@ -324,13 +321,13 @@ in { inkscape calibre - pkgsUnstable.cozy + cozy gpodder firefox emacs tdesktop vlc - pkgsUnstable.keepassxc + keepassxc yubioath-desktop # tor-browser-bundle-bin libreoffice -- cgit v1.2.3 From 3f169539de8b68bb82c7bf2561abc9e1975ed8e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Nov 2019 08:59:54 -0300 Subject: gc-mail.sh: Run notmuch new after erasing files of deleted emails If gc-mail.sh is ran twice, the second time would try to erase files that were already erased. Running 'notmuch new' after erasing the files we need to update the index, and 'notmuch new' does that here. --- scripts/ad-hoc/gc-mail.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/gc-mail.sh b/scripts/ad-hoc/gc-mail.sh index df29295..f716220 100755 --- a/scripts/ad-hoc/gc-mail.sh +++ b/scripts/ad-hoc/gc-mail.sh @@ -3,3 +3,4 @@ # Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ yellow "Clean up deleted email files" notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" +notmuch new -- cgit v1.2.3 From 5d89facd737b011d71dddffeae9ac0a441d6ff48 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Nov 2019 09:04:29 -0300 Subject: gc.sh: Move Nix GC into it's own file --- scripts/ad-hoc/gc-nix.sh | 16 ++++++++++++++++ scripts/ad-hoc/gc.sh | 15 +-------------- 2 files changed, 17 insertions(+), 14 deletions(-) create mode 100755 scripts/ad-hoc/gc-nix.sh diff --git a/scripts/ad-hoc/gc-nix.sh b/scripts/ad-hoc/gc-nix.sh new file mode 100755 index 0000000..99d3ad9 --- /dev/null +++ b/scripts/ad-hoc/gc-nix.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +yellow "Cleaning up the NixOS store" + +profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) + +for p in "${profiles[@]}"; do + sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" +done + +# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= +nix-env --delete-generations old + +nix-store --gc +nix-collect-garbage -d diff --git a/scripts/ad-hoc/gc.sh b/scripts/ad-hoc/gc.sh index ffee10b..4793ff7 100755 --- a/scripts/ad-hoc/gc.sh +++ b/scripts/ad-hoc/gc.sh @@ -6,20 +6,7 @@ disk_space() { before=$(disk_space) -yellow "Cleaning up the NixOS store" - -profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) - -for p in "${profiles[@]}"; do - sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" -done - -# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= -nix-env --delete-generations old - -nix-store --gc -nix-collect-garbage -d - +gc-nix.sh yellow "Cleaning up Guix store" -- cgit v1.2.3 From 4c1c9d743b70e8453c8327877fe8720666958fa2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Nov 2019 10:02:14 -0300 Subject: configuration.nix: Remove newsboat package --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a33aafb..dc07263 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -269,7 +269,6 @@ in { go_bootstrap bats ledger - newsboat perl dhall dhall-json -- cgit v1.2.3 From e2d7334970f92ff701ac8a548ca7123289bd9246 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 8 Nov 2019 13:11:12 -0300 Subject: configuration.nix: Comment swift package The build is broken --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dc07263..a085ba4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -278,7 +278,7 @@ in { rustracer xsel nodejs-10_x - swift + # swift gocode jetbrains.idea-community scala -- cgit v1.2.3 From 2adf6e2a583329271b3668a2480ff4d5a19f392f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 13:08:18 -0300 Subject: configuration.nix: Install crate2nix --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a085ba4..4177d6f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -93,11 +93,14 @@ in { nixfmt = import (fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; + crate2nix = import (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; + # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; [ nixfmt + crate2nix ## Personal data tools -- cgit v1.2.3 From 842c22e1abe684ee365d2ee7f37536d320095fa8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 13:08:48 -0300 Subject: configuration.nix: Use nixfmt from nixpkgs --- nixos/configuration.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4177d6f..1d13b87 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -88,11 +88,6 @@ in { }; }); - # Should be removed during fresh OS installation: - # https://github.com/NixOS/nix/issues/2497 - nixfmt = import - (fetchTarball "https://github.com/serokell/nixfmt/archive/master.tar.gz") - { }; crate2nix = import (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; -- cgit v1.2.3 From ef67f7d4cade88326337ac664e9e98f7a222c0dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 13:09:06 -0300 Subject: configuration.nix: Uninstall mariadb --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1d13b87..04f647b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -200,7 +200,6 @@ in { cabal-install entr elmPackages.elm - mariadb now-cli ghc cabal2nix -- cgit v1.2.3 From d3d95b5672dec996967201909f8e661d5da2c031 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 13:09:27 -0300 Subject: configuration.nix: install carnix and pinentry --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 04f647b..c654dd3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -272,6 +272,7 @@ in { nodePackages.node2nix shellcheck # (haskell.lib.justStaticExecutables haskellPackages.github-backup) + carnix rustracer xsel nodejs-10_x @@ -283,6 +284,7 @@ in { heroku jekyll ruby + pinentry ## Containers and VMs -- cgit v1.2.3 From ef551b448667692e6df03680c583dab96c2e338f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 13:10:11 -0300 Subject: configuration.nix: Format source code (linter offense) --- nixos/configuration.nix | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c654dd3..25f115e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -83,13 +83,11 @@ in { untested-quodlibet-full = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { doInstallCheck = false; doCheck = false; - meta = { - broken = false; - }; + meta = { broken = false; }; }); - crate2nix = import (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; - + crate2nix = import + (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; -- cgit v1.2.3 From 24ea79e9e91181e2fabbc1e8e59be3ce9f25d560 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 20:35:17 -0300 Subject: configuration.nix: Install wasm-pack --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 25f115e..6304a5f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -209,6 +209,7 @@ in { elm2nix elmPackages.elm-format stylish-haskell + wasm-pack diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 8ddd805feb24a69b02293716b1b8b3a0c27216ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Nov 2019 20:35:25 -0300 Subject: configuration.nix: Install Swift from 19.09 --- nixos/configuration.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6304a5f..c27d52b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -69,6 +69,11 @@ in { ]; environment.systemPackages = let + pkgs-19-09 = import(pkgs.fetchzip { + url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; + sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; + }) {}; + all-hies = import (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") { }; @@ -92,6 +97,8 @@ in { # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; [ + pkgs-19-09.swift + nixfmt crate2nix -- cgit v1.2.3 From ec258277d8e7aec85b617fd8029222eec99f5761 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Nov 2019 05:06:12 -0300 Subject: Rename network-manager -> NetworkManager From the NixOS 19.09 [Release Notes][0]: The NetworkManager systemd unit was renamed back from network-manager.service to NetworkManager.service for better compatibility with other applications expecting this name. The same applies to ModemManager where modem-manager.service is now called ModemManager.service again. [0]: https://nixos.org/nixos/manual/release-notes.html#sec-release-19.09-incompatibilities --- xmonad/xmonad.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index fba06f4..d486ba6 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -66,7 +66,7 @@ myKeyPBindings = , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/three-monitors.sh") -- restart network - , ("M-x", spawn "gksudo -S systemctl restart network-manager") + , ("M-x", spawn "gksudo -S systemctl restart NetworkManager") -- Toggle appearence of xmobar -- https://stackoverflow.com/a/27646652 -- cgit v1.2.3 From 5099be5b5754d884f631bc6bd3ff8fc5f3f2b936 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Nov 2019 07:19:38 -0300 Subject: utils.nix: Use nixfmt from pkgs --- utils.nix | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/utils.nix b/utils.nix index 7e3a6db..6eba389 100644 --- a/utils.nix +++ b/utils.nix @@ -1,7 +1,4 @@ { pkgs, src, baseName }: -let - nixfmt = import (builtins.fetchTarball - "https://github.com/serokell/nixfmt/archive/master.tar.gz") { }; in rec { baseTask = pkgs.stdenv.mkDerivation { name = "${baseName}-task"; @@ -26,7 +23,7 @@ in rec { }); formatNix = baseTask.overrideAttrs (baseAttrs: { name = "${baseAttrs.name}-nixfmt"; - buildInputs = baseAttrs.buildInputs ++ [ nixfmt ]; + buildInputs = baseAttrs.buildInputs ++ [ pkgs.nixfmt ]; buildPhase = '' format() { nix_file="$1" -- cgit v1.2.3 From 2e3a2f3bb6cbdef068f74d822181b5691791854e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Nov 2019 07:19:49 -0300 Subject: configuration.nix: Format (nixfmt linter offense) --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c27d52b..a19fc7b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -69,10 +69,10 @@ in { ]; environment.systemPackages = let - pkgs-19-09 = import(pkgs.fetchzip { + pkgs-19-09 = import (pkgs.fetchzip { url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; - }) {}; + }) { }; all-hies = import (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") { }; -- cgit v1.2.3 From ab05fb5913d60f9ee373b9d80c278140557583af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Nov 2019 07:20:58 -0300 Subject: utils.nix: Format with nixfmt (linter offense) --- utils.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/utils.nix b/utils.nix index 6eba389..5bcbb10 100644 --- a/utils.nix +++ b/utils.nix @@ -1,5 +1,4 @@ -{ pkgs, src, baseName }: -in rec { +{ pkgs, src, baseName }: rec { baseTask = pkgs.stdenv.mkDerivation { name = "${baseName}-task"; src = src; -- cgit v1.2.3 From f5085675e36ab695fe19742917ca6c82bb7169de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Nov 2019 08:55:35 -0300 Subject: configuration.nix: Remove packages using fetchTarball --- nixos/configuration.nix | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a19fc7b..6e2d399 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -74,8 +74,8 @@ in { sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; }) { }; - all-hies = import - (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") { }; + # all-hies = import + # (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") { }; timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags @@ -91,8 +91,8 @@ in { meta = { broken = false; }; }); - crate2nix = import - (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; + # crate2nix = import + # (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; @@ -100,7 +100,7 @@ in { pkgs-19-09.swift nixfmt - crate2nix + # crate2nix ## Personal data tools @@ -209,7 +209,7 @@ in { ghc cabal2nix nix-prefetch-git - (all-hies.selection { selector = p: { inherit (p) ghc865; }; }) + # (all-hies.selection { selector = p: { inherit (p) ghc865; }; }) hlint ormolu nix-prefetch-docker -- cgit v1.2.3 From de45eaddb31d2eeec4e91113568e7afaacafac07 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Nov 2019 08:56:54 -0300 Subject: configuration.nix: Remove commented code --- nixos/configuration.nix | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6e2d399..6b2e849 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -74,9 +74,6 @@ in { sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; }) { }; - # all-hies = import - # (fetchTarball "https://github.com/infinisil/all-hies/tarball/master") { }; - timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; @@ -90,17 +87,11 @@ in { doCheck = false; meta = { broken = false; }; }); - - # crate2nix = import - # (fetchTarball "https://github.com/kolloch/crate2nix/tarball/master") { }; - - # https://github.com/nixos/nixpkgs/blob/0d202221f98e500f1df79112dc464d013eefcdae/pkgs/development/web/nodejs/v10.nix#L4 in with pkgs; [ pkgs-19-09.swift nixfmt - # crate2nix ## Personal data tools @@ -209,7 +200,6 @@ in { ghc cabal2nix nix-prefetch-git - # (all-hies.selection { selector = p: { inherit (p) ghc865; }; }) hlint ormolu nix-prefetch-docker -- cgit v1.2.3 From dd7656c8d403ceed951a856dbb6ce5c6be086b10 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Nov 2019 08:58:48 -0300 Subject: fake-symlink.sh: Remove cement from SRHT_REPOS list --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index bfba3ad..630fadf 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -4,7 +4,7 @@ if [[ -n "${GITHUB_TOKEN}" ]]; then envsubst < "${DOTFILES}/git/gitconfig.ini" > ~/.gitconfig fi -SRHT_REPOS=(website cement dotfiles vps songbooks) +SRHT_REPOS=(website dotfiles vps songbooks) SRHT_REPOS_PATH="${HOME}/dev/libre" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From ef8bbf23a05dd387b989a6d36dbed975e0eb647a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Nov 2019 09:08:23 -0300 Subject: fake-symlinks.sh: Copy utils.nix to cement and pires --- bash/fake-symlinks.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 630fadf..073a758 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -7,6 +7,9 @@ fi SRHT_REPOS=(website dotfiles vps songbooks) SRHT_REPOS_PATH="${HOME}/dev/libre" +cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/cement/utils.nix" +cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/pires/utils.nix" + for repo in "${SRHT_REPOS[@]}"; do if [[ "${repo}" != "vps" ]] && [[ "${repo}" != "songbooks" ]]; then REPO="${repo}" envsubst < "${DOTFILES}/templates/sr-ht-build.yaml" > "${SRHT_REPOS_PATH}/${repo}/.build.yml" -- cgit v1.2.3 From 6c3e7092c63c8c96d9fa8eb0099817f7cb60ea46 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Nov 2019 17:18:13 -0300 Subject: configuration.nix: Add ZFS package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6b2e849..a77a02f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -207,6 +207,7 @@ in { elmPackages.elm-format stylish-haskell wasm-pack + zfs diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 01087d0ef41b5952466a9e695ac15ff3bcc87b37 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Nov 2019 08:28:25 -0300 Subject: configuration.nix: Install Fossil package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a77a02f..e0b27a1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -208,6 +208,7 @@ in { stylish-haskell wasm-pack zfs + fossil diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 4feb4ad8662c6791abee250f143b6c7360028ac1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Nov 2019 13:40:28 -0300 Subject: gitconfig.ini: Add diff for SQLite databases Taken from: - https://stackoverflow.com/questions/13271643/git-hook-for-diff-sqlite-table --- git/gitconfig.ini | Bin 1805 -> 1950 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 630c762..e4cd5c5 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 230ef04bd1a3e662ae4cc4ea4a04106427cb8aae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Nov 2019 14:23:15 -0300 Subject: Git: Add full configuration for SQLite diff --- git/gitattributes | 3 ++- git/gitconfig.ini | Bin 1950 -> 1990 bytes 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/git/gitattributes b/git/gitattributes index ab91280..7c2eb07 100644 --- a/git/gitattributes +++ b/git/gitattributes @@ -1,3 +1,4 @@ *.gif diff=image *.jpg diff=image -*.png diff=image \ No newline at end of file +*.png diff=image +*.db diff=sqlite3 diff --git a/git/gitconfig.ini b/git/gitconfig.ini index e4cd5c5..fa3f03e 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 38763a7d842bccd1b10035c29d27560f9f790a39 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Nov 2019 23:56:13 -0300 Subject: .gitattributes: Diff .fossil files with SQLite dump --- git/gitattributes | 1 + 1 file changed, 1 insertion(+) diff --git a/git/gitattributes b/git/gitattributes index 7c2eb07..df03777 100644 --- a/git/gitattributes +++ b/git/gitattributes @@ -2,3 +2,4 @@ *.jpg diff=image *.png diff=image *.db diff=sqlite3 +*.fossil diff=sqlite3 -- cgit v1.2.3 From c4eb9847ec4cd838bdf6ba35a1dba0ac638a45be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Nov 2019 14:17:45 -0300 Subject: spacemacs.el: Improve color scheme of todo keywords --- spacemacs.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 1c125b8..8ed5dde 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -743,9 +743,9 @@ This is the place where most of your configurations should be done. Unless it is ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "MEETING" "INACTIVE" "CANCELLED" "DOING" "|" "DONE")) - org-todo-keyword-faces '(("TODO" . (:foreground "orange" :weight bold)) + org-todo-keyword-faces '(("TODO" . (:foreground "brown" :weight bold)) - ("DOING" . (:foreground "white" :weight bold)) + ("DOING" . (:foreground "yellow" :weight bold)) ("WAITING" . (:foreground "white" :weight bold)) ("MEETING" . (:foreground "white" :weight bold)) -- cgit v1.2.3 From 6a7e3cd2ef4355bfed27fb00104a5a36050e2265 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Nov 2019 18:05:31 -0300 Subject: TODOs.org --- TODOs.org | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index e44a0c7..19a8857 100644 --- a/TODOs.org +++ b/TODOs.org @@ -256,7 +256,9 @@ CLOSED: [2019-05-30 Thu 23:16] ***** CANCELLED Generate yaml from Dhall No need, =envsubst= suffice *** TODO Git -**** TODO Configure =diffoscope= to diff SQLite files +**** DONE Configure =diffoscope= to diff SQLite files +CLOSED: [2019-11-20 mer. 18:04] +Using =sqlite file.db .dump= instead. **** TODO Remove dangling encrypted files **** TODO Make =mrconfig= checkout from HD, fallback to =origin= than change the =origin= remote **** DONE Remove borg content from repository -- cgit v1.2.3 From 87cc4cdcc11df66dbcaf4f4b45c541068534cc11 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Nov 2019 16:43:21 -0300 Subject: configuration.nix: Add tcl package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e0b27a1..2c9b057 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -209,6 +209,7 @@ in { wasm-pack zfs fossil + tcl diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From dacca76a603375f0c01ccc809a724739ce401e8e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Nov 2019 16:34:20 -0300 Subject: aliases.sh: Add 'sqlite' alias --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index e00cf57..f0a0737 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -28,6 +28,7 @@ alias m="sync-mail.sh" alias a="atom.sh" alias n="nextcloud.sh" alias sb="songbooks" +alias sqlite="rlwrap sqlite3" alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" -- cgit v1.2.3 From c268e704e6030890de49613b82390bca6343295c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Nov 2019 16:34:33 -0300 Subject: configuration.nix: Add 'tk' package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2c9b057..ca249e5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -210,6 +210,7 @@ in { zfs fossil tcl + tk diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From b37b1513e99d7618cdb925653602df1f0579c550 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 28 Nov 2019 15:20:29 -0300 Subject: Add git-tarball command as a specific usage of git archive --- git/gitconfig.ini | Bin 1990 -> 2018 bytes scripts/ad-hoc/git-tarball.sh | 7 +++++++ 2 files changed, 7 insertions(+) create mode 100755 scripts/ad-hoc/git-tarball.sh diff --git a/git/gitconfig.ini b/git/gitconfig.ini index fa3f03e..4d6676d 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ diff --git a/scripts/ad-hoc/git-tarball.sh b/scripts/ad-hoc/git-tarball.sh new file mode 100755 index 0000000..f1b12df --- /dev/null +++ b/scripts/ad-hoc/git-tarball.sh @@ -0,0 +1,7 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +REPO="$(basename "$(git rev-parse --show-toplevel)")" +BRANCH="$(git rev-parse --abbrev-ref HEAD)" + +git archive --prefix="${REPO}-${BRANCH}/" -o "./${REPO}.tar.gz" "${BRANCH}" -- cgit v1.2.3 From 4465e66d86cc1a96d553a404e12d7fa9ec178eab Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Nov 2019 08:15:35 -0300 Subject: Add hgrc.ini configuration file and add symlink to it --- bash/symlinks.sh | 3 +++ mercurial/hgrc.ini | 2 ++ 2 files changed, 5 insertions(+) create mode 100644 mercurial/hgrc.ini diff --git a/bash/symlinks.sh b/bash/symlinks.sh index aa36571..053c3a9 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -57,3 +57,6 @@ mkdir -p ~/.xmonad ln -fs "$DOTFILES/xmonad/xsession.sh" ~/.xsession ln -fs "$DOTFILES/xmonad/xmonad.hs" ~/.xmonad/xmonad.hs ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc + +## Mercurial +ln -fs "${DOTFILES}/mercurial/hgrc.ini" ~/.hgrc diff --git a/mercurial/hgrc.ini b/mercurial/hgrc.ini new file mode 100644 index 0000000..656f40b --- /dev/null +++ b/mercurial/hgrc.ini @@ -0,0 +1,2 @@ +[ui] +username = EuAndreh -- cgit v1.2.3 From eecf7a7387b738f62a91636aa5a080e34b6f195c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Dec 2019 22:47:14 -0300 Subject: Remove global diffing configuration for SQLite databases --- git/gitattributes | 2 -- 1 file changed, 2 deletions(-) diff --git a/git/gitattributes b/git/gitattributes index df03777..6ef9672 100644 --- a/git/gitattributes +++ b/git/gitattributes @@ -1,5 +1,3 @@ *.gif diff=image *.jpg diff=image *.png diff=image -*.db diff=sqlite3 -*.fossil diff=sqlite3 -- cgit v1.2.3 From 75a46c30b08bde5c3309f4d1b1f5c671361ba802 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 21 Dec 2019 21:19:40 -0300 Subject: configuration.nix: Add fractal client --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ca249e5..b64f895 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -211,6 +211,7 @@ in { fossil tcl tk + fractal diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From a7171c8b82d193265511c66958cb56871faf970f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Dec 2019 11:09:13 -0300 Subject: configuration.nix: Upgrade to newer format --- nixos/configuration.nix | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b64f895..a5e5662 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -47,10 +47,13 @@ in { ''; }; + console = { + keyMap = "br-abnt2"; + font = "Lat2-Terminus16"; + }; + # Select internationalisation properties. i18n = { - consoleFont = "Lat2-Terminus16"; - consoleKeyMap = "br-abnt2"; defaultLocale = "fr_FR.UTF-8"; }; @@ -378,17 +381,17 @@ in { EndSection ''; - windowManager.default = "xmonad"; windowManager.xmonad = { enable = true; enableContribAndExtras = true; }; desktopManager = { - default = "none"; xterm.enable = false; gnome3.enable = true; }; displayManager = { + defaultSession = "none+xmonad"; + lightdm.enable = true; # The config inception was inspired by: -- cgit v1.2.3 From 984a3e56bdfd9deb3c08e46672781a75809d54df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Dec 2019 11:32:13 -0300 Subject: configuration.nix: Comment broken packages --- nixos/configuration.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a5e5662..65072d2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -198,13 +198,13 @@ in { cachix cabal-install entr - elmPackages.elm + # elmPackages.elm now-cli ghc cabal2nix nix-prefetch-git hlint - ormolu + # ormolu nix-prefetch-docker elm2nix elmPackages.elm-format @@ -259,7 +259,7 @@ in { yarn elixir openjdk - solc + # solc bundler rustup cargo -- cgit v1.2.3 From 0f053ba08f78c2cf58f98716ad13889ac0217d51 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Dec 2019 14:32:12 -0300 Subject: configuration.nix: Fix formating (nixfmt offense) --- nixos/configuration.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 65072d2..f9774a5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -53,9 +53,7 @@ in { }; # Select internationalisation properties. - i18n = { - defaultLocale = "fr_FR.UTF-8"; - }; + i18n = { defaultLocale = "fr_FR.UTF-8"; }; # Set your time zone. time.timeZone = "America/Sao_Paulo"; -- cgit v1.2.3 From 9716a266afdf3cb2fe9795bfe15d3151161ca70e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 29 Dec 2019 09:02:54 -0300 Subject: spacemacs.el: Update generated section --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 8ed5dde..5465028 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -818,7 +818,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval modify-syntax-entry 43 "'") -- cgit v1.2.3 From 1ac8dd32468c35c9b2511ec5b3f35ef251d1efbf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 29 Dec 2019 09:04:36 -0300 Subject: xmonad/xmonad.hs: Use dm-tool switch-to-greeter for locking screen --- xmonad/xmonad.hs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index d486ba6..f439383 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -52,7 +52,7 @@ myKeyPBindings = , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") -- Lock screen - , ("C-M-l", spawn "dm-tool lock & systemctl suspend") + , ("C-M-l", spawn "dm-tool switch-to-greeter") -- print whole screen , ("M-", spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png") -- cgit v1.2.3 From a6b6bedb995f3e31bda685a38c921f961ab181bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 29 Dec 2019 09:05:18 -0300 Subject: nixos/configuration.nix: Remove fractal and install mercurialFull --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f9774a5..d63e40d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -95,6 +95,7 @@ in { nixfmt ## Personal data tools + mercurialFull gitAndTools.git-open gitAndTools.gitFull @@ -212,7 +213,6 @@ in { fossil tcl tk - fractal diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From d9d1221d229f850858aeddd0b6e8f6ff3fd4309e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 29 Dec 2019 09:06:06 -0300 Subject: nixos/configuration.nix: Disable sap for bluetooth --- nixos/configuration.nix | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d63e40d..8f4ab8b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -22,8 +22,16 @@ in { }; }; - hardware = { - bluetooth.enable = true; + hardware = let + customBluez = pkgs.bluez.overrideAttrs (oldAttrs: { + configureFlags = + builtins.filter (s: s != "--enable-sap") oldAttrs.configureFlags; + }); + in { + bluetooth = { + enable = true; + package = customBluez; + }; pulseaudio = { package = pkgs.pulseaudioFull; enable = true; -- cgit v1.2.3 From 5f4537fe845e9e6fef4869e1b47f67abc764171b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 29 Dec 2019 09:17:13 -0300 Subject: Remove songbooks repo from SRHT_REPOS --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 073a758..2ff01dc 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -4,7 +4,7 @@ if [[ -n "${GITHUB_TOKEN}" ]]; then envsubst < "${DOTFILES}/git/gitconfig.ini" > ~/.gitconfig fi -SRHT_REPOS=(website dotfiles vps songbooks) +SRHT_REPOS=(website dotfiles vps) SRHT_REPOS_PATH="${HOME}/dev/libre" cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/cement/utils.nix" -- cgit v1.2.3 From 9382d02ff24bf20387279f74c112d81aa584291f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 29 Dec 2019 17:20:14 -0300 Subject: tmuxinator annex.yml: Comment pires section --- tmux/projects/annex.yml | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index a975506..dff9dfa 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -17,20 +17,20 @@ windows: - reload - annex: - git status - - pires: - root: ~/dev/libre/pires/ - layout: main-vertical - panes: - - misc: - - s - - client: - - cd client/ - - elm reactor - - server: - - cd server - - nix-shell --run 'cabal run' - - root: - - s + # - pires: + # root: ~/dev/libre/pires/ + # layout: main-vertical + # panes: + # - misc: + # - s + # - client: + # - cd client/ + # - elm reactor + # - server: + # - cd server + # - nix-shell --run 'cabal run' + # - root: + # - s # - vps: # root: ~/dev/libre/vps/ # layout: main-vertical -- cgit v1.2.3 From eed357bf7c5ab6ae8c9e0e1e8bc08a531e9455ad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 5 Jan 2020 15:57:36 -0300 Subject: xmonad: Use ResizableTile to vertically resize non-master panes --- xmonad/xmonad.hs | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index f439383..ccabb80 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -6,6 +6,8 @@ import XMonad.Layout.NoBorders import XMonad.Hooks.SetWMName import XMonad.Hooks.ManageHelpers import XMonad.Util.Run(spawnPipe) +import XMonad.Layout.ResizableTile +import XMonad.Layout.ResizableTile(MirrorResize(MirrorShrink, MirrorExpand)) main :: IO () main = do @@ -15,7 +17,7 @@ main = do -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def , handleEventHook = handleEventHook def <+> docksEventHook - , layoutHook = smartBorders $ avoidStruts $ layoutHook def + , layoutHook = myLayoutHook , modMask = mod4Mask -- User Super instead of Alt , terminal = myTerminal , startupHook = myStartup @@ -72,9 +74,22 @@ myKeyPBindings = -- https://stackoverflow.com/a/27646652 , ("M-f", sendMessage ToggleStruts) - , ("M-a", spawn dbg) + , ("M-ç", spawn dbg) + + -- Vertically resize, taken from: + -- https://stackoverflow.com/questions/25857674/xmonad-vertical-resize-tile-window + , ("M-a", sendMessage MirrorExpand) + , ("M-z", sendMessage MirrorShrink) ] +myLayoutHook = + smartBorders $ avoidStruts $ (tiled ||| Mirror tiled ||| Full) + where + tiled = ResizableTall nmaster delta ratio [] + nmaster = 1 + delta = 3/100 + ratio = 1/2 + myStartup :: X () myStartup = do -- Taken from: -- cgit v1.2.3 From 423779201978f4dd97be0729c56d7fd7c306f3a8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 5 Jan 2020 15:58:01 -0300 Subject: common.nix: Run mail sync job every 15 minutes --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index cb263a3..2504d83 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,7 +2,7 @@ cron = { # Sync emails with mbsync every hour mail = - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = -- cgit v1.2.3 From 0edae543176e2ff1b865f40555915a8850db37d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 5 Jan 2020 15:58:33 -0300 Subject: Add scripts/ad-hoc/bt.sh --- scripts/ad-hoc/bt.sh | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) create mode 100755 scripts/ad-hoc/bt.sh diff --git a/scripts/ad-hoc/bt.sh b/scripts/ad-hoc/bt.sh new file mode 100755 index 0000000..e1baa47 --- /dev/null +++ b/scripts/ad-hoc/bt.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +echo 1 +bluetoothctl -- remove 00:02:BF:03:B8:9A ||: +echo 2 +bluetoothctl --timeout 10 -- scan on +echo 3 +bluetoothctl -- pair 00:02:BF:03:B8:9A +echo 5 +bluetoothctl -- trust 00:02:BF:03:B8:9A +echo 6 +bluetoothctl -- connect 00:02:BF:03:B8:9A +echo 7 + +# gnome-control-center -- cgit v1.2.3 From ee8f54afec30ac4d4f074fbe3a1b6da2620d448c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 5 Jan 2020 15:58:42 -0300 Subject: Add hacking.yml tmuxinator template --- tmux/projects/hacking.yml | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 tmux/projects/hacking.yml diff --git a/tmux/projects/hacking.yml b/tmux/projects/hacking.yml new file mode 100644 index 0000000..5b5d1b4 --- /dev/null +++ b/tmux/projects/hacking.yml @@ -0,0 +1,28 @@ +name: hacking + +windows: + - songbooks: + root: ~/dev/libre/songbooks/ + layout: main-horizontal + panes: + - main: + - guix environment -l shell.scm + - nix-shell -p lilypond + - misc: + - git status + - mediator: + root: ~/dev/libre/mediator/ + layout: main-horizontal + panes: + - main: + - . .envrc + - misc: + - . .envrc + - auth-couchdb: + root: ~/dev/libre/auth-couchdb/ + layout: main-horizontal + panes: + - main: + - git status + - misc: + - git status -- cgit v1.2.3 From 178240b7583f277affb90dee862bfe0bbd094864 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 5 Jan 2020 15:58:57 -0300 Subject: bash/aliases.sh: Add 'p' and 'c' aliases --- bash/aliases.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index f0a0737..6c9a808 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -29,6 +29,8 @@ alias a="atom.sh" alias n="nextcloud.sh" alias sb="songbooks" alias sqlite="rlwrap sqlite3" +alias p='ping euandre.org -c 3' +alias c='tmux send-keys -R \; clear-history' alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" -- cgit v1.2.3 From 89a6b989e0c6374e18dd835fca15d1026f685921 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:32:17 -0300 Subject: configuration.nix: Remove unused packages (broken Rust build) --- nixos/configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8f4ab8b..8d88e11 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -110,7 +110,6 @@ in { gitAndTools.diff-so-fancy gitAndTools.git-annex gitAndTools.gitRemoteGcrypt - gitAndTools.git-dit gitAndTools.git-secrets git-crypt git-lfs @@ -283,7 +282,6 @@ in { shellcheck # (haskell.lib.justStaticExecutables haskellPackages.github-backup) carnix - rustracer xsel nodejs-10_x # swift -- cgit v1.2.3 From 6b9cc76ea7022a66f07a1d73c3160786d2b54347 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:32:49 -0300 Subject: configuration.nix: Remove broken unused cachix package --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8d88e11..c7bac3d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -201,7 +201,6 @@ in { trash-cli qrencode peek # GIF recorder - cachix cabal-install entr # elmPackages.elm -- cgit v1.2.3 From 19d79ee14611e4d29fc037051c3b31be3054853a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:34:18 -0300 Subject: configuration.nix: Remove broken ormolu package --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c7bac3d..9b740f8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -209,7 +209,6 @@ in { cabal2nix nix-prefetch-git hlint - # ormolu nix-prefetch-docker elm2nix elmPackages.elm-format -- cgit v1.2.3 From 4f698d9c33178b956da0e9aae622f86ebc4a13b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:34:39 -0300 Subject: configuration.nix: Uncomment Elm --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9b740f8..3d5838a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -203,7 +203,7 @@ in { peek # GIF recorder cabal-install entr - # elmPackages.elm + elmPackages.elm now-cli ghc cabal2nix -- cgit v1.2.3 From d92d38e88b8a5aeb4c3cc4192dda41f7ee7b976e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:34:49 -0300 Subject: configuration.nix: Add Zig language package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3d5838a..d164fbf 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -291,6 +291,7 @@ in { jekyll ruby pinentry + zig ## Containers and VMs -- cgit v1.2.3 From 8d4181d679fda397c2087d91e45d47b1323ce734 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:35:15 -0300 Subject: env.sh: Change GUIX_PROFILE loadingg --- bash/env.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index a3e5aeb..a18edd0 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -66,10 +66,10 @@ isLinux && { # Guix # -export GUIX_PROFILE="$HOME/.guix-profile/etc/profile" +GUIX_PROFILE="/home/andreh/.guix-profile" isLinux && { # shellcheck disable=SC1090 - source "$GUIX_PROFILE" + . "$GUIX_PROFILE/etc/profile" } export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" -- cgit v1.2.3 From 1c4b4cebdee1fdd2c83a8b59c798c350c0117c27 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:35:32 -0300 Subject: spacemacs.el: Add 'scissors command alias to 'message-mark-inserted-region --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 5465028..b09aa6f 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -573,6 +573,8 @@ dump." (save-buffer) (cider-eval-buffer)) +(defalias 'scissors 'message-mark-inserted-region) + (defvar paredit-modes '(lisp-mode lisp-interaction-mode emacs-lisp-mode -- cgit v1.2.3 From 1b8ee6e8f142dea3c4f80d4bdce8e9438b4f593b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:36:17 -0300 Subject: spacemacs.el: Add Dreams.org org-mode capture file --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index b09aa6f..574bb57 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -761,6 +761,7 @@ This is the place where most of your configurations should be done. Unless it is org-scratch-notes-file "~/annex/txt/TODOs.org" org-diary-notes-file "~/annex/txt/Diary.org" org-decision-notes-file "~/annex/txt/Decisions.org" + org-dream-notes-file "~/annex/txt/Dreams.org" org-capture-templates '(("t" "TODO" entry (file org-default-notes-file) "* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t) ("s" "Scratch" entry (file org-scratch-notes-file) @@ -771,6 +772,8 @@ This is the place where most of your configurations should be done. Unless it is "* %?\n%U\n" :clock-in t :clock-resume t) ("D" "Decision" entry (file+datetree org-decision-notes-file) "* %?\n%U\n" :clock-in t :clock-resume t) + ("S" "Dream" entry (file+datetree org-dream-notes-file) + "* %?\n%U\n" :clock-in t :clock-resume t) ("i" "Idea" entry (file org-default-notes-file) "* %? :IDEA: \n%t" :clock-in t :clock-resume t) ("n" "Next Task" entry (file+headline org-default-notes-file "Tasks") -- cgit v1.2.3 From 05c8ab264f8189f656f5c28091e2c49e66d0990d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:36:37 -0300 Subject: spacemacs.el: WIP Add Guix repo to Guile load path --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 574bb57..0a3b526 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -626,6 +626,9 @@ dump." This function is called at the very end of Spacemacs initialization after layers configuration. This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." + (with-eval-after-load 'geiser-guile + (add-to-list 'geiser-guile-load-path "~/guix/guix")) + (eval-after-load 'clojure-mode '(set-custom-clj-indent)) (eval-after-load 'midje-mode '(set-custom-clj-indent)) (add-hook 'dante-mode-hook 'flycheck-mode) -- cgit v1.2.3 From 93484a019d088697e9e9d163e91c4db6511190a0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:37:31 -0300 Subject: spacemacs.el: Use custom search filter for elfeed --- spacemacs.el | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 0a3b526..f726abf 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -785,7 +785,10 @@ This is the place where most of your configurations should be done. Unless it is ;; Make splitting vertically more likely on smaller (velhinho) screens split-width-threshold 120 - ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared"))) + ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared")) + + browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url + elfeed-search-filter "@2020-01-01--0-day-ago +unread -news ") (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From a298d109b994f9594bb6113e03e455619605a4dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:38:19 -0300 Subject: spacemacs.el: WIP Configure Guile with geiser --- spacemacs.el | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index f726abf..110ddb0 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -809,8 +809,7 @@ This is the place where most of your configurations should be done. Unless it is (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) (with-eval-after-load 'yasnippet (add-to-list 'yas-snippet-dirs "~/dev/guix/guix/etc/snippets")) - ; (setq geiser-active-implementations '(guile)) - (add-hook 'scheme-mode-hook 'guix-devel-mode) + (setq geiser-active-implementations '(guile)) (with-eval-after-load 'info-lookup-mode (turn-off-evil-mode)) -- cgit v1.2.3 From f78ad4c7e75a7bb114891566d4c0b30f385fea18 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:38:58 -0300 Subject: spacemacs.el: Add ERC layer for IRC --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 110ddb0..155863f 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -53,6 +53,7 @@ This function should only modify configuration layer settings." (elfeed :variables rmh-elfeed-org-files '("~/.emacs.d/private/elfeed.org")) elixir + erc elm emacs-lisp epub @@ -599,6 +600,7 @@ dump." ("M-s-s" . (lambda () (interactive) (insert "|"))))) (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" + "~/annex/bin/misc/erc.el" "~/.quicklisp/slime-helper.el")) (defmacro measure-time (&rest body) -- cgit v1.2.3 From cfda6b7389703cd1e0a300c38cc3e21f310f4926 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 6 Jan 2020 06:56:15 -0300 Subject: .gitattributes: Remove deleted files from the git-crypt list --- .gitattributes | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitattributes b/.gitattributes index ecaa2b6..1a6b701 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,5 +1,3 @@ lein/profiles.clj filter=git-crypt diff=git-crypt git/gitconfig.ini filter=git-crypt diff=git-crypt -emacs/gnus.el filter=git-crypt diff=git-crypt -emacs/not-much.el filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt -- cgit v1.2.3 From 72d7e124a1e98054371aacfb131f08a6b7bf17bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 7 Jan 2020 22:47:25 -0300 Subject: spacemacs.el: Enable auth-source-debug --- spacemacs.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 155863f..f9899d6 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -790,7 +790,9 @@ This is the place where most of your configurations should be done. Unless it is ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared")) browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url - elfeed-search-filter "@2020-01-01--0-day-ago +unread -news ") + elfeed-search-filter "@2020-01-01--0-day-ago +unread -news " + + auth-source-debug t) (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From c13fc5469c1e4e395ae597ecbeef179f9cfaab9e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 7 Jan 2020 22:47:41 -0300 Subject: configuration.nix: Use blueman for bluetooth management It's easier and simpler to work with than bluetoothctl (like in ./scripts/ad-hoc/bt.sh), but it still doesn't work well with headphones (~1m range max) and it freezes with external bluetooth adapter. --- nixos/configuration.nix | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d164fbf..78f5b67 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -22,19 +22,14 @@ in { }; }; - hardware = let - customBluez = pkgs.bluez.overrideAttrs (oldAttrs: { - configureFlags = - builtins.filter (s: s != "--enable-sap") oldAttrs.configureFlags; - }); - in { + hardware = { bluetooth = { enable = true; - package = customBluez; }; pulseaudio = { package = pkgs.pulseaudioFull; enable = true; + extraModules = [ pkgs.pulseaudio-modules-bt ]; }; }; @@ -365,6 +360,7 @@ in { }; services = { + blueman.enable = true; gvfs.enable = true; cron.enable = true; -- cgit v1.2.3 From bae34e43996c65f73f7d6511359a396527a95521 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 7 Jan 2020 22:49:41 -0300 Subject: configuration.nix: Format with nixfmt (linter offense) --- nixos/configuration.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 78f5b67..feccd64 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -23,9 +23,7 @@ in { }; hardware = { - bluetooth = { - enable = true; - }; + bluetooth = { enable = true; }; pulseaudio = { package = pkgs.pulseaudioFull; enable = true; -- cgit v1.2.3 From 9215f4e9e2cbab38959816e338da1a7045925a4d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 8 Jan 2020 06:14:27 -0300 Subject: spacemacs.el: Open configuration.nix file with 'SPC f e c' --- spacemacs.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index f9899d6..9553701 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -623,6 +623,10 @@ dump." (interactive) (projectile-load-known-projects)) +(defun euandreh/find-os-declaration-file () + (interactive) + (find-file-existing (concat (getenv "DOTFILES") "/nixos/configuration.nix"))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. @@ -640,7 +644,8 @@ This is the place where most of your configurations should be done. Unless it is "an" 'notmuch "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus - "glh" 'git-link-homepage) + "glh" 'git-link-homepage + "fec" 'euandreh/find-os-declaration-file) (spacemacs/set-leader-keys-for-major-mode 'typescript-mode "." 'spacemacs/jump-to-definition -- cgit v1.2.3 From c3f18900427e9a3e367db2c6cbb128646cf5da4a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 8 Jan 2020 06:19:27 -0300 Subject: configuration.nix: Disable GNOME Online Accounts and evolution-data-server --- nixos/configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index feccd64..c279452 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -407,8 +407,6 @@ in { gnome-keyring.enable = true; tracker.enable = true; sushi.enable = true; # nautilus previewer - gnome-online-accounts.enable = true; - evolution-data-server.enable = true; }; pcscd.enable = true; # required by yubioath -- cgit v1.2.3 From a9d6a94724f5d56a3d7a62f0e6cdc5be67109136 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 8 Jan 2020 06:21:42 -0300 Subject: configuration.nix: Disable GNOME Tracker Reference: - https://wiki.gnome.org/Projects/Tracker/ --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c279452..c39cc89 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -405,7 +405,6 @@ in { gnome3 = { gnome-keyring.enable = true; - tracker.enable = true; sushi.enable = true; # nautilus previewer }; -- cgit v1.2.3 From 6448aa75f3952f319b9a2fc967e40fc12c1c2eba Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 9 Jan 2020 06:48:17 -0300 Subject: configuration.nix: Add CMUS package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c39cc89..45b1121 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -211,6 +211,7 @@ in { fossil tcl tk + cmus diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 92111b359c50dcfcd00ae6f71f8a5fa2159e6cd7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 9 Jan 2020 06:49:18 -0300 Subject: configuration.nix: Enable KVM kernel module --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 45b1121..2838d62 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -22,6 +22,8 @@ in { }; }; + boot.kernelModules = [ "kvm-intel" ]; + hardware = { bluetooth = { enable = true; }; pulseaudio = { -- cgit v1.2.3 From 5b4fadadb442f082fdadc36be7894bcd741d0953 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 10 Jan 2020 09:00:34 -0300 Subject: profiles.clj: Bump cider-nrepl version --- lein/profiles.clj | Bin 1170 -> 1173 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 871f541..35b9ce2 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From 9372503f9d2eadb484b391505157a34026f66ff9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 11 Jan 2020 16:44:56 -0300 Subject: spacemacs.el: Suppress high_volume from RSS feed --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 9553701..a7db04f 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -795,7 +795,7 @@ This is the place where most of your configurations should be done. Unless it is ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared")) browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url - elfeed-search-filter "@2020-01-01--0-day-ago +unread -news " + elfeed-search-filter "@2020-01-01--0-day-ago +unread -news -high_volume " auth-source-debug t) -- cgit v1.2.3 From ca871efdeafa055f4d662e0b8f518b64cc110799 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 11 Jan 2020 17:22:13 -0300 Subject: env.sh: Remove non-Nix rustup instructions --- bash/env.sh | 9 --------- 1 file changed, 9 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index a18edd0..5d47f39 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -87,12 +87,3 @@ export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH" export GOPATH="$HOME/dev/go" export PATH="$GOPATH/bin:$PATH" - -# -# Rust -# - -rustc --print sysroot &> /dev/null || (rustup install stable && rustup default stable) -export PATH="$HOME/.cargo/bin:$PATH" -RUST_SRC_PATH="$(rustc --print sysroot)/lib/rustlib/src/rust/src" -export RUST_SRC_PATH -- cgit v1.2.3 From c8f63463d5d87b302bdad172f465bb19327c447f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jan 2020 08:47:03 -0300 Subject: Always backup layouts file in Nextcloud/Cache/ folder --- bash/fake-symlinks.sh | 5 +++++ bash/symlinks.sh | 1 - 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 2ff01dc..5b39278 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -4,6 +4,11 @@ if [[ -n "${GITHUB_TOKEN}" ]]; then envsubst < "${DOTFILES}/git/gitconfig.ini" > ~/.gitconfig fi +EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" +[[ -d "${EMACS_LAYOUTS_DIR}" ]] && { + cp "${EMACS_LAYOUTS_DIR}"/* ~/Nextcloud/Cache/emacs/ +} + SRHT_REPOS=(website dotfiles vps) SRHT_REPOS_PATH="${HOME}/dev/libre" diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 053c3a9..d467984 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -50,7 +50,6 @@ ln -fs "${DOTFILES}/nixos/nautilus.desktop" ~/.local/share/applications/naut mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs ln -fs "$DOTFILES/emacs/gnus.el" ~/.gnus.el -[[ -d ~/.emacs.d/.cache/layouts/ ]] && ln -fs "$CACHE_DIR/euandreh-auto-save.el" ~/.emacs.d/.cache/layouts/euandreh-auto-save ## xmonad mkdir -p ~/.xmonad -- cgit v1.2.3 From a63650530a3648d547a17e128adb0a001ce52dab Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jan 2020 08:48:41 -0300 Subject: spacemacs.el: Update generated stuff --- spacemacs.el | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index a7db04f..e727d06 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -840,7 +840,10 @@ This function is called at the very end of Spacemacs initialization." (circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote - ((eval modify-syntax-entry 43 "'") + ((eval progn + (pp-buffer) + (indent-buffer)) + (eval modify-syntax-entry 43 "'") (eval modify-syntax-entry 36 "'") (eval modify-syntax-entry 126 "'") (typescript-backend . tide) -- cgit v1.2.3 From 4e7c4e1cf86205111129a935c15a74954abae87d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jan 2020 12:00:15 -0300 Subject: configuration.nix: Add wirelesstools package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2838d62..21f65e9 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -214,6 +214,7 @@ in { tcl tk cmus + wirelesstools # includes =iwgetid= diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 9e924cdc4b0aa90ab342ea88fdac27d06f748773 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jan 2020 12:17:16 -0300 Subject: Add crontab to check wifi and restart NetworkManager if not connected --- nixos/common.nix | 6 ++++++ nixos/usurpador.nix | 3 ++- scripts/cron/restart-network-manager.sh | 23 +++++++++++++++++++++++ 3 files changed, 31 insertions(+), 1 deletion(-) create mode 100755 scripts/cron/restart-network-manager.sh diff --git a/nixos/common.nix b/nixos/common.nix index 2504d83..7838bf3 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,4 +1,6 @@ { + # show active crontabs with: + # $ sudo cat /etc/crontab cron = { # Sync emails with mbsync every hour mail = @@ -15,5 +17,9 @@ # Borg backup once a month borg = "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1"; + + # Test connection health every minute + networkManager = + "* * * * * root /home/andreh/dev/libre/dotfiles/scripts/cron/restart-network-manager.sh >> /tmp/cron-dbg.network-manager.$(date -Id).log 2>&1"; }; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index f8b0bd0..ce2a2b0 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,5 +9,6 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; - cronJobs = [ common.cron.mail common.cron.nextcloud ]; + cronJobs = + [ common.cron.mail common.cron.nextcloud common.cron.networkManager ]; } diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh new file mode 100755 index 0000000..4da2598 --- /dev/null +++ b/scripts/cron/restart-network-manager.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p wirelesstools wget systemd --pure -I nixpkgs=channel:nixos-unstable +# shellcheck shell=bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[@]}")" + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +end="\033[0m" +red="\033[0;31m" +red() { echo -e "${red}${1}${end}"; } + +SSID="$(iwgetid -r)" +if [[ "${SSID}" = 'Nubank-office' ]]; then + wget --no-check-certificate --spider https://euandre.org || { + red "Error checking connection health." + red "Restarting NetworkManager..." + systemctl restart NetworkManager + } +fi + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From b5b6f15019688a2283db0e1bc230697e6b5f51d3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 17 Jan 2020 11:40:15 -0300 Subject: restart-network-manager.sh: Don't use default wget retry --- scripts/cron/restart-network-manager.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh index 4da2598..0193d1a 100755 --- a/scripts/cron/restart-network-manager.sh +++ b/scripts/cron/restart-network-manager.sh @@ -13,7 +13,7 @@ red() { echo -e "${red}${1}${end}"; } SSID="$(iwgetid -r)" if [[ "${SSID}" = 'Nubank-office' ]]; then - wget --no-check-certificate --spider https://euandre.org || { + wget --tries=1 --no-check-certificate --spider https://euandre.org || { red "Error checking connection health." red "Restarting NetworkManager..." systemctl restart NetworkManager -- cgit v1.2.3 From 9a6f6bea8f6c20d8ef3d2a3d182f1539352da94c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 18 Jan 2020 18:11:57 -0300 Subject: restart-network-manager.sh: Only when connected to power --- nixos/configuration.nix | 1 + scripts/cron/restart-network-manager.sh | 22 +++++++++++++++------- 2 files changed, 16 insertions(+), 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 21f65e9..8f1b4c8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -215,6 +215,7 @@ in { tk cmus wirelesstools # includes =iwgetid= + acpi # For checking the battery from command-line diffoscope poppler_utils # used by diffoscope for comparing PDF files diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh index 0193d1a..26d3037 100755 --- a/scripts/cron/restart-network-manager.sh +++ b/scripts/cron/restart-network-manager.sh @@ -1,5 +1,5 @@ #!/usr/bin/env nix-shell -#!nix-shell -i bash -p wirelesstools wget systemd --pure -I nixpkgs=channel:nixos-unstable +#!nix-shell -i bash -p wirelesstools wget systemd acpi --pure -I nixpkgs=channel:nixos-unstable # shellcheck shell=bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[@]}")" @@ -9,15 +9,23 @@ echo "Starting $(date -Is)" end="\033[0m" red="\033[0;31m" +yellow="\033[0;33m" red() { echo -e "${red}${1}${end}"; } +yellow() { echo -e "${yellow}${1}${end}"; } SSID="$(iwgetid -r)" -if [[ "${SSID}" = 'Nubank-office' ]]; then - wget --tries=1 --no-check-certificate --spider https://euandre.org || { - red "Error checking connection health." - red "Restarting NetworkManager..." - systemctl restart NetworkManager + +[[ "${SSID}" = 'Nubank-office' ]] && { + yellow 'In Nubank connection...' + [[ "$(acpi -a)" = 'Adapter 0: on-line' ]] && { + yellow 'With charging notebook...' + yellow 'Checking connection.' + wget --tries=1 --no-check-certificate --spider https://euandre.org || { + red "Error checking connection health." + red "Restarting NetworkManager..." + systemctl restart NetworkManager + } } -fi +} echo "Finishing: $(date -Is)" -- cgit v1.2.3 From eb24eca9c700d5c68116b075edccf2dcaa0e354c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 18 Jan 2020 18:12:22 -0300 Subject: configuration.nix: Install autotools and mb2md --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8f1b4c8..ef8dfec 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -216,6 +216,8 @@ in { cmus wirelesstools # includes =iwgetid= acpi # For checking the battery from command-line + autoconf + mb2md diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From cf647711f28cb270045c56417288fc320a1de3f9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 20 Jan 2020 02:51:28 -0300 Subject: restart-network-manager.sh: Stop skipping cert check --- scripts/cron/restart-network-manager.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh index 26d3037..b247d40 100755 --- a/scripts/cron/restart-network-manager.sh +++ b/scripts/cron/restart-network-manager.sh @@ -14,13 +14,14 @@ red() { echo -e "${red}${1}${end}"; } yellow() { echo -e "${yellow}${1}${end}"; } SSID="$(iwgetid -r)" +export SSL_CERT_DIR=~/.guix-profile/etc/ssl/certs [[ "${SSID}" = 'Nubank-office' ]] && { yellow 'In Nubank connection...' [[ "$(acpi -a)" = 'Adapter 0: on-line' ]] && { yellow 'With charging notebook...' yellow 'Checking connection.' - wget --tries=1 --no-check-certificate --spider https://euandre.org || { + wget --tries=1 --spider https://euandre.org || { red "Error checking connection health." red "Restarting NetworkManager..." systemctl restart NetworkManager -- cgit v1.2.3 From 86c8affd0c502e4d31654a5a31bec9d12d8b3b8e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 Jan 2020 01:20:52 -0300 Subject: common.nix: Update cronjob rules - remove timestamp from filenames: I should start using logrotate for this, instead; - add cron job for 'deliver-queued-mail.sh'; - include deliverMail cronjob in usurpador.nix definition. --- nixos/common.nix | 18 +++++++++++------- nixos/usurpador.nix | 2 +- scripts/cron/deliver-queued-mail.sh | 17 +++++++++++++++++ 3 files changed, 29 insertions(+), 8 deletions(-) create mode 100755 scripts/cron/deliver-queued-mail.sh diff --git a/nixos/common.nix b/nixos/common.nix index 7838bf3..f8eb07e 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,24 +2,28 @@ # show active crontabs with: # $ sudo cat /etc/crontab cron = { - # Sync emails with mbsync every hour - mail = - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.$(date -Id).log 2>&1"; + # Deliver queued emails every hour + deliverMail = + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/deliver-queued-mail.sh >> /tmp/cron-dbg.deliver-queued-mail.log 2>&1"; + + # Fetch emails with mbsync every hour + fetchMail = + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.log 2>&1"; # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.$(date -Id).log 2>&1"; + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.log 2>&1"; # Run ArchiveBox data once every day at 12h archivebox = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.$(date -Id).log 2>&1"; + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.log 2>&1"; # Borg backup once a month borg = - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.$(date -Id).log 2>&1"; + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.log 2>&1"; # Test connection health every minute networkManager = - "* * * * * root /home/andreh/dev/libre/dotfiles/scripts/cron/restart-network-manager.sh >> /tmp/cron-dbg.network-manager.$(date -Id).log 2>&1"; + "* * * * * root /home/andreh/dev/libre/dotfiles/scripts/cron/restart-network-manager.sh >> /tmp/cron-dbg.network-manager.log 2>&1"; }; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index ce2a2b0..3fac64d 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,5 +10,5 @@ in { allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; cronJobs = - [ common.cron.mail common.cron.nextcloud common.cron.networkManager ]; + [ common.cron.fetchMail common.cron.deliverMail common.cron.nextcloud common.cron.networkManager ]; } diff --git a/scripts/cron/deliver-queued-mail.sh b/scripts/cron/deliver-queued-mail.sh new file mode 100755 index 0000000..4db5cd7 --- /dev/null +++ b/scripts/cron/deliver-queued-mail.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +if [[ "$(find ~/mbsync/queued-email/ -type f -not -name 'index' | wc -l)" = 0 ]]; then + echo 'No queued emails found. noop' +else + # https://github.com/syl20bnr/spacemacs/issues/4504#issuecomment-232973179 + emacs -batch \ + -l ~/.emacs.d/init.el \ + --eval "(run-hooks 'emacs-startup-hook)" \ + --eval '(smtpmail-send-queued-mail)' +fi + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 44ca22d2748c3ed214c8ae670a3198a4e140533a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 Jan 2020 01:23:07 -0300 Subject: configuration.nix: Add packages - git-bug - clang-tools (for clang-format) - automake (for autoreconf to use) - help2man (for working on Guix) - logrotate (to start improve handling of cronjob logs) - mailutils (to be called by logrotate) --- nixos/configuration.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ef8dfec..7bbbb5a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -106,6 +106,7 @@ in { gitAndTools.git-annex gitAndTools.gitRemoteGcrypt gitAndTools.git-secrets + gitAndTools.git-bug git-crypt git-lfs gnupg @@ -142,6 +143,7 @@ in { ipfs gnumake gcc + clang-tools # =clang-format= psmisc # =killall= xorg.xkill bfg-repo-cleaner @@ -217,7 +219,11 @@ in { wirelesstools # includes =iwgetid= acpi # For checking the battery from command-line autoconf + automake mb2md + help2man + logrotate + mailutils diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 507a947a9dd4a0e073597636da27686f7a5e6354 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 22 Jan 2020 01:25:15 -0300 Subject: usurpador.nix: Format with nixfmt (linter offense) --- nixos/usurpador.nix | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 3fac64d..7394e89 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,6 +9,10 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; - cronJobs = - [ common.cron.fetchMail common.cron.deliverMail common.cron.nextcloud common.cron.networkManager ]; + cronJobs = [ + common.cron.fetchMail + common.cron.deliverMail + common.cron.nextcloud + common.cron.networkManager + ]; } -- cgit v1.2.3 From 37be2f6829690311ceb16627b95cd5d3acee60df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jan 2020 22:41:54 -0300 Subject: delete scripts/ad-hoc/mail.sh: Use GNU Mailutils instead --- scripts/ad-hoc/mail.sh | 51 -------------------------------------------------- 1 file changed, 51 deletions(-) delete mode 100755 scripts/ad-hoc/mail.sh diff --git a/scripts/ad-hoc/mail.sh b/scripts/ad-hoc/mail.sh deleted file mode 100755 index abf48f2..0000000 --- a/scripts/ad-hoc/mail.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -usage() { - red "Missing input argument '${1}'.\n" - cat < - - Arguments - RECIPIENTS Comma-separated string of emails to receive the email. - SUBJECT The text of the email subject. - BODY The body of the email. Can contain \n in the text. - FROM The from address to send from (be aware of matching DKIM signature). - -Examples: - Send an email to to@example.org: - mail.sh to@example.org Subject Body from@example.org -EOF -} - -RECIPIENTS="${1:-}" -SUBJECT="${2:-}" -BODY="${3:-}" -FROM="${4:-}" - -[[ -z "${RECIPIENTS}" ]] && { - usage 'RECIPIENTS' - exit 2 -} - -[[ -z "${SUBJECT}" ]] && { - usage 'SUBJECT' - exit 2 -} - -[[ -z "${BODY}" ]] && { - usage 'BODY' - exit 2 -} - -[[ -z "${FROM}" ]] && { - usage 'FROM' - exit 2 -} - -# shellcheck disable=SC2029 -ssh euandre.org "echo \"${BODY}\" | mail -s \"${SUBJECT}\" \"${RECIPIENTS}\" -a BCC:cc@euandre.org -a From:\"${FROM}\" -a \"Content-Type: text/plain; charset=UTF-8\"" - -printf "Subject: %s\nRecipients: %s\n\n%s\n" "${SUBJECT}" "${RECIPIENTS}" "${BODY}" >> "${HOME}/annex/txt/mail/$(date -Ins).txt" -- cgit v1.2.3 From 68b52cc25d41edb1bdd0c4f40c18e6bd94446445 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 00:22:29 -0300 Subject: Add notmuch hooks to show diffs in mail and check for missing attachments --- spacemacs.el | 60 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 60 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index e727d06..7e33063 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -627,10 +627,70 @@ dump." (interactive) (find-file-existing (concat (getenv "DOTFILES") "/nixos/configuration.nix"))) +;; Taken from: +;; https://notmuchmail.org/emacstips/#index25h2 +(defun euandreh/notmuch-show-view-as-patch () + "View the the current message as a patch." + (interactive) + (let* ((id (notmuch-show-get-message-id)) + (msg (notmuch-show-get-message-properties)) + (part (notmuch-show-get-part-properties)) + (subject (concat "Subject: " (notmuch-show-get-subject) "\n")) + (diff-default-read-only t) + (buf (get-buffer-create (concat "*notmuch-patch-" id "*"))) + (map (make-sparse-keymap))) + (define-key map "q" 'notmuch-bury-or-kill-this-buffer) + (switch-to-buffer buf) + (let ((inhibit-read-only t)) + (erase-buffer) + (insert subject) + (insert (notmuch-get-bodypart-text msg part nil))) + (set-buffer-modified-p nil) + (diff-mode) + (lexical-let ((new-ro-bind (cons 'buffer-read-only map))) + (add-to-list 'minor-mode-overriding-map-alist new-ro-bind)) + (goto-char (point-min)))) + +;; Taken from: +;; https://notmuchmail.org/pipermail/notmuch/2018/026414.html +(defcustom euandreh/notmuch-attach-regex + "\\b\\(attache\?ment\\|attached\\|attach\\|pi[èe]ce\s+jointe?\\)\\b" + "Pattern of text announcing there should be an attachment. + +This is used by `notmuch-message-check-attach' to check email +bodies for words that might indicate the email should have an +attachement. If the pattern matches and there is no attachment (a +`<#part ...>' magic block), notmuch will show a confirmation +prompt before sending the email. + +The default regular expression is deliberately liberal: we prefer +false positive than forgotten attachments. This should be +customized for non-english languages and notmuch welcomes +additions to the pattern for your native language, unless it +conflicts with common words in other languages." + :type '(regexp) + :group 'notmuch-send) + +(defun euandreh/notmuch-message-check-attach () + "Check for missing attachments. + +This is normally added to `message-send-hook' and is configured +through `notmuch-message-attach-regex'." + (save-excursion ;; XXX: this fails somehow: point is at the end of the buffer on error + (goto-char (point-min)) + (if (re-search-forward euandreh/notmuch-attach-regex nil t) + (progn + (goto-char (point-min)) + (unless (re-search-forward "<#part [^>]*filename=[^>]*>" nil t) + (or (y-or-n-p "Email seem to refer to attachment, but nothing attached, send anyways?") + (error "No attachment found, aborting"))))))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." + (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) + (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/guix/guix")) -- cgit v1.2.3 From bee781438edfe57a8cc2dc94ce0cfcaeedc568ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 00:31:56 -0300 Subject: spacemacs.el: Add custom hook to prevent me from sending emails without subjects --- spacemacs.el | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 7e33063..696adaa 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -685,12 +685,21 @@ through `notmuch-message-attach-regex'." (or (y-or-n-p "Email seem to refer to attachment, but nothing attached, send anyways?") (error "No attachment found, aborting"))))))) +(defun euandreh/prevent-sending-mail-without-subject () + (save-excursion + (save-restriction + (message-narrow-to-headers) + (when (not (message-fetch-field "subject")) + (or (y-or-n-p "Email without subject. Really send?") + (error "No subject found, aborting")))))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) + (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/guix/guix")) -- cgit v1.2.3 From ccf1494335bd8b1d1399b72f62870d3ab054c596 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:32:42 -0300 Subject: configuration.nix: Use go instead of go_bootstrap go_bootstrap has a version of Go that's too old. --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7bbbb5a..96d32bb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -276,7 +276,7 @@ in { visualvm # JVM profiling tool ant maven - go_bootstrap + go bats ledger perl -- cgit v1.2.3 From d6e53642de883fde90f7b7b08d3c94c5316d63bd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:33:15 -0300 Subject: configuration.nix: Add godef, ranger, cpanm and Mojolicious packages --- nixos/configuration.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 96d32bb..2b4a44b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -277,9 +277,12 @@ in { ant maven go + godef bats ledger perl + perl530Packages.Appcpanminus + perl530Packages.Mojolicious dhall dhall-json nodePackages.node2nix @@ -298,6 +301,7 @@ in { ruby pinentry zig + ranger ## Containers and VMs -- cgit v1.2.3 From dd6cf4fdb2efa9d2d5026bd1c2f319fc6bfece53 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:33:43 -0300 Subject: Add cronjob to update elfeed database --- nixos/common.nix | 4 ++++ scripts/cron/elfeed.sh | 12 ++++++++++++ 2 files changed, 16 insertions(+) create mode 100755 scripts/cron/elfeed.sh diff --git a/nixos/common.nix b/nixos/common.nix index f8eb07e..27bf086 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -10,6 +10,10 @@ fetchMail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.log 2>&1"; + # Fetch elfeed feeds once a day + elfeed = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/crong-dbg.elfeed.log 2>&1"; + # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.log 2>&1"; diff --git a/scripts/cron/elfeed.sh b/scripts/cron/elfeed.sh new file mode 100755 index 0000000..d191dbc --- /dev/null +++ b/scripts/cron/elfeed.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +emacs -batch \ + -l ~/.emacs.d/init.el \ + --eval "(run-hooks 'emacs-startup-hook)" \ + --eval '(elfeed-update)' + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 4c52afa3e81936b53e6d2919130d9783fca8dd5c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:34:07 -0300 Subject: Don't enforce TLS and log errors in nm cronjob --- scripts/cron/restart-network-manager.sh | 15 +++++++++------ 1 file changed, 9 insertions(+), 6 deletions(-) diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh index b247d40..a6a6362 100755 --- a/scripts/cron/restart-network-manager.sh +++ b/scripts/cron/restart-network-manager.sh @@ -14,19 +14,22 @@ red() { echo -e "${red}${1}${end}"; } yellow() { echo -e "${yellow}${1}${end}"; } SSID="$(iwgetid -r)" -export SSL_CERT_DIR=~/.guix-profile/etc/ssl/certs -[[ "${SSID}" = 'Nubank-office' ]] && { +if [[ "${SSID}" = 'Nubank-office' ]]; then yellow 'In Nubank connection...' - [[ "$(acpi -a)" = 'Adapter 0: on-line' ]] && { + if [[ "$(acpi -a)" = 'Adapter 0: on-line' ]]; then yellow 'With charging notebook...' yellow 'Checking connection.' - wget --tries=1 --spider https://euandre.org || { + wget --tries=1 --no-check-certificate --spider https://euandre.org || { red "Error checking connection health." red "Restarting NetworkManager..." systemctl restart NetworkManager } - } -} + else + red 'Not connected to a charger, skipping.' + fi +else + red 'Not in Nubank network, skipping.' +fi echo "Finishing: $(date -Is)" -- cgit v1.2.3 From b510a997cfc722b84d12f84ef4693100d755bc26 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:34:55 -0300 Subject: Register elfeed cronjob in usurpador.nix --- nixos/usurpador.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 7394e89..557fd36 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -11,6 +11,7 @@ in { packages = with pkgs; [ sshuttle slack chromium ]; cronJobs = [ common.cron.fetchMail + common.cron.elfeed common.cron.deliverMail common.cron.nextcloud common.cron.networkManager -- cgit v1.2.3 From 615d19a66725f61880301cfe38d11cf577a66a6b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:35:12 -0300 Subject: Add symlink to ranger.conf --- bash/symlinks.sh | 4 ++++ ranger.conf | 1 + 2 files changed, 5 insertions(+) create mode 100644 ranger.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index d467984..ca55861 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -59,3 +59,7 @@ ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc ## Mercurial ln -fs "${DOTFILES}/mercurial/hgrc.ini" ~/.hgrc + +## ranger +mkdir -p ~/.config/ranger/ +ln -fs "${DOTFILES}/ranger.conf" ~/.config/ranger/rc.conf diff --git a/ranger.conf b/ranger.conf new file mode 100644 index 0000000..312936e --- /dev/null +++ b/ranger.conf @@ -0,0 +1 @@ +map DD shell mv %s /home/${USER}/.local/share/Trash/files/ \ No newline at end of file -- cgit v1.2.3 From 3f9a8492b2014ee89d0be0f4446b51dd6db7f45a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 15:54:15 -0300 Subject: Add ssmtp configuration --- bash/aliases.sh | 2 ++ nixos/configuration.nix | 11 +++++++++++ 2 files changed, 13 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 6c9a808..1445269 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -59,3 +59,5 @@ alias ds="git diff --staged" alias reload="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" alias r="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" + +alias mail='mail -aFrom:eu@euandre.org' diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2b4a44b..ce29baf 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -375,6 +375,17 @@ in { }; services = { + ssmtp = { + enable = true; + authPassFile = "/home/andreh/annex/secret/SMTP/euandreh.txt"; + authUser = "eu@euandre.org"; + domain = "euandre.org"; + hostName = "box.euandre.org:587"; + root = "root@euandre.org"; + setSendmail = true; + useSTARTTLS = true; + useTLS = true; + }; blueman.enable = true; gvfs.enable = true; -- cgit v1.2.3 From 5a186798634146ef94c3baf99631ec02e4eb09ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jan 2020 18:40:15 -0300 Subject: cron/deliver-queued-mail.sh: Load notmuch.el during job --- scripts/cron/deliver-queued-mail.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cron/deliver-queued-mail.sh b/scripts/cron/deliver-queued-mail.sh index 4db5cd7..0dde65a 100755 --- a/scripts/cron/deliver-queued-mail.sh +++ b/scripts/cron/deliver-queued-mail.sh @@ -10,6 +10,7 @@ else # https://github.com/syl20bnr/spacemacs/issues/4504#issuecomment-232973179 emacs -batch \ -l ~/.emacs.d/init.el \ + -l ~/annex/bin/misc/mail/notmuch.el \ --eval "(run-hooks 'emacs-startup-hook)" \ --eval '(smtpmail-send-queued-mail)' fi -- cgit v1.2.3 From 5bd4414ed38a6f743e2461b3aae2730707689768 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jan 2020 06:15:15 -0300 Subject: spacemacs.el: Add require 'notmuch before start working with it --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 696adaa..bf02539 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -697,6 +697,7 @@ through `notmuch-message-attach-regex'." "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." + (require 'notmuch) (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) -- cgit v1.2.3 From 6cf5cfd1c378552ec34536b3dcbce2275448c4e1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 29 Jan 2020 22:42:43 -0300 Subject: configuration.nix: Honor types.loadOf deprecation In order to abide to the types.loadOf deprecation[0]. The original warning showed itself when doing 'nixos-build switch': trace: warning: In file /etc/nixos/configuration.nix a list is being assigned to the option config.boot.initrd.luks.devices. This will soon be an error as type loaOf is deprecated. See https://github.com/NixOS/nixpkgs/pull/63103 for more information. Do boot.initrd.luks.devices = { root = {...}; } instead of boot.initrd.luks.devices = [ { name = "root"; ...} ] these derivations will be built: (...) Now this warning message doesn't appear anymore. --- nixos/configuration.nix | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ce29baf..f502e8e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -14,11 +14,13 @@ in { efi.canTouchEfiVariables = true; }; initrd = { - luks.devices = [{ - name = "root"; - device = localConfiguration.luksDevice; - preLVM = true; - }]; + luks.devices = { + root = { + name = "root"; + device = localConfiguration.luksDevice; + preLVM = true; + }; + }; }; }; -- cgit v1.2.3 From 5aad525244d92086cc7886ca4f5e239e727c0cdf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 Jan 2020 12:18:40 -0300 Subject: Add repoUpdate cronjob --- nixos/common.nix | 4 ++++ nixos/usurpador.nix | 1 + scripts/cron/repo-update.sh | 10 ++++++++++ 3 files changed, 15 insertions(+) create mode 100755 scripts/cron/repo-update.sh diff --git a/nixos/common.nix b/nixos/common.nix index 27bf086..b24d83a 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,6 +2,10 @@ # show active crontabs with: # $ sudo cat /etc/crontab cron = { + # Pull code from source code repositories once a day at 12h + repoUpdate = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.log 2>&1"; + # Deliver queued emails every hour deliverMail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/deliver-queued-mail.sh >> /tmp/cron-dbg.deliver-queued-mail.log 2>&1"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 557fd36..0df287b 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,6 +10,7 @@ in { allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; cronJobs = [ + common.core.repoUpdate common.cron.fetchMail common.cron.elfeed common.cron.deliverMail diff --git a/scripts/cron/repo-update.sh b/scripts/cron/repo-update.sh new file mode 100755 index 0000000..3313f47 --- /dev/null +++ b/scripts/cron/repo-update.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +cd "${HOME}" +mr -j8 safeupdate + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 24cbf71904321616a6e921100c442ccaef9c611d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 Jan 2020 12:20:57 -0300 Subject: Optimize Bash startup by removing x.sh from it --- bash/aliases.sh | 5 +++-- bash/bashrc.sh | 1 - 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 1445269..f5a2d30 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -57,7 +57,8 @@ alias s="git status" alias d="git diff" alias ds="git diff --staged" -alias reload="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" -alias r="source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" +alias reload="source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" +alias rr="source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" +alias r="source ~/.bashrc" alias mail='mail -aFrom:eu@euandre.org' diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 3cf0a0f..b62e95c 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -16,7 +16,6 @@ source $DOTFILES/bash/init.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh source $DOTFILES/bash/facepalm/rotten-apple.sh -source $DOTFILES/bash/x.sh source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/fake-symlinks.sh -- cgit v1.2.3 From 6d251237331bc2703085e53484b36b5c6ab614f3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 Jan 2020 12:21:26 -0300 Subject: symlinks.sh: Add vimrc.conf --- bash/symlinks.sh | 3 +++ vimrc.conf | 12 ++++++++++++ 2 files changed, 15 insertions(+) create mode 100644 vimrc.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index ca55861..57fe89f 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -63,3 +63,6 @@ ln -fs "${DOTFILES}/mercurial/hgrc.ini" ~/.hgrc ## ranger mkdir -p ~/.config/ranger/ ln -fs "${DOTFILES}/ranger.conf" ~/.config/ranger/rc.conf + +## Vim +ln -fs "${DOTFILES}/vimrc.conf" ~/.vimrc diff --git a/vimrc.conf b/vimrc.conf new file mode 100644 index 0000000..0d3a8a3 --- /dev/null +++ b/vimrc.conf @@ -0,0 +1,12 @@ +" Taken from: +" https://stackoverflow.com/questions/1878974/redefine-tab-as-4-spaces#1878983 +set tabstop=2 " The width of a TAB is set to 2. + " Still it is a \t. It is just that + " Vim will interpret it to be having + " a width of 2. + +set shiftwidth=2 " Indents will have a width of 2 + +set softtabstop=2 " Sets the number of columns for a TAB + +set expandtab " Expand TABs to spaces -- cgit v1.2.3 From c250f3aff5eafe3b896fbae22e19db7566829e80 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 Jan 2020 12:34:08 -0300 Subject: fake-symlinks.sh: Remove website from repos list --- bash/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 5b39278..7c98066 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -9,11 +9,12 @@ EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" cp "${EMACS_LAYOUTS_DIR}"/* ~/Nextcloud/Cache/emacs/ } -SRHT_REPOS=(website dotfiles vps) +SRHT_REPOS=(dotfiles vps) SRHT_REPOS_PATH="${HOME}/dev/libre" cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/cement/utils.nix" cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/pires/utils.nix" +cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/website/utils.nix" for repo in "${SRHT_REPOS[@]}"; do if [[ "${repo}" != "vps" ]] && [[ "${repo}" != "songbooks" ]]; then -- cgit v1.2.3 From afd5398661bd249f11d7db3fe004235dc359cab7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 Jan 2020 22:41:16 -0300 Subject: usurpador.nix: Fix typo in cronJobs list --- nixos/usurpador.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 0df287b..3b55a46 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,7 +10,7 @@ in { allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; cronJobs = [ - common.core.repoUpdate + common.cron.repoUpdate common.cron.fetchMail common.cron.elfeed common.cron.deliverMail -- cgit v1.2.3 From e46e4cc98655cfe96cf4e0e3caa416bbe614c0ff Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 30 Jan 2020 22:52:57 -0300 Subject: TODOs.org --- TODOs.org | 1 + nixos/configuration.nix | 9 +-------- 2 files changed, 2 insertions(+), 8 deletions(-) diff --git a/TODOs.org b/TODOs.org index 19a8857..521825f 100644 --- a/TODOs.org +++ b/TODOs.org @@ -57,6 +57,7 @@ Put all of this on the README for future easy access. ** DOING Workflow improvement *** TODO Guix **** TODO Create =burn.sh=, =install.sh= and =setup.sh= Guix installation scripts +**** TODO https://framagit.org/tyreunom/guix-home-manager **** TODO Put Btrfs on Guix **** DONE Consider using Btrfs? Why? Why not? CLOSED: [2019-06-02 Sun 15:04] diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f502e8e..2b00c09 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -86,13 +86,6 @@ in { buildInputs = oldAttrs.buildInputs ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); - - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet-full = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { - doInstallCheck = false; - doCheck = false; - meta = { broken = false; }; - }); in with pkgs; [ pkgs-19-09.swift @@ -258,7 +251,7 @@ in { lame frescobaldi timidityWithEvenMoreFormats - untested-quodlibet-full + quodlibet-full ## Programming tools -- cgit v1.2.3 From 23664497c0380be9a8fa1887a9f65a6757a070e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 Jan 2020 08:06:15 -0300 Subject: common.nix: Fix typo in log file name --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index b24d83a..75c54d6 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -16,7 +16,7 @@ # Fetch elfeed feeds once a day elfeed = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/crong-dbg.elfeed.log 2>&1"; + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.log 2>&1"; # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = -- cgit v1.2.3 From 6f9154fa698860044bf7a1cc78600a7cfaa7556f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Feb 2020 20:41:38 -0300 Subject: Add cronjob for updating Guix --- nixos/common.nix | 4 ++++ nixos/usurpador.nix | 1 + scripts/cron/guix-pull.sh | 9 +++++++++ 3 files changed, 14 insertions(+) create mode 100755 scripts/cron/guix-pull.sh diff --git a/nixos/common.nix b/nixos/common.nix index 75c54d6..56da94f 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,6 +2,10 @@ # show active crontabs with: # $ sudo cat /etc/crontab cron = { + # Update Guix once a day at 12h + guixPull = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.log 2>&1"; + # Pull code from source code repositories once a day at 12h repoUpdate = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.log 2>&1"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 3b55a46..e013d2d 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,6 +10,7 @@ in { allowUnfree = true; # Required for slack (unfree) derivation packages = with pkgs; [ sshuttle slack chromium ]; cronJobs = [ + common.cron.guixPull common.cron.repoUpdate common.cron.fetchMail common.cron.elfeed diff --git a/scripts/cron/guix-pull.sh b/scripts/cron/guix-pull.sh new file mode 100755 index 0000000..68ae2c7 --- /dev/null +++ b/scripts/cron/guix-pull.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +guix pull + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From fd5e08a96138c5d3700dfc036769a600be6b5670 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 2 Feb 2020 21:03:15 -0300 Subject: common.nix: Order cronjobs by frequency --- nixos/common.nix | 28 ++++++++++++++-------------- 1 file changed, 14 insertions(+), 14 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 56da94f..95e9a84 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,13 +2,13 @@ # show active crontabs with: # $ sudo cat /etc/crontab cron = { - # Update Guix once a day at 12h - guixPull = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.log 2>&1"; + # Test connection health every minute + networkManager = + "* * * * * root /home/andreh/dev/libre/dotfiles/scripts/cron/restart-network-manager.sh >> /tmp/cron-dbg.network-manager.log 2>&1"; - # Pull code from source code repositories once a day at 12h - repoUpdate = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.log 2>&1"; + # Sync Nextcloud using nextcloudcmd every 15 minutes + nextcloud = + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.log 2>&1"; # Deliver queued emails every hour deliverMail = @@ -18,14 +18,18 @@ fetchMail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.log 2>&1"; + # Update Guix once a day at 12h + guixPull = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.log 2>&1"; + + # Pull code from source code repositories once a day at 12h + repoUpdate = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.log 2>&1"; + # Fetch elfeed feeds once a day elfeed = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.log 2>&1"; - # Sync Nextcloud using nextcloudcmd every 15 minutes - nextcloud = - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.log 2>&1"; - # Run ArchiveBox data once every day at 12h archivebox = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.log 2>&1"; @@ -33,9 +37,5 @@ # Borg backup once a month borg = "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.log 2>&1"; - - # Test connection health every minute - networkManager = - "* * * * * root /home/andreh/dev/libre/dotfiles/scripts/cron/restart-network-manager.sh >> /tmp/cron-dbg.network-manager.log 2>&1"; }; } -- cgit v1.2.3 From 5b4cd5621ce9babc0ec0cafe72fcf8b25ef396e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Feb 2020 12:23:07 -0300 Subject: Add ffmpeg helper 'record-my-screen.sh' --- scripts/ad-hoc/record-my-screen.sh | 44 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100755 scripts/ad-hoc/record-my-screen.sh diff --git a/scripts/ad-hoc/record-my-screen.sh b/scripts/ad-hoc/record-my-screen.sh new file mode 100755 index 0000000..45c0d6c --- /dev/null +++ b/scripts/ad-hoc/record-my-screen.sh @@ -0,0 +1,44 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Taken from: +# https://www.pcsuggest.com/linux-screen-recorder-ffmpeg/ + +usage() { + red 'Missing argument $1.\n' + cat < + + Arguments: + OUTPUT_PATH Path of the final MKV file + +Examples: + Capture the screen and save it in 'output.mkv' + record-my-screen.sh output.mkv +EOF +} + +OUTPUT_PATH="${1:-}" +[[ -z "${OUTPUT_PATH}" ]] && { + usage 'OUTPUT_PATH' + exit 2 +} + + +SCREEN_RESOLUTION="$(xrandr -q --current | grep '*' | awk '{print$1}')" + +ffmpeg \ + -loglevel error \ + \ + `# audio options` \ + -f pulse \ + -ac 2 \ + -i default \ + \ + `# video options` \ + -f x11grab \ + -s "${SCREEN_RESOLUTION}" \ + -i "${DISPLAY}" \ + \ + "${OUTPUT_PATH}" -- cgit v1.2.3 From 1089196e5947fa492f960ef18db6692c3f61f488 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Feb 2020 12:26:13 -0300 Subject: Make it clear that we are capturing the * char --- scripts/ad-hoc/record-my-screen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/record-my-screen.sh b/scripts/ad-hoc/record-my-screen.sh index 45c0d6c..c170692 100755 --- a/scripts/ad-hoc/record-my-screen.sh +++ b/scripts/ad-hoc/record-my-screen.sh @@ -26,7 +26,7 @@ OUTPUT_PATH="${1:-}" } -SCREEN_RESOLUTION="$(xrandr -q --current | grep '*' | awk '{print$1}')" +SCREEN_RESOLUTION="$(xrandr -q --current | grep '[*]' | awk '{print$1}')" ffmpeg \ -loglevel error \ -- cgit v1.2.3 From 5f9a828c1a5be3671b392d8bf0e381d5a0946708 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Feb 2020 12:26:50 -0300 Subject: Fix quoting in usage text message --- scripts/ad-hoc/record-my-screen.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/record-my-screen.sh b/scripts/ad-hoc/record-my-screen.sh index c170692..c7bd728 100755 --- a/scripts/ad-hoc/record-my-screen.sh +++ b/scripts/ad-hoc/record-my-screen.sh @@ -5,7 +5,7 @@ set -Eeuo pipefail # https://www.pcsuggest.com/linux-screen-recorder-ffmpeg/ usage() { - red 'Missing argument $1.\n' + red "Missing argument $1.\n" cat < -- cgit v1.2.3 From 7d9132a0f5943fb6b82c4f3bd086358a9b47a078 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Feb 2020 12:32:27 -0300 Subject: configuration.nix: Add ffmpeg-full --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2b00c09..d4f6e89 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -219,6 +219,7 @@ in { help2man logrotate mailutils + ffmpeg-full diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From a9a8fe635024f3660edf839952d15841c26e711c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Feb 2020 13:54:52 -0300 Subject: Add dmenu-emoji.sh --- scripts/ad-hoc/dmenu-emoji.sh | 1458 +++++++++++++++++++++++++++++++++++++++++ xmonad/xmonad.hs | 3 + 2 files changed, 1461 insertions(+) create mode 100755 scripts/ad-hoc/dmenu-emoji.sh diff --git a/scripts/ad-hoc/dmenu-emoji.sh b/scripts/ad-hoc/dmenu-emoji.sh new file mode 100755 index 0000000..7ade31e --- /dev/null +++ b/scripts/ad-hoc/dmenu-emoji.sh @@ -0,0 +1,1458 @@ +#!/usr/bin/env bash +set -e + +# Taken from: +# https://github.com/porras/dmenu-emoji + +case "$1" in + "list") + data=$(sed '0,/^__DATA__$/d' "$0") + echo "$data" + ;; + "copy") + input=$(tee) + if [ ! -z "$input" ]; then + emoji=${input: -1} + echo -n "$emoji" | xclip -selection c + fi + ;; + "") + bash $0 list | dmenu -l 20 -i -p 'Emoji: ' -fn Monospace-18 | bash $0 copy + ;; +esac + +exit + +__DATA__ +grinning face 😀 +smiling face with open mouth 😃 +smiling face with open mouth & smiling eyes 😄 +grinning face with smiling eyes 😁 +smiling face with open mouth & closed eyes 😆 +smiling face with open mouth & cold sweat 😅 +face with tears of joy 😂 +rolling on the floor laughing 🤣 +smiling face ☺️ +smiling face with smiling eyes 😊 +smiling face with halo 😇 +slightly smiling face 🙂 +upside-down face 🙃 +winking face 😉 +relieved face 😌 +smiling face with heart-eyes 😍 +face blowing a kiss 😘 +kissing face 😗 +kissing face with smiling eyes 😙 +kissing face with closed eyes 😚 +face savouring delicious food 😋 +face with stuck-out tongue & winking eye 😜 +face with stuck-out tongue & closed eyes 😝 +face with stuck-out tongue 😛 +money-mouth face 🤑 +hugging face 🤗 +nerd face 🤓 +smiling face with sunglasses 😎 +clown face 🤡 +cowboy hat face 🤠 +smirking face 😏 +unamused face 😒 +disappointed face 😞 +pensive face 😔 +worried face 😟 +confused face 😕 +slightly frowning face 🙁 +frowning face ☹️ +persevering face 😣 +confounded face 😖 +tired face 😫 +weary face 😩 +face with steam from nose 😤 +angry face 😠 +pouting face 😡 +face without mouth 😶 +neutral face 😐 +expressionless face 😑 +hushed face 😯 +frowning face with open mouth 😦 +anguished face 😧 +face with open mouth 😮 +astonished face 😲 +dizzy face 😵 +flushed face 😳 +face screaming in fear 😱 +fearful face 😨 +face with open mouth & cold sweat 😰 +crying face 😢 +disappointed but relieved face 😥 +drooling face 🤤 +loudly crying face 😭 +face with cold sweat 😓 +sleepy face 😪 +sleeping face 😴 +face with rolling eyes 🙄 +thinking face 🤔 +lying face 🤥 +grimacing face 😬 +zipper-mouth face 🤐 +nauseated face 🤢 +sneezing face 🤧 +face with medical mask 😷 +face with thermometer 🤒 +face with head-bandage 🤕 +smiling face with horns 😈 +angry face with horns 👿 +ogre 👹 +goblin 👺 +pile of poo 💩 +ghost 👻 +skull 💀 +skull and crossbones ☠️ +alien 👽 +alien monster 👾 +robot face 🤖 +jack-o-lantern 🎃 +smiling cat face with open mouth 😺 +grinning cat face with smiling eyes 😸 +cat face with tears of joy 😹 +smiling cat face with heart-eyes 😻 +cat face with wry smile 😼 +kissing cat face with closed eyes 😽 +weary cat face 🙀 +crying cat face 😿 +pouting cat face 😾 +open hands 👐 +raising hands 🙌 +clapping hands 👏 +folded hands 🙏 +handshake 🤝 +thumbs up 👍 +thumbs down 👎 +oncoming fist 👊 +raised fist ✊ +left-facing fist 🤛 +right-facing fist 🤜 +crossed fingers 🤞 +victory hand ✌️ +sign of the horns 🤘 +OK hand 👌 +backhand index pointing left 👈 +backhand index pointing right 👉 +backhand index pointing up 👆 +backhand index pointing down 👇 +index pointing up ☝️ +raised hand ✋ +raised back of hand 🤚 +raised hand with fingers splayed 🖐 +vulcan salute 🖖 +waving hand 👋 +call me hand 🤙 +flexed biceps 💪 +middle finger 🖕 +writing hand ✍️ +selfie 🤳 +nail polish 💅 +ring 💍 +lipstick 💄 +kiss mark 💋 +mouth 👄 +tongue 👅 +ear 👂 +nose 👃 +footprints 👣 +eye 👁 +eyes 👀 +speaking head 🗣 +bust in silhouette 👤 +busts in silhouette 👥 +baby 👶 +boy 👦 +girl 👧 +man 👨 +woman 👩 +blond-haired woman 👱‍♀ +blond-haired person 👱 +old man 👴 +old woman 👵 +man with Chinese cap 👲 +woman wearing turban 👳‍♀ +person wearing turban 👳 +woman police officer 👮‍♀ +police officer 👮 +woman construction worker 👷‍♀ +construction worker 👷 +woman guard 💂‍♀ +guard 💂 +woman detective 🕵️‍♀️ +detective 🕵 +woman health worker 👩‍⚕ +man health worker 👨‍⚕ +woman farmer 👩‍🌾 +man farmer 👨‍🌾 +woman cook 👩‍🍳 +man cook 👨‍🍳 +woman student 👩‍🎓 +man student 👨‍🎓 +woman singer 👩‍🎤 +man singer 👨‍🎤 +woman teacher 👩‍🏫 +man teacher 👨‍🏫 +woman factory worker 👩‍🏭 +man factory worker 👨‍🏭 +woman technologist 👩‍💻 +man technologist 👨‍💻 +woman office worker 👩‍💼 +man office worker 👨‍💼 +woman mechanic 👩‍🔧 +man mechanic 👨‍🔧 +woman scientist 👩‍🔬 +man scientist 👨‍🔬 +woman artist 👩‍🎨 +man artist 👨‍🎨 +woman firefighter 👩‍🚒 +man firefighter 👨‍🚒 +woman pilot 👩‍✈ +man pilot 👨‍✈ +woman astronaut 👩‍🚀 +man astronaut 👨‍🚀 +woman judge 👩‍⚖ +man judge 👨‍⚖ +Mrs. Claus 🤶 +Santa Claus 🎅 +princess 👸 +prince 🤴 +bride with veil 👰 +man in tuxedo 🤵 +baby angel 👼 +pregnant woman 🤰 +woman bowing 🙇‍♀ +person bowing 🙇 +person tipping hand 💁 +man tipping hand 💁‍♂ +person gesturing NO 🙅 +man gesturing NO 🙅‍♂ +person gesturing OK 🙆 +man gesturing OK 🙆‍♂ +person raising hand 🙋 +man raising hand 🙋‍♂ +woman facepalming 🤦‍♀ +man facepalming 🤦‍♂ +woman shrugging 🤷‍♀ +man shrugging 🤷‍♂ +person pouting 🙎 +man pouting 🙎‍♂ +person frowning 🙍 +man frowning 🙍‍♂ +person getting haircut 💇 +man getting haircut 💇‍♂ +person getting massage 💆 +man getting massage 💆‍♂ +man in business suit levitating 🕴 +woman dancing 💃 +man dancing 🕺 +people with bunny ears partying 👯 +men with bunny ears partying 👯‍♂ +woman walking 🚶‍♀ +person walking 🚶 +woman running 🏃‍♀ +person running 🏃 +man and woman holding hands 👫 +two women holding hands 👭 +two men holding hands 👬 +couple with heart 💑 +couple with heart: woman woman 👩‍❤️‍👩 +couple with heart: man man 👨‍❤️‍👨 +kiss 💏 +kiss: woman woman 👩‍❤️‍💋‍👩 +kiss: man man 👨‍❤️‍💋‍👨 +family 👪 +family: man woman girl 👨‍👩‍👧 +family: man woman girl boy 👨‍👩‍👧‍👦 +family: man woman boy boy 👨‍👩‍👦‍👦 +family: man woman girl girl 👨‍👩‍👧‍👧 +family: woman woman boy 👩‍👩‍👦 +family: woman woman girl 👩‍👩‍👧 +family: woman woman girl boy 👩‍👩‍👧‍👦 +family: woman woman boy boy 👩‍👩‍👦‍👦 +family: woman woman girl girl 👩‍👩‍👧‍👧 +family: man man boy 👨‍👨‍👦 +family: man man girl 👨‍👨‍👧 +family: man man girl boy 👨‍👨‍👧‍👦 +family: man man boy boy 👨‍👨‍👦‍👦 +family: man man girl girl 👨‍👨‍👧‍👧 +family: woman boy 👩‍👦 +family: woman girl 👩‍👧 +family: woman girl boy 👩‍👧‍👦 +family: woman boy boy 👩‍👦‍👦 +family: woman girl girl 👩‍👧‍👧 +family: man boy 👨‍👦 +family: man girl 👨‍👧 +family: man girl boy 👨‍👧‍👦 +family: man boy boy 👨‍👦‍👦 +family: man girl girl 👨‍👧‍👧 +woman’s clothes 👚 +t-shirt 👕 +jeans 👖 +necktie 👔 +dress 👗 +bikini 👙 +kimono 👘 +high-heeled shoe 👠 +woman’s sandal 👡 +woman’s boot 👢 +man’s shoe 👞 +running shoe 👟 +woman’s hat 👒 +top hat 🎩 +graduation cap 🎓 +crown 👑 +rescue worker’s helmet ⛑ +school backpack 🎒 +clutch bag 👝 +purse 👛 +handbag 👜 +briefcase 💼 +glasses 👓 +sunglasses 🕶 +closed umbrella 🌂 +umbrella ☂️ +dog face 🐶 +cat face 🐱 +mouse face 🐭 +hamster face 🐹 +rabbit face 🐰 +fox face 🦊 +bear face 🐻 +panda face 🐼 +koala 🐨 +tiger face 🐯 +lion face 🦁 +cow face 🐮 +pig face 🐷 +pig nose 🐽 +frog face 🐸 +monkey face 🐵 +see-no-evil monkey 🙈 +hear-no-evil monkey 🙉 +speak-no-evil monkey 🙊 +monkey 🐒 +chicken 🐔 +penguin 🐧 +bird 🐦 +baby chick 🐤 +hatching chick 🐣 +front-facing baby chick 🐥 +duck 🦆 +eagle 🦅 +owl 🦉 +bat 🦇 +wolf face 🐺 +boar 🐗 +horse face 🐴 +unicorn face 🦄 +honeybee 🐝 +bug 🐛 +butterfly 🦋 +snail 🐌 +spiral shell 🐚 +lady beetle 🐞 +ant 🐜 +spider 🕷 +spider web 🕸 +turtle 🐢 +snake 🐍 +lizard 🦎 +scorpion 🦂 +crab 🦀 +squid 🦑 +octopus 🐙 +shrimp 🦐 +tropical fish 🐠 +fish 🐟 +blowfish 🐡 +dolphin 🐬 +shark 🦈 +spouting whale 🐳 +whale 🐋 +crocodile 🐊 +leopard 🐆 +tiger 🐅 +water buffalo 🐃 +ox 🐂 +cow 🐄 +deer 🦌 +camel 🐪 +two-hump camel 🐫 +elephant 🐘 +rhinoceros 🦏 +gorilla 🦍 +horse 🐎 +pig 🐖 +goat 🐐 +ram 🐏 +sheep 🐑 +dog 🐕 +poodle 🐩 +cat 🐈 +rooster 🐓 +turkey 🦃 +dove 🕊 +rabbit 🐇 +mouse 🐁 +rat 🐀 +chipmunk 🐿 +paw prints 🐾 +dragon 🐉 +dragon face 🐲 +cactus 🌵 +Christmas tree 🎄 +evergreen tree 🌲 +deciduous tree 🌳 +palm tree 🌴 +seedling 🌱 +herb 🌿 +shamrock ☘️ +four leaf clover 🍀 +pine decoration 🎍 +tanabata tree 🎋 +leaf fluttering in wind 🍃 +fallen leaf 🍂 +maple leaf 🍁 +mushroom 🍄 +sheaf of rice 🌾 +bouquet 💐 +tulip 🌷 +rose 🌹 +wilted flower 🥀 +sunflower 🌻 +blossom 🌼 +cherry blossom 🌸 +hibiscus 🌺 +globe showing Americas 🌎 +globe showing Europe-Africa 🌍 +globe showing Asia-Australia 🌏 +full moon 🌕 +waning gibbous moon 🌖 +last quarter moon 🌗 +waning crescent moon 🌘 +new moon 🌑 +waxing crescent moon 🌒 +first quarter moon 🌓 +waxing gibbous moon 🌔 +new moon face 🌚 +full moon with face 🌝 +sun with face 🌞 +first quarter moon with face 🌛 +last quarter moon with face 🌜 +crescent moon 🌙 +dizzy 💫 +white medium star ⭐️ +glowing star 🌟 +sparkles ✨ +high voltage ⚡️ +fire 🔥 +collision 💥 +comet ☄ +sun ☀️ +sun behind small cloud 🌤 +sun behind cloud ⛅️ +sun behind large cloud 🌥 +sun behind rain cloud 🌦 +rainbow 🌈 +cloud ☁️ +cloud with rain 🌧 +cloud with lightning and rain ⛈ +cloud with lightning 🌩 +cloud with snow 🌨 +snowman ☃️ +snowman without snow ⛄️ +snowflake ❄️ +wind face 🌬 +dashing away 💨 +tornado 🌪 +fog 🌫 +water wave 🌊 +droplet 💧 +sweat droplets 💦 +umbrella with rain drops ☔️ +green apple 🍏 +red apple 🍎 +pear 🍐 +tangerine 🍊 +lemon 🍋 +banana 🍌 +watermelon 🍉 +grapes 🍇 +strawberry 🍓 +melon 🍈 +cherries 🍒 +peach 🍑 +pineapple 🍍 +kiwi fruit 🥝 +avocado 🥑 +tomato 🍅 +eggplant 🍆 +cucumber 🥒 +carrot 🥕 +ear of corn 🌽 +hot pepper 🌶 +potato 🥔 +roasted sweet potato 🍠 +chestnut 🌰 +peanuts 🥜 +honey pot 🍯 +croissant 🥐 +bread 🍞 +baguette bread 🥖 +cheese wedge 🧀 +egg 🥚 +cooking 🍳 +bacon 🥓 +pancakes 🥞 +fried shrimp 🍤 +poultry leg 🍗 +meat on bone 🍖 +pizza 🍕 +hot dog 🌭 +hamburger 🍔 +french fries 🍟 +stuffed flatbread 🥙 +taco 🌮 +burrito 🌯 +green salad 🥗 +shallow pan of food 🥘 +spaghetti 🍝 +steaming bowl 🍜 +pot of food 🍲 +fish cake with swirl 🍥 +sushi 🍣 +bento box 🍱 +curry rice 🍛 +cooked rice 🍚 +rice ball 🍙 +rice cracker 🍘 +oden 🍢 +dango 🍡 +shaved ice 🍧 +ice cream 🍨 +soft ice cream 🍦 +shortcake 🍰 +birthday cake 🎂 +custard 🍮 +lollipop 🍭 +candy 🍬 +chocolate bar 🍫 +popcorn 🍿 +doughnut 🍩 +cookie 🍪 +glass of milk 🥛 +baby bottle 🍼 +hot beverage ☕️ +teacup without handle 🍵 +sake 🍶 +beer mug 🍺 +clinking beer mugs 🍻 +clinking glasses 🥂 +wine glass 🍷 +tumbler glass 🥃 +cocktail glass 🍸 +tropical drink 🍹 +bottle with popping cork 🍾 +spoon 🥄 +fork and knife 🍴 +fork and knife with plate 🍽 +soccer ball ⚽️ +basketball 🏀 +american football 🏈 +baseball ⚾️ +tennis 🎾 +volleyball 🏐 +rugby football 🏉 +pool 8 ball 🎱 +ping pong 🏓 +badminton 🏸 +goal net 🥅 +ice hockey 🏒 +field hockey 🏑 +cricket 🏏 +flag in hole ⛳️ +bow and arrow 🏹 +fishing pole 🎣 +boxing glove 🥊 +martial arts uniform 🥋 +ice skate ⛸ +skis 🎿 +skier ⛷ +snowboarder 🏂 +woman lifting weights 🏋️‍♀️ +person lifting weights 🏋 +person fencing 🤺 +women wrestling 🤼‍♀ +men wrestling 🤼‍♂ +woman cartwheeling 🤸‍♀ +man cartwheeling 🤸‍♂ +woman bouncing ball ⛹️‍♀️ +person bouncing ball ⛹ +woman playing handball 🤾‍♀ +man playing handball 🤾‍♂ +woman golfing 🏌️‍♀️ +person golfing 🏌 +woman surfing 🏄‍♀ +person surfing 🏄 +woman swimming 🏊‍♀ +person swimming 🏊 +woman playing water polo 🤽‍♀ +man playing water polo 🤽‍♂ +woman rowing boat 🚣‍♀ +person rowing boat 🚣 +horse racing 🏇 +woman biking 🚴‍♀ +person biking 🚴 +woman mountain biking 🚵‍♀ +person mountain biking 🚵 +running shirt 🎽 +sports medal 🏅 +military medal 🎖 +1st place medal 🥇 +2nd place medal 🥈 +3rd place medal 🥉 +trophy 🏆 +rosette 🏵 +reminder ribbon 🎗 +ticket 🎫 +admission tickets 🎟 +circus tent 🎪 +woman juggling 🤹‍♀ +man juggling 🤹‍♂ +performing arts 🎭 +artist palette 🎨 +clapper board 🎬 +microphone 🎤 +headphone 🎧 +musical score 🎼 +musical keyboard 🎹 +drum 🥁 +saxophone 🎷 +trumpet 🎺 +guitar 🎸 +violin 🎻 +game die 🎲 +direct hit 🎯 +bowling 🎳 +video game 🎮 +slot machine 🎰 +automobile 🚗 +taxi 🚕 +sport utility vehicle 🚙 +bus 🚌 +trolleybus 🚎 +racing car 🏎 +police car 🚓 +ambulance 🚑 +fire engine 🚒 +minibus 🚐 +delivery truck 🚚 +articulated lorry 🚛 +tractor 🚜 +kick scooter 🛴 +bicycle 🚲 +motor scooter 🛵 +motorcycle 🏍 +police car light 🚨 +oncoming police car 🚔 +oncoming bus 🚍 +oncoming automobile 🚘 +oncoming taxi 🚖 +aerial tramway 🚡 +mountain cableway 🚠 +suspension railway 🚟 +railway car 🚃 +tram car 🚋 +mountain railway 🚞 +monorail 🚝 +high-speed train 🚄 +high-speed train with bullet nose 🚅 +light rail 🚈 +locomotive 🚂 +train 🚆 +metro 🚇 +tram 🚊 +station 🚉 +helicopter 🚁 +small airplane 🛩 +airplane ✈️ +airplane departure 🛫 +airplane arrival 🛬 +rocket 🚀 +satellite 🛰 +seat 💺 +canoe 🛶 +sailboat ⛵️ +motor boat 🛥 +speedboat 🚤 +passenger ship 🛳 +ferry ⛴ +ship 🚢 +anchor ⚓️ +construction 🚧 +fuel pump ⛽️ +bus stop 🚏 +vertical traffic light 🚦 +horizontal traffic light 🚥 +world map 🗺 +moai 🗿 +Statue of Liberty 🗽 +fountain ⛲️ +Tokyo tower 🗼 +castle 🏰 +Japanese castle 🏯 +stadium 🏟 +ferris wheel 🎡 +roller coaster 🎢 +carousel horse 🎠 +umbrella on ground ⛱ +beach with umbrella 🏖 +desert island 🏝 +mountain ⛰ +snow-capped mountain 🏔 +mount fuji 🗻 +volcano 🌋 +desert 🏜 +camping 🏕 +tent ⛺️ +railway track 🛤 +motorway 🛣 +building construction 🏗 +factory 🏭 +house 🏠 +house with garden 🏡 +house 🏘 +derelict house 🏚 +office building 🏢 +department store 🏬 +Japanese post office 🏣 +post office 🏤 +hospital 🏥 +bank 🏦 +hotel 🏨 +convenience store 🏪 +school 🏫 +love hotel 🏩 +wedding 💒 +classical building 🏛 +church ⛪️ +mosque 🕌 +synagogue 🕍 +kaaba 🕋 +shinto shrine ⛩ +map of Japan 🗾 +moon viewing ceremony 🎑 +national park 🏞 +sunrise 🌅 +sunrise over mountains 🌄 +shooting star 🌠 +sparkler 🎇 +fireworks 🎆 +sunset 🌇 +cityscape at dusk 🌆 +cityscape 🏙 +night with stars 🌃 +milky way 🌌 +bridge at night 🌉 +foggy 🌁 +watch ⌚️ +mobile phone 📱 +mobile phone with arrow 📲 +laptop computer 💻 +keyboard ⌨️ +desktop computer 🖥 +printer 🖨 +computer mouse 🖱 +trackball 🖲 +joystick 🕹 +clamp 🗜 +computer disk 💽 +floppy disk 💾 +optical disk 💿 +dvd 📀 +videocassette 📼 +camera 📷 +camera with flash 📸 +video camera 📹 +movie camera 🎥 +film projector 📽 +film frames 🎞 +telephone receiver 📞 +telephone ☎️ +pager 📟 +fax machine 📠 +television 📺 +radio 📻 +studio microphone 🎙 +level slider 🎚 +control knobs 🎛 +stopwatch ⏱ +timer clock ⏲ +alarm clock ⏰ +mantelpiece clock 🕰 +hourglass ⌛️ +hourglass with flowing sand ⏳ +satellite antenna 📡 +battery 🔋 +electric plug 🔌 +light bulb 💡 +flashlight 🔦 +candle 🕯 +wastebasket 🗑 +oil drum 🛢 +money with wings 💸 +dollar banknote 💵 +yen banknote 💴 +euro banknote 💶 +pound banknote 💷 +money bag 💰 +credit card 💳 +gem stone 💎 +balance scale ⚖️ +wrench 🔧 +hammer 🔨 +hammer and pick ⚒ +hammer and wrench 🛠 +pick ⛏ +nut and bolt 🔩 +gear ⚙️ +chains ⛓ +pistol 🔫 +bomb 💣 +kitchen knife 🔪 +dagger 🗡 +crossed swords ⚔️ +shield 🛡 +cigarette 🚬 +coffin ⚰️ +funeral urn ⚱️ +amphora 🏺 +crystal ball 🔮 +prayer beads 📿 +barber pole 💈 +alembic ⚗️ +telescope 🔭 +microscope 🔬 +hole 🕳 +pill 💊 +syringe 💉 +thermometer 🌡 +toilet 🚽 +potable water 🚰 +shower 🚿 +bathtub 🛁 +person taking bath 🛀 +bellhop bell 🛎 +key 🔑 +old key 🗝 +door 🚪 +couch and lamp 🛋 +bed 🛏 +person in bed 🛌 +framed picture 🖼 +shopping bags 🛍 +shopping cart 🛒 +wrapped gift 🎁 +balloon 🎈 +carp streamer 🎏 +ribbon 🎀 +confetti ball 🎊 +party popper 🎉 +Japanese dolls 🎎 +red paper lantern 🏮 +wind chime 🎐 +envelope ✉️ +envelope with arrow 📩 +incoming envelope 📨 +e-mail 📧 +love letter 💌 +inbox tray 📥 +outbox tray 📤 +package 📦 +label 🏷 +closed mailbox with lowered flag 📪 +closed mailbox with raised flag 📫 +open mailbox with raised flag 📬 +open mailbox with lowered flag 📭 +postbox 📮 +postal horn 📯 +scroll 📜 +page with curl 📃 +page facing up 📄 +bookmark tabs 📑 +bar chart 📊 +chart increasing 📈 +chart decreasing 📉 +spiral notepad 🗒 +spiral calendar 🗓 +tear-off calendar 📆 +calendar 📅 +card index 📇 +card file box 🗃 +ballot box with ballot 🗳 +file cabinet 🗄 +clipboard 📋 +file folder 📁 +open file folder 📂 +card index dividers 🗂 +rolled-up newspaper 🗞 +newspaper 📰 +notebook 📓 +notebook with decorative cover 📔 +ledger 📒 +closed book 📕 +green book 📗 +blue book 📘 +orange book 📙 +books 📚 +open book 📖 +bookmark 🔖 +link 🔗 +paperclip 📎 +linked paperclips 🖇 +triangular ruler 📐 +straight ruler 📏 +pushpin 📌 +round pushpin 📍 +scissors ✂️ +pen 🖊 +fountain pen 🖋 +black nib ✒️ +paintbrush 🖌 +crayon 🖍 +memo 📝 +pencil ✏️ +left-pointing magnifying glass 🔍 +right-pointing magnifying glass 🔎 +locked with pen 🔏 +locked with key 🔐 +locked 🔒 +unlocked 🔓 +red heart ❤️ +yellow heart 💛 +green heart 💚 +blue heart 💙 +purple heart 💜 +black heart 🖤 +broken heart 💔 +heavy heart exclamation ❣️ +two hearts 💕 +revolving hearts 💞 +beating heart 💓 +growing heart 💗 +sparkling heart 💖 +heart with arrow 💘 +heart with ribbon 💝 +heart decoration 💟 +peace symbol ☮️ +latin cross ✝️ +star and crescent ☪️ +om 🕉 +wheel of dharma ☸️ +star of David ✡️ +dotted six-pointed star 🔯 +menorah 🕎 +yin yang ☯️ +orthodox cross ☦️ +place of worship 🛐 +Ophiuchus ⛎ +Aries ♈️ +Taurus ♉️ +Gemini ♊️ +Cancer ♋️ +Leo ♌️ +Virgo ♍️ +Libra ♎️ +Scorpius ♏️ +Sagittarius ♐️ +Capricorn ♑️ +Aquarius ♒️ +Pisces ♓️ +ID button 🆔 +atom symbol ⚛️ +Japanese “acceptable” button 🉑 +radioactive ☢️ +biohazard ☣️ +mobile phone off 📴 +vibration mode 📳 +Japanese “not free of charge” button 🈶 +Japanese “free of charge” button 🈚️ +Japanese “application” button 🈸 +Japanese “open for business” button 🈺 +Japanese “monthly amount” button 🈷️ +eight-pointed star ✴️ +VS button 🆚 +white flower 💮 +Japanese “bargain” button 🉐 +Japanese “secret” button ㊙️ +Japanese “congratulations” button ㊗️ +Japanese “passing grade” button 🈴 +Japanese “no vacancy” button 🈵 +Japanese “discount” button 🈹 +Japanese “prohibited” button 🈲 +A button (blood type) 🅰️ +B button (blood type) 🅱️ +AB button (blood type) 🆎 +CL button 🆑 +O button (blood type) 🅾️ +SOS button 🆘 +cross mark ❌ +heavy large circle ⭕️ +stop sign 🛑 +no entry ⛔️ +name badge 📛 +prohibited 🚫 +hundred points 💯 +anger symbol 💢 +hot springs ♨️ +no pedestrians 🚷 +no littering 🚯 +no bicycles 🚳 +non-potable water 🚱 +no one under eighteen 🔞 +no mobile phones 📵 +no smoking 🚭 +exclamation mark ❗️ +white exclamation mark ❕ +question mark ❓ +white question mark ❔ +double exclamation mark ‼️ +exclamation question mark ⁉️ +dim button 🔅 +bright button 🔆 +part alternation mark 〽️ +warning ⚠️ +children crossing 🚸 +trident emblem 🔱 +fleur-de-lis ⚜️ +Japanese symbol for beginner 🔰 +recycling symbol ♻️ +white heavy check mark ✅ +Japanese “reserved” button 🈯️ +chart increasing with yen 💹 +sparkle ❇️ +eight-spoked asterisk ✳️ +cross mark button ❎ +globe with meridians 🌐 +diamond with a dot 💠 +circled M Ⓜ️ +cyclone 🌀 +zzz 💤 +ATM sign 🏧 +water closet 🚾 +wheelchair symbol ♿️ +P button 🅿️ +Japanese “vacancy” button 🈳 +Japanese “service charge” button 🈂️ +passport control 🛂 +customs 🛃 +baggage claim 🛄 +left luggage 🛅 +men’s room 🚹 +women’s room 🚺 +baby symbol 🚼 +restroom 🚻 +litter in bin sign 🚮 +cinema 🎦 +antenna bars 📶 +Japanese “here” button 🈁 +input symbols 🔣 +information ℹ️ +input latin letters 🔤 +input latin lowercase 🔡 +input latin uppercase 🔠 +NG button 🆖 +OK button 🆗 +UP! button 🆙 +COOL button 🆒 +NEW button 🆕 +FREE button 🆓 +keycap: 0 0️⃣ +keycap: 1 1️⃣ +keycap: 2 2️⃣ +keycap: 3 3️⃣ +keycap: 4 4️⃣ +keycap: 5 5️⃣ +keycap: 6 6️⃣ +keycap: 7 7️⃣ +keycap: 8 8️⃣ +keycap: 9 9️⃣ +keycap 10 🔟 +input numbers 🔢 +keycap: # #️⃣ +keycap: * *️⃣ +play button ▶️ +pause button ⏸ +play or pause button ⏯ +stop button ⏹ +record button ⏺ +next track button ⏭ +last track button ⏮ +fast-forward button ⏩ +fast reverse button ⏪ +fast up button ⏫ +fast down button ⏬ +reverse button ◀️ +up button 🔼 +down button 🔽 +right arrow ➡️ +left arrow ⬅️ +up arrow ⬆️ +down arrow ⬇️ +up-right arrow ↗️ +down-right arrow ↘️ +down-left arrow ↙️ +up-left arrow ↖️ +up-down arrow ↕️ +left-right arrow ↔️ +left arrow curving right ↪️ +right arrow curving left ↩️ +right arrow curving up ⤴️ +right arrow curving down ⤵️ +shuffle tracks button 🔀 +repeat button 🔁 +repeat single button 🔂 +anticlockwise arrows button 🔄 +clockwise vertical arrows 🔃 +musical note 🎵 +musical notes 🎶 +heavy plus sign ➕ +heavy minus sign ➖ +heavy division sign ➗ +heavy multiplication x ✖️ +heavy dollar sign 💲 +currency exchange 💱 +trade mark ™️ +copyright ©️ +registered ®️ +wavy dash 〰️ +curly loop ➰ +double curly loop ➿ +END arrow 🔚 +BACK arrow 🔙 +ON! arrow 🔛 +TOP arrow 🔝 +SOON arrow 🔜 +heavy check mark ✔️ +ballot box with check ☑️ +radio button 🔘 +white circle ⚪️ +black circle ⚫️ +red circle 🔴 +blue circle 🔵 +red triangle pointed up 🔺 +red triangle pointed down 🔻 +small orange diamond 🔸 +small blue diamond 🔹 +large orange diamond 🔶 +large blue diamond 🔷 +white square button 🔳 +black square button 🔲 +black small square ▪️ +white small square ▫️ +black medium-small square ◾️ +white medium-small square ◽️ +black medium square ◼️ +white medium square ◻️ +black large square ⬛️ +white large square ⬜️ +speaker low volume 🔈 +muted speaker 🔇 +speaker medium volume 🔉 +speaker high volume 🔊 +bell 🔔 +bell with slash 🔕 +megaphone 📣 +loudspeaker 📢 +eye in speech bubble 👁‍🗨 +speech balloon 💬 +thought balloon 💭 +right anger bubble 🗯 +spade suit ♠️ +club suit ♣️ +heart suit ♥️ +diamond suit ♦️ +joker 🃏 +flower playing cards 🎴 +mahjong red dragon 🀄️ +one o’clock 🕐 +two o’clock 🕑 +three o’clock 🕒 +four o’clock 🕓 +five o’clock 🕔 +six o’clock 🕕 +seven o’clock 🕖 +eight o’clock 🕗 +nine o’clock 🕘 +ten o’clock 🕙 +eleven o’clock 🕚 +twelve o’clock 🕛 +one-thirty 🕜 +two-thirty 🕝 +three-thirty 🕞 +four-thirty 🕟 +five-thirty 🕠 +six-thirty 🕡 +seven-thirty 🕢 +eight-thirty 🕣 +nine-thirty 🕤 +ten-thirty 🕥 +eleven-thirty 🕦 +twelve-thirty 🕧 +white flag 🏳️ +black flag 🏴 +chequered flag 🏁 +triangular flag 🚩 +rainbow flag 🏳️‍🌈 +Afghanistan 🇦🇫 +Åland Islands 🇦🇽 +Albania 🇦🇱 +Algeria 🇩🇿 +American Samoa 🇦🇸 +Andorra 🇦🇩 +Angola 🇦🇴 +Anguilla 🇦🇮 +Antarctica 🇦🇶 +Antigua & Barbuda 🇦🇬 +Argentina 🇦🇷 +Armenia 🇦🇲 +Aruba 🇦🇼 +Australia 🇦🇺 +Austria 🇦🇹 +Azerbaijan 🇦🇿 +Bahamas 🇧🇸 +Bahrain 🇧🇭 +Bangladesh 🇧🇩 +Barbados 🇧🇧 +Belarus 🇧🇾 +Belgium 🇧🇪 +Belize 🇧🇿 +Benin 🇧🇯 +Bermuda 🇧🇲 +Bhutan 🇧🇹 +Bolivia 🇧🇴 +Caribbean Netherlands 🇧🇶 +Bosnia & Herzegovina 🇧🇦 +Botswana 🇧🇼 +Brazil 🇧🇷 +British Indian Ocean Territory 🇮🇴 +British Virgin Islands 🇻🇬 +Brunei 🇧🇳 +Bulgaria 🇧🇬 +Burkina Faso 🇧🇫 +Burundi 🇧🇮 +Cape Verde 🇨🇻 +Cambodia 🇰🇭 +Cameroon 🇨🇲 +Canada 🇨🇦 +Canary Islands 🇮🇨 +Cayman Islands 🇰🇾 +Central African Republic 🇨🇫 +Chad 🇹🇩 +Chile 🇨🇱 +China 🇨🇳 +Christmas Island 🇨🇽 +Cocos (Keeling) Islands 🇨🇨 +Colombia 🇨🇴 +Comoros 🇰🇲 +Congo - Brazzaville 🇨🇬 +Congo - Kinshasa 🇨🇩 +Cook Islands 🇨🇰 +Costa Rica 🇨🇷 +Côte d’Ivoire 🇨🇮 +Croatia 🇭🇷 +Cuba 🇨🇺 +Curaçao 🇨🇼 +Cyprus 🇨🇾 +Czech Republic 🇨🇿 +Denmark 🇩🇰 +Djibouti 🇩🇯 +Dominica 🇩🇲 +Dominican Republic 🇩🇴 +Ecuador 🇪🇨 +Egypt 🇪🇬 +El Salvador 🇸🇻 +Equatorial Guinea 🇬🇶 +Eritrea 🇪🇷 +Estonia 🇪🇪 +Ethiopia 🇪🇹 +European Union 🇪🇺 +Falkland Islands 🇫🇰 +Faroe Islands 🇫🇴 +Fiji 🇫🇯 +Finland 🇫🇮 +France 🇫🇷 +French Guiana 🇬🇫 +French Polynesia 🇵🇫 +French Southern Territories 🇹🇫 +Gabon 🇬🇦 +Gambia 🇬🇲 +Georgia 🇬🇪 +Germany 🇩🇪 +Ghana 🇬🇭 +Gibraltar 🇬🇮 +Greece 🇬🇷 +Greenland 🇬🇱 +Grenada 🇬🇩 +Guadeloupe 🇬🇵 +Guam 🇬🇺 +Guatemala 🇬🇹 +Guernsey 🇬🇬 +Guinea 🇬🇳 +Guinea-Bissau 🇬🇼 +Guyana 🇬🇾 +Haiti 🇭🇹 +Honduras 🇭🇳 +Hong Kong SAR China 🇭🇰 +Hungary 🇭🇺 +Iceland 🇮🇸 +India 🇮🇳 +Indonesia 🇮🇩 +Iran 🇮🇷 +Iraq 🇮🇶 +Ireland 🇮🇪 +Isle of Man 🇮🇲 +Israel 🇮🇱 +Italy 🇮🇹 +Jamaica 🇯🇲 +Japan 🇯🇵 +crossed flags 🎌 +Jersey 🇯🇪 +Jordan 🇯🇴 +Kazakhstan 🇰🇿 +Kenya 🇰🇪 +Kiribati 🇰🇮 +Kosovo 🇽🇰 +Kuwait 🇰🇼 +Kyrgyzstan 🇰🇬 +Laos 🇱🇦 +Latvia 🇱🇻 +Lebanon 🇱🇧 +Lesotho 🇱🇸 +Liberia 🇱🇷 +Libya 🇱🇾 +Liechtenstein 🇱🇮 +Lithuania 🇱🇹 +Luxembourg 🇱🇺 +Macau SAR China 🇲🇴 +Macedonia 🇲🇰 +Madagascar 🇲🇬 +Malawi 🇲🇼 +Malaysia 🇲🇾 +Maldives 🇲🇻 +Mali 🇲🇱 +Malta 🇲🇹 +Marshall Islands 🇲🇭 +Martinique 🇲🇶 +Mauritania 🇲🇷 +Mauritius 🇲🇺 +Mayotte 🇾🇹 +Mexico 🇲🇽 +Micronesia 🇫🇲 +Moldova 🇲🇩 +Monaco 🇲🇨 +Mongolia 🇲🇳 +Montenegro 🇲🇪 +Montserrat 🇲🇸 +Morocco 🇲🇦 +Mozambique 🇲🇿 +Myanmar (Burma) 🇲🇲 +Namibia 🇳🇦 +Nauru 🇳🇷 +Nepal 🇳🇵 +Netherlands 🇳🇱 +New Caledonia 🇳🇨 +New Zealand 🇳🇿 +Nicaragua 🇳🇮 +Niger 🇳🇪 +Nigeria 🇳🇬 +Niue 🇳🇺 +Norfolk Island 🇳🇫 +Northern Mariana Islands 🇲🇵 +North Korea 🇰🇵 +Norway 🇳🇴 +Oman 🇴🇲 +Pakistan 🇵🇰 +Palau 🇵🇼 +Palestinian Territories 🇵🇸 +Panama 🇵🇦 +Papua New Guinea 🇵🇬 +Paraguay 🇵🇾 +Peru 🇵🇪 +Philippines 🇵🇭 +Pitcairn Islands 🇵🇳 +Poland 🇵🇱 +Portugal 🇵🇹 +Puerto Rico 🇵🇷 +Qatar 🇶🇦 +Réunion 🇷🇪 +Romania 🇷🇴 +Russia 🇷🇺 +Rwanda 🇷🇼 +St. Barthélemy 🇧🇱 +St. Helena 🇸🇭 +St. Kitts & Nevis 🇰🇳 +St. Lucia 🇱🇨 +St. Pierre & Miquelon 🇵🇲 +St. Vincent & Grenadines 🇻🇨 +Samoa 🇼🇸 +San Marino 🇸🇲 +São Tomé & Príncipe 🇸🇹 +Saudi Arabia 🇸🇦 +Senegal 🇸🇳 +Serbia 🇷🇸 +Seychelles 🇸🇨 +Sierra Leone 🇸🇱 +Singapore 🇸🇬 +Sint Maarten 🇸🇽 +Slovakia 🇸🇰 +Slovenia 🇸🇮 +Solomon Islands 🇸🇧 +Somalia 🇸🇴 +South Africa 🇿🇦 +South Georgia & South Sandwich Islands 🇬🇸 +South Korea 🇰🇷 +South Sudan 🇸🇸 +Spain 🇪🇸 +Sri Lanka 🇱🇰 +Sudan 🇸🇩 +Suriname 🇸🇷 +Swaziland 🇸🇿 +Sweden 🇸🇪 +Switzerland 🇨🇭 +Syria 🇸🇾 +Taiwan 🇹🇼 +Tajikistan 🇹🇯 +Tanzania 🇹🇿 +Thailand 🇹🇭 +Timor-Leste 🇹🇱 +Togo 🇹🇬 +Tokelau 🇹🇰 +Tonga 🇹🇴 +Trinidad & Tobago 🇹🇹 +Tunisia 🇹🇳 +Turkey 🇹🇷 +Turkmenistan 🇹🇲 +Turks & Caicos Islands 🇹🇨 +Tuvalu 🇹🇻 +Uganda 🇺🇬 +Ukraine 🇺🇦 +United Arab Emirates 🇦🇪 +United Kingdom 🇬🇧 +United States 🇺🇸 +U.S. Virgin Islands 🇻🇮 +Uruguay 🇺🇾 +Uzbekistan 🇺🇿 +Vanuatu 🇻🇺 +Vatican City 🇻🇦 +Venezuela 🇻🇪 +Vietnam 🇻🇳 +Wallis & Futuna 🇼🇫 +Western Sahara 🇪🇭 +Yemen 🇾🇪 +Zambia 🇿🇲 +Zimbabwe 🇿🇼 diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index ccabb80..665d5ce 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -53,6 +53,9 @@ myKeyPBindings = -- yeganesh launcher , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") + -- yeganesh emoji + , ("M-o", spawnHere "~/dev/libre/dotfiles/scripts/ad-hoc/dmenu-emoji.sh") + -- Lock screen , ("C-M-l", spawn "dm-tool switch-to-greeter") -- cgit v1.2.3 From 0534ff7297ce2c3fd3c6e18b7313c0c23482fedc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 3 Feb 2020 14:08:01 -0300 Subject: Refactor dmenu-emoji.sh --- scripts/ad-hoc/dmenu-emoji.sh | 1463 +---------------------------------------- scripts/ad-hoc/emoji-list.txt | 1432 ++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1441 insertions(+), 1454 deletions(-) create mode 100755 scripts/ad-hoc/emoji-list.txt diff --git a/scripts/ad-hoc/dmenu-emoji.sh b/scripts/ad-hoc/dmenu-emoji.sh index 7ade31e..dc29929 100755 --- a/scripts/ad-hoc/dmenu-emoji.sh +++ b/scripts/ad-hoc/dmenu-emoji.sh @@ -1,1458 +1,13 @@ #!/usr/bin/env bash -set -e +set -euo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" -# Taken from: +# Derived from: # https://github.com/porras/dmenu-emoji -case "$1" in - "list") - data=$(sed '0,/^__DATA__$/d' "$0") - echo "$data" - ;; - "copy") - input=$(tee) - if [ ! -z "$input" ]; then - emoji=${input: -1} - echo -n "$emoji" | xclip -selection c - fi - ;; - "") - bash $0 list | dmenu -l 20 -i -p 'Emoji: ' -fn Monospace-18 | bash $0 copy - ;; -esac - -exit - -__DATA__ -grinning face 😀 -smiling face with open mouth 😃 -smiling face with open mouth & smiling eyes 😄 -grinning face with smiling eyes 😁 -smiling face with open mouth & closed eyes 😆 -smiling face with open mouth & cold sweat 😅 -face with tears of joy 😂 -rolling on the floor laughing 🤣 -smiling face ☺️ -smiling face with smiling eyes 😊 -smiling face with halo 😇 -slightly smiling face 🙂 -upside-down face 🙃 -winking face 😉 -relieved face 😌 -smiling face with heart-eyes 😍 -face blowing a kiss 😘 -kissing face 😗 -kissing face with smiling eyes 😙 -kissing face with closed eyes 😚 -face savouring delicious food 😋 -face with stuck-out tongue & winking eye 😜 -face with stuck-out tongue & closed eyes 😝 -face with stuck-out tongue 😛 -money-mouth face 🤑 -hugging face 🤗 -nerd face 🤓 -smiling face with sunglasses 😎 -clown face 🤡 -cowboy hat face 🤠 -smirking face 😏 -unamused face 😒 -disappointed face 😞 -pensive face 😔 -worried face 😟 -confused face 😕 -slightly frowning face 🙁 -frowning face ☹️ -persevering face 😣 -confounded face 😖 -tired face 😫 -weary face 😩 -face with steam from nose 😤 -angry face 😠 -pouting face 😡 -face without mouth 😶 -neutral face 😐 -expressionless face 😑 -hushed face 😯 -frowning face with open mouth 😦 -anguished face 😧 -face with open mouth 😮 -astonished face 😲 -dizzy face 😵 -flushed face 😳 -face screaming in fear 😱 -fearful face 😨 -face with open mouth & cold sweat 😰 -crying face 😢 -disappointed but relieved face 😥 -drooling face 🤤 -loudly crying face 😭 -face with cold sweat 😓 -sleepy face 😪 -sleeping face 😴 -face with rolling eyes 🙄 -thinking face 🤔 -lying face 🤥 -grimacing face 😬 -zipper-mouth face 🤐 -nauseated face 🤢 -sneezing face 🤧 -face with medical mask 😷 -face with thermometer 🤒 -face with head-bandage 🤕 -smiling face with horns 😈 -angry face with horns 👿 -ogre 👹 -goblin 👺 -pile of poo 💩 -ghost 👻 -skull 💀 -skull and crossbones ☠️ -alien 👽 -alien monster 👾 -robot face 🤖 -jack-o-lantern 🎃 -smiling cat face with open mouth 😺 -grinning cat face with smiling eyes 😸 -cat face with tears of joy 😹 -smiling cat face with heart-eyes 😻 -cat face with wry smile 😼 -kissing cat face with closed eyes 😽 -weary cat face 🙀 -crying cat face 😿 -pouting cat face 😾 -open hands 👐 -raising hands 🙌 -clapping hands 👏 -folded hands 🙏 -handshake 🤝 -thumbs up 👍 -thumbs down 👎 -oncoming fist 👊 -raised fist ✊ -left-facing fist 🤛 -right-facing fist 🤜 -crossed fingers 🤞 -victory hand ✌️ -sign of the horns 🤘 -OK hand 👌 -backhand index pointing left 👈 -backhand index pointing right 👉 -backhand index pointing up 👆 -backhand index pointing down 👇 -index pointing up ☝️ -raised hand ✋ -raised back of hand 🤚 -raised hand with fingers splayed 🖐 -vulcan salute 🖖 -waving hand 👋 -call me hand 🤙 -flexed biceps 💪 -middle finger 🖕 -writing hand ✍️ -selfie 🤳 -nail polish 💅 -ring 💍 -lipstick 💄 -kiss mark 💋 -mouth 👄 -tongue 👅 -ear 👂 -nose 👃 -footprints 👣 -eye 👁 -eyes 👀 -speaking head 🗣 -bust in silhouette 👤 -busts in silhouette 👥 -baby 👶 -boy 👦 -girl 👧 -man 👨 -woman 👩 -blond-haired woman 👱‍♀ -blond-haired person 👱 -old man 👴 -old woman 👵 -man with Chinese cap 👲 -woman wearing turban 👳‍♀ -person wearing turban 👳 -woman police officer 👮‍♀ -police officer 👮 -woman construction worker 👷‍♀ -construction worker 👷 -woman guard 💂‍♀ -guard 💂 -woman detective 🕵️‍♀️ -detective 🕵 -woman health worker 👩‍⚕ -man health worker 👨‍⚕ -woman farmer 👩‍🌾 -man farmer 👨‍🌾 -woman cook 👩‍🍳 -man cook 👨‍🍳 -woman student 👩‍🎓 -man student 👨‍🎓 -woman singer 👩‍🎤 -man singer 👨‍🎤 -woman teacher 👩‍🏫 -man teacher 👨‍🏫 -woman factory worker 👩‍🏭 -man factory worker 👨‍🏭 -woman technologist 👩‍💻 -man technologist 👨‍💻 -woman office worker 👩‍💼 -man office worker 👨‍💼 -woman mechanic 👩‍🔧 -man mechanic 👨‍🔧 -woman scientist 👩‍🔬 -man scientist 👨‍🔬 -woman artist 👩‍🎨 -man artist 👨‍🎨 -woman firefighter 👩‍🚒 -man firefighter 👨‍🚒 -woman pilot 👩‍✈ -man pilot 👨‍✈ -woman astronaut 👩‍🚀 -man astronaut 👨‍🚀 -woman judge 👩‍⚖ -man judge 👨‍⚖ -Mrs. Claus 🤶 -Santa Claus 🎅 -princess 👸 -prince 🤴 -bride with veil 👰 -man in tuxedo 🤵 -baby angel 👼 -pregnant woman 🤰 -woman bowing 🙇‍♀ -person bowing 🙇 -person tipping hand 💁 -man tipping hand 💁‍♂ -person gesturing NO 🙅 -man gesturing NO 🙅‍♂ -person gesturing OK 🙆 -man gesturing OK 🙆‍♂ -person raising hand 🙋 -man raising hand 🙋‍♂ -woman facepalming 🤦‍♀ -man facepalming 🤦‍♂ -woman shrugging 🤷‍♀ -man shrugging 🤷‍♂ -person pouting 🙎 -man pouting 🙎‍♂ -person frowning 🙍 -man frowning 🙍‍♂ -person getting haircut 💇 -man getting haircut 💇‍♂ -person getting massage 💆 -man getting massage 💆‍♂ -man in business suit levitating 🕴 -woman dancing 💃 -man dancing 🕺 -people with bunny ears partying 👯 -men with bunny ears partying 👯‍♂ -woman walking 🚶‍♀ -person walking 🚶 -woman running 🏃‍♀ -person running 🏃 -man and woman holding hands 👫 -two women holding hands 👭 -two men holding hands 👬 -couple with heart 💑 -couple with heart: woman woman 👩‍❤️‍👩 -couple with heart: man man 👨‍❤️‍👨 -kiss 💏 -kiss: woman woman 👩‍❤️‍💋‍👩 -kiss: man man 👨‍❤️‍💋‍👨 -family 👪 -family: man woman girl 👨‍👩‍👧 -family: man woman girl boy 👨‍👩‍👧‍👦 -family: man woman boy boy 👨‍👩‍👦‍👦 -family: man woman girl girl 👨‍👩‍👧‍👧 -family: woman woman boy 👩‍👩‍👦 -family: woman woman girl 👩‍👩‍👧 -family: woman woman girl boy 👩‍👩‍👧‍👦 -family: woman woman boy boy 👩‍👩‍👦‍👦 -family: woman woman girl girl 👩‍👩‍👧‍👧 -family: man man boy 👨‍👨‍👦 -family: man man girl 👨‍👨‍👧 -family: man man girl boy 👨‍👨‍👧‍👦 -family: man man boy boy 👨‍👨‍👦‍👦 -family: man man girl girl 👨‍👨‍👧‍👧 -family: woman boy 👩‍👦 -family: woman girl 👩‍👧 -family: woman girl boy 👩‍👧‍👦 -family: woman boy boy 👩‍👦‍👦 -family: woman girl girl 👩‍👧‍👧 -family: man boy 👨‍👦 -family: man girl 👨‍👧 -family: man girl boy 👨‍👧‍👦 -family: man boy boy 👨‍👦‍👦 -family: man girl girl 👨‍👧‍👧 -woman’s clothes 👚 -t-shirt 👕 -jeans 👖 -necktie 👔 -dress 👗 -bikini 👙 -kimono 👘 -high-heeled shoe 👠 -woman’s sandal 👡 -woman’s boot 👢 -man’s shoe 👞 -running shoe 👟 -woman’s hat 👒 -top hat 🎩 -graduation cap 🎓 -crown 👑 -rescue worker’s helmet ⛑ -school backpack 🎒 -clutch bag 👝 -purse 👛 -handbag 👜 -briefcase 💼 -glasses 👓 -sunglasses 🕶 -closed umbrella 🌂 -umbrella ☂️ -dog face 🐶 -cat face 🐱 -mouse face 🐭 -hamster face 🐹 -rabbit face 🐰 -fox face 🦊 -bear face 🐻 -panda face 🐼 -koala 🐨 -tiger face 🐯 -lion face 🦁 -cow face 🐮 -pig face 🐷 -pig nose 🐽 -frog face 🐸 -monkey face 🐵 -see-no-evil monkey 🙈 -hear-no-evil monkey 🙉 -speak-no-evil monkey 🙊 -monkey 🐒 -chicken 🐔 -penguin 🐧 -bird 🐦 -baby chick 🐤 -hatching chick 🐣 -front-facing baby chick 🐥 -duck 🦆 -eagle 🦅 -owl 🦉 -bat 🦇 -wolf face 🐺 -boar 🐗 -horse face 🐴 -unicorn face 🦄 -honeybee 🐝 -bug 🐛 -butterfly 🦋 -snail 🐌 -spiral shell 🐚 -lady beetle 🐞 -ant 🐜 -spider 🕷 -spider web 🕸 -turtle 🐢 -snake 🐍 -lizard 🦎 -scorpion 🦂 -crab 🦀 -squid 🦑 -octopus 🐙 -shrimp 🦐 -tropical fish 🐠 -fish 🐟 -blowfish 🐡 -dolphin 🐬 -shark 🦈 -spouting whale 🐳 -whale 🐋 -crocodile 🐊 -leopard 🐆 -tiger 🐅 -water buffalo 🐃 -ox 🐂 -cow 🐄 -deer 🦌 -camel 🐪 -two-hump camel 🐫 -elephant 🐘 -rhinoceros 🦏 -gorilla 🦍 -horse 🐎 -pig 🐖 -goat 🐐 -ram 🐏 -sheep 🐑 -dog 🐕 -poodle 🐩 -cat 🐈 -rooster 🐓 -turkey 🦃 -dove 🕊 -rabbit 🐇 -mouse 🐁 -rat 🐀 -chipmunk 🐿 -paw prints 🐾 -dragon 🐉 -dragon face 🐲 -cactus 🌵 -Christmas tree 🎄 -evergreen tree 🌲 -deciduous tree 🌳 -palm tree 🌴 -seedling 🌱 -herb 🌿 -shamrock ☘️ -four leaf clover 🍀 -pine decoration 🎍 -tanabata tree 🎋 -leaf fluttering in wind 🍃 -fallen leaf 🍂 -maple leaf 🍁 -mushroom 🍄 -sheaf of rice 🌾 -bouquet 💐 -tulip 🌷 -rose 🌹 -wilted flower 🥀 -sunflower 🌻 -blossom 🌼 -cherry blossom 🌸 -hibiscus 🌺 -globe showing Americas 🌎 -globe showing Europe-Africa 🌍 -globe showing Asia-Australia 🌏 -full moon 🌕 -waning gibbous moon 🌖 -last quarter moon 🌗 -waning crescent moon 🌘 -new moon 🌑 -waxing crescent moon 🌒 -first quarter moon 🌓 -waxing gibbous moon 🌔 -new moon face 🌚 -full moon with face 🌝 -sun with face 🌞 -first quarter moon with face 🌛 -last quarter moon with face 🌜 -crescent moon 🌙 -dizzy 💫 -white medium star ⭐️ -glowing star 🌟 -sparkles ✨ -high voltage ⚡️ -fire 🔥 -collision 💥 -comet ☄ -sun ☀️ -sun behind small cloud 🌤 -sun behind cloud ⛅️ -sun behind large cloud 🌥 -sun behind rain cloud 🌦 -rainbow 🌈 -cloud ☁️ -cloud with rain 🌧 -cloud with lightning and rain ⛈ -cloud with lightning 🌩 -cloud with snow 🌨 -snowman ☃️ -snowman without snow ⛄️ -snowflake ❄️ -wind face 🌬 -dashing away 💨 -tornado 🌪 -fog 🌫 -water wave 🌊 -droplet 💧 -sweat droplets 💦 -umbrella with rain drops ☔️ -green apple 🍏 -red apple 🍎 -pear 🍐 -tangerine 🍊 -lemon 🍋 -banana 🍌 -watermelon 🍉 -grapes 🍇 -strawberry 🍓 -melon 🍈 -cherries 🍒 -peach 🍑 -pineapple 🍍 -kiwi fruit 🥝 -avocado 🥑 -tomato 🍅 -eggplant 🍆 -cucumber 🥒 -carrot 🥕 -ear of corn 🌽 -hot pepper 🌶 -potato 🥔 -roasted sweet potato 🍠 -chestnut 🌰 -peanuts 🥜 -honey pot 🍯 -croissant 🥐 -bread 🍞 -baguette bread 🥖 -cheese wedge 🧀 -egg 🥚 -cooking 🍳 -bacon 🥓 -pancakes 🥞 -fried shrimp 🍤 -poultry leg 🍗 -meat on bone 🍖 -pizza 🍕 -hot dog 🌭 -hamburger 🍔 -french fries 🍟 -stuffed flatbread 🥙 -taco 🌮 -burrito 🌯 -green salad 🥗 -shallow pan of food 🥘 -spaghetti 🍝 -steaming bowl 🍜 -pot of food 🍲 -fish cake with swirl 🍥 -sushi 🍣 -bento box 🍱 -curry rice 🍛 -cooked rice 🍚 -rice ball 🍙 -rice cracker 🍘 -oden 🍢 -dango 🍡 -shaved ice 🍧 -ice cream 🍨 -soft ice cream 🍦 -shortcake 🍰 -birthday cake 🎂 -custard 🍮 -lollipop 🍭 -candy 🍬 -chocolate bar 🍫 -popcorn 🍿 -doughnut 🍩 -cookie 🍪 -glass of milk 🥛 -baby bottle 🍼 -hot beverage ☕️ -teacup without handle 🍵 -sake 🍶 -beer mug 🍺 -clinking beer mugs 🍻 -clinking glasses 🥂 -wine glass 🍷 -tumbler glass 🥃 -cocktail glass 🍸 -tropical drink 🍹 -bottle with popping cork 🍾 -spoon 🥄 -fork and knife 🍴 -fork and knife with plate 🍽 -soccer ball ⚽️ -basketball 🏀 -american football 🏈 -baseball ⚾️ -tennis 🎾 -volleyball 🏐 -rugby football 🏉 -pool 8 ball 🎱 -ping pong 🏓 -badminton 🏸 -goal net 🥅 -ice hockey 🏒 -field hockey 🏑 -cricket 🏏 -flag in hole ⛳️ -bow and arrow 🏹 -fishing pole 🎣 -boxing glove 🥊 -martial arts uniform 🥋 -ice skate ⛸ -skis 🎿 -skier ⛷ -snowboarder 🏂 -woman lifting weights 🏋️‍♀️ -person lifting weights 🏋 -person fencing 🤺 -women wrestling 🤼‍♀ -men wrestling 🤼‍♂ -woman cartwheeling 🤸‍♀ -man cartwheeling 🤸‍♂ -woman bouncing ball ⛹️‍♀️ -person bouncing ball ⛹ -woman playing handball 🤾‍♀ -man playing handball 🤾‍♂ -woman golfing 🏌️‍♀️ -person golfing 🏌 -woman surfing 🏄‍♀ -person surfing 🏄 -woman swimming 🏊‍♀ -person swimming 🏊 -woman playing water polo 🤽‍♀ -man playing water polo 🤽‍♂ -woman rowing boat 🚣‍♀ -person rowing boat 🚣 -horse racing 🏇 -woman biking 🚴‍♀ -person biking 🚴 -woman mountain biking 🚵‍♀ -person mountain biking 🚵 -running shirt 🎽 -sports medal 🏅 -military medal 🎖 -1st place medal 🥇 -2nd place medal 🥈 -3rd place medal 🥉 -trophy 🏆 -rosette 🏵 -reminder ribbon 🎗 -ticket 🎫 -admission tickets 🎟 -circus tent 🎪 -woman juggling 🤹‍♀ -man juggling 🤹‍♂ -performing arts 🎭 -artist palette 🎨 -clapper board 🎬 -microphone 🎤 -headphone 🎧 -musical score 🎼 -musical keyboard 🎹 -drum 🥁 -saxophone 🎷 -trumpet 🎺 -guitar 🎸 -violin 🎻 -game die 🎲 -direct hit 🎯 -bowling 🎳 -video game 🎮 -slot machine 🎰 -automobile 🚗 -taxi 🚕 -sport utility vehicle 🚙 -bus 🚌 -trolleybus 🚎 -racing car 🏎 -police car 🚓 -ambulance 🚑 -fire engine 🚒 -minibus 🚐 -delivery truck 🚚 -articulated lorry 🚛 -tractor 🚜 -kick scooter 🛴 -bicycle 🚲 -motor scooter 🛵 -motorcycle 🏍 -police car light 🚨 -oncoming police car 🚔 -oncoming bus 🚍 -oncoming automobile 🚘 -oncoming taxi 🚖 -aerial tramway 🚡 -mountain cableway 🚠 -suspension railway 🚟 -railway car 🚃 -tram car 🚋 -mountain railway 🚞 -monorail 🚝 -high-speed train 🚄 -high-speed train with bullet nose 🚅 -light rail 🚈 -locomotive 🚂 -train 🚆 -metro 🚇 -tram 🚊 -station 🚉 -helicopter 🚁 -small airplane 🛩 -airplane ✈️ -airplane departure 🛫 -airplane arrival 🛬 -rocket 🚀 -satellite 🛰 -seat 💺 -canoe 🛶 -sailboat ⛵️ -motor boat 🛥 -speedboat 🚤 -passenger ship 🛳 -ferry ⛴ -ship 🚢 -anchor ⚓️ -construction 🚧 -fuel pump ⛽️ -bus stop 🚏 -vertical traffic light 🚦 -horizontal traffic light 🚥 -world map 🗺 -moai 🗿 -Statue of Liberty 🗽 -fountain ⛲️ -Tokyo tower 🗼 -castle 🏰 -Japanese castle 🏯 -stadium 🏟 -ferris wheel 🎡 -roller coaster 🎢 -carousel horse 🎠 -umbrella on ground ⛱ -beach with umbrella 🏖 -desert island 🏝 -mountain ⛰ -snow-capped mountain 🏔 -mount fuji 🗻 -volcano 🌋 -desert 🏜 -camping 🏕 -tent ⛺️ -railway track 🛤 -motorway 🛣 -building construction 🏗 -factory 🏭 -house 🏠 -house with garden 🏡 -house 🏘 -derelict house 🏚 -office building 🏢 -department store 🏬 -Japanese post office 🏣 -post office 🏤 -hospital 🏥 -bank 🏦 -hotel 🏨 -convenience store 🏪 -school 🏫 -love hotel 🏩 -wedding 💒 -classical building 🏛 -church ⛪️ -mosque 🕌 -synagogue 🕍 -kaaba 🕋 -shinto shrine ⛩ -map of Japan 🗾 -moon viewing ceremony 🎑 -national park 🏞 -sunrise 🌅 -sunrise over mountains 🌄 -shooting star 🌠 -sparkler 🎇 -fireworks 🎆 -sunset 🌇 -cityscape at dusk 🌆 -cityscape 🏙 -night with stars 🌃 -milky way 🌌 -bridge at night 🌉 -foggy 🌁 -watch ⌚️ -mobile phone 📱 -mobile phone with arrow 📲 -laptop computer 💻 -keyboard ⌨️ -desktop computer 🖥 -printer 🖨 -computer mouse 🖱 -trackball 🖲 -joystick 🕹 -clamp 🗜 -computer disk 💽 -floppy disk 💾 -optical disk 💿 -dvd 📀 -videocassette 📼 -camera 📷 -camera with flash 📸 -video camera 📹 -movie camera 🎥 -film projector 📽 -film frames 🎞 -telephone receiver 📞 -telephone ☎️ -pager 📟 -fax machine 📠 -television 📺 -radio 📻 -studio microphone 🎙 -level slider 🎚 -control knobs 🎛 -stopwatch ⏱ -timer clock ⏲ -alarm clock ⏰ -mantelpiece clock 🕰 -hourglass ⌛️ -hourglass with flowing sand ⏳ -satellite antenna 📡 -battery 🔋 -electric plug 🔌 -light bulb 💡 -flashlight 🔦 -candle 🕯 -wastebasket 🗑 -oil drum 🛢 -money with wings 💸 -dollar banknote 💵 -yen banknote 💴 -euro banknote 💶 -pound banknote 💷 -money bag 💰 -credit card 💳 -gem stone 💎 -balance scale ⚖️ -wrench 🔧 -hammer 🔨 -hammer and pick ⚒ -hammer and wrench 🛠 -pick ⛏ -nut and bolt 🔩 -gear ⚙️ -chains ⛓ -pistol 🔫 -bomb 💣 -kitchen knife 🔪 -dagger 🗡 -crossed swords ⚔️ -shield 🛡 -cigarette 🚬 -coffin ⚰️ -funeral urn ⚱️ -amphora 🏺 -crystal ball 🔮 -prayer beads 📿 -barber pole 💈 -alembic ⚗️ -telescope 🔭 -microscope 🔬 -hole 🕳 -pill 💊 -syringe 💉 -thermometer 🌡 -toilet 🚽 -potable water 🚰 -shower 🚿 -bathtub 🛁 -person taking bath 🛀 -bellhop bell 🛎 -key 🔑 -old key 🗝 -door 🚪 -couch and lamp 🛋 -bed 🛏 -person in bed 🛌 -framed picture 🖼 -shopping bags 🛍 -shopping cart 🛒 -wrapped gift 🎁 -balloon 🎈 -carp streamer 🎏 -ribbon 🎀 -confetti ball 🎊 -party popper 🎉 -Japanese dolls 🎎 -red paper lantern 🏮 -wind chime 🎐 -envelope ✉️ -envelope with arrow 📩 -incoming envelope 📨 -e-mail 📧 -love letter 💌 -inbox tray 📥 -outbox tray 📤 -package 📦 -label 🏷 -closed mailbox with lowered flag 📪 -closed mailbox with raised flag 📫 -open mailbox with raised flag 📬 -open mailbox with lowered flag 📭 -postbox 📮 -postal horn 📯 -scroll 📜 -page with curl 📃 -page facing up 📄 -bookmark tabs 📑 -bar chart 📊 -chart increasing 📈 -chart decreasing 📉 -spiral notepad 🗒 -spiral calendar 🗓 -tear-off calendar 📆 -calendar 📅 -card index 📇 -card file box 🗃 -ballot box with ballot 🗳 -file cabinet 🗄 -clipboard 📋 -file folder 📁 -open file folder 📂 -card index dividers 🗂 -rolled-up newspaper 🗞 -newspaper 📰 -notebook 📓 -notebook with decorative cover 📔 -ledger 📒 -closed book 📕 -green book 📗 -blue book 📘 -orange book 📙 -books 📚 -open book 📖 -bookmark 🔖 -link 🔗 -paperclip 📎 -linked paperclips 🖇 -triangular ruler 📐 -straight ruler 📏 -pushpin 📌 -round pushpin 📍 -scissors ✂️ -pen 🖊 -fountain pen 🖋 -black nib ✒️ -paintbrush 🖌 -crayon 🖍 -memo 📝 -pencil ✏️ -left-pointing magnifying glass 🔍 -right-pointing magnifying glass 🔎 -locked with pen 🔏 -locked with key 🔐 -locked 🔒 -unlocked 🔓 -red heart ❤️ -yellow heart 💛 -green heart 💚 -blue heart 💙 -purple heart 💜 -black heart 🖤 -broken heart 💔 -heavy heart exclamation ❣️ -two hearts 💕 -revolving hearts 💞 -beating heart 💓 -growing heart 💗 -sparkling heart 💖 -heart with arrow 💘 -heart with ribbon 💝 -heart decoration 💟 -peace symbol ☮️ -latin cross ✝️ -star and crescent ☪️ -om 🕉 -wheel of dharma ☸️ -star of David ✡️ -dotted six-pointed star 🔯 -menorah 🕎 -yin yang ☯️ -orthodox cross ☦️ -place of worship 🛐 -Ophiuchus ⛎ -Aries ♈️ -Taurus ♉️ -Gemini ♊️ -Cancer ♋️ -Leo ♌️ -Virgo ♍️ -Libra ♎️ -Scorpius ♏️ -Sagittarius ♐️ -Capricorn ♑️ -Aquarius ♒️ -Pisces ♓️ -ID button 🆔 -atom symbol ⚛️ -Japanese “acceptable” button 🉑 -radioactive ☢️ -biohazard ☣️ -mobile phone off 📴 -vibration mode 📳 -Japanese “not free of charge” button 🈶 -Japanese “free of charge” button 🈚️ -Japanese “application” button 🈸 -Japanese “open for business” button 🈺 -Japanese “monthly amount” button 🈷️ -eight-pointed star ✴️ -VS button 🆚 -white flower 💮 -Japanese “bargain” button 🉐 -Japanese “secret” button ㊙️ -Japanese “congratulations” button ㊗️ -Japanese “passing grade” button 🈴 -Japanese “no vacancy” button 🈵 -Japanese “discount” button 🈹 -Japanese “prohibited” button 🈲 -A button (blood type) 🅰️ -B button (blood type) 🅱️ -AB button (blood type) 🆎 -CL button 🆑 -O button (blood type) 🅾️ -SOS button 🆘 -cross mark ❌ -heavy large circle ⭕️ -stop sign 🛑 -no entry ⛔️ -name badge 📛 -prohibited 🚫 -hundred points 💯 -anger symbol 💢 -hot springs ♨️ -no pedestrians 🚷 -no littering 🚯 -no bicycles 🚳 -non-potable water 🚱 -no one under eighteen 🔞 -no mobile phones 📵 -no smoking 🚭 -exclamation mark ❗️ -white exclamation mark ❕ -question mark ❓ -white question mark ❔ -double exclamation mark ‼️ -exclamation question mark ⁉️ -dim button 🔅 -bright button 🔆 -part alternation mark 〽️ -warning ⚠️ -children crossing 🚸 -trident emblem 🔱 -fleur-de-lis ⚜️ -Japanese symbol for beginner 🔰 -recycling symbol ♻️ -white heavy check mark ✅ -Japanese “reserved” button 🈯️ -chart increasing with yen 💹 -sparkle ❇️ -eight-spoked asterisk ✳️ -cross mark button ❎ -globe with meridians 🌐 -diamond with a dot 💠 -circled M Ⓜ️ -cyclone 🌀 -zzz 💤 -ATM sign 🏧 -water closet 🚾 -wheelchair symbol ♿️ -P button 🅿️ -Japanese “vacancy” button 🈳 -Japanese “service charge” button 🈂️ -passport control 🛂 -customs 🛃 -baggage claim 🛄 -left luggage 🛅 -men’s room 🚹 -women’s room 🚺 -baby symbol 🚼 -restroom 🚻 -litter in bin sign 🚮 -cinema 🎦 -antenna bars 📶 -Japanese “here” button 🈁 -input symbols 🔣 -information ℹ️ -input latin letters 🔤 -input latin lowercase 🔡 -input latin uppercase 🔠 -NG button 🆖 -OK button 🆗 -UP! button 🆙 -COOL button 🆒 -NEW button 🆕 -FREE button 🆓 -keycap: 0 0️⃣ -keycap: 1 1️⃣ -keycap: 2 2️⃣ -keycap: 3 3️⃣ -keycap: 4 4️⃣ -keycap: 5 5️⃣ -keycap: 6 6️⃣ -keycap: 7 7️⃣ -keycap: 8 8️⃣ -keycap: 9 9️⃣ -keycap 10 🔟 -input numbers 🔢 -keycap: # #️⃣ -keycap: * *️⃣ -play button ▶️ -pause button ⏸ -play or pause button ⏯ -stop button ⏹ -record button ⏺ -next track button ⏭ -last track button ⏮ -fast-forward button ⏩ -fast reverse button ⏪ -fast up button ⏫ -fast down button ⏬ -reverse button ◀️ -up button 🔼 -down button 🔽 -right arrow ➡️ -left arrow ⬅️ -up arrow ⬆️ -down arrow ⬇️ -up-right arrow ↗️ -down-right arrow ↘️ -down-left arrow ↙️ -up-left arrow ↖️ -up-down arrow ↕️ -left-right arrow ↔️ -left arrow curving right ↪️ -right arrow curving left ↩️ -right arrow curving up ⤴️ -right arrow curving down ⤵️ -shuffle tracks button 🔀 -repeat button 🔁 -repeat single button 🔂 -anticlockwise arrows button 🔄 -clockwise vertical arrows 🔃 -musical note 🎵 -musical notes 🎶 -heavy plus sign ➕ -heavy minus sign ➖ -heavy division sign ➗ -heavy multiplication x ✖️ -heavy dollar sign 💲 -currency exchange 💱 -trade mark ™️ -copyright ©️ -registered ®️ -wavy dash 〰️ -curly loop ➰ -double curly loop ➿ -END arrow 🔚 -BACK arrow 🔙 -ON! arrow 🔛 -TOP arrow 🔝 -SOON arrow 🔜 -heavy check mark ✔️ -ballot box with check ☑️ -radio button 🔘 -white circle ⚪️ -black circle ⚫️ -red circle 🔴 -blue circle 🔵 -red triangle pointed up 🔺 -red triangle pointed down 🔻 -small orange diamond 🔸 -small blue diamond 🔹 -large orange diamond 🔶 -large blue diamond 🔷 -white square button 🔳 -black square button 🔲 -black small square ▪️ -white small square ▫️ -black medium-small square ◾️ -white medium-small square ◽️ -black medium square ◼️ -white medium square ◻️ -black large square ⬛️ -white large square ⬜️ -speaker low volume 🔈 -muted speaker 🔇 -speaker medium volume 🔉 -speaker high volume 🔊 -bell 🔔 -bell with slash 🔕 -megaphone 📣 -loudspeaker 📢 -eye in speech bubble 👁‍🗨 -speech balloon 💬 -thought balloon 💭 -right anger bubble 🗯 -spade suit ♠️ -club suit ♣️ -heart suit ♥️ -diamond suit ♦️ -joker 🃏 -flower playing cards 🎴 -mahjong red dragon 🀄️ -one o’clock 🕐 -two o’clock 🕑 -three o’clock 🕒 -four o’clock 🕓 -five o’clock 🕔 -six o’clock 🕕 -seven o’clock 🕖 -eight o’clock 🕗 -nine o’clock 🕘 -ten o’clock 🕙 -eleven o’clock 🕚 -twelve o’clock 🕛 -one-thirty 🕜 -two-thirty 🕝 -three-thirty 🕞 -four-thirty 🕟 -five-thirty 🕠 -six-thirty 🕡 -seven-thirty 🕢 -eight-thirty 🕣 -nine-thirty 🕤 -ten-thirty 🕥 -eleven-thirty 🕦 -twelve-thirty 🕧 -white flag 🏳️ -black flag 🏴 -chequered flag 🏁 -triangular flag 🚩 -rainbow flag 🏳️‍🌈 -Afghanistan 🇦🇫 -Åland Islands 🇦🇽 -Albania 🇦🇱 -Algeria 🇩🇿 -American Samoa 🇦🇸 -Andorra 🇦🇩 -Angola 🇦🇴 -Anguilla 🇦🇮 -Antarctica 🇦🇶 -Antigua & Barbuda 🇦🇬 -Argentina 🇦🇷 -Armenia 🇦🇲 -Aruba 🇦🇼 -Australia 🇦🇺 -Austria 🇦🇹 -Azerbaijan 🇦🇿 -Bahamas 🇧🇸 -Bahrain 🇧🇭 -Bangladesh 🇧🇩 -Barbados 🇧🇧 -Belarus 🇧🇾 -Belgium 🇧🇪 -Belize 🇧🇿 -Benin 🇧🇯 -Bermuda 🇧🇲 -Bhutan 🇧🇹 -Bolivia 🇧🇴 -Caribbean Netherlands 🇧🇶 -Bosnia & Herzegovina 🇧🇦 -Botswana 🇧🇼 -Brazil 🇧🇷 -British Indian Ocean Territory 🇮🇴 -British Virgin Islands 🇻🇬 -Brunei 🇧🇳 -Bulgaria 🇧🇬 -Burkina Faso 🇧🇫 -Burundi 🇧🇮 -Cape Verde 🇨🇻 -Cambodia 🇰🇭 -Cameroon 🇨🇲 -Canada 🇨🇦 -Canary Islands 🇮🇨 -Cayman Islands 🇰🇾 -Central African Republic 🇨🇫 -Chad 🇹🇩 -Chile 🇨🇱 -China 🇨🇳 -Christmas Island 🇨🇽 -Cocos (Keeling) Islands 🇨🇨 -Colombia 🇨🇴 -Comoros 🇰🇲 -Congo - Brazzaville 🇨🇬 -Congo - Kinshasa 🇨🇩 -Cook Islands 🇨🇰 -Costa Rica 🇨🇷 -Côte d’Ivoire 🇨🇮 -Croatia 🇭🇷 -Cuba 🇨🇺 -Curaçao 🇨🇼 -Cyprus 🇨🇾 -Czech Republic 🇨🇿 -Denmark 🇩🇰 -Djibouti 🇩🇯 -Dominica 🇩🇲 -Dominican Republic 🇩🇴 -Ecuador 🇪🇨 -Egypt 🇪🇬 -El Salvador 🇸🇻 -Equatorial Guinea 🇬🇶 -Eritrea 🇪🇷 -Estonia 🇪🇪 -Ethiopia 🇪🇹 -European Union 🇪🇺 -Falkland Islands 🇫🇰 -Faroe Islands 🇫🇴 -Fiji 🇫🇯 -Finland 🇫🇮 -France 🇫🇷 -French Guiana 🇬🇫 -French Polynesia 🇵🇫 -French Southern Territories 🇹🇫 -Gabon 🇬🇦 -Gambia 🇬🇲 -Georgia 🇬🇪 -Germany 🇩🇪 -Ghana 🇬🇭 -Gibraltar 🇬🇮 -Greece 🇬🇷 -Greenland 🇬🇱 -Grenada 🇬🇩 -Guadeloupe 🇬🇵 -Guam 🇬🇺 -Guatemala 🇬🇹 -Guernsey 🇬🇬 -Guinea 🇬🇳 -Guinea-Bissau 🇬🇼 -Guyana 🇬🇾 -Haiti 🇭🇹 -Honduras 🇭🇳 -Hong Kong SAR China 🇭🇰 -Hungary 🇭🇺 -Iceland 🇮🇸 -India 🇮🇳 -Indonesia 🇮🇩 -Iran 🇮🇷 -Iraq 🇮🇶 -Ireland 🇮🇪 -Isle of Man 🇮🇲 -Israel 🇮🇱 -Italy 🇮🇹 -Jamaica 🇯🇲 -Japan 🇯🇵 -crossed flags 🎌 -Jersey 🇯🇪 -Jordan 🇯🇴 -Kazakhstan 🇰🇿 -Kenya 🇰🇪 -Kiribati 🇰🇮 -Kosovo 🇽🇰 -Kuwait 🇰🇼 -Kyrgyzstan 🇰🇬 -Laos 🇱🇦 -Latvia 🇱🇻 -Lebanon 🇱🇧 -Lesotho 🇱🇸 -Liberia 🇱🇷 -Libya 🇱🇾 -Liechtenstein 🇱🇮 -Lithuania 🇱🇹 -Luxembourg 🇱🇺 -Macau SAR China 🇲🇴 -Macedonia 🇲🇰 -Madagascar 🇲🇬 -Malawi 🇲🇼 -Malaysia 🇲🇾 -Maldives 🇲🇻 -Mali 🇲🇱 -Malta 🇲🇹 -Marshall Islands 🇲🇭 -Martinique 🇲🇶 -Mauritania 🇲🇷 -Mauritius 🇲🇺 -Mayotte 🇾🇹 -Mexico 🇲🇽 -Micronesia 🇫🇲 -Moldova 🇲🇩 -Monaco 🇲🇨 -Mongolia 🇲🇳 -Montenegro 🇲🇪 -Montserrat 🇲🇸 -Morocco 🇲🇦 -Mozambique 🇲🇿 -Myanmar (Burma) 🇲🇲 -Namibia 🇳🇦 -Nauru 🇳🇷 -Nepal 🇳🇵 -Netherlands 🇳🇱 -New Caledonia 🇳🇨 -New Zealand 🇳🇿 -Nicaragua 🇳🇮 -Niger 🇳🇪 -Nigeria 🇳🇬 -Niue 🇳🇺 -Norfolk Island 🇳🇫 -Northern Mariana Islands 🇲🇵 -North Korea 🇰🇵 -Norway 🇳🇴 -Oman 🇴🇲 -Pakistan 🇵🇰 -Palau 🇵🇼 -Palestinian Territories 🇵🇸 -Panama 🇵🇦 -Papua New Guinea 🇵🇬 -Paraguay 🇵🇾 -Peru 🇵🇪 -Philippines 🇵🇭 -Pitcairn Islands 🇵🇳 -Poland 🇵🇱 -Portugal 🇵🇹 -Puerto Rico 🇵🇷 -Qatar 🇶🇦 -Réunion 🇷🇪 -Romania 🇷🇴 -Russia 🇷🇺 -Rwanda 🇷🇼 -St. Barthélemy 🇧🇱 -St. Helena 🇸🇭 -St. Kitts & Nevis 🇰🇳 -St. Lucia 🇱🇨 -St. Pierre & Miquelon 🇵🇲 -St. Vincent & Grenadines 🇻🇨 -Samoa 🇼🇸 -San Marino 🇸🇲 -São Tomé & Príncipe 🇸🇹 -Saudi Arabia 🇸🇦 -Senegal 🇸🇳 -Serbia 🇷🇸 -Seychelles 🇸🇨 -Sierra Leone 🇸🇱 -Singapore 🇸🇬 -Sint Maarten 🇸🇽 -Slovakia 🇸🇰 -Slovenia 🇸🇮 -Solomon Islands 🇸🇧 -Somalia 🇸🇴 -South Africa 🇿🇦 -South Georgia & South Sandwich Islands 🇬🇸 -South Korea 🇰🇷 -South Sudan 🇸🇸 -Spain 🇪🇸 -Sri Lanka 🇱🇰 -Sudan 🇸🇩 -Suriname 🇸🇷 -Swaziland 🇸🇿 -Sweden 🇸🇪 -Switzerland 🇨🇭 -Syria 🇸🇾 -Taiwan 🇹🇼 -Tajikistan 🇹🇯 -Tanzania 🇹🇿 -Thailand 🇹🇭 -Timor-Leste 🇹🇱 -Togo 🇹🇬 -Tokelau 🇹🇰 -Tonga 🇹🇴 -Trinidad & Tobago 🇹🇹 -Tunisia 🇹🇳 -Turkey 🇹🇷 -Turkmenistan 🇹🇲 -Turks & Caicos Islands 🇹🇨 -Tuvalu 🇹🇻 -Uganda 🇺🇬 -Ukraine 🇺🇦 -United Arab Emirates 🇦🇪 -United Kingdom 🇬🇧 -United States 🇺🇸 -U.S. Virgin Islands 🇻🇮 -Uruguay 🇺🇾 -Uzbekistan 🇺🇿 -Vanuatu 🇻🇺 -Vatican City 🇻🇦 -Venezuela 🇻🇪 -Vietnam 🇻🇳 -Wallis & Futuna 🇼🇫 -Western Sahara 🇪🇭 -Yemen 🇾🇪 -Zambia 🇿🇲 -Zimbabwe 🇿🇼 +dmenu \ + -l 20 \ + -i \ + -p 'Emoji: ' -fn Monospace-18 \ + < emoji-list.txt \ + | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip diff --git a/scripts/ad-hoc/emoji-list.txt b/scripts/ad-hoc/emoji-list.txt new file mode 100755 index 0000000..06b5a58 --- /dev/null +++ b/scripts/ad-hoc/emoji-list.txt @@ -0,0 +1,1432 @@ +grinning face 😀 +smiling face with open mouth 😃 +smiling face with open mouth & smiling eyes 😄 +grinning face with smiling eyes 😁 +smiling face with open mouth & closed eyes 😆 +smiling face with open mouth & cold sweat 😅 +face with tears of joy 😂 +rolling on the floor laughing 🤣 +smiling face ☺️ +smiling face with smiling eyes 😊 +smiling face with halo 😇 +slightly smiling face 🙂 +upside-down face 🙃 +winking face 😉 +relieved face 😌 +smiling face with heart-eyes 😍 +face blowing a kiss 😘 +kissing face 😗 +kissing face with smiling eyes 😙 +kissing face with closed eyes 😚 +face savouring delicious food 😋 +face with stuck-out tongue & winking eye 😜 +face with stuck-out tongue & closed eyes 😝 +face with stuck-out tongue 😛 +money-mouth face 🤑 +hugging face 🤗 +nerd face 🤓 +smiling face with sunglasses 😎 +clown face 🤡 +cowboy hat face 🤠 +smirking face 😏 +unamused face 😒 +disappointed face 😞 +pensive face 😔 +worried face 😟 +confused face 😕 +slightly frowning face 🙁 +frowning face ☹️ +persevering face 😣 +confounded face 😖 +tired face 😫 +weary face 😩 +face with steam from nose 😤 +angry face 😠 +pouting face 😡 +face without mouth 😶 +neutral face 😐 +expressionless face 😑 +hushed face 😯 +frowning face with open mouth 😦 +anguished face 😧 +face with open mouth 😮 +astonished face 😲 +dizzy face 😵 +flushed face 😳 +face screaming in fear 😱 +fearful face 😨 +face with open mouth & cold sweat 😰 +crying face 😢 +disappointed but relieved face 😥 +drooling face 🤤 +loudly crying face 😭 +face with cold sweat 😓 +sleepy face 😪 +sleeping face 😴 +face with rolling eyes 🙄 +thinking face 🤔 +lying face 🤥 +grimacing face 😬 +zipper-mouth face 🤐 +nauseated face 🤢 +sneezing face 🤧 +face with medical mask 😷 +face with thermometer 🤒 +face with head-bandage 🤕 +smiling face with horns 😈 +angry face with horns 👿 +ogre 👹 +goblin 👺 +pile of poo 💩 +ghost 👻 +skull 💀 +skull and crossbones ☠️ +alien 👽 +alien monster 👾 +robot face 🤖 +jack-o-lantern 🎃 +smiling cat face with open mouth 😺 +grinning cat face with smiling eyes 😸 +cat face with tears of joy 😹 +smiling cat face with heart-eyes 😻 +cat face with wry smile 😼 +kissing cat face with closed eyes 😽 +weary cat face 🙀 +crying cat face 😿 +pouting cat face 😾 +open hands 👐 +raising hands 🙌 +clapping hands 👏 +folded hands 🙏 +handshake 🤝 +thumbs up 👍 +thumbs down 👎 +oncoming fist 👊 +raised fist ✊ +left-facing fist 🤛 +right-facing fist 🤜 +crossed fingers 🤞 +victory hand ✌️ +sign of the horns 🤘 +OK hand 👌 +backhand index pointing left 👈 +backhand index pointing right 👉 +backhand index pointing up 👆 +backhand index pointing down 👇 +index pointing up ☝️ +raised hand ✋ +raised back of hand 🤚 +raised hand with fingers splayed 🖐 +vulcan salute 🖖 +waving hand 👋 +call me hand 🤙 +flexed biceps 💪 +middle finger 🖕 +writing hand ✍️ +selfie 🤳 +nail polish 💅 +ring 💍 +lipstick 💄 +kiss mark 💋 +mouth 👄 +tongue 👅 +ear 👂 +nose 👃 +footprints 👣 +eye 👁 +eyes 👀 +speaking head 🗣 +bust in silhouette 👤 +busts in silhouette 👥 +baby 👶 +boy 👦 +girl 👧 +man 👨 +woman 👩 +blond-haired woman 👱‍♀ +blond-haired person 👱 +old man 👴 +old woman 👵 +man with Chinese cap 👲 +woman wearing turban 👳‍♀ +person wearing turban 👳 +woman police officer 👮‍♀ +police officer 👮 +woman construction worker 👷‍♀ +construction worker 👷 +woman guard 💂‍♀ +guard 💂 +woman detective 🕵️‍♀️ +detective 🕵 +woman health worker 👩‍⚕ +man health worker 👨‍⚕ +woman farmer 👩‍🌾 +man farmer 👨‍🌾 +woman cook 👩‍🍳 +man cook 👨‍🍳 +woman student 👩‍🎓 +man student 👨‍🎓 +woman singer 👩‍🎤 +man singer 👨‍🎤 +woman teacher 👩‍🏫 +man teacher 👨‍🏫 +woman factory worker 👩‍🏭 +man factory worker 👨‍🏭 +woman technologist 👩‍💻 +man technologist 👨‍💻 +woman office worker 👩‍💼 +man office worker 👨‍💼 +woman mechanic 👩‍🔧 +man mechanic 👨‍🔧 +woman scientist 👩‍🔬 +man scientist 👨‍🔬 +woman artist 👩‍🎨 +man artist 👨‍🎨 +woman firefighter 👩‍🚒 +man firefighter 👨‍🚒 +woman pilot 👩‍✈ +man pilot 👨‍✈ +woman astronaut 👩‍🚀 +man astronaut 👨‍🚀 +woman judge 👩‍⚖ +man judge 👨‍⚖ +Mrs. Claus 🤶 +Santa Claus 🎅 +princess 👸 +prince 🤴 +bride with veil 👰 +man in tuxedo 🤵 +baby angel 👼 +pregnant woman 🤰 +woman bowing 🙇‍♀ +person bowing 🙇 +person tipping hand 💁 +man tipping hand 💁‍♂ +person gesturing NO 🙅 +man gesturing NO 🙅‍♂ +person gesturing OK 🙆 +man gesturing OK 🙆‍♂ +person raising hand 🙋 +man raising hand 🙋‍♂ +woman facepalming 🤦‍♀ +man facepalming 🤦‍♂ +woman shrugging 🤷‍♀ +man shrugging 🤷‍♂ +person pouting 🙎 +man pouting 🙎‍♂ +person frowning 🙍 +man frowning 🙍‍♂ +person getting haircut 💇 +man getting haircut 💇‍♂ +person getting massage 💆 +man getting massage 💆‍♂ +man in business suit levitating 🕴 +woman dancing 💃 +man dancing 🕺 +people with bunny ears partying 👯 +men with bunny ears partying 👯‍♂ +woman walking 🚶‍♀ +person walking 🚶 +woman running 🏃‍♀ +person running 🏃 +man and woman holding hands 👫 +two women holding hands 👭 +two men holding hands 👬 +couple with heart 💑 +couple with heart: woman woman 👩‍❤️‍👩 +couple with heart: man man 👨‍❤️‍👨 +kiss 💏 +kiss: woman woman 👩‍❤️‍💋‍👩 +kiss: man man 👨‍❤️‍💋‍👨 +family 👪 +family: man woman girl 👨‍👩‍👧 +family: man woman girl boy 👨‍👩‍👧‍👦 +family: man woman boy boy 👨‍👩‍👦‍👦 +family: man woman girl girl 👨‍👩‍👧‍👧 +family: woman woman boy 👩‍👩‍👦 +family: woman woman girl 👩‍👩‍👧 +family: woman woman girl boy 👩‍👩‍👧‍👦 +family: woman woman boy boy 👩‍👩‍👦‍👦 +family: woman woman girl girl 👩‍👩‍👧‍👧 +family: man man boy 👨‍👨‍👦 +family: man man girl 👨‍👨‍👧 +family: man man girl boy 👨‍👨‍👧‍👦 +family: man man boy boy 👨‍👨‍👦‍👦 +family: man man girl girl 👨‍👨‍👧‍👧 +family: woman boy 👩‍👦 +family: woman girl 👩‍👧 +family: woman girl boy 👩‍👧‍👦 +family: woman boy boy 👩‍👦‍👦 +family: woman girl girl 👩‍👧‍👧 +family: man boy 👨‍👦 +family: man girl 👨‍👧 +family: man girl boy 👨‍👧‍👦 +family: man boy boy 👨‍👦‍👦 +family: man girl girl 👨‍👧‍👧 +woman’s clothes 👚 +t-shirt 👕 +jeans 👖 +necktie 👔 +dress 👗 +bikini 👙 +kimono 👘 +high-heeled shoe 👠 +woman’s sandal 👡 +woman’s boot 👢 +man’s shoe 👞 +running shoe 👟 +woman’s hat 👒 +top hat 🎩 +graduation cap 🎓 +crown 👑 +rescue worker’s helmet ⛑ +school backpack 🎒 +clutch bag 👝 +purse 👛 +handbag 👜 +briefcase 💼 +glasses 👓 +sunglasses 🕶 +closed umbrella 🌂 +umbrella ☂️ +dog face 🐶 +cat face 🐱 +mouse face 🐭 +hamster face 🐹 +rabbit face 🐰 +fox face 🦊 +bear face 🐻 +panda face 🐼 +koala 🐨 +tiger face 🐯 +lion face 🦁 +cow face 🐮 +pig face 🐷 +pig nose 🐽 +frog face 🐸 +monkey face 🐵 +see-no-evil monkey 🙈 +hear-no-evil monkey 🙉 +speak-no-evil monkey 🙊 +monkey 🐒 +chicken 🐔 +penguin 🐧 +bird 🐦 +baby chick 🐤 +hatching chick 🐣 +front-facing baby chick 🐥 +duck 🦆 +eagle 🦅 +owl 🦉 +bat 🦇 +wolf face 🐺 +boar 🐗 +horse face 🐴 +unicorn face 🦄 +honeybee 🐝 +bug 🐛 +butterfly 🦋 +snail 🐌 +spiral shell 🐚 +lady beetle 🐞 +ant 🐜 +spider 🕷 +spider web 🕸 +turtle 🐢 +snake 🐍 +lizard 🦎 +scorpion 🦂 +crab 🦀 +squid 🦑 +octopus 🐙 +shrimp 🦐 +tropical fish 🐠 +fish 🐟 +blowfish 🐡 +dolphin 🐬 +shark 🦈 +spouting whale 🐳 +whale 🐋 +crocodile 🐊 +leopard 🐆 +tiger 🐅 +water buffalo 🐃 +ox 🐂 +cow 🐄 +deer 🦌 +camel 🐪 +two-hump camel 🐫 +elephant 🐘 +rhinoceros 🦏 +gorilla 🦍 +horse 🐎 +pig 🐖 +goat 🐐 +ram 🐏 +sheep 🐑 +dog 🐕 +poodle 🐩 +cat 🐈 +rooster 🐓 +turkey 🦃 +dove 🕊 +rabbit 🐇 +mouse 🐁 +rat 🐀 +chipmunk 🐿 +paw prints 🐾 +dragon 🐉 +dragon face 🐲 +cactus 🌵 +Christmas tree 🎄 +evergreen tree 🌲 +deciduous tree 🌳 +palm tree 🌴 +seedling 🌱 +herb 🌿 +shamrock ☘️ +four leaf clover 🍀 +pine decoration 🎍 +tanabata tree 🎋 +leaf fluttering in wind 🍃 +fallen leaf 🍂 +maple leaf 🍁 +mushroom 🍄 +sheaf of rice 🌾 +bouquet 💐 +tulip 🌷 +rose 🌹 +wilted flower 🥀 +sunflower 🌻 +blossom 🌼 +cherry blossom 🌸 +hibiscus 🌺 +globe showing Americas 🌎 +globe showing Europe-Africa 🌍 +globe showing Asia-Australia 🌏 +full moon 🌕 +waning gibbous moon 🌖 +last quarter moon 🌗 +waning crescent moon 🌘 +new moon 🌑 +waxing crescent moon 🌒 +first quarter moon 🌓 +waxing gibbous moon 🌔 +new moon face 🌚 +full moon with face 🌝 +sun with face 🌞 +first quarter moon with face 🌛 +last quarter moon with face 🌜 +crescent moon 🌙 +dizzy 💫 +white medium star ⭐️ +glowing star 🌟 +sparkles ✨ +high voltage ⚡️ +fire 🔥 +collision 💥 +comet ☄ +sun ☀️ +sun behind small cloud 🌤 +sun behind cloud ⛅️ +sun behind large cloud 🌥 +sun behind rain cloud 🌦 +rainbow 🌈 +cloud ☁️ +cloud with rain 🌧 +cloud with lightning and rain ⛈ +cloud with lightning 🌩 +cloud with snow 🌨 +snowman ☃️ +snowman without snow ⛄️ +snowflake ❄️ +wind face 🌬 +dashing away 💨 +tornado 🌪 +fog 🌫 +water wave 🌊 +droplet 💧 +sweat droplets 💦 +umbrella with rain drops ☔️ +green apple 🍏 +red apple 🍎 +pear 🍐 +tangerine 🍊 +lemon 🍋 +banana 🍌 +watermelon 🍉 +grapes 🍇 +strawberry 🍓 +melon 🍈 +cherries 🍒 +peach 🍑 +pineapple 🍍 +kiwi fruit 🥝 +avocado 🥑 +tomato 🍅 +eggplant 🍆 +cucumber 🥒 +carrot 🥕 +ear of corn 🌽 +hot pepper 🌶 +potato 🥔 +roasted sweet potato 🍠 +chestnut 🌰 +peanuts 🥜 +honey pot 🍯 +croissant 🥐 +bread 🍞 +baguette bread 🥖 +cheese wedge 🧀 +egg 🥚 +cooking 🍳 +bacon 🥓 +pancakes 🥞 +fried shrimp 🍤 +poultry leg 🍗 +meat on bone 🍖 +pizza 🍕 +hot dog 🌭 +hamburger 🍔 +french fries 🍟 +stuffed flatbread 🥙 +taco 🌮 +burrito 🌯 +green salad 🥗 +shallow pan of food 🥘 +spaghetti 🍝 +steaming bowl 🍜 +pot of food 🍲 +fish cake with swirl 🍥 +sushi 🍣 +bento box 🍱 +curry rice 🍛 +cooked rice 🍚 +rice ball 🍙 +rice cracker 🍘 +oden 🍢 +dango 🍡 +shaved ice 🍧 +ice cream 🍨 +soft ice cream 🍦 +shortcake 🍰 +birthday cake 🎂 +custard 🍮 +lollipop 🍭 +candy 🍬 +chocolate bar 🍫 +popcorn 🍿 +doughnut 🍩 +cookie 🍪 +glass of milk 🥛 +baby bottle 🍼 +hot beverage ☕️ +teacup without handle 🍵 +sake 🍶 +beer mug 🍺 +clinking beer mugs 🍻 +clinking glasses 🥂 +wine glass 🍷 +tumbler glass 🥃 +cocktail glass 🍸 +tropical drink 🍹 +bottle with popping cork 🍾 +spoon 🥄 +fork and knife 🍴 +fork and knife with plate 🍽 +soccer ball ⚽️ +basketball 🏀 +american football 🏈 +baseball ⚾️ +tennis 🎾 +volleyball 🏐 +rugby football 🏉 +pool 8 ball 🎱 +ping pong 🏓 +badminton 🏸 +goal net 🥅 +ice hockey 🏒 +field hockey 🏑 +cricket 🏏 +flag in hole ⛳️ +bow and arrow 🏹 +fishing pole 🎣 +boxing glove 🥊 +martial arts uniform 🥋 +ice skate ⛸ +skis 🎿 +skier ⛷ +snowboarder 🏂 +woman lifting weights 🏋️‍♀️ +person lifting weights 🏋 +person fencing 🤺 +women wrestling 🤼‍♀ +men wrestling 🤼‍♂ +woman cartwheeling 🤸‍♀ +man cartwheeling 🤸‍♂ +woman bouncing ball ⛹️‍♀️ +person bouncing ball ⛹ +woman playing handball 🤾‍♀ +man playing handball 🤾‍♂ +woman golfing 🏌️‍♀️ +person golfing 🏌 +woman surfing 🏄‍♀ +person surfing 🏄 +woman swimming 🏊‍♀ +person swimming 🏊 +woman playing water polo 🤽‍♀ +man playing water polo 🤽‍♂ +woman rowing boat 🚣‍♀ +person rowing boat 🚣 +horse racing 🏇 +woman biking 🚴‍♀ +person biking 🚴 +woman mountain biking 🚵‍♀ +person mountain biking 🚵 +running shirt 🎽 +sports medal 🏅 +military medal 🎖 +1st place medal 🥇 +2nd place medal 🥈 +3rd place medal 🥉 +trophy 🏆 +rosette 🏵 +reminder ribbon 🎗 +ticket 🎫 +admission tickets 🎟 +circus tent 🎪 +woman juggling 🤹‍♀ +man juggling 🤹‍♂ +performing arts 🎭 +artist palette 🎨 +clapper board 🎬 +microphone 🎤 +headphone 🎧 +musical score 🎼 +musical keyboard 🎹 +drum 🥁 +saxophone 🎷 +trumpet 🎺 +guitar 🎸 +violin 🎻 +game die 🎲 +direct hit 🎯 +bowling 🎳 +video game 🎮 +slot machine 🎰 +automobile 🚗 +taxi 🚕 +sport utility vehicle 🚙 +bus 🚌 +trolleybus 🚎 +racing car 🏎 +police car 🚓 +ambulance 🚑 +fire engine 🚒 +minibus 🚐 +delivery truck 🚚 +articulated lorry 🚛 +tractor 🚜 +kick scooter 🛴 +bicycle 🚲 +motor scooter 🛵 +motorcycle 🏍 +police car light 🚨 +oncoming police car 🚔 +oncoming bus 🚍 +oncoming automobile 🚘 +oncoming taxi 🚖 +aerial tramway 🚡 +mountain cableway 🚠 +suspension railway 🚟 +railway car 🚃 +tram car 🚋 +mountain railway 🚞 +monorail 🚝 +high-speed train 🚄 +high-speed train with bullet nose 🚅 +light rail 🚈 +locomotive 🚂 +train 🚆 +metro 🚇 +tram 🚊 +station 🚉 +helicopter 🚁 +small airplane 🛩 +airplane ✈️ +airplane departure 🛫 +airplane arrival 🛬 +rocket 🚀 +satellite 🛰 +seat 💺 +canoe 🛶 +sailboat ⛵️ +motor boat 🛥 +speedboat 🚤 +passenger ship 🛳 +ferry ⛴ +ship 🚢 +anchor ⚓️ +construction 🚧 +fuel pump ⛽️ +bus stop 🚏 +vertical traffic light 🚦 +horizontal traffic light 🚥 +world map 🗺 +moai 🗿 +Statue of Liberty 🗽 +fountain ⛲️ +Tokyo tower 🗼 +castle 🏰 +Japanese castle 🏯 +stadium 🏟 +ferris wheel 🎡 +roller coaster 🎢 +carousel horse 🎠 +umbrella on ground ⛱ +beach with umbrella 🏖 +desert island 🏝 +mountain ⛰ +snow-capped mountain 🏔 +mount fuji 🗻 +volcano 🌋 +desert 🏜 +camping 🏕 +tent ⛺️ +railway track 🛤 +motorway 🛣 +building construction 🏗 +factory 🏭 +house 🏠 +house with garden 🏡 +house 🏘 +derelict house 🏚 +office building 🏢 +department store 🏬 +Japanese post office 🏣 +post office 🏤 +hospital 🏥 +bank 🏦 +hotel 🏨 +convenience store 🏪 +school 🏫 +love hotel 🏩 +wedding 💒 +classical building 🏛 +church ⛪️ +mosque 🕌 +synagogue 🕍 +kaaba 🕋 +shinto shrine ⛩ +map of Japan 🗾 +moon viewing ceremony 🎑 +national park 🏞 +sunrise 🌅 +sunrise over mountains 🌄 +shooting star 🌠 +sparkler 🎇 +fireworks 🎆 +sunset 🌇 +cityscape at dusk 🌆 +cityscape 🏙 +night with stars 🌃 +milky way 🌌 +bridge at night 🌉 +foggy 🌁 +watch ⌚️ +mobile phone 📱 +mobile phone with arrow 📲 +laptop computer 💻 +keyboard ⌨️ +desktop computer 🖥 +printer 🖨 +computer mouse 🖱 +trackball 🖲 +joystick 🕹 +clamp 🗜 +computer disk 💽 +floppy disk 💾 +optical disk 💿 +dvd 📀 +videocassette 📼 +camera 📷 +camera with flash 📸 +video camera 📹 +movie camera 🎥 +film projector 📽 +film frames 🎞 +telephone receiver 📞 +telephone ☎️ +pager 📟 +fax machine 📠 +television 📺 +radio 📻 +studio microphone 🎙 +level slider 🎚 +control knobs 🎛 +stopwatch ⏱ +timer clock ⏲ +alarm clock ⏰ +mantelpiece clock 🕰 +hourglass ⌛️ +hourglass with flowing sand ⏳ +satellite antenna 📡 +battery 🔋 +electric plug 🔌 +light bulb 💡 +flashlight 🔦 +candle 🕯 +wastebasket 🗑 +oil drum 🛢 +money with wings 💸 +dollar banknote 💵 +yen banknote 💴 +euro banknote 💶 +pound banknote 💷 +money bag 💰 +credit card 💳 +gem stone 💎 +balance scale ⚖️ +wrench 🔧 +hammer 🔨 +hammer and pick ⚒ +hammer and wrench 🛠 +pick ⛏ +nut and bolt 🔩 +gear ⚙️ +chains ⛓ +pistol 🔫 +bomb 💣 +kitchen knife 🔪 +dagger 🗡 +crossed swords ⚔️ +shield 🛡 +cigarette 🚬 +coffin ⚰️ +funeral urn ⚱️ +amphora 🏺 +crystal ball 🔮 +prayer beads 📿 +barber pole 💈 +alembic ⚗️ +telescope 🔭 +microscope 🔬 +hole 🕳 +pill 💊 +syringe 💉 +thermometer 🌡 +toilet 🚽 +potable water 🚰 +shower 🚿 +bathtub 🛁 +person taking bath 🛀 +bellhop bell 🛎 +key 🔑 +old key 🗝 +door 🚪 +couch and lamp 🛋 +bed 🛏 +person in bed 🛌 +framed picture 🖼 +shopping bags 🛍 +shopping cart 🛒 +wrapped gift 🎁 +balloon 🎈 +carp streamer 🎏 +ribbon 🎀 +confetti ball 🎊 +party popper 🎉 +Japanese dolls 🎎 +red paper lantern 🏮 +wind chime 🎐 +envelope ✉️ +envelope with arrow 📩 +incoming envelope 📨 +e-mail 📧 +love letter 💌 +inbox tray 📥 +outbox tray 📤 +package 📦 +label 🏷 +closed mailbox with lowered flag 📪 +closed mailbox with raised flag 📫 +open mailbox with raised flag 📬 +open mailbox with lowered flag 📭 +postbox 📮 +postal horn 📯 +scroll 📜 +page with curl 📃 +page facing up 📄 +bookmark tabs 📑 +bar chart 📊 +chart increasing 📈 +chart decreasing 📉 +spiral notepad 🗒 +spiral calendar 🗓 +tear-off calendar 📆 +calendar 📅 +card index 📇 +card file box 🗃 +ballot box with ballot 🗳 +file cabinet 🗄 +clipboard 📋 +file folder 📁 +open file folder 📂 +card index dividers 🗂 +rolled-up newspaper 🗞 +newspaper 📰 +notebook 📓 +notebook with decorative cover 📔 +ledger 📒 +closed book 📕 +green book 📗 +blue book 📘 +orange book 📙 +books 📚 +open book 📖 +bookmark 🔖 +link 🔗 +paperclip 📎 +linked paperclips 🖇 +triangular ruler 📐 +straight ruler 📏 +pushpin 📌 +round pushpin 📍 +scissors ✂️ +pen 🖊 +fountain pen 🖋 +black nib ✒️ +paintbrush 🖌 +crayon 🖍 +memo 📝 +pencil ✏️ +left-pointing magnifying glass 🔍 +right-pointing magnifying glass 🔎 +locked with pen 🔏 +locked with key 🔐 +locked 🔒 +unlocked 🔓 +red heart ❤️ +yellow heart 💛 +green heart 💚 +blue heart 💙 +purple heart 💜 +black heart 🖤 +broken heart 💔 +heavy heart exclamation ❣️ +two hearts 💕 +revolving hearts 💞 +beating heart 💓 +growing heart 💗 +sparkling heart 💖 +heart with arrow 💘 +heart with ribbon 💝 +heart decoration 💟 +peace symbol ☮️ +latin cross ✝️ +star and crescent ☪️ +om 🕉 +wheel of dharma ☸️ +star of David ✡️ +dotted six-pointed star 🔯 +menorah 🕎 +yin yang ☯️ +orthodox cross ☦️ +place of worship 🛐 +Ophiuchus ⛎ +Aries ♈️ +Taurus ♉️ +Gemini ♊️ +Cancer ♋️ +Leo ♌️ +Virgo ♍️ +Libra ♎️ +Scorpius ♏️ +Sagittarius ♐️ +Capricorn ♑️ +Aquarius ♒️ +Pisces ♓️ +ID button 🆔 +atom symbol ⚛️ +Japanese “acceptable” button 🉑 +radioactive ☢️ +biohazard ☣️ +mobile phone off 📴 +vibration mode 📳 +Japanese “not free of charge” button 🈶 +Japanese “free of charge” button 🈚️ +Japanese “application” button 🈸 +Japanese “open for business” button 🈺 +Japanese “monthly amount” button 🈷️ +eight-pointed star ✴️ +VS button 🆚 +white flower 💮 +Japanese “bargain” button 🉐 +Japanese “secret” button ㊙️ +Japanese “congratulations” button ㊗️ +Japanese “passing grade” button 🈴 +Japanese “no vacancy” button 🈵 +Japanese “discount” button 🈹 +Japanese “prohibited” button 🈲 +A button (blood type) 🅰️ +B button (blood type) 🅱️ +AB button (blood type) 🆎 +CL button 🆑 +O button (blood type) 🅾️ +SOS button 🆘 +cross mark ❌ +heavy large circle ⭕️ +stop sign 🛑 +no entry ⛔️ +name badge 📛 +prohibited 🚫 +hundred points 💯 +anger symbol 💢 +hot springs ♨️ +no pedestrians 🚷 +no littering 🚯 +no bicycles 🚳 +non-potable water 🚱 +no one under eighteen 🔞 +no mobile phones 📵 +no smoking 🚭 +exclamation mark ❗️ +white exclamation mark ❕ +question mark ❓ +white question mark ❔ +double exclamation mark ‼️ +exclamation question mark ⁉️ +dim button 🔅 +bright button 🔆 +part alternation mark 〽️ +warning ⚠️ +children crossing 🚸 +trident emblem 🔱 +fleur-de-lis ⚜️ +Japanese symbol for beginner 🔰 +recycling symbol ♻️ +white heavy check mark ✅ +Japanese “reserved” button 🈯️ +chart increasing with yen 💹 +sparkle ❇️ +eight-spoked asterisk ✳️ +cross mark button ❎ +globe with meridians 🌐 +diamond with a dot 💠 +circled M Ⓜ️ +cyclone 🌀 +zzz 💤 +ATM sign 🏧 +water closet 🚾 +wheelchair symbol ♿️ +P button 🅿️ +Japanese “vacancy” button 🈳 +Japanese “service charge” button 🈂️ +passport control 🛂 +customs 🛃 +baggage claim 🛄 +left luggage 🛅 +men’s room 🚹 +women’s room 🚺 +baby symbol 🚼 +restroom 🚻 +litter in bin sign 🚮 +cinema 🎦 +antenna bars 📶 +Japanese “here” button 🈁 +input symbols 🔣 +information ℹ️ +input latin letters 🔤 +input latin lowercase 🔡 +input latin uppercase 🔠 +NG button 🆖 +OK button 🆗 +UP! button 🆙 +COOL button 🆒 +NEW button 🆕 +FREE button 🆓 +keycap: 0 0️⃣ +keycap: 1 1️⃣ +keycap: 2 2️⃣ +keycap: 3 3️⃣ +keycap: 4 4️⃣ +keycap: 5 5️⃣ +keycap: 6 6️⃣ +keycap: 7 7️⃣ +keycap: 8 8️⃣ +keycap: 9 9️⃣ +keycap 10 🔟 +input numbers 🔢 +keycap: # #️⃣ +keycap: * *️⃣ +play button ▶️ +pause button ⏸ +play or pause button ⏯ +stop button ⏹ +record button ⏺ +next track button ⏭ +last track button ⏮ +fast-forward button ⏩ +fast reverse button ⏪ +fast up button ⏫ +fast down button ⏬ +reverse button ◀️ +up button 🔼 +down button 🔽 +right arrow ➡️ +left arrow ⬅️ +up arrow ⬆️ +down arrow ⬇️ +up-right arrow ↗️ +down-right arrow ↘️ +down-left arrow ↙️ +up-left arrow ↖️ +up-down arrow ↕️ +left-right arrow ↔️ +left arrow curving right ↪️ +right arrow curving left ↩️ +right arrow curving up ⤴️ +right arrow curving down ⤵️ +shuffle tracks button 🔀 +repeat button 🔁 +repeat single button 🔂 +anticlockwise arrows button 🔄 +clockwise vertical arrows 🔃 +musical note 🎵 +musical notes 🎶 +heavy plus sign ➕ +heavy minus sign ➖ +heavy division sign ➗ +heavy multiplication x ✖️ +heavy dollar sign 💲 +currency exchange 💱 +trade mark ™️ +copyright ©️ +registered ®️ +wavy dash 〰️ +curly loop ➰ +double curly loop ➿ +END arrow 🔚 +BACK arrow 🔙 +ON! arrow 🔛 +TOP arrow 🔝 +SOON arrow 🔜 +heavy check mark ✔️ +ballot box with check ☑️ +radio button 🔘 +white circle ⚪️ +black circle ⚫️ +red circle 🔴 +blue circle 🔵 +red triangle pointed up 🔺 +red triangle pointed down 🔻 +small orange diamond 🔸 +small blue diamond 🔹 +large orange diamond 🔶 +large blue diamond 🔷 +white square button 🔳 +black square button 🔲 +black small square ▪️ +white small square ▫️ +black medium-small square ◾️ +white medium-small square ◽️ +black medium square ◼️ +white medium square ◻️ +black large square ⬛️ +white large square ⬜️ +speaker low volume 🔈 +muted speaker 🔇 +speaker medium volume 🔉 +speaker high volume 🔊 +bell 🔔 +bell with slash 🔕 +megaphone 📣 +loudspeaker 📢 +eye in speech bubble 👁‍🗨 +speech balloon 💬 +thought balloon 💭 +right anger bubble 🗯 +spade suit ♠️ +club suit ♣️ +heart suit ♥️ +diamond suit ♦️ +joker 🃏 +flower playing cards 🎴 +mahjong red dragon 🀄️ +one o’clock 🕐 +two o’clock 🕑 +three o’clock 🕒 +four o’clock 🕓 +five o’clock 🕔 +six o’clock 🕕 +seven o’clock 🕖 +eight o’clock 🕗 +nine o’clock 🕘 +ten o’clock 🕙 +eleven o’clock 🕚 +twelve o’clock 🕛 +one-thirty 🕜 +two-thirty 🕝 +three-thirty 🕞 +four-thirty 🕟 +five-thirty 🕠 +six-thirty 🕡 +seven-thirty 🕢 +eight-thirty 🕣 +nine-thirty 🕤 +ten-thirty 🕥 +eleven-thirty 🕦 +twelve-thirty 🕧 +white flag 🏳️ +black flag 🏴 +chequered flag 🏁 +triangular flag 🚩 +rainbow flag 🏳️‍🌈 +Afghanistan 🇦🇫 +Åland Islands 🇦🇽 +Albania 🇦🇱 +Algeria 🇩🇿 +American Samoa 🇦🇸 +Andorra 🇦🇩 +Angola 🇦🇴 +Anguilla 🇦🇮 +Antarctica 🇦🇶 +Antigua & Barbuda 🇦🇬 +Argentina 🇦🇷 +Armenia 🇦🇲 +Aruba 🇦🇼 +Australia 🇦🇺 +Austria 🇦🇹 +Azerbaijan 🇦🇿 +Bahamas 🇧🇸 +Bahrain 🇧🇭 +Bangladesh 🇧🇩 +Barbados 🇧🇧 +Belarus 🇧🇾 +Belgium 🇧🇪 +Belize 🇧🇿 +Benin 🇧🇯 +Bermuda 🇧🇲 +Bhutan 🇧🇹 +Bolivia 🇧🇴 +Caribbean Netherlands 🇧🇶 +Bosnia & Herzegovina 🇧🇦 +Botswana 🇧🇼 +Brazil 🇧🇷 +British Indian Ocean Territory 🇮🇴 +British Virgin Islands 🇻🇬 +Brunei 🇧🇳 +Bulgaria 🇧🇬 +Burkina Faso 🇧🇫 +Burundi 🇧🇮 +Cape Verde 🇨🇻 +Cambodia 🇰🇭 +Cameroon 🇨🇲 +Canada 🇨🇦 +Canary Islands 🇮🇨 +Cayman Islands 🇰🇾 +Central African Republic 🇨🇫 +Chad 🇹🇩 +Chile 🇨🇱 +China 🇨🇳 +Christmas Island 🇨🇽 +Cocos (Keeling) Islands 🇨🇨 +Colombia 🇨🇴 +Comoros 🇰🇲 +Congo - Brazzaville 🇨🇬 +Congo - Kinshasa 🇨🇩 +Cook Islands 🇨🇰 +Costa Rica 🇨🇷 +Côte d’Ivoire 🇨🇮 +Croatia 🇭🇷 +Cuba 🇨🇺 +Curaçao 🇨🇼 +Cyprus 🇨🇾 +Czech Republic 🇨🇿 +Denmark 🇩🇰 +Djibouti 🇩🇯 +Dominica 🇩🇲 +Dominican Republic 🇩🇴 +Ecuador 🇪🇨 +Egypt 🇪🇬 +El Salvador 🇸🇻 +Equatorial Guinea 🇬🇶 +Eritrea 🇪🇷 +Estonia 🇪🇪 +Ethiopia 🇪🇹 +European Union 🇪🇺 +Falkland Islands 🇫🇰 +Faroe Islands 🇫🇴 +Fiji 🇫🇯 +Finland 🇫🇮 +France 🇫🇷 +French Guiana 🇬🇫 +French Polynesia 🇵🇫 +French Southern Territories 🇹🇫 +Gabon 🇬🇦 +Gambia 🇬🇲 +Georgia 🇬🇪 +Germany 🇩🇪 +Ghana 🇬🇭 +Gibraltar 🇬🇮 +Greece 🇬🇷 +Greenland 🇬🇱 +Grenada 🇬🇩 +Guadeloupe 🇬🇵 +Guam 🇬🇺 +Guatemala 🇬🇹 +Guernsey 🇬🇬 +Guinea 🇬🇳 +Guinea-Bissau 🇬🇼 +Guyana 🇬🇾 +Haiti 🇭🇹 +Honduras 🇭🇳 +Hong Kong SAR China 🇭🇰 +Hungary 🇭🇺 +Iceland 🇮🇸 +India 🇮🇳 +Indonesia 🇮🇩 +Iran 🇮🇷 +Iraq 🇮🇶 +Ireland 🇮🇪 +Isle of Man 🇮🇲 +Israel 🇮🇱 +Italy 🇮🇹 +Jamaica 🇯🇲 +Japan 🇯🇵 +crossed flags 🎌 +Jersey 🇯🇪 +Jordan 🇯🇴 +Kazakhstan 🇰🇿 +Kenya 🇰🇪 +Kiribati 🇰🇮 +Kosovo 🇽🇰 +Kuwait 🇰🇼 +Kyrgyzstan 🇰🇬 +Laos 🇱🇦 +Latvia 🇱🇻 +Lebanon 🇱🇧 +Lesotho 🇱🇸 +Liberia 🇱🇷 +Libya 🇱🇾 +Liechtenstein 🇱🇮 +Lithuania 🇱🇹 +Luxembourg 🇱🇺 +Macau SAR China 🇲🇴 +Macedonia 🇲🇰 +Madagascar 🇲🇬 +Malawi 🇲🇼 +Malaysia 🇲🇾 +Maldives 🇲🇻 +Mali 🇲🇱 +Malta 🇲🇹 +Marshall Islands 🇲🇭 +Martinique 🇲🇶 +Mauritania 🇲🇷 +Mauritius 🇲🇺 +Mayotte 🇾🇹 +Mexico 🇲🇽 +Micronesia 🇫🇲 +Moldova 🇲🇩 +Monaco 🇲🇨 +Mongolia 🇲🇳 +Montenegro 🇲🇪 +Montserrat 🇲🇸 +Morocco 🇲🇦 +Mozambique 🇲🇿 +Myanmar (Burma) 🇲🇲 +Namibia 🇳🇦 +Nauru 🇳🇷 +Nepal 🇳🇵 +Netherlands 🇳🇱 +New Caledonia 🇳🇨 +New Zealand 🇳🇿 +Nicaragua 🇳🇮 +Niger 🇳🇪 +Nigeria 🇳🇬 +Niue 🇳🇺 +Norfolk Island 🇳🇫 +Northern Mariana Islands 🇲🇵 +North Korea 🇰🇵 +Norway 🇳🇴 +Oman 🇴🇲 +Pakistan 🇵🇰 +Palau 🇵🇼 +Palestinian Territories 🇵🇸 +Panama 🇵🇦 +Papua New Guinea 🇵🇬 +Paraguay 🇵🇾 +Peru 🇵🇪 +Philippines 🇵🇭 +Pitcairn Islands 🇵🇳 +Poland 🇵🇱 +Portugal 🇵🇹 +Puerto Rico 🇵🇷 +Qatar 🇶🇦 +Réunion 🇷🇪 +Romania 🇷🇴 +Russia 🇷🇺 +Rwanda 🇷🇼 +St. Barthélemy 🇧🇱 +St. Helena 🇸🇭 +St. Kitts & Nevis 🇰🇳 +St. Lucia 🇱🇨 +St. Pierre & Miquelon 🇵🇲 +St. Vincent & Grenadines 🇻🇨 +Samoa 🇼🇸 +San Marino 🇸🇲 +São Tomé & Príncipe 🇸🇹 +Saudi Arabia 🇸🇦 +Senegal 🇸🇳 +Serbia 🇷🇸 +Seychelles 🇸🇨 +Sierra Leone 🇸🇱 +Singapore 🇸🇬 +Sint Maarten 🇸🇽 +Slovakia 🇸🇰 +Slovenia 🇸🇮 +Solomon Islands 🇸🇧 +Somalia 🇸🇴 +South Africa 🇿🇦 +South Georgia & South Sandwich Islands 🇬🇸 +South Korea 🇰🇷 +South Sudan 🇸🇸 +Spain 🇪🇸 +Sri Lanka 🇱🇰 +Sudan 🇸🇩 +Suriname 🇸🇷 +Swaziland 🇸🇿 +Sweden 🇸🇪 +Switzerland 🇨🇭 +Syria 🇸🇾 +Taiwan 🇹🇼 +Tajikistan 🇹🇯 +Tanzania 🇹🇿 +Thailand 🇹🇭 +Timor-Leste 🇹🇱 +Togo 🇹🇬 +Tokelau 🇹🇰 +Tonga 🇹🇴 +Trinidad & Tobago 🇹🇹 +Tunisia 🇹🇳 +Turkey 🇹🇷 +Turkmenistan 🇹🇲 +Turks & Caicos Islands 🇹🇨 +Tuvalu 🇹🇻 +Uganda 🇺🇬 +Ukraine 🇺🇦 +United Arab Emirates 🇦🇪 +United Kingdom 🇬🇧 +United States 🇺🇸 +U.S. Virgin Islands 🇻🇮 +Uruguay 🇺🇾 +Uzbekistan 🇺🇿 +Vanuatu 🇻🇺 +Vatican City 🇻🇦 +Venezuela 🇻🇪 +Vietnam 🇻🇳 +Wallis & Futuna 🇼🇫 +Western Sahara 🇪🇭 +Yemen 🇾🇪 +Zambia 🇿🇲 +Zimbabwe 🇿🇼 -- cgit v1.2.3 From fd15ec87c4e4b191cfe57be67b9eb1540d282f01 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Feb 2020 11:42:04 -0300 Subject: configuration.nix: Remove jekyll package --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d4f6e89..c86acb5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -293,7 +293,6 @@ in { scala sbt heroku - jekyll ruby pinentry zig -- cgit v1.2.3 From a9459f30528f3e62bf199d003e547cef7a142f1d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Feb 2020 11:42:21 -0300 Subject: spacemacs.el: Enable auto-fill-mode in markdown files --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index bf02539..a045f51 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -702,6 +702,8 @@ This is the place where most of your configurations should be done. Unless it is (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) + (add-hook 'markdown-mode-hook 'turn-on-auto-fill) + (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/guix/guix")) -- cgit v1.2.3 From dc1bacbedc58ac0aafaed970d285e84f3dfe4042 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 12:24:16 -0300 Subject: Add guix-env.sh Guix shebang example --- scripts/ad-hoc/guix-env.sh | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100755 scripts/ad-hoc/guix-env.sh diff --git a/scripts/ad-hoc/guix-env.sh b/scripts/ad-hoc/guix-env.sh new file mode 100755 index 0000000..e8a273b --- /dev/null +++ b/scripts/ad-hoc/guix-env.sh @@ -0,0 +1,8 @@ +#!/bin/sh - +if [ "$1" != "--really" ]; then + exec guix environment --ad-hoc bash -- bash -- "$0" --really "$@" +fi +shift + +# Processing continues +echo noop >&2 -- cgit v1.2.3 From 600744b66e2e8ba3f603474200dbe92e445b2563 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 12:27:04 -0300 Subject: spacemacs.el: Use "M-p" for interleave-mode --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index a045f51..51c60b4 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -590,7 +590,7 @@ dump." (defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) - ("M-p" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) + ("M-p" . interleave-mode) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-]" . (lambda () (interactive) (find-file "~/Nextcloud/Notes/TODOs.txt"))) -- cgit v1.2.3 From 1a9eceb0abbd5d2ef1554cc4eecb8303b107cf88 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 12:35:47 -0300 Subject: Add pastebin.sh script --- scripts/ad-hoc/pastebin.sh | 62 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 62 insertions(+) create mode 100755 scripts/ad-hoc/pastebin.sh diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh new file mode 100755 index 0000000..50487df --- /dev/null +++ b/scripts/ad-hoc/pastebin.sh @@ -0,0 +1,62 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +usage() { + red "Missing argument <${1}>.\n" + cat < + + Arguments: + FULL_TITLE Full title of the pastebin + +Examples: + pastebin.sh 'My example pastebin title' +EOF +} + +FULL_TITLE="${1:-}" +[[ -z "${FULL_TITLE}" ]] && { + usage 'FULL_TITLE' + exit 2 +} + +# Derived from: +# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 +slugify() { + echo "${1}" | \ + tr '[:upper:]' '[:lower:]' | \ + perl -ne 'tr/\000-\177//cd; + s/[^\w\s-]//g; + s/^\s+|\s+$//g; + s/[-\s]+/-/g; + print;' +} + +SLUG_TITLE="$(slugify "${FULL_TITLE}")" +OUT="_pastebins/${SLUG_TITLE}.md" + +pushd ~/dev/libre/website > /dev/null + +[[ -f "${OUT}" ]] && { + red "Pastebin named ${OUT} already exists." + exit 1 +} + +cat < "${OUT}" +--- +title: ${FULL_TITLE} +date: $(date -I) +layout: pastebin +lang: en +--- + +\`\`\`FIXME +FIXME +\`\`\` +EOF + +git add "${OUT}" +git commit -m "$0: Auto-add ${OUT}" +mr publish +popd > /dev/null -- cgit v1.2.3 From 1de29884d001d9fd905b469013a7ade0cae8ffd5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 12:37:07 -0300 Subject: Ignore FIXME marks in pastebin.sh --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index 6095aaa..0b6efee 100644 --- a/default.nix +++ b/default.nix @@ -18,7 +18,7 @@ in rec { test = utils.test [ utils.formatNix (utils.shellcheck ".*(encrypted|npmrc).*") - (utils.fixme [ "default.nix" "utils.nix" ]) + (utils.fixme [ "default.nix" "utils.nix" "scripts/ad-hoc/pastebin.sh" ]) ]; publishScript = utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; -- cgit v1.2.3 From c08cdbcc9b3c6331f6b08057f5c06702bacc57de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 19:55:45 -0300 Subject: spacemacs.el: Add php layer --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 51c60b4..b466869 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -39,7 +39,8 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - `(go + `(php + go graphviz systemd asciidoc -- cgit v1.2.3 From f082e2b3fdeb216bfb2854b329a24e11fc113d73 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 19:55:55 -0300 Subject: Use feo instead for find-os-declaration-file --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index b466869..ff412b7 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -718,7 +718,7 @@ This is the place where most of your configurations should be done. Unless it is "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage - "fec" 'euandreh/find-os-declaration-file) + "feo" 'euandreh/find-os-declaration-file) (spacemacs/set-leader-keys-for-major-mode 'typescript-mode "." 'spacemacs/jump-to-definition -- cgit v1.2.3 From 17b9400dada2e578e14e90f9693a71c42dd7d33b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 19:56:13 -0300 Subject: spacemacs.el: Add generated code --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index ff412b7..b4fdeb8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -910,7 +910,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval progn -- cgit v1.2.3 From e1786201e8fdef815abf2239fa6e863b828c1f60 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 19:57:06 -0300 Subject: configuration.nix: Remove rustup --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c86acb5..0e7a5d3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -266,7 +266,6 @@ in { openjdk # solc bundler - rustup cargo clojure # =clj= visualvm # JVM profiling tool -- cgit v1.2.3 From e07a49d65b22ce297336a31a50c2f11825dc58cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Feb 2020 20:01:19 -0300 Subject: configuration.nix: Comment (broken) stylish-haskell --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0e7a5d3..bca7be2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -204,7 +204,7 @@ in { nix-prefetch-docker elm2nix elmPackages.elm-format - stylish-haskell + # stylish-haskell wasm-pack zfs fossil -- cgit v1.2.3 From 485451549f1e8f040d3e7a33a6437dc8e041096a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Feb 2020 01:08:43 -0300 Subject: configuration.nix: Add cppcheck package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index bca7be2..37ca809 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -91,6 +91,7 @@ in { pkgs-19-09.swift nixfmt + cppcheck ## Personal data tools mercurialFull -- cgit v1.2.3 From cdda01ce08c96f09171457abac7683c4629f1131 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Feb 2020 17:10:30 -0300 Subject: repo-update.sh: Source SSH variables to be able to pull --- scripts/cron/repo-update.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cron/repo-update.sh b/scripts/cron/repo-update.sh index 3313f47..1604d67 100755 --- a/scripts/cron/repo-update.sh +++ b/scripts/cron/repo-update.sh @@ -4,6 +4,7 @@ set -Eeuo pipefail exec &> /dev/stdout echo "Starting $(date -Is)" +. "${HOME}/.ssh/environment" cd "${HOME}" mr -j8 safeupdate -- cgit v1.2.3 From e945f88a7d6093bad2af80115dd8f32eaae44e29 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Feb 2020 17:14:17 -0300 Subject: guix-pull.sh: Add guix to path in cronjob --- scripts/cron/guix-pull.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cron/guix-pull.sh b/scripts/cron/guix-pull.sh index 68ae2c7..6740540 100755 --- a/scripts/cron/guix-pull.sh +++ b/scripts/cron/guix-pull.sh @@ -4,6 +4,7 @@ set -Eeuo pipefail exec &> /dev/stdout echo "Starting $(date -Is)" +export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" guix pull echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 8cc3efebc2fdd04f04e4159c8023ce5a3fe82054 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 16 Feb 2020 17:16:27 -0300 Subject: Add shellcheck source dev/null path --- scripts/cron/repo-update.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/cron/repo-update.sh b/scripts/cron/repo-update.sh index 1604d67..03c1207 100755 --- a/scripts/cron/repo-update.sh +++ b/scripts/cron/repo-update.sh @@ -4,6 +4,7 @@ set -Eeuo pipefail exec &> /dev/stdout echo "Starting $(date -Is)" +# shellcheck source=/dev/null . "${HOME}/.ssh/environment" cd "${HOME}" mr -j8 safeupdate -- cgit v1.2.3 From 36e0ac25c93870809bcc9e04cba2d4fb7e98a0b0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 17 Feb 2020 01:39:04 -0300 Subject: Fix elfeed.sh cronjob setup Sources: - https://github.com/skeeto/elfeed/issues/130 - https://github.com/skeeto/elfeed/issues/338 --- scripts/cron/elfeed.sh | 2 +- spacemacs.el | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) diff --git a/scripts/cron/elfeed.sh b/scripts/cron/elfeed.sh index d191dbc..5461b18 100755 --- a/scripts/cron/elfeed.sh +++ b/scripts/cron/elfeed.sh @@ -7,6 +7,6 @@ echo "Starting $(date -Is)" emacs -batch \ -l ~/.emacs.d/init.el \ --eval "(run-hooks 'emacs-startup-hook)" \ - --eval '(elfeed-update)' + --eval '(euandreh/elfeed-batch-update)' echo "Finishing: $(date -Is)" diff --git a/spacemacs.el b/spacemacs.el index b4fdeb8..1675b08 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -694,6 +694,17 @@ through `notmuch-message-attach-regex'." (or (y-or-n-p "Email without subject. Really send?") (error "No subject found, aborting")))))) +(defun euandreh/elfeed-batch-update () + (message "Starting (elfeed-update).") + (elfeed-org) + (elfeed) + (elfeed-update) + (while (> (elfeed-queue-count-total) 0) + (print (elfeed-queue-count-total)) + (sleep-for 1) + (accept-process-output)) + (message "Done.")) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. -- cgit v1.2.3 From 8fa7aaab5417cf9f917f120a84f9b30e0a5e2acf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Feb 2020 22:25:06 -0300 Subject: aliases.sh: Do mr checkout before --- bash/aliases.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index f5a2d30..80a7f9d 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -57,8 +57,8 @@ alias s="git status" alias d="git diff" alias ds="git diff --staged" -alias reload="source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" -alias rr="source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && locked_init && source ~/.bashrc" +alias reload="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" +alias rr="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" alias r="source ~/.bashrc" alias mail='mail -aFrom:eu@euandre.org' -- cgit v1.2.3 From aafc4e2df810a4314855af74e60cde417d58832a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Feb 2020 22:25:28 -0300 Subject: configuration.nix: Add exercism CLI tool --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 37ca809..12604b8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -113,6 +113,7 @@ in { ## CLI tools + exercism bash bash-completion nix-bash-completions -- cgit v1.2.3 From e0495a6a7307ac6182905ad839aafd6a4dc6336b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 21 Feb 2020 22:25:38 -0300 Subject: usurpador.nix: Install zoom-us --- nixos/usurpador.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index e013d2d..46a5b24 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -8,7 +8,7 @@ in { hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation - packages = with pkgs; [ sshuttle slack chromium ]; + packages = with pkgs; [ sshuttle slack chromium zoom-us ]; cronJobs = [ common.cron.guixPull common.cron.repoUpdate -- cgit v1.2.3 From a79122dd318506973eb151b70918f0a98c5b1189 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Feb 2020 00:31:25 -0300 Subject: pastebin.sh: Assert repo 'mr isclean' before creating pastebin --- scripts/ad-hoc/pastebin.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index 50487df..af7452f 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -38,6 +38,8 @@ OUT="_pastebins/${SLUG_TITLE}.md" pushd ~/dev/libre/website > /dev/null +mr isclean + [[ -f "${OUT}" ]] && { red "Pastebin named ${OUT} already exists." exit 1 -- cgit v1.2.3 From a755b006526a34f30aed355960feb4a3a548f89c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Feb 2020 00:33:41 -0300 Subject: restart-network-manager.sh: Use bash as shebang --- scripts/cron/restart-network-manager.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh index a6a6362..dc2bdd6 100755 --- a/scripts/cron/restart-network-manager.sh +++ b/scripts/cron/restart-network-manager.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p wirelesstools wget systemd acpi --pure -I nixpkgs=channel:nixos-unstable -# shellcheck shell=bash +#!/usr/bin/env bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[@]}")" -- cgit v1.2.3 From bd7c20a094bced5d093763d79e651a25bbb758aa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 24 Feb 2020 01:08:56 -0300 Subject: fake-symlinks.sh: Remove vps from SRHT_REPOS[@] --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 7c98066..ab93e63 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -9,7 +9,7 @@ EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" cp "${EMACS_LAYOUTS_DIR}"/* ~/Nextcloud/Cache/emacs/ } -SRHT_REPOS=(dotfiles vps) +SRHT_REPOS=(dotfiles) SRHT_REPOS_PATH="${HOME}/dev/libre" cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/cement/utils.nix" -- cgit v1.2.3 From f52ac1ffe94e5cb13de9f0b44a63ab2c8847c2fd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 24 Feb 2020 01:09:12 -0300 Subject: configuration.nix: Add html-tidy package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 12604b8..1808942 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -222,6 +222,7 @@ in { logrotate mailutils ffmpeg-full + html-tidy diffoscope poppler_utils # used by diffoscope for comparing PDF files -- cgit v1.2.3 From 1004590ca9ca6f6ec1ef8c686e1ed3a5723b0fdc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Mar 2020 05:11:18 -0300 Subject: Remove Nix shebangs from cron scripts --- scripts/cron/archive.sh | 4 +--- scripts/cron/backup.sh | 4 +--- scripts/cron/nextcloud.sh | 4 +--- scripts/cron/sync-mail.sh | 4 +--- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh index b2718db..f0d6dab 100755 --- a/scripts/cron/archive.sh +++ b/scripts/cron/archive.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p jq sqlite python3 chromium curl gitMinimal which wget youtube-dl --pure -I nixpkgs=channel:nixos-unstable -# shellcheck shell=bash +#!/usr/bin/env bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" diff --git a/scripts/cron/backup.sh b/scripts/cron/backup.sh index a8c72b5..79125d3 100755 --- a/scripts/cron/backup.sh +++ b/scripts/cron/backup.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p mr gitAndTools.gitFull notmuch borgbackup gnupg gitAndTools.gitRemoteGcrypt rsync openssh gitAndTools.git-annex nix --pure -I nixpkgs=channel:nixos-unstable -# shellcheck shell=bash +#!/usr/bin/env bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" diff --git a/scripts/cron/nextcloud.sh b/scripts/cron/nextcloud.sh index 02373e9..d2d2074 100755 --- a/scripts/cron/nextcloud.sh +++ b/scripts/cron/nextcloud.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p nextcloud-client --pure -I nixpkgs=channel:nixos-unstable -# shellcheck shell=bash +#!/usr/bin/env bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[@]}")" diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index ae23604..5e396a7 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p isync gnupg notmuch --pure -I nixpkgs=channel:nixos-unstable -# shellcheck shell=bash +#!/usr/bin/env bash set -euo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -- cgit v1.2.3 From 732cb8f5483c6d9679cb4478608036d41a6a70db Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 11:59:06 -0300 Subject: Update lein/profiles.clj --- lein/profiles.clj | Bin 1173 -> 1177 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/lein/profiles.clj b/lein/profiles.clj index 35b9ce2..6d59fe9 100644 Binary files a/lein/profiles.clj and b/lein/profiles.clj differ -- cgit v1.2.3 From ea3731f81419bac0f70b75a19ddc3022ab5b3f21 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:00:48 -0300 Subject: Remove cronjob to test and restart network connection --- nixos/common.nix | 4 ---- nixos/usurpador.nix | 1 - scripts/cron/restart-network-manager.sh | 33 --------------------------------- 3 files changed, 38 deletions(-) delete mode 100755 scripts/cron/restart-network-manager.sh diff --git a/nixos/common.nix b/nixos/common.nix index 95e9a84..3f0e057 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,10 +2,6 @@ # show active crontabs with: # $ sudo cat /etc/crontab cron = { - # Test connection health every minute - networkManager = - "* * * * * root /home/andreh/dev/libre/dotfiles/scripts/cron/restart-network-manager.sh >> /tmp/cron-dbg.network-manager.log 2>&1"; - # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.log 2>&1"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 46a5b24..44a1026 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -16,6 +16,5 @@ in { common.cron.elfeed common.cron.deliverMail common.cron.nextcloud - common.cron.networkManager ]; } diff --git a/scripts/cron/restart-network-manager.sh b/scripts/cron/restart-network-manager.sh deleted file mode 100755 index dc2bdd6..0000000 --- a/scripts/cron/restart-network-manager.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[@]}")" - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -end="\033[0m" -red="\033[0;31m" -yellow="\033[0;33m" -red() { echo -e "${red}${1}${end}"; } -yellow() { echo -e "${yellow}${1}${end}"; } - -SSID="$(iwgetid -r)" - -if [[ "${SSID}" = 'Nubank-office' ]]; then - yellow 'In Nubank connection...' - if [[ "$(acpi -a)" = 'Adapter 0: on-line' ]]; then - yellow 'With charging notebook...' - yellow 'Checking connection.' - wget --tries=1 --no-check-certificate --spider https://euandre.org || { - red "Error checking connection health." - red "Restarting NetworkManager..." - systemctl restart NetworkManager - } - else - red 'Not connected to a charger, skipping.' - fi -else - red 'Not in Nubank network, skipping.' -fi - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 7c43a69b6ee4b4bc2432e8eec7c4af8db6400669 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:02:33 -0300 Subject: configuration.nix: Add fallback option to xmonad in the comments --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1808942..b8a40e5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -413,6 +413,8 @@ in { }; displayManager = { defaultSession = "none+xmonad"; + # In cases where "none+xmonad" stop working, here's a fallback + # defaultSession = "gnome-xorg"; lightdm.enable = true; -- cgit v1.2.3 From 6e593a00728e5486003c1569365c83c99bb89d35 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:03:11 -0300 Subject: configuration.nix: Add more options to quodlibet usually broken installation --- nixos/configuration.nix | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b8a40e5..30062b7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -86,6 +86,15 @@ in { buildInputs = oldAttrs.buildInputs ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); + + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { + doCheck = false; + doInstallCheck = false; + # meta = { broken = false; }; + }); + fallback-quodlibet = pkgs-19-09.quodlibet-full; + active-quodlibet = untested-quodlibet; in with pkgs; [ pkgs-19-09.swift @@ -255,7 +264,7 @@ in { lame frescobaldi timidityWithEvenMoreFormats - quodlibet-full + active-quodlibet ## Programming tools -- cgit v1.2.3 From 02214b3c8be838af22b9f5fd9cc114f45baa379d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:09:00 -0300 Subject: Add template KeePassXC Browser configuration JSON file When installing, the "path" key resolves to the concrete deeplink. It breaks when updating KeePassXC, since the hash of the path changes. Using the symlink makes it always work without having to update the JSON file. --- org.keepassxc.keepassxc_browser.json | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 org.keepassxc.keepassxc_browser.json diff --git a/org.keepassxc.keepassxc_browser.json b/org.keepassxc.keepassxc_browser.json new file mode 100644 index 0000000..1dac24b --- /dev/null +++ b/org.keepassxc.keepassxc_browser.json @@ -0,0 +1,10 @@ +{ + "allowed_extensions": [ + "keepassxc-browser@keepassxc.org" + ], + "description": "KeePassXC integration with native messaging support", + "name": "org.keepassxc.keepassxc_browser", + "path": "/run/current-system/sw/bin/keepassxc-proxy", + "type": "stdio" +} + -- cgit v1.2.3 From a91504dcc8c2f1a1fef9a2dd5772abc064afb26d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:10:53 -0300 Subject: spacemacs.el --- spacemacs.el | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 1675b08..194fd4a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -8,6 +8,10 @@ (require 'gnutls) (add-to-list 'gnutls-trustfiles "/usr/local/etc/openssl/cert.pem") +;; FIXME +(defun org-time-add (&rest r) + nil) + (defun dotspacemacs/layers () "Layer configuration: This function should only modify configuration layer settings." @@ -921,7 +925,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode perl6-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval progn -- cgit v1.2.3 From 8bb04e0d8138e692d1efc33d4684675cb6a3c904 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:12:15 -0300 Subject: configuration.nix: Add rstudio --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 30062b7..25aa404 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -268,6 +268,7 @@ in { ## Programming tools + rstudio sbcl stack leiningen -- cgit v1.2.3 From 9d434888d6e46484be42db5ae1fb12694bc4cb67 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:12:39 -0300 Subject: configuration.nix: Try to setup bluetooth configuration --- nixos/configuration.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 25aa404..a24ae19 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -32,6 +32,12 @@ in { package = pkgs.pulseaudioFull; enable = true; extraModules = [ pkgs.pulseaudio-modules-bt ]; + extraConfig = '' + # Switch between headset and headphone mode (e.g. for calls and music) automatically + load-module module-bluetooth-policy auto_switch=2 + # Echo cancellation and noise cleanup of mic + load-module module-echo-cancel aec_method=webrtc + ''; }; }; -- cgit v1.2.3 From 12c558931aece792b7421879f5b300877dff205d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:14:09 -0300 Subject: configuration.nix: Enable flatpak depending on allowing unfree software --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a24ae19..f0552f3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -388,6 +388,7 @@ in { }; services = { + flatpak.enable = localConfiguration.allowUnfree; ssmtp = { enable = true; authPassFile = "/home/andreh/annex/secret/SMTP/euandreh.txt"; -- cgit v1.2.3 From 2b90bad7c816cf6014cd75e40e3dacc97e9e42e9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:21:21 -0300 Subject: configuration.nix: Mark commented software as broken --- nixos/configuration.nix | 21 +++++++++------------ 1 file changed, 9 insertions(+), 12 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f0552f3..8cec666 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -188,7 +188,7 @@ in { gitlab-runner sshpass zathura # for viewing Emacs PDF files - nvi + # nvi broken cacert gtypist pandoc @@ -220,8 +220,8 @@ in { hlint nix-prefetch-docker elm2nix - elmPackages.elm-format - # stylish-haskell + # elmPackages.elm-format broken + # stylish-haskell broken wasm-pack zfs fossil @@ -239,7 +239,7 @@ in { ffmpeg-full html-tidy - diffoscope + # diffoscope broken poppler_utils # used by diffoscope for comparing PDF files pdftk @@ -283,7 +283,7 @@ in { yarn elixir openjdk - # solc + # solc broken bundler cargo clojure # =clj= @@ -301,11 +301,11 @@ in { dhall-json nodePackages.node2nix shellcheck - # (haskell.lib.justStaticExecutables haskellPackages.github-backup) + # (haskell.lib.justStaticExecutables haskellPackages.github-backup) broken carnix xsel nodejs-10_x - # swift + # swift broken gocode jetbrains.idea-community scala @@ -357,13 +357,10 @@ in { vlc keepassxc yubioath-desktop - # tor-browser-bundle-bin + # tor-browser-bundle-bin broken libreoffice android-studio - # androidsdk_extras - # androidndk - patchwork-classic - # gnome3.gpaste + # patchwork-classic broken ## Cryptocururencies -- cgit v1.2.3 From 1fe13fdc7697f0b7dc4dbd9098f7fd6ecd0ba7d5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 16 Jul 2020 12:22:40 -0300 Subject: Annotate TODOs.org --- TODOs.org | 1 + spacemacs.el | 1 - 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/TODOs.org b/TODOs.org index 521825f..2834a83 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,4 +1,5 @@ * Tasks +** TODO Remove =org-time-add= definition froom spacemacs.el ** TODO Reproducible setup *** TODO Add =cachix use=s to configuration.nix: : substituters = https://cache.nixos.org/ https://miso-haskell.cachix.org https://all-hies.cachix.org diff --git a/spacemacs.el b/spacemacs.el index 194fd4a..e71578c 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -8,7 +8,6 @@ (require 'gnutls) (add-to-list 'gnutls-trustfiles "/usr/local/etc/openssl/cert.pem") -;; FIXME (defun org-time-add (&rest r) nil) -- cgit v1.2.3 From f1f2cfe7c15ab99260f9f46d7b9e203d474cf2a2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 19 Jul 2020 06:36:34 -0300 Subject: configuration.nix: Set background image from ~/annex/ instead of ~/Nextcloud/ --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8cec666..e9ba4ad 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -439,7 +439,7 @@ in { # To test a keycode: # xmodmap -e 'keycode 118 = bar Greek_lamda' sessionCommands = '' - ${pkgs.fvwm}/bin/xpmroot ~/Nextcloud/Images/emotion.png & + ${pkgs.fvwm}/bin/xpmroot ~/annex/docs/emotion.png & ''; }; }; -- cgit v1.2.3 From 5ecdb3b398563371e251d8460168c7d249d4ae3b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 15:30:22 -0300 Subject: Update NixOS installation scripts --- README.org | 1 + public/nixos/burn.sh | 2 +- public/nixos/install.sh | 23 +++++++++++++++++------ 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/README.org b/README.org index 94316e3..a5ba8df 100644 --- a/README.org +++ b/README.org @@ -12,6 +12,7 @@ Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] #+BEGIN_SRC shell NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' wget https://euandre.org/dotfiles/nixos/burn.sh +chmod +x burn.sh ./burn.sh "$NIXOS_URL" /dev/sdb #+END_SRC *** 2. Performing a fresh install diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh index 3e1dd7e..175aa59 100755 --- a/public/nixos/burn.sh +++ b/public/nixos/burn.sh @@ -42,7 +42,7 @@ diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_P green "Done. SHA256 match." yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." -umount "${USB_STICK}1" ||: blue "$(du -hs /tmp/nixos.iso)" +sudo umount "${USB_STICK}1" ||: sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 6d83b38..65488df 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -92,17 +92,28 @@ sgdisk --new 3:1028096:0 --change-name 3:"Linux LVM" --typecode 3:8 sgdisk --print "${DEVICE}" green "Done." -yellow "Configuring LUKS encryption on '${DEVICE}3'..." -cryptsetup luksFormat "${DEVICE}3" -cryptsetup luksOpen "${DEVICE}3" enc-pv + +if [[ "${DEVICE}" = '/dev/sda' ]]; then + DEVICE_P2="${DEVICE}2" + DEVICE_P3="${DEVICE}3" +fi + +if [[ "${DEVICE}" = '/dev/nvme0n1' ]]; then + DEVICE_P2="${DEVICE}p2" + DEVICE_P3="${DEVICE}p3" +fi + +yellow "Configuring LUKS encryption on '${DEVICE_P3}'..." +cryptsetup luksFormat "${DEVICE_P3}" +cryptsetup luksOpen "${DEVICE_P3}" enc-pv pvcreate /dev/mapper/enc-pv vgcreate vg /dev/mapper/enc-pv lvcreate -n swap vg -L 10G lvcreate -n root vg -l 100%FREE green "Done." -yellow "Formatting '${DEVICE}'..." -mkfs.vfat -n BOOT "${DEVICE}2" +yellow "Formatting '${DEVICE_P2}'..." +mkfs.vfat -n BOOT "${DEVICE_P2}" mkfs.ext4 -L root /dev/vg/root mkswap -L swap /dev/vg/swap green "Done." @@ -110,7 +121,7 @@ green "Done." yellow "Mounting and activating swap..." mount /dev/vg/root /mnt mkdir /mnt/boot -mount "${DEVICE}2" /mnt/boot +mount "${DEVICE_P2}" /mnt/boot swapon /dev/vg/swap green "Done." -- cgit v1.2.3 From 03976c3517da5b8b9d4e72d9a776138a915a0a9d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 15:35:48 -0300 Subject: Use $DEVICE_P3 in install.sh --- public/nixos/install.sh | 22 +++++++++++----------- public/nixos/template.nix | 2 +- 2 files changed, 12 insertions(+), 12 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 65488df..5e7235b 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -56,6 +56,17 @@ DEVICE="${2:-}" exit 2 } + +if [[ "${DEVICE}" = '/dev/sda' ]]; then + export DEVICE_P2="${DEVICE}2" + export DEVICE_P3="${DEVICE}3" +fi + +if [[ "${DEVICE}" = '/dev/nvme0n1' ]]; then + export DEVICE_P2="${DEVICE}p2" + export DEVICE_P3="${DEVICE}p3" +fi + SERVER="https://euandre.org/dotfiles/nixos" yellow "Downloading Nix files..." @@ -92,17 +103,6 @@ sgdisk --new 3:1028096:0 --change-name 3:"Linux LVM" --typecode 3:8 sgdisk --print "${DEVICE}" green "Done." - -if [[ "${DEVICE}" = '/dev/sda' ]]; then - DEVICE_P2="${DEVICE}2" - DEVICE_P3="${DEVICE}3" -fi - -if [[ "${DEVICE}" = '/dev/nvme0n1' ]]; then - DEVICE_P2="${DEVICE}p2" - DEVICE_P3="${DEVICE}p3" -fi - yellow "Configuring LUKS encryption on '${DEVICE_P3}'..." cryptsetup luksFormat "${DEVICE_P3}" cryptsetup luksOpen "${DEVICE_P3}" enc-pv diff --git a/public/nixos/template.nix b/public/nixos/template.nix index c44ab60..bd10431 100644 --- a/public/nixos/template.nix +++ b/public/nixos/template.nix @@ -1,5 +1,5 @@ { hostName = "${HOST_NAME}"; - luksDevice = "${DEVICE}3"; + luksDevice = "${DEVICE_P3}"; passwordFile = "/etc/nixos/password-hash.txt"; } -- cgit v1.2.3 From 2442c015fd314004c86c958042c6b0b29de4074f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 18:56:15 -0300 Subject: Update SSH secret --- .build.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.build.yml b/.build.yml index 3557b36..83d6a51 100644 --- a/.build.yml +++ b/.build.yml @@ -8,7 +8,7 @@ triggers: sources: - https://git.sr.ht/~euandreh/dotfiles secrets: - - 7159f943-811f-402d-bb6d-37cd764dc728 + - 148e7be0-9948-4e49-88e3-ca8c5b7ac9f0 tasks: - tests: | cd dotfiles/ -- cgit v1.2.3 From ccfabb30c5f725174d988611b21b09295007214b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 19:00:31 -0300 Subject: Remove nixos/hardware-configuration.nix This file shouldn't be shared across machines, instead each installation have it's own. So there's no real value in having it here. --- nixos/hardware-configuration.nix | 29 ----------------------------- 1 file changed, 29 deletions(-) delete mode 100644 nixos/hardware-configuration.nix diff --git a/nixos/hardware-configuration.nix b/nixos/hardware-configuration.nix deleted file mode 100644 index e7ea0ff..0000000 --- a/nixos/hardware-configuration.nix +++ /dev/null @@ -1,29 +0,0 @@ -# Do not modify this file! It was generated by ‘nixos-generate-config’ -# and may be overwritten by future invocations. Please make changes -# to /etc/nixos/configuration.nix instead. -{ config, lib, pkgs, ... }: - -{ - imports = [ ]; - - boot.initrd.availableKernelModules = - [ "ehci_pci" "ahci" "usb_storage" "sd_mod" "sr_mod" ]; - boot.kernelModules = [ "kvm-intel" ]; - boot.extraModulePackages = [ ]; - - fileSystems."/" = { - device = "/dev/disk/by-uuid/337ad499-b479-4fe9-ad98-0a9b2b92f4e9"; - fsType = "ext4"; - }; - - fileSystems."/boot" = { - device = "/dev/disk/by-uuid/0975-7A26"; - fsType = "vfat"; - }; - - swapDevices = - [{ device = "/dev/disk/by-uuid/c08158aa-677a-4984-83fe-c938edb7021e"; }]; - - nix.maxJobs = lib.mkDefault 4; - powerManagement.cpuFreqGovernor = lib.mkDefault "powersave"; -} -- cgit v1.2.3 From 0ce62d8af3cad57af97457fb76b07e45ebdd2474 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 19:02:44 -0300 Subject: Add note on listing disk device in README.org --- README.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.org b/README.org index a5ba8df..2fb0bd1 100644 --- a/README.org +++ b/README.org @@ -8,7 +8,7 @@ #+END_HTML ** Instructions - setting up a new NixOS installation *** 1. Prepare the USB stick -Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] and burn it to the USB stick: +Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] (prefer the minimal image) and burn it to the USB stick (check the device with =lsblk=): #+BEGIN_SRC shell NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' wget https://euandre.org/dotfiles/nixos/burn.sh -- cgit v1.2.3 From f5c9fa743dbc199bcfff059905c00195815e5f81 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 19:04:24 -0300 Subject: public/nixos/install.sh: Remove section that pre-populates the OS Nix expression --- public/nixos/install.sh | 22 ---------------------- 1 file changed, 22 deletions(-) diff --git a/public/nixos/install.sh b/public/nixos/install.sh index 5e7235b..c90482d 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -125,28 +125,6 @@ mount "${DEVICE_P2}" /mnt/boot swapon /dev/vg/swap green "Done." -yellow "Generating '/mnt/etc/nixos/*' Nix files'..." -nixos-generate-config --root /mnt -cp /mnt/etc/nixos/hardware-configuration.nix /etc/nixos/hardware-configuration.nix -cp "${TMP_DIR}/configuration.nix" /mnt/etc/nixos/configuration.nix -cp "${TMP_DIR}/configuration.nix" /etc/nixos/configuration.nix -cp "${TMP_DIR}/local-configuration.nix" /mnt/etc/nixos/local-configuration.nix -cp "${TMP_DIR}/local-configuration.nix" /etc/nixos/local-configuration.nix -green "Done." - -yellow "Generating password-hash.txt file for user login..." -while true; do - read -r -s -p "Password: " password - echo - read -r -s -p "Password (again): " password_confirmation - echo - [ "$password" = "$password_confirmation" ] && break - red "Please try again" -done -mkpasswd -m sha-512 "$password" > /mnt/etc/nixos/password-hash.txt -cp /mnt/etc/nixos/password-hash.txt /etc/nixos/password-hash.txt -green "Done." - yellow "Installing NixOS!" nixos-install green "Done." -- cgit v1.2.3 From 3d0f3c630c8ddfa4ede2f6d2c649723ea9da8b23 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 19:08:06 -0300 Subject: README.org: Revert note on minimal ISO image --- README.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.org b/README.org index 2fb0bd1..e48c871 100644 --- a/README.org +++ b/README.org @@ -8,7 +8,7 @@ #+END_HTML ** Instructions - setting up a new NixOS installation *** 1. Prepare the USB stick -Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] (prefer the minimal image) and burn it to the USB stick (check the device with =lsblk=): +Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] (prefer the KDE image for easy network connection) and burn it to the USB stick (check the device with =lsblk=): #+BEGIN_SRC shell NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' wget https://euandre.org/dotfiles/nixos/burn.sh -- cgit v1.2.3 From 7029f6ee7a3b09c39034e980a77f4f8f529161c3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 19:11:36 -0300 Subject: public/nixos/burn.sh: Use mktemp instead of /tmp --- README.org | 2 +- public/nixos/burn.sh | 6 ++++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/README.org b/README.org index e48c871..de25662 100644 --- a/README.org +++ b/README.org @@ -13,7 +13,7 @@ Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' wget https://euandre.org/dotfiles/nixos/burn.sh chmod +x burn.sh -./burn.sh "$NIXOS_URL" /dev/sdb +./burn.sh "${NIXOS_URL}" /dev/sdb #+END_SRC *** 2. Performing a fresh install Put the USB stick in the new laptop and boot from it. diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh index 175aa59..c573505 100755 --- a/public/nixos/burn.sh +++ b/public/nixos/burn.sh @@ -20,7 +20,9 @@ EOF NIXOS_URL="${1:-}" USB_STICK="${2:-}" -ISO_PATH='/tmp/nixos.iso' +TMP_DIR="$(mktemp -d)" +ISO_PATH="${TMP_DIR}/nixos.iso" +mkdir -p "${TMP_DIR}" [[ -z "${NIXOS_URL}" ]] && { usage 'NIXOS_URL' @@ -42,7 +44,7 @@ diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_P green "Done. SHA256 match." yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." -blue "$(du -hs /tmp/nixos.iso)" +blue "$(du -hs "${ISO_PATH}")" sudo umount "${USB_STICK}1" ||: sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." -- cgit v1.2.3 From 2b2de614ef3d0b2e8a4fd590162f262682566770 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 21 Jul 2020 19:47:52 -0300 Subject: install.sh: Use default generated Nix inital expression --- README.org | 2 +- public/nixos/install.sh | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/README.org b/README.org index de25662..ad038c8 100644 --- a/README.org +++ b/README.org @@ -29,7 +29,7 @@ After that all we need is to download the installation script and run it with th curl https://euandre.org/dotfiles/nixos/install.sh > install.sh chmod +x install.sh LAPTOP_NAME='velhinho-nixos' -./install.sh "${LAPTOP_NAME}" /dev/sda +sudo ./install.sh "${LAPTOP_NAME}" /dev/sda #+END_SRC *** 3. Bootstraping the new installation's configuration and data After booting up from the freshly installed NixOS, login into the *GNOME+Xorg* option on the top right corner. Connect again to the internet using the network applet and launch a terminal window. diff --git a/public/nixos/install.sh b/public/nixos/install.sh index c90482d..5b7930d 100755 --- a/public/nixos/install.sh +++ b/public/nixos/install.sh @@ -126,6 +126,7 @@ swapon /dev/vg/swap green "Done." yellow "Installing NixOS!" +nixos-generate-config --root /mnt nixos-install green "Done." -- cgit v1.2.3 From 38bc5c9ed2313819b709c1141db709fe0bfd4ea3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jul 2020 12:41:51 -0300 Subject: Disable backup and archive cronjobs in velhinho for now --- nixos/velhinho.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix index 9ba1ed6..2b25184 100644 --- a/nixos/velhinho.nix +++ b/nixos/velhinho.nix @@ -9,5 +9,5 @@ in { enableIPFS = false; allowUnfree = false; packages = with pkgs; [ transmission-gtk ]; - cronJobs = [ common.cron.nextcloud common.cron.archivebox common.cron.borg ]; + cronJobs = [ common.cron.nextcloud ]; } -- cgit v1.2.3 From ae395f139afac2fd54122afcafe4a18053e2261d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jul 2020 13:03:48 -0300 Subject: Move android-studio to proprietary packages list --- nixos/configuration.nix | 1 - nixos/usurpador.nix | 2 +- 2 files changed, 1 insertion(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e9ba4ad..d649d11 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -359,7 +359,6 @@ in { yubioath-desktop # tor-browser-bundle-bin broken libreoffice - android-studio # patchwork-classic broken ## Cryptocururencies diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 44a1026..5825c91 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -8,7 +8,7 @@ in { hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; allowUnfree = true; # Required for slack (unfree) derivation - packages = with pkgs; [ sshuttle slack chromium zoom-us ]; + packages = with pkgs; [ android-studio sshuttle slack chromium zoom-us ]; cronJobs = [ common.cron.guixPull common.cron.repoUpdate -- cgit v1.2.3 From b39d0a09de2660d8ae009f9487eba06ba13c7c58 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jul 2020 17:32:06 -0300 Subject: Add KeePassXC-Browser JSON to fake-symlinks.sh --- bash/fake-symlinks.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index ab93e63..85901a4 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -39,6 +39,8 @@ for template in "${DOTFILES}"/tmux/projects/*; do cp "${template}" "${HOME}/.tmuxinator/$(basename "$template")" done +cp org.keepassxc.keepassxc_browser.json ~/.mozilla/native-messaging-hosts/ + # DHALL_BUILD_REPOS=(website) # for repo in "${DHALL_BUILD_REPOS[@]}"; do -- cgit v1.2.3 From 362b802db537d1561b91b545a60c4d766059e948 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jul 2020 17:35:07 -0300 Subject: Remove duplicated Nix kernelModules expression --- nixos/configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d649d11..a41cba2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -24,8 +24,6 @@ in { }; }; - boot.kernelModules = [ "kvm-intel" ]; - hardware = { bluetooth = { enable = true; }; pulseaudio = { -- cgit v1.2.3 From 6fb40a0d921e373cce2ffbfd2cbe8ea21a4e3777 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jul 2020 19:13:18 -0300 Subject: Fix path to KeePassXC-Browser JSON file --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 85901a4..760331e 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -39,7 +39,7 @@ for template in "${DOTFILES}"/tmux/projects/*; do cp "${template}" "${HOME}/.tmuxinator/$(basename "$template")" done -cp org.keepassxc.keepassxc_browser.json ~/.mozilla/native-messaging-hosts/ +cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ # DHALL_BUILD_REPOS=(website) -- cgit v1.2.3 From 8cdcfd10a7c4d7d483a812b86cb44d33811afb28 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 23 Jul 2020 19:13:53 -0300 Subject: Fix secret in sr-ht-build.yaml template --- templates/sr-ht-build.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/templates/sr-ht-build.yaml b/templates/sr-ht-build.yaml index 5f2ea06..026caec 100644 --- a/templates/sr-ht-build.yaml +++ b/templates/sr-ht-build.yaml @@ -8,7 +8,7 @@ triggers: sources: - https://git.sr.ht/~euandreh/$REPO secrets: - - 7159f943-811f-402d-bb6d-37cd764dc728 + - 148e7be0-9948-4e49-88e3-ca8c5b7ac9f0 tasks: - tests: | cd $REPO/ -- cgit v1.2.3 From 9c50bb93c4eda6d9e003d9dcd4a956a011421174 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 24 Jul 2020 10:10:21 -0300 Subject: Split setting up and connecting with bluetooth device Both are now working :) --- scripts/ad-hoc/bt.sh | 14 ++------------ scripts/ad-hoc/setup-bt.sh | 14 ++++++++++++++ 2 files changed, 16 insertions(+), 12 deletions(-) create mode 100644 scripts/ad-hoc/setup-bt.sh diff --git a/scripts/ad-hoc/bt.sh b/scripts/ad-hoc/bt.sh index e1baa47..2d3cedb 100755 --- a/scripts/ad-hoc/bt.sh +++ b/scripts/ad-hoc/bt.sh @@ -1,16 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -echo 1 -bluetoothctl -- remove 00:02:BF:03:B8:9A ||: -echo 2 -bluetoothctl --timeout 10 -- scan on -echo 3 -bluetoothctl -- pair 00:02:BF:03:B8:9A -echo 5 -bluetoothctl -- trust 00:02:BF:03:B8:9A -echo 6 +yellow "Connecting to the device..." bluetoothctl -- connect 00:02:BF:03:B8:9A -echo 7 - -# gnome-control-center +green "Done!" diff --git a/scripts/ad-hoc/setup-bt.sh b/scripts/ad-hoc/setup-bt.sh new file mode 100644 index 0000000..bc7658a --- /dev/null +++ b/scripts/ad-hoc/setup-bt.sh @@ -0,0 +1,14 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +yellow "Removing the device..." +bluetoothctl -- remove 00:02:BF:03:B8:9A ||: +yellow "Scanning available devices..." +bluetoothctl --timeout 10 -- scan on +yellow "Pairing device..." +bluetoothctl -- pair 00:02:BF:03:B8:9A +yellow "Configuring device..." +bluetoothctl -- trust 00:02:BF:03:B8:9A +yellow "Connecting to the device..." +bluetoothctl -- connect 00:02:BF:03:B8:9A +green "Done!" -- cgit v1.2.3 From 4038291f1ef370f348b466ee73a0b809ad88a929 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 10:18:03 -0300 Subject: NixOS: SPlit flatpak from unfree configuration, update LUKS device for new laptop --- nixos/configuration.nix | 4 ++-- nixos/usurpador.nix | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a41cba2..65dbae7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -382,7 +382,7 @@ in { }; services = { - flatpak.enable = localConfiguration.allowUnfree; + flatpak.enable = localConfiguration.enableFlatpak; ssmtp = { enable = true; authPassFile = "/home/andreh/annex/secret/SMTP/euandreh.txt"; @@ -522,5 +522,5 @@ in { # compatible, in order to avoid breaking some software such as database # servers. You should change this only after NixOS release notes say you # should. - system.stateVersion = "19.09"; # Did you read the comment? + system.stateVersion = "20.03"; # Did you read the comment? } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 5825c91..7b6d75b 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -4,10 +4,11 @@ let common = import /etc/nixos/common.nix; in { hostName = "usurpador-nixos"; - luksDevice = "/dev/sda3"; + luksDevice = "/dev/nvme0n1p3"; hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; - allowUnfree = true; # Required for slack (unfree) derivation + allowUnfree = true; # Required for slack and other proprietary packages + enableFlatpak = false; packages = with pkgs; [ android-studio sshuttle slack chromium zoom-us ]; cronJobs = [ common.cron.guixPull -- cgit v1.2.3 From 4cbb8089255cb7bb485fd448745487b9d0f71b5b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 10:33:49 -0300 Subject: nixos/usurpador.nix: Remove unused packages --- nixos/usurpador.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 7b6d75b..8e33bcf 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,7 +9,13 @@ in { enableIPFS = false; allowUnfree = true; # Required for slack and other proprietary packages enableFlatpak = false; - packages = with pkgs; [ android-studio sshuttle slack chromium zoom-us ]; + packages = with pkgs; [ + # android-studio unused + # sshuttle unused + slack + # chromium unused for now + zoom-us + ]; cronJobs = [ common.cron.guixPull common.cron.repoUpdate -- cgit v1.2.3 From 3a4ec5398ba608a4f861897cc197955f45f601b1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 11:04:30 -0300 Subject: xmobar-mpris.sh: Add custom xmobar format for Firefox --- scripts/ad-hoc/xmobar-mpris.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ad-hoc/xmobar-mpris.sh b/scripts/ad-hoc/xmobar-mpris.sh index f0d3ce6..514d7b8 100755 --- a/scripts/ad-hoc/xmobar-mpris.sh +++ b/scripts/ad-hoc/xmobar-mpris.sh @@ -19,6 +19,9 @@ main() { cmus) default_status "${CUR}" ;; + firefox*) + printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" + ;; vlc) # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp NAME="$(basename "$(playerctl metadata xesam:url)")" -- cgit v1.2.3 From 48102168fc65b4b127e17737df4d83e9555d9668 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 11:07:37 -0300 Subject: xmobar-mpris.sh: Pretty-print firefox mpris name in xmobar --- scripts/ad-hoc/xmobar-mpris.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/xmobar-mpris.sh b/scripts/ad-hoc/xmobar-mpris.sh index 514d7b8..ebdc286 100755 --- a/scripts/ad-hoc/xmobar-mpris.sh +++ b/scripts/ad-hoc/xmobar-mpris.sh @@ -20,7 +20,7 @@ main() { default_status "${CUR}" ;; firefox*) - printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" + printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" ;; vlc) # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp -- cgit v1.2.3 From 73a9a4172f90a25b8b20f842c213d91f9d5c718e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 18:16:54 -0300 Subject: Rename scripts/{cron => ad-hoc}/backup.sh and remove shellcheck ignores --- nixos/common.nix | 2 +- scripts/ad-hoc/backup.sh | 132 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/cron/backup.sh | 134 ----------------------------------------------- 3 files changed, 133 insertions(+), 135 deletions(-) create mode 100755 scripts/ad-hoc/backup.sh delete mode 100755 scripts/cron/backup.sh diff --git a/nixos/common.nix b/nixos/common.nix index 3f0e057..8a45a40 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -32,6 +32,6 @@ # Borg backup once a month borg = - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup.sh cron >> /tmp/cron-dbg.backup.log 2>&1"; + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh cron >> /tmp/cron-dbg.backup.log 2>&1"; }; } diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh new file mode 100755 index 0000000..8276ee5 --- /dev/null +++ b/scripts/ad-hoc/backup.sh @@ -0,0 +1,132 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +export end="\033[0m" +export red="\033[0;31m" +export green="\033[0;32m" +export yellow="\033[0;33m" +red() { echo -e "${red}${1}${end}"; } +green() { echo -e "${green}${1}${end}"; } +yellow() { echo -e "${yellow}${1}${end}"; } + +BACKUP_TAG="${1-adhoc}" +[[ -f "${BACKUP_TAG}" ]] || { + yellow "No '\$BACKUP_TAG' provided, falling back to default: 'adhoc'." +} + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" > /dev/null +BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" +export BORG_PASSPHRASE +R="$(cat ~/annex/secret/rsync.net/addr.txt)" +export R +# Required for properly running Git Annex +# Related issue: +# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ +export LANG=C.UTF-8 + +# +# BorgBackup +# + +if [ ! -d ~/UTCLOUD/ ]; then + red "$HOME/UTCLOUD not attached, the backup will not be synced there." +fi + +if [ ! -d ~/borgbackup/ ]; then + yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/backups/borg/borgbackup/ into ~/borgbackup/." + # The initial borg repo was created with: + # $ borg init --append-only --encryption=keyfile ~/borgbackup + # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup +fi + +pushd ~/dev/libre/ || exit 1 +mr -s notmaster +popd || exit 1 + +rm -rf "$HOME/tmp/backup/" +mkdir -p "$HOME/tmp/backup/" + +yellow "Creating backup of notmuch data" +notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" +green "Done" + +yellow "Creating new borg archive entry" +borg create \ + --exclude ~/mbsync/.notmuch/ \ + --verbose \ + --stats \ + --progress \ + --compression lzma,6 \ + ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ + ~/Nextcloud/ \ + ~/mbsync/ \ + ~/archive/ \ + ~/.elfeed/ \ + ~/.mozilla/ \ + ~/.config/quodlibet/ \ + ~/tmp/backup/ + # add folders to be backed up here +green "Done" + +yellow "Committing borg config changes..." +pushd ~/dev/libre/borg/ +git add . +git commit -m "JOB: automated update of borg config files after backup.sh" +git push origin master +popd +green "Done." + +if [ ! -d ~/UTCLOUD/ ]; then + red "${HOME}/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and ${R}:vps-borgbackup/ there." +else + yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" + rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ + green "Done" + yellow "Syncing ${R}:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" + rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ + green "Done" +fi + +yellow "Syncing ~/borgbackup to $R:borgbackup/" +rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" +green "Done" + + +# +# mr +# + +yellow "Backing up ~/dev/libre/ git repos" +pushd ~/dev/libre/ || exit 1 + +mr -s master +mr -s status +mr -s update +mr -s rsyncnet +mr -s gitlab + +if [ ! -d ~/UTCLOUD/ ]; then + red "${HOME}/UTCLOUD/ not attached, not storing mr repositories there." +else + mr -s hd +fi + +popd || exit 1 + +yellow "Syncing Nextcloud" +./nextcloud.sh +green "Done" + +yellow "Syncing annex" +pushd ~/annex/ || exit 1 +git annex sync +popd || exit 1 +green "Done" + +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/backup.sh b/scripts/cron/backup.sh deleted file mode 100755 index 79125d3..0000000 --- a/scripts/cron/backup.sh +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -exec &> /dev/stdout -echo "Starting: $(date -Is)" - -export end="\033[0m" -export red="\033[0;31m" -export green="\033[0;32m" -export yellow="\033[0;33m" -red() { echo -e "${red}${1}${end}"; } -green() { echo -e "${green}${1}${end}"; } -yellow() { echo -e "${yellow}${1}${end}"; } - -BACKUP_TAG="${1-default}" -[[ -f "${BACKUP_TAG}" ]] || { - yellow "No '$BACKUP_TAG' provided, falling back to default." -} - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" > /dev/null -BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" -export BORG_PASSPHRASE -R="$(cat ~/annex/secret/rsync.net/addr.txt)" -export R -# Required for properly running Git Annex -# Related issue: -# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ -export LANG=C.UTF-8 - -# -# BorgBackup -# - -if [ ! -d ~/UTCLOUD/ ]; then - red "$HOME/UTCLOUD not attached, the backup will not be synced there." -fi - -if [ ! -d ~/borgbackup/ ]; then - yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/backups/borg/borgbackup/ into ~/borgbackup/." - # The initial borg repo was created with: - # $ borg init --append-only --encryption=keyfile ~/borgbackup - # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup -fi - -pushd ~/dev/libre/ || exit 1 -mr -s notmaster -popd || exit 1 - -rm -rf "$HOME/tmp/backup/" -mkdir -p "$HOME/tmp/backup/" - -yellow "Creating backup of notmuch data" -notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" -green "Done" - -yellow "Creating new borg archive entry" -borg create \ - --exclude ~/mbsync/.notmuch/ \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ - ~/Nextcloud/ \ - ~/mbsync/ \ - ~/archive/ \ - ~/.elfeed/ \ - ~/.mozilla/ \ - ~/.config/quodlibet/ \ - ~/tmp/backup/ - # add folders to be backed up here -green "Done" - -yellow "Committing borg config changes..." -pushd ~/dev/libre/borg/ -git add . -git commit -m "JOB: automated update of borg config files after backup.sh" -git push origin master -popd -green "Done." - -if [ ! -d ~/UTCLOUD/ ]; then - # shellcheck disable=SC2016 - red '$HOME/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and $R:vps-borgbackup/ there.' -else - yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" - rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ - green "Done" - yellow "Syncing $R:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" - rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ - green "Done" -fi - -yellow "Syncing ~/borgbackup to $R:borgbackup/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" -green "Done" - - -# -# mr -# - -yellow "Backing up ~/dev/libre/ git repos" -pushd ~/dev/libre/ || exit 1 - -mr -s master -mr -s status -mr -s update -mr -s rsyncnet -mr -s gitlab - -if [ ! -d ~/UTCLOUD/ ]; then - # shellcheck disable=SC2016 - red '$HOME/UTCLOUD/ not attached, not storing mr repositories there.' -else - mr -s hd -fi - -popd || exit 1 - -yellow "Syncing Nextcloud" -./nextcloud.sh -green "Done" - -yellow "Syncing annex" -pushd ~/annex/ || exit 1 -git annex sync -popd || exit 1 -green "Done" - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 8aeb17aa87329902bb1c50da589a7444251fc65c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 18:46:55 -0300 Subject: Enable new 'backup-job.sh' as a cronjob in usurpador.nix --- nixos/common.nix | 2 +- nixos/usurpador.nix | 1 + scripts/cron/backup-job.sh | 31 +++++++++++++++++++++++++++++++ 3 files changed, 33 insertions(+), 1 deletion(-) create mode 100755 scripts/cron/backup-job.sh diff --git a/nixos/common.nix b/nixos/common.nix index 8a45a40..2c2a9dd 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -32,6 +32,6 @@ # Borg backup once a month borg = - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh cron >> /tmp/cron-dbg.backup.log 2>&1"; + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.log 2>&1"; }; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 8e33bcf..0b923a2 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -23,5 +23,6 @@ in { common.cron.elfeed common.cron.deliverMail common.cron.nextcloud + common.cron.borg ]; } diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh new file mode 100755 index 0000000..381bc06 --- /dev/null +++ b/scripts/cron/backup-job.sh @@ -0,0 +1,31 @@ +#!/usr/bin/env bash + +# set -Eeuo pipefail +# "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.log 2>&1"; + +LOG_FILE="$(mktemp)" + +finish() { + rm "${LOG_FILE}" +} +trap finish EXIT + +backup.sh &> "${LOG_FILE}" + +status=$? +if [[ $status = 0 ]]; then + STATUS='SUCCESS' +else + STATUS='FAILURE' +fi + +pushd /tmp/ > /dev/null + +# Taken from: +# https://unix.stackexchange.com/questions/55546/removing-color-codes-from-output +sed 's/\x1B\[[0-9;]*[JKmsu]//g' "${LOG_FILE}" > report.txt + +mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -Areport.txt <<< 'The log report is in the attachment.' +rm report.txt + +popd > /dev/null -- cgit v1.2.3 From 9d26488bc3dda6cd01dea6eb447d2e4087b92595 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 19:43:35 -0300 Subject: Enable ArchiveBox cronjob in usurpador.nix --- nixos/configuration.nix | 1 + nixos/usurpador.nix | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 65dbae7..d03dece 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -358,6 +358,7 @@ in { # tor-browser-bundle-bin broken libreoffice # patchwork-classic broken + chromium # required for ArchiveBox ## Cryptocururencies diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 0b923a2..c59a44c 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -13,7 +13,6 @@ in { # android-studio unused # sshuttle unused slack - # chromium unused for now zoom-us ]; cronJobs = [ @@ -23,6 +22,7 @@ in { common.cron.elfeed common.cron.deliverMail common.cron.nextcloud + common.cron.archivebox common.cron.borg ]; } -- cgit v1.2.3 From e6ccd66a764a2c553f5793aae65182f7d169fcf4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 20:10:54 -0300 Subject: archive.sh: Remove clutter from ArchiveBox arguments --- scripts/cron/archive.sh | 8 +------- scripts/cron/wget-4.sh | 2 -- 2 files changed, 1 insertion(+), 9 deletions(-) delete mode 100755 scripts/cron/wget-4.sh diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh index f0d6dab..b96768a 100755 --- a/scripts/cron/archive.sh +++ b/scripts/cron/archive.sh @@ -53,14 +53,8 @@ popd > /dev/null export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" export FETCH_MEDIA=False -export TIMEOUT=180 -export ONLY_NEW=True -export WGET_BINARY="${PWD}/wget-4.sh" +export TIMEOUT=180 # default is too small: 60 (seconds) -# Required for wget -export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt -export SSL_CERT_DIR=~/.guix-profile/etc/ssl/certs -export GIT_SSL_CAINFO=~/.guix-profile/etc/ssl/certs/ca-certificates.crt "${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" echo "Finishing: $(date -Is)" diff --git a/scripts/cron/wget-4.sh b/scripts/cron/wget-4.sh deleted file mode 100755 index 1066441..0000000 --- a/scripts/cron/wget-4.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/usr/bin/env bash -wget -4 "$@" -- cgit v1.2.3 From 4f062814fd83f6db89eb5ea5a92f6a1407ff9205 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 22:39:57 -0300 Subject: elfeed.sh: Add a 2 minutes timebox --- nixos/common.nix | 4 ++-- scripts/cron/elfeed.sh | 4 +++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 2c2a9dd..28ab822 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -22,9 +22,9 @@ repoUpdate = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.log 2>&1"; - # Fetch elfeed feeds once a day + # Fetch elfeed feeds every 6 hours (4 times a day) elfeed = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.log 2>&1"; + "0 */6 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.log 2>&1"; # Run ArchiveBox data once every day at 12h archivebox = diff --git a/scripts/cron/elfeed.sh b/scripts/cron/elfeed.sh index 5461b18..ea509ff 100755 --- a/scripts/cron/elfeed.sh +++ b/scripts/cron/elfeed.sh @@ -4,7 +4,9 @@ set -Eeuo pipefail exec &> /dev/stdout echo "Starting $(date -Is)" -emacs -batch \ +timeout 120 \ + emacs \ + -batch \ -l ~/.emacs.d/init.el \ --eval "(run-hooks 'emacs-startup-hook)" \ --eval '(euandreh/elfeed-batch-update)' -- cgit v1.2.3 From d9a59ce703fc4d5c7a436d5dc341fa9062154712 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 23:04:45 -0300 Subject: Setup logrotate for cronjob log files --- nixos/common.nix | 19 +++++++++++-------- nixos/configuration.nix | 14 ++++++++++++++ 2 files changed, 25 insertions(+), 8 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 28ab822..1f1ea0b 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,37 +1,40 @@ { # show active crontabs with: # $ sudo cat /etc/crontab + # + # Log files end with .euandreh.log to easy the logrotate pattern matching + # cron = { # Sync Nextcloud using nextcloudcmd every 15 minutes nextcloud = - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.log 2>&1"; + "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.euandreh.log 2>&1"; # Deliver queued emails every hour deliverMail = - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/deliver-queued-mail.sh >> /tmp/cron-dbg.deliver-queued-mail.log 2>&1"; + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/deliver-queued-mail.sh >> /tmp/cron-dbg.deliver-queued-mail.euandreh.log 2>&1"; # Fetch emails with mbsync every hour fetchMail = - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.log 2>&1"; + "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.euandreh.log 2>&1"; # Update Guix once a day at 12h guixPull = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.log 2>&1"; + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.euandreh.log 2>&1"; # Pull code from source code repositories once a day at 12h repoUpdate = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.log 2>&1"; + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.euandreh.log 2>&1"; # Fetch elfeed feeds every 6 hours (4 times a day) elfeed = - "0 */6 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.log 2>&1"; + "0 */6 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.euandreh.log 2>&1"; # Run ArchiveBox data once every day at 12h archivebox = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.log 2>&1"; + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.euandreh.log 2>&1"; # Borg backup once a month borg = - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.log 2>&1"; + "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; }; } diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d03dece..071a92c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -402,6 +402,20 @@ in { # We can see the actual generated crontab at /etc/crontab cron.systemCronJobs = localConfiguration.cronJobs; + logrotate = { + enable = true; + config = '' + compress + + /tmp/*.euandreh.log { + rotate 5 + daily + olddir /home/andreh/tmp/logs/ + createolddir 755 andreh users + } + ''; + }; + xserver = { enable = true; layout = "br"; -- cgit v1.2.3 From 4bfbe9994549dafd412e145e6eae4f94ce94bd0f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 26 Jul 2020 23:05:04 -0300 Subject: configuration.nix: Format cron.* config --- nixos/configuration.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 071a92c..86d2f60 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -398,9 +398,11 @@ in { blueman.enable = true; gvfs.enable = true; - cron.enable = true; # We can see the actual generated crontab at /etc/crontab - cron.systemCronJobs = localConfiguration.cronJobs; + cron = { + enable = true; + systemCronJobs = localConfiguration.cronJobs; + }; logrotate = { enable = true; -- cgit v1.2.3 From 0c482f74206853b893b08122eeb13467ad85f9d5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 06:17:47 -0300 Subject: scripts/cron/backup-job.sh: Fix linter offense (shellcheck) --- scripts/cron/backup-job.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 381bc06..f37fde6 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -19,7 +19,7 @@ else STATUS='FAILURE' fi -pushd /tmp/ > /dev/null +pushd /tmp/ > /dev/null || exit 1 # Taken from: # https://unix.stackexchange.com/questions/55546/removing-color-codes-from-output @@ -28,4 +28,4 @@ sed 's/\x1B\[[0-9;]*[JKmsu]//g' "${LOG_FILE}" > report.txt mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -Areport.txt <<< 'The log report is in the attachment.' rm report.txt -popd > /dev/null +popd > /dev/null || exit 1 -- cgit v1.2.3 From 14766af5677018a28344d0485b572b5724820189 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 07:26:36 -0300 Subject: configuration.nix: Fix permissions of folder and users for logrotate --- nixos/configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 86d2f60..c185036 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -413,7 +413,8 @@ in { rotate 5 daily olddir /home/andreh/tmp/logs/ - createolddir 755 andreh users + createolddir 744 andreh users + su andreh users } ''; }; -- cgit v1.2.3 From 4a6f450d6a812e325be0695f925d0375a5711896 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:08:15 -0300 Subject: gitconfig.ini: Add packSizeLimit of 2G --- git/gitconfig.ini | Bin 2018 -> 2046 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 4d6676d..65ea8da 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 6a61a8c9c09273804e2c48395268ec6fbfd3acc9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:08:38 -0300 Subject: xmobar: Show wired network next to wireless network --- xmonad/xmobar.hs | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 1ab32d5..a64219b 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -6,7 +6,8 @@ Config { , Run Swap [] 30 , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 , Run DiskU [("/", "/")] [] 600 - , Run Wireless "wlp2s0" [] 100 + , Run Network "wired: ens20u1u2" ["-t", ""] 100 + , Run Wireless "wlp59s0" [] 100 , Run Volume "default" "Master" [] 10 , Run Battery [ "-t", ": % - ", @@ -20,5 +21,5 @@ Config { 10 , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" ] - , template = " %date% | %default:Master%| %mpris% } { | %wlp2s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " + , template = " %date% | %default:Master%| %mpris% } { | %ens20u1u2% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From 9b968e0128bbc4fe06bb44c66be66df8fbefe7a1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:09:04 -0300 Subject: configuration.nix: Mark cabal2nix as broken --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c185036..c6ade24 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -213,7 +213,7 @@ in { elmPackages.elm now-cli ghc - cabal2nix + # cabal2nix broken nix-prefetch-git hlint nix-prefetch-docker -- cgit v1.2.3 From 01f7e0a0a4319bd8ec5ac5a02e5380dd71f6c596 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:09:20 -0300 Subject: configuration.nix: Update logrotate configuration after NixOS update --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c6ade24..db55d13 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -406,7 +406,7 @@ in { logrotate = { enable = true; - config = '' + extraConfig = '' compress /tmp/*.euandreh.log { -- cgit v1.2.3 From c77828c73d37584e84f4f3f87f8a3c4a05bcc4d0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:09:55 -0300 Subject: configuration.nix: Update and run GC --- nixos/configuration.nix | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index db55d13..194ccc6 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -42,15 +42,13 @@ in { networking.hostName = localConfiguration.hostName; networking.networkmanager.enable = true; - # Auto-upgrade channel - # https://nixos.org/nixos/manual/index.html#idm140737316795120 - system.autoUpgrade.enable = true; + system.autoUpgrade = { + enable = true; + channel = "https://nixos.org/channels/nixos-unstable"; + }; nix = { - gc = { - automatic = false; - dates = "03:15"; # change to hour? - }; + gc.automatic = true; extraOptions = '' trusted-users = root andreh ''; -- cgit v1.2.3 From 109a17666bd87ef54f849b533faa969bdc029b65 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:10:43 -0300 Subject: xmonad.hs: Update escrotum output path --- xmonad/xmonad.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 665d5ce..6f19dd3 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -60,9 +60,9 @@ myKeyPBindings = , ("C-M-l", spawn "dm-tool switch-to-greeter") -- print whole screen - , ("M-", spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png") + , ("M-", spawn "escrotum ~/Bureau/%Y-%m-%d-%T-screenshot.png") -- print screen of clicked window - , ("C-M-", spawn "escrotum ~/Desktop/%Y-%m-%d-%T-screenshot.png -s") + , ("C-M-", spawn "escrotum ~/Bureau/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/single-monitor.sh") -- cgit v1.2.3 From 6e65268e3594ef899a248b029954a566ed2cb14f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:12:29 -0300 Subject: usurpador.nix: Disable ArchiveBox cronjob from usurpador.nix --- nixos/usurpador.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index c59a44c..8508f95 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -22,7 +22,6 @@ in { common.cron.elfeed common.cron.deliverMail common.cron.nextcloud - common.cron.archivebox common.cron.borg ]; } -- cgit v1.2.3 From 4b497a1a7a7737c35991df27b7d967d5f9cf00f9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:12:58 -0300 Subject: backup.sh: Update UTCLOUD backup paths --- scripts/ad-hoc/backup.sh | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 8276ee5..e0b7e5a 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -38,11 +38,11 @@ if [ ! -d ~/UTCLOUD/ ]; then fi if [ ! -d ~/borgbackup/ ]; then - yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/backups/borg/borgbackup/ into ~/borgbackup/." + yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/." # The initial borg repo was created with: # $ borg init --append-only --encryption=keyfile ~/borgbackup # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borg/borgbackup/ ~/borgbackup + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borgbackup/ ~/borgbackup fi pushd ~/dev/libre/ || exit 1 @@ -86,10 +86,10 @@ if [ ! -d ~/UTCLOUD/ ]; then red "${HOME}/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and ${R}:vps-borgbackup/ there." else yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" - rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borg/borgbackup/ + rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borgbackup/ green "Done" - yellow "Syncing ${R}:vps-borgbackup/ ~/UTCLOUD/borg/vps-borgbackup/" - rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/borg/vps-borgbackup/ + yellow "Syncing ${R}:vps-borgbackup/ ~/UTCLOUD/backupgs/vps-borgbackup/" + rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/vps-borgbackup/ green "Done" fi -- cgit v1.2.3 From bb24b674856ef2b116eefc93e305d5f5539e84eb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 27 Jul 2020 23:13:11 -0300 Subject: backup.sh: Add step to copy box encrypted files --- scripts/ad-hoc/backup.sh | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index e0b7e5a..c6416cc 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -129,4 +129,17 @@ git annex sync popd || exit 1 green "Done" + +# +# Box backup +# + +if [ ! -d ~/UTCLOUD/ ]; then + red "${HOME}/UTCLOUD/ not attached, not sync box backupgs." +else + rsync -avz euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-backup/ + rsync -avz ~/UTCLOUD/backups/box-backup/ "$R:box-backup/" +fi + + echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 0229040719f558f351e4f57d12870140d4f14b70 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 29 Jul 2020 11:41:19 -0300 Subject: Make setup-bt.sh executable --- scripts/ad-hoc/setup-bt.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/ad-hoc/setup-bt.sh diff --git a/scripts/ad-hoc/setup-bt.sh b/scripts/ad-hoc/setup-bt.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From df76483e339c759af7b0f050f9351b18f36a89ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 Jul 2020 06:50:42 -0300 Subject: gitconfig.ini: Add pull.rebase config option --- git/gitconfig.ini | Bin 2046 -> 2070 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 65ea8da..d6ffa19 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 26768b20a97f5f3d65179f443d7b025bf825898d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 Jul 2020 06:51:11 -0300 Subject: configuration.nix: Disable broken vagrant --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 194ccc6..039378e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -317,7 +317,7 @@ in { packer docker_compose docker-machine - vagrant + # vagrant broken kubernetes ansible qemu -- cgit v1.2.3 From b6ba91a0cf35c89d3ee43fd16616fc339a245bb0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 Jul 2020 06:51:24 -0300 Subject: usurpador.nix: Enable vagrant --- nixos/usurpador.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 8508f95..e62c602 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -8,7 +8,7 @@ in { hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; allowUnfree = true; # Required for slack and other proprietary packages - enableFlatpak = false; + enableFlatpak = true; packages = with pkgs; [ # android-studio unused # sshuttle unused -- cgit v1.2.3 From 898ced4147f57ab358ea30996fbf762b90e4cf09 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 Jul 2020 06:51:39 -0300 Subject: burn.sh: Add sync call after dd --- public/nixos/burn.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh index c573505..7785727 100755 --- a/public/nixos/burn.sh +++ b/public/nixos/burn.sh @@ -47,4 +47,5 @@ yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." blue "$(du -hs "${ISO_PATH}")" sudo umount "${USB_STICK}1" ||: sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress +sync green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." -- cgit v1.2.3 From 7d7d69792197904d354dcca28c9c714c35af0f03 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 31 Jul 2020 06:51:59 -0300 Subject: setup.sh: uncomment enableremote for hd remote too --- public/nixos/setup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index 7d64823..1892233 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -90,7 +90,7 @@ configure_git_annex() { git annex enableremote nextcloud git annex enableremote s3 - # git annex enableremote hd + git annex enableremote hd # gitlab # rsyncnet -- cgit v1.2.3 From 74442f310c3f766835dc36aa36c2ae06b8baff90 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:29:47 -0300 Subject: Remove pires and cement from utils.nix in fake-symlinks.sh --- bash/fake-symlinks.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 760331e..9dbbe36 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -12,8 +12,6 @@ EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" SRHT_REPOS=(dotfiles) SRHT_REPOS_PATH="${HOME}/dev/libre" -cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/cement/utils.nix" -cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/pires/utils.nix" cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/website/utils.nix" for repo in "${SRHT_REPOS[@]}"; do -- cgit v1.2.3 From 94de71771ee36fd68005e70e8e5f01de00ed1823 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:30:02 -0300 Subject: util.sh: Add gen-password function --- bash/util.sh | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bash/util.sh b/bash/util.sh index a1186fa..95c2ec8 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -36,3 +36,8 @@ merkle-tree () { # Taken from: # https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +gen-password() { + length="${1-99}" + tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 +} -- cgit v1.2.3 From 3017b6265cf52262ba187de52e83a0f75942c956 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:30:23 -0300 Subject: spacemacs.el: Remove perl6 layer --- spacemacs.el | 1 - 1 file changed, 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index e71578c..2eee5f2 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -76,7 +76,6 @@ This function should only modify configuration layer settings." notmuch pdf perl5 - perl6 purescript python react -- cgit v1.2.3 From 79f9d75159e23d4ccfa7f7858713752d813a3640 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:30:35 -0300 Subject: spacemacs.el: Add 'SPC a i' shortcut to IRC --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 2eee5f2..a304384 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -728,6 +728,7 @@ This is the place where most of your configurations should be done. Unless it is (spacemacs/set-leader-keys "p C-r" 'euandreh/projectile-reload-known-projects "an" 'notmuch + "ai" 'erc-track-switch-buffer "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage -- cgit v1.2.3 From f2bfe9f84a0a7918a8a3ef92dbb4c018eb30c27a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:30:55 -0300 Subject: sync-mail.sh: Add --fast variant where only EuAndreh is fetched --- bash/aliases.sh | 3 ++- scripts/cron/sync-mail.sh | 21 +++++++++++++++------ 2 files changed, 17 insertions(+), 7 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 80a7f9d..9c99490 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -24,7 +24,8 @@ alias mr="mr -s" alias sbcl="rlwrap sbcl" alias du="ncdu --color dark" alias perl6="rlwrap perl6" -alias m="sync-mail.sh" +alias mm="sync-mail.sh" +alias m="sync-mail.sh --fast" alias a="atom.sh" alias n="nextcloud.sh" alias sb="songbooks" diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index 5e396a7..082bf74 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -5,11 +5,20 @@ cd "$(dirname "${BASH_SOURCE[0]}")" exec &> /dev/stdout echo "Starting: $(date -Is)" -notmuch new -mbsync EuAndreh & -mbsync Nubank & -mbsync Gmail & -wait -notmuch new +FAST_RUN="${1:-}" + +if [[ "${FAST_RUN}" = "--fast" ]]; then + echo 'Doing fast run' + mbsync EuAndreh + notmuch new +else + echo 'Doing normal (slow) run' + notmuch new + mbsync EuAndreh & + mbsync Nubank & + mbsync Gmail & + wait + notmuch new +fi echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 1c9d441dd709edf30b0064df3b526c95cd2d2533 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:31:36 -0300 Subject: aliases.sh: Remove ncdu alias override of du --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 9c99490..65a460e 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -22,7 +22,7 @@ alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" alias watch="watch --color " alias mr="mr -s" alias sbcl="rlwrap sbcl" -alias du="ncdu --color dark" +alias ncdu="ncdu --color dark" alias perl6="rlwrap perl6" alias mm="sync-mail.sh" alias m="sync-mail.sh --fast" -- cgit v1.2.3 From 5ca9723eeaa873cda6d5103c33e5502b5472493c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:31:55 -0300 Subject: Add nautilus tmuxinator template --- tmux/projects/nautilus.yml | 9 +++++++++ 1 file changed, 9 insertions(+) create mode 100644 tmux/projects/nautilus.yml diff --git a/tmux/projects/nautilus.yml b/tmux/projects/nautilus.yml new file mode 100644 index 0000000..1c4c777 --- /dev/null +++ b/tmux/projects/nautilus.yml @@ -0,0 +1,9 @@ +name: nautilus-like + +windows: + - nautilus-like: + root: ~/ + layout: main-vertical + panes: + - misc: + - ranger -- cgit v1.2.3 From b8b2f983482afb3c032f42f26707bc885f209f6b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:32:09 -0300 Subject: xmobar: Remove wired network --- xmonad/xmobar.hs | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index a64219b..667f33b 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -6,7 +6,6 @@ Config { , Run Swap [] 30 , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 , Run DiskU [("/", "/")] [] 600 - , Run Network "wired: ens20u1u2" ["-t", ""] 100 , Run Wireless "wlp59s0" [] 100 , Run Volume "default" "Master" [] 10 , Run Battery [ @@ -21,5 +20,5 @@ Config { 10 , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" ] - , template = " %date% | %default:Master%| %mpris% } { | %ens20u1u2% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " + , template = " %date% | %default:Master%| %mpris% } { | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From c41cda7087c4991681229a1665526e5995c1d519 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:33:05 -0300 Subject: backup-job.sh: Log to stdout also --- scripts/cron/backup-job.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index f37fde6..fdc79ba 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash # set -Eeuo pipefail -# "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.log 2>&1"; LOG_FILE="$(mktemp)" @@ -10,7 +9,8 @@ finish() { } trap finish EXIT -backup.sh &> "${LOG_FILE}" +echo 'Starting backup job...' +~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh cron 2>&1 | tee "${LOG_FILE}" status=$? if [[ $status = 0 ]]; then @@ -29,3 +29,5 @@ mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(ho rm report.txt popd > /dev/null || exit 1 + +echo 'Mail sent!' -- cgit v1.2.3 From 8a472f0edef2fbc50c28441ad81c80cf1c9b2df8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:33:26 -0300 Subject: nextcloud.sh: Lookup user dynamically --- scripts/cron/nextcloud.sh | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/cron/nextcloud.sh b/scripts/cron/nextcloud.sh index d2d2074..9e7ed72 100755 --- a/scripts/cron/nextcloud.sh +++ b/scripts/cron/nextcloud.sh @@ -5,9 +5,15 @@ cd "$(dirname "${BASH_SOURCE[@]}")" exec &> /dev/stdout echo "Starting $(date -Is)" -USER='andreh' +USER="$(cat ~/annex/secret/Nextcloud/user.txt)" PASSWORD="$(cat ~/annex/secret/Nextcloud/password.txt)" URL="$(cat ~/annex/secret/Nextcloud/url.txt)" + +pgrep nextcloud && { + echo 'Nextloud already running. Exitting.' + exit 1 +} + nextcloudcmd -h \ -u "${USER}" \ -p "${PASSWORD}" \ -- cgit v1.2.3 From 056077a58e012e7aacaad03a08ca2fd7c63b66bf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:34:14 -0300 Subject: configuration.nix: Add mpris-proxy as user systemd service --- nixos/configuration.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 039378e..9567bdb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -532,6 +532,17 @@ in { wantedBy = [ "multi-user.target" ]; }; }; + user.services = { + mpris-proxy = { + enable = true; + description = "Mpris proxy, added to support bluetooth media keys"; + serviceConfig = { + After = [ "network.target" "sound.target" ]; + ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; + WantedBy = [ "default.target" ]; + }; + }; + }; }; # This value determines the NixOS release with which your system is to be -- cgit v1.2.3 From 8f6eff9599c00dc2f133cefb2be610cb9ab85e5f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:34:30 -0300 Subject: configuration.nix: Mark zig as broken --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9567bdb..080f788 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -309,7 +309,7 @@ in { heroku ruby pinentry - zig + # zig broken ranger ## Containers and VMs @@ -349,7 +349,7 @@ in { gpodder firefox emacs - tdesktop + tdesktop # telegram-desktop application vlc keepassxc yubioath-desktop -- cgit v1.2.3 From b66a9f3c3569bec0c68fca17d282b4d0ba83a243 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 21:36:12 -0300 Subject: backup.sh: Update to handle missing repositories --- scripts/ad-hoc/backup.sh | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index c6416cc..8703091 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -14,9 +14,6 @@ green() { echo -e "${green}${1}${end}"; } yellow() { echo -e "${yellow}${1}${end}"; } BACKUP_TAG="${1-adhoc}" -[[ -f "${BACKUP_TAG}" ]] || { - yellow "No '\$BACKUP_TAG' provided, falling back to default: 'adhoc'." -} # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null @@ -56,6 +53,10 @@ yellow "Creating backup of notmuch data" notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" green "Done" +yellow "Creating possibly missing directories" +mkdir -p ~/archive/ ~/mbsync/ ~/.elfeed/ +green "Done" + yellow "Creating new borg archive entry" borg create \ --exclude ~/mbsync/.notmuch/ \ @@ -114,21 +115,29 @@ mr -s gitlab if [ ! -d ~/UTCLOUD/ ]; then red "${HOME}/UTCLOUD/ not attached, not storing mr repositories there." else + pushd ~/dev/ || exit 1 mr -s hd + popd || exit 1 fi popd || exit 1 +NEXTCLOUD_SCRIPT="../cron/nextcloud.sh" + yellow "Syncing Nextcloud" -./nextcloud.sh +"$NEXTCLOUD_SCRIPT" green "Done" -yellow "Syncing annex" +yellow "Syncing Git Annex" pushd ~/annex/ || exit 1 git annex sync popd || exit 1 green "Done" +yellow "Syncing Nextcloud after Git Annex" +"$NEXTCLOUD_SCRIPT" +green "Done" + # # Box backup -- cgit v1.2.3 From 5cbbbabb8f8eff5b640243520fce95a2d8d3d09c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Aug 2020 23:15:11 -0300 Subject: configuration.nix: Add transmission-gtk package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 080f788..8704ef3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -357,6 +357,7 @@ in { libreoffice # patchwork-classic broken chromium # required for ArchiveBox + transmission-gtk ## Cryptocururencies -- cgit v1.2.3 From 265d63b9cedce508f2d79f9c4ba7a1740f93ec8d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Aug 2020 07:59:17 -0300 Subject: spacemacs.el: Add "SPC a f" as a shortcut to elfeed That's actually the previous shortcut, I'm just sticking to it. --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index a304384..ca5b040 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -729,6 +729,7 @@ This is the place where most of your configurations should be done. Unless it is "p C-r" 'euandreh/projectile-reload-known-projects "an" 'notmuch "ai" 'erc-track-switch-buffer + "af" 'elfeed "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage -- cgit v1.2.3 From 680859e159885e49b383f51ad137671c9c2777e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Aug 2020 08:50:28 -0300 Subject: backup.sh: Add ~/gPodder/ to backed up directories list --- scripts/ad-hoc/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 8703091..9eaaf97 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -71,6 +71,7 @@ borg create \ ~/.elfeed/ \ ~/.mozilla/ \ ~/.config/quodlibet/ \ + ~/gPodder/ \ ~/tmp/backup/ # add folders to be backed up here green "Done" -- cgit v1.2.3 From 8e0b781abc2b5a47943a9730d5f7d7a5af55a463 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 6 Aug 2020 08:50:46 -0300 Subject: xmonad.hs: Move with playerctl by 5 seconds instead of 10 --- xmonad/xmonad.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 6f19dd3..7f313b8 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -37,11 +37,11 @@ myKeyPBindings = , ("", spawn "amixer -q sset Master 5%+ unmute") -- Playback - , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10-") + , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5-") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) previous") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) play-pause") , ("S-", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/rotate-mpris-player.sh") - , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 10+") + , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") -- Brightness -- cgit v1.2.3 From fb708c6c59b2f76bd09cafabc98965e71052c33d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Aug 2020 09:18:56 -0300 Subject: configuration.nix: Add Dino and DeltaChat --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 8704ef3..e9fc80b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -350,6 +350,8 @@ in { firefox emacs tdesktop # telegram-desktop application + deltachat-electron + dino vlc keepassxc yubioath-desktop -- cgit v1.2.3 From 3a05d94b06605446c1d73fd4ff21f1f4b524da57 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Aug 2020 15:38:04 -0300 Subject: Add working guix.scm AS IS --- guix.scm | 99 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 99 insertions(+) create mode 100644 guix.scm diff --git a/guix.scm b/guix.scm new file mode 100644 index 0000000..62cb5af --- /dev/null +++ b/guix.scm @@ -0,0 +1,99 @@ +;; This is an operating system configuration generated +;; by the graphical installer. + +(use-modules (gnu)) +(use-service-modules desktop networking ssh xorg nix) + +(operating-system + (locale "en_US.utf8") + (timezone "America/Sao_Paulo") + (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape"))) + (host-name "velhinho-guix-system") + (users (cons* (user-account + (name "andreh") + (comment "andreh") + (group "users") + (home-directory "/home/andreh") + (supplementary-groups + '("wheel" "netdev" "audio" "video"))) + %base-user-accounts)) + (packages + (append + (map specification->package + '("nss-certs" + "autojump" + "git" + "myrepos" + "borg" + "bash-completion" + "vlc" + "youtube-dl" + "sox" + "jq" + "calibre" + "notmuch" + "isync" + "nix" ; for firefox + "xset" + "bluez" + "playerctl" + "xmessage" + "alsa-utils" + ;; "flatpak" ; for firefox + "icecat" ; not firefox FIXME + "git-remote-gcrypt" + "git-crypt" + "the-silver-searcher" + "ranger" + "seahorse" + "nautilus" + "git-annex" + "emacs" + "gettext" + "openssh" + "gnupg" + "vim" + "tmux" + "direnv" + "pinentry" ; relies on GTK + "pinentry-tty" + "keepassxc" + "recutils" + "owncloud-client" ; FIXME + "xterm" + "xmonad" "ghc" "ghc-xmonad-contrib" "gcc-toolchain" "glibc" + "htop" + "xmobar" + "dmenu")) + %base-packages)) + (services + (append + (list ;; (service xfce-desktop-service-type) + (service nix-service-type) + (service gnome-desktop-service-type) + (set-xorg-configuration + (xorg-configuration + (keyboard-layout keyboard-layout)))) + %desktop-services)) + (bootloader + (bootloader-configuration + (bootloader grub-efi-bootloader) + (target "/boot/efi") + (keyboard-layout keyboard-layout))) + (mapped-devices + (list (mapped-device + (source + (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) + (target "cryptroot") + (type luks-device-mapping)))) + (file-systems + (cons* (file-system + (mount-point "/") + (device "/dev/mapper/cryptroot") + (type "btrfs") + (dependencies mapped-devices)) + (file-system + (mount-point "/boot/efi") + (device (uuid "1B26-9F4E" 'fat32)) + (type "vfat")) + %base-file-systems))) -- cgit v1.2.3 From df6ac19000df0841d10c799567246e70896604b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 7 Aug 2020 18:18:43 -0300 Subject: Remove 'thefuck' program --- bash/agents.sh | 2 -- nixos/configuration.nix | 1 - 2 files changed, 3 deletions(-) diff --git a/bash/agents.sh b/bash/agents.sh index 9a26567..e23d6e5 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -2,8 +2,6 @@ # shellcheck disable=SC2015 # shellcheck disable=SC1090 -eval "$(thefuck --alias f)" - GPG_TTY=$(tty) export GPG_TTY diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e9fc80b..9f91884 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -131,7 +131,6 @@ in { youtube-dl wget vim - thefuck tmux tmuxinator sox # =play= -- cgit v1.2.3 From 69c914e231c84cd67873c4891c12f5245bb3843b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Aug 2020 07:43:00 -0300 Subject: fake-symlinks.sh: mkdir -p native-messaging-hosts --- bash/fake-symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 9dbbe36..c1fba30 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -37,6 +37,7 @@ for template in "${DOTFILES}"/tmux/projects/*; do cp "${template}" "${HOME}/.tmuxinator/$(basename "$template")" done +mkdir -p ~/.mozilla/native-messaging-hosts/ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ # DHALL_BUILD_REPOS=(website) -- cgit v1.2.3 From 53809ec81d01678d35efc2213268c6fb13ae20bd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Aug 2020 07:43:28 -0300 Subject: symlinks.sh: Add symlink to gpg-agent.conf --- bash/symlinks.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 57fe89f..bd0ddec 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -24,8 +24,9 @@ isLinux && { } mkdir -p ~/.gnupg -ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf -ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig +ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf +ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf +ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER -- cgit v1.2.3 From 66766686637110800f557bd5bdcf646e7f2bb072 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Aug 2020 07:52:43 -0300 Subject: guix.scm: Clean up packages, remove Nix and extra services --- guix.scm | 158 +++++++++++++++++++++++++++++++++------------------------------ 1 file changed, 84 insertions(+), 74 deletions(-) diff --git a/guix.scm b/guix.scm index 62cb5af..9cad013 100644 --- a/guix.scm +++ b/guix.scm @@ -19,81 +19,91 @@ %base-user-accounts)) (packages (append - (map specification->package - '("nss-certs" - "autojump" - "git" - "myrepos" - "borg" - "bash-completion" - "vlc" - "youtube-dl" - "sox" - "jq" - "calibre" - "notmuch" - "isync" - "nix" ; for firefox - "xset" - "bluez" - "playerctl" - "xmessage" - "alsa-utils" - ;; "flatpak" ; for firefox - "icecat" ; not firefox FIXME - "git-remote-gcrypt" - "git-crypt" - "the-silver-searcher" - "ranger" - "seahorse" - "nautilus" - "git-annex" - "emacs" - "gettext" - "openssh" - "gnupg" - "vim" - "tmux" - "direnv" - "pinentry" ; relies on GTK - "pinentry-tty" - "keepassxc" - "recutils" - "owncloud-client" ; FIXME - "xterm" - "xmonad" "ghc" "ghc-xmonad-contrib" "gcc-toolchain" "glibc" - "htop" - "xmobar" - "dmenu")) - %base-packages)) + (map specification->package + '("nss-certs" ;; suggested by Guix + "help2man" ;; used in Guix development + "strace" + + "wget" + "xclip" + "autojump" + "git" + ;; "git:send-email" FIXME + "rlwrap" + "myrepos" + "borg" + "bash-completion" + "vlc" + "youtube-dl" + "sox" + "jq" + "calibre" + "notmuch" + "isync" + "xset" + "bluez" + "playerctl" + "xmessage" + "alsa-utils" + "icecat" ; not firefox FIXME + "git-remote-gcrypt" + "git-crypt" + "the-silver-searcher" + "fd" + "ranger" + "seahorse" + "nautilus" + "git-annex" + "emacs" + "gettext" + "openssh" + "gnupg" + "nvi" + "tmux" + "direnv" + "pinentry-gnome3" + "pinentry" + "keepassxc" + "recutils" + "owncloud-client" ; FIXME: nextcloud + "xterm" + "htop" + + ;; xmonad + "xmonad" + "ghc" + "ghc-xmonad-contrib" + "gcc-toolchain" + "glibc" + "xmobar" + "dmenu")) + %base-packages)) (services - (append - (list ;; (service xfce-desktop-service-type) - (service nix-service-type) - (service gnome-desktop-service-type) - (set-xorg-configuration - (xorg-configuration - (keyboard-layout keyboard-layout)))) - %desktop-services)) + (append + (list (service gnome-desktop-service-type) + (set-xorg-configuration + (xorg-configuration + (keyboard-layout keyboard-layout)))) + %desktop-services)) (bootloader - (bootloader-configuration - (bootloader grub-efi-bootloader) - (target "/boot/efi") - (keyboard-layout keyboard-layout))) + (bootloader-configuration + (bootloader grub-efi-bootloader) + (target "/boot/efi") + (keyboard-layout keyboard-layout))) (mapped-devices - (list (mapped-device - (source - (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) - (target "cryptroot") - (type luks-device-mapping)))) + (list (mapped-device + (source + (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) + (target "cryptroot") + (type luks-device-mapping)))) (file-systems - (cons* (file-system - (mount-point "/") - (device "/dev/mapper/cryptroot") - (type "btrfs") - (dependencies mapped-devices)) - (file-system - (mount-point "/boot/efi") - (device (uuid "1B26-9F4E" 'fat32)) - (type "vfat")) - %base-file-systems))) + (cons* (file-system + (mount-point "/") + (device "/dev/mapper/cryptroot") + (type "btrfs") + (dependencies mapped-devices)) + (file-system + (mount-point "/boot/efi") + (device (uuid "1B26-9F4E" 'fat32)) + (type "vfat")) + %base-file-systems))) -- cgit v1.2.3 From 203e95a6ef77057173ef30233bc471643a3d8ebe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Aug 2020 11:05:19 -0300 Subject: guix.scm: Use specification->package+output for git:send-email --- guix.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guix.scm b/guix.scm index 9cad013..4eccfef 100644 --- a/guix.scm +++ b/guix.scm @@ -19,7 +19,7 @@ %base-user-accounts)) (packages (append - (map specification->package + (map specification->package+output '("nss-certs" ;; suggested by Guix "help2man" ;; used in Guix development "strace" @@ -28,7 +28,7 @@ "xclip" "autojump" "git" - ;; "git:send-email" FIXME + "git:send-email" "rlwrap" "myrepos" "borg" -- cgit v1.2.3 From f502e2f95795729f801ad381cc70a92e7161c001 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Aug 2020 11:48:17 -0300 Subject: Add scripts/ad-hoc/copy-public-key.sh --- scripts/ad-hoc/copy-public-key.sh | 24 ++++++++++++++++++++++++ 1 file changed, 24 insertions(+) create mode 100755 scripts/ad-hoc/copy-public-key.sh diff --git a/scripts/ad-hoc/copy-public-key.sh b/scripts/ad-hoc/copy-public-key.sh new file mode 100755 index 0000000..a94fbd3 --- /dev/null +++ b/scripts/ad-hoc/copy-public-key.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' +FILE="$(mktemp)" + +gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" + +# Update keyserver +# gpg --send-keys "${FINGERPRINT}" + +# Add to website +cp "${FILE}" ~/dev/libre/website/public-key.txt + +# Update in euandreh-guix-channel +pushd ~/dev/libre/euandreh-guix-channel/ +git checkout keyring +cp "${FILE}" euandreh.key +popd + +# Update in github: can't be done + +# Clean up +rm "${FILE}" -- cgit v1.2.3 From b8ea57f3e3295c72e0c69bd73bf1628bb1fa7ad3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 8 Aug 2020 17:47:27 -0300 Subject: guix.scm: Add function to list entries when selecting output --- guix.scm | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/guix.scm b/guix.scm index 4eccfef..f88e28a 100644 --- a/guix.scm +++ b/guix.scm @@ -1,7 +1,8 @@ ;; This is an operating system configuration generated ;; by the graphical installer. -(use-modules (gnu)) +(use-modules (gnu) + (srfi srfi-1)) (use-service-modules desktop networking ssh xorg nix) (operating-system @@ -19,7 +20,12 @@ %base-user-accounts)) (packages (append - (map specification->package+output + (map (lambda (spec) + (if (not (string-contains spec ":")) + (specification->package spec) + (let ((spec-pair (string-split spec #\:))) + (list (specification->package (first spec-pair)) + (second spec-pair))))) '("nss-certs" ;; suggested by Guix "help2man" ;; used in Guix development "strace" -- cgit v1.2.3 From 715a4d934564507b88a5d8dcf208565cf9222a60 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Aug 2020 11:11:01 -0300 Subject: Add GPLv3 LICENSE file --- LICENSE | 674 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 674 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..f288702 --- /dev/null +++ b/LICENSE @@ -0,0 +1,674 @@ + GNU GENERAL PUBLIC LICENSE + Version 3, 29 June 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU General Public License is a free, copyleft license for +software and other kinds of works. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +the GNU General Public License is intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. We, the Free Software Foundation, use the +GNU General Public License for most of our software; it applies also to +any other work released this way by its authors. You can apply it to +your programs, too. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + To protect your rights, we need to prevent others from denying you +these rights or asking you to surrender the rights. Therefore, you have +certain responsibilities if you distribute copies of the software, or if +you modify it: responsibilities to respect the freedom of others. + + For example, if you distribute copies of such a program, whether +gratis or for a fee, you must pass on to the recipients the same +freedoms that you received. You must make sure that they, too, receive +or can get the source code. And you must show them these terms so they +know their rights. + + Developers that use the GNU GPL protect your rights with two steps: +(1) assert copyright on the software, and (2) offer you this License +giving you legal permission to copy, distribute and/or modify it. + + For the developers' and authors' protection, the GPL clearly explains +that there is no warranty for this free software. For both users' and +authors' sake, the GPL requires that modified versions be marked as +changed, so that their problems will not be attributed erroneously to +authors of previous versions. + + Some devices are designed to deny users access to install or run +modified versions of the software inside them, although the manufacturer +can do so. This is fundamentally incompatible with the aim of +protecting users' freedom to change the software. The systematic +pattern of such abuse occurs in the area of products for individuals to +use, which is precisely where it is most unacceptable. Therefore, we +have designed this version of the GPL to prohibit the practice for those +products. If such problems arise substantially in other domains, we +stand ready to extend this provision to those domains in future versions +of the GPL, as needed to protect the freedom of users. + + Finally, every program is threatened constantly by software patents. +States should not allow patents to restrict development and use of +software on general-purpose computers, but in those that do, we wish to +avoid the special danger that patents applied to a free program could +make it effectively proprietary. To prevent this, the GPL assures that +patents cannot be used to render the program non-free. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Use with the GNU Affero General Public License. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU Affero General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the special requirements of the GNU Affero General Public License, +section 13, concerning interaction through a network will apply to the +combination as such. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU General Public License from time to time. Such new versions will +be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If the program does terminal interaction, make it output a short +notice like this when it starts in an interactive mode: + + Copyright (C) + This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. + This is free software, and you are welcome to redistribute it + under certain conditions; type `show c' for details. + +The hypothetical commands `show w' and `show c' should show the appropriate +parts of the General Public License. Of course, your program's commands +might be different; for a GUI interface, you would use an "about box". + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU GPL, see +. + + The GNU General Public License does not permit incorporating your program +into proprietary programs. If your program is a subroutine library, you +may consider it more useful to permit linking proprietary applications with +the library. If this is what you want to do, use the GNU Lesser General +Public License instead of this License. But first, please read +. -- cgit v1.2.3 From d26a9807d626e82bdc5c3be8f88ed3dfb5516ae4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Aug 2020 12:44:04 -0300 Subject: backup.sh: Update backup paths --- scripts/ad-hoc/backup.sh | 22 +++++++++++++--------- 1 file changed, 13 insertions(+), 9 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 9eaaf97..b88f25b 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -39,7 +39,7 @@ if [ ! -d ~/borgbackup/ ]; then # The initial borg repo was created with: # $ borg init --append-only --encryption=keyfile ~/borgbackup # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/borgbackup/ ~/borgbackup + rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/desktop-borg/ ~/borgbackup fi pushd ~/dev/libre/ || exit 1 @@ -85,18 +85,18 @@ popd green "Done." if [ ! -d ~/UTCLOUD/ ]; then - red "${HOME}/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and ${R}:vps-borgbackup/ there." + red "${HOME}/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and $R:vps-borg/ there." else yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" - rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/borgbackup/ + rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/desktop-borg/ green "Done" - yellow "Syncing ${R}:vps-borgbackup/ ~/UTCLOUD/backupgs/vps-borgbackup/" - rsync --verbose --progress --stats --update --recursive "$R:vps-borgbackup/" ~/UTCLOUD/backups/vps-borgbackup/ + yellow "Syncing $R:vps-borg/ ~/UTCLOUD/backupgs/vps-borg/" + rsync --verbose --progress --stats --update --recursive "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ green "Done" fi -yellow "Syncing ~/borgbackup to $R:borgbackup/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:borgbackup/" +yellow "Syncing ~/borgbackup to $R:desktop-borg/" +rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:desktop-borg/" green "Done" @@ -147,8 +147,12 @@ green "Done" if [ ! -d ~/UTCLOUD/ ]; then red "${HOME}/UTCLOUD/ not attached, not sync box backupgs." else - rsync -avz euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-backup/ - rsync -avz ~/UTCLOUD/backups/box-backup/ "$R:box-backup/" + # Mail in a Box backup, secret key stored separately in password manager + rsync -avz euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ + rsync -avz ~/UTCLOUD/backups/box-duplicity/ "$R:box-duplicity/" + + # soverign backup copy + rsync -avz "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ fi -- cgit v1.2.3 From bd8d96cc328ac393cde233d755b71a866d550983 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Aug 2020 13:06:38 -0300 Subject: spacemacs.el: Add M-´ ledger shortcut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index ca5b040..3caad67 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -594,6 +594,7 @@ dump." (defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) ("M-p" . interleave-mode) + ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-]" . (lambda () (interactive) (find-file "~/Nextcloud/Notes/TODOs.txt"))) -- cgit v1.2.3 From c15adafe1566e25b0e673b67af8aca466340d919 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Aug 2020 14:49:45 -0300 Subject: spacemacs.el: Load Guix copyright.el file --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 3caad67..0d54976 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -605,7 +605,8 @@ dump." (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" "~/annex/bin/misc/erc.el" - "~/.quicklisp/slime-helper.el")) + "~/.quicklisp/slime-helper.el" + "~/dev/guix/guix/etc/copyright.el")) (defmacro measure-time (&rest body) "Measure and return the running time of the code block." -- cgit v1.2.3 From c3b1011d3842ff5214118a56f4d542bb3489e709 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Aug 2020 14:59:37 -0300 Subject: guix.scm: Remove FIXME markers Moved to a proper TODO list. --- guix.scm | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/guix.scm b/guix.scm index f88e28a..79b70d8 100644 --- a/guix.scm +++ b/guix.scm @@ -51,7 +51,7 @@ "playerctl" "xmessage" "alsa-utils" - "icecat" ; not firefox FIXME + "icecat" "git-remote-gcrypt" "git-crypt" "the-silver-searcher" @@ -71,7 +71,7 @@ "pinentry" "keepassxc" "recutils" - "owncloud-client" ; FIXME: nextcloud + "owncloud-client" "xterm" "htop" -- cgit v1.2.3 From 1be7d75d5f6a2f85f26abdc15e41423361e8f96a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 9 Aug 2020 15:56:53 -0300 Subject: spacemacs.el: Fix missing evil C-i --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 0d54976..5627b04 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -592,6 +592,7 @@ dump." cider-clojure-interaction-mode)) (defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) + ("C-i" . evil-jump-forward) ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) ("M-p" . interleave-mode) ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) -- cgit v1.2.3 From 2e8ca8669f2a4d6ec22b154e4ad122ffc6583cd8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Aug 2020 11:03:23 -0300 Subject: spacemacs.el: Remove magit warning on rewriting "published" commits --- spacemacs.el | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 5627b04..b2f6d43 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -807,7 +807,6 @@ This is the place where most of your configurations should be done. Unless it is git-link-use-commit t vc-follow-symlinks t default-truncate-lines nil - magit-diff-refine-hunk t ispell-program-name "aspell" ;; Indentation @@ -888,7 +887,10 @@ This is the place where most of your configurations should be done. Unless it is browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url elfeed-search-filter "@2020-01-01--0-day-ago +unread -news -high_volume " - auth-source-debug t) + auth-source-debug t + + magit-diff-refine-hunk t + magit-published-branches '()) (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From fa4aec4936d3d34457e8a4c5bb875b2d6d1b7b31 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Aug 2020 11:03:48 -0300 Subject: backup.sh: Remove "$HOME/tmp/backup/" after borg --- scripts/ad-hoc/backup.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index b88f25b..4477faf 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -74,8 +74,12 @@ borg create \ ~/gPodder/ \ ~/tmp/backup/ # add folders to be backed up here + +trash "$HOME/tmp/backup/" + green "Done" + yellow "Committing borg config changes..." pushd ~/dev/libre/borg/ git add . -- cgit v1.2.3 From 66ddbb0b2e19066b10a5b10907e0bf0993adcdf4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Aug 2020 11:04:12 -0300 Subject: configuration.nix: Use ~/archive/logs/cron/ instead of ~/tmp/ for logrotate --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9f91884..f79b0e5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -412,7 +412,7 @@ in { /tmp/*.euandreh.log { rotate 5 daily - olddir /home/andreh/tmp/logs/ + olddir /home/andreh/archive/logs/cron/ createolddir 744 andreh users su andreh users } -- cgit v1.2.3 From a9ac5e9587c591d5cabe78ae040bba2be913e0a9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Aug 2020 11:04:33 -0300 Subject: spacemacs.el: Update generated config --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index b2f6d43..832e6a9 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -930,7 +930,7 @@ This function is called at the very end of Spacemacs initialization." ;; If there is more than one, they won't work right. '(package-selected-packages (quote - (phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + (tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) '(safe-local-variable-values (quote ((eval progn -- cgit v1.2.3 From 42bb947838b50ae6de64e9d345b906a68132a22d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Aug 2020 11:15:13 -0300 Subject: spacemacs.el: Use grep for search in favour of ag --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 832e6a9..9936717 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -459,7 +459,7 @@ It should only modify the values of Spacemacs settings." ;; List of search tool executable names. Spacemacs uses the first installed ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'. ;; (default '("rg" "ag" "pt" "ack" "grep")) - dotspacemacs-search-tools '("rg" "ag" "pt" "ack" "grep") + dotspacemacs-search-tools '("grep" "ag") ;; Format specification for setting the frame title. ;; %a - the `abbreviated-file-name', or `buffer-name' -- cgit v1.2.3 From c70ee07d63ddc491cbfc26335192ba10afb64075 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 10 Aug 2020 20:29:50 -0300 Subject: gen-password: Don't return error value --- bash/util.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/util.sh b/bash/util.sh index 95c2ec8..a891739 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -39,5 +39,5 @@ urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } gen-password() { length="${1-99}" - tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 + tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: } -- cgit v1.2.3 From 358f069536b1c8e0180d7ad9ef238e5404d6a2a6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 11 Aug 2020 01:44:51 -0300 Subject: scripts/ad-hoc/b: alias to bt.sh --- scripts/ad-hoc/b | 1 + 1 file changed, 1 insertion(+) create mode 120000 scripts/ad-hoc/b diff --git a/scripts/ad-hoc/b b/scripts/ad-hoc/b new file mode 120000 index 0000000..08cf0b0 --- /dev/null +++ b/scripts/ad-hoc/b @@ -0,0 +1 @@ +bt.sh \ No newline at end of file -- cgit v1.2.3 From e5a8331bfbb76680d0b36ac9a63b00d14847f686 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Aug 2020 16:00:58 -0300 Subject: spacemacs.el: Add new dotspacemacs-* variables with their default value --- spacemacs.el | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 9936717..57d96c8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -139,7 +139,16 @@ This function should only modify configuration layer settings." ;; installs only the used packages but won't delete unused ones. `all' ;; installs *all* packages supported by Spacemacs and never uninstalls them. ;; (default is `used-only') - dotspacemacs-install-packages 'used-only)) + dotspacemacs-install-packages 'used-only + + ;; If non-nil activate `snoopy-mode' which shifts your number row + ;; to match the set of signs given in `dotspacemacs-snoopy-keyrow' + ;; in programming modes (insert-mode only). (default nil) + dotspacemacs-use-snoopy-mode nil + + ;; Text of shifted values from your + ;; keyboard's number row. (default '!@#$%^&*()') + dotspacemacs-snoopy-keyrow "!@#$%^&*()")) (defun dotspacemacs/init () "Initialization: -- cgit v1.2.3 From 92cf8c07fd4c2efdc468a6d2ef828b4f3775b4d1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 12 Aug 2020 16:01:44 -0300 Subject: Fix ag (silver searcher) usage *ALWAYS* look into hidden files. As the default behaviour should have been from the very beginning. Add a bash alias to enforce it on the command line, and customize the help-ag-base-command to enforce it inside Emacs. --- bash/aliases.sh | 1 + spacemacs.el | 6 ++++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 65a460e..2284ea5 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -63,3 +63,4 @@ alias rr="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests alias r="source ~/.bashrc" alias mail='mail -aFrom:eu@euandre.org' +alias ag="ag --hidden" diff --git a/spacemacs.el b/spacemacs.el index 57d96c8..a8d2a0f 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -468,7 +468,7 @@ It should only modify the values of Spacemacs settings." ;; List of search tool executable names. Spacemacs uses the first installed ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'. ;; (default '("rg" "ag" "pt" "ack" "grep")) - dotspacemacs-search-tools '("grep" "ag") + dotspacemacs-search-tools '("ag" "grep") ;; Format specification for setting the frame title. ;; %a - the `abbreviated-file-name', or `buffer-name' @@ -899,7 +899,9 @@ This is the place where most of your configurations should be done. Unless it is auth-source-debug t magit-diff-refine-hunk t - magit-published-branches '()) + magit-published-branches '() + + helm-ag-base-command "ag --nocolor --nogroup --hidden") (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From 22ad90386c6fbb19b703daf649870008f5c3ff9c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Aug 2020 12:44:16 -0300 Subject: Remove elfeed --- nixos/common.nix | 4 ---- nixos/usurpador.nix | 1 - scripts/ad-hoc/backup.sh | 3 +-- scripts/cron/elfeed.sh | 14 -------------- spacemacs.el | 14 -------------- 5 files changed, 1 insertion(+), 35 deletions(-) delete mode 100755 scripts/cron/elfeed.sh diff --git a/nixos/common.nix b/nixos/common.nix index 1f1ea0b..aff4cc6 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -25,10 +25,6 @@ repoUpdate = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.euandreh.log 2>&1"; - # Fetch elfeed feeds every 6 hours (4 times a day) - elfeed = - "0 */6 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/elfeed.sh >> /tmp/cron-dbg.elfeed.euandreh.log 2>&1"; - # Run ArchiveBox data once every day at 12h archivebox = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.euandreh.log 2>&1"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index e62c602..4425492 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -19,7 +19,6 @@ in { common.cron.guixPull common.cron.repoUpdate common.cron.fetchMail - common.cron.elfeed common.cron.deliverMail common.cron.nextcloud common.cron.borg diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 4477faf..9906a04 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -54,7 +54,7 @@ notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" green "Done" yellow "Creating possibly missing directories" -mkdir -p ~/archive/ ~/mbsync/ ~/.elfeed/ +mkdir -p ~/archive/ ~/mbsync/ green "Done" yellow "Creating new borg archive entry" @@ -68,7 +68,6 @@ borg create \ ~/Nextcloud/ \ ~/mbsync/ \ ~/archive/ \ - ~/.elfeed/ \ ~/.mozilla/ \ ~/.config/quodlibet/ \ ~/gPodder/ \ diff --git a/scripts/cron/elfeed.sh b/scripts/cron/elfeed.sh deleted file mode 100755 index ea509ff..0000000 --- a/scripts/cron/elfeed.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -timeout 120 \ - emacs \ - -batch \ - -l ~/.emacs.d/init.el \ - --eval "(run-hooks 'emacs-startup-hook)" \ - --eval '(euandreh/elfeed-batch-update)' - -echo "Finishing: $(date -Is)" diff --git a/spacemacs.el b/spacemacs.el index a8d2a0f..0063cd0 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -54,8 +54,6 @@ This function should only modify configuration layer settings." common-lisp csv docker - (elfeed :variables - rmh-elfeed-org-files '("~/.emacs.d/private/elfeed.org")) elixir erc elm @@ -708,17 +706,6 @@ through `notmuch-message-attach-regex'." (or (y-or-n-p "Email without subject. Really send?") (error "No subject found, aborting")))))) -(defun euandreh/elfeed-batch-update () - (message "Starting (elfeed-update).") - (elfeed-org) - (elfeed) - (elfeed-update) - (while (> (elfeed-queue-count-total) 0) - (print (elfeed-queue-count-total)) - (sleep-for 1) - (accept-process-output)) - (message "Done.")) - (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. @@ -741,7 +728,6 @@ This is the place where most of your configurations should be done. Unless it is "p C-r" 'euandreh/projectile-reload-known-projects "an" 'notmuch "ai" 'erc-track-switch-buffer - "af" 'elfeed "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage -- cgit v1.2.3 From efdf958abd58a3dec45d08f874fbc244bcaceb57 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 13 Aug 2020 19:21:31 -0300 Subject: spacemacs.el: Add shortcut for Work.org file --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 0063cd0..8c181c8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -601,6 +601,7 @@ dump." (defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) ("C-i" . evil-jump-forward) ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) + ("M-n" . (lambda () (interactive) (find-file "~/annex/txt/Work.org"))) ("M-p" . interleave-mode) ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) -- cgit v1.2.3 From 9deeb610dd2258ecfbab1b23a68afcd3a6dfa8c6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 14 Aug 2020 08:54:42 -0300 Subject: Add description file --- description | 1 + 1 file changed, 1 insertion(+) create mode 100644 description diff --git a/description b/description new file mode 100644 index 0000000..bc1f7be --- /dev/null +++ b/description @@ -0,0 +1 @@ +Personal OS configuration files. \ No newline at end of file -- cgit v1.2.3 From 685db47ba594d35938d2eaa523a501fb0766db0e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 15 Aug 2020 22:27:10 -0300 Subject: Add youtube-dl to gpodder to allow it to manage YouTube playlists --- nixos/configuration.nix | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f79b0e5..a61b0e0 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -97,6 +97,10 @@ in { }); fallback-quodlibet = pkgs-19-09.quodlibet-full; active-quodlibet = untested-quodlibet; + + gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { + propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [ pkgs.python3Packages.youtube-dl]; + }); in with pkgs; [ pkgs-19-09.swift @@ -345,7 +349,7 @@ in { inkscape calibre cozy - gpodder + gpodder-with-youtube-dl firefox emacs tdesktop # telegram-desktop application -- cgit v1.2.3 From 7dd8629802c5bd166de616a005f856a7e7625aae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 19 Aug 2020 08:19:59 -0300 Subject: Setup nix-search-update.sh cronjob --- nixos/common.nix | 4 ++++ nixos/usurpador.nix | 1 + scripts/cron/nix-search-update.sh | 9 +++++++++ 3 files changed, 14 insertions(+) create mode 100755 scripts/cron/nix-search-update.sh diff --git a/nixos/common.nix b/nixos/common.nix index aff4cc6..dc34456 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -17,6 +17,10 @@ fetchMail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.euandreh.log 2>&1"; + # Update 'nix search' cache once a day at 12h + nixSearchUpdate = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nix-search-update.sh >> /tmp/cron-dbg.nix-search-update.euandreh.log 2>&1"; + # Update Guix once a day at 12h guixPull = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.euandreh.log 2>&1"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 4425492..a9b00da 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -16,6 +16,7 @@ in { zoom-us ]; cronJobs = [ + common.cron.nixSearchUpdate common.cron.guixPull common.cron.repoUpdate common.cron.fetchMail diff --git a/scripts/cron/nix-search-update.sh b/scripts/cron/nix-search-update.sh new file mode 100755 index 0000000..01367fc --- /dev/null +++ b/scripts/cron/nix-search-update.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +nix search -u lilypond + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 5fef1a006b2a6ecd4ccc3f9d12d4030489603fe8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 20 Aug 2020 08:54:41 -0300 Subject: Be less strict with pastebin.sh: Don't require 'mr isclean' And reset the index before adding and commiting. --- scripts/ad-hoc/pastebin.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index af7452f..69884d5 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -38,8 +38,6 @@ OUT="_pastebins/${SLUG_TITLE}.md" pushd ~/dev/libre/website > /dev/null -mr isclean - [[ -f "${OUT}" ]] && { red "Pastebin named ${OUT} already exists." exit 1 @@ -58,6 +56,7 @@ FIXME \`\`\` EOF +git reset . git add "${OUT}" git commit -m "$0: Auto-add ${OUT}" mr publish -- cgit v1.2.3 From 137d4c7ad70aa8ea8bd6787dfab752cef0d6b3ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Aug 2020 10:52:24 -0300 Subject: Use notmuch dump from ~/archive/notmuch-archive.txt --- scripts/ad-hoc/backup.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 9906a04..d4f8cd9 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -50,7 +50,7 @@ rm -rf "$HOME/tmp/backup/" mkdir -p "$HOME/tmp/backup/" yellow "Creating backup of notmuch data" -notmuch dump --output="$HOME/tmp/backup/notmuch-dump.txt" +notmuch dump --output="$HOME/archive/notmuch-archive.txt" green "Done" yellow "Creating possibly missing directories" @@ -70,8 +70,7 @@ borg create \ ~/archive/ \ ~/.mozilla/ \ ~/.config/quodlibet/ \ - ~/gPodder/ \ - ~/tmp/backup/ + ~/gPodder/ # add folders to be backed up here trash "$HOME/tmp/backup/" -- cgit v1.2.3 From a2d4f39c61206a889fc7bbf31e25ce7652134e7d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Aug 2020 11:00:55 -0300 Subject: configuration.nix: Add gotop and rsync packages --- nixos/configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a61b0e0..b839b24 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -143,6 +143,7 @@ in { gnugrep ack htop + gotop rlwrap awscli jq @@ -186,6 +187,7 @@ in { file gitlab-runner sshpass + rsync zathura # for viewing Emacs PDF files # nvi broken cacert -- cgit v1.2.3 From ff4da6ed0f6b36c832a02d6c5f54cf5c9918ac06 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Aug 2020 11:02:05 -0300 Subject: spacemacs.el: Add extra dotspacemacs variables --- spacemacs.el | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 8c181c8..4131914 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -498,6 +498,20 @@ It should only modify the values of Spacemacs settings." ;; (default nil) dotspacemacs-whitespace-cleanup 'trailing + ;; If non nil activate `clean-aindent-mode' which tries to correct + ;; virtual indentation of simple modes. This can interfer with mode specific + ;; indent handling like has been reported for `go-mode'. + ;; If it does deactivate it here. + ;; (default t) + dotspacemacs-use-clean-aindent-mode t + + ;; If non-nil shift your number row to match the entered keyboard layout + ;; (only in insert mode). Currently the keyboard layouts + ;; (qwerty-us qwertz-de) are supported. + ;; New layouts can be added in `spacemacs-editing' layer. + ;; (default nil) + dotspacemacs-swap-number-row nil + ;; Either nil or a number of seconds. If non-nil zone out after the specified ;; number of seconds. (default nil) dotspacemacs-zone-out-when-idle nil @@ -505,7 +519,11 @@ It should only modify the values of Spacemacs settings." ;; Run `spacemacs/prettify-org-buffer' when ;; visiting README.org files of Spacemacs. ;; (default nil) - dotspacemacs-pretty-docs nil)) + dotspacemacs-pretty-docs nil + + ;; If nil the home buffer shows the full path of agenda items + ;; and todos. If non nil only the file name is shown. + dotspacemacs-home-shorten-agenda-source nil)) (defun dotspacemacs/user-env () "Environment variables setup. -- cgit v1.2.3 From f00382de20b41e0fb926af11625d73e4fc157340 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Aug 2020 11:02:16 -0300 Subject: spacemacs.el: Re-add perl6 layer (not called raku layer yet) --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 4131914..4115a00 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -74,6 +74,7 @@ This function should only modify configuration layer settings." notmuch pdf perl5 + perl6 purescript python react -- cgit v1.2.3 From c895b0cbcae94ee38f6f6e8d4327c22fd6e06ecb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 23 Aug 2020 11:02:40 -0300 Subject: Turn on auto-fill-mode for rst files --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 4115a00..bce3a5d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -736,6 +736,7 @@ This is the place where most of your configurations should be done. Unless it is (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) (add-hook 'markdown-mode-hook 'turn-on-auto-fill) + (add-hook 'rst-mode 'turn-on-auto-fill) (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/guix/guix")) -- cgit v1.2.3 From 9fd584761be521ae769df1aa671a8e43e86269b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 24 Aug 2020 13:55:41 -0300 Subject: Add keyboard shortcuts in notmuch for extending the current query --- nixos/common.nix | 4 ++++ nixos/usurpador.nix | 1 + scripts/cron/notmuch-dump.sh | 13 +++++++++++++ spacemacs.el | 2 ++ 4 files changed, 20 insertions(+) create mode 100755 scripts/cron/notmuch-dump.sh diff --git a/nixos/common.nix b/nixos/common.nix index dc34456..d66d60e 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -17,6 +17,10 @@ fetchMail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.euandreh.log 2>&1"; + # Dump notmuch once a day + notmuchDump = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/notmuch-dump.sh >> /tmp/cron-dbg.notmuch-dump.euandreh.log 2>&1"; + # Update 'nix search' cache once a day at 12h nixSearchUpdate = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nix-search-update.sh >> /tmp/cron-dbg.nix-search-update.euandreh.log 2>&1"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index a9b00da..ef5a221 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -16,6 +16,7 @@ in { zoom-us ]; cronJobs = [ + common.cron.notmuchDump common.cron.nixSearchUpdate common.cron.guixPull common.cron.repoUpdate diff --git a/scripts/cron/notmuch-dump.sh b/scripts/cron/notmuch-dump.sh new file mode 100755 index 0000000..cd96554 --- /dev/null +++ b/scripts/cron/notmuch-dump.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +[[ -f ~/archive/notmuch-archive.gzip ]] && { + mv ~/archive/notmuch-archive.gzip ~/archive/notmuch-archive.yesterday.gzip +} +notmuch dump --gzip ~/archive/notmuch-archive.gzip + +echo "Finishing: $(date -Is)" diff --git a/spacemacs.el b/spacemacs.el index bce3a5d..b639a9a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -732,6 +732,8 @@ This function is called at the very end of Spacemacs initialization after layers This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." (require 'notmuch) (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) + (define-key 'notmuch-search-mode-map "e" 'euandreh/notmuch-extend-current-query-with-tag) + (define-key 'notmuch-search-mode-map "E" 'euandreh/notmuch-extend-current-query) (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) -- cgit v1.2.3 From acc27f1f46b22a0037d1870f631689ecebac6bc3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Aug 2020 07:37:13 -0300 Subject: Add git-search --- scripts/ad-hoc/git-search | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100755 scripts/ad-hoc/git-search diff --git a/scripts/ad-hoc/git-search b/scripts/ad-hoc/git-search new file mode 100755 index 0000000..da7716d --- /dev/null +++ b/scripts/ad-hoc/git-search @@ -0,0 +1,39 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +end="\033[0m" +red="\033[0;31m" +red() { echo -e "${red}${1}${end}"; } + +usage() { + red "Missing argument $1.\n" + cat < + + Arguments: + REGEX_PATTERN Regular expression that "git grep" can search + REPOSITORY_URL URL address that "git clone" can download the repository from + +Examples: + Searching "make get-git" in cgit repository: + git search 'make get-git' https://git.zx2c4.com/cgit/ +EOF + exit 2 +} + + +REGEX_PATTERN="${1:-}" +REPOSITORY_URL="${2:-}" +[[ -z "${REGEX_PATTERN}" ]] && usage 'REGEX_PATTERN' +[[ -z "${REPOSITORY_URL}" ]] && usage 'REPOSITORY_URL' + +mkdir -p /tmp/git-search +DIRNAME="$(echo "${REPOSITORY_URL%/}" | rev | cut -d/ -f1 | rev)" +if [[ ! -d "/tmp/git-search/${DIRNAME}" ]]; then + git clone "${REPOSITORY_URL}" "/tmp/git-search/${DIRNAME}" +fi +pushd "/tmp/git-search/${DIRNAME}" + +shift 3 || shift 2 # when "--" is missing +git grep "${REGEX_PATTERN}" "${@}" -- cgit v1.2.3 From 8a3a2a2bbae1b7b15595cc37293bbf7d9f9f53b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 28 Aug 2020 08:02:26 -0300 Subject: git-search: Escape git rev-list in usage --- scripts/ad-hoc/git-search | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/git-search b/scripts/ad-hoc/git-search index da7716d..8893fed 100755 --- a/scripts/ad-hoc/git-search +++ b/scripts/ad-hoc/git-search @@ -18,6 +18,7 @@ Usage: Examples: Searching "make get-git" in cgit repository: git search 'make get-git' https://git.zx2c4.com/cgit/ + git search 'make get-git' https://git.zx2c4.com/cgit/ -- \$(git rev-list --all) EOF exit 2 } -- cgit v1.2.3 From fcd9f9c4ef399d45d54927382dc1cdde251ebb0a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 30 Aug 2020 06:18:51 -0300 Subject: Add explicit style for INACTIVE todos state --- spacemacs.el | 2 ++ 1 file changed, 2 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index b639a9a..8e53560 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -869,6 +869,8 @@ This is the place where most of your configurations should be done. Unless it is ("WAITING" . (:foreground "white" :weight bold)) ("MEETING" . (:foreground "white" :weight bold)) + ("INACTIVE" . (:foreground "orange" :weight bold)) + ("NEXT" . (:foreground "red" :weight bold)) ("CANCELLED" . (:foreground "green" :weight bold)) -- cgit v1.2.3 From 8e9711bb40acbf25a1ef48de465d086dd5c32f32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 08:57:41 -0300 Subject: aliases.sh: Add jk-shell alias --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 2284ea5..3495351 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -64,3 +64,4 @@ alias r="source ~/.bashrc" alias mail='mail -aFrom:eu@euandre.org' alias ag="ag --hidden" +alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" -- cgit v1.2.3 From 11e3e64662d735a4516742dc4748723d399a6652 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 08:57:54 -0300 Subject: bash/config.sh: Enable dotglob option --- bash/config.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/bash/config.sh b/bash/config.sh index 1a5d48d..bd0870a 100644 --- a/bash/config.sh +++ b/bash/config.sh @@ -27,10 +27,13 @@ HISTFILESIZE=2000000 # update the values of LINES and COLUMNS. shopt -s checkwinsize -# If set, the pattern "**" used in a pathname expansion context will -# match all files and zero or more directories and subdirectories. isLinux && { + # If set, the pattern "**" used in a pathname expansion context will + # match all files and zero or more directories and subdirectories. shopt -s globstar + + # If set, the pattern "*" will also match dotfiles. + shopt -s dotglob } stty -ixon -- cgit v1.2.3 From 9ace964e7ac46c73420383cd9e32afc76011dead Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 08:59:04 -0300 Subject: gitconfig.ini: Change push.default = current --- git/gitconfig.ini | Bin 2070 -> 2112 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index d6ffa19..d002439 100644 Binary files a/git/gitconfig.ini and b/git/gitconfig.ini differ -- cgit v1.2.3 From 845ef271053b6f193b42ad87d87e20b17e274379 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 08:59:29 -0300 Subject: pastebin.sh: run 'git push' instead of 'mr publish' --- scripts/ad-hoc/pastebin.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index 69884d5..d2b06cf 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -59,5 +59,5 @@ EOF git reset . git add "${OUT}" git commit -m "$0: Auto-add ${OUT}" -mr publish +git push popd > /dev/null -- cgit v1.2.3 From a133753ec27bc6c9a3b884bbe95320e1fafb5379 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:02:16 -0300 Subject: configuration.nix: Use latest Perl instead of perl530 --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b839b24..04eb3e3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -296,8 +296,8 @@ in { bats ledger perl - perl530Packages.Appcpanminus - perl530Packages.Mojolicious + perlPackages.Appcpanminus + perlPackages.Mojolicious dhall dhall-json nodePackages.node2nix -- cgit v1.2.3 From cad56d8d7b88f17dad55116fa8a5a6cf41011afc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:02:46 -0300 Subject: configuration.nix: Add cachix, poetry, hunspell and update swift --- nixos/configuration.nix | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 04eb3e3..f1818be 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -103,7 +103,7 @@ in { }); in with pkgs; [ - pkgs-19-09.swift + swift nixfmt cppcheck @@ -239,6 +239,7 @@ in { mailutils ffmpeg-full html-tidy + hunspell # diffoscope broken poppler_utils # used by diffoscope for comparing PDF files @@ -262,6 +263,7 @@ in { pypi2nix bundix + cachix ## Music @@ -281,6 +283,7 @@ in { leiningen python3 python + poetry yarn elixir openjdk -- cgit v1.2.3 From 7dc9d51f4a08d296e17c17fb6e8e6a6172db0ecc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:03:15 -0300 Subject: configuration.nix: Disable tests for all quodlibet variations --- nixos/configuration.nix | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f1818be..135270e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -89,13 +89,14 @@ in { ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; }); - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet = pkgs.quodlibet-full.overrideAttrs (oldAttrs: { + noTestAttrs = { doCheck = false; doInstallCheck = false; - # meta = { broken = false; }; - }); - fallback-quodlibet = pkgs-19-09.quodlibet-full; + meta = { broken = false; }; + }; + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet = pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + fallback-quodlibet = pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); active-quodlibet = untested-quodlibet; gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { -- cgit v1.2.3 From c40ae61a61329b1d464be228fc867e7717a49d34 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:03:42 -0300 Subject: add gemset.nix to global gitignore --- git/gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/gitignore b/git/gitignore index 12daa17..6d57a5a 100644 --- a/git/gitignore +++ b/git/gitignore @@ -1,4 +1,5 @@ playground.clj req.http .postman-ns -*.swp \ No newline at end of file +*.swp +gemset.nix \ No newline at end of file -- cgit v1.2.3 From 4657e419aa91b7b5fedc640c092a62168d4bb719 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:03:56 -0300 Subject: Start using fake-symlinks again But now do things manually instead of trying to make everything automagically work. --- bash/fake-symlinks.sh | 17 +++++++++ bash/fake-symlinks/breadcrumbs.html | 15 ++++++++ bash/fake-symlinks/bugs.css | 45 +++++++++++++++++++++++ bash/fake-symlinks/bugs.template.org | 21 +++++++++++ bash/fake-symlinks/build-site-single-lang.sh | 52 +++++++++++++++++++++++++++ bash/fake-symlinks/ci-build.sh | 35 ++++++++++++++++++ bash/fake-symlinks/footer.html | 7 ++++ bash/fake-symlinks/layout-single-lang.html | 48 +++++++++++++++++++++++++ bash/fake-symlinks/pre-push-hook.sh | 5 +++ bash/fake-symlinks/sphinx-base.conf.py | 34 ++++++++++++++++++ bash/fake-symlinks/sphinx-single-lang.conf.py | 5 +++ 11 files changed, 284 insertions(+) create mode 100644 bash/fake-symlinks/breadcrumbs.html create mode 100644 bash/fake-symlinks/bugs.css create mode 100644 bash/fake-symlinks/bugs.template.org create mode 100755 bash/fake-symlinks/build-site-single-lang.sh create mode 100755 bash/fake-symlinks/ci-build.sh create mode 100644 bash/fake-symlinks/footer.html create mode 100644 bash/fake-symlinks/layout-single-lang.html create mode 100755 bash/fake-symlinks/pre-push-hook.sh create mode 100644 bash/fake-symlinks/sphinx-base.conf.py create mode 100644 bash/fake-symlinks/sphinx-single-lang.conf.py diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index c1fba30..c0f882f 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -45,3 +45,20 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin # for repo in "${DHALL_BUILD_REPOS[@]}"; do # dhall 2> /dev/null <<< "./sr-ht-build.dhall \"$repo\"" | dhall-to-json --pretty > "$SRHT_REPOS_PATH/$repo/.build.yml" # done + +pushd "${DOTFILES}/bash/fake-symlinks/" > /dev/null +export PROJECT_UC=Cement +export PROJECT=cement +envsubst < bugs.template.org > ~/dev/libre/cement/bugs/bugs.template.org +cp bugs.css ~/dev/libre/cement/bugs/ +cp build-site-single-lang.sh ~/dev/libre/cement/scripts/build-site.sh +cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > ~/dev/libre/cement/docs/conf.py +PROJECT=cement envsubst < pre-push-hook.sh > ~/dev/libre/cement/.git/hooks/pre-push +chmod +x ~/dev/libre/cement/.git/hooks/pre-push +DOLLAR='$' PROJECT=cement envsubst < ci-build.sh > ~/dev/libre/cement/scripts/ci-build.sh +chmod +x ~/dev/libre/cement/scripts/ci-build.sh +cat <(printf "Cement\n\n") ~/dev/libre/cement/description <(printf "\n\nSee: cement.euandreh.xyz") > ~/dev/libre/cement/README +cp breadcrumbs.html ~/dev/libre/cement/docs/_templates/ +cp footer.html ~/dev/libre/cement/docs/_templates/ +cp layout-single-lang.html ~/dev/libre/cement/docs/_templates/layout.html +popd > /dev/null diff --git a/bash/fake-symlinks/breadcrumbs.html b/bash/fake-symlinks/breadcrumbs.html new file mode 100644 index 0000000..b0133fd --- /dev/null +++ b/bash/fake-symlinks/breadcrumbs.html @@ -0,0 +1,15 @@ +{%- extends "!breadcrumbs.html" %} + +{% block breadcrumbs_aside %} +

  • + + View source + +
  • +
    +
  • + + Edit on GitLab + +
  • +{% endblock %} diff --git a/bash/fake-symlinks/bugs.css b/bash/fake-symlinks/bugs.css new file mode 100644 index 0000000..4dc3c0e --- /dev/null +++ b/bash/fake-symlinks/bugs.css @@ -0,0 +1,45 @@ +/* EuAndreh's additions */ + +a.header-anchor { + font-size: 0.5em; + opacity: 0.5; +} + +.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO { + color: #fff; + padding: .1em .3em; + border-radius: 3px; + background-clip: padding-box; + font-size: 80%; + font-family: Lucida Console,monospace; + line-height: 1 +} + +/* + Replicate colors from: + https://git.sr.ht/~euandreh/dotfiles/tree/fcd9f9c4ef399d45d54927382dc1cdde251ebb0a/spacemacs.el#L866 +*/ + +.TODO { + background-color: brown; +} + +.DOING { + background-color: yellowgreen; +} + +.WAITING, .MEETING { + background-color: gray; +} + +.INACTIVE { + background-color: orange; +} + +.NEXT { + background-color: red; +} + +.CANCELLED, .DONE { + background-color: green; +} diff --git a/bash/fake-symlinks/bugs.template.org b/bash/fake-symlinks/bugs.template.org new file mode 100644 index 0000000..e12f02a --- /dev/null +++ b/bash/fake-symlinks/bugs.template.org @@ -0,0 +1,21 @@ +#+TITLE: Bug listing for $PROJECT_UC +#+AUTHOR: EuAndreh +#+BIND: org-html-validation-link nil +#+BIND: org-html-scripts nil +#+BIND: org-html-postamble nil +#+BIND: org-export-html-headline-anchor-format nil +#+OPTIONS: toc:nil html-style:nil num:nil +#+HTML_HEAD: +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] +#+MACRO: bug bug\nbsp{}[[#$1][#$1]] +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) + +Bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. + +Send a new bug report: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%3A%20%3Cbug%20description%3E][~euandreh/$PROJECT@lists.sr.ht]]. + +/Você também pode relatar bugs e problemas em português./ + +#+TOC: headlines 1 diff --git a/bash/fake-symlinks/build-site-single-lang.sh b/bash/fake-symlinks/build-site-single-lang.sh new file mode 100755 index 0000000..5742ee8 --- /dev/null +++ b/bash/fake-symlinks/build-site-single-lang.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +OUT="${1}" +HTMLIZE="${2}" + +sed -e '/^\* Bugs$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + tail -n +2 | \ + cat bugs/bugs.template.org - > bugs.org + +emacs bugs.org \ + -l "${HTMLIZE}" \ + --eval '(setq org-export-allow-bind-keywords t)' \ + -f org-html-export-to-html \ + --batch \ + --kill + +# Add anchor link to bug headers +sed -E \ + -i \ + "s|^

    $|

    #\\1

    |" \ + bugs.html +sed 's|^

    Table of Contents

    $|

    Bugs index

    |' bugs.html > "${OUT}/bugs.html" + +pushd docs +make html +popd + +cp docs/favicon.ico "$OUT" +mv docs/_build/html/_static/ "${OUT}/_static/" + +TAGS="$(git tag | cat - <(echo master))" + +for tag in ${TAGS}; do + mkdir -p "tmp/$tag/" + git --work-tree="tmp/$tag/" checkout --recurse-submodules "$tag" -- . + git reset . + + pushd "tmp/$tag/docs/" + jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json + make html + popd + + mv "tmp/$tag/docs/_build/html/" "${OUT}/$tag/" + pushd "${OUT}/$tag/" + rm -rf _static/ + ln -s ../_static . + popd +done diff --git a/bash/fake-symlinks/ci-build.sh b/bash/fake-symlinks/ci-build.sh new file mode 100755 index 0000000..3beec66 --- /dev/null +++ b/bash/fake-symlinks/ci-build.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +set -x + +# +# Run tests and publish the generated site on the VPS server, +# where this hook is installed. +# + +unset GIT_DIR +CLONE="${DOLLAR}(mktemp -d)" +git clone . "${DOLLAR}CLONE" +pushd "${DOLLAR}CLONE" + +LOGS_PREFIX="/data/static/ci-logs" +LOGS_DIR="${DOLLAR}{LOGS_PREFIX}/$PROJECT" +mkdir -p "${DOLLAR}LOGS_DIR" + +LOGFILE="${DOLLAR}{LOGS_DIR}/${DOLLAR}(date -Is)-${DOLLAR}(git rev-parse master).log" + +touch "${DOLLAR}{LOGFILE}" +"${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" + +finish() { + printf "\n\n>>> exit status was %s\n" "${DOLLAR}?" >> "${DOLLAR}LOGFILE" + "${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" +} +trap finish EXIT + +echo Building 'test' derivation >> "${DOLLAR}LOGFILE" +nix-build -A test 2>&1 | tee -a "${DOLLAR}LOGFILE" +echo Building 'publishScript' derivation >> "${DOLLAR}LOGFILE" +nix-build -A publishScript 2>&1 | tee -a "${DOLLAR}LOGFILE" +echo Running the generated './result/bin/publish.sh' file >> "${DOLLAR}LOGFILE" +./result/bin/publish.sh >> "${DOLLAR}LOGFILE" diff --git a/bash/fake-symlinks/footer.html b/bash/fake-symlinks/footer.html new file mode 100644 index 0000000..a710a48 --- /dev/null +++ b/bash/fake-symlinks/footer.html @@ -0,0 +1,7 @@ +{%- extends "!footer.html" %} + +{% block extrafooter %} +
    + Documentation licensed under CC BY-SA 4.0. +
    +{% endblock %} diff --git a/bash/fake-symlinks/layout-single-lang.html b/bash/fake-symlinks/layout-single-lang.html new file mode 100644 index 0000000..04724fc --- /dev/null +++ b/bash/fake-symlinks/layout-single-lang.html @@ -0,0 +1,48 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} +
    + + {{project}} + {{version}} + + +
    +
    +
    Versions
    + {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} +
    +
    +
    +{% endblock %} diff --git a/bash/fake-symlinks/pre-push-hook.sh b/bash/fake-symlinks/pre-push-hook.sh new file mode 100755 index 0000000..2cd3c1e --- /dev/null +++ b/bash/fake-symlinks/pre-push-hook.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +scp ./scripts/ci-build.sh euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive +scp description euandreh.xyz:/data/git/$PROJECT.git/description diff --git a/bash/fake-symlinks/sphinx-base.conf.py b/bash/fake-symlinks/sphinx-base.conf.py new file mode 100644 index 0000000..d4af766 --- /dev/null +++ b/bash/fake-symlinks/sphinx-base.conf.py @@ -0,0 +1,34 @@ +import json +with open('../metadata.json', 'r') as f: + metadata = json.loads(f.read()) + +import subprocess +all_versions = ['master'] + ( + subprocess + .check_output(["git", "tag"]) + .decode('ascii') + .strip() + .split() +) + +project = metadata['project-name'] +author = metadata['authors'][0] +version = metadata['version'] + +extensions = [ + 'sphinx.ext.extlinks' +] + +templates_path = ['_templates'] +html_theme = 'sphinx_rtd_theme' +html_theme_options = { + 'style_external_links': True +} + +html_show_sphinx = False +html_show_copyright = False + +extlinks = { + 'src': ('https://git.euandreh.xyz/$PROJECT/tree/%s', ''), + 'bug': ('https://$PROJECT.euandreh.xyz/bugs.html#%s', 'bug ') +} diff --git a/bash/fake-symlinks/sphinx-single-lang.conf.py b/bash/fake-symlinks/sphinx-single-lang.conf.py new file mode 100644 index 0000000..64f49dd --- /dev/null +++ b/bash/fake-symlinks/sphinx-single-lang.conf.py @@ -0,0 +1,5 @@ +html_context = { + 'all_versions': all_versions, + 'sourcehut_url_prefix': 'https://git.euandreh.xyz/$PROJECT/tree/master/docs', + 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs', +} -- cgit v1.2.3 From 89ca7d8b1fc19775704eb591a2296e188f78b183 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:13:51 -0300 Subject: backup-job.sh: Always try to send email using trap EXIT --- scripts/cron/backup-job.sh | 36 ++++++++++++------------------------ 1 file changed, 12 insertions(+), 24 deletions(-) diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index fdc79ba..8f71cfc 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -1,33 +1,21 @@ #!/usr/bin/env bash +set -Eeuo pipefail -# set -Eeuo pipefail +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS='✅ SUCCESS' + else + STATUS='❌ FAILURE' + fi -LOG_FILE="$(mktemp)" + mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -A"$LOG_FILE" <<< 'The log report is in the attachment.' -finish() { - rm "${LOG_FILE}" + echo 'Mail sent!' } trap finish EXIT +LOG_FILE="$(mktemp)" + echo 'Starting backup job...' ~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh cron 2>&1 | tee "${LOG_FILE}" - -status=$? -if [[ $status = 0 ]]; then - STATUS='SUCCESS' -else - STATUS='FAILURE' -fi - -pushd /tmp/ > /dev/null || exit 1 - -# Taken from: -# https://unix.stackexchange.com/questions/55546/removing-color-codes-from-output -sed 's/\x1B\[[0-9;]*[JKmsu]//g' "${LOG_FILE}" > report.txt - -mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -Areport.txt <<< 'The log report is in the attachment.' -rm report.txt - -popd > /dev/null || exit 1 - -echo 'Mail sent!' -- cgit v1.2.3 From da257bf312bfd6f22bf97d9679011ce21eec3101 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 09:15:34 -0300 Subject: backup.sh: gzip notmuch output --- scripts/ad-hoc/backup.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index d4f8cd9..6475900 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -49,8 +49,13 @@ popd || exit 1 rm -rf "$HOME/tmp/backup/" mkdir -p "$HOME/tmp/backup/" +yellow "Downloading MBOX archive of mailing lists" +# See +# https://todo.sr.ht/~sircmpwn/lists.sr.ht/162 +green "Done" + yellow "Creating backup of notmuch data" -notmuch dump --output="$HOME/archive/notmuch-archive.txt" +notmuch dump --gzip --output="$HOME/archive/notmuch-backup.gz" green "Done" yellow "Creating possibly missing directories" -- cgit v1.2.3 From b3e8c8df65c39ff1620368a981667105791ed271 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 11:35:38 -0300 Subject: usurpador.nix: Rename packages -> proprietaryPackages --- nixos/common.nix | 6 +----- nixos/configuration.nix | 2 +- nixos/usurpador.nix | 9 +++------ scripts/ad-hoc/backup.sh | 13 ++++--------- scripts/ad-hoc/notmuch-dump.sh | 13 +++++++++++++ scripts/cron/notmuch-dump.sh | 13 ------------- 6 files changed, 22 insertions(+), 34 deletions(-) create mode 100755 scripts/ad-hoc/notmuch-dump.sh delete mode 100755 scripts/cron/notmuch-dump.sh diff --git a/nixos/common.nix b/nixos/common.nix index d66d60e..4ebfae8 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -17,10 +17,6 @@ fetchMail = "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.euandreh.log 2>&1"; - # Dump notmuch once a day - notmuchDump = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/notmuch-dump.sh >> /tmp/cron-dbg.notmuch-dump.euandreh.log 2>&1"; - # Update 'nix search' cache once a day at 12h nixSearchUpdate = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nix-search-update.sh >> /tmp/cron-dbg.nix-search-update.euandreh.log 2>&1"; @@ -39,6 +35,6 @@ # Borg backup once a month borg = - "0 12 1 * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; + "30 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; }; } diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 135270e..a36b109 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -376,7 +376,7 @@ in { zbar # for on-screen QR Code scanning monero - ] ++ localConfiguration.packages; + ] ++ localConfiguration.proprietaryPackages; nixpkgs.config = { android_sdk.accept_license = true; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index ef5a221..e239985 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -7,16 +7,13 @@ in { luksDevice = "/dev/nvme0n1p3"; hashedPassword = privateConfiguration.hashedPassword; enableIPFS = false; - allowUnfree = true; # Required for slack and other proprietary packages - enableFlatpak = true; - packages = with pkgs; [ - # android-studio unused - # sshuttle unused + enableFlatpak = true; # for usage with proprietary Skype + allowUnfree = true; + proprietaryPackages = with pkgs; [ slack zoom-us ]; cronJobs = [ - common.cron.notmuchDump common.cron.nixSearchUpdate common.cron.guixPull common.cron.repoUpdate diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 6475900..3707801 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -46,8 +46,9 @@ pushd ~/dev/libre/ || exit 1 mr -s notmaster popd || exit 1 -rm -rf "$HOME/tmp/backup/" -mkdir -p "$HOME/tmp/backup/" +yellow "Creating possibly missing directories" +mkdir -p ~/archive/ ~/mbsync/ +green "Done" yellow "Downloading MBOX archive of mailing lists" # See @@ -55,11 +56,7 @@ yellow "Downloading MBOX archive of mailing lists" green "Done" yellow "Creating backup of notmuch data" -notmuch dump --gzip --output="$HOME/archive/notmuch-backup.gz" -green "Done" - -yellow "Creating possibly missing directories" -mkdir -p ~/archive/ ~/mbsync/ +~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh green "Done" yellow "Creating new borg archive entry" @@ -78,8 +75,6 @@ borg create \ ~/gPodder/ # add folders to be backed up here -trash "$HOME/tmp/backup/" - green "Done" diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh new file mode 100755 index 0000000..878482f --- /dev/null +++ b/scripts/ad-hoc/notmuch-dump.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +[[ -f ~/archive/notmuch-archive.gz ]] && { + mv ~/archive/notmuch-archive.gz ~/archive/notmuch-archive.yesterday.gz +} +notmuch dump --gzip --output ~/archive/notmuch-archive.gz + +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/notmuch-dump.sh b/scripts/cron/notmuch-dump.sh deleted file mode 100755 index cd96554..0000000 --- a/scripts/cron/notmuch-dump.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -exec &> /dev/stdout -echo "Starting: $(date -Is)" - -[[ -f ~/archive/notmuch-archive.gzip ]] && { - mv ~/archive/notmuch-archive.gzip ~/archive/notmuch-archive.yesterday.gzip -} -notmuch dump --gzip ~/archive/notmuch-archive.gzip - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From d8baf5ed72daa4a1bd0ceb2da759549e8551243f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 11:36:27 -0300 Subject: spacemacs.el: Add euandreh/add-bug-id function --- spacemacs.el | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index 8e53560..6beb66e 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -726,6 +726,11 @@ through `notmuch-message-attach-regex'." (or (y-or-n-p "Email without subject. Really send?") (error "No subject found, aborting")))))) +(defun euandreh/add-bug-id () + (interactive) + (let ((id (uuidgen-4))) + (insert (format ":PROPERTIES:\n:CUSTOM_ID: %s\n:END:" id id id)))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. -- cgit v1.2.3 From 6671a03f7b43ea887b2b5926d1cc8a02deeb655e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 11:38:00 -0300 Subject: spacemacs.el: customize org-todos behaviour --- spacemacs.el | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 6beb66e..ca4089d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -867,7 +867,14 @@ This is the place where most of your configurations should be done. Unless it is ;; Taken from: ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda ;; - http://doc.norang.ca/org-mode.html - org-todo-keywords '((sequence "TODO" "NEXT" "WAITING" "MEETING" "INACTIVE" "CANCELLED" "DOING" "|" "DONE")) + + + org-log-done (quote time) + org-log-into-drawer nil + org-log-state-notes-insert-after-drawers nil + + + org-todo-keywords '((sequence "TODO(!)" "NEXT(!)" "WAITING(!)" "MEETING(!)" "INACTIVE(!)" "DOING(!)" "|" "CANCELLED(!)" "DONE(!)")) org-todo-keyword-faces '(("TODO" . (:foreground "brown" :weight bold)) ("DOING" . (:foreground "yellow" :weight bold)) -- cgit v1.2.3 From 4b13e725953dac644d255a5ba123bbdd1f11f1d3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 11:58:58 -0300 Subject: spacemacs.el: Remove perl6 layer --- spacemacs.el | 1 - 1 file changed, 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index ca4089d..7087996 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -74,7 +74,6 @@ This function should only modify configuration layer settings." notmuch pdf perl5 - perl6 purescript python react -- cgit v1.2.3 From 54dd9f1db125bf3c8ba79cd43b8983d11334e579 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 12:06:21 -0300 Subject: common.nix: Run backups every sunday --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index 4ebfae8..f02269f 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -35,6 +35,6 @@ # Borg backup once a month borg = - "30 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; + "0 12 * * SUN andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; }; } -- cgit v1.2.3 From afe3b4949f8b8aeea18051f4f6049662e1bdd01a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 12:26:39 -0300 Subject: Fix nix-search-update.sh cronjob --- bash/bashrc.sh | 2 +- scripts/cron/nix-search-update.sh | 3 ++- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index b62e95c..f079415 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -19,4 +19,4 @@ source $DOTFILES/bash/facepalm/rotten-apple.sh source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/fake-symlinks.sh -env > ~/.spacemacs.env +declare -px > ~/.spacemacs.env diff --git a/scripts/cron/nix-search-update.sh b/scripts/cron/nix-search-update.sh index 01367fc..0190bcb 100755 --- a/scripts/cron/nix-search-update.sh +++ b/scripts/cron/nix-search-update.sh @@ -4,6 +4,7 @@ set -Eeuo pipefail exec &> /dev/stdout echo "Starting $(date -Is)" -nix search -u lilypond +source ~/.spacemacs.env +nix search -u just-a-label-so-the-cache-can-be-updated echo "Finishing: $(date -Is)" -- cgit v1.2.3 From fb46fe68d650f64a8a950ded8937fb71eadc328a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 2 Sep 2020 18:06:06 -0300 Subject: backup.sh: Allow some mr steps to fail --- scripts/ad-hoc/backup.sh | 8 ++++---- scripts/cron/backup-job.sh | 4 ++-- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 3707801..200f269 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -111,15 +111,15 @@ pushd ~/dev/libre/ || exit 1 mr -s master mr -s status -mr -s update -mr -s rsyncnet -mr -s gitlab +mr -s update ||: +mr -s rsyncnet ||: +mr -s gitlab ||: if [ ! -d ~/UTCLOUD/ ]; then red "${HOME}/UTCLOUD/ not attached, not storing mr repositories there." else pushd ~/dev/ || exit 1 - mr -s hd + mr -s hd ||: popd || exit 1 fi diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 8f71cfc..9ed9221 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -4,9 +4,9 @@ set -Eeuo pipefail finish() { status=$? if [[ $status = 0 ]]; then - STATUS='✅ SUCCESS' + STATUS='✅ SUCCESS (status $status)' else - STATUS='❌ FAILURE' + STATUS='❌ FAILURE (status $status)' fi mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -A"$LOG_FILE" <<< 'The log report is in the attachment.' -- cgit v1.2.3 From e98255a981462e91628399377360b91e379fdb27 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Sep 2020 06:49:30 -0300 Subject: clean up fake-symlinks.sh --- bash/fake-symlinks.sh | 28 --------------------------- templates/env.sh | 5 ----- templates/sr-ht-build.dhall | 47 --------------------------------------------- templates/sr-ht-build.yaml | 20 ------------------- 4 files changed, 100 deletions(-) delete mode 100644 templates/env.sh delete mode 100644 templates/sr-ht-build.dhall delete mode 100644 templates/sr-ht-build.yaml diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index c0f882f..48c434e 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -9,28 +9,6 @@ EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" cp "${EMACS_LAYOUTS_DIR}"/* ~/Nextcloud/Cache/emacs/ } -SRHT_REPOS=(dotfiles) -SRHT_REPOS_PATH="${HOME}/dev/libre" - -cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/website/utils.nix" - -for repo in "${SRHT_REPOS[@]}"; do - if [[ "${repo}" != "vps" ]] && [[ "${repo}" != "songbooks" ]]; then - REPO="${repo}" envsubst < "${DOTFILES}/templates/sr-ht-build.yaml" > "${SRHT_REPOS_PATH}/${repo}/.build.yml" - fi - if [[ "${repo}" != "dotfiles" ]]; then - cp "${DOTFILES}/utils.nix" "${SRHT_REPOS_PATH}/${repo}/utils.nix" - mkdir -p "${SRHT_REPOS_PATH}/${repo}/docs" - cp "${DOTFILES}/docs/README.css" "${SRHT_REPOS_PATH}/${repo}/docs/README.css" - cp "${DOTFILES}/bash/colors.sh" "${SRHT_REPOS_PATH}/${repo}/colors.sh" - fi - if [[ "${repo}" != "website" ]] && [[ "${repo}" != "vps" ]]; then - mkdir -p "${SRHT_REPOS_PATH}/${repo}/docs" - REPO="${repo}" envsubst < "${DOTFILES}/templates/env.sh" > "${SRHT_REPOS_PATH}/${repo}/docs/env.sh" - fi -done -cp "${DOTFILES}/utils.nix" ~/annex/utils.nix - mkdir -p ~/.tmuxinator for template in "${DOTFILES}"/tmux/projects/*; do @@ -40,12 +18,6 @@ done mkdir -p ~/.mozilla/native-messaging-hosts/ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ -# DHALL_BUILD_REPOS=(website) - -# for repo in "${DHALL_BUILD_REPOS[@]}"; do -# dhall 2> /dev/null <<< "./sr-ht-build.dhall \"$repo\"" | dhall-to-json --pretty > "$SRHT_REPOS_PATH/$repo/.build.yml" -# done - pushd "${DOTFILES}/bash/fake-symlinks/" > /dev/null export PROJECT_UC=Cement export PROJECT=cement diff --git a/templates/env.sh b/templates/env.sh deleted file mode 100644 index 0f7848a..0000000 --- a/templates/env.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -export SERVER_URL=root@euandre.org -export DOCS_SERVER_PATH="/home/user-data/www/default/$REPO/" diff --git a/templates/sr-ht-build.dhall b/templates/sr-ht-build.dhall deleted file mode 100644 index 41b937b..0000000 --- a/templates/sr-ht-build.dhall +++ /dev/null @@ -1,47 +0,0 @@ --- let buildTemplate = - λ ( repoName - : Text - ) - → { image = - "debian/stretch" - , packages = - [ "curl" ] - , triggers = - [ { condition = - "failure" - , action = - "email" - , to = - "EuAndreh " - } - ] - , sources = - [ "https://git.sr.ht/~euandreh/" ++ repoName ] - , secrets = - [ "7159f943-811f-402d-bb6d-37cd764dc728" ] - , tasks = - [ { mapKey = - "setup" - , mapValue = - '' - curl https://nixos.org/nix/install | sh - echo '. $HOME/.nix-profile/etc/profile.d/nix.sh' >> $HOME/.buildenv'' - }, - { mapKey = - "test" - , mapValue = - '' - cd ${repoName}/ - nix-build -A test'' - }, - { mapKey = - "publish" - , mapValue = - '' - cd ${repoName}/ - nix-build -A publishScript - source env.sh - ./result/bin/publish.sh'' - } - ] - } diff --git a/templates/sr-ht-build.yaml b/templates/sr-ht-build.yaml deleted file mode 100644 index 026caec..0000000 --- a/templates/sr-ht-build.yaml +++ /dev/null @@ -1,20 +0,0 @@ -image: nixos/unstable -repositories: - nixpkgs: https://nixos.org/channels/nixpkgs-unstable -triggers: - - condition: failure - action: email - to: EuAndreh -sources: - - https://git.sr.ht/~euandreh/$REPO -secrets: - - 148e7be0-9948-4e49-88e3-ca8c5b7ac9f0 -tasks: - - tests: | - cd $REPO/ - nix-build -A test - - docs: | - cd $REPO/ - nix-build -A publishScript - source ./docs/env.sh - ./result/bin/publish.sh -- cgit v1.2.3 From d1ae4a01da9ee23132e553502a4fbd88a9778336 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Sep 2020 07:08:39 -0300 Subject: fake-symlinks.sh: Start to loop on projects again --- bash/fake-symlinks.sh | 37 +++++++++++++++++++----------- bash/fake-symlinks/simple-pre-push-hook.sh | 4 ++++ 2 files changed, 27 insertions(+), 14 deletions(-) create mode 100755 bash/fake-symlinks/simple-pre-push-hook.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 48c434e..67d4794 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -19,18 +19,27 @@ mkdir -p ~/.mozilla/native-messaging-hosts/ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ pushd "${DOTFILES}/bash/fake-symlinks/" > /dev/null -export PROJECT_UC=Cement -export PROJECT=cement -envsubst < bugs.template.org > ~/dev/libre/cement/bugs/bugs.template.org -cp bugs.css ~/dev/libre/cement/bugs/ -cp build-site-single-lang.sh ~/dev/libre/cement/scripts/build-site.sh -cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > ~/dev/libre/cement/docs/conf.py -PROJECT=cement envsubst < pre-push-hook.sh > ~/dev/libre/cement/.git/hooks/pre-push -chmod +x ~/dev/libre/cement/.git/hooks/pre-push -DOLLAR='$' PROJECT=cement envsubst < ci-build.sh > ~/dev/libre/cement/scripts/ci-build.sh -chmod +x ~/dev/libre/cement/scripts/ci-build.sh -cat <(printf "Cement\n\n") ~/dev/libre/cement/description <(printf "\n\nSee: cement.euandreh.xyz") > ~/dev/libre/cement/README -cp breadcrumbs.html ~/dev/libre/cement/docs/_templates/ -cp footer.html ~/dev/libre/cement/docs/_templates/ -cp layout-single-lang.html ~/dev/libre/cement/docs/_templates/layout.html +export DOLLAR='$' +# single language, documented project +for r in cement mediator; do + export PROJECT_UC="${r^}" + export PROJECT="$r" + envsubst < bugs.template.org > "$HOME/dev/libre/$r/bugs/bugs.template.org" + cp bugs.css "$HOME/dev/libre/$r/bugs/" + cp build-site-single-lang.sh "$HOME/dev/libre/$r/scripts/build-site.sh" + cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$r/docs/conf.py" + envsubst < pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" + chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" + envsubst < ci-build.sh > "$HOME/dev/libre/$r/scripts/ci-build.sh" + chmod +x "$HOME/dev/libre/$r/scripts/ci-build.sh" + cat <(printf "$PROJECT_UC\n\n") "$HOME/dev/libre/$r/description" <(printf "\n\nSee: $r.euandreh.xyz") > "$HOME/dev/libre/$r/README" + cp breadcrumbs.html "$HOME/dev/libre/$r/docs/_templates/" + cp footer.html "$HOME/dev/libre/$r/docs/_templates/" + cp layout-single-lang.html "$HOME/dev/libre/$r/docs/_templates/layout.html" +done + +for r in boneco website dotfiles; do + export PROJECT="$r" + envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" +done popd > /dev/null diff --git a/bash/fake-symlinks/simple-pre-push-hook.sh b/bash/fake-symlinks/simple-pre-push-hook.sh new file mode 100755 index 0000000..f07fb69 --- /dev/null +++ b/bash/fake-symlinks/simple-pre-push-hook.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +scp description euandreh.xyz:/data/git/$PROJECT.git/description -- cgit v1.2.3 From 0bd00eb0390eb7ccb9a2e28b76d2b72d30c6dc29 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Sep 2020 08:09:10 -0300 Subject: Add more fake-symlinks/ templates --- bash/fake-symlinks.sh | 9 ++++++- bash/fake-symlinks/.build.yml | 13 +++++++++ bash/fake-symlinks/assert-nixfmt.sh | 16 +++++++++++ bash/fake-symlinks/assert-shellcheck.sh | 6 +++++ bash/fake-symlinks/assert-todos.sh | 10 +++++++ bash/fake-symlinks/shell.nix | 1 + bash/fake-symlinks/utils.nix | 47 +++++++++++++++++++++++++++++++++ 7 files changed, 101 insertions(+), 1 deletion(-) create mode 100644 bash/fake-symlinks/.build.yml create mode 100755 bash/fake-symlinks/assert-nixfmt.sh create mode 100755 bash/fake-symlinks/assert-shellcheck.sh create mode 100755 bash/fake-symlinks/assert-todos.sh create mode 100644 bash/fake-symlinks/shell.nix create mode 100644 bash/fake-symlinks/utils.nix diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 67d4794..425f625 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -32,14 +32,21 @@ for r in cement mediator; do chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" envsubst < ci-build.sh > "$HOME/dev/libre/$r/scripts/ci-build.sh" chmod +x "$HOME/dev/libre/$r/scripts/ci-build.sh" - cat <(printf "$PROJECT_UC\n\n") "$HOME/dev/libre/$r/description" <(printf "\n\nSee: $r.euandreh.xyz") > "$HOME/dev/libre/$r/README" + cat <(printf "$PROJECT_UC\n\n") "$HOME/dev/libre/$r/description" <(printf "\n\nSee: $r.euandreh.xyz\n") > "$HOME/dev/libre/$r/README" cp breadcrumbs.html "$HOME/dev/libre/$r/docs/_templates/" cp footer.html "$HOME/dev/libre/$r/docs/_templates/" cp layout-single-lang.html "$HOME/dev/libre/$r/docs/_templates/layout.html" + cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" + cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" + cp assert-todos.sh "$HOME/dev/libre/$r/scripts/" + cp shell.nix "$HOME/dev/libre/$r/" + cp utils.nix "$HOME/dev/libre/$r/" + envsubst < .build.yml > "$HOME/dev/libre/$r/.build.yml" done for r in boneco website dotfiles; do export PROJECT="$r" envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" + chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" done popd > /dev/null diff --git a/bash/fake-symlinks/.build.yml b/bash/fake-symlinks/.build.yml new file mode 100644 index 0000000..b352f08 --- /dev/null +++ b/bash/fake-symlinks/.build.yml @@ -0,0 +1,13 @@ +image: nixos/unstable +repositories: + nixpkgs: https://nixos.org/channels/nixpkgs-unstable +triggers: + - condition: failure + action: email + to: EuAndreh +sources: + - https://git.sr.ht/~euandreh/$PROJECT +tasks: + - tests: | + cd $PROJECT/ + nix-build -A test diff --git a/bash/fake-symlinks/assert-nixfmt.sh b/bash/fake-symlinks/assert-nixfmt.sh new file mode 100755 index 0000000..89964c9 --- /dev/null +++ b/bash/fake-symlinks/assert-nixfmt.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +format() { + nix_file="${1}" + diff <(nixfmt < "${nix_file}") "${nix_file}" || { + echo "The file '${nix_file}' is unformatted. To fix it, run:" + echo " nixfmt ${nix_file}" + exit 1 + } +} +export -f format + +find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" diff --git a/bash/fake-symlinks/assert-shellcheck.sh b/bash/fake-symlinks/assert-shellcheck.sh new file mode 100755 index 0000000..3d6aca4 --- /dev/null +++ b/bash/fake-symlinks/assert-shellcheck.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +find . -type f -name '*.sh' -print0 | xargs -0 shellcheck diff --git a/bash/fake-symlinks/assert-todos.sh b/bash/fake-symlinks/assert-todos.sh new file mode 100755 index 0000000..a562840 --- /dev/null +++ b/bash/fake-symlinks/assert-todos.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +if ag FIXME --ignore Makefile.am --ignore TODOs.org --ignore scripts/assert-todos.sh; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.org." + exit 1 +fi diff --git a/bash/fake-symlinks/shell.nix b/bash/fake-symlinks/shell.nix new file mode 100644 index 0000000..af299aa --- /dev/null +++ b/bash/fake-symlinks/shell.nix @@ -0,0 +1 @@ +(import ./default.nix).shell diff --git a/bash/fake-symlinks/utils.nix b/bash/fake-symlinks/utils.nix new file mode 100644 index 0000000..6975414 --- /dev/null +++ b/bash/fake-symlinks/utils.nix @@ -0,0 +1,47 @@ +# test = pkgs.stdenv.mkDerivation { +# inherit src; +# name = "songbooks-test"; +# buildInputs = shell.buildInputs; +# phases = "unpackPhase buildPhase"; +# buildPhase = '' +# patchShebangs . +# make check +# touch $out +# ''; +# }; +# site = let +# orgcss = builtins.fetchurl { +# url = "https://gongzhitaao.org/orgcss/org.css"; +# sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; +# }; +# htmlize = builtins.fetchurl { +# url = +# "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; +# sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; +# }; +# in pkgs.stdenv.mkDerivation { +# inherit src; +# name = "songbooks-site"; +# buildInputs = shell.buildInputs; +# phases = "unpackPhase buildPhase"; +# buildPhase = '' +# patchShebangs . +# mkdir $out +# cat ${orgcss} bugs/bugs.css > $out/styles.css +# ./scripts/build-site.sh $out ${htmlize} +# ''; +# }; +# publishScript = pkgs.writeShellScriptBin "publish.sh" '' +# set -Eeuo pipefail + +# OUT_PATH=/data/static/songbooks/ +# chmod -R +w $OUT_PATH # assert the previous dir is writable +# rm -rf $OUT_PATH +# cp -R ${site} $OUT_PATH +# chmod -R +w $OUT_PATH # make the new one writable too +# ''; +# shell = pkgs.mkShell { +# name = "songbooks-development-environment"; +# buildInputs = with pkgs; ; +# } +{ } -- cgit v1.2.3 From 58038d92cd206cacabc707f0729703b0e840cdbb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Sep 2020 08:34:55 -0300 Subject: mv bash/fake-symlinks/ => bash/templates/ and fix shellcheck offenses --- bash/fake-symlinks.sh | 6 ++-- bash/fake-symlinks/.build.yml | 13 ------- bash/fake-symlinks/assert-nixfmt.sh | 16 --------- bash/fake-symlinks/assert-shellcheck.sh | 6 ---- bash/fake-symlinks/assert-todos.sh | 10 ------ bash/fake-symlinks/breadcrumbs.html | 15 -------- bash/fake-symlinks/bugs.css | 45 ----------------------- bash/fake-symlinks/bugs.template.org | 21 ----------- bash/fake-symlinks/build-site-single-lang.sh | 52 --------------------------- bash/fake-symlinks/ci-build.sh | 35 ------------------ bash/fake-symlinks/footer.html | 7 ---- bash/fake-symlinks/layout-single-lang.html | 48 ------------------------- bash/fake-symlinks/pre-push-hook.sh | 5 --- bash/fake-symlinks/shell.nix | 1 - bash/fake-symlinks/simple-pre-push-hook.sh | 4 --- bash/fake-symlinks/sphinx-base.conf.py | 34 ------------------ bash/fake-symlinks/sphinx-single-lang.conf.py | 5 --- bash/fake-symlinks/utils.nix | 47 ------------------------ bash/templates/.build.yml | 13 +++++++ bash/templates/assert-nixfmt.sh | 16 +++++++++ bash/templates/assert-shellcheck.sh | 6 ++++ bash/templates/assert-todos.sh | 10 ++++++ bash/templates/breadcrumbs.html | 15 ++++++++ bash/templates/bugs.css | 45 +++++++++++++++++++++++ bash/templates/bugs.template.org | 21 +++++++++++ bash/templates/build-site-single-lang.sh | 52 +++++++++++++++++++++++++++ bash/templates/ci-build.sh | 35 ++++++++++++++++++ bash/templates/footer.html | 7 ++++ bash/templates/layout-single-lang.html | 48 +++++++++++++++++++++++++ bash/templates/pre-push-hook.sh | 5 +++ bash/templates/shell.nix | 1 + bash/templates/simple-pre-push-hook.sh | 4 +++ bash/templates/sphinx-base.conf.py | 34 ++++++++++++++++++ bash/templates/sphinx-single-lang.conf.py | 5 +++ bash/templates/utils.nix | 47 ++++++++++++++++++++++++ default.nix | 9 +++-- nixos/configuration.nix | 9 +++-- nixos/usurpador.nix | 5 +-- scripts/cron/backup-job.sh | 4 +-- scripts/cron/nix-search-update.sh | 1 + 40 files changed, 384 insertions(+), 378 deletions(-) delete mode 100644 bash/fake-symlinks/.build.yml delete mode 100755 bash/fake-symlinks/assert-nixfmt.sh delete mode 100755 bash/fake-symlinks/assert-shellcheck.sh delete mode 100755 bash/fake-symlinks/assert-todos.sh delete mode 100644 bash/fake-symlinks/breadcrumbs.html delete mode 100644 bash/fake-symlinks/bugs.css delete mode 100644 bash/fake-symlinks/bugs.template.org delete mode 100755 bash/fake-symlinks/build-site-single-lang.sh delete mode 100755 bash/fake-symlinks/ci-build.sh delete mode 100644 bash/fake-symlinks/footer.html delete mode 100644 bash/fake-symlinks/layout-single-lang.html delete mode 100755 bash/fake-symlinks/pre-push-hook.sh delete mode 100644 bash/fake-symlinks/shell.nix delete mode 100755 bash/fake-symlinks/simple-pre-push-hook.sh delete mode 100644 bash/fake-symlinks/sphinx-base.conf.py delete mode 100644 bash/fake-symlinks/sphinx-single-lang.conf.py delete mode 100644 bash/fake-symlinks/utils.nix create mode 100644 bash/templates/.build.yml create mode 100755 bash/templates/assert-nixfmt.sh create mode 100755 bash/templates/assert-shellcheck.sh create mode 100755 bash/templates/assert-todos.sh create mode 100644 bash/templates/breadcrumbs.html create mode 100644 bash/templates/bugs.css create mode 100644 bash/templates/bugs.template.org create mode 100755 bash/templates/build-site-single-lang.sh create mode 100755 bash/templates/ci-build.sh create mode 100644 bash/templates/footer.html create mode 100644 bash/templates/layout-single-lang.html create mode 100755 bash/templates/pre-push-hook.sh create mode 100644 bash/templates/shell.nix create mode 100755 bash/templates/simple-pre-push-hook.sh create mode 100644 bash/templates/sphinx-base.conf.py create mode 100644 bash/templates/sphinx-single-lang.conf.py create mode 100644 bash/templates/utils.nix diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 425f625..3aaf8cb 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -18,7 +18,7 @@ done mkdir -p ~/.mozilla/native-messaging-hosts/ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ -pushd "${DOTFILES}/bash/fake-symlinks/" > /dev/null +pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' # single language, documented project for r in cement mediator; do @@ -32,7 +32,7 @@ for r in cement mediator; do chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" envsubst < ci-build.sh > "$HOME/dev/libre/$r/scripts/ci-build.sh" chmod +x "$HOME/dev/libre/$r/scripts/ci-build.sh" - cat <(printf "$PROJECT_UC\n\n") "$HOME/dev/libre/$r/description" <(printf "\n\nSee: $r.euandreh.xyz\n") > "$HOME/dev/libre/$r/README" + cat <(printf "%s\n\n" "$PROJECT_UC") "$HOME/dev/libre/$r/description" <(printf "\n\nSee: %s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$r/README" cp breadcrumbs.html "$HOME/dev/libre/$r/docs/_templates/" cp footer.html "$HOME/dev/libre/$r/docs/_templates/" cp layout-single-lang.html "$HOME/dev/libre/$r/docs/_templates/layout.html" @@ -49,4 +49,4 @@ for r in boneco website dotfiles; do envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" done -popd > /dev/null +popd > /dev/null || exit 1 diff --git a/bash/fake-symlinks/.build.yml b/bash/fake-symlinks/.build.yml deleted file mode 100644 index b352f08..0000000 --- a/bash/fake-symlinks/.build.yml +++ /dev/null @@ -1,13 +0,0 @@ -image: nixos/unstable -repositories: - nixpkgs: https://nixos.org/channels/nixpkgs-unstable -triggers: - - condition: failure - action: email - to: EuAndreh -sources: - - https://git.sr.ht/~euandreh/$PROJECT -tasks: - - tests: | - cd $PROJECT/ - nix-build -A test diff --git a/bash/fake-symlinks/assert-nixfmt.sh b/bash/fake-symlinks/assert-nixfmt.sh deleted file mode 100755 index 89964c9..0000000 --- a/bash/fake-symlinks/assert-nixfmt.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -format() { - nix_file="${1}" - diff <(nixfmt < "${nix_file}") "${nix_file}" || { - echo "The file '${nix_file}' is unformatted. To fix it, run:" - echo " nixfmt ${nix_file}" - exit 1 - } -} -export -f format - -find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" diff --git a/bash/fake-symlinks/assert-shellcheck.sh b/bash/fake-symlinks/assert-shellcheck.sh deleted file mode 100755 index 3d6aca4..0000000 --- a/bash/fake-symlinks/assert-shellcheck.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -find . -type f -name '*.sh' -print0 | xargs -0 shellcheck diff --git a/bash/fake-symlinks/assert-todos.sh b/bash/fake-symlinks/assert-todos.sh deleted file mode 100755 index a562840..0000000 --- a/bash/fake-symlinks/assert-todos.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -if ag FIXME --ignore Makefile.am --ignore TODOs.org --ignore scripts/assert-todos.sh; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.org." - exit 1 -fi diff --git a/bash/fake-symlinks/breadcrumbs.html b/bash/fake-symlinks/breadcrumbs.html deleted file mode 100644 index b0133fd..0000000 --- a/bash/fake-symlinks/breadcrumbs.html +++ /dev/null @@ -1,15 +0,0 @@ -{%- extends "!breadcrumbs.html" %} - -{% block breadcrumbs_aside %} -
  • - - View source - -
  • -
    -
  • - - Edit on GitLab - -
  • -{% endblock %} diff --git a/bash/fake-symlinks/bugs.css b/bash/fake-symlinks/bugs.css deleted file mode 100644 index 4dc3c0e..0000000 --- a/bash/fake-symlinks/bugs.css +++ /dev/null @@ -1,45 +0,0 @@ -/* EuAndreh's additions */ - -a.header-anchor { - font-size: 0.5em; - opacity: 0.5; -} - -.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO { - color: #fff; - padding: .1em .3em; - border-radius: 3px; - background-clip: padding-box; - font-size: 80%; - font-family: Lucida Console,monospace; - line-height: 1 -} - -/* - Replicate colors from: - https://git.sr.ht/~euandreh/dotfiles/tree/fcd9f9c4ef399d45d54927382dc1cdde251ebb0a/spacemacs.el#L866 -*/ - -.TODO { - background-color: brown; -} - -.DOING { - background-color: yellowgreen; -} - -.WAITING, .MEETING { - background-color: gray; -} - -.INACTIVE { - background-color: orange; -} - -.NEXT { - background-color: red; -} - -.CANCELLED, .DONE { - background-color: green; -} diff --git a/bash/fake-symlinks/bugs.template.org b/bash/fake-symlinks/bugs.template.org deleted file mode 100644 index e12f02a..0000000 --- a/bash/fake-symlinks/bugs.template.org +++ /dev/null @@ -1,21 +0,0 @@ -#+TITLE: Bug listing for $PROJECT_UC -#+AUTHOR: EuAndreh -#+BIND: org-html-validation-link nil -#+BIND: org-html-scripts nil -#+BIND: org-html-postamble nil -#+BIND: org-export-html-headline-anchor-format nil -#+OPTIONS: toc:nil html-style:nil num:nil -#+HTML_HEAD: -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] -#+MACRO: bug bug\nbsp{}[[#$1][#$1]] -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) - -Bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. - -Send a new bug report: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%3A%20%3Cbug%20description%3E][~euandreh/$PROJECT@lists.sr.ht]]. - -/Você também pode relatar bugs e problemas em português./ - -#+TOC: headlines 1 diff --git a/bash/fake-symlinks/build-site-single-lang.sh b/bash/fake-symlinks/build-site-single-lang.sh deleted file mode 100755 index 5742ee8..0000000 --- a/bash/fake-symlinks/build-site-single-lang.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -OUT="${1}" -HTMLIZE="${2}" - -sed -e '/^\* Bugs$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - tail -n +2 | \ - cat bugs/bugs.template.org - > bugs.org - -emacs bugs.org \ - -l "${HTMLIZE}" \ - --eval '(setq org-export-allow-bind-keywords t)' \ - -f org-html-export-to-html \ - --batch \ - --kill - -# Add anchor link to bug headers -sed -E \ - -i \ - "s|^

    $|

    #\\1

    |" \ - bugs.html -sed 's|^

    Table of Contents

    $|

    Bugs index

    |' bugs.html > "${OUT}/bugs.html" - -pushd docs -make html -popd - -cp docs/favicon.ico "$OUT" -mv docs/_build/html/_static/ "${OUT}/_static/" - -TAGS="$(git tag | cat - <(echo master))" - -for tag in ${TAGS}; do - mkdir -p "tmp/$tag/" - git --work-tree="tmp/$tag/" checkout --recurse-submodules "$tag" -- . - git reset . - - pushd "tmp/$tag/docs/" - jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - make html - popd - - mv "tmp/$tag/docs/_build/html/" "${OUT}/$tag/" - pushd "${OUT}/$tag/" - rm -rf _static/ - ln -s ../_static . - popd -done diff --git a/bash/fake-symlinks/ci-build.sh b/bash/fake-symlinks/ci-build.sh deleted file mode 100755 index 3beec66..0000000 --- a/bash/fake-symlinks/ci-build.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -set -x - -# -# Run tests and publish the generated site on the VPS server, -# where this hook is installed. -# - -unset GIT_DIR -CLONE="${DOLLAR}(mktemp -d)" -git clone . "${DOLLAR}CLONE" -pushd "${DOLLAR}CLONE" - -LOGS_PREFIX="/data/static/ci-logs" -LOGS_DIR="${DOLLAR}{LOGS_PREFIX}/$PROJECT" -mkdir -p "${DOLLAR}LOGS_DIR" - -LOGFILE="${DOLLAR}{LOGS_DIR}/${DOLLAR}(date -Is)-${DOLLAR}(git rev-parse master).log" - -touch "${DOLLAR}{LOGFILE}" -"${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" - -finish() { - printf "\n\n>>> exit status was %s\n" "${DOLLAR}?" >> "${DOLLAR}LOGFILE" - "${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" -} -trap finish EXIT - -echo Building 'test' derivation >> "${DOLLAR}LOGFILE" -nix-build -A test 2>&1 | tee -a "${DOLLAR}LOGFILE" -echo Building 'publishScript' derivation >> "${DOLLAR}LOGFILE" -nix-build -A publishScript 2>&1 | tee -a "${DOLLAR}LOGFILE" -echo Running the generated './result/bin/publish.sh' file >> "${DOLLAR}LOGFILE" -./result/bin/publish.sh >> "${DOLLAR}LOGFILE" diff --git a/bash/fake-symlinks/footer.html b/bash/fake-symlinks/footer.html deleted file mode 100644 index a710a48..0000000 --- a/bash/fake-symlinks/footer.html +++ /dev/null @@ -1,7 +0,0 @@ -{%- extends "!footer.html" %} - -{% block extrafooter %} -
    - Documentation licensed under CC BY-SA 4.0. -
    -{% endblock %} diff --git a/bash/fake-symlinks/layout-single-lang.html b/bash/fake-symlinks/layout-single-lang.html deleted file mode 100644 index 04724fc..0000000 --- a/bash/fake-symlinks/layout-single-lang.html +++ /dev/null @@ -1,48 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} -
    - - {{project}} - {{version}} - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -
    -
    -
    -{% endblock %} diff --git a/bash/fake-symlinks/pre-push-hook.sh b/bash/fake-symlinks/pre-push-hook.sh deleted file mode 100755 index 2cd3c1e..0000000 --- a/bash/fake-symlinks/pre-push-hook.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -scp ./scripts/ci-build.sh euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive -scp description euandreh.xyz:/data/git/$PROJECT.git/description diff --git a/bash/fake-symlinks/shell.nix b/bash/fake-symlinks/shell.nix deleted file mode 100644 index af299aa..0000000 --- a/bash/fake-symlinks/shell.nix +++ /dev/null @@ -1 +0,0 @@ -(import ./default.nix).shell diff --git a/bash/fake-symlinks/simple-pre-push-hook.sh b/bash/fake-symlinks/simple-pre-push-hook.sh deleted file mode 100755 index f07fb69..0000000 --- a/bash/fake-symlinks/simple-pre-push-hook.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -scp description euandreh.xyz:/data/git/$PROJECT.git/description diff --git a/bash/fake-symlinks/sphinx-base.conf.py b/bash/fake-symlinks/sphinx-base.conf.py deleted file mode 100644 index d4af766..0000000 --- a/bash/fake-symlinks/sphinx-base.conf.py +++ /dev/null @@ -1,34 +0,0 @@ -import json -with open('../metadata.json', 'r') as f: - metadata = json.loads(f.read()) - -import subprocess -all_versions = ['master'] + ( - subprocess - .check_output(["git", "tag"]) - .decode('ascii') - .strip() - .split() -) - -project = metadata['project-name'] -author = metadata['authors'][0] -version = metadata['version'] - -extensions = [ - 'sphinx.ext.extlinks' -] - -templates_path = ['_templates'] -html_theme = 'sphinx_rtd_theme' -html_theme_options = { - 'style_external_links': True -} - -html_show_sphinx = False -html_show_copyright = False - -extlinks = { - 'src': ('https://git.euandreh.xyz/$PROJECT/tree/%s', ''), - 'bug': ('https://$PROJECT.euandreh.xyz/bugs.html#%s', 'bug ') -} diff --git a/bash/fake-symlinks/sphinx-single-lang.conf.py b/bash/fake-symlinks/sphinx-single-lang.conf.py deleted file mode 100644 index 64f49dd..0000000 --- a/bash/fake-symlinks/sphinx-single-lang.conf.py +++ /dev/null @@ -1,5 +0,0 @@ -html_context = { - 'all_versions': all_versions, - 'sourcehut_url_prefix': 'https://git.euandreh.xyz/$PROJECT/tree/master/docs', - 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs', -} diff --git a/bash/fake-symlinks/utils.nix b/bash/fake-symlinks/utils.nix deleted file mode 100644 index 6975414..0000000 --- a/bash/fake-symlinks/utils.nix +++ /dev/null @@ -1,47 +0,0 @@ -# test = pkgs.stdenv.mkDerivation { -# inherit src; -# name = "songbooks-test"; -# buildInputs = shell.buildInputs; -# phases = "unpackPhase buildPhase"; -# buildPhase = '' -# patchShebangs . -# make check -# touch $out -# ''; -# }; -# site = let -# orgcss = builtins.fetchurl { -# url = "https://gongzhitaao.org/orgcss/org.css"; -# sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; -# }; -# htmlize = builtins.fetchurl { -# url = -# "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; -# sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; -# }; -# in pkgs.stdenv.mkDerivation { -# inherit src; -# name = "songbooks-site"; -# buildInputs = shell.buildInputs; -# phases = "unpackPhase buildPhase"; -# buildPhase = '' -# patchShebangs . -# mkdir $out -# cat ${orgcss} bugs/bugs.css > $out/styles.css -# ./scripts/build-site.sh $out ${htmlize} -# ''; -# }; -# publishScript = pkgs.writeShellScriptBin "publish.sh" '' -# set -Eeuo pipefail - -# OUT_PATH=/data/static/songbooks/ -# chmod -R +w $OUT_PATH # assert the previous dir is writable -# rm -rf $OUT_PATH -# cp -R ${site} $OUT_PATH -# chmod -R +w $OUT_PATH # make the new one writable too -# ''; -# shell = pkgs.mkShell { -# name = "songbooks-development-environment"; -# buildInputs = with pkgs; ; -# } -{ } diff --git a/bash/templates/.build.yml b/bash/templates/.build.yml new file mode 100644 index 0000000..b352f08 --- /dev/null +++ b/bash/templates/.build.yml @@ -0,0 +1,13 @@ +image: nixos/unstable +repositories: + nixpkgs: https://nixos.org/channels/nixpkgs-unstable +triggers: + - condition: failure + action: email + to: EuAndreh +sources: + - https://git.sr.ht/~euandreh/$PROJECT +tasks: + - tests: | + cd $PROJECT/ + nix-build -A test diff --git a/bash/templates/assert-nixfmt.sh b/bash/templates/assert-nixfmt.sh new file mode 100755 index 0000000..89964c9 --- /dev/null +++ b/bash/templates/assert-nixfmt.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +format() { + nix_file="${1}" + diff <(nixfmt < "${nix_file}") "${nix_file}" || { + echo "The file '${nix_file}' is unformatted. To fix it, run:" + echo " nixfmt ${nix_file}" + exit 1 + } +} +export -f format + +find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" diff --git a/bash/templates/assert-shellcheck.sh b/bash/templates/assert-shellcheck.sh new file mode 100755 index 0000000..3d6aca4 --- /dev/null +++ b/bash/templates/assert-shellcheck.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +find . -type f -name '*.sh' -print0 | xargs -0 shellcheck diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh new file mode 100755 index 0000000..a562840 --- /dev/null +++ b/bash/templates/assert-todos.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +if ag FIXME --ignore Makefile.am --ignore TODOs.org --ignore scripts/assert-todos.sh; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.org." + exit 1 +fi diff --git a/bash/templates/breadcrumbs.html b/bash/templates/breadcrumbs.html new file mode 100644 index 0000000..b0133fd --- /dev/null +++ b/bash/templates/breadcrumbs.html @@ -0,0 +1,15 @@ +{%- extends "!breadcrumbs.html" %} + +{% block breadcrumbs_aside %} +
  • + + View source + +
  • +
    +
  • + + Edit on GitLab + +
  • +{% endblock %} diff --git a/bash/templates/bugs.css b/bash/templates/bugs.css new file mode 100644 index 0000000..4dc3c0e --- /dev/null +++ b/bash/templates/bugs.css @@ -0,0 +1,45 @@ +/* EuAndreh's additions */ + +a.header-anchor { + font-size: 0.5em; + opacity: 0.5; +} + +.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO { + color: #fff; + padding: .1em .3em; + border-radius: 3px; + background-clip: padding-box; + font-size: 80%; + font-family: Lucida Console,monospace; + line-height: 1 +} + +/* + Replicate colors from: + https://git.sr.ht/~euandreh/dotfiles/tree/fcd9f9c4ef399d45d54927382dc1cdde251ebb0a/spacemacs.el#L866 +*/ + +.TODO { + background-color: brown; +} + +.DOING { + background-color: yellowgreen; +} + +.WAITING, .MEETING { + background-color: gray; +} + +.INACTIVE { + background-color: orange; +} + +.NEXT { + background-color: red; +} + +.CANCELLED, .DONE { + background-color: green; +} diff --git a/bash/templates/bugs.template.org b/bash/templates/bugs.template.org new file mode 100644 index 0000000..e12f02a --- /dev/null +++ b/bash/templates/bugs.template.org @@ -0,0 +1,21 @@ +#+TITLE: Bug listing for $PROJECT_UC +#+AUTHOR: EuAndreh +#+BIND: org-html-validation-link nil +#+BIND: org-html-scripts nil +#+BIND: org-html-postamble nil +#+BIND: org-export-html-headline-anchor-format nil +#+OPTIONS: toc:nil html-style:nil num:nil +#+HTML_HEAD: +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] +#+MACRO: bug bug\nbsp{}[[#$1][#$1]] +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) + +Bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. + +Send a new bug report: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%3A%20%3Cbug%20description%3E][~euandreh/$PROJECT@lists.sr.ht]]. + +/Você também pode relatar bugs e problemas em português./ + +#+TOC: headlines 1 diff --git a/bash/templates/build-site-single-lang.sh b/bash/templates/build-site-single-lang.sh new file mode 100755 index 0000000..5742ee8 --- /dev/null +++ b/bash/templates/build-site-single-lang.sh @@ -0,0 +1,52 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +OUT="${1}" +HTMLIZE="${2}" + +sed -e '/^\* Bugs$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + tail -n +2 | \ + cat bugs/bugs.template.org - > bugs.org + +emacs bugs.org \ + -l "${HTMLIZE}" \ + --eval '(setq org-export-allow-bind-keywords t)' \ + -f org-html-export-to-html \ + --batch \ + --kill + +# Add anchor link to bug headers +sed -E \ + -i \ + "s|^

    $|

    #\\1

    |" \ + bugs.html +sed 's|^

    Table of Contents

    $|

    Bugs index

    |' bugs.html > "${OUT}/bugs.html" + +pushd docs +make html +popd + +cp docs/favicon.ico "$OUT" +mv docs/_build/html/_static/ "${OUT}/_static/" + +TAGS="$(git tag | cat - <(echo master))" + +for tag in ${TAGS}; do + mkdir -p "tmp/$tag/" + git --work-tree="tmp/$tag/" checkout --recurse-submodules "$tag" -- . + git reset . + + pushd "tmp/$tag/docs/" + jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json + make html + popd + + mv "tmp/$tag/docs/_build/html/" "${OUT}/$tag/" + pushd "${OUT}/$tag/" + rm -rf _static/ + ln -s ../_static . + popd +done diff --git a/bash/templates/ci-build.sh b/bash/templates/ci-build.sh new file mode 100755 index 0000000..3beec66 --- /dev/null +++ b/bash/templates/ci-build.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +set -x + +# +# Run tests and publish the generated site on the VPS server, +# where this hook is installed. +# + +unset GIT_DIR +CLONE="${DOLLAR}(mktemp -d)" +git clone . "${DOLLAR}CLONE" +pushd "${DOLLAR}CLONE" + +LOGS_PREFIX="/data/static/ci-logs" +LOGS_DIR="${DOLLAR}{LOGS_PREFIX}/$PROJECT" +mkdir -p "${DOLLAR}LOGS_DIR" + +LOGFILE="${DOLLAR}{LOGS_DIR}/${DOLLAR}(date -Is)-${DOLLAR}(git rev-parse master).log" + +touch "${DOLLAR}{LOGFILE}" +"${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" + +finish() { + printf "\n\n>>> exit status was %s\n" "${DOLLAR}?" >> "${DOLLAR}LOGFILE" + "${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" +} +trap finish EXIT + +echo Building 'test' derivation >> "${DOLLAR}LOGFILE" +nix-build -A test 2>&1 | tee -a "${DOLLAR}LOGFILE" +echo Building 'publishScript' derivation >> "${DOLLAR}LOGFILE" +nix-build -A publishScript 2>&1 | tee -a "${DOLLAR}LOGFILE" +echo Running the generated './result/bin/publish.sh' file >> "${DOLLAR}LOGFILE" +./result/bin/publish.sh >> "${DOLLAR}LOGFILE" diff --git a/bash/templates/footer.html b/bash/templates/footer.html new file mode 100644 index 0000000..a710a48 --- /dev/null +++ b/bash/templates/footer.html @@ -0,0 +1,7 @@ +{%- extends "!footer.html" %} + +{% block extrafooter %} +
    + Documentation licensed under CC BY-SA 4.0. +
    +{% endblock %} diff --git a/bash/templates/layout-single-lang.html b/bash/templates/layout-single-lang.html new file mode 100644 index 0000000..04724fc --- /dev/null +++ b/bash/templates/layout-single-lang.html @@ -0,0 +1,48 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} +
    + + {{project}} + {{version}} + + +
    +
    +
    Versions
    + {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} +
    +
    +
    +{% endblock %} diff --git a/bash/templates/pre-push-hook.sh b/bash/templates/pre-push-hook.sh new file mode 100755 index 0000000..2cd3c1e --- /dev/null +++ b/bash/templates/pre-push-hook.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +scp ./scripts/ci-build.sh euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive +scp description euandreh.xyz:/data/git/$PROJECT.git/description diff --git a/bash/templates/shell.nix b/bash/templates/shell.nix new file mode 100644 index 0000000..af299aa --- /dev/null +++ b/bash/templates/shell.nix @@ -0,0 +1 @@ +(import ./default.nix).shell diff --git a/bash/templates/simple-pre-push-hook.sh b/bash/templates/simple-pre-push-hook.sh new file mode 100755 index 0000000..f07fb69 --- /dev/null +++ b/bash/templates/simple-pre-push-hook.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +scp description euandreh.xyz:/data/git/$PROJECT.git/description diff --git a/bash/templates/sphinx-base.conf.py b/bash/templates/sphinx-base.conf.py new file mode 100644 index 0000000..d4af766 --- /dev/null +++ b/bash/templates/sphinx-base.conf.py @@ -0,0 +1,34 @@ +import json +with open('../metadata.json', 'r') as f: + metadata = json.loads(f.read()) + +import subprocess +all_versions = ['master'] + ( + subprocess + .check_output(["git", "tag"]) + .decode('ascii') + .strip() + .split() +) + +project = metadata['project-name'] +author = metadata['authors'][0] +version = metadata['version'] + +extensions = [ + 'sphinx.ext.extlinks' +] + +templates_path = ['_templates'] +html_theme = 'sphinx_rtd_theme' +html_theme_options = { + 'style_external_links': True +} + +html_show_sphinx = False +html_show_copyright = False + +extlinks = { + 'src': ('https://git.euandreh.xyz/$PROJECT/tree/%s', ''), + 'bug': ('https://$PROJECT.euandreh.xyz/bugs.html#%s', 'bug ') +} diff --git a/bash/templates/sphinx-single-lang.conf.py b/bash/templates/sphinx-single-lang.conf.py new file mode 100644 index 0000000..64f49dd --- /dev/null +++ b/bash/templates/sphinx-single-lang.conf.py @@ -0,0 +1,5 @@ +html_context = { + 'all_versions': all_versions, + 'sourcehut_url_prefix': 'https://git.euandreh.xyz/$PROJECT/tree/master/docs', + 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs', +} diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix new file mode 100644 index 0000000..6975414 --- /dev/null +++ b/bash/templates/utils.nix @@ -0,0 +1,47 @@ +# test = pkgs.stdenv.mkDerivation { +# inherit src; +# name = "songbooks-test"; +# buildInputs = shell.buildInputs; +# phases = "unpackPhase buildPhase"; +# buildPhase = '' +# patchShebangs . +# make check +# touch $out +# ''; +# }; +# site = let +# orgcss = builtins.fetchurl { +# url = "https://gongzhitaao.org/orgcss/org.css"; +# sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; +# }; +# htmlize = builtins.fetchurl { +# url = +# "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; +# sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; +# }; +# in pkgs.stdenv.mkDerivation { +# inherit src; +# name = "songbooks-site"; +# buildInputs = shell.buildInputs; +# phases = "unpackPhase buildPhase"; +# buildPhase = '' +# patchShebangs . +# mkdir $out +# cat ${orgcss} bugs/bugs.css > $out/styles.css +# ./scripts/build-site.sh $out ${htmlize} +# ''; +# }; +# publishScript = pkgs.writeShellScriptBin "publish.sh" '' +# set -Eeuo pipefail + +# OUT_PATH=/data/static/songbooks/ +# chmod -R +w $OUT_PATH # assert the previous dir is writable +# rm -rf $OUT_PATH +# cp -R ${site} $OUT_PATH +# chmod -R +w $OUT_PATH # make the new one writable too +# ''; +# shell = pkgs.mkShell { +# name = "songbooks-development-environment"; +# buildInputs = with pkgs; ; +# } +{ } diff --git a/default.nix b/default.nix index 0b6efee..b479f63 100644 --- a/default.nix +++ b/default.nix @@ -17,8 +17,13 @@ in rec { }; test = utils.test [ utils.formatNix - (utils.shellcheck ".*(encrypted|npmrc).*") - (utils.fixme [ "default.nix" "utils.nix" "scripts/ad-hoc/pastebin.sh" ]) + (utils.shellcheck ".*(encrypted|npmrc|bash/templates/).*") + (utils.fixme [ + "default.nix" + "utils.nix" + "scripts/ad-hoc/pastebin.sh" + "bash/templates/" + ]) ]; publishScript = utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a36b109..7203623 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -95,12 +95,15 @@ in { meta = { broken = false; }; }; # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet = pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - fallback-quodlibet = pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + untested-quodlibet = + pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + fallback-quodlibet = + pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); active-quodlibet = untested-quodlibet; gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { - propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [ pkgs.python3Packages.youtube-dl]; + propagatedBuildInputs = oldAttrs.propagatedBuildInputs + ++ [ pkgs.python3Packages.youtube-dl ]; }); in with pkgs; [ diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index e239985..031978c 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -9,10 +9,7 @@ in { enableIPFS = false; enableFlatpak = true; # for usage with proprietary Skype allowUnfree = true; - proprietaryPackages = with pkgs; [ - slack - zoom-us - ]; + proprietaryPackages = with pkgs; [ slack zoom-us ]; cronJobs = [ common.cron.nixSearchUpdate common.cron.guixPull diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 9ed9221..95b350e 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -4,9 +4,9 @@ set -Eeuo pipefail finish() { status=$? if [[ $status = 0 ]]; then - STATUS='✅ SUCCESS (status $status)' + STATUS="✅ SUCCESS (status $status)" else - STATUS='❌ FAILURE (status $status)' + STATUS="❌ FAILURE (status $status)" fi mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -A"$LOG_FILE" <<< 'The log report is in the attachment.' diff --git a/scripts/cron/nix-search-update.sh b/scripts/cron/nix-search-update.sh index 0190bcb..d1f76c6 100755 --- a/scripts/cron/nix-search-update.sh +++ b/scripts/cron/nix-search-update.sh @@ -4,6 +4,7 @@ set -Eeuo pipefail exec &> /dev/stdout echo "Starting $(date -Is)" +# shellcheck source=/dev/null source ~/.spacemacs.env nix search -u just-a-label-so-the-cache-can-be-updated -- cgit v1.2.3 From 600b8effb50c3fb0ec9124159280222345e4f4e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Sep 2020 09:36:44 -0300 Subject: spacemacs.el: Fix git-link for Guix and add generic support for cgit --- spacemacs.el | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 7087996..52abb72 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -730,6 +730,19 @@ through `notmuch-message-attach-regex'." (let ((id (uuidgen-4))) (insert (format ":PROPERTIES:\n:CUSTOM_ID: %s\n:END:" id id id)))) +(defun git-link-cgit (hostname dirname filename _branch commit start _end) + (let* ((project-name (car (last (split-string dirname "/")))) + (format-string (pcase hostname + ("git.euandreh.xyz" "https://%s/%s/tree/%s?id=%s#n%s") + ("git.savannah.gnu.org" "https://%s/%s.git/tree/%s?id=%s#n%s") + (t "https://%s/%s.git/tree/%s?id=%s#n%s")))) + (format format-string + hostname + project-name + filename + commit + start))) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. @@ -931,14 +944,6 @@ This is the place where most of your configurations should be done. Unless it is (setq org-export-allow-bind-keywords t) (setq org-html-postamble t) - (defun git-link-savannah (hostname dirname filename _branch commit start _end) - (let ((project-name (cadr (split-string dirname "/")))) - (format "https://%s/cgit/%s.git/tree/%s?id=%s#n%s" - hostname - project-name - filename - commit - start))) (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) @@ -949,6 +954,10 @@ This is the place where most of your configurations should be done. Unless it is (with-eval-after-load 'info-lookup-mode (turn-off-evil-mode)) + (with-eval-after-load 'git-link + (add-to-list 'git-link-remote-alist '("git.savannah.gnu.org" git-link-cgit)) + (add-to-list 'git-link-remote-alist '("git.euandreh.xyz" git-link-cgit))) + t) (defun dotspacemacs/emacs-custom-settings () -- cgit v1.2.3 From a18e87d7b4846a5948015e121fdf480f4b5a6029 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Sep 2020 09:54:17 -0300 Subject: ci-build.sh: Always append everything to the logfile by default --- bash/templates/ci-build.sh | 28 ++++++++++++---------------- 1 file changed, 12 insertions(+), 16 deletions(-) diff --git a/bash/templates/ci-build.sh b/bash/templates/ci-build.sh index 3beec66..1907ba8 100755 --- a/bash/templates/ci-build.sh +++ b/bash/templates/ci-build.sh @@ -2,6 +2,12 @@ set -Eeuo pipefail set -x +LOGS_PREFIX="/data/static/ci-logs" +LOGS_DIR="${DOLLAR}{LOGS_PREFIX}/$PROJECT" +mkdir -p "${DOLLAR}LOGS_DIR" +LOGFILE="${DOLLAR}{LOGS_DIR}/${DOLLAR}(date -Is)-${DOLLAR}(git rev-parse master).log" +exec &> >(tee -a "${DOLLAR}{LOGFILE}") + # # Run tests and publish the generated site on the VPS server, # where this hook is installed. @@ -12,24 +18,14 @@ CLONE="${DOLLAR}(mktemp -d)" git clone . "${DOLLAR}CLONE" pushd "${DOLLAR}CLONE" -LOGS_PREFIX="/data/static/ci-logs" -LOGS_DIR="${DOLLAR}{LOGS_PREFIX}/$PROJECT" -mkdir -p "${DOLLAR}LOGS_DIR" - -LOGFILE="${DOLLAR}{LOGS_DIR}/${DOLLAR}(date -Is)-${DOLLAR}(git rev-parse master).log" - -touch "${DOLLAR}{LOGFILE}" -"${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" +"${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh finish() { - printf "\n\n>>> exit status was %s\n" "${DOLLAR}?" >> "${DOLLAR}LOGFILE" - "${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh >> "${DOLLAR}LOGFILE" + printf "\n\n>>> exit status was %s\n" "${DOLLAR}?" + "${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh } trap finish EXIT -echo Building 'test' derivation >> "${DOLLAR}LOGFILE" -nix-build -A test 2>&1 | tee -a "${DOLLAR}LOGFILE" -echo Building 'publishScript' derivation >> "${DOLLAR}LOGFILE" -nix-build -A publishScript 2>&1 | tee -a "${DOLLAR}LOGFILE" -echo Running the generated './result/bin/publish.sh' file >> "${DOLLAR}LOGFILE" -./result/bin/publish.sh >> "${DOLLAR}LOGFILE" +nix-build -A test +nix-build -A publishScript +./result/bin/publish.sh -- cgit v1.2.3 From bacc2008b25f8ffc9f8c6a539c65835764133d14 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 12:11:35 -0300 Subject: fake-symlinks.sh: Extract single-language copying into fn --- bash/fake-symlinks.sh | 45 +++++++++++++++++++++++++-------------------- 1 file changed, 25 insertions(+), 20 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3aaf8cb..b56b839 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -20,28 +20,33 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' + +documented-project-fake-ln() { + export PROJECT_UC="${1^}" + export PROJECT="$1" + envsubst < bugs.template.org > "$HOME/dev/libre/$PROJECT/bugs/bugs.template.org" + cp bugs.css "$HOME/dev/libre/$PROJECT/bugs/" + cp build-site-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" + envsubst < pre-push-hook.sh > "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" + chmod +x "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" + envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" + chmod +x "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" + cat <(printf "%s\n\n" "$PROJECT_UC") "$HOME/dev/libre/$PROJECT/description" <(printf "\n\nSee: %s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" + cp breadcrumbs.html "$HOME/dev/libre/$PROJECT/docs/_templates/" + cp footer.html "$HOME/dev/libre/$PROJECT/docs/_templates/" + cp layout-single-lang.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + cp assert-shellcheck.sh "$HOME/dev/libre/$PROJECT/scripts/" + cp assert-nixfmt.sh "$HOME/dev/libre/$PROJECT/scripts/" + cp assert-todos.sh "$HOME/dev/libre/$PROJECT/scripts/" + cp shell.nix "$HOME/dev/libre/$PROJECT/" + cp utils.nix "$HOME/dev/libre/$PROJECT/" + envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" +} + # single language, documented project for r in cement mediator; do - export PROJECT_UC="${r^}" - export PROJECT="$r" - envsubst < bugs.template.org > "$HOME/dev/libre/$r/bugs/bugs.template.org" - cp bugs.css "$HOME/dev/libre/$r/bugs/" - cp build-site-single-lang.sh "$HOME/dev/libre/$r/scripts/build-site.sh" - cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$r/docs/conf.py" - envsubst < pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" - chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" - envsubst < ci-build.sh > "$HOME/dev/libre/$r/scripts/ci-build.sh" - chmod +x "$HOME/dev/libre/$r/scripts/ci-build.sh" - cat <(printf "%s\n\n" "$PROJECT_UC") "$HOME/dev/libre/$r/description" <(printf "\n\nSee: %s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$r/README" - cp breadcrumbs.html "$HOME/dev/libre/$r/docs/_templates/" - cp footer.html "$HOME/dev/libre/$r/docs/_templates/" - cp layout-single-lang.html "$HOME/dev/libre/$r/docs/_templates/layout.html" - cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" - cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" - cp assert-todos.sh "$HOME/dev/libre/$r/scripts/" - cp shell.nix "$HOME/dev/libre/$r/" - cp utils.nix "$HOME/dev/libre/$r/" - envsubst < .build.yml > "$HOME/dev/libre/$r/.build.yml" + documented-project-fake-ln "$r" done for r in boneco website dotfiles; do -- cgit v1.2.3 From 8a1ad10f8d154820c0f64e9797c3d2f5783e242e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 12:21:34 -0300 Subject: bash/templates/layout-single-lang.html: Remove Languages section --- bash/templates/layout-single-lang.html | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bash/templates/layout-single-lang.html b/bash/templates/layout-single-lang.html index 04724fc..ae77e96 100644 --- a/bash/templates/layout-single-lang.html +++ b/bash/templates/layout-single-lang.html @@ -28,20 +28,6 @@ https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a8 {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -- cgit v1.2.3 From 32fd8d8d0ab9f62a728c2df95005105421da1ecf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 12:25:35 -0300 Subject: Add bash/templates/many-langs-layout.html --- bash/templates/many-langs-layout.html | 48 +++++++++++++++++++++++++++++++++++ 1 file changed, 48 insertions(+) create mode 100644 bash/templates/many-langs-layout.html diff --git a/bash/templates/many-langs-layout.html b/bash/templates/many-langs-layout.html new file mode 100644 index 0000000..91b962a --- /dev/null +++ b/bash/templates/many-langs-layout.html @@ -0,0 +1,48 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} +
    + + {{project}} + {{version}} | {{ current_lang }} + + +
    +
    +
    Versions
    + {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} +
    +
    +
    +{% endblock %} -- cgit v1.2.3 From b3127663767c697650113d819f88f709ddee08a3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 12:28:00 -0300 Subject: bashrc.sh: split .spacemacs.env from .bash.env --- bash/bashrc.sh | 3 ++- scripts/cron/nix-search-update.sh | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index f079415..13abcf3 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -19,4 +19,5 @@ source $DOTFILES/bash/facepalm/rotten-apple.sh source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/fake-symlinks.sh -declare -px > ~/.spacemacs.env +env > ~/.spacemacs.env +declare -px > ~/.bash.env diff --git a/scripts/cron/nix-search-update.sh b/scripts/cron/nix-search-update.sh index d1f76c6..b811c6f 100755 --- a/scripts/cron/nix-search-update.sh +++ b/scripts/cron/nix-search-update.sh @@ -5,7 +5,7 @@ exec &> /dev/stdout echo "Starting $(date -Is)" # shellcheck source=/dev/null -source ~/.spacemacs.env +source ~/.bash.env nix search -u just-a-label-so-the-cache-can-be-updated echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 3732c7ff333e3662b6fa1ebe1a4a7e8330b272e1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 12:28:20 -0300 Subject: spacemacs.el: Update generated section --- spacemacs.el | 19 ++++++++++++++----- 1 file changed, 14 insertions(+), 5 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 52abb72..7cb6fa2 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -971,11 +971,20 @@ This function is called at the very end of Spacemacs initialization." ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages - (quote - (tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))) + '(tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) '(safe-local-variable-values - (quote - ((eval progn + '((eval c-set-offset 'inlambda 0) + (eval c-set-offset 'access-label '-) + (eval c-set-offset 'substatement-open 0) + (eval c-set-offset 'arglist-cont-nonempty '+) + (eval c-set-offset 'arglist-cont 0) + (eval c-set-offset 'arglist-intro '+) + (eval c-set-offset 'inline-open 0) + (eval c-set-offset 'defun-open 0) + (eval c-set-offset 'innamespace 0) + (indicate-empty-lines . t) + (c-block-comment-prefix . " ") + (eval progn (pp-buffer) (indent-buffer)) (eval modify-syntax-entry 43 "'") @@ -986,7 +995,7 @@ This function is called at the very end of Spacemacs initialization." (javascript-backend . tern) (javascript-backend . lsp) (elixir-enable-compilation-checking . t) - (elixir-enable-compilation-checking))))) + (elixir-enable-compilation-checking)))) (custom-set-faces ;; custom-set-faces was added by Custom. ;; If you edit it by hand, you could mess it up, so be careful. -- cgit v1.2.3 From b83767b27e88c12a6e345e2e23ca4009e5cc3e7c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 12:32:56 -0300 Subject: Rename: bash/templates/{many-langs-layout => layout-many-langs}.html --- bash/templates/layout-many-langs.html | 48 +++++++++++++++++++++++++++++++++++ bash/templates/many-langs-layout.html | 48 ----------------------------------- 2 files changed, 48 insertions(+), 48 deletions(-) create mode 100644 bash/templates/layout-many-langs.html delete mode 100644 bash/templates/many-langs-layout.html diff --git a/bash/templates/layout-many-langs.html b/bash/templates/layout-many-langs.html new file mode 100644 index 0000000..91b962a --- /dev/null +++ b/bash/templates/layout-many-langs.html @@ -0,0 +1,48 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} +
    + + {{project}} + {{version}} | {{ current_lang }} + + +
    +
    +
    Versions
    + {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} +
    +
    +
    +{% endblock %} diff --git a/bash/templates/many-langs-layout.html b/bash/templates/many-langs-layout.html deleted file mode 100644 index 91b962a..0000000 --- a/bash/templates/many-langs-layout.html +++ /dev/null @@ -1,48 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} -
    - - {{project}} - {{version}} | {{ current_lang }} - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -
    -
    -
    -{% endblock %} -- cgit v1.2.3 From 799620e5671ea477456ec310e537b3ad9f126d6d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 13:35:11 -0300 Subject: Generate single-lang and many-langs layout from template --- bash/fake-symlinks.sh | 14 +++++++++ .../layout-many-langs.language-picker.html | 15 ++++++++++ bash/templates/layout-many-langs.page-path.html | 1 + .../layout-many-langs.version-section.html | 1 + .../layout-single-lang.language-picker.html | 0 bash/templates/layout-single-lang.page-path.html | 1 + .../layout-single-lang.version-section.html | 1 + bash/templates/layout.template.html | 34 ++++++++++++++++++++++ 8 files changed, 67 insertions(+) create mode 100644 bash/templates/layout-many-langs.language-picker.html create mode 100644 bash/templates/layout-many-langs.page-path.html create mode 100644 bash/templates/layout-many-langs.version-section.html create mode 100644 bash/templates/layout-single-lang.language-picker.html create mode 100644 bash/templates/layout-single-lang.page-path.html create mode 100644 bash/templates/layout-single-lang.version-section.html create mode 100644 bash/templates/layout.template.html diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index b56b839..bc8cbb2 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -21,6 +21,20 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' +# Derived from: +# https://unix.stackexchange.com/a/26289 +env \ + VERSION_SECTION="$(cat layout-single-lang.version-section.html)" \ + LANGUAGE_PICKER="$(cat layout-single-lang.language-picker.html)" \ + PAGE_PATH="$(cat layout-single-lang.page-path.html)" \ + envsubst < layout.template.html > layout-single-lang.html + +env \ + VERSION_SECTION="$(cat layout-many-langs.version-section.html)" \ + LANGUAGE_PICKER="$(cat layout-many-langs.language-picker.html)" \ + PAGE_PATH="$(cat layout-many-langs.page-path.html)" \ + envsubst < layout.template.html > layout-many-langs.html + documented-project-fake-ln() { export PROJECT_UC="${1^}" export PROJECT="$1" diff --git a/bash/templates/layout-many-langs.language-picker.html b/bash/templates/layout-many-langs.language-picker.html new file mode 100644 index 0000000..2262dd1 --- /dev/null +++ b/bash/templates/layout-many-langs.language-picker.html @@ -0,0 +1,15 @@ + +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} diff --git a/bash/templates/layout-many-langs.page-path.html b/bash/templates/layout-many-langs.page-path.html new file mode 100644 index 0000000..9e623f0 --- /dev/null +++ b/bash/templates/layout-many-langs.page-path.html @@ -0,0 +1 @@ + diff --git a/bash/templates/layout-many-langs.version-section.html b/bash/templates/layout-many-langs.version-section.html new file mode 100644 index 0000000..88e9976 --- /dev/null +++ b/bash/templates/layout-many-langs.version-section.html @@ -0,0 +1 @@ +{{version}} | {{ current_lang }} diff --git a/bash/templates/layout-single-lang.language-picker.html b/bash/templates/layout-single-lang.language-picker.html new file mode 100644 index 0000000..e69de29 diff --git a/bash/templates/layout-single-lang.page-path.html b/bash/templates/layout-single-lang.page-path.html new file mode 100644 index 0000000..287e71c --- /dev/null +++ b/bash/templates/layout-single-lang.page-path.html @@ -0,0 +1 @@ + diff --git a/bash/templates/layout-single-lang.version-section.html b/bash/templates/layout-single-lang.version-section.html new file mode 100644 index 0000000..cf5b038 --- /dev/null +++ b/bash/templates/layout-single-lang.version-section.html @@ -0,0 +1 @@ +{{version}} diff --git a/bash/templates/layout.template.html b/bash/templates/layout.template.html new file mode 100644 index 0000000..d4c43ac --- /dev/null +++ b/bash/templates/layout.template.html @@ -0,0 +1,34 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} + +{% endblock %} -- cgit v1.2.3 From 0108a461e6a1ac61774ac9a5503e35cba30ed47a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 13:40:46 -0300 Subject: Add support full support for many-langs, include songbooks project --- bash/fake-symlinks.sh | 24 ++++++++--- bash/templates/build-site-many-langs.sh | 68 ++++++++++++++++++++++++++++++++ bash/templates/sphinx-many-langs.conf.py | 14 +++++++ 3 files changed, 101 insertions(+), 5 deletions(-) create mode 100755 bash/templates/build-site-many-langs.sh create mode 100644 bash/templates/sphinx-many-langs.conf.py diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index bc8cbb2..75ffba3 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -38,18 +38,27 @@ env \ documented-project-fake-ln() { export PROJECT_UC="${1^}" export PROJECT="$1" + I18N="$2" + + if [[ "$I18N" = true ]]; then + # cp build-site-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-many-langs.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" + cp layout-many-langs.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + else + cp build-site-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" + cp layout-single-lang.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + fi + envsubst < bugs.template.org > "$HOME/dev/libre/$PROJECT/bugs/bugs.template.org" cp bugs.css "$HOME/dev/libre/$PROJECT/bugs/" - cp build-site-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" - cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" envsubst < pre-push-hook.sh > "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" chmod +x "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" - cat <(printf "%s\n\n" "$PROJECT_UC") "$HOME/dev/libre/$PROJECT/description" <(printf "\n\nSee: %s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" + cat <(printf "%s\n\n" "$PROJECT_UC") "$HOME/dev/libre/$PROJECT/description" <(printf "\n\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" cp breadcrumbs.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp footer.html "$HOME/dev/libre/$PROJECT/docs/_templates/" - cp layout-single-lang.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" cp assert-shellcheck.sh "$HOME/dev/libre/$PROJECT/scripts/" cp assert-nixfmt.sh "$HOME/dev/libre/$PROJECT/scripts/" cp assert-todos.sh "$HOME/dev/libre/$PROJECT/scripts/" @@ -60,7 +69,12 @@ documented-project-fake-ln() { # single language, documented project for r in cement mediator; do - documented-project-fake-ln "$r" + documented-project-fake-ln "$r" false +done + +# multiple languages, documented project +for r in songbooks; do + documented-project-fake-ln "$r" true done for r in boneco website dotfiles; do diff --git a/bash/templates/build-site-many-langs.sh b/bash/templates/build-site-many-langs.sh new file mode 100755 index 0000000..6c0010c --- /dev/null +++ b/bash/templates/build-site-many-langs.sh @@ -0,0 +1,68 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +OUT="${1}" +HTMLIZE="${2}" + +sed -e '/^\* Bugs$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + tail -n +2 | \ + cat bugs/bugs.template.org - > bugs.org + +emacs bugs.org \ + -l "${HTMLIZE}" \ + --eval '(setq org-export-allow-bind-keywords t)' \ + -f org-html-export-to-html \ + --batch \ + --kill + +# Add anchor link to bug headers +sed -E \ + -i \ + "s|^

    $|

    #\\1

    |" \ + bugs.html +sed 's|^

    Table of Contents

    $|

    Bugs index

    |' bugs.html > "${OUT}/bugs.html" + +pushd docs +make html +popd + +cp docs/favicon.ico "$OUT" +mv docs/_build/html/_static/ "${OUT}/_static/" + +LANGS="$(jq -r .langs[] < metadata.json)" +TAGS="$(git tag | cat - <(echo master))" + +for lang in ${LANGS}; do + for tag in ${TAGS}; do + mkdir -p "tmp/$lang/$tag/" + git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . + git reset . + git checkout . + + pushd "tmp/$lang/$tag/docs/" + jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json + + RENAMES="$(jq ".$lang" < ../docs/i18n-pagenames.json | \ + jq -r 'to_entries[] | [.key, .value] | @csv' | \ + tr -d '\"')" + for rename in $RENAMES; do + from="$(echo "$rename" | cut -d, -f1)" + to="$(echo "$rename" | cut -d, -f2)" + mv "${from}.rst" "${to}.rst" || echo "^^^ skipping error on files with the same name ^^^" + sed -i "s/^ $from/ $to/" index.rst + done + + make SPHINXOPTS="-D language=$lang" html + popd + + mkdir "${OUT}/$lang/" + mv "tmp/$lang/$tag/docs/_build/html/" "${OUT}/$lang/$tag/" + pushd "${OUT}/$lang/$tag/" + rm -rf _static/ + ln -s ../../_static . + popd + done +done diff --git a/bash/templates/sphinx-many-langs.conf.py b/bash/templates/sphinx-many-langs.conf.py new file mode 100644 index 0000000..92de781 --- /dev/null +++ b/bash/templates/sphinx-many-langs.conf.py @@ -0,0 +1,14 @@ + +with open('i18n-pagenames.json', 'r') as f: + i18n_pagenames = json.loads(f.read()) + +html_context = { + 'all_versions': all_versions, + 'langs': metadata['langs'], + 'current_lang': metadata['current-lang'], + 'sourcehut_url_prefix': 'https://git.euandreh.xyz/songbooks/tree/master/docs', + 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs', + 'i18n_pagenames': i18n_pagenames +} + +gettext_compact = False -- cgit v1.2.3 From 777df4fdb6ea529e0ab0a030501feb3dc72cd6e0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 14:05:48 -0300 Subject: Do fake-symlinks for utils.nix --- bash/fake-symlinks.sh | 3 +- bash/templates/utils-i18n.nix | 52 +++++++++++++++++++++++++ bash/templates/utils.nix | 89 +++++++++++++++++++++---------------------- 3 files changed, 97 insertions(+), 47 deletions(-) create mode 100644 bash/templates/utils-i18n.nix diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 75ffba3..7fca44f 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -44,12 +44,14 @@ documented-project-fake-ln() { # cp build-site-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-many-langs.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" cp layout-many-langs.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" else cp build-site-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" cp layout-single-lang.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" fi + envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/utils.nix" envsubst < bugs.template.org > "$HOME/dev/libre/$PROJECT/bugs/bugs.template.org" cp bugs.css "$HOME/dev/libre/$PROJECT/bugs/" envsubst < pre-push-hook.sh > "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" @@ -63,7 +65,6 @@ documented-project-fake-ln() { cp assert-nixfmt.sh "$HOME/dev/libre/$PROJECT/scripts/" cp assert-todos.sh "$HOME/dev/libre/$PROJECT/scripts/" cp shell.nix "$HOME/dev/libre/$PROJECT/" - cp utils.nix "$HOME/dev/libre/$PROJECT/" envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" } diff --git a/bash/templates/utils-i18n.nix b/bash/templates/utils-i18n.nix new file mode 100644 index 0000000..9f9d242 --- /dev/null +++ b/bash/templates/utils-i18n.nix @@ -0,0 +1,52 @@ +{ pkgs }: rec { + sphinx-intl = with pkgs.python3.pkgs; + buildPythonPackage rec { + pname = "sphinx-intl"; + version = "2.0.1"; + src = fetchPypi { + inherit pname version; + sha256 = "1d1q0sanjp4nkfvhsxi75zf3xjyyi8nzxvl3v7l0jy9ld70nwnmj"; + }; + propagatedBuildInputs = with pkgs.python3Packages; [ Babel click sphinx ]; + }; + dicts = rec { + mkDict = let + prefix = + "https://raw.githubusercontent.com/wooorm/dictionaries/61016e00e276f9bf5e52cbc6c02a45f2e49b2c7e/dictionaries"; + in { lang, dicSHA256, affSHA256 }: + let + dic = builtins.fetchurl { + url = "${DOLLAR}{prefix}/${DOLLAR}{lang}/index.dic"; + sha256 = dicSHA256; + }; + aff = builtins.fetchurl { + url = "${DOLLAR}{prefix}/${DOLLAR}{lang}/index.aff"; + sha256 = affSHA256; + }; + in pkgs.stdenv.mkDerivation { + name = "songbooks-dict-${DOLLAR}{lang}"; + builder = builtins.toFile "builder.sh" '' + source ${DOLLAR}stdenv/setup + install -dm755 ${DOLLAR}out/share/hunspell + install -m644 ${DOLLAR}{dic} ${DOLLAR}out/share/hunspell/${DOLLAR}{lang}.dic + install -m644 ${DOLLAR}{aff} ${DOLLAR}out/share/hunspell/${DOLLAR}{lang}.aff + runHook postInstall + ''; + }; + en = mkDict { + lang = "en"; + dicSHA256 = "1k4660ccwwpwac0rc7b8ih3vd24kxgvljkrakv2l1f72yfpw3bp2"; + affSHA256 = "0yvc2fhc03y0y1gwjyb20ifcrxnzm3ama1fri9r5gna092fz3qca"; + }; + pt = mkDict { + lang = "pt"; + dicSHA256 = "1z0kfxv8m361xhp4zwdlsn2ib8q3rnljj0b2s4482alyxpd00h9x"; + affSHA256 = "1ssj1g7qwh0lv3ajzvchwsfr7cgzrlqms28m1j3gm1y2avi50qhw"; + }; + fr = mkDict { + lang = "fr"; + dicSHA256 = "10p6jlk9j117mjd1z3dp3vfszcvxqha11kfvksqhvrq4ld9xwzbn"; + affSHA256 = "0d6k608h7gm1za3vdq1fhlwqzz2zxg1z0bx1bfvi0spg4a2mn09p"; + }; + }; +} diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 6975414..333a56a 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -1,47 +1,44 @@ -# test = pkgs.stdenv.mkDerivation { -# inherit src; -# name = "songbooks-test"; -# buildInputs = shell.buildInputs; -# phases = "unpackPhase buildPhase"; -# buildPhase = '' -# patchShebangs . -# make check -# touch $out -# ''; -# }; -# site = let -# orgcss = builtins.fetchurl { -# url = "https://gongzhitaao.org/orgcss/org.css"; -# sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; -# }; -# htmlize = builtins.fetchurl { -# url = -# "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; -# sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; -# }; -# in pkgs.stdenv.mkDerivation { -# inherit src; -# name = "songbooks-site"; -# buildInputs = shell.buildInputs; -# phases = "unpackPhase buildPhase"; -# buildPhase = '' -# patchShebangs . -# mkdir $out -# cat ${orgcss} bugs/bugs.css > $out/styles.css -# ./scripts/build-site.sh $out ${htmlize} -# ''; -# }; -# publishScript = pkgs.writeShellScriptBin "publish.sh" '' -# set -Eeuo pipefail +{ pkgs, src }: rec { + test = shellBuildInputs: pkgs.stdenv.mkDerivation { + inherit src; + name = "$PROJECT-test"; + buildInputs = shellBuildInputs; + phases = "unpackPhase buildPhase"; + buildPhase = '' + patchShebangs . + make check + touch ${DOLLAR}out + ''; + }; + site = shellBuildInputs: let + orgcss = builtins.fetchurl { + url = "https://gongzhitaao.org/orgcss/org.css"; + sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; + }; + htmlize = builtins.fetchurl { + url = + "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; + sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; + }; + in pkgs.stdenv.mkDerivation { + inherit src; + name = "$PROJECT-site"; + buildInputs = shellBuildInputs; + phases = "unpackPhase buildPhase"; + buildPhase = '' + patchShebangs . + mkdir ${DOLLAR}out + cat ${DOLLAR}{orgcss} bugs/bugs.css > ${DOLLAR}out/styles.css + ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} + ''; + }; + publishScript = pkgs.writeShellScriptBin "publish.sh" '' + set -Eeuo pipefail -# OUT_PATH=/data/static/songbooks/ -# chmod -R +w $OUT_PATH # assert the previous dir is writable -# rm -rf $OUT_PATH -# cp -R ${site} $OUT_PATH -# chmod -R +w $OUT_PATH # make the new one writable too -# ''; -# shell = pkgs.mkShell { -# name = "songbooks-development-environment"; -# buildInputs = with pkgs; ; -# } -{ } + OUT_PATH=/data/static/$PROJECT/ + chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable + rm -rf ${DOLLAR}OUT_PATH + cp -R ${DOLLAR}{site} ${DOLLAR}OUT_PATH + chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too + ''; +} -- cgit v1.2.3 From ce2ac4c7c08d85da612c69141c2f54711102be3a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 15:42:00 -0300 Subject: templates/: Fix utils.nix and sphinx-single-lang.conf.py --- bash/templates/sphinx-single-lang.conf.py | 3 ++- bash/templates/utils.nix | 5 +++-- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bash/templates/sphinx-single-lang.conf.py b/bash/templates/sphinx-single-lang.conf.py index 64f49dd..f01eaae 100644 --- a/bash/templates/sphinx-single-lang.conf.py +++ b/bash/templates/sphinx-single-lang.conf.py @@ -1,5 +1,6 @@ + html_context = { 'all_versions': all_versions, - 'sourcehut_url_prefix': 'https://git.euandreh.xyz/$PROJECT/tree/master/docs', + 'sourcehut_url_prefix': 'https://git.euandreh.xyz/$PROJECT/tree/docs', 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs', } diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 333a56a..e0b42c5 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -32,13 +32,14 @@ ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} ''; }; - publishScript = pkgs.writeShellScriptBin "publish.sh" '' + publishScript = shellBuildInputs: pkgs.writeShellScriptBin "publish.sh" '' set -Eeuo pipefail OUT_PATH=/data/static/$PROJECT/ + mkdir -p ${DOLLAR}OUT_PATH chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable rm -rf ${DOLLAR}OUT_PATH - cp -R ${DOLLAR}{site} ${DOLLAR}OUT_PATH + cp -R ${DOLLAR}{site shellBuildInputs} ${DOLLAR}OUT_PATH chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too ''; } -- cgit v1.2.3 From 72984842341b8f2c00f7675f03663234e31533e2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 18:59:16 -0300 Subject: spacemacs.el: Enable auto-fill for org-mode --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 7cb6fa2..01d6bd5 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -756,6 +756,7 @@ This is the place where most of your configurations should be done. Unless it is (add-hook 'markdown-mode-hook 'turn-on-auto-fill) (add-hook 'rst-mode 'turn-on-auto-fill) + (add-hook 'org-mode 'turn-on-auto-fill) (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/guix/guix")) -- cgit v1.2.3 From fc2182af9507a4d598c355f0553df2b885643322 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 19:07:25 -0300 Subject: WIP Fix ArchiveBox I couldn't make it work yet --- scripts/cron/archive.sh | 39 +++++++++++++++++---------------------- 1 file changed, 17 insertions(+), 22 deletions(-) diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh index b96768a..6b612f6 100755 --- a/scripts/cron/archive.sh +++ b/scripts/cron/archive.sh @@ -1,9 +1,10 @@ #!/usr/bin/env bash set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" exec &> /dev/stdout -echo "Starting: $(date -Is)" +# echo "Starting: $(date -Is)" + +# FWIPIXME: support RSS bookmarks export end="\033[0m" export red="\033[0;31m" @@ -13,20 +14,13 @@ red() { echo -e "${red}${1}${end}"; } green() { echo -e "${green}${1}${end}"; } yellow() { echo -e "${yellow}${1}${end}"; } -ARCHIVE_BOX="${HOME}/dev/misc/ArchiveBox/bin/archivebox" -[[ -f "${ARCHIVE_BOX}" ]] || { - red "ArchiveBox executable not found. Exitting." - exit 2 -} - -TMPDIR="$(mktemp -d)" -pushd "${TMPDIR}" > /dev/null - # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 -PROFILE_PLACES_DB=$(ls ~/.mozilla/firefox/*.default/places.sqlite) -yellow "Exporting content from ${PROFILE_PLACES_DB} in ${TMPDIR}..." -cp "${PROFILE_PLACES_DB}" places.sqlite +pushd "$(mktemp -d)" > /dev/null + +# copy the database to avoid locking issues +cp ~/.mozilla/firefox/*.default/places.sqlite places.sqlite + QUERY=$(cat < bookmarks-archive.json -green "Done." -popd > /dev/null +sqlite3 places.sqlite "${QUERY}" +# | jq > bookmarks-archive.json +# green "Done." +# popd > /dev/null -export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" -export FETCH_MEDIA=False -export TIMEOUT=180 # default is too small: 60 (seconds) +# export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" +# export FETCH_MEDIA=False +# export TIMEOUT=180 # default is too small: 60 (seconds) -"${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" +# "${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" -echo "Finishing: $(date -Is)" +# echo "Finishing: $(date -Is)" -- cgit v1.2.3 From ab2d454ac178bc35c904d4ec5bfec854c67ebd6d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 19:11:46 -0300 Subject: Remove gitconfig.ini from git-crypt --- .gitattributes | 1 - git/gitconfig.ini | Bin 2112 -> 0 bytes 2 files changed, 1 deletion(-) delete mode 100644 git/gitconfig.ini diff --git a/.gitattributes b/.gitattributes index 1a6b701..83fd8de 100644 --- a/.gitattributes +++ b/.gitattributes @@ -1,3 +1,2 @@ lein/profiles.clj filter=git-crypt diff=git-crypt -git/gitconfig.ini filter=git-crypt diff=git-crypt lein/deps.edn filter=git-crypt diff=git-crypt diff --git a/git/gitconfig.ini b/git/gitconfig.ini deleted file mode 100644 index d002439..0000000 Binary files a/git/gitconfig.ini and /dev/null differ -- cgit v1.2.3 From 8ee72df70281c0baccf4de56fb59b1ef7f965579 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 19:15:29 -0300 Subject: Don't encrypt commited gitconfig --- bash/fake-symlinks.sh | 4 +--- bash/symlinks.sh | 1 - git/gitconfig.ini | 61 +++++++++++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 62 insertions(+), 4 deletions(-) create mode 100644 git/gitconfig.ini diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 7fca44f..53cf3cd 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash -if [[ -n "${GITHUB_TOKEN}" ]]; then - envsubst < "${DOTFILES}/git/gitconfig.ini" > ~/.gitconfig -fi +cat "${DOTFILES}/git/gitconfig.ini" ~/annex/secret/Git/gitconfig.ini > ~/.gitconfig EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" [[ -d "${EMACS_LAYOUTS_DIR}" ]] && { diff --git a/bash/symlinks.sh b/bash/symlinks.sh index bd0ddec..4d3fe63 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -15,7 +15,6 @@ ln -fs "$DOTFILES/bash/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/bash/bash_profile.sh" ~/.bash_profile ln -fs "$DOTFILES/git/gitattributes" ~/.gitattributes ln -fs "$DOTFILES/git/gitignore" ~/.gitignore_global -ln -fs "$DOTFILES/encrypted/nugitconfig.ini" ~/.nugitconfig ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap diff --git a/git/gitconfig.ini b/git/gitconfig.ini new file mode 100644 index 0000000..b4cd6d0 --- /dev/null +++ b/git/gitconfig.ini @@ -0,0 +1,61 @@ +[user] + email = eu@euandre.org + name = EuAndreh + signingkey = 81F90EC3CD356060 +[transfer] + # https://matthiasbussonnier.com/posts/33-sign-commits-on-github.md.html + fsckobjects = true +[log] + # https://git-scm.com/docs/git-config#git-config-logshowSignature + # showSignature = true +[diff "sqlite3"] + # drops a db file into sqlite3 and runs .dump before any diff comparisons + binary = true + textconv = "echo .dump | sqlite3" +[diff "odf"] + # https://medium.com/@mbrehin/git-advanced-diff-odt-pdf-doc-xls-ppt-25afbf4f1105 + # http://blog.riemann.cc/2013/04/23/versioning-of-openoffice-libreoffice-documents-using-git/ + # https://illidiumq36.wordpress.com/2013/10/06/diff-odp_files_using_git/ + textconv = odt2txt +[core] + editor = vi + pager = diff-so-fancy | less --tabs=4 -RFX + excludesfile = ~/.gitignore_global + + # https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important#5834094 + # https://help.github.com/articles/dealing-with-line-endings/ + autocrlf = input + attributesfile = ~/.gitattributes +[push] + # https://stackoverflow.com/a/22933955 + default = current +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true + fetchrecentalways = true + fetchrecentrefsdays = 15 + fetchrecentcommitsdays = 7 + fetchrecentremoterefs = true + followTags = true +[alias] + sha = rev-parse HEAD + sha7 = ! git sha | head -c 7 + prune-branches = !git branch --merged | grep -v master | xargs git branch -d + sync = !git annex sync s3 && git annex sync origin + tarball = !git-tarball.sh +[annex] + gnupg-options = --no-tty + gnupg-decrypt-options = --no-tty + autocommit = false + synccontent = true + genmetadata = true +[commit] + gpgsign = true +[fetch] + prune = true +[pack] + packSizeLimit = 2g +[pull] + rebase = false \ No newline at end of file -- cgit v1.2.3 From 4c497e0ae08cadc641ae88a10280951b0c2108d8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 19:16:22 -0300 Subject: nixfmt ./bash/templates/utils.nix --- bash/templates/utils.nix | 83 +++++++++++++++++++++++++----------------------- 1 file changed, 43 insertions(+), 40 deletions(-) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index e0b42c5..e101197 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -1,45 +1,48 @@ { pkgs, src }: rec { - test = shellBuildInputs: pkgs.stdenv.mkDerivation { - inherit src; - name = "$PROJECT-test"; - buildInputs = shellBuildInputs; - phases = "unpackPhase buildPhase"; - buildPhase = '' - patchShebangs . - make check - touch ${DOLLAR}out - ''; - }; - site = shellBuildInputs: let - orgcss = builtins.fetchurl { - url = "https://gongzhitaao.org/orgcss/org.css"; - sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; + test = shellBuildInputs: + pkgs.stdenv.mkDerivation { + inherit src; + name = "$PROJECT-test"; + buildInputs = shellBuildInputs; + phases = "unpackPhase buildPhase"; + buildPhase = '' + patchShebangs . + make check + touch ${DOLLAR}out + ''; }; - htmlize = builtins.fetchurl { - url = - "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; - sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; + site = shellBuildInputs: + let + orgcss = builtins.fetchurl { + url = "https://gongzhitaao.org/orgcss/org.css"; + sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; + }; + htmlize = builtins.fetchurl { + url = + "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; + sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; + }; + in pkgs.stdenv.mkDerivation { + inherit src; + name = "$PROJECT-site"; + buildInputs = shellBuildInputs; + phases = "unpackPhase buildPhase"; + buildPhase = '' + patchShebangs . + mkdir ${DOLLAR}out + cat ${DOLLAR}{orgcss} bugs/bugs.css > ${DOLLAR}out/styles.css + ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} + ''; }; - in pkgs.stdenv.mkDerivation { - inherit src; - name = "$PROJECT-site"; - buildInputs = shellBuildInputs; - phases = "unpackPhase buildPhase"; - buildPhase = '' - patchShebangs . - mkdir ${DOLLAR}out - cat ${DOLLAR}{orgcss} bugs/bugs.css > ${DOLLAR}out/styles.css - ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} - ''; - }; - publishScript = shellBuildInputs: pkgs.writeShellScriptBin "publish.sh" '' - set -Eeuo pipefail + publishScript = shellBuildInputs: + pkgs.writeShellScriptBin "publish.sh" '' + set -Eeuo pipefail - OUT_PATH=/data/static/$PROJECT/ - mkdir -p ${DOLLAR}OUT_PATH - chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable - rm -rf ${DOLLAR}OUT_PATH - cp -R ${DOLLAR}{site shellBuildInputs} ${DOLLAR}OUT_PATH - chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too - ''; + OUT_PATH=/data/static/$PROJECT/ + mkdir -p ${DOLLAR}OUT_PATH + chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable + rm -rf ${DOLLAR}OUT_PATH + cp -R ${DOLLAR}{site shellBuildInputs} ${DOLLAR}OUT_PATH + chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too + ''; } -- cgit v1.2.3 From ae8cb787fb555a80de3dff7586f5938063167190 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 19:17:14 -0300 Subject: bash/fake-symlinks.sh: shellcheck disable=2043 --- bash/fake-symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 53cf3cd..aa089ee 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -72,6 +72,7 @@ for r in cement mediator; do done # multiple languages, documented project +# shellcheck disable=2043 for r in songbooks; do documented-project-fake-ln "$r" true done -- cgit v1.2.3 From ffac57126155c07d468cb40613b56bf472db26ee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 4 Sep 2020 20:56:24 -0300 Subject: gitconfig.ini: Add newline so cat can work --- git/gitconfig.ini | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index b4cd6d0..dd87151 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -58,4 +58,4 @@ [pack] packSizeLimit = 2g [pull] - rebase = false \ No newline at end of file + rebase = false -- cgit v1.2.3 From 4338bb1f382c0d27a4b4297c860fd8ea339a33e8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 6 Sep 2020 07:13:08 -0300 Subject: spacemacs.el: Enable spellchecking by default --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 01d6bd5..80d4912 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -101,7 +101,7 @@ This function should only modify configuration layer settings." shell-default-height 30 shell-default-position 'bottom) (spell-checking :variables - spell-checking-enable-by-default nil + spell-checking-enable-by-default t spell-checking-enable-auto-dictionary t) (haskell :variables haskell-enable-hindent t -- cgit v1.2.3 From 38a56bb1ca2f10c518ed9f8441590d3c471c38f5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 6 Sep 2020 07:13:24 -0300 Subject: Use variables for bluetooth device address --- scripts/ad-hoc/bt.sh | 5 ++++- scripts/ad-hoc/setup-bt.sh | 11 +++++++---- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/scripts/ad-hoc/bt.sh b/scripts/ad-hoc/bt.sh index 2d3cedb..4cafe33 100755 --- a/scripts/ad-hoc/bt.sh +++ b/scripts/ad-hoc/bt.sh @@ -1,6 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail +# ADDR='00:02:BF:03:B8:9A' +ADDR='41:42:00:00:03:05' + yellow "Connecting to the device..." -bluetoothctl -- connect 00:02:BF:03:B8:9A +bluetoothctl -- connect "$ADDR" green "Done!" diff --git a/scripts/ad-hoc/setup-bt.sh b/scripts/ad-hoc/setup-bt.sh index bc7658a..f6d1ac7 100755 --- a/scripts/ad-hoc/setup-bt.sh +++ b/scripts/ad-hoc/setup-bt.sh @@ -1,14 +1,17 @@ #!/usr/bin/env bash set -Eeuo pipefail +# ADDR='00:02:BF:03:B8:9A' +ADDR='41:42:00:00:03:05' + yellow "Removing the device..." -bluetoothctl -- remove 00:02:BF:03:B8:9A ||: +bluetoothctl -- remove "$ADDR" ||: yellow "Scanning available devices..." bluetoothctl --timeout 10 -- scan on yellow "Pairing device..." -bluetoothctl -- pair 00:02:BF:03:B8:9A +bluetoothctl -- pair "$ADDR" yellow "Configuring device..." -bluetoothctl -- trust 00:02:BF:03:B8:9A +bluetoothctl -- trust "$ADDR" yellow "Connecting to the device..." -bluetoothctl -- connect 00:02:BF:03:B8:9A +bluetoothctl -- connect "$ADDR" green "Done!" -- cgit v1.2.3 From 66b84e2e761db721302255ceaef77f2459745b5a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 6 Sep 2020 07:13:46 -0300 Subject: configuration.nix: Remove services.bluetooth.extraConfig --- nixos/configuration.nix | 6 ------ 1 file changed, 6 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7203623..6815ec8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -30,12 +30,6 @@ in { package = pkgs.pulseaudioFull; enable = true; extraModules = [ pkgs.pulseaudio-modules-bt ]; - extraConfig = '' - # Switch between headset and headphone mode (e.g. for calls and music) automatically - load-module module-bluetooth-policy auto_switch=2 - # Echo cancellation and noise cleanup of mic - load-module module-echo-cancel aec_method=webrtc - ''; }; }; -- cgit v1.2.3 From 0fa14a6c05899c991d486d966c52d6d7b06e7854 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Sep 2020 07:55:38 -0300 Subject: fake-symlinks.sh: Use TODOs.org for both tasks and bugs as a "workflow" --- bash/fake-symlinks.sh | 4 +-- bash/templates/bugs.css | 45 ----------------------------- bash/templates/bugs.template.org | 21 -------------- bash/templates/build-site-single-lang.sh | 13 ++++----- bash/templates/preamble.org | 24 ++++++++++++++++ bash/templates/utils.nix | 2 +- bash/templates/workflow.css | 49 ++++++++++++++++++++++++++++++++ 7 files changed, 81 insertions(+), 77 deletions(-) delete mode 100644 bash/templates/bugs.css delete mode 100644 bash/templates/bugs.template.org create mode 100644 bash/templates/preamble.org create mode 100644 bash/templates/workflow.css diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index aa089ee..862939d 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -50,8 +50,8 @@ documented-project-fake-ln() { fi envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/utils.nix" - envsubst < bugs.template.org > "$HOME/dev/libre/$PROJECT/bugs/bugs.template.org" - cp bugs.css "$HOME/dev/libre/$PROJECT/bugs/" + envsubst < preamble.org > "$HOME/dev/libre/$PROJECT/workflow/preamble.org" + cp workflow.css "$HOME/dev/libre/$PROJECT/workflow/" envsubst < pre-push-hook.sh > "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" chmod +x "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" diff --git a/bash/templates/bugs.css b/bash/templates/bugs.css deleted file mode 100644 index 4dc3c0e..0000000 --- a/bash/templates/bugs.css +++ /dev/null @@ -1,45 +0,0 @@ -/* EuAndreh's additions */ - -a.header-anchor { - font-size: 0.5em; - opacity: 0.5; -} - -.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO { - color: #fff; - padding: .1em .3em; - border-radius: 3px; - background-clip: padding-box; - font-size: 80%; - font-family: Lucida Console,monospace; - line-height: 1 -} - -/* - Replicate colors from: - https://git.sr.ht/~euandreh/dotfiles/tree/fcd9f9c4ef399d45d54927382dc1cdde251ebb0a/spacemacs.el#L866 -*/ - -.TODO { - background-color: brown; -} - -.DOING { - background-color: yellowgreen; -} - -.WAITING, .MEETING { - background-color: gray; -} - -.INACTIVE { - background-color: orange; -} - -.NEXT { - background-color: red; -} - -.CANCELLED, .DONE { - background-color: green; -} diff --git a/bash/templates/bugs.template.org b/bash/templates/bugs.template.org deleted file mode 100644 index e12f02a..0000000 --- a/bash/templates/bugs.template.org +++ /dev/null @@ -1,21 +0,0 @@ -#+TITLE: Bug listing for $PROJECT_UC -#+AUTHOR: EuAndreh -#+BIND: org-html-validation-link nil -#+BIND: org-html-scripts nil -#+BIND: org-html-postamble nil -#+BIND: org-export-html-headline-anchor-format nil -#+OPTIONS: toc:nil html-style:nil num:nil -#+HTML_HEAD: -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] -#+MACRO: bug bug\nbsp{}[[#$1][#$1]] -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) - -Bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. - -Send a new bug report: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%3A%20%3Cbug%20description%3E][~euandreh/$PROJECT@lists.sr.ht]]. - -/Você também pode relatar bugs e problemas em português./ - -#+TOC: headlines 1 diff --git a/bash/templates/build-site-single-lang.sh b/bash/templates/build-site-single-lang.sh index 5742ee8..fc7556b 100755 --- a/bash/templates/build-site-single-lang.sh +++ b/bash/templates/build-site-single-lang.sh @@ -6,12 +6,11 @@ cd ../ OUT="${1}" HTMLIZE="${2}" -sed -e '/^\* Bugs$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - tail -n +2 | \ - cat bugs/bugs.template.org - > bugs.org +sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + cat workflow/preamble.org - > tasks-and-bugs.org -emacs bugs.org \ +emacs tasks-and-bugs.org \ -l "${HTMLIZE}" \ --eval '(setq org-export-allow-bind-keywords t)' \ -f org-html-export-to-html \ @@ -20,10 +19,8 @@ emacs bugs.org \ # Add anchor link to bug headers sed -E \ - -i \ "s|^

    $|

    #\\1

    |" \ - bugs.html -sed 's|^

    Table of Contents

    $|

    Bugs index

    |' bugs.html > "${OUT}/bugs.html" + tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" pushd docs make html diff --git a/bash/templates/preamble.org b/bash/templates/preamble.org new file mode 100644 index 0000000..fbe8b48 --- /dev/null +++ b/bash/templates/preamble.org @@ -0,0 +1,24 @@ +#+TITLE: Tasks and bug listing for $PROJECT_UC +#+AUTHOR: EuAndreh +#+BIND: org-html-validation-link nil +#+BIND: org-html-scripts nil +#+BIND: org-html-postamble nil +#+BIND: org-export-html-headline-anchor-format nil +#+OPTIONS: toc:nil html-style:nil num:nil +#+HTML_HEAD: +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] +#+MACRO: bug bug\nbsp{}[[#$1][#$1]] +#+MACRO: tasks tasks\nbsp{}[[#$1][#$1]] +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) + +Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. + +Register a new one: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$PROJECT@lists.sr.ht]]. + +/Você também pode escrever em português./ + +/Vous pouvez aussi écrire en français./ + +#+TOC: headlines 2 diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index e101197..a95c016 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -30,7 +30,7 @@ buildPhase = '' patchShebangs . mkdir ${DOLLAR}out - cat ${DOLLAR}{orgcss} bugs/bugs.css > ${DOLLAR}out/styles.css + cat ${DOLLAR}{orgcss} workflow/workflow.css > ${DOLLAR}out/styles.css ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} ''; }; diff --git a/bash/templates/workflow.css b/bash/templates/workflow.css new file mode 100644 index 0000000..d0bc519 --- /dev/null +++ b/bash/templates/workflow.css @@ -0,0 +1,49 @@ +/* EuAndreh's additions */ + +#tasks, #bugs { + border-bottom: 5px; +} + +a.header-anchor { + font-size: 0.5em; + opacity: 0.5; +} + +.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO { + color: #fff; + padding: .1em .3em; + border-radius: 3px; + background-clip: padding-box; + font-size: 80%; + font-family: Lucida Console,monospace; + line-height: 1 +} + +/* + Replicate colors from: + https://git.sr.ht/~euandreh/dotfiles/tree/fcd9f9c4ef399d45d54927382dc1cdde251ebb0a/spacemacs.el#L866 +*/ + +.TODO { + background-color: brown; +} + +.DOING { + background-color: yellowgreen; +} + +.WAITING, .MEETING { + background-color: gray; +} + +.INACTIVE { + background-color: orange; +} + +.NEXT { + background-color: red; +} + +.CANCELLED, .DONE { + background-color: green; +} -- cgit v1.2.3 From 5e7375111fa53ba45932bb86c0f3e4e13ce1bfea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Sep 2020 08:36:04 -0300 Subject: aliases.sh: Always color grep matches --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 3495351..55e693a 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -65,3 +65,4 @@ alias r="source ~/.bashrc" alias mail='mail -aFrom:eu@euandre.org' alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" +alias grep='grep --color=always' -- cgit v1.2.3 From bc43a4baff7da518d0aa24083ab2faa2060c4ac8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Sep 2020 08:36:13 -0300 Subject: assert-todos.sh: Forbid missing or duplicated IDs for all --- bash/templates/assert-todos.sh | 27 +++++++++++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh index a562840..257348d 100755 --- a/bash/templates/assert-todos.sh +++ b/bash/templates/assert-todos.sh @@ -8,3 +8,30 @@ if ag FIXME --ignore Makefile.am --ignore TODOs.org --ignore scripts/assert-todo echo "You should write them down properly on TODOs.org." exit 1 fi + +contains-element() { + local e match="$1" + shift + for e; do [[ "$e" == "$match" ]] && return 0; done + return 1 +} + +KNOWN_IDS=() +has_error=0 +# shellcheck disable=2013 +for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do + ID="$(sed "$((todo+2))q;d" TODOs.org)" + if grep '^:CUSTOM_ID: .*$' <(echo "$ID") > /dev/null; then + if contains-element "$ID" "${KNOWN_IDS[@]}"; then + echo "Duplicated ID: $ID" + has_error=1 + else + KNOWN_IDS+=("$ID") + fi + else + echo "Missing ID for TODO in line $todo" + has_error=1 + fi +done + +exit "$has_error" -- cgit v1.2.3 From ffa41e0349476b619fc60f0fbd34969b1c8228cb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Sep 2020 08:48:04 -0300 Subject: assert-todos.sh: Don't require ag and use only grep instead --- bash/templates/assert-todos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh index 257348d..bdf09bc 100755 --- a/bash/templates/assert-todos.sh +++ b/bash/templates/assert-todos.sh @@ -3,7 +3,7 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" cd ../ -if ag FIXME --ignore Makefile.am --ignore TODOs.org --ignore scripts/assert-todos.sh; then +if grep -R FIXME . | grep -v '^TODOs.org' | grep -v '^./scripts/assert-todos.sh'; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." exit 1 -- cgit v1.2.3 From 91ea619297f92f75bd367f96db000a7afc04e3d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 9 Sep 2020 08:48:17 -0300 Subject: fake-symlinks.sh: Use double quotes in Python files --- bash/templates/sphinx-base.conf.py | 24 ++++++++++++------------ bash/templates/sphinx-many-langs.conf.py | 14 +++++++------- bash/templates/sphinx-single-lang.conf.py | 6 +++--- 3 files changed, 22 insertions(+), 22 deletions(-) diff --git a/bash/templates/sphinx-base.conf.py b/bash/templates/sphinx-base.conf.py index d4af766..70f8407 100644 --- a/bash/templates/sphinx-base.conf.py +++ b/bash/templates/sphinx-base.conf.py @@ -1,34 +1,34 @@ import json -with open('../metadata.json', 'r') as f: +with open("../metadata.json", "r") as f: metadata = json.loads(f.read()) import subprocess -all_versions = ['master'] + ( +all_versions = ["master"] + ( subprocess .check_output(["git", "tag"]) - .decode('ascii') + .decode("ascii") .strip() .split() ) -project = metadata['project-name'] -author = metadata['authors'][0] -version = metadata['version'] +project = metadata["project-name"] +author = metadata["authors"][0] +version = metadata["version"] extensions = [ - 'sphinx.ext.extlinks' + "sphinx.ext.extlinks", ] -templates_path = ['_templates'] -html_theme = 'sphinx_rtd_theme' +templates_path = ["_templates"] +html_theme = "sphinx_rtd_theme" html_theme_options = { - 'style_external_links': True + "style_external_links": True } html_show_sphinx = False html_show_copyright = False extlinks = { - 'src': ('https://git.euandreh.xyz/$PROJECT/tree/%s', ''), - 'bug': ('https://$PROJECT.euandreh.xyz/bugs.html#%s', 'bug ') + "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), + "bug": ("https://$PROJECT.euandreh.xyz/bugs.html#%s", "bug "), } diff --git a/bash/templates/sphinx-many-langs.conf.py b/bash/templates/sphinx-many-langs.conf.py index 92de781..5bd2dd1 100644 --- a/bash/templates/sphinx-many-langs.conf.py +++ b/bash/templates/sphinx-many-langs.conf.py @@ -1,14 +1,14 @@ -with open('i18n-pagenames.json', 'r') as f: +with open("i18n-pagenames.json", "r") as f: i18n_pagenames = json.loads(f.read()) html_context = { - 'all_versions': all_versions, - 'langs': metadata['langs'], - 'current_lang': metadata['current-lang'], - 'sourcehut_url_prefix': 'https://git.euandreh.xyz/songbooks/tree/master/docs', - 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs', - 'i18n_pagenames': i18n_pagenames + "all_versions": all_versions, + "langs": metadata["langs"], + "current_lang": metadata["current-lang"], + "sourcehut_url_prefix": "https://git.euandreh.xyz/songbooks/tree/master/docs", + "gitlab_url_prefix": "https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs", + "i18n_pagenames": i18n_pagenames } gettext_compact = False diff --git a/bash/templates/sphinx-single-lang.conf.py b/bash/templates/sphinx-single-lang.conf.py index f01eaae..71788b6 100644 --- a/bash/templates/sphinx-single-lang.conf.py +++ b/bash/templates/sphinx-single-lang.conf.py @@ -1,6 +1,6 @@ html_context = { - 'all_versions': all_versions, - 'sourcehut_url_prefix': 'https://git.euandreh.xyz/$PROJECT/tree/docs', - 'gitlab_url_prefix': 'https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs', + "all_versions": all_versions, + "sourcehut_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs", + "gitlab_url_prefix": "https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs", } -- cgit v1.2.3 From ca4ccb1e03e6ca71ea4abfbc45dc5983268c2f5f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 9 Sep 2020 08:48:34 -0300 Subject: fake-symlinks.sh: Update sed to add anchors to h3 instead of h2 --- bash/templates/build-site-single-lang.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/build-site-single-lang.sh b/bash/templates/build-site-single-lang.sh index fc7556b..4a0bdb3 100755 --- a/bash/templates/build-site-single-lang.sh +++ b/bash/templates/build-site-single-lang.sh @@ -19,7 +19,7 @@ emacs tasks-and-bugs.org \ # Add anchor link to bug headers sed -E \ - "s|^

    $|

    #\\1

    |" \ + "s|^

    $|

    #\\1

    |" \ tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" pushd docs -- cgit v1.2.3 From ebcca6a789ca72c59ee8e34d5e1d49c0c5410a9f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 9 Sep 2020 08:48:56 -0300 Subject: spacemacs.el: Add ', l' shortcut for clojure-align --- spacemacs.el | 1 + 1 file changed, 1 insertion(+) diff --git a/spacemacs.el b/spacemacs.el index 80d4912..c377712 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -811,6 +811,7 @@ This is the place where most of your configurations should be done. Unless it is "," 'cider-pop-back))) (spacemacs/set-leader-keys-for-major-mode 'clojure-mode + "l" 'clojure-align "eF" 'euandreh/clear-repl-and-eval "tt" 'euandreh/save-and-run-focused-test "eb" 'euandreh/save-and-eval-buffer) -- cgit v1.2.3 From 34d413be28b381f69461877c99c806710ea7b3c8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 9 Sep 2020 08:49:25 -0300 Subject: configuration.nix: Add fractal package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6815ec8..151974c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -349,6 +349,7 @@ in { ## GUI programs + fractal inkscape calibre cozy -- cgit v1.2.3 From a191f2c7401a235f7c3cb423a99bb48b32b96bee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 9 Sep 2020 09:13:04 -0300 Subject: fake-symlinks.sh: Use correct regex for FIXME markers --- bash/templates/assert-todos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh index bdf09bc..91913ef 100755 --- a/bash/templates/assert-todos.sh +++ b/bash/templates/assert-todos.sh @@ -3,7 +3,7 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" cd ../ -if grep -R FIXME . | grep -v '^TODOs.org' | grep -v '^./scripts/assert-todos.sh'; then +if grep -R FIXME . | grep -v '^\./TODOs.org' | grep -v '^\./.git/' | grep -v '^./scripts/assert-todos.sh'; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." exit 1 -- cgit v1.2.3 From fad07040d95b859ed57315851096cd67043a82cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 9 Sep 2020 09:19:13 -0300 Subject: assert-todos.sh: Handle cases when DONE clock marker is added --- bash/templates/assert-todos.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh index 91913ef..85cf0e6 100755 --- a/bash/templates/assert-todos.sh +++ b/bash/templates/assert-todos.sh @@ -20,7 +20,12 @@ KNOWN_IDS=() has_error=0 # shellcheck disable=2013 for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do - ID="$(sed "$((todo+2))q;d" TODOs.org)" + if grep '^\*\* DONE' <(sed "${todo}q;d" TODOs.org); then + ID_OFFSET=3 + else + ID_OFFSET=2 + fi + ID="$(sed "$((todo+ID_OFFSET))q;d" TODOs.org)" if grep '^:CUSTOM_ID: .*$' <(echo "$ID") > /dev/null; then if contains-element "$ID" "${KNOWN_IDS[@]}"; then echo "Duplicated ID: $ID" -- cgit v1.2.3 From 0237faead50bf4cf7f5fb1fd9ebd7d5200d570fa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Sep 2020 15:14:55 -0300 Subject: fake-symlinks.sh: Use HTML5 doctype in preamble.org --- bash/templates/preamble.org | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/templates/preamble.org b/bash/templates/preamble.org index fbe8b48..884b691 100644 --- a/bash/templates/preamble.org +++ b/bash/templates/preamble.org @@ -4,6 +4,7 @@ #+BIND: org-html-scripts nil #+BIND: org-html-postamble nil #+BIND: org-export-html-headline-anchor-format nil +#+BIND: org-html-doctype "html5" #+OPTIONS: toc:nil html-style:nil num:nil #+HTML_HEAD: #+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] -- cgit v1.2.3 From 1697fad54c1080f47b6d3dcaaf80de79272a8ea2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 18 Sep 2020 01:07:24 -0300 Subject: Update fake-symlink resources --- bash/fake-symlinks.sh | 2 +- bash/templates/assert-todos.sh | 2 +- bash/templates/build-site-many-langs.sh | 13 +++++-------- bash/templates/sphinx-base.conf.py | 2 +- 4 files changed, 8 insertions(+), 11 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 862939d..0084734 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -39,7 +39,7 @@ documented-project-fake-ln() { I18N="$2" if [[ "$I18N" = true ]]; then - # cp build-site-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + cp build-site-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-many-langs.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" cp layout-many-langs.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh index 85cf0e6..512b443 100755 --- a/bash/templates/assert-todos.sh +++ b/bash/templates/assert-todos.sh @@ -20,7 +20,7 @@ KNOWN_IDS=() has_error=0 # shellcheck disable=2013 for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do - if grep '^\*\* DONE' <(sed "${todo}q;d" TODOs.org); then + if grep '^\*\* DONE' <(sed "${todo}q;d" TODOs.org) > /dev/null; then ID_OFFSET=3 else ID_OFFSET=2 diff --git a/bash/templates/build-site-many-langs.sh b/bash/templates/build-site-many-langs.sh index 6c0010c..1e2e9ee 100755 --- a/bash/templates/build-site-many-langs.sh +++ b/bash/templates/build-site-many-langs.sh @@ -6,12 +6,11 @@ cd ../ OUT="${1}" HTMLIZE="${2}" -sed -e '/^\* Bugs$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - tail -n +2 | \ - cat bugs/bugs.template.org - > bugs.org +sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + cat workflow/preamble.org - > tasks-and-bugs.org -emacs bugs.org \ +emacs tasks-and-bugs.org \ -l "${HTMLIZE}" \ --eval '(setq org-export-allow-bind-keywords t)' \ -f org-html-export-to-html \ @@ -20,10 +19,8 @@ emacs bugs.org \ # Add anchor link to bug headers sed -E \ - -i \ "s|^

    $|

    #\\1

    |" \ - bugs.html -sed 's|^

    Table of Contents

    $|

    Bugs index

    |' bugs.html > "${OUT}/bugs.html" + tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" pushd docs make html diff --git a/bash/templates/sphinx-base.conf.py b/bash/templates/sphinx-base.conf.py index 70f8407..e11b0e5 100644 --- a/bash/templates/sphinx-base.conf.py +++ b/bash/templates/sphinx-base.conf.py @@ -30,5 +30,5 @@ html_show_copyright = False extlinks = { "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), - "bug": ("https://$PROJECT.euandreh.xyz/bugs.html#%s", "bug "), + "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), } -- cgit v1.2.3 From 49fa4cb536ea0e2f8a9637f7658521b501f4c4c9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 19 Sep 2020 07:19:02 -0300 Subject: Fix anchor links in build-site-many-langs.sh --- bash/templates/build-site-many-langs.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/build-site-many-langs.sh b/bash/templates/build-site-many-langs.sh index 1e2e9ee..aeb7f8b 100755 --- a/bash/templates/build-site-many-langs.sh +++ b/bash/templates/build-site-many-langs.sh @@ -19,7 +19,7 @@ emacs tasks-and-bugs.org \ # Add anchor link to bug headers sed -E \ - "s|^

    $|

    #\\1

    |" \ + "s|^

    $|

    #\\1

    |" \ tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" pushd docs -- cgit v1.2.3 From 541ac361ca1d8f7e9833ea31546c4dc234b987f3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Sep 2020 09:26:36 -0300 Subject: Update generated files, add Mozilla Rust overlay --- bash/fake-symlinks.sh | 19 +++++++++--- bash/templates/.build.yml | 4 +-- bash/templates/assert-docs-spelling-many-langs.sh | 36 ++++++++++++++++++++++ bash/templates/assert-docs-spelling-single-lang.sh | 29 +++++++++++++++++ bash/templates/assert-rust-lint.sh | 11 +++++++ bash/templates/assert-shellcheck.sh | 2 +- bash/templates/assert-todos.sh | 5 +-- bash/templates/build-site-many-langs.sh | 8 +++-- bash/templates/build-site-single-lang.sh | 8 +++-- bash/templates/layout-many-langs.html | 33 +++++++++++++------- bash/templates/layout-single-lang.html | 29 +++++++++++------ bash/templates/layout.template.html | 29 +++++++++++------ bash/templates/sphinx-base.conf.py | 6 ++++ nixos/configuration.nix | 14 ++++++--- 14 files changed, 183 insertions(+), 50 deletions(-) create mode 100755 bash/templates/assert-docs-spelling-many-langs.sh create mode 100755 bash/templates/assert-docs-spelling-single-lang.sh create mode 100755 bash/templates/assert-rust-lint.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 0084734..550fa67 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -39,14 +39,18 @@ documented-project-fake-ln() { I18N="$2" if [[ "$I18N" = true ]]; then - cp build-site-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site-many-langs.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-many-langs.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" - cp layout-many-langs.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + envsubst < layout-many-langs.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" + cp assert-docs-spelling-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" else - cp build-site-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site-single-lang.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" - cp layout-single-lang.html "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + envsubst < layout-single-lang.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + cp assert-docs-spelling-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" fi envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/utils.nix" @@ -82,4 +86,11 @@ for r in boneco website dotfiles; do envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" done + +# rust projects +for r in songbooks mediator; do + export PROJECT="$r" + cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" +done + popd > /dev/null || exit 1 diff --git a/bash/templates/.build.yml b/bash/templates/.build.yml index b352f08..721393c 100644 --- a/bash/templates/.build.yml +++ b/bash/templates/.build.yml @@ -1,6 +1,4 @@ image: nixos/unstable -repositories: - nixpkgs: https://nixos.org/channels/nixpkgs-unstable triggers: - condition: failure action: email @@ -10,4 +8,4 @@ sources: tasks: - tests: | cd $PROJECT/ - nix-build -A test + nix-build -A test -A site diff --git a/bash/templates/assert-docs-spelling-many-langs.sh b/bash/templates/assert-docs-spelling-many-langs.sh new file mode 100755 index 0000000..d8a8b80 --- /dev/null +++ b/bash/templates/assert-docs-spelling-many-langs.sh @@ -0,0 +1,36 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../docs/ + +export LANG=C.UTF-8 + +for DICT in dictionaries/*.txt; do + diff <(sort "$DICT") "$DICT" || { + echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 + echo " LANG=C.UTF-8 sort docs/$DICT | sponge docs/$DICT" >&2 + exit 1 + } +done + + +LANGS="$(jq -r .langs[] < ../metadata.json)" +rm -f spelling.txt + +for l in ${LANGS}; do + # exclude untranslated language + if [[ "$l" != "pt" ]]; then + make SPHINXOPTS="-D language=$l" html + hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a spelling.txt + fi +done + +if [[ -s spelling.txt ]]; then + printf "\nvvv Mispelled words detected by hunspell.\n\n" + sort < spelling.txt | uniq + printf "\n^^^\n" >&2 + exit 1 +else + echo "No spelling errors detected" + exit 0 +fi diff --git a/bash/templates/assert-docs-spelling-single-lang.sh b/bash/templates/assert-docs-spelling-single-lang.sh new file mode 100755 index 0000000..52aab64 --- /dev/null +++ b/bash/templates/assert-docs-spelling-single-lang.sh @@ -0,0 +1,29 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../docs/ + +export LANG=C.UTF-8 + +for DICT in dictionaries/*.txt; do + diff <(sort "$DICT") "$DICT" || { + echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 + echo " LANG=C.UTF-8 sort docs/$DICT | sponge docs/$DICT" >&2 + exit 1 + } +done + +OUT="$(mktemp)" + +make html +hunspell -u3 -H -d en_US -p <(cat dictionaries/international.txt "dictionaries/en.txt") _build/html/*.html | tee -a "$OUT" + +if [[ -s "$OUT" ]]; then + printf "\nvvv Mispelled words detected by hunspell.\n\n" + sort < "$OUT" | uniq + printf "\n^^^\n" >&2 + exit 1 +else + echo "No spelling errors detected" + exit 0 +fi diff --git a/bash/templates/assert-rust-lint.sh b/bash/templates/assert-rust-lint.sh new file mode 100755 index 0000000..684c96c --- /dev/null +++ b/bash/templates/assert-rust-lint.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +for f in $(git ls-files | grep '\.rs$'); do + rustfmt --check "$f" || { + echo "Unformatted Rust code. To fix it, run" + echo " rustfmt $f" + } +done diff --git a/bash/templates/assert-shellcheck.sh b/bash/templates/assert-shellcheck.sh index 3d6aca4..e24c29c 100755 --- a/bash/templates/assert-shellcheck.sh +++ b/bash/templates/assert-shellcheck.sh @@ -3,4 +3,4 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" cd ../ -find . -type f -name '*.sh' -print0 | xargs -0 shellcheck +git ls-files | grep '\.sh$' | xargs shellcheck diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh index 512b443..c3139d1 100755 --- a/bash/templates/assert-todos.sh +++ b/bash/templates/assert-todos.sh @@ -3,7 +3,8 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" cd ../ -if grep -R FIXME . | grep -v '^\./TODOs.org' | grep -v '^\./.git/' | grep -v '^./scripts/assert-todos.sh'; then +# shellcheck disable=2046 +if grep -R FIXME $(git ls-files) | grep -v '^TODOs.org' | grep -v '^.git/' | grep -v '^scripts/assert-todos.sh'; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." exit 1 @@ -20,7 +21,7 @@ KNOWN_IDS=() has_error=0 # shellcheck disable=2013 for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do - if grep '^\*\* DONE' <(sed "${todo}q;d" TODOs.org) > /dev/null; then + if grep -E '^\*\* (CANCELLED|DONE)' <(sed "${todo}q;d" TODOs.org) > /dev/null; then ID_OFFSET=3 else ID_OFFSET=2 diff --git a/bash/templates/build-site-many-langs.sh b/bash/templates/build-site-many-langs.sh index aeb7f8b..5b6d745 100755 --- a/bash/templates/build-site-many-langs.sh +++ b/bash/templates/build-site-many-langs.sh @@ -5,6 +5,7 @@ cd ../ OUT="${1}" HTMLIZE="${2}" +PROJECT_UC="__PROJECT_UC__" sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ head -n -1 | \ @@ -18,8 +19,8 @@ emacs tasks-and-bugs.org \ --kill # Add anchor link to bug headers -sed -E \ - "s|^

    $|

    #\\1

    |" \ +perl -pe \ + 's|^

    (.*)

    $|

    \2
    #\1

    |' \ tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" pushd docs @@ -52,7 +53,7 @@ for lang in ${LANGS}; do sed -i "s/^ $from/ $to/" index.rst done - make SPHINXOPTS="-D language=$lang" html + make SPHINXOPTS="-D language=$lang" latexpdf epub html popd mkdir "${OUT}/$lang/" @@ -61,5 +62,6 @@ for lang in ${LANGS}; do rm -rf _static/ ln -s ../../_static . popd + mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" done done diff --git a/bash/templates/build-site-single-lang.sh b/bash/templates/build-site-single-lang.sh index 4a0bdb3..d70eec1 100755 --- a/bash/templates/build-site-single-lang.sh +++ b/bash/templates/build-site-single-lang.sh @@ -5,6 +5,7 @@ cd ../ OUT="${1}" HTMLIZE="${2}" +PROJECT_UC="__PROJECT_UC__" sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ head -n -1 | \ @@ -18,8 +19,8 @@ emacs tasks-and-bugs.org \ --kill # Add anchor link to bug headers -sed -E \ - "s|^

    $|

    #\\1

    |" \ +perl -pe \ + 's|^

    (.*)

    $|

    \2
    #\1

    |' \ tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" pushd docs @@ -38,7 +39,7 @@ for tag in ${TAGS}; do pushd "tmp/$tag/docs/" jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - make html + make latexpdf epub html popd mv "tmp/$tag/docs/_build/html/" "${OUT}/$tag/" @@ -46,4 +47,5 @@ for tag in ${TAGS}; do rm -rf _static/ ln -s ../_static . popd + mv "tmp/$tag/docs/_build/latex/${PROJECT_UC,}.pdf" "$OUT/$tag/${PROJECT_UC}.pdf" done diff --git a/bash/templates/layout-many-langs.html b/bash/templates/layout-many-langs.html index 91b962a..5132373 100644 --- a/bash/templates/layout-many-langs.html +++ b/bash/templates/layout-many-langs.html @@ -16,17 +16,17 @@ https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a8
    Versions
    {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    {% endfor %}
    Languages
    {% for l in langs %} @@ -42,6 +42,17 @@ https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a8 {% endfor %} +
    Downloads
    +
    + + PDF + +
    +
    + + EPUB + +
    diff --git a/bash/templates/layout-single-lang.html b/bash/templates/layout-single-lang.html index ae77e96..6c16a49 100644 --- a/bash/templates/layout-single-lang.html +++ b/bash/templates/layout-single-lang.html @@ -16,18 +16,29 @@ https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a8
    Versions
    {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Downloads
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} + + PDF + +
    +
    + + EPUB
    - {% endfor %}
    diff --git a/bash/templates/layout.template.html b/bash/templates/layout.template.html index d4c43ac..724f10d 100644 --- a/bash/templates/layout.template.html +++ b/bash/templates/layout.template.html @@ -16,18 +16,29 @@ https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a8
    Versions
    {% for v in all_versions %} +
    + $PAGE_PATH + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %}$LANGUAGE_PICKER +
    Downloads
    - $PAGE_PATH - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} + + PDF + +
    +
    + + EPUB
    - {% endfor %}$LANGUAGE_PICKER
    diff --git a/bash/templates/sphinx-base.conf.py b/bash/templates/sphinx-base.conf.py index e11b0e5..377f8dd 100644 --- a/bash/templates/sphinx-base.conf.py +++ b/bash/templates/sphinx-base.conf.py @@ -14,11 +14,17 @@ all_versions = ["master"] + ( project = metadata["project-name"] author = metadata["authors"][0] version = metadata["version"] +release = version +epub_copyright = "CC BY-SA 4.0" +nitpicky = True extensions = [ "sphinx.ext.extlinks", + "sphinx.ext.graphviz", ] +graphviz_output_format = "svg" + templates_path = ["_templates"] html_theme = "sphinx_rtd_theme" html_theme_options = { diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 151974c..d0ab686 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -2,6 +2,8 @@ let localConfiguration = pkgs.callPackage /etc/nixos/local-configuration.nix { }; + mozilla-overlay = import (builtins.fetchTarball + "https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz"); in { imports = [ # Include the results of the hardware scan. /etc/nixos/hardware-configuration.nix @@ -101,6 +103,7 @@ in { }); in with pkgs; [ + latest.rustChannels.nightly.rust swift nixfmt @@ -177,7 +180,6 @@ in { alsaUtils # for xmonad volume commands multimarkdown # =markdown= pup # command-line HTML parsing https://github.com/ericchiang/pup - binutils-unwrapped # =ar= command for cargo build nssTools # =pk12util= gitAndTools.hub # GitHub helper insomnia @@ -287,7 +289,6 @@ in { openjdk # solc broken bundler - cargo clojure # =clj= visualvm # JVM profiling tool ant @@ -376,9 +377,12 @@ in { ] ++ localConfiguration.proprietaryPackages; - nixpkgs.config = { - android_sdk.accept_license = true; - allowUnfree = localConfiguration.allowUnfree; + nixpkgs = { + overlays = [ mozilla-overlay ]; + config = { + android_sdk.accept_license = true; + allowUnfree = localConfiguration.allowUnfree; + }; }; # Look at -- cgit v1.2.3 From 84060a1d9e92ed5a2a8af19c1dde76f7a2faf721 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Sep 2020 14:45:26 -0300 Subject: Add notmuch-dump cronjob --- nixos/common.nix | 4 ++++ nixos/usurpador.nix | 1 + scripts/ad-hoc/notmuch-dump.sh | 13 ------------- scripts/cron/notmuch-dump.sh | 13 +++++++++++++ 4 files changed, 18 insertions(+), 13 deletions(-) delete mode 100755 scripts/ad-hoc/notmuch-dump.sh create mode 100755 scripts/cron/notmuch-dump.sh diff --git a/nixos/common.nix b/nixos/common.nix index f02269f..457b896 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -36,5 +36,9 @@ # Borg backup once a month borg = "0 12 * * SUN andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; + + # Backup notmuch database once a day at 12h + notmuch-dump = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/notmuch-dump >> /tmp/cron-dbg.notmuch-dump.euandreh.log 2>&1"; }; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 031978c..abb1065 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -18,5 +18,6 @@ in { common.cron.deliverMail common.cron.nextcloud common.cron.borg + common.cron.notmuch-dump ]; } diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh deleted file mode 100755 index 878482f..0000000 --- a/scripts/ad-hoc/notmuch-dump.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -exec &> /dev/stdout -echo "Starting: $(date -Is)" - -[[ -f ~/archive/notmuch-archive.gz ]] && { - mv ~/archive/notmuch-archive.gz ~/archive/notmuch-archive.yesterday.gz -} -notmuch dump --gzip --output ~/archive/notmuch-archive.gz - -echo "Finishing: $(date -Is)" diff --git a/scripts/cron/notmuch-dump.sh b/scripts/cron/notmuch-dump.sh new file mode 100755 index 0000000..c78663e --- /dev/null +++ b/scripts/cron/notmuch-dump.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +[[ -f ~/archive/notmuch-archive.today.gz ]] && { + mv ~/archive/notmuch-archive.today.gz ~/archive/notmuch-archive.yesterday.gz +} +notmuch dump --gzip --output ~/archive/notmuch-archive.today.gz + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 601dfd0bd5eaf00e2ef74aaef566752e944993ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 21 Sep 2020 17:49:36 -0300 Subject: Remove unused tmuxinator templates --- tmux/projects/hacking.yml | 28 -------------------------- tmux/projects/mentat.yml | 13 ------------ tmux/projects/monero.yml | 10 ---------- tmux/projects/pires.yml | 48 --------------------------------------------- tmux/projects/songbooks.yml | 14 ------------- tmux/projects/sosps.yml | 10 ---------- 6 files changed, 123 deletions(-) delete mode 100644 tmux/projects/hacking.yml delete mode 100644 tmux/projects/mentat.yml delete mode 100644 tmux/projects/monero.yml delete mode 100644 tmux/projects/pires.yml delete mode 100644 tmux/projects/songbooks.yml delete mode 100644 tmux/projects/sosps.yml diff --git a/tmux/projects/hacking.yml b/tmux/projects/hacking.yml deleted file mode 100644 index 5b5d1b4..0000000 --- a/tmux/projects/hacking.yml +++ /dev/null @@ -1,28 +0,0 @@ -name: hacking - -windows: - - songbooks: - root: ~/dev/libre/songbooks/ - layout: main-horizontal - panes: - - main: - - guix environment -l shell.scm - - nix-shell -p lilypond - - misc: - - git status - - mediator: - root: ~/dev/libre/mediator/ - layout: main-horizontal - panes: - - main: - - . .envrc - - misc: - - . .envrc - - auth-couchdb: - root: ~/dev/libre/auth-couchdb/ - layout: main-horizontal - panes: - - main: - - git status - - misc: - - git status diff --git a/tmux/projects/mentat.yml b/tmux/projects/mentat.yml deleted file mode 100644 index fdd81d1..0000000 --- a/tmux/projects/mentat.yml +++ /dev/null @@ -1,13 +0,0 @@ -name: mentat -root: ~/dev/libre/mentat/ - -windows: - - mentat: - layout: main-vertical - panes: - - first: - - nix-shell - - reload - - second: - - nix-shell - - reload diff --git a/tmux/projects/monero.yml b/tmux/projects/monero.yml deleted file mode 100644 index 6f3af8c..0000000 --- a/tmux/projects/monero.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: annex -root: ~/ - -windows: - - monero: - layout: main-horizontal - panes: - - monerod --data-dir ~/UTCLOUD/Monero/ - - watch -n 30 du -hd 1 ~/UTCLOUD/Monero/ - - monero-wallet-cli --wallet-file ~/annex/Crypto/Monero/EuAndrehMoneroCLIWallet diff --git a/tmux/projects/pires.yml b/tmux/projects/pires.yml deleted file mode 100644 index 7f693f2..0000000 --- a/tmux/projects/pires.yml +++ /dev/null @@ -1,48 +0,0 @@ -name: pires -root: ~/annex/dev/code/pires/ - -windows: - # - client: - # layout: main-vertical - # panes: - # - git: - # - git status - # - figwheel: - # - re-natal use-android-device real - # - re-natal use-figwheel - # - yellow 'In Emacs, connect, (start-figwheel! "android") and (cljs-repl)' - # - lein repl - # - packager: - # - yellow "Waiting for figwheel to be set up..." && sleep 20 - # - npm start - # - log-android: - # panes: - # - react-native log-android - # - logcat: - # panes: - # - adb logcat - - server: - root: ~/annex/dev/code/pires/server/ - layout: main-vertical - panes: - - git: - - git status - - repl: - - lein repl - - (require 'pires.service) - - test: - - sleep 10 - - lein test - - transactor: - - cd ~/bin/datomic-pro/ - - bin/run -m datomic.peer-server -h localhost -p 8998 -a pireskey,piressecret -d pires,datomic:mem://pires - - libs: - root: ~/annex/dev/code/ - layout: main-vertical - panes: - - misc: - - cd org.euandre.misc - - git status - - om-auth: - - cd org.euandre.om-auth - - git status diff --git a/tmux/projects/songbooks.yml b/tmux/projects/songbooks.yml deleted file mode 100644 index 429b61f..0000000 --- a/tmux/projects/songbooks.yml +++ /dev/null @@ -1,14 +0,0 @@ -name: songbooks -root: ~/annex/dev/code/songbooks/ - -windows: - - server: - layout: main-vertical - panes: - - git: - - git status - - server-repl: - - cd server/ && lein repl - - client-repl: - - cd client/ && lein repl - - (use 'figwheel-sidecar.repl-api) diff --git a/tmux/projects/sosps.yml b/tmux/projects/sosps.yml deleted file mode 100644 index ff8f1e0..0000000 --- a/tmux/projects/sosps.yml +++ /dev/null @@ -1,10 +0,0 @@ -name: sosps -root: ~/annex/dev/mouselabs/ - -windows: - - git: - layout: main-vertical - panes: - - git status - - ionic serve - - git status -- cgit v1.2.3 From fbe264a4e74392df525fd72490856563a179e82a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 07:37:33 -0300 Subject: Add intermediauth to fake-symlinks --- bash/fake-symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 550fa67..82df6bc 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -71,7 +71,7 @@ documented-project-fake-ln() { } # single language, documented project -for r in cement mediator; do +for r in cement mediator intermediauth; do documented-project-fake-ln "$r" false done @@ -88,7 +88,7 @@ for r in boneco website dotfiles; do done # rust projects -for r in songbooks mediator; do +for r in songbooks mediator intermediauth; do export PROJECT="$r" cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" done -- cgit v1.2.3 From e75d6fd9a55ab9f7e123fb0bece5139f0d20ed12 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 10:07:04 -0300 Subject: Add mr-remotes-backup.sh cronjob --- nixos/common.nix | 4 ++++ nixos/usurpador.nix | 1 + scripts/cron/mr-remotes-backup.sh | 13 +++++++++++++ 3 files changed, 18 insertions(+) create mode 100755 scripts/cron/mr-remotes-backup.sh diff --git a/nixos/common.nix b/nixos/common.nix index 457b896..9caf5d6 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -40,5 +40,9 @@ # Backup notmuch database once a day at 12h notmuch-dump = "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/notmuch-dump >> /tmp/cron-dbg.notmuch-dump.euandreh.log 2>&1"; + + # Push to mr backup remotes once a day at 12h + mr-remotes-backup = + "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/mr-remotes-backup.sh >> /tmp/cron-dbg.mr-remotes-backup.sh 2>&1"; }; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index abb1065..2c35a28 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -19,5 +19,6 @@ in { common.cron.nextcloud common.cron.borg common.cron.notmuch-dump + common.cron.mr-remotes-backup ]; } diff --git a/scripts/cron/mr-remotes-backup.sh b/scripts/cron/mr-remotes-backup.sh new file mode 100755 index 0000000..26b1297 --- /dev/null +++ b/scripts/cron/mr-remotes-backup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" +cd ~/dev/libre/ +mr -s push rsyncnet +mr -s push gitlab + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 995c2bbc96cf8aceae2da86d08408c610e05ea01 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 12:02:04 -0300 Subject: configuration.nix: Remove Mozilla overlay Instead, I'll use the overlay per project. --- nixos/configuration.nix | 4 ---- 1 file changed, 4 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d0ab686..9c74c54 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -2,8 +2,6 @@ let localConfiguration = pkgs.callPackage /etc/nixos/local-configuration.nix { }; - mozilla-overlay = import (builtins.fetchTarball - "https://github.com/mozilla/nixpkgs-mozilla/archive/master.tar.gz"); in { imports = [ # Include the results of the hardware scan. /etc/nixos/hardware-configuration.nix @@ -103,7 +101,6 @@ in { }); in with pkgs; [ - latest.rustChannels.nightly.rust swift nixfmt @@ -378,7 +375,6 @@ in { ] ++ localConfiguration.proprietaryPackages; nixpkgs = { - overlays = [ mozilla-overlay ]; config = { android_sdk.accept_license = true; allowUnfree = localConfiguration.allowUnfree; -- cgit v1.2.3 From 2822b9c3ce014d32d4ad40891e42e25937d72b14 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 12:03:08 -0300 Subject: configuration.nix: Remove IPFS --- nixos/configuration.nix | 7 ------- nixos/usurpador.nix | 1 - 2 files changed, 8 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9c74c54..403315d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -473,13 +473,6 @@ in { }; pcscd.enable = true; # required by yubioath - - # https://nixos.org/nixos/options.html#ipfs - ipfs = { - enable = localConfiguration.enableIPFS; - enableGC = localConfiguration.enableIPFS; - autoMount = localConfiguration.enableIPFS; - }; }; security = { diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 2c35a28..76711ab 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -6,7 +6,6 @@ in { hostName = "usurpador-nixos"; luksDevice = "/dev/nvme0n1p3"; hashedPassword = privateConfiguration.hashedPassword; - enableIPFS = false; enableFlatpak = true; # for usage with proprietary Skype allowUnfree = true; proprietaryPackages = with pkgs; [ slack zoom-us ]; -- cgit v1.2.3 From 796866077a91beb0579130dc7a1b0f153b7c9789 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 12:04:19 -0300 Subject: Refactor cronjobs: remove duplication of stuff overall --- nixos/common.nix | 62 +++++++++++++---------------------------------------- nixos/usurpador.nix | 22 +++++++++---------- 2 files changed, 26 insertions(+), 58 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 9caf5d6..d994e81 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,48 +1,16 @@ -{ - # show active crontabs with: - # $ sudo cat /etc/crontab - # - # Log files end with .euandreh.log to easy the logrotate pattern matching - # - cron = { - # Sync Nextcloud using nextcloudcmd every 15 minutes - nextcloud = - "*/15 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nextcloud.sh >> /tmp/cron-dbg.nextcloud.euandreh.log 2>&1"; - - # Deliver queued emails every hour - deliverMail = - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/deliver-queued-mail.sh >> /tmp/cron-dbg.deliver-queued-mail.euandreh.log 2>&1"; - - # Fetch emails with mbsync every hour - fetchMail = - "0 * * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/sync-mail.sh >> /tmp/cron-dbg.sync-mail.euandreh.log 2>&1"; - - # Update 'nix search' cache once a day at 12h - nixSearchUpdate = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/nix-search-update.sh >> /tmp/cron-dbg.nix-search-update.euandreh.log 2>&1"; - - # Update Guix once a day at 12h - guixPull = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/guix-pull.sh >> /tmp/cron-dbg.guix-pull.euandreh.log 2>&1"; - - # Pull code from source code repositories once a day at 12h - repoUpdate = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/repo-update.sh >> /tmp/cron-dbg.repo-update.euandreh.log 2>&1"; - - # Run ArchiveBox data once every day at 12h - archivebox = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/archive.sh >> /tmp/cron-dbg.archive.euandreh.log 2>&1"; - - # Borg backup once a month - borg = - "0 12 * * SUN andreh /home/andreh/dev/libre/dotfiles/scripts/cron/backup-job.sh >> /tmp/cron-dbg.backup.euandreh.log 2>&1"; - - # Backup notmuch database once a day at 12h - notmuch-dump = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/notmuch-dump >> /tmp/cron-dbg.notmuch-dump.euandreh.log 2>&1"; - - # Push to mr backup remotes once a day at 12h - mr-remotes-backup = - "0 12 * * * andreh /home/andreh/dev/libre/dotfiles/scripts/cron/mr-remotes-backup.sh >> /tmp/cron-dbg.mr-remotes-backup.sh 2>&1"; +let + cron-for-name = name: cron: + "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh >> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; + crons = { + nextcloud = "*/15 * * * *"; + deliver-queued-mail = "0 * * * *"; + sync-mail = "0 * * * *"; + nix-search-update = "0 12 * * *"; + guix-pull = "0 12 * * *"; + repo-update = "0 12 * * *"; + archive = "0 12 * * *"; + backup = "0 12 * * SUN"; + notmuch-dump = "0 12 * * *"; + mr-remotes-backup = "0 12 * * *"; }; -} +in { crons = builtins.mapAttrs cron-for-name crons; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 76711ab..56d4097 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -2,22 +2,22 @@ let privateConfiguration = import /etc/nixos/private-configuration.nix; common = import /etc/nixos/common.nix; -in { +in rec { hostName = "usurpador-nixos"; luksDevice = "/dev/nvme0n1p3"; hashedPassword = privateConfiguration.hashedPassword; enableFlatpak = true; # for usage with proprietary Skype - allowUnfree = true; proprietaryPackages = with pkgs; [ slack zoom-us ]; + allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ - common.cron.nixSearchUpdate - common.cron.guixPull - common.cron.repoUpdate - common.cron.fetchMail - common.cron.deliverMail - common.cron.nextcloud - common.cron.borg - common.cron.notmuch-dump - common.cron.mr-remotes-backup + common.crons.nix-search-update + common.crons.guix-pull + common.crons.repo-update + common.crons.sync-mail + common.crons.deliver-queued-mail + common.crons.nextcloud + common.crons.backup + common.crons.notmuch-dump + common.crons.mr-remotes-backup ]; } -- cgit v1.2.3 From 3af9b226ca4cd2a7c26bb05b05b2ca2ecf365555 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 12:05:13 -0300 Subject: Revamp backup.sh: Simplify it and, most of all, use rsync as the primary borg repository --- scripts/ad-hoc/backup.sh | 156 +++++++++-------------------------------------- 1 file changed, 30 insertions(+), 126 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 200f269..6db1154 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -1,18 +1,11 @@ #!/usr/bin/env bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" +set -x exec &> /dev/stdout echo "Starting: $(date -Is)" -export end="\033[0m" -export red="\033[0;31m" -export green="\033[0;32m" -export yellow="\033[0;33m" -red() { echo -e "${red}${1}${end}"; } -green() { echo -e "${green}${1}${end}"; } -yellow() { echo -e "${yellow}${1}${end}"; } - BACKUP_TAG="${1-adhoc}" # shellcheck source=/dev/null @@ -21,141 +14,52 @@ BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" export BORG_PASSPHRASE R="$(cat ~/annex/secret/rsync.net/addr.txt)" export R -# Required for properly running Git Annex -# Related issue: +export BORG_REMOTE_PATH="borg1" +# Required for properly running Git Annex, related issue: # https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ export LANG=C.UTF-8 -# -# BorgBackup -# - -if [ ! -d ~/UTCLOUD/ ]; then - red "$HOME/UTCLOUD not attached, the backup will not be synced there." -fi - -if [ ! -d ~/borgbackup/ ]; then - yellow "$HOME/borgbackup/ repository doesn't exist. Downloading latest version from ~/UTCLOUD/borg/borgbackup/ into ~/borgbackup/." - # The initial borg repo was created with: - # $ borg init --append-only --encryption=keyfile ~/borgbackup - # See also: https://borgbackup.readthedocs.io/en/stable/usage/notes.html#append-only-mode - rsync --verbose --progress --stats --update --recursive ~/UTCLOUD/backups/desktop-borg/ ~/borgbackup -fi - -pushd ~/dev/libre/ || exit 1 -mr -s notmaster -popd || exit 1 - -yellow "Creating possibly missing directories" mkdir -p ~/archive/ ~/mbsync/ -green "Done" -yellow "Downloading MBOX archive of mailing lists" -# See -# https://todo.sr.ht/~sircmpwn/lists.sr.ht/162 -green "Done" - -yellow "Creating backup of notmuch data" -~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh -green "Done" - -yellow "Creating new borg archive entry" -borg create \ - --exclude ~/mbsync/.notmuch/ \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - ~/borgbackup::"{hostname}-{now}-${BACKUP_TAG}" \ - ~/Nextcloud/ \ - ~/mbsync/ \ - ~/archive/ \ - ~/.mozilla/ \ - ~/.config/quodlibet/ \ +echo 'TODO: Download MBOX archive of mailing lists, see:' +echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' + +borg create \ + --exclude ~/mbsync/.notmuch/ \ + --verbose \ + --stats \ + --progress \ + --compression lzma,6 \ + "$R:desktop-borg::{hostname}-{now}-${BACKUP_TAG}" \ + ~/Nextcloud/ \ + ~/mbsync/ \ + ~/archive/ \ + ~/.mozilla/ \ + ~/.config/quodlibet/ \ ~/gPodder/ # add folders to be backed up here -green "Done" - - -yellow "Committing borg config changes..." -pushd ~/dev/libre/borg/ +cd ~/dev/libre/borg/ git add . git commit -m "JOB: automated update of borg config files after backup.sh" git push origin master -popd -green "Done." - -if [ ! -d ~/UTCLOUD/ ]; then - red "${HOME}/UTCLOUD/ not attached, skipping rsyncing ~/borgbackup and $R:vps-borg/ there." -else - yellow "Syncing ~/borgbackup to ~/UTCLOUD/borg/borgbackup/" - rsync --verbose --progress --stats --update --recursive ~/borgbackup/ ~/UTCLOUD/backups/desktop-borg/ - green "Done" - yellow "Syncing $R:vps-borg/ ~/UTCLOUD/backupgs/vps-borg/" - rsync --verbose --progress --stats --update --recursive "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ - green "Done" -fi -yellow "Syncing ~/borgbackup to $R:desktop-borg/" -rsync --verbose --progress --stats --update --recursive ~/borgbackup/ "$R:desktop-borg/" -green "Done" - - -# -# mr -# - -yellow "Backing up ~/dev/libre/ git repos" -pushd ~/dev/libre/ || exit 1 - -mr -s master -mr -s status -mr -s update ||: -mr -s rsyncnet ||: -mr -s gitlab ||: - -if [ ! -d ~/UTCLOUD/ ]; then - red "${HOME}/UTCLOUD/ not attached, not storing mr repositories there." -else - pushd ~/dev/ || exit 1 - mr -s hd ||: - popd || exit 1 -fi - -popd || exit 1 - -NEXTCLOUD_SCRIPT="../cron/nextcloud.sh" - -yellow "Syncing Nextcloud" -"$NEXTCLOUD_SCRIPT" -green "Done" - -yellow "Syncing Git Annex" -pushd ~/annex/ || exit 1 +cd ~/annex/ +../cron/nextcloud.sh git annex sync -popd || exit 1 -green "Done" - -yellow "Syncing Nextcloud after Git Annex" -"$NEXTCLOUD_SCRIPT" -green "Done" - - -# -# Box backup -# +../cron/nextcloud.sh if [ ! -d ~/UTCLOUD/ ]; then - red "${HOME}/UTCLOUD/ not attached, not sync box backupgs." + echo "$HOME/UTCLOUD not attached, not sending data there." else - # Mail in a Box backup, secret key stored separately in password manager - rsync -avz euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ - rsync -avz ~/UTCLOUD/backups/box-duplicity/ "$R:box-duplicity/" - - # soverign backup copy - rsync -avz "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ + cd ~/dev/ + mr -s push hd + rsync -avzP "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ + rsync -avzP "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ + rsync -avzP euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ + aws s3 sync ~/UTCLOUD/backups/ s3://euandreh-backups/ fi +rsync -avzP euandre.org:/home/user-data/backup/encrypted/ "$R:box-duplicity/" echo "Finishing: $(date -Is)" -- cgit v1.2.3 From a0728550ebfc5c6dc9de459a3e1ce6af9430bd91 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:01:04 -0300 Subject: Wrap some cronjobs and send report email --- bash/fake-symlinks.sh | 5 +++ bash/templates/cronjob-with-email.sh | 23 ++++++++++++++ scripts/ad-hoc/archive.sh | 55 +++++++++++++++++++++++++++++++++ scripts/ad-hoc/mr-remotes-backup-job.sh | 23 ++++++++++++++ scripts/ad-hoc/notmuch-dump.sh | 13 ++++++++ scripts/ad-hoc/notmuch-restore.sh | 10 ++++++ scripts/cron/archive-job.sh | 23 ++++++++++++++ scripts/cron/archive.sh | 55 --------------------------------- scripts/cron/backup-job.sh | 14 +++++---- scripts/cron/mbox-archive-job.sh | 23 ++++++++++++++ scripts/cron/notmuch-dump-job.sh | 23 ++++++++++++++ scripts/cron/notmuch-dump.sh | 13 -------- 12 files changed, 206 insertions(+), 74 deletions(-) create mode 100644 bash/templates/cronjob-with-email.sh create mode 100755 scripts/ad-hoc/archive.sh create mode 100755 scripts/ad-hoc/mr-remotes-backup-job.sh create mode 100755 scripts/ad-hoc/notmuch-dump.sh create mode 100755 scripts/ad-hoc/notmuch-restore.sh create mode 100755 scripts/cron/archive-job.sh delete mode 100755 scripts/cron/archive.sh create mode 100755 scripts/cron/mbox-archive-job.sh create mode 100755 scripts/cron/notmuch-dump-job.sh delete mode 100755 scripts/cron/notmuch-dump.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 82df6bc..0b87ed2 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -93,4 +93,9 @@ for r in songbooks mediator intermediauth; do cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" done +for job in backup archive notmuch-dump mbox-archive mr-remotes-backup; do + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" +done + popd > /dev/null || exit 1 diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh new file mode 100644 index 0000000..5610895 --- /dev/null +++ b/bash/templates/cronjob-with-email.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="__JOB__-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/__JOB__.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh new file mode 100755 index 0000000..6b612f6 --- /dev/null +++ b/scripts/ad-hoc/archive.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +# echo "Starting: $(date -Is)" + +# FWIPIXME: support RSS bookmarks + +export end="\033[0m" +export red="\033[0;31m" +export green="\033[0;32m" +export yellow="\033[0;33m" +red() { echo -e "${red}${1}${end}"; } +green() { echo -e "${green}${1}${end}"; } +yellow() { echo -e "${yellow}${1}${end}"; } + +# Derived from ArchiveBox: +# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 +pushd "$(mktemp -d)" > /dev/null + +# copy the database to avoid locking issues +cp ~/.mozilla/firefox/*.default/places.sqlite places.sqlite + +QUERY=$(cat < bookmarks-archive.json +# green "Done." +# popd > /dev/null + +# export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" +# export FETCH_MEDIA=False +# export TIMEOUT=180 # default is too small: 60 (seconds) + +# "${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" + +# echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/mr-remotes-backup-job.sh b/scripts/ad-hoc/mr-remotes-backup-job.sh new file mode 100755 index 0000000..4a2e650 --- /dev/null +++ b/scripts/ad-hoc/mr-remotes-backup-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="mr-remotes-backup-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh new file mode 100755 index 0000000..c78663e --- /dev/null +++ b/scripts/ad-hoc/notmuch-dump.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +exec &> /dev/stdout +echo "Starting: $(date -Is)" + +[[ -f ~/archive/notmuch-archive.today.gz ]] && { + mv ~/archive/notmuch-archive.today.gz ~/archive/notmuch-archive.yesterday.gz +} +notmuch dump --gzip --output ~/archive/notmuch-archive.today.gz + +echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/notmuch-restore.sh b/scripts/ad-hoc/notmuch-restore.sh new file mode 100755 index 0000000..fe65783 --- /dev/null +++ b/scripts/ad-hoc/notmuch-restore.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout + +mkdir -p ~/mbsync/.notmuch/ +notmuch restore --input ~/archive/notmuch-archive.today.gz +notmuch new --no-hooks + +# FIXME diff --git a/scripts/cron/archive-job.sh b/scripts/cron/archive-job.sh new file mode 100755 index 0000000..411001f --- /dev/null +++ b/scripts/cron/archive-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="archive-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/archive.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/archive.sh b/scripts/cron/archive.sh deleted file mode 100755 index 6b612f6..0000000 --- a/scripts/cron/archive.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -# echo "Starting: $(date -Is)" - -# FWIPIXME: support RSS bookmarks - -export end="\033[0m" -export red="\033[0;31m" -export green="\033[0;32m" -export yellow="\033[0;33m" -red() { echo -e "${red}${1}${end}"; } -green() { echo -e "${green}${1}${end}"; } -yellow() { echo -e "${yellow}${1}${end}"; } - -# Derived from ArchiveBox: -# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 -pushd "$(mktemp -d)" > /dev/null - -# copy the database to avoid locking issues -cp ~/.mozilla/firefox/*.default/places.sqlite places.sqlite - -QUERY=$(cat < bookmarks-archive.json -# green "Done." -# popd > /dev/null - -# export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" -# export FETCH_MEDIA=False -# export TIMEOUT=180 # default is too small: 60 (seconds) - -# "${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" - -# echo "Finishing: $(date -Is)" diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 95b350e..d74d83b 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -1,5 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") finish() { status=$? @@ -9,13 +11,13 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - mail cron@euandre.org -afrom:cron@euandre.org -s "Borg backup job report on $(hostname): ${STATUS}" --content-type 'text/plain; charset=utf-8' -A"$LOG_FILE" <<< 'The log report is in the attachment.' - + SUBJECT="backup-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org echo 'Mail sent!' } trap finish EXIT -LOG_FILE="$(mktemp)" - -echo 'Starting backup job...' -~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh cron 2>&1 | tee "${LOG_FILE}" +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh new file mode 100755 index 0000000..66e4694 --- /dev/null +++ b/scripts/cron/mbox-archive-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="mbox-archive-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/mbox-archive.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh new file mode 100755 index 0000000..7ec7ce6 --- /dev/null +++ b/scripts/cron/notmuch-dump-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="notmuch-dump-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/notmuch-dump.sh b/scripts/cron/notmuch-dump.sh deleted file mode 100755 index c78663e..0000000 --- a/scripts/cron/notmuch-dump.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -exec &> /dev/stdout -echo "Starting: $(date -Is)" - -[[ -f ~/archive/notmuch-archive.today.gz ]] && { - mv ~/archive/notmuch-archive.today.gz ~/archive/notmuch-archive.yesterday.gz -} -notmuch dump --gzip --output ~/archive/notmuch-archive.today.gz - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 1039e40bfb1ef665fdbd2f9f845d6360717bf408 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:01:32 -0300 Subject: backup.sh: Don't backup gPodder media --- scripts/ad-hoc/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 6db1154..ce4e052 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -26,6 +26,7 @@ echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' borg create \ --exclude ~/mbsync/.notmuch/ \ + --exclude ~/gPodder/Downloads \ --verbose \ --stats \ --progress \ -- cgit v1.2.3 From 2770ab82ec3e28ec52dae918cfcd32c713dc5390 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:01:48 -0300 Subject: configuration.nix: Clean up unused packages --- nixos/configuration.nix | 128 ++---------------------------------------------- 1 file changed, 5 insertions(+), 123 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 403315d..d6437d7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -101,10 +101,6 @@ in { }); in with pkgs; [ - swift - - nixfmt - cppcheck ## Personal data tools mercurialFull @@ -114,19 +110,15 @@ in { gitAndTools.diff-so-fancy gitAndTools.git-annex gitAndTools.gitRemoteGcrypt - gitAndTools.git-secrets - gitAndTools.git-bug git-crypt git-lfs gnupg mr nextcloud-client borgbackup - git-sizer ## CLI tools - exercism bash bash-completion nix-bash-completions @@ -139,7 +131,6 @@ in { gettext # =envsubst= ag gnugrep - ack htop gotop rlwrap @@ -148,99 +139,40 @@ in { openvpn xclip bc # binary calculator used in nucli - sassc - watchman - ipfs gnumake - gcc - clang-tools # =clang-format= psmisc # =killall= xorg.xkill - bfg-repo-cleaner - pwgen gksu # =gksudo= - gnome2.GConf # https://github.com/NixOS/nixpkgs/issues/15978 - lsof - pciutils - python27Packages.pywatchman # =watchman-wait= - libressl tree - i2p libxml2 # =xmllint= unzip # used by extract bash function and Clojure go-to-source - odt2txt # used to diff odf files feh # simplistic image viewer nixUnstable # =nix= zip - zlib - redis alsaUtils # for xmonad volume commands - multimarkdown # =markdown= - pup # command-line HTML parsing https://github.com/ericchiang/pup nssTools # =pk12util= - gitAndTools.hub # GitHub helper - insomnia bind # =dig= - file - gitlab-runner - sshpass rsync - zathura # for viewing Emacs PDF files - # nvi broken - cacert - gtypist - pandoc inotify-tools - fzf ncdu fd - nnn - python36Packages.python-slugify moreutils # =vipe= - bazel graphviz # =dot= and others graph-easy # ASCII drawings for GraphViz output mkpasswd direnv recutils sqlite - sqlitebrowser trash-cli qrencode peek # GIF recorder - cabal-install entr - elmPackages.elm - now-cli - ghc - # cabal2nix broken - nix-prefetch-git - hlint - nix-prefetch-docker - elm2nix - # elmPackages.elm-format broken - # stylish-haskell broken - wasm-pack - zfs fossil - tcl - tk - cmus - wirelesstools # includes =iwgetid= - acpi # For checking the battery from command-line - autoconf - automake - mb2md - help2man - logrotate mailutils ffmpeg-full - html-tidy - hunspell - - # diffoscope broken - poppler_utils # used by diffoscope for comparing PDF files - pdftk + ledger + ranger + electrum gnome3.libgnome-keyring gnome3.gnome-keyring @@ -256,12 +188,6 @@ in { (aspellWithDicts (ps: with ps; [ en eo fr pt_BR ])) languagetool - ## NixOS - - pypi2nix - bundix - cachix - ## Music texlive.combined.scheme-full @@ -274,60 +200,29 @@ in { ## Programming tools - rstudio + cachix + nixfmt sbcl - stack leiningen python3 - python - poetry - yarn elixir openjdk - # solc broken - bundler clojure # =clj= - visualvm # JVM profiling tool - ant - maven - go - godef - bats - ledger perl - perlPackages.Appcpanminus - perlPackages.Mojolicious dhall dhall-json nodePackages.node2nix shellcheck - # (haskell.lib.justStaticExecutables haskellPackages.github-backup) broken - carnix xsel nodejs-10_x - # swift broken - gocode - jetbrains.idea-community - scala - sbt - heroku ruby pinentry - # zig broken - ranger ## Containers and VMs - packer - docker_compose - docker-machine - # vagrant broken kubernetes - ansible qemu gnome3.gtk-vnc - nixops - terraform-full ## xmonad @@ -348,30 +243,17 @@ in { ## GUI programs fractal - inkscape calibre - cozy gpodder-with-youtube-dl firefox emacs tdesktop # telegram-desktop application - deltachat-electron - dino vlc keepassxc yubioath-desktop - # tor-browser-bundle-bin broken libreoffice - # patchwork-classic broken chromium # required for ArchiveBox transmission-gtk - - ## Cryptocururencies - - electrum - zbar # for on-screen QR Code scanning - monero - ] ++ localConfiguration.proprietaryPackages; nixpkgs = { -- cgit v1.2.3 From 40107bc8aaf9e1f831e22ccfb9eb9cafabaadee8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:02:22 -0300 Subject: fake-symlinks: Use tests.sh instead of Makefile --- bash/templates/utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index a95c016..79b2aae 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -7,7 +7,7 @@ phases = "unpackPhase buildPhase"; buildPhase = '' patchShebangs . - make check + ./tests.sh touch ${DOLLAR}out ''; }; -- cgit v1.2.3 From f28150dd01e4c85c72143b6e8bbe0af5cbeadd66 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:02:40 -0300 Subject: gitconfig: Remove odf diff --- git/gitconfig.ini | 5 ----- 1 file changed, 5 deletions(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index dd87151..fba6c98 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -12,11 +12,6 @@ # drops a db file into sqlite3 and runs .dump before any diff comparisons binary = true textconv = "echo .dump | sqlite3" -[diff "odf"] - # https://medium.com/@mbrehin/git-advanced-diff-odt-pdf-doc-xls-ppt-25afbf4f1105 - # http://blog.riemann.cc/2013/04/23/versioning-of-openoffice-libreoffice-documents-using-git/ - # https://illidiumq36.wordpress.com/2013/10/06/diff-odp_files_using_git/ - textconv = odt2txt [core] editor = vi pager = diff-so-fancy | less --tabs=4 -RFX -- cgit v1.2.3 From 1a17add7726d345de9b4906bc37eab33208045b8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:02:56 -0300 Subject: common.nix: Make it DRYer --- nixos/common.nix | 25 +++++++++++++++---------- 1 file changed, 15 insertions(+), 10 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index d994e81..645663c 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,16 +1,21 @@ let cron-for-name = name: cron: "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh >> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; + daily-at-12h = "0 12 * * *"; + every-hour = "0 * * * *"; crons = { - nextcloud = "*/15 * * * *"; - deliver-queued-mail = "0 * * * *"; - sync-mail = "0 * * * *"; - nix-search-update = "0 12 * * *"; - guix-pull = "0 12 * * *"; - repo-update = "0 12 * * *"; - archive = "0 12 * * *"; - backup = "0 12 * * SUN"; - notmuch-dump = "0 12 * * *"; - mr-remotes-backup = "0 12 * * *"; + nextcloud = every-hour; + sync-mail = every-hour; + deliver-queued-mail = every-hour; + + guix-pull = daily-at-12h; + repo-update = daily-at-12h; + nix-search-update = daily-at-12h; + + backup-job = daily-at-12h; + archive-job = daily-at-12h; + notmuch-dump-job = daily-at-12h; + mbox-archive-job = daily-at-12h; + mr-remotes-backup-job = daily-at-12h; }; in { crons = builtins.mapAttrs cron-for-name crons; } -- cgit v1.2.3 From c6ecf0c72aed5813bde5a28d42420536957328a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:03:14 -0300 Subject: Don't treat rsync.net name as private --- scripts/ad-hoc/backup.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index ce4e052..86256f4 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -12,8 +12,7 @@ BACKUP_TAG="${1-adhoc}" . "${HOME}/.ssh/environment" > /dev/null BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" export BORG_PASSPHRASE -R="$(cat ~/annex/secret/rsync.net/addr.txt)" -export R +R='16686@ch-s010.rsync.net' export BORG_REMOTE_PATH="borg1" # Required for properly running Git Annex, related issue: # https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ -- cgit v1.2.3 From 8dc2528188ab2d382d4ada659dd734b0f6197eb4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:05:15 -0300 Subject: default.nix: Be specific when excluding from FIXME --- default.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/default.nix b/default.nix index b479f63..5ca6098 100644 --- a/default.nix +++ b/default.nix @@ -22,7 +22,7 @@ in rec { "default.nix" "utils.nix" "scripts/ad-hoc/pastebin.sh" - "bash/templates/" + "bash/templates/assert-todos.sh" ]) ]; publishScript = -- cgit v1.2.3 From 33458ac42aea0032f6411b7acd4737715cc0ffa0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:16:42 -0300 Subject: clean up env.sh --- bash/env.sh | 84 ++----------------------------------------------------------- 1 file changed, 2 insertions(+), 82 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 5d47f39..f5c9010 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -1,89 +1,9 @@ #!/usr/bin/env bash -# -# Perl6 -# - -export PATH=~/.rakudobrew/bin:$PATH -export PATH="${HOME}/.rakudo/bin:${PATH}" -export PATH="${HOME}/.rakudo/share/perl6/site/bin:${PATH}" -export PATH="$HOME/.perl6/bin:$PATH" - - -# -# Haskel Stack -# - -export PATH=~/.local/bin:$PATH - - - -# -# Misc -# - +export R='16686@ch-s010.rsync.net' export EDITOR=vi -export PATH="${DOTFILES}/scripts/ad-hoc:${PATH}" -export PATH="${DOTFILES}/scripts/cron:${PATH}" -export PATH="$HOME/annex/bin:$PATH" export INPUTRC=~/.inputrc -export CACHE_DIR="$HOME/Nextcloud/Cache" -export PATH="$HOME/dev/libre/website/:$PATH" -export PATH="$DOTFILES/bin:$PATH" -export PATH="$HOME/dev/misc/flutter/bin:$PATH" -export PATH="$HOME/dev/libre/songbooks/cli:$PATH" -export PATH="$HOME/dev/misc/ArchiveBox/bin:$PATH" -#export BROWSER="firefox" - - - -# -# Global (not NixOS) NPM -# - -export PATH="$HOME/.npm-packages/bin/:$PATH" +export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin:$DOTFILES/bin:${PATH}" - - -# -# Leiningen -# - -export LEIN_SUPPRESS_USER_LEVEL_REPO_WARNINGS=1 - - -# -# NixOS -# - - -isLinux && { - export SSL_CERT_FILE=/etc/ssl/certs/ca-bundle.crt -} - - -# -# Guix -# - -GUIX_PROFILE="/home/andreh/.guix-profile" -isLinux && { - # shellcheck disable=SC1090 - . "$GUIX_PROFILE/etc/profile" -} -export PATH="$HOME/.guix-profile/bin${PATH:+:}$PATH" -export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" -export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" # after running guix package -i glibc-utf8-locales # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -export SSL_CERT_DIR="$HOME/.guix-profile/etc/ssl/certs" -export SSL_CERT_FILE="$HOME/.guix-profile/etc/ssl/certs/ca-certificates.crt" -export GIT_SSL_CAINFO="$SSL_CERT_FILE" -export INFOPATH="$HOME/.config/guix/current/share/info:$INFOPATH" - -# -# Go -# - -export GOPATH="$HOME/dev/go" -export PATH="$GOPATH/bin:$PATH" -- cgit v1.2.3 From 270ffb7f4d0646c85bb47af1be0f3d2b7432dc85 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:22:35 -0300 Subject: Clean up unused aliases --- bash/aliases.sh | 34 +++++----------------------------- 1 file changed, 5 insertions(+), 29 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 55e693a..ab2e86a 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -4,42 +4,27 @@ unalias -a alias open="xdg-open" -alias ros="rlwrap ros -l ~/.sbclrc" alias l="ls -lahp --color" -alias ll="ls -lhp --color" -isLinux && { - alias copy="tr -d '\\n' | xclip -sel clip" - alias cop="xclip -sel clip" -} -isMac && { - alias copy="tr -d '\\n' | pbcopy" -} -alias trim="tr -d '\\n'" -alias lowercase="tr [:upper:] [:lower:]" -alias lc="tr [:upper:] [:lower:]" -alias pia-vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" +alias copy="tr -d '\\n' | xclip -sel clip" +alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 alias watch="watch --color " alias mr="mr -s" alias sbcl="rlwrap sbcl" alias ncdu="ncdu --color dark" -alias perl6="rlwrap perl6" alias mm="sync-mail.sh" alias m="sync-mail.sh --fast" -alias a="atom.sh" alias n="nextcloud.sh" -alias sb="songbooks" alias sqlite="rlwrap sqlite3" alias p='ping euandre.org -c 3' alias c='tmux send-keys -R \; clear-history' - alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" - alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" - alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" - alias mux="tmuxinator start" +alias s="git status" +alias d="git diff" +alias ds="git diff --staged" u() { pushd ~/annex > /dev/null || exit 1; @@ -48,15 +33,6 @@ u() { } export -f u -MY_PS1="$PS1" -ps1() { - export PS1="$MY_PS1" -} - -# git -alias s="git status" -alias d="git diff" -alias ds="git diff --staged" alias reload="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" alias rr="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" -- cgit v1.2.3 From 4747804f60f2e94cdaffa4c52635540e009c14fe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:24:58 -0300 Subject: Remove isLinux and isMac: everything isLinux now --- bash/config.sh | 14 ++++++-------- bash/facepalm/Positive.mp3 | Bin 59008 -> 0 bytes bash/facepalm/rotten-apple.sh | 31 ------------------------------- bash/init.sh | 1 + bash/platform.sh | 19 ------------------- bash/symlinks.sh | 5 ++--- bash/x.sh | 30 ++++++++++++++---------------- 7 files changed, 23 insertions(+), 77 deletions(-) delete mode 100644 bash/facepalm/Positive.mp3 delete mode 100644 bash/facepalm/rotten-apple.sh delete mode 100644 bash/platform.sh diff --git a/bash/config.sh b/bash/config.sh index bd0870a..8a53999 100644 --- a/bash/config.sh +++ b/bash/config.sh @@ -27,14 +27,12 @@ HISTFILESIZE=2000000 # update the values of LINES and COLUMNS. shopt -s checkwinsize -isLinux && { - # If set, the pattern "**" used in a pathname expansion context will - # match all files and zero or more directories and subdirectories. - shopt -s globstar - - # If set, the pattern "*" will also match dotfiles. - shopt -s dotglob -} +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +shopt -s globstar + +# If set, the pattern "*" will also match dotfiles. +shopt -s dotglob stty -ixon diff --git a/bash/facepalm/Positive.mp3 b/bash/facepalm/Positive.mp3 deleted file mode 100644 index a560be1..0000000 Binary files a/bash/facepalm/Positive.mp3 and /dev/null differ diff --git a/bash/facepalm/rotten-apple.sh b/bash/facepalm/rotten-apple.sh deleted file mode 100644 index 5ced46f..0000000 --- a/bash/facepalm/rotten-apple.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -# shellcheck disable=SC1090 -# shellcheck disable=SC1091 -# shellcheck disable=SC2139 - -isMac && { - unalias open - - alias limpar-derived-data="rm -rf ~/Library/Developer/Xcode/DerivedData/" - alias fim="afplay $DOTFILES/bash/facepalm/Positive.mp3" - - if [ -f "$(brew --prefix)/etc/bash_completion" ]; then - . "$(brew --prefix)/etc/bash_completion" - fi - - [ -f /usr/local/etc/bash_completion ] && . /usr/local/etc/bash_completion - - [ -f /usr/local/etc/profile.d/autojump.sh ] && . /usr/local/etc/profile.d/autojump.sh - - - alias ast="open -a \"Android Studio\"" - - export NVM_DIR="$HOME/.nvm" - [ -s "$NVM_DIR/nvm.sh" ] && \. "$NVM_DIR/nvm.sh" # This loads nvm - [ -s "$NVM_DIR/bash_completion" ] && \. "$NVM_DIR/bash_completion" # This loads nvm bash_completion - - eval "$(rbenv init -)" - - PATH="/usr/local/opt/make/libexec/gnubin:$PATH" - PATH="/usr/local/bin:$PATH" -} diff --git a/bash/init.sh b/bash/init.sh index 4e0ee65..c1a09d8 100644 --- a/bash/init.sh +++ b/bash/init.sh @@ -4,6 +4,7 @@ locked_init() { pushd ~/ > /dev/null || exit 1 mkdir -p ~/.emacs.d/.cache/ + AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt" mkdir -p "$(dirname "$AUTOJUMP_TXT")" touch "$AUTOJUMP_TXT" diff --git a/bash/platform.sh b/bash/platform.sh deleted file mode 100644 index eb262e9..0000000 --- a/bash/platform.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash - -isMac () { - [[ "$(uname)" == 'Darwin' ]] -} - -isLinux () { - [[ "$(uname)" == 'Linux' ]] -} - -isMac && { - export MEDIA_PREFIX=/Volumes - export AUTOJUMP_TXT="$HOME/Library/autojump/autojump.txt" -} - -isLinux && { - export MEDIA_PREFIX=/run/media/andreh - export AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt" -} diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 4d3fe63..7d718d6 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -18,15 +18,14 @@ ln -fs "$DOTFILES/git/gitignore" ~/.gitignore_global ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap -isLinux && { - ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc -} +ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc mkdir -p ~/.gnupg ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig +MEDIA_PREFIX=/run/media/andreh upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER diff --git a/bash/x.sh b/bash/x.sh index 454696a..04d38a1 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -1,21 +1,19 @@ #!/usr/bin/env bash -isLinux && { - setxkbmap -option esperanto:qwerty - xset r rate 250 50 +setxkbmap -option esperanto:qwerty +xset r rate 250 50 - # query with: xdg-mime query filetype - xdg-mime default evince.desktop application/pdf - xdg-mime default vlc.desktop video/mp4 - xdg-mime default vlc.desktop video/webm - xdg-mime default vlc.desktop video/x-matroska - xdg-mime default vlc.desktop audio/mpeg - xdg-mime default vlc.desktop audio/x-flac +# query with: xdg-mime query filetype +xdg-mime default evince.desktop application/pdf +xdg-mime default vlc.desktop video/mp4 +xdg-mime default vlc.desktop video/webm +xdg-mime default vlc.desktop video/x-matroska +xdg-mime default vlc.desktop audio/mpeg +xdg-mime default vlc.desktop audio/x-flac - xdg-settings set default-web-browser firefox.desktop - xdg-mime default firefox.desktop text/html - xdg-mime default firefox.desktop text/xml +xdg-settings set default-web-browser firefox.desktop +xdg-mime default firefox.desktop text/html +xdg-mime default firefox.desktop text/xml - xdg-mime default nautilus.desktop inode/directory - xmodmap ~/.Xmodmap -} +xdg-mime default nautilus.desktop inode/directory +xmodmap ~/.Xmodmap -- cgit v1.2.3 From 356e708548af3080d40c6b32c88e4593193acc10 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 22 Sep 2020 22:25:19 -0300 Subject: Remove lein/ files, should stop using git-crypt now --- bash/init.sh | 10 ---------- lein/deps.edn | Bin 919 -> 0 bytes lein/profiles.clj | Bin 1177 -> 0 bytes 3 files changed, 10 deletions(-) delete mode 100644 lein/deps.edn delete mode 100644 lein/profiles.clj diff --git a/bash/init.sh b/bash/init.sh index c1a09d8..41b9ffa 100644 --- a/bash/init.sh +++ b/bash/init.sh @@ -34,13 +34,3 @@ export -f locked_init # Tests pushd "$DOTFILES" > /dev/null || exit 1 - -sizes=$(git diff-files --ignore-submodules | awk '{print $6}' | xargs du | awk '{print $1}') -for size in $sizes; do - if [[ $size = 1 ]]; then - # https://github.com/AGWA/git-crypt/issues/53 - echo "dotfiles contains encrypted file with 0 bytes" - fi -done - -popd > /dev/null || exit 1 diff --git a/lein/deps.edn b/lein/deps.edn deleted file mode 100644 index 22a3ddc..0000000 Binary files a/lein/deps.edn and /dev/null differ diff --git a/lein/profiles.clj b/lein/profiles.clj deleted file mode 100644 index 6d59fe9..0000000 Binary files a/lein/profiles.clj and /dev/null differ -- cgit v1.2.3 From 3d5dac239beebc65301371477880a864cd7cf515 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 09:39:18 -0300 Subject: Remove .gitattrites with git-crypt configuration --- .gitattributes | 2 -- 1 file changed, 2 deletions(-) delete mode 100644 .gitattributes diff --git a/.gitattributes b/.gitattributes deleted file mode 100644 index 83fd8de..0000000 --- a/.gitattributes +++ /dev/null @@ -1,2 +0,0 @@ -lein/profiles.clj filter=git-crypt diff=git-crypt -lein/deps.edn filter=git-crypt diff=git-crypt -- cgit v1.2.3 From df2c1ec9acab367aad3e12dd634179be01c767ee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 09:39:46 -0300 Subject: Remove .git-crypt/ --- .git-crypt/.gitattributes | 3 --- .../0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg | Bin 724 -> 0 bytes 2 files changed, 3 deletions(-) delete mode 100644 .git-crypt/.gitattributes delete mode 100644 .git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg diff --git a/.git-crypt/.gitattributes b/.git-crypt/.gitattributes deleted file mode 100644 index 17ef601..0000000 --- a/.git-crypt/.gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -# Do not edit this file. To specify the files to encrypt, create your own -# .gitattributes file in the directory where your files are. -* !filter !diff diff --git a/.git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg b/.git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg deleted file mode 100644 index 382b031..0000000 Binary files a/.git-crypt/keys/default/0/5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060.gpg and /dev/null differ -- cgit v1.2.3 From 43fd5406c36749a3415aa88d61d12a5c89341f56 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 09:52:55 -0300 Subject: Remove guix-pull cronjob --- nixos/common.nix | 1 - nixos/usurpador.nix | 1 - scripts/cron/guix-pull.sh | 10 ---------- 3 files changed, 12 deletions(-) delete mode 100755 scripts/cron/guix-pull.sh diff --git a/nixos/common.nix b/nixos/common.nix index 645663c..8e4c35c 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -8,7 +8,6 @@ let sync-mail = every-hour; deliver-queued-mail = every-hour; - guix-pull = daily-at-12h; repo-update = daily-at-12h; nix-search-update = daily-at-12h; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 56d4097..19c6f21 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -11,7 +11,6 @@ in rec { allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ common.crons.nix-search-update - common.crons.guix-pull common.crons.repo-update common.crons.sync-mail common.crons.deliver-queued-mail diff --git a/scripts/cron/guix-pull.sh b/scripts/cron/guix-pull.sh deleted file mode 100755 index 6740540..0000000 --- a/scripts/cron/guix-pull.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -export PATH="$HOME/.config/guix/current/bin${PATH:+:}$PATH" -guix pull - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 74489216579b1e23d89e23d0c117f6a75cbe2401 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 12:29:04 -0300 Subject: Simplify backup.sh to only do borg, and move archive responsabilities to other cronjobs --- bash/fake-symlinks.sh | 2 +- nixos/common.nix | 1 + nixos/usurpador.nix | 17 +++++++++++------ scripts/ad-hoc/backup.sh | 30 ++---------------------------- scripts/ad-hoc/hd.sh | 13 +++++++++++++ scripts/ad-hoc/mbox-archive.sh | 5 +++++ scripts/ad-hoc/notmuch-dump.sh | 6 +++--- scripts/ad-hoc/notmuch-restore.sh | 2 +- scripts/cron/annex-job.sh | 23 +++++++++++++++++++++++ scripts/cron/annex.sh | 19 +++++++++++++++++++ scripts/cron/mr-remotes-backup-job.sh | 23 +++++++++++++++++++++++ 11 files changed, 102 insertions(+), 39 deletions(-) create mode 100755 scripts/ad-hoc/hd.sh create mode 100644 scripts/ad-hoc/mbox-archive.sh create mode 100755 scripts/cron/annex-job.sh create mode 100755 scripts/cron/annex.sh create mode 100755 scripts/cron/mr-remotes-backup-job.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 0b87ed2..1a833f1 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -93,7 +93,7 @@ for r in songbooks mediator intermediauth; do cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" done -for job in backup archive notmuch-dump mbox-archive mr-remotes-backup; do +for job in annex backup archive notmuch-dump mbox-archive mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done diff --git a/nixos/common.nix b/nixos/common.nix index 8e4c35c..98248b6 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -11,6 +11,7 @@ let repo-update = daily-at-12h; nix-search-update = daily-at-12h; + annex-job = daily-at-12h; backup-job = daily-at-12h; archive-job = daily-at-12h; notmuch-dump-job = daily-at-12h; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 19c6f21..7393c7a 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,13 +10,18 @@ in rec { proprietaryPackages = with pkgs; [ slack zoom-us ]; allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ - common.crons.nix-search-update - common.crons.repo-update + common.crons.nextcloud common.crons.sync-mail common.crons.deliver-queued-mail - common.crons.nextcloud - common.crons.backup - common.crons.notmuch-dump - common.crons.mr-remotes-backup + + common.crons.repo-update + common.crons.nix-search-update + + common.crons.annex-job + common.crons.backup-job + common.crons.archive-job + common.crons.notmuch-dump-job + common.crons.mbox-archive-job + common.crons.mr-remotes-backup-job ]; } diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 86256f4..6662717 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -13,15 +13,7 @@ BACKUP_TAG="${1-adhoc}" BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" export BORG_PASSPHRASE R='16686@ch-s010.rsync.net' -export BORG_REMOTE_PATH="borg1" -# Required for properly running Git Annex, related issue: -# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ -export LANG=C.UTF-8 - -mkdir -p ~/archive/ ~/mbsync/ - -echo 'TODO: Download MBOX archive of mailing lists, see:' -echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' +export BORG_REMOTE_PATH='borg1' borg create \ --exclude ~/mbsync/.notmuch/ \ @@ -41,25 +33,7 @@ borg create \ cd ~/dev/libre/borg/ git add . -git commit -m "JOB: automated update of borg config files after backup.sh" +git commit -m 'JOB: automated update of borg config files after backup.sh' git push origin master -cd ~/annex/ -../cron/nextcloud.sh -git annex sync -../cron/nextcloud.sh - -if [ ! -d ~/UTCLOUD/ ]; then - echo "$HOME/UTCLOUD not attached, not sending data there." -else - cd ~/dev/ - mr -s push hd - rsync -avzP "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ - rsync -avzP "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ - rsync -avzP euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ - aws s3 sync ~/UTCLOUD/backups/ s3://euandreh-backups/ -fi - -rsync -avzP euandre.org:/home/user-data/backup/encrypted/ "$R:box-duplicity/" - echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh new file mode 100755 index 0000000..3e2aee7 --- /dev/null +++ b/scripts/ad-hoc/hd.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +cd "$(dirname "${BASH_SOURCE[0]}")" +../cron/annex.sh + +cd ~/dev/ +mr -s hd +rsync -avzP "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ +rsync -avzP "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ +rsync -avzP euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ +rsync -avzP ~/UTCLOUD/backups/box-duplicity/ "$R:box-duplicity/" +aws s3 sync ~/UTCLOUD/backups/ s3://euandreh-backups/ diff --git a/scripts/ad-hoc/mbox-archive.sh b/scripts/ad-hoc/mbox-archive.sh new file mode 100644 index 0000000..52ed91d --- /dev/null +++ b/scripts/ad-hoc/mbox-archive.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +echo 'TODO: Download MBOX archive of mailing lists, see:' +echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh index c78663e..c3db81c 100755 --- a/scripts/ad-hoc/notmuch-dump.sh +++ b/scripts/ad-hoc/notmuch-dump.sh @@ -5,9 +5,9 @@ cd "$(dirname "${BASH_SOURCE[0]}")" exec &> /dev/stdout echo "Starting: $(date -Is)" -[[ -f ~/archive/notmuch-archive.today.gz ]] && { - mv ~/archive/notmuch-archive.today.gz ~/archive/notmuch-archive.yesterday.gz +[[ -f ~/archive/notmuch-archive.today.txt ]] && { + mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt } -notmuch dump --gzip --output ~/archive/notmuch-archive.today.gz +notmuch dump --output ~/archive/notmuch-archive.today.txt echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/notmuch-restore.sh b/scripts/ad-hoc/notmuch-restore.sh index fe65783..1949f20 100755 --- a/scripts/ad-hoc/notmuch-restore.sh +++ b/scripts/ad-hoc/notmuch-restore.sh @@ -4,7 +4,7 @@ set -Eeuo pipefail exec &> /dev/stdout mkdir -p ~/mbsync/.notmuch/ -notmuch restore --input ~/archive/notmuch-archive.today.gz +notmuch restore --input ~/archive/notmuch-archive.today.txt notmuch new --no-hooks # FIXME diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh new file mode 100755 index 0000000..8ea00b4 --- /dev/null +++ b/scripts/cron/annex-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="annex-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/annex.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/annex.sh b/scripts/cron/annex.sh new file mode 100755 index 0000000..d7347c1 --- /dev/null +++ b/scripts/cron/annex.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Required for properly running Git Annex, related issue: +# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ +export LANG=C.UTF-8 +AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" +AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" +export AWS_ACCESS_KEY_ID +export AWS_SECRET_ACCESS_KEY + +cd "$(dirname "${BASH_SOURCE[0]}")" +../cron/nextcloud.sh + +cd ~/annex/ +git annex sync + +cd "$(dirname "${BASH_SOURCE[0]}")" +../cron/nextcloud.sh diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh new file mode 100755 index 0000000..4a2e650 --- /dev/null +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="mr-remotes-backup-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh cron +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From fd079f281c49f82d3d81ec6b375c6b8cf191abe5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 12:29:32 -0300 Subject: spacemacs.el: Always replace original text from GPG plain email --- spacemacs.el | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index c377712..1cdc905 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -938,7 +938,9 @@ This is the place where most of your configurations should be done. Unless it is magit-diff-refine-hunk t magit-published-branches '() - helm-ag-base-command "ag --nocolor --nogroup --hidden") + helm-ag-base-command "ag --nocolor --nogroup --hidden" + + epa-replace-original-text t) (set-language-environment "UTF-8") (set-default-coding-systems 'utf-8) -- cgit v1.2.3 From 20fa5527dc7e57c46ea0bbc1c70695f037f05d4f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 12:29:53 -0300 Subject: bashrc.sh: Remove deleted files from sourcing list --- bash/bashrc.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 13abcf3..f083463 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -4,7 +4,6 @@ export DOTFILES=~/dev/libre/dotfiles -source $DOTFILES/bash/platform.sh source $DOTFILES/bash/config.sh source $DOTFILES/bash/env.sh source $DOTFILES/bash/colors.sh @@ -15,7 +14,6 @@ source $DOTFILES/bash/agents.sh source $DOTFILES/bash/init.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh -source $DOTFILES/bash/facepalm/rotten-apple.sh source $HOME/annex/bin/misc/env.sh source $DOTFILES/bash/fake-symlinks.sh -- cgit v1.2.3 From 9944e5e85501e5741e9de67c747fc361a33b47b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 12:35:29 -0300 Subject: Wrap more jobs with sending email reports, keep only hourly jobs without it --- bash/fake-symlinks.sh | 2 +- nixos/common.nix | 5 ++--- scripts/ad-hoc/annex.sh | 19 +++++++++++++++++++ scripts/ad-hoc/mr-remotes-backup.sh | 13 +++++++++++++ scripts/ad-hoc/nix-search-update.sh | 11 +++++++++++ scripts/ad-hoc/repo-update.sh | 12 ++++++++++++ scripts/cron/annex.sh | 19 ------------------- scripts/cron/mr-remotes-backup.sh | 13 ------------- scripts/cron/nix-search-update-job.sh | 23 +++++++++++++++++++++++ scripts/cron/nix-search-update.sh | 11 ----------- scripts/cron/repo-update-job.sh | 23 +++++++++++++++++++++++ scripts/cron/repo-update.sh | 12 ------------ 12 files changed, 104 insertions(+), 59 deletions(-) create mode 100755 scripts/ad-hoc/annex.sh create mode 100755 scripts/ad-hoc/mr-remotes-backup.sh create mode 100755 scripts/ad-hoc/nix-search-update.sh create mode 100755 scripts/ad-hoc/repo-update.sh delete mode 100755 scripts/cron/annex.sh delete mode 100755 scripts/cron/mr-remotes-backup.sh create mode 100755 scripts/cron/nix-search-update-job.sh delete mode 100755 scripts/cron/nix-search-update.sh create mode 100755 scripts/cron/repo-update-job.sh delete mode 100755 scripts/cron/repo-update.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 1a833f1..c7b0d86 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -93,7 +93,7 @@ for r in songbooks mediator intermediauth; do cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" done -for job in annex backup archive notmuch-dump mbox-archive mr-remotes-backup; do +for job in annex backup archive repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done diff --git a/nixos/common.nix b/nixos/common.nix index 98248b6..4651e5c 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -8,14 +8,13 @@ let sync-mail = every-hour; deliver-queued-mail = every-hour; - repo-update = daily-at-12h; - nix-search-update = daily-at-12h; - annex-job = daily-at-12h; backup-job = daily-at-12h; archive-job = daily-at-12h; + repo-update-job = daily-at-12h; notmuch-dump-job = daily-at-12h; mbox-archive-job = daily-at-12h; + nix-search-update-job = daily-at-12h; mr-remotes-backup-job = daily-at-12h; }; in { crons = builtins.mapAttrs cron-for-name crons; } diff --git a/scripts/ad-hoc/annex.sh b/scripts/ad-hoc/annex.sh new file mode 100755 index 0000000..d7347c1 --- /dev/null +++ b/scripts/ad-hoc/annex.sh @@ -0,0 +1,19 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# Required for properly running Git Annex, related issue: +# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ +export LANG=C.UTF-8 +AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" +AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" +export AWS_ACCESS_KEY_ID +export AWS_SECRET_ACCESS_KEY + +cd "$(dirname "${BASH_SOURCE[0]}")" +../cron/nextcloud.sh + +cd ~/annex/ +git annex sync + +cd "$(dirname "${BASH_SOURCE[0]}")" +../cron/nextcloud.sh diff --git a/scripts/ad-hoc/mr-remotes-backup.sh b/scripts/ad-hoc/mr-remotes-backup.sh new file mode 100755 index 0000000..26b1297 --- /dev/null +++ b/scripts/ad-hoc/mr-remotes-backup.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" +cd ~/dev/libre/ +mr -s push rsyncnet +mr -s push gitlab + +echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/nix-search-update.sh b/scripts/ad-hoc/nix-search-update.sh new file mode 100755 index 0000000..b811c6f --- /dev/null +++ b/scripts/ad-hoc/nix-search-update.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +# shellcheck source=/dev/null +source ~/.bash.env +nix search -u just-a-label-so-the-cache-can-be-updated + +echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/repo-update.sh b/scripts/ad-hoc/repo-update.sh new file mode 100755 index 0000000..03c1207 --- /dev/null +++ b/scripts/ad-hoc/repo-update.sh @@ -0,0 +1,12 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" +cd "${HOME}" +mr -j8 safeupdate + +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/annex.sh b/scripts/cron/annex.sh deleted file mode 100755 index d7347c1..0000000 --- a/scripts/cron/annex.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -# Required for properly running Git Annex, related issue: -# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ -export LANG=C.UTF-8 -AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" -AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" -export AWS_ACCESS_KEY_ID -export AWS_SECRET_ACCESS_KEY - -cd "$(dirname "${BASH_SOURCE[0]}")" -../cron/nextcloud.sh - -cd ~/annex/ -git annex sync - -cd "$(dirname "${BASH_SOURCE[0]}")" -../cron/nextcloud.sh diff --git a/scripts/cron/mr-remotes-backup.sh b/scripts/cron/mr-remotes-backup.sh deleted file mode 100755 index 26b1297..0000000 --- a/scripts/cron/mr-remotes-backup.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" -cd ~/dev/libre/ -mr -s push rsyncnet -mr -s push gitlab - -echo "Finishing: $(date -Is)" diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh new file mode 100755 index 0000000..9107bea --- /dev/null +++ b/scripts/cron/nix-search-update-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="nix-search-update-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/nix-search-update.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/nix-search-update.sh b/scripts/cron/nix-search-update.sh deleted file mode 100755 index b811c6f..0000000 --- a/scripts/cron/nix-search-update.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -# shellcheck source=/dev/null -source ~/.bash.env -nix search -u just-a-label-so-the-cache-can-be-updated - -echo "Finishing: $(date -Is)" diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh new file mode 100755 index 0000000..1ae2a42 --- /dev/null +++ b/scripts/cron/repo-update-job.sh @@ -0,0 +1,23 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + SUBJECT="repo-update-job.sh job report on $(hostname): ${STATUS}" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/repo-update.sh cron +echo "Finishing: $(date -Is)" diff --git a/scripts/cron/repo-update.sh b/scripts/cron/repo-update.sh deleted file mode 100755 index 03c1207..0000000 --- a/scripts/cron/repo-update.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" -cd "${HOME}" -mr -j8 safeupdate - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 1fcbb3d87092109ae2502f0611e8b8e0e2869aae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 12:36:17 -0300 Subject: Remove "cron" argument from job template and generated files --- bash/templates/cronjob-with-email.sh | 2 +- scripts/cron/annex-job.sh | 2 +- scripts/cron/archive-job.sh | 2 +- scripts/cron/backup-job.sh | 2 +- scripts/cron/mbox-archive-job.sh | 2 +- scripts/cron/mr-remotes-backup-job.sh | 2 +- scripts/cron/nix-search-update-job.sh | 2 +- scripts/cron/notmuch-dump-job.sh | 2 +- scripts/cron/repo-update-job.sh | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 5610895..ab223e1 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/__JOB__.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/__JOB__.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 8ea00b4..9eefbfe 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/annex.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/annex.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/archive-job.sh b/scripts/cron/archive-job.sh index 411001f..2a02c95 100755 --- a/scripts/cron/archive-job.sh +++ b/scripts/cron/archive-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/archive.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/archive.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index d74d83b..73a0f4b 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index 66e4694..0d76e29 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/mbox-archive.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/mbox-archive.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index 4a2e650..98e6656 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index 9107bea..007c730 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/nix-search-update.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/nix-search-update.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index 7ec7ce6..a7a52cd 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh echo "Finishing: $(date -Is)" diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 1ae2a42..1306daf 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -19,5 +19,5 @@ finish() { trap finish EXIT echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/repo-update.sh cron +~/dev/libre/dotfiles/scripts/ad-hoc/repo-update.sh echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 5d8488556039aaa0c1b5367a0159d971b63751d3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 14:01:52 -0300 Subject: Break exit code of archive.sh to make notification match the state of the script --- scripts/ad-hoc/archive.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index 6b612f6..e412fd3 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -42,6 +42,7 @@ FROM ( EOF ) sqlite3 places.sqlite "${QUERY}" +exit 1 # | jq > bookmarks-archive.json # green "Done." # popd > /dev/null -- cgit v1.2.3 From 6937e4533cd8902b5025c672f43e3ec133ee034f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 14:03:23 -0300 Subject: usurpador.nix: Fix name of cronjobs --- nixos/usurpador.nix | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 7393c7a..01d0a84 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -14,14 +14,13 @@ in rec { common.crons.sync-mail common.crons.deliver-queued-mail - common.crons.repo-update - common.crons.nix-search-update - common.crons.annex-job common.crons.backup-job common.crons.archive-job + common.crons.repo-update-job common.crons.notmuch-dump-job common.crons.mbox-archive-job + common.crons.nix-search-update-job common.crons.mr-remotes-backup-job ]; } -- cgit v1.2.3 From cc7578215683ef0f39ad63c44cff896a1750d085 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 14:32:06 -0300 Subject: Stop overriding FROM: when using mailutils --- bash/aliases.sh | 1 - bash/templates/cronjob-with-email.sh | 2 +- scripts/cron/annex-job.sh | 2 +- scripts/cron/archive-job.sh | 2 +- scripts/cron/backup-job.sh | 2 +- scripts/cron/mbox-archive-job.sh | 2 +- scripts/cron/mr-remotes-backup-job.sh | 2 +- scripts/cron/nix-search-update-job.sh | 2 +- scripts/cron/notmuch-dump-job.sh | 2 +- scripts/cron/repo-update-job.sh | 2 +- 10 files changed, 9 insertions(+), 10 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index ab2e86a..711470e 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -38,7 +38,6 @@ alias reload="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/t alias rr="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" alias r="source ~/.bashrc" -alias mail='mail -aFrom:eu@euandre.org' alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" alias grep='grep --color=always' diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index ab223e1..00b2754 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="__JOB__-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 9eefbfe..bbb53fb 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="annex-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/archive-job.sh b/scripts/cron/archive-job.sh index 2a02c95..a6acacf 100755 --- a/scripts/cron/archive-job.sh +++ b/scripts/cron/archive-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="archive-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 73a0f4b..131c70d 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="backup-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index 0d76e29..10f6577 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="mbox-archive-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index 98e6656..be41b63 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="mr-remotes-backup-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index 007c730..fc83bc1 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="nix-search-update-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index a7a52cd..f268316 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="notmuch-dump-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 1306daf..3f1dd80 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -13,7 +13,7 @@ finish() { SUBJECT="repo-update-job.sh job report on $(hostname): ${STATUS}" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org + mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' } trap finish EXIT -- cgit v1.2.3 From f89f362c1a118f6ed9e461e8c56d72d72a4a4abe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 14:32:17 -0300 Subject: Remove duplicated scripts/ad-hoc/mr-remotes-backup-job.sh --- scripts/ad-hoc/mr-remotes-backup-job.sh | 23 ----------------------- 1 file changed, 23 deletions(-) delete mode 100755 scripts/ad-hoc/mr-remotes-backup-job.sh diff --git a/scripts/ad-hoc/mr-remotes-backup-job.sh b/scripts/ad-hoc/mr-remotes-backup-job.sh deleted file mode 100755 index 4a2e650..0000000 --- a/scripts/ad-hoc/mr-remotes-backup-job.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") - -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - SUBJECT="mr-remotes-backup-job.sh job report on $(hostname): ${STATUS}" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -aFrom:cron@euandre.org -s "$SUBJECT" cron@euandre.org - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh cron -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From a5ad521233dc64c2621ce153452ce99fc3d07547 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 15:17:54 -0300 Subject: init.sh: Remove leftover code --- bash/init.sh | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/bash/init.sh b/bash/init.sh index 41b9ffa..f14f955 100644 --- a/bash/init.sh +++ b/bash/init.sh @@ -22,15 +22,3 @@ locked_init() { popd > /dev/null || exit 1 } export -f locked_init - -# touch /tmp/mr-lock -# exec 221>/tmp/mr-lock -# flock -n -e 221 && { -# locked_init -# } || { -# printf "" # noop: couldn't acquire lock -# } - -# Tests - -pushd "$DOTFILES" > /dev/null || exit 1 -- cgit v1.2.3 From 8dd154105f7b6bea4123a54a2ddb873149bae8a6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 15:18:04 -0300 Subject: ps1.sh: Quote variables in if statement --- bash/ps1.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 4f4dc1d..4f73584 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -104,8 +104,8 @@ if [ $? -eq 0 ]; then \ echo `git status` | grep -v "Changes" | grep -E "Votre branche est en retard" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ echo `git status` | grep -v "Modifications" | grep -E -v "Votre branche est en retard|Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ -fi)$(if [[ $IN_NIX_SHELL != "" ]]; then\ +fi)$(if [[ ${IN_NIX_SHELL:-} != "" ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ -fi)$(if [[ $GUIX_ENVIRONMENT != "" ]]; then\ +fi)$(if [[ ${GUIX_ENVIRONMENT:-} != "" ]]; then\ echo "\n'$IBlack'~>'$Color_Off' '$Purple'guix environment'$Color_Off' ('$BIBlue'$GUIX_ENVIRONMENT'$Color_Off')'$Color_Off'" ;\ fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' -- cgit v1.2.3 From 3219df5e1c66b7e63d4801fd8242614f1f64e6f2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 15:20:54 -0300 Subject: Do restore after notmuch-dump --- scripts/ad-hoc/notmuch-dump.sh | 5 +---- scripts/ad-hoc/notmuch-restore.sh | 10 ---------- 2 files changed, 1 insertion(+), 14 deletions(-) delete mode 100755 scripts/ad-hoc/notmuch-restore.sh diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh index c3db81c..a971cb2 100755 --- a/scripts/ad-hoc/notmuch-dump.sh +++ b/scripts/ad-hoc/notmuch-dump.sh @@ -2,12 +2,9 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -exec &> /dev/stdout -echo "Starting: $(date -Is)" - [[ -f ~/archive/notmuch-archive.today.txt ]] && { mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt } notmuch dump --output ~/archive/notmuch-archive.today.txt -echo "Finishing: $(date -Is)" +notmuch restore --accumulate --input ~/archive/notmuch-archive.today.txt diff --git a/scripts/ad-hoc/notmuch-restore.sh b/scripts/ad-hoc/notmuch-restore.sh deleted file mode 100755 index 1949f20..0000000 --- a/scripts/ad-hoc/notmuch-restore.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout - -mkdir -p ~/mbsync/.notmuch/ -notmuch restore --input ~/archive/notmuch-archive.today.txt -notmuch new --no-hooks - -# FIXME -- cgit v1.2.3 From b68f7f56e2c87b056126ad69d233aee56c3fdea0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 15:22:14 -0300 Subject: Remove unused once-only.sh --- scripts/ad-hoc/once-only.sh | 19 ------------------- 1 file changed, 19 deletions(-) delete mode 100755 scripts/ad-hoc/once-only.sh diff --git a/scripts/ad-hoc/once-only.sh b/scripts/ad-hoc/once-only.sh deleted file mode 100755 index b863beb..0000000 --- a/scripts/ad-hoc/once-only.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -COMMAND="${1:-}" - -[[ -z "$COMMAND" ]] && { - # shellcheck disable=SC2016 - red 'Input argument $COMMAND is undefined.' - exit 2 -} - -if [[ "$(pidof "${COMMAND}")" ]] -then - echo "'${COMMAND}' is already running." -else - echo "'${COMMAND}' is not running. Starting it." - exec "$@" & - disown -fi -- cgit v1.2.3 From 3e4fc8acecc38553c929aac2c9bb062844e1150f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 15:23:41 -0300 Subject: Remove duplicated "Starting: ..." timestamp log --- scripts/ad-hoc/archive.sh | 5 +---- scripts/ad-hoc/backup.sh | 8 +------- scripts/ad-hoc/mr-remotes-backup.sh | 5 ----- scripts/ad-hoc/nix-search-update.sh | 5 ----- scripts/ad-hoc/repo-update.sh | 5 ----- 5 files changed, 2 insertions(+), 26 deletions(-) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index e412fd3..84c4ad9 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -1,10 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail -exec &> /dev/stdout -# echo "Starting: $(date -Is)" - -# FWIPIXME: support RSS bookmarks +# FIXME: support RSS bookmarks export end="\033[0m" export red="\033[0;31m" diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 6662717..6def0f3 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -1,12 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -set -x -exec &> /dev/stdout -echo "Starting: $(date -Is)" - -BACKUP_TAG="${1-adhoc}" +BACKUP_TAG="${1-cron}" # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null @@ -35,5 +31,3 @@ cd ~/dev/libre/borg/ git add . git commit -m 'JOB: automated update of borg config files after backup.sh' git push origin master - -echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/mr-remotes-backup.sh b/scripts/ad-hoc/mr-remotes-backup.sh index 26b1297..6fab1e4 100755 --- a/scripts/ad-hoc/mr-remotes-backup.sh +++ b/scripts/ad-hoc/mr-remotes-backup.sh @@ -1,13 +1,8 @@ #!/usr/bin/env bash set -Eeuo pipefail -exec &> /dev/stdout -echo "Starting $(date -Is)" - # shellcheck source=/dev/null . "${HOME}/.ssh/environment" cd ~/dev/libre/ mr -s push rsyncnet mr -s push gitlab - -echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/nix-search-update.sh b/scripts/ad-hoc/nix-search-update.sh index b811c6f..422989d 100755 --- a/scripts/ad-hoc/nix-search-update.sh +++ b/scripts/ad-hoc/nix-search-update.sh @@ -1,11 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -exec &> /dev/stdout -echo "Starting $(date -Is)" - # shellcheck source=/dev/null source ~/.bash.env nix search -u just-a-label-so-the-cache-can-be-updated - -echo "Finishing: $(date -Is)" diff --git a/scripts/ad-hoc/repo-update.sh b/scripts/ad-hoc/repo-update.sh index 03c1207..3638976 100755 --- a/scripts/ad-hoc/repo-update.sh +++ b/scripts/ad-hoc/repo-update.sh @@ -1,12 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail -exec &> /dev/stdout -echo "Starting $(date -Is)" - # shellcheck source=/dev/null . "${HOME}/.ssh/environment" cd "${HOME}" mr -j8 safeupdate - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From adc25c46a465061701b73048263d8c2b03c73cca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 16:02:24 -0300 Subject: Split notmuch-restore.sh from notmuch-dump.sh again Doing them sequentially like that could lead to data loss: tags that I added between the two commands would be overwritten. Using --accumulate wouldn't solve it: this would add +unread and +inbox to all emails, essentially, since --accumulate does an union of tags. --- scripts/ad-hoc/notmuch-dump.sh | 3 --- scripts/ad-hoc/notmuch-restore.sh | 5 +++++ 2 files changed, 5 insertions(+), 3 deletions(-) create mode 100644 scripts/ad-hoc/notmuch-restore.sh diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh index a971cb2..5e0a1c2 100755 --- a/scripts/ad-hoc/notmuch-dump.sh +++ b/scripts/ad-hoc/notmuch-dump.sh @@ -1,10 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" [[ -f ~/archive/notmuch-archive.today.txt ]] && { mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt } notmuch dump --output ~/archive/notmuch-archive.today.txt - -notmuch restore --accumulate --input ~/archive/notmuch-archive.today.txt diff --git a/scripts/ad-hoc/notmuch-restore.sh b/scripts/ad-hoc/notmuch-restore.sh new file mode 100644 index 0000000..1f406be --- /dev/null +++ b/scripts/ad-hoc/notmuch-restore.sh @@ -0,0 +1,5 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +notmuch new +notmuch restore --input ~/archive/notmuch-archive.today.txt -- cgit v1.2.3 From fa35945c8fd6e4d15318a4b3c1bdc23d23f9b9d6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 17:06:06 -0300 Subject: Change subject of cronjob email report This way they will all align better on the inbox --- bash/templates/cronjob-with-email.sh | 2 +- scripts/cron/annex-job.sh | 2 +- scripts/cron/archive-job.sh | 2 +- scripts/cron/backup-job.sh | 2 +- scripts/cron/mbox-archive-job.sh | 2 +- scripts/cron/mr-remotes-backup-job.sh | 2 +- scripts/cron/nix-search-update-job.sh | 2 +- scripts/cron/notmuch-dump-job.sh | 2 +- scripts/cron/repo-update-job.sh | 2 +- 9 files changed, 9 insertions(+), 9 deletions(-) diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 00b2754..4a28729 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="__JOB__-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index bbb53fb..3f81a1a 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="annex-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/archive-job.sh b/scripts/cron/archive-job.sh index a6acacf..e9c27ce 100755 --- a/scripts/cron/archive-job.sh +++ b/scripts/cron/archive-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="archive-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for archive-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 131c70d..e5c3664 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="backup-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index 10f6577..b547b10 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="mbox-archive-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index be41b63..33d3a9c 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="mr-remotes-backup-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index fc83bc1..8d8ea2d 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="nix-search-update-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index f268316..e86732f 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="notmuch-dump-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 3f1dd80..680be20 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -11,7 +11,7 @@ finish() { STATUS="❌ FAILURE (status $status)" fi - SUBJECT="repo-update-job.sh job report on $(hostname): ${STATUS}" + SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org echo 'Mail sent!' -- cgit v1.2.3 From a8ac6918978b488b865664555a306f141d3cab91 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 17:11:24 -0300 Subject: Remove FIXME marker from archive.sh: Cronjob email will remind me of this --- scripts/ad-hoc/archive.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index 84c4ad9..ca6497c 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -# FIXME: support RSS bookmarks - export end="\033[0m" export red="\033[0;31m" export green="\033[0;32m" -- cgit v1.2.3 From 1113a7bb63f2d64679c9d02080bc03ebd9366e07 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 17:15:37 -0300 Subject: Add website pane to annex.yml tmuxinator project --- tmux/projects/annex.yml | 38 +++----------------------------------- 1 file changed, 3 insertions(+), 35 deletions(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index dff9dfa..5768eaf 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -3,10 +3,6 @@ name: annex+home windows: - annex+dotfiles: root: ~/annex/ - # Output from =tmux list-windows= - # Taken from: - # https://stackoverflow.com/questions/9812000/specify-pane-percentage-in-tmuxinator-project/9976282#9976282 - # layout: 64e7,150x39,0,0[150x25,0,0{85x25,0,0,98,64x25,86,0[64x14,86,0,119,64x10,86,15,120]},150x13,0,26,118] layout: main-vertical panes: - misc: @@ -15,36 +11,8 @@ windows: - cd "$DOTFILES" && git status - sleep 10 - reload + - website: + - cd ~/dev/libre/website/ + - nix-shell --run 'jekyll serve --future' - annex: - git status - # - pires: - # root: ~/dev/libre/pires/ - # layout: main-vertical - # panes: - # - misc: - # - s - # - client: - # - cd client/ - # - elm reactor - # - server: - # - cd server - # - nix-shell --run 'cabal run' - # - root: - # - s - # - vps: - # root: ~/dev/libre/vps/ - # layout: main-vertical - # panes: - # - vps: - # - s - # - vps-state: - # - cd ../vps-state/ - # - s - # - songbooks: - # root: ~/dev/libre/songbooks/ - # layout: main-vertical - # panes: - # - songbooks-main: - # - s - # - songbooks-test: - # - s -- cgit v1.2.3 From a064edc7878b12bf4682e88768d7211dc81c9b9c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 20:38:00 -0300 Subject: repo-update.sh: Show stats of repos --- scripts/ad-hoc/repo-update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/repo-update.sh b/scripts/ad-hoc/repo-update.sh index 3638976..2457d84 100755 --- a/scripts/ad-hoc/repo-update.sh +++ b/scripts/ad-hoc/repo-update.sh @@ -4,4 +4,4 @@ set -Eeuo pipefail # shellcheck source=/dev/null . "${HOME}/.ssh/environment" cd "${HOME}" -mr -j8 safeupdate +mr -s -j8 safeupdate -- cgit v1.2.3 From 778e47c82b6b1f396618174051e2f3cb2bf29116 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 21:03:41 -0300 Subject: nix-search-update.sh: Use a legitimate query to avoid the error exit code --- scripts/ad-hoc/nix-search-update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/nix-search-update.sh b/scripts/ad-hoc/nix-search-update.sh index 422989d..7a91b0e 100755 --- a/scripts/ad-hoc/nix-search-update.sh +++ b/scripts/ad-hoc/nix-search-update.sh @@ -3,4 +3,4 @@ set -Eeuo pipefail # shellcheck source=/dev/null source ~/.bash.env -nix search -u just-a-label-so-the-cache-can-be-updated +nix search -u lilypond # just a label so the cache can be updated -- cgit v1.2.3 From 1ade7307850d83b74a698026bdcf0dabeeca01b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 21:03:58 -0300 Subject: chmod +x scripts/ad-hoc/mbox-archive.sh --- scripts/ad-hoc/mbox-archive.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 scripts/ad-hoc/mbox-archive.sh diff --git a/scripts/ad-hoc/mbox-archive.sh b/scripts/ad-hoc/mbox-archive.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 1ee504652ba65bab5b5467631f2a1893c797d56d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 21:16:11 -0300 Subject: archive.sh: Use exit and remove comments --- scripts/ad-hoc/archive.sh | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index ca6497c..ba694f7 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -36,16 +36,13 @@ FROM ( ) EOF ) -sqlite3 places.sqlite "${QUERY}" exit 1 -# | jq > bookmarks-archive.json -# green "Done." -# popd > /dev/null +sqlite3 places.sqlite "${QUERY}" | jq > bookmarks-archive.json +green "Done." +popd > /dev/null -# export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" -# export FETCH_MEDIA=False -# export TIMEOUT=180 # default is too small: 60 (seconds) +export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" +export FETCH_MEDIA=False +export TIMEOUT=180 # default is too small: 60 (seconds) -# "${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" - -# echo "Finishing: $(date -Is)" +"${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" -- cgit v1.2.3 From 91fc271e9a55d952ec9abc9d8ce46e64cb7aafa9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 23 Sep 2020 21:55:00 -0300 Subject: archive.sh: Give up and use Docker for now --- scripts/ad-hoc/archive.sh | 28 ++++++++-------------------- 1 file changed, 8 insertions(+), 20 deletions(-) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index ba694f7..022aa9e 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -1,21 +1,9 @@ #!/usr/bin/env bash set -Eeuo pipefail -export end="\033[0m" -export red="\033[0;31m" -export green="\033[0;32m" -export yellow="\033[0;33m" -red() { echo -e "${red}${1}${end}"; } -green() { echo -e "${green}${1}${end}"; } -yellow() { echo -e "${yellow}${1}${end}"; } # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 -pushd "$(mktemp -d)" > /dev/null - -# copy the database to avoid locking issues -cp ~/.mozilla/firefox/*.default/places.sqlite places.sqlite - QUERY=$(cat < bookmarks-archive.json -green "Done." -popd > /dev/null -export OUTPUT_DIR="$HOME/archive/firefox-bookmarks-archive-output/" -export FETCH_MEDIA=False -export TIMEOUT=180 # default is too small: 60 (seconds) +# copy the database to avoid locking issues +TMPDB="$(mktemp)" +cp ~/.mozilla/firefox/*.default/places.sqlite "$TMPDB" + +cd "$HOME/archive/firefox-bookmarks-archive/" -"${ARCHIVE_BOX}" "${TMPDIR}/bookmarks-archive.json" +# I gave up on proper packaging for now, I'll stick with Docker +# while I regain energy and try again later +sqlite3 "$TMPDB" "${QUERY}" | docker run -v $PWD:/data -i nikisweeting/archivebox add -- cgit v1.2.3 From 408a1797786ca72025b7cdb2438ad44856bbca22 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 06:52:24 -0300 Subject: symlinks.sh: Remove Clojure links --- bash/symlinks.sh | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 7d718d6..bfcd2b5 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -29,12 +29,6 @@ MEDIA_PREFIX=/run/media/andreh upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER -## Clojure -mkdir -p ~/.lein ~/.clojure -ln -fs "$DOTFILES/lein/profiles.clj" ~/.lein/profiles.clj -ln -fs "$DOTFILES/lein/deps.edn" ~/.clojure/deps.edn - - ## tmux ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf -- cgit v1.2.3 From 5ffd241b5094c598e35e479f9b718660da94911f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 07:07:22 -0300 Subject: archive.sh: Quote "$PWD" --- scripts/ad-hoc/archive.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index 022aa9e..c555982 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -33,4 +33,4 @@ cd "$HOME/archive/firefox-bookmarks-archive/" # I gave up on proper packaging for now, I'll stick with Docker # while I regain energy and try again later -sqlite3 "$TMPDB" "${QUERY}" | docker run -v $PWD:/data -i nikisweeting/archivebox add +sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i nikisweeting/archivebox add -- cgit v1.2.3 From df9d3c3b375e8400cc5359d9d798f7d02f2ed1fb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 07:45:51 -0300 Subject: usurpador.nix: Add openfortivpn The package itself isn't proprietary, but fortivpn itself seems to be. --- nixos/usurpador.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 01d0a84..47317d9 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -7,7 +7,7 @@ in rec { luksDevice = "/dev/nvme0n1p3"; hashedPassword = privateConfiguration.hashedPassword; enableFlatpak = true; # for usage with proprietary Skype - proprietaryPackages = with pkgs; [ slack zoom-us ]; + proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ common.crons.nextcloud -- cgit v1.2.3 From 1d150991d8a03a9f58900c107bc2c0b1b1ea069d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 07:46:48 -0300 Subject: configuration.nix: Accept android license when using proprietary packages --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d6437d7..ca02f90 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -258,7 +258,7 @@ in { nixpkgs = { config = { - android_sdk.accept_license = true; + android_sdk.accept_license = localConfiguration.allowUnfree; allowUnfree = localConfiguration.allowUnfree; }; }; -- cgit v1.2.3 From e33a21eab7bedf6c9504a33dbd545a861630929b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 07:47:05 -0300 Subject: configuration.nix: Remove unused chromium package --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ca02f90..545d4a9 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -252,7 +252,6 @@ in { keepassxc yubioath-desktop libreoffice - chromium # required for ArchiveBox transmission-gtk ] ++ localConfiguration.proprietaryPackages; -- cgit v1.2.3 From fd26a65c00154bba899ea2d42494de34ed5045b2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 09:28:58 -0300 Subject: archive.sh: Include all bookmarks with tags, not only ones in Archive --- scripts/ad-hoc/archive.sh | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/scripts/ad-hoc/archive.sh b/scripts/ad-hoc/archive.sh index c555982..18cceba 100755 --- a/scripts/ad-hoc/archive.sh +++ b/scripts/ad-hoc/archive.sh @@ -15,12 +15,18 @@ FROM ( FROM moz_bookmarks AS b JOIN moz_places AS p ON b.fk = p.id - WHERE b.parent IN ( - SELECT id FROM moz_bookmarks WHERE title = "Archive" + WHERE b.fk IN ( + SELECT DISTINCT(fk) FROM moz_bookmarks + WHERE parent IN ( + -- get all tags + SELECT id FROM moz_bookmarks + WHERE parent = 4 + ) ) ORDER BY b.dateAdded ASC, - b.title ASC + b.title ASC, + p.url ) EOF ) -- cgit v1.2.3 From fee8d6be76d69ed220ba4214e0d7f08c748e4ed3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 16:48:18 -0300 Subject: fake-symlinks.sh: Make mediator many-lang project --- bash/fake-symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index c7b0d86..0045fd1 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -71,13 +71,13 @@ documented-project-fake-ln() { } # single language, documented project -for r in cement mediator intermediauth; do +for r in cement intermediauth; do documented-project-fake-ln "$r" false done # multiple languages, documented project # shellcheck disable=2043 -for r in songbooks; do +for r in songbooks mediator; do documented-project-fake-ln "$r" true done -- cgit v1.2.3 From 15dfceb79a927772e62aba6b031b3c101b5f070e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 16:48:46 -0300 Subject: build-site-many-lang.sh: Stop trying to rename already english files --- bash/templates/build-site-many-langs.sh | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/bash/templates/build-site-many-langs.sh b/bash/templates/build-site-many-langs.sh index 5b6d745..a58030e 100755 --- a/bash/templates/build-site-many-langs.sh +++ b/bash/templates/build-site-many-langs.sh @@ -30,6 +30,7 @@ popd cp docs/favicon.ico "$OUT" mv docs/_build/html/_static/ "${OUT}/_static/" +CURRENT_LANG="$(jq -r .current_lang < metadata.json)" LANGS="$(jq -r .langs[] < metadata.json)" TAGS="$(git tag | cat - <(echo master))" @@ -46,12 +47,15 @@ for lang in ${LANGS}; do RENAMES="$(jq ".$lang" < ../docs/i18n-pagenames.json | \ jq -r 'to_entries[] | [.key, .value] | @csv' | \ tr -d '\"')" - for rename in $RENAMES; do - from="$(echo "$rename" | cut -d, -f1)" - to="$(echo "$rename" | cut -d, -f2)" - mv "${from}.rst" "${to}.rst" || echo "^^^ skipping error on files with the same name ^^^" - sed -i "s/^ $from/ $to/" index.rst - done + + if [[ "$lang" != "$CURRENT_LANG" ]]; then + for rename in $RENAMES; do + from="$(echo "$rename" | cut -d, -f1)" + to="$(echo "$rename" | cut -d, -f2)" + mv "${from}.rst" "${to}.rst" + sed -i "s/^ $from$/ $to/" index.rst + done + fi make SPHINXOPTS="-D language=$lang" latexpdf epub html popd -- cgit v1.2.3 From f3b2bb46666d70a5405ded9d0dc8ae9a4b520986 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 16:49:33 -0300 Subject: fake-symlinks: Use underscore values from metadata.json --- bash/templates/sphinx-base.conf.py | 2 +- bash/templates/sphinx-many-langs.conf.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/templates/sphinx-base.conf.py b/bash/templates/sphinx-base.conf.py index 377f8dd..f538073 100644 --- a/bash/templates/sphinx-base.conf.py +++ b/bash/templates/sphinx-base.conf.py @@ -11,7 +11,7 @@ all_versions = ["master"] + ( .split() ) -project = metadata["project-name"] +project = metadata["project_name"] author = metadata["authors"][0] version = metadata["version"] release = version diff --git a/bash/templates/sphinx-many-langs.conf.py b/bash/templates/sphinx-many-langs.conf.py index 5bd2dd1..1deaecd 100644 --- a/bash/templates/sphinx-many-langs.conf.py +++ b/bash/templates/sphinx-many-langs.conf.py @@ -5,7 +5,7 @@ with open("i18n-pagenames.json", "r") as f: html_context = { "all_versions": all_versions, "langs": metadata["langs"], - "current_lang": metadata["current-lang"], + "current_lang": metadata["current_lang"], "sourcehut_url_prefix": "https://git.euandreh.xyz/songbooks/tree/master/docs", "gitlab_url_prefix": "https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs", "i18n_pagenames": i18n_pagenames -- cgit v1.2.3 From f75804269203e83a6211f19667c531eeab459138 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 24 Sep 2020 16:49:58 -0300 Subject: cronjob with email: Print before sending email --- bash/templates/cronjob-with-email.sh | 2 ++ scripts/cron/annex-job.sh | 2 ++ scripts/cron/archive-job.sh | 2 ++ scripts/cron/backup-job.sh | 2 ++ scripts/cron/mbox-archive-job.sh | 2 ++ scripts/cron/mr-remotes-backup-job.sh | 2 ++ scripts/cron/nix-search-update-job.sh | 2 ++ scripts/cron/notmuch-dump-job.sh | 2 ++ scripts/cron/repo-update-job.sh | 2 ++ 9 files changed, 18 insertions(+) diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 4a28729..0e3be29 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 3f81a1a..7aa04d5 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/archive-job.sh b/scripts/cron/archive-job.sh index e9c27ce..dfe9c40 100755 --- a/scripts/cron/archive-job.sh +++ b/scripts/cron/archive-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for archive-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index e5c3664..ee02947 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index b547b10..e5f590e 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index 33d3a9c..274fcac 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index 8d8ea2d..eeaaa61 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index e86732f..7ed316f 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 680be20..3742129 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -11,6 +11,8 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail -s "$SUBJECT" eu@euandre.org -- cgit v1.2.3 From b8e04a9cf154619aa2e538f207210b2960647981 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 25 Sep 2020 13:47:23 -0300 Subject: ci-build.sh: build site derivation directly, and inline call to publish.sh --- bash/templates/ci-build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/templates/ci-build.sh b/bash/templates/ci-build.sh index 1907ba8..abc357e 100755 --- a/bash/templates/ci-build.sh +++ b/bash/templates/ci-build.sh @@ -27,5 +27,5 @@ finish() { trap finish EXIT nix-build -A test -nix-build -A publishScript -./result/bin/publish.sh +nix-build -A site +"$(nix-build -A publishScript)/bin/publish.sh" -- cgit v1.2.3 From 7fb40e3f6eeb5e59e880a2e31906184ca49b0d62 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 25 Sep 2020 13:47:54 -0300 Subject: ci-build.sh: Build site derivation directly --- bash/templates/.build.yml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/templates/.build.yml b/bash/templates/.build.yml index 721393c..24c5818 100644 --- a/bash/templates/.build.yml +++ b/bash/templates/.build.yml @@ -8,4 +8,5 @@ sources: tasks: - tests: | cd $PROJECT/ - nix-build -A test -A site + nix-build -A test + nix-build -A site -- cgit v1.2.3 From ed86bf8e1926d4d22a399e84efa9ed74d6b1d86d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 25 Sep 2020 13:53:14 -0300 Subject: fake-symlinks.sh: Make all projects many-lang --- bash/fake-symlinks.sh | 44 ++--------- bash/templates/build-site-many-langs.sh | 71 ------------------ bash/templates/build-site-single-lang.sh | 51 ------------- bash/templates/build-site.sh | 71 ++++++++++++++++++ bash/templates/conf.py | 54 ++++++++++++++ bash/templates/layout-many-langs.html | 59 --------------- .../layout-many-langs.language-picker.html | 15 ---- bash/templates/layout-many-langs.page-path.html | 1 - .../layout-many-langs.version-section.html | 1 - bash/templates/layout-single-lang.html | 45 ------------ .../layout-single-lang.language-picker.html | 0 bash/templates/layout-single-lang.page-path.html | 1 - .../layout-single-lang.version-section.html | 1 - bash/templates/layout.html | 59 +++++++++++++++ bash/templates/layout.template.html | 45 ------------ bash/templates/sphinx-base.conf.py | 40 ---------- bash/templates/sphinx-many-langs.conf.py | 14 ---- bash/templates/sphinx-single-lang.conf.py | 6 -- bash/templates/utils.nix | 85 +++++++++++----------- 19 files changed, 233 insertions(+), 430 deletions(-) delete mode 100755 bash/templates/build-site-many-langs.sh delete mode 100755 bash/templates/build-site-single-lang.sh create mode 100755 bash/templates/build-site.sh create mode 100644 bash/templates/conf.py delete mode 100644 bash/templates/layout-many-langs.html delete mode 100644 bash/templates/layout-many-langs.language-picker.html delete mode 100644 bash/templates/layout-many-langs.page-path.html delete mode 100644 bash/templates/layout-many-langs.version-section.html delete mode 100644 bash/templates/layout-single-lang.html delete mode 100644 bash/templates/layout-single-lang.language-picker.html delete mode 100644 bash/templates/layout-single-lang.page-path.html delete mode 100644 bash/templates/layout-single-lang.version-section.html create mode 100644 bash/templates/layout.html delete mode 100644 bash/templates/layout.template.html delete mode 100644 bash/templates/sphinx-base.conf.py delete mode 100644 bash/templates/sphinx-many-langs.conf.py delete mode 100644 bash/templates/sphinx-single-lang.conf.py diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 0045fd1..f797d67 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -19,39 +19,16 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' -# Derived from: -# https://unix.stackexchange.com/a/26289 -env \ - VERSION_SECTION="$(cat layout-single-lang.version-section.html)" \ - LANGUAGE_PICKER="$(cat layout-single-lang.language-picker.html)" \ - PAGE_PATH="$(cat layout-single-lang.page-path.html)" \ - envsubst < layout.template.html > layout-single-lang.html - -env \ - VERSION_SECTION="$(cat layout-many-langs.version-section.html)" \ - LANGUAGE_PICKER="$(cat layout-many-langs.language-picker.html)" \ - PAGE_PATH="$(cat layout-many-langs.page-path.html)" \ - envsubst < layout.template.html > layout-many-langs.html - documented-project-fake-ln() { export PROJECT_UC="${1^}" export PROJECT="$1" - I18N="$2" - if [[ "$I18N" = true ]]; then - sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site-many-langs.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" - chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" - cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-many-langs.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" - envsubst < layout-many-langs.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" - envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" - cp assert-docs-spelling-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" - else - sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site-single-lang.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" - chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" - cat <(envsubst < sphinx-base.conf.py) <(envsubst < sphinx-single-lang.conf.py) > "$HOME/dev/libre/$PROJECT/docs/conf.py" - envsubst < layout-single-lang.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" - cp assert-docs-spelling-single-lang.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" - fi + sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" + envsubst < conf.py > "$HOME/dev/libre/$PROJECT/docs/conf.py" + envsubst < layout.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" + envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" + cp assert-docs-spelling-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/utils.nix" envsubst < preamble.org > "$HOME/dev/libre/$PROJECT/workflow/preamble.org" @@ -70,15 +47,10 @@ documented-project-fake-ln() { envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" } -# single language, documented project -for r in cement intermediauth; do - documented-project-fake-ln "$r" false -done - # multiple languages, documented project # shellcheck disable=2043 -for r in songbooks mediator; do - documented-project-fake-ln "$r" true +for r in songbooks mediator intermediauth; do + documented-project-fake-ln "$r" done for r in boneco website dotfiles; do diff --git a/bash/templates/build-site-many-langs.sh b/bash/templates/build-site-many-langs.sh deleted file mode 100755 index a58030e..0000000 --- a/bash/templates/build-site-many-langs.sh +++ /dev/null @@ -1,71 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -OUT="${1}" -HTMLIZE="${2}" -PROJECT_UC="__PROJECT_UC__" - -sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - cat workflow/preamble.org - > tasks-and-bugs.org - -emacs tasks-and-bugs.org \ - -l "${HTMLIZE}" \ - --eval '(setq org-export-allow-bind-keywords t)' \ - -f org-html-export-to-html \ - --batch \ - --kill - -# Add anchor link to bug headers -perl -pe \ - 's|^

    (.*)

    $|

    \2
    #\1

    |' \ - tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" - -pushd docs -make html -popd - -cp docs/favicon.ico "$OUT" -mv docs/_build/html/_static/ "${OUT}/_static/" - -CURRENT_LANG="$(jq -r .current_lang < metadata.json)" -LANGS="$(jq -r .langs[] < metadata.json)" -TAGS="$(git tag | cat - <(echo master))" - -for lang in ${LANGS}; do - for tag in ${TAGS}; do - mkdir -p "tmp/$lang/$tag/" - git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . - git reset . - git checkout . - - pushd "tmp/$lang/$tag/docs/" - jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - - RENAMES="$(jq ".$lang" < ../docs/i18n-pagenames.json | \ - jq -r 'to_entries[] | [.key, .value] | @csv' | \ - tr -d '\"')" - - if [[ "$lang" != "$CURRENT_LANG" ]]; then - for rename in $RENAMES; do - from="$(echo "$rename" | cut -d, -f1)" - to="$(echo "$rename" | cut -d, -f2)" - mv "${from}.rst" "${to}.rst" - sed -i "s/^ $from$/ $to/" index.rst - done - fi - - make SPHINXOPTS="-D language=$lang" latexpdf epub html - popd - - mkdir "${OUT}/$lang/" - mv "tmp/$lang/$tag/docs/_build/html/" "${OUT}/$lang/$tag/" - pushd "${OUT}/$lang/$tag/" - rm -rf _static/ - ln -s ../../_static . - popd - mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" - done -done diff --git a/bash/templates/build-site-single-lang.sh b/bash/templates/build-site-single-lang.sh deleted file mode 100755 index d70eec1..0000000 --- a/bash/templates/build-site-single-lang.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -OUT="${1}" -HTMLIZE="${2}" -PROJECT_UC="__PROJECT_UC__" - -sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - cat workflow/preamble.org - > tasks-and-bugs.org - -emacs tasks-and-bugs.org \ - -l "${HTMLIZE}" \ - --eval '(setq org-export-allow-bind-keywords t)' \ - -f org-html-export-to-html \ - --batch \ - --kill - -# Add anchor link to bug headers -perl -pe \ - 's|^

    (.*)

    $|

    \2
    #\1

    |' \ - tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" - -pushd docs -make html -popd - -cp docs/favicon.ico "$OUT" -mv docs/_build/html/_static/ "${OUT}/_static/" - -TAGS="$(git tag | cat - <(echo master))" - -for tag in ${TAGS}; do - mkdir -p "tmp/$tag/" - git --work-tree="tmp/$tag/" checkout --recurse-submodules "$tag" -- . - git reset . - - pushd "tmp/$tag/docs/" - jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - make latexpdf epub html - popd - - mv "tmp/$tag/docs/_build/html/" "${OUT}/$tag/" - pushd "${OUT}/$tag/" - rm -rf _static/ - ln -s ../_static . - popd - mv "tmp/$tag/docs/_build/latex/${PROJECT_UC,}.pdf" "$OUT/$tag/${PROJECT_UC}.pdf" -done diff --git a/bash/templates/build-site.sh b/bash/templates/build-site.sh new file mode 100755 index 0000000..a58030e --- /dev/null +++ b/bash/templates/build-site.sh @@ -0,0 +1,71 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +OUT="${1}" +HTMLIZE="${2}" +PROJECT_UC="__PROJECT_UC__" + +sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + cat workflow/preamble.org - > tasks-and-bugs.org + +emacs tasks-and-bugs.org \ + -l "${HTMLIZE}" \ + --eval '(setq org-export-allow-bind-keywords t)' \ + -f org-html-export-to-html \ + --batch \ + --kill + +# Add anchor link to bug headers +perl -pe \ + 's|^

    (.*)

    $|

    \2
    #\1

    |' \ + tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" + +pushd docs +make html +popd + +cp docs/favicon.ico "$OUT" +mv docs/_build/html/_static/ "${OUT}/_static/" + +CURRENT_LANG="$(jq -r .current_lang < metadata.json)" +LANGS="$(jq -r .langs[] < metadata.json)" +TAGS="$(git tag | cat - <(echo master))" + +for lang in ${LANGS}; do + for tag in ${TAGS}; do + mkdir -p "tmp/$lang/$tag/" + git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . + git reset . + git checkout . + + pushd "tmp/$lang/$tag/docs/" + jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json + + RENAMES="$(jq ".$lang" < ../docs/i18n-pagenames.json | \ + jq -r 'to_entries[] | [.key, .value] | @csv' | \ + tr -d '\"')" + + if [[ "$lang" != "$CURRENT_LANG" ]]; then + for rename in $RENAMES; do + from="$(echo "$rename" | cut -d, -f1)" + to="$(echo "$rename" | cut -d, -f2)" + mv "${from}.rst" "${to}.rst" + sed -i "s/^ $from$/ $to/" index.rst + done + fi + + make SPHINXOPTS="-D language=$lang" latexpdf epub html + popd + + mkdir "${OUT}/$lang/" + mv "tmp/$lang/$tag/docs/_build/html/" "${OUT}/$lang/$tag/" + pushd "${OUT}/$lang/$tag/" + rm -rf _static/ + ln -s ../../_static . + popd + mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" + done +done diff --git a/bash/templates/conf.py b/bash/templates/conf.py new file mode 100644 index 0000000..b6e8f84 --- /dev/null +++ b/bash/templates/conf.py @@ -0,0 +1,54 @@ +import json +with open("../metadata.json", "r") as f: + metadata = json.loads(f.read()) + +import subprocess +all_versions = ["master"] + ( + subprocess + .check_output(["git", "tag"]) + .decode("ascii") + .strip() + .split() +) + +project = metadata["project_name"] +author = metadata["authors"][0] +version = metadata["version"] +release = version +epub_copyright = "CC BY-SA 4.0" +nitpicky = True + +extensions = [ + "sphinx.ext.extlinks", + "sphinx.ext.graphviz", +] + +graphviz_output_format = "svg" + +templates_path = ["_templates"] +html_theme = "sphinx_rtd_theme" +html_theme_options = { + "style_external_links": True +} + +html_show_sphinx = False +html_show_copyright = False + +extlinks = { + "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), + "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), +} + +with open("i18n-pagenames.json", "r") as f: + i18n_pagenames = json.loads(f.read()) + +html_context = { + "all_versions": all_versions, + "langs": metadata["langs"], + "current_lang": metadata["current_lang"], + "sourcehut_url_prefix": "https://git.euandreh.xyz/songbooks/tree/master/docs", + "gitlab_url_prefix": "https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs", + "i18n_pagenames": i18n_pagenames +} + +gettext_compact = False diff --git a/bash/templates/layout-many-langs.html b/bash/templates/layout-many-langs.html deleted file mode 100644 index 5132373..0000000 --- a/bash/templates/layout-many-langs.html +++ /dev/null @@ -1,59 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} -
    - - {{project}} - {{version}} | {{ current_lang }} - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -
    Downloads
    -
    - - PDF - -
    -
    - - EPUB - -
    -
    -
    -
    -{% endblock %} diff --git a/bash/templates/layout-many-langs.language-picker.html b/bash/templates/layout-many-langs.language-picker.html deleted file mode 100644 index 2262dd1..0000000 --- a/bash/templates/layout-many-langs.language-picker.html +++ /dev/null @@ -1,15 +0,0 @@ - -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} diff --git a/bash/templates/layout-many-langs.page-path.html b/bash/templates/layout-many-langs.page-path.html deleted file mode 100644 index 9e623f0..0000000 --- a/bash/templates/layout-many-langs.page-path.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bash/templates/layout-many-langs.version-section.html b/bash/templates/layout-many-langs.version-section.html deleted file mode 100644 index 88e9976..0000000 --- a/bash/templates/layout-many-langs.version-section.html +++ /dev/null @@ -1 +0,0 @@ -{{version}} | {{ current_lang }} diff --git a/bash/templates/layout-single-lang.html b/bash/templates/layout-single-lang.html deleted file mode 100644 index 6c16a49..0000000 --- a/bash/templates/layout-single-lang.html +++ /dev/null @@ -1,45 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} - -{% endblock %} diff --git a/bash/templates/layout-single-lang.language-picker.html b/bash/templates/layout-single-lang.language-picker.html deleted file mode 100644 index e69de29..0000000 diff --git a/bash/templates/layout-single-lang.page-path.html b/bash/templates/layout-single-lang.page-path.html deleted file mode 100644 index 287e71c..0000000 --- a/bash/templates/layout-single-lang.page-path.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/bash/templates/layout-single-lang.version-section.html b/bash/templates/layout-single-lang.version-section.html deleted file mode 100644 index cf5b038..0000000 --- a/bash/templates/layout-single-lang.version-section.html +++ /dev/null @@ -1 +0,0 @@ -{{version}} diff --git a/bash/templates/layout.html b/bash/templates/layout.html new file mode 100644 index 0000000..5132373 --- /dev/null +++ b/bash/templates/layout.html @@ -0,0 +1,59 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} + +{% endblock %} diff --git a/bash/templates/layout.template.html b/bash/templates/layout.template.html deleted file mode 100644 index 724f10d..0000000 --- a/bash/templates/layout.template.html +++ /dev/null @@ -1,45 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} -
    - - {{project}} - $VERSION_SECTION - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - $PAGE_PATH - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %}$LANGUAGE_PICKER -
    Downloads
    -
    - - PDF - -
    -
    - - EPUB - -
    -
    -
    -
    -{% endblock %} diff --git a/bash/templates/sphinx-base.conf.py b/bash/templates/sphinx-base.conf.py deleted file mode 100644 index f538073..0000000 --- a/bash/templates/sphinx-base.conf.py +++ /dev/null @@ -1,40 +0,0 @@ -import json -with open("../metadata.json", "r") as f: - metadata = json.loads(f.read()) - -import subprocess -all_versions = ["master"] + ( - subprocess - .check_output(["git", "tag"]) - .decode("ascii") - .strip() - .split() -) - -project = metadata["project_name"] -author = metadata["authors"][0] -version = metadata["version"] -release = version -epub_copyright = "CC BY-SA 4.0" -nitpicky = True - -extensions = [ - "sphinx.ext.extlinks", - "sphinx.ext.graphviz", -] - -graphviz_output_format = "svg" - -templates_path = ["_templates"] -html_theme = "sphinx_rtd_theme" -html_theme_options = { - "style_external_links": True -} - -html_show_sphinx = False -html_show_copyright = False - -extlinks = { - "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), - "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), -} diff --git a/bash/templates/sphinx-many-langs.conf.py b/bash/templates/sphinx-many-langs.conf.py deleted file mode 100644 index 1deaecd..0000000 --- a/bash/templates/sphinx-many-langs.conf.py +++ /dev/null @@ -1,14 +0,0 @@ - -with open("i18n-pagenames.json", "r") as f: - i18n_pagenames = json.loads(f.read()) - -html_context = { - "all_versions": all_versions, - "langs": metadata["langs"], - "current_lang": metadata["current_lang"], - "sourcehut_url_prefix": "https://git.euandreh.xyz/songbooks/tree/master/docs", - "gitlab_url_prefix": "https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs", - "i18n_pagenames": i18n_pagenames -} - -gettext_compact = False diff --git a/bash/templates/sphinx-single-lang.conf.py b/bash/templates/sphinx-single-lang.conf.py deleted file mode 100644 index 71788b6..0000000 --- a/bash/templates/sphinx-single-lang.conf.py +++ /dev/null @@ -1,6 +0,0 @@ - -html_context = { - "all_versions": all_versions, - "sourcehut_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs", - "gitlab_url_prefix": "https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs", -} diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 79b2aae..39c633a 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -1,48 +1,45 @@ -{ pkgs, src }: rec { - test = shellBuildInputs: - pkgs.stdenv.mkDerivation { - inherit src; - name = "$PROJECT-test"; - buildInputs = shellBuildInputs; - phases = "unpackPhase buildPhase"; - buildPhase = '' - patchShebangs . - ./tests.sh - touch ${DOLLAR}out - ''; +{ pkgs, src, projectBuildInputs }: rec { + test = pkgs.stdenv.mkDerivation { + inherit src; + name = "$PROJECT-test"; + buildInputs = projectBuildInputs; + phases = "unpackPhase buildPhase"; + buildPhase = '' + patchShebangs . + ./tests.sh + touch ${DOLLAR}out + ''; + }; + site = let + orgcss = builtins.fetchurl { + url = "https://gongzhitaao.org/orgcss/org.css"; + sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; }; - site = shellBuildInputs: - let - orgcss = builtins.fetchurl { - url = "https://gongzhitaao.org/orgcss/org.css"; - sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; - }; - htmlize = builtins.fetchurl { - url = - "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; - sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; - }; - in pkgs.stdenv.mkDerivation { - inherit src; - name = "$PROJECT-site"; - buildInputs = shellBuildInputs; - phases = "unpackPhase buildPhase"; - buildPhase = '' - patchShebangs . - mkdir ${DOLLAR}out - cat ${DOLLAR}{orgcss} workflow/workflow.css > ${DOLLAR}out/styles.css - ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} - ''; + htmlize = builtins.fetchurl { + url = + "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; + sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; }; - publishScript = shellBuildInputs: - pkgs.writeShellScriptBin "publish.sh" '' - set -Eeuo pipefail - - OUT_PATH=/data/static/$PROJECT/ - mkdir -p ${DOLLAR}OUT_PATH - chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable - rm -rf ${DOLLAR}OUT_PATH - cp -R ${DOLLAR}{site shellBuildInputs} ${DOLLAR}OUT_PATH - chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too + in pkgs.stdenv.mkDerivation { + inherit src; + name = "$PROJECT-site"; + buildInputs = projectBuildInputs; + phases = "unpackPhase buildPhase"; + buildPhase = '' + patchShebangs . + mkdir ${DOLLAR}out + cat ${DOLLAR}{orgcss} workflow/workflow.css > ${DOLLAR}out/styles.css + ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} ''; + }; + publishScript = pkgs.writeShellScriptBin "publish.sh" '' + set -Eeuo pipefail + + OUT_PATH=/data/static/$PROJECT/ + mkdir -p ${DOLLAR}OUT_PATH + chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable + rm -rf ${DOLLAR}OUT_PATH + cp -R ${DOLLAR}{site} ${DOLLAR}OUT_PATH + chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too + ''; } -- cgit v1.2.3 From 209ba4d036a7ec5cb0e6231cbaf678cd7730e32f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:09:01 -0300 Subject: Remove archive-job from cronjob listing --- bash/fake-symlinks.sh | 2 +- nixos/common.nix | 1 - scripts/ad-hoc/archive-box.sh | 42 ++++++++++++++++++++++++++++++++++++++++++ scripts/ad-hoc/archive.sh | 42 ------------------------------------------ scripts/cron/archive-job.sh | 25 ------------------------- 5 files changed, 43 insertions(+), 69 deletions(-) create mode 100755 scripts/ad-hoc/archive-box.sh delete mode 100755 scripts/ad-hoc/archive.sh delete mode 100755 scripts/cron/archive-job.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index f797d67..dac7584 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -65,7 +65,7 @@ for r in songbooks mediator intermediauth; do cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" done -for job in annex backup archive repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do +for job in annex backup repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done diff --git a/nixos/common.nix b/nixos/common.nix index 4651e5c..042f13a 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -10,7 +10,6 @@ let annex-job = daily-at-12h; backup-job = daily-at-12h; - archive-job = daily-at-12h; repo-update-job = daily-at-12h; notmuch-dump-job = daily-at-12h; mbox-archive-job = daily-at-12h; diff --git a/scripts/ad-hoc/archive-box.sh b/scripts/ad-hoc/archive-box.sh new file mode 100755 index 0000000..18cceba --- /dev/null +++ b/scripts/ad-hoc/archive-box.sh @@ -0,0 +1,42 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + + +# Derived from ArchiveBox: +# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 +QUERY=$(cat < >(tee -a "$LOG_FILE") - -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for archive-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/archive.sh -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 6c607d590bc4123c258a9184cd953c5a142d9cc9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:09:24 -0300 Subject: fake-symlinks: Remove assert-docs-spelling language variants --- bash/fake-symlinks.sh | 2 +- bash/templates/assert-docs-spelling-many-langs.sh | 36 ---------------------- bash/templates/assert-docs-spelling-single-lang.sh | 29 ----------------- bash/templates/assert-docs-spelling.sh | 32 +++++++++++++++++++ 4 files changed, 33 insertions(+), 66 deletions(-) delete mode 100755 bash/templates/assert-docs-spelling-many-langs.sh delete mode 100755 bash/templates/assert-docs-spelling-single-lang.sh create mode 100755 bash/templates/assert-docs-spelling.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index dac7584..7b35b17 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -28,7 +28,7 @@ documented-project-fake-ln() { envsubst < conf.py > "$HOME/dev/libre/$PROJECT/docs/conf.py" envsubst < layout.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" - cp assert-docs-spelling-many-langs.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" + cp assert-docs-spelling.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/utils.nix" envsubst < preamble.org > "$HOME/dev/libre/$PROJECT/workflow/preamble.org" diff --git a/bash/templates/assert-docs-spelling-many-langs.sh b/bash/templates/assert-docs-spelling-many-langs.sh deleted file mode 100755 index d8a8b80..0000000 --- a/bash/templates/assert-docs-spelling-many-langs.sh +++ /dev/null @@ -1,36 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../docs/ - -export LANG=C.UTF-8 - -for DICT in dictionaries/*.txt; do - diff <(sort "$DICT") "$DICT" || { - echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 - echo " LANG=C.UTF-8 sort docs/$DICT | sponge docs/$DICT" >&2 - exit 1 - } -done - - -LANGS="$(jq -r .langs[] < ../metadata.json)" -rm -f spelling.txt - -for l in ${LANGS}; do - # exclude untranslated language - if [[ "$l" != "pt" ]]; then - make SPHINXOPTS="-D language=$l" html - hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a spelling.txt - fi -done - -if [[ -s spelling.txt ]]; then - printf "\nvvv Mispelled words detected by hunspell.\n\n" - sort < spelling.txt | uniq - printf "\n^^^\n" >&2 - exit 1 -else - echo "No spelling errors detected" - exit 0 -fi diff --git a/bash/templates/assert-docs-spelling-single-lang.sh b/bash/templates/assert-docs-spelling-single-lang.sh deleted file mode 100755 index 52aab64..0000000 --- a/bash/templates/assert-docs-spelling-single-lang.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../docs/ - -export LANG=C.UTF-8 - -for DICT in dictionaries/*.txt; do - diff <(sort "$DICT") "$DICT" || { - echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 - echo " LANG=C.UTF-8 sort docs/$DICT | sponge docs/$DICT" >&2 - exit 1 - } -done - -OUT="$(mktemp)" - -make html -hunspell -u3 -H -d en_US -p <(cat dictionaries/international.txt "dictionaries/en.txt") _build/html/*.html | tee -a "$OUT" - -if [[ -s "$OUT" ]]; then - printf "\nvvv Mispelled words detected by hunspell.\n\n" - sort < "$OUT" | uniq - printf "\n^^^\n" >&2 - exit 1 -else - echo "No spelling errors detected" - exit 0 -fi diff --git a/bash/templates/assert-docs-spelling.sh b/bash/templates/assert-docs-spelling.sh new file mode 100755 index 0000000..cb2ba7f --- /dev/null +++ b/bash/templates/assert-docs-spelling.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../docs/ + +export LANG=C.UTF-8 + +for DICT in dictionaries/*.txt; do + diff <(sort "$DICT") "$DICT" || { + echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 + echo " LANG=C.UTF-8 sort docs/$DICT | sponge docs/$DICT" >&2 + exit 1 + } +done + +OUT="$(mktemp)" +LANGS="$(jq -r .langs[] < ../metadata.json)" + +for l in ${LANGS}; do + make SPHINXOPTS="-D language=$l" html + hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT" +done + +if [[ -s "$OUT" ]]; then + printf "\nvvv Mispelled words detected by hunspell.\n\n" + sort < "$OUT" | uniq + printf "\n^^^\n" >&2 + exit 1 +else + echo "No spelling errors detected" + exit 0 +fi -- cgit v1.2.3 From 52eb75990427612feaef8412e2535868f71ba042 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:09:46 -0300 Subject: fake-symlinks: Include default shell derivation in utils.nix --- bash/templates/utils.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 39c633a..49916a4 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -42,4 +42,8 @@ cp -R ${DOLLAR}{site} ${DOLLAR}OUT_PATH chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too ''; + shell = pkgs.mkShell { + name = "$PROJECT-development-environment"; + buildInputs = projectBuildInputs; + }; } -- cgit v1.2.3 From 142539b361550d3212238ca78a528f7567f56253 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:10:10 -0300 Subject: spacemacs.el: Add dart layer --- spacemacs.el | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 1cdc905..b6d516d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -42,7 +42,8 @@ This function should only modify configuration layer settings." ;; List of configuration layers to load. dotspacemacs-configuration-layers - `(php + `(dart + php go graphviz systemd @@ -975,7 +976,7 @@ This function is called at the very end of Spacemacs initialization." ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages - '(tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) + '(lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) '(safe-local-variable-values '((eval c-set-offset 'inlambda 0) (eval c-set-offset 'access-label '-) -- cgit v1.2.3 From 21be2e940ef88ce8a459ddaa4440da6e7f9c2c2f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:10:20 -0300 Subject: assert-nixfmt.sh: Use '%' instead of '{}' for xargs argument --- bash/templates/assert-nixfmt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/assert-nixfmt.sh b/bash/templates/assert-nixfmt.sh index 89964c9..7a68fa9 100755 --- a/bash/templates/assert-nixfmt.sh +++ b/bash/templates/assert-nixfmt.sh @@ -13,4 +13,4 @@ format() { } export -f format -find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" +find . -type f -name '*.nix' -print0 | xargs -0 -I% bash -c "format %" -- cgit v1.2.3 From 5a803d2f286eeb7c40b61369a1f57bd87dd8710e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:11:37 -0300 Subject: Change directory of archive-box.sh into UTCLOUD --- scripts/ad-hoc/archive-box.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/archive-box.sh b/scripts/ad-hoc/archive-box.sh index 18cceba..05b5856 100755 --- a/scripts/ad-hoc/archive-box.sh +++ b/scripts/ad-hoc/archive-box.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail - # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 QUERY=$(cat < Date: Sun, 27 Sep 2020 11:12:34 -0300 Subject: Remove archive-job from usurpador.nix --- nixos/usurpador.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 47317d9..ce78fb8 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -16,7 +16,6 @@ in rec { common.crons.annex-job common.crons.backup-job - common.crons.archive-job common.crons.repo-update-job common.crons.notmuch-dump-job common.crons.mbox-archive-job -- cgit v1.2.3 From 0c7922283c59bd06505a87c68d2d4c3702f8af2d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:17:25 -0300 Subject: Change daily backup jobs to avoid conflicting with hourly jobs --- nixos/common.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 042f13a..f66f0c7 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,19 +1,19 @@ let cron-for-name = name: cron: "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh >> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; - daily-at-12h = "0 12 * * *"; + daily-at-12h30min = "30 12 * * *"; every-hour = "0 * * * *"; crons = { nextcloud = every-hour; sync-mail = every-hour; deliver-queued-mail = every-hour; - annex-job = daily-at-12h; - backup-job = daily-at-12h; - repo-update-job = daily-at-12h; - notmuch-dump-job = daily-at-12h; - mbox-archive-job = daily-at-12h; - nix-search-update-job = daily-at-12h; - mr-remotes-backup-job = daily-at-12h; + annex-job = daily-at-12h30min; + backup-job = daily-at-12h30min; + repo-update-job = daily-at-12h30min; + notmuch-dump-job = daily-at-12h30min; + mbox-archive-job = daily-at-12h30min; + nix-search-update-job = daily-at-12h30min; + mr-remotes-backup-job = daily-at-12h30min; }; in { crons = builtins.mapAttrs cron-for-name crons; } -- cgit v1.2.3 From 3490c5adfdb7e56330089df268170acbf6c47a2e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 11:29:05 -0300 Subject: fake-symlinks: Get description from metadata.json --- bash/templates/pre-push-hook.sh | 2 +- bash/templates/simple-pre-push-hook.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/templates/pre-push-hook.sh b/bash/templates/pre-push-hook.sh index 2cd3c1e..8cd50a1 100755 --- a/bash/templates/pre-push-hook.sh +++ b/bash/templates/pre-push-hook.sh @@ -2,4 +2,4 @@ set -Eeuo pipefail scp ./scripts/ci-build.sh euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive -scp description euandreh.xyz:/data/git/$PROJECT.git/description +jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' diff --git a/bash/templates/simple-pre-push-hook.sh b/bash/templates/simple-pre-push-hook.sh index f07fb69..769474a 100755 --- a/bash/templates/simple-pre-push-hook.sh +++ b/bash/templates/simple-pre-push-hook.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -Eeuo pipefail -scp description euandreh.xyz:/data/git/$PROJECT.git/description +jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' -- cgit v1.2.3 From a94f7f3b43295d03cb77c0f23043191e83440f8e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 14:50:27 -0300 Subject: fake-symlinks: Append "-shell" to shell derivation in utils.nix --- bash/templates/utils.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 49916a4..2b3cad9 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -43,7 +43,7 @@ chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too ''; shell = pkgs.mkShell { - name = "$PROJECT-development-environment"; + name = "$PROJECT-development-environment-shell"; buildInputs = projectBuildInputs; }; } -- cgit v1.2.3 From 0fb2769566f798fa6c4f75b685a0a6eeb9e7920d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 14:50:55 -0300 Subject: fake-symlinks.sh: Get description from metadata.json instead of standalone file --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 7b35b17..3de4669 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -37,7 +37,7 @@ documented-project-fake-ln() { chmod +x "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" - cat <(printf "%s\n\n" "$PROJECT_UC") "$HOME/dev/libre/$PROJECT/description" <(printf "\n\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" + cat <(printf "%s\n\n" "$PROJECT_UC") <(jq -r .description < "$HOME/dev/libre/$PROJECT/metadata.json") <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" cp breadcrumbs.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp footer.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp assert-shellcheck.sh "$HOME/dev/libre/$PROJECT/scripts/" -- cgit v1.2.3 From 038ffaa28730e715e0cf44caf1ae823def691f41 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 27 Sep 2020 16:39:47 -0300 Subject: fake-symlinks: Call direnv allow in shellHook for utils.nix --- bash/templates/utils.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 2b3cad9..b8a605d 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -45,5 +45,8 @@ shell = pkgs.mkShell { name = "$PROJECT-development-environment-shell"; buildInputs = projectBuildInputs; + shellHook = '' + direnv allow + ''; }; } -- cgit v1.2.3 From aed48b752ae135a6f1596823dcd1470798dd446f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 10:44:07 -0300 Subject: spacemacs.el: Fix 'turn-on-auto-fill hooks I was using the wrong symbol, without the "-hook" suffix. --- spacemacs.el | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index b6d516d..a64f110 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -756,8 +756,8 @@ This is the place where most of your configurations should be done. Unless it is (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) (add-hook 'markdown-mode-hook 'turn-on-auto-fill) - (add-hook 'rst-mode 'turn-on-auto-fill) - (add-hook 'org-mode 'turn-on-auto-fill) + (add-hook 'rst-mode-hook 'turn-on-auto-fill) + (add-hook 'org-mode-hook 'turn-on-auto-fill) (with-eval-after-load 'geiser-guile (add-to-list 'geiser-guile-load-path "~/guix/guix")) -- cgit v1.2.3 From 6e3ed2b29eeba8fa4741039de26fa9a298c64c79 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 11:51:49 -0300 Subject: fake-symlinks: Add preTestPhaseSetup attribute to utils.nix function --- bash/templates/utils.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index b8a605d..65843a7 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -1,4 +1,4 @@ -{ pkgs, src, projectBuildInputs }: rec { +{ pkgs, src, projectBuildInputs, preTestPhaseSetup ? "" }: rec { test = pkgs.stdenv.mkDerivation { inherit src; name = "$PROJECT-test"; @@ -6,6 +6,7 @@ phases = "unpackPhase buildPhase"; buildPhase = '' patchShebangs . + ${DOLLAR}{preTestPhaseSetup} ./tests.sh touch ${DOLLAR}out ''; -- cgit v1.2.3 From 598af3bbf96bc2b1ecd22f9a88cd18a05524ce96 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 14:06:38 -0300 Subject: fake-symlinks.sh: Restrict README to 72 columns --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3de4669..8718f61 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -37,7 +37,7 @@ documented-project-fake-ln() { chmod +x "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" - cat <(printf "%s\n\n" "$PROJECT_UC") <(jq -r .description < "$HOME/dev/libre/$PROJECT/metadata.json") <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" + cat <(printf "%s\n\n" "$PROJECT_UC") <(jq -r .description < "$HOME/dev/libre/$PROJECT/metadata.json" | fold -w 72 | sed 's/^ //') <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" cp breadcrumbs.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp footer.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp assert-shellcheck.sh "$HOME/dev/libre/$PROJECT/scripts/" -- cgit v1.2.3 From 64cdd09296b9c379a7467bfe2a492d360b8d2618 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 14:07:09 -0300 Subject: fake-symlinks: Remove assert-rust-lint.sh --- bash/fake-symlinks.sh | 6 ------ bash/templates/assert-rust-lint.sh | 11 ----------- 2 files changed, 17 deletions(-) delete mode 100755 bash/templates/assert-rust-lint.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 8718f61..a7d62b4 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -59,12 +59,6 @@ for r in boneco website dotfiles; do chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" done -# rust projects -for r in songbooks mediator intermediauth; do - export PROJECT="$r" - cp assert-rust-lint.sh "$HOME/dev/libre/$PROJECT/scripts/" -done - for job in annex backup repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" diff --git a/bash/templates/assert-rust-lint.sh b/bash/templates/assert-rust-lint.sh deleted file mode 100755 index 684c96c..0000000 --- a/bash/templates/assert-rust-lint.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -for f in $(git ls-files | grep '\.rs$'); do - rustfmt --check "$f" || { - echo "Unformatted Rust code. To fix it, run" - echo " rustfmt $f" - } -done -- cgit v1.2.3 From c7651fadc8eb3c6a793107ba60d610647a6611e4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 14:07:23 -0300 Subject: configuration.nix: Use openjdk8 by default --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 545d4a9..4a79ff6 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -206,7 +206,7 @@ in { leiningen python3 elixir - openjdk + openjdk8 clojure # =clj= perl dhall -- cgit v1.2.3 From 1b63ac1a0000f28832b0763762eeb5097161ad40 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 14:10:06 -0300 Subject: repo-update.sh: Run sequetially to avoid server throttling --- scripts/ad-hoc/repo-update.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/repo-update.sh b/scripts/ad-hoc/repo-update.sh index 2457d84..37606c4 100755 --- a/scripts/ad-hoc/repo-update.sh +++ b/scripts/ad-hoc/repo-update.sh @@ -4,4 +4,4 @@ set -Eeuo pipefail # shellcheck source=/dev/null . "${HOME}/.ssh/environment" cd "${HOME}" -mr -s -j8 safeupdate +mr -s safeupdate -- cgit v1.2.3 From 35e41e7167912bce5b6ef12589dbc3146b80ce84 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 29 Sep 2020 15:56:56 -0300 Subject: fake-symlinks: In "simple" repositories rely on description file --- bash/templates/simple-pre-push-hook.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/simple-pre-push-hook.sh b/bash/templates/simple-pre-push-hook.sh index 769474a..f07fb69 100755 --- a/bash/templates/simple-pre-push-hook.sh +++ b/bash/templates/simple-pre-push-hook.sh @@ -1,4 +1,4 @@ #!/usr/bin/env bash set -Eeuo pipefail -jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' +scp description euandreh.xyz:/data/git/$PROJECT.git/description -- cgit v1.2.3 From fbb24d41c1a1782885b7a21cdf8bc8408f633e73 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 30 Sep 2020 06:43:36 -0300 Subject: fake-symlinks: Add favicon --- bash/fake-symlinks.sh | 1 + bash/templates/favicon.ico | Bin 0 -> 1150 bytes 2 files changed, 1 insertion(+) create mode 100644 bash/templates/favicon.ico diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a7d62b4..3fabc03 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -45,6 +45,7 @@ documented-project-fake-ln() { cp assert-todos.sh "$HOME/dev/libre/$PROJECT/scripts/" cp shell.nix "$HOME/dev/libre/$PROJECT/" envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" + cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/" } # multiple languages, documented project diff --git a/bash/templates/favicon.ico b/bash/templates/favicon.ico new file mode 100644 index 0000000..8ebd54f Binary files /dev/null and b/bash/templates/favicon.ico differ -- cgit v1.2.3 From f215711546c17ec89e14669321e24dbe07f3b50c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:23:28 -0300 Subject: fake-symlinks.sh: Don't do ifs inside function --- bash/fake-symlinks.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3fabc03..47a7a87 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -20,8 +20,8 @@ pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' documented-project-fake-ln() { - export PROJECT_UC="${1^}" export PROJECT="$1" + export PROJECT_UC="$2" sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" @@ -48,10 +48,12 @@ documented-project-fake-ln() { cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/" } -# multiple languages, documented project -# shellcheck disable=2043 -for r in songbooks mediator intermediauth; do - documented-project-fake-ln "$r" +for r in songbooks mediator intermediauth cement; do + documented-project-fake-ln "$r" "${r^}" +done + +for r in byopds byodb; do + documented-project-fake-ln "$r" "$(echo "$1" | tr '[:lower:]' '[:upper:]')" done for r in boneco website dotfiles; do -- cgit v1.2.3 From 35fd60c9f6f9552a0c53a87754e0a7eee2449739 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:23:51 -0300 Subject: fake-symlinks: Use AGPL for everything --- bash/fake-symlinks.sh | 1 + bash/templates/LICENSE | 661 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 662 insertions(+) create mode 100644 bash/templates/LICENSE diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 47a7a87..3ee5588 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -46,6 +46,7 @@ documented-project-fake-ln() { cp shell.nix "$HOME/dev/libre/$PROJECT/" envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/" + cp LICENSE "$HOME/dev/libre/$PROJECT/" } for r in songbooks mediator intermediauth cement; do diff --git a/bash/templates/LICENSE b/bash/templates/LICENSE new file mode 100644 index 0000000..be3f7b2 --- /dev/null +++ b/bash/templates/LICENSE @@ -0,0 +1,661 @@ + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 + + Copyright (C) 2007 Free Software Foundation, Inc. + Everyone is permitted to copy and distribute verbatim copies + of this license document, but changing it is not allowed. + + Preamble + + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. + + The licenses for most software and other practical works are designed +to take away your freedom to share and change the works. By contrast, +our General Public Licenses are intended to guarantee your freedom to +share and change all versions of a program--to make sure it remains free +software for all its users. + + When we speak of free software, we are referring to freedom, not +price. Our General Public Licenses are designed to make sure that you +have the freedom to distribute copies of free software (and charge for +them if you wish), that you receive source code or can get it if you +want it, that you can change the software or use pieces of it in new +free programs, and that you know you can do these things. + + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. + + The precise terms and conditions for copying, distribution and +modification follow. + + TERMS AND CONDITIONS + + 0. Definitions. + + "This License" refers to version 3 of the GNU Affero General Public License. + + "Copyright" also means copyright-like laws that apply to other kinds of +works, such as semiconductor masks. + + "The Program" refers to any copyrightable work licensed under this +License. Each licensee is addressed as "you". "Licensees" and +"recipients" may be individuals or organizations. + + To "modify" a work means to copy from or adapt all or part of the work +in a fashion requiring copyright permission, other than the making of an +exact copy. The resulting work is called a "modified version" of the +earlier work or a work "based on" the earlier work. + + A "covered work" means either the unmodified Program or a work based +on the Program. + + To "propagate" a work means to do anything with it that, without +permission, would make you directly or secondarily liable for +infringement under applicable copyright law, except executing it on a +computer or modifying a private copy. Propagation includes copying, +distribution (with or without modification), making available to the +public, and in some countries other activities as well. + + To "convey" a work means any kind of propagation that enables other +parties to make or receive copies. Mere interaction with a user through +a computer network, with no transfer of a copy, is not conveying. + + An interactive user interface displays "Appropriate Legal Notices" +to the extent that it includes a convenient and prominently visible +feature that (1) displays an appropriate copyright notice, and (2) +tells the user that there is no warranty for the work (except to the +extent that warranties are provided), that licensees may convey the +work under this License, and how to view a copy of this License. If +the interface presents a list of user commands or options, such as a +menu, a prominent item in the list meets this criterion. + + 1. Source Code. + + The "source code" for a work means the preferred form of the work +for making modifications to it. "Object code" means any non-source +form of a work. + + A "Standard Interface" means an interface that either is an official +standard defined by a recognized standards body, or, in the case of +interfaces specified for a particular programming language, one that +is widely used among developers working in that language. + + The "System Libraries" of an executable work include anything, other +than the work as a whole, that (a) is included in the normal form of +packaging a Major Component, but which is not part of that Major +Component, and (b) serves only to enable use of the work with that +Major Component, or to implement a Standard Interface for which an +implementation is available to the public in source code form. A +"Major Component", in this context, means a major essential component +(kernel, window system, and so on) of the specific operating system +(if any) on which the executable work runs, or a compiler used to +produce the work, or an object code interpreter used to run it. + + The "Corresponding Source" for a work in object code form means all +the source code needed to generate, install, and (for an executable +work) run the object code and to modify the work, including scripts to +control those activities. However, it does not include the work's +System Libraries, or general-purpose tools or generally available free +programs which are used unmodified in performing those activities but +which are not part of the work. For example, Corresponding Source +includes interface definition files associated with source files for +the work, and the source code for shared libraries and dynamically +linked subprograms that the work is specifically designed to require, +such as by intimate data communication or control flow between those +subprograms and other parts of the work. + + The Corresponding Source need not include anything that users +can regenerate automatically from other parts of the Corresponding +Source. + + The Corresponding Source for a work in source code form is that +same work. + + 2. Basic Permissions. + + All rights granted under this License are granted for the term of +copyright on the Program, and are irrevocable provided the stated +conditions are met. This License explicitly affirms your unlimited +permission to run the unmodified Program. The output from running a +covered work is covered by this License only if the output, given its +content, constitutes a covered work. This License acknowledges your +rights of fair use or other equivalent, as provided by copyright law. + + You may make, run and propagate covered works that you do not +convey, without conditions so long as your license otherwise remains +in force. You may convey covered works to others for the sole purpose +of having them make modifications exclusively for you, or provide you +with facilities for running those works, provided that you comply with +the terms of this License in conveying all material for which you do +not control copyright. Those thus making or running the covered works +for you must do so exclusively on your behalf, under your direction +and control, on terms that prohibit them from making any copies of +your copyrighted material outside their relationship with you. + + Conveying under any other circumstances is permitted solely under +the conditions stated below. Sublicensing is not allowed; section 10 +makes it unnecessary. + + 3. Protecting Users' Legal Rights From Anti-Circumvention Law. + + No covered work shall be deemed part of an effective technological +measure under any applicable law fulfilling obligations under article +11 of the WIPO copyright treaty adopted on 20 December 1996, or +similar laws prohibiting or restricting circumvention of such +measures. + + When you convey a covered work, you waive any legal power to forbid +circumvention of technological measures to the extent such circumvention +is effected by exercising rights under this License with respect to +the covered work, and you disclaim any intention to limit operation or +modification of the work as a means of enforcing, against the work's +users, your or third parties' legal rights to forbid circumvention of +technological measures. + + 4. Conveying Verbatim Copies. + + You may convey verbatim copies of the Program's source code as you +receive it, in any medium, provided that you conspicuously and +appropriately publish on each copy an appropriate copyright notice; +keep intact all notices stating that this License and any +non-permissive terms added in accord with section 7 apply to the code; +keep intact all notices of the absence of any warranty; and give all +recipients a copy of this License along with the Program. + + You may charge any price or no price for each copy that you convey, +and you may offer support or warranty protection for a fee. + + 5. Conveying Modified Source Versions. + + You may convey a work based on the Program, or the modifications to +produce it from the Program, in the form of source code under the +terms of section 4, provided that you also meet all of these conditions: + + a) The work must carry prominent notices stating that you modified + it, and giving a relevant date. + + b) The work must carry prominent notices stating that it is + released under this License and any conditions added under section + 7. This requirement modifies the requirement in section 4 to + "keep intact all notices". + + c) You must license the entire work, as a whole, under this + License to anyone who comes into possession of a copy. This + License will therefore apply, along with any applicable section 7 + additional terms, to the whole of the work, and all its parts, + regardless of how they are packaged. This License gives no + permission to license the work in any other way, but it does not + invalidate such permission if you have separately received it. + + d) If the work has interactive user interfaces, each must display + Appropriate Legal Notices; however, if the Program has interactive + interfaces that do not display Appropriate Legal Notices, your + work need not make them do so. + + A compilation of a covered work with other separate and independent +works, which are not by their nature extensions of the covered work, +and which are not combined with it such as to form a larger program, +in or on a volume of a storage or distribution medium, is called an +"aggregate" if the compilation and its resulting copyright are not +used to limit the access or legal rights of the compilation's users +beyond what the individual works permit. Inclusion of a covered work +in an aggregate does not cause this License to apply to the other +parts of the aggregate. + + 6. Conveying Non-Source Forms. + + You may convey a covered work in object code form under the terms +of sections 4 and 5, provided that you also convey the +machine-readable Corresponding Source under the terms of this License, +in one of these ways: + + a) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by the + Corresponding Source fixed on a durable physical medium + customarily used for software interchange. + + b) Convey the object code in, or embodied in, a physical product + (including a physical distribution medium), accompanied by a + written offer, valid for at least three years and valid for as + long as you offer spare parts or customer support for that product + model, to give anyone who possesses the object code either (1) a + copy of the Corresponding Source for all the software in the + product that is covered by this License, on a durable physical + medium customarily used for software interchange, for a price no + more than your reasonable cost of physically performing this + conveying of source, or (2) access to copy the + Corresponding Source from a network server at no charge. + + c) Convey individual copies of the object code with a copy of the + written offer to provide the Corresponding Source. This + alternative is allowed only occasionally and noncommercially, and + only if you received the object code with such an offer, in accord + with subsection 6b. + + d) Convey the object code by offering access from a designated + place (gratis or for a charge), and offer equivalent access to the + Corresponding Source in the same way through the same place at no + further charge. You need not require recipients to copy the + Corresponding Source along with the object code. If the place to + copy the object code is a network server, the Corresponding Source + may be on a different server (operated by you or a third party) + that supports equivalent copying facilities, provided you maintain + clear directions next to the object code saying where to find the + Corresponding Source. Regardless of what server hosts the + Corresponding Source, you remain obligated to ensure that it is + available for as long as needed to satisfy these requirements. + + e) Convey the object code using peer-to-peer transmission, provided + you inform other peers where the object code and Corresponding + Source of the work are being offered to the general public at no + charge under subsection 6d. + + A separable portion of the object code, whose source code is excluded +from the Corresponding Source as a System Library, need not be +included in conveying the object code work. + + A "User Product" is either (1) a "consumer product", which means any +tangible personal property which is normally used for personal, family, +or household purposes, or (2) anything designed or sold for incorporation +into a dwelling. In determining whether a product is a consumer product, +doubtful cases shall be resolved in favor of coverage. For a particular +product received by a particular user, "normally used" refers to a +typical or common use of that class of product, regardless of the status +of the particular user or of the way in which the particular user +actually uses, or expects or is expected to use, the product. A product +is a consumer product regardless of whether the product has substantial +commercial, industrial or non-consumer uses, unless such uses represent +the only significant mode of use of the product. + + "Installation Information" for a User Product means any methods, +procedures, authorization keys, or other information required to install +and execute modified versions of a covered work in that User Product from +a modified version of its Corresponding Source. The information must +suffice to ensure that the continued functioning of the modified object +code is in no case prevented or interfered with solely because +modification has been made. + + If you convey an object code work under this section in, or with, or +specifically for use in, a User Product, and the conveying occurs as +part of a transaction in which the right of possession and use of the +User Product is transferred to the recipient in perpetuity or for a +fixed term (regardless of how the transaction is characterized), the +Corresponding Source conveyed under this section must be accompanied +by the Installation Information. But this requirement does not apply +if neither you nor any third party retains the ability to install +modified object code on the User Product (for example, the work has +been installed in ROM). + + The requirement to provide Installation Information does not include a +requirement to continue to provide support service, warranty, or updates +for a work that has been modified or installed by the recipient, or for +the User Product in which it has been modified or installed. Access to a +network may be denied when the modification itself materially and +adversely affects the operation of the network or violates the rules and +protocols for communication across the network. + + Corresponding Source conveyed, and Installation Information provided, +in accord with this section must be in a format that is publicly +documented (and with an implementation available to the public in +source code form), and must require no special password or key for +unpacking, reading or copying. + + 7. Additional Terms. + + "Additional permissions" are terms that supplement the terms of this +License by making exceptions from one or more of its conditions. +Additional permissions that are applicable to the entire Program shall +be treated as though they were included in this License, to the extent +that they are valid under applicable law. If additional permissions +apply only to part of the Program, that part may be used separately +under those permissions, but the entire Program remains governed by +this License without regard to the additional permissions. + + When you convey a copy of a covered work, you may at your option +remove any additional permissions from that copy, or from any part of +it. (Additional permissions may be written to require their own +removal in certain cases when you modify the work.) You may place +additional permissions on material, added by you to a covered work, +for which you have or can give appropriate copyright permission. + + Notwithstanding any other provision of this License, for material you +add to a covered work, you may (if authorized by the copyright holders of +that material) supplement the terms of this License with terms: + + a) Disclaiming warranty or limiting liability differently from the + terms of sections 15 and 16 of this License; or + + b) Requiring preservation of specified reasonable legal notices or + author attributions in that material or in the Appropriate Legal + Notices displayed by works containing it; or + + c) Prohibiting misrepresentation of the origin of that material, or + requiring that modified versions of such material be marked in + reasonable ways as different from the original version; or + + d) Limiting the use for publicity purposes of names of licensors or + authors of the material; or + + e) Declining to grant rights under trademark law for use of some + trade names, trademarks, or service marks; or + + f) Requiring indemnification of licensors and authors of that + material by anyone who conveys the material (or modified versions of + it) with contractual assumptions of liability to the recipient, for + any liability that these contractual assumptions directly impose on + those licensors and authors. + + All other non-permissive additional terms are considered "further +restrictions" within the meaning of section 10. If the Program as you +received it, or any part of it, contains a notice stating that it is +governed by this License along with a term that is a further +restriction, you may remove that term. If a license document contains +a further restriction but permits relicensing or conveying under this +License, you may add to a covered work material governed by the terms +of that license document, provided that the further restriction does +not survive such relicensing or conveying. + + If you add terms to a covered work in accord with this section, you +must place, in the relevant source files, a statement of the +additional terms that apply to those files, or a notice indicating +where to find the applicable terms. + + Additional terms, permissive or non-permissive, may be stated in the +form of a separately written license, or stated as exceptions; +the above requirements apply either way. + + 8. Termination. + + You may not propagate or modify a covered work except as expressly +provided under this License. Any attempt otherwise to propagate or +modify it is void, and will automatically terminate your rights under +this License (including any patent licenses granted under the third +paragraph of section 11). + + However, if you cease all violation of this License, then your +license from a particular copyright holder is reinstated (a) +provisionally, unless and until the copyright holder explicitly and +finally terminates your license, and (b) permanently, if the copyright +holder fails to notify you of the violation by some reasonable means +prior to 60 days after the cessation. + + Moreover, your license from a particular copyright holder is +reinstated permanently if the copyright holder notifies you of the +violation by some reasonable means, this is the first time you have +received notice of violation of this License (for any work) from that +copyright holder, and you cure the violation prior to 30 days after +your receipt of the notice. + + Termination of your rights under this section does not terminate the +licenses of parties who have received copies or rights from you under +this License. If your rights have been terminated and not permanently +reinstated, you do not qualify to receive new licenses for the same +material under section 10. + + 9. Acceptance Not Required for Having Copies. + + You are not required to accept this License in order to receive or +run a copy of the Program. Ancillary propagation of a covered work +occurring solely as a consequence of using peer-to-peer transmission +to receive a copy likewise does not require acceptance. However, +nothing other than this License grants you permission to propagate or +modify any covered work. These actions infringe copyright if you do +not accept this License. Therefore, by modifying or propagating a +covered work, you indicate your acceptance of this License to do so. + + 10. Automatic Licensing of Downstream Recipients. + + Each time you convey a covered work, the recipient automatically +receives a license from the original licensors, to run, modify and +propagate that work, subject to this License. You are not responsible +for enforcing compliance by third parties with this License. + + An "entity transaction" is a transaction transferring control of an +organization, or substantially all assets of one, or subdividing an +organization, or merging organizations. If propagation of a covered +work results from an entity transaction, each party to that +transaction who receives a copy of the work also receives whatever +licenses to the work the party's predecessor in interest had or could +give under the previous paragraph, plus a right to possession of the +Corresponding Source of the work from the predecessor in interest, if +the predecessor has it or can get it with reasonable efforts. + + You may not impose any further restrictions on the exercise of the +rights granted or affirmed under this License. For example, you may +not impose a license fee, royalty, or other charge for exercise of +rights granted under this License, and you may not initiate litigation +(including a cross-claim or counterclaim in a lawsuit) alleging that +any patent claim is infringed by making, using, selling, offering for +sale, or importing the Program or any portion of it. + + 11. Patents. + + A "contributor" is a copyright holder who authorizes use under this +License of the Program or a work on which the Program is based. The +work thus licensed is called the contributor's "contributor version". + + A contributor's "essential patent claims" are all patent claims +owned or controlled by the contributor, whether already acquired or +hereafter acquired, that would be infringed by some manner, permitted +by this License, of making, using, or selling its contributor version, +but do not include claims that would be infringed only as a +consequence of further modification of the contributor version. For +purposes of this definition, "control" includes the right to grant +patent sublicenses in a manner consistent with the requirements of +this License. + + Each contributor grants you a non-exclusive, worldwide, royalty-free +patent license under the contributor's essential patent claims, to +make, use, sell, offer for sale, import and otherwise run, modify and +propagate the contents of its contributor version. + + In the following three paragraphs, a "patent license" is any express +agreement or commitment, however denominated, not to enforce a patent +(such as an express permission to practice a patent or covenant not to +sue for patent infringement). To "grant" such a patent license to a +party means to make such an agreement or commitment not to enforce a +patent against the party. + + If you convey a covered work, knowingly relying on a patent license, +and the Corresponding Source of the work is not available for anyone +to copy, free of charge and under the terms of this License, through a +publicly available network server or other readily accessible means, +then you must either (1) cause the Corresponding Source to be so +available, or (2) arrange to deprive yourself of the benefit of the +patent license for this particular work, or (3) arrange, in a manner +consistent with the requirements of this License, to extend the patent +license to downstream recipients. "Knowingly relying" means you have +actual knowledge that, but for the patent license, your conveying the +covered work in a country, or your recipient's use of the covered work +in a country, would infringe one or more identifiable patents in that +country that you have reason to believe are valid. + + If, pursuant to or in connection with a single transaction or +arrangement, you convey, or propagate by procuring conveyance of, a +covered work, and grant a patent license to some of the parties +receiving the covered work authorizing them to use, propagate, modify +or convey a specific copy of the covered work, then the patent license +you grant is automatically extended to all recipients of the covered +work and works based on it. + + A patent license is "discriminatory" if it does not include within +the scope of its coverage, prohibits the exercise of, or is +conditioned on the non-exercise of one or more of the rights that are +specifically granted under this License. You may not convey a covered +work if you are a party to an arrangement with a third party that is +in the business of distributing software, under which you make payment +to the third party based on the extent of your activity of conveying +the work, and under which the third party grants, to any of the +parties who would receive the covered work from you, a discriminatory +patent license (a) in connection with copies of the covered work +conveyed by you (or copies made from those copies), or (b) primarily +for and in connection with specific products or compilations that +contain the covered work, unless you entered into that arrangement, +or that patent license was granted, prior to 28 March 2007. + + Nothing in this License shall be construed as excluding or limiting +any implied license or other defenses to infringement that may +otherwise be available to you under applicable patent law. + + 12. No Surrender of Others' Freedom. + + If conditions are imposed on you (whether by court order, agreement or +otherwise) that contradict the conditions of this License, they do not +excuse you from the conditions of this License. If you cannot convey a +covered work so as to satisfy simultaneously your obligations under this +License and any other pertinent obligations, then as a consequence you may +not convey it at all. For example, if you agree to terms that obligate you +to collect a royalty for further conveying from those to whom you convey +the Program, the only way you could satisfy both those terms and this +License would be to refrain entirely from conveying the Program. + + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. + + Notwithstanding any other provision of this License, you have +permission to link or combine any covered work with a work licensed +under version 3 of the GNU General Public License into a single +combined work, and to convey the resulting work. The terms of this +License will continue to apply to the part which is the covered work, +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. + + 14. Revised Versions of this License. + + The Free Software Foundation may publish revised and/or new versions of +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to +address new problems or concerns. + + Each version is given a distinguishing version number. If the +Program specifies that a certain numbered version of the GNU Affero General +Public License "or any later version" applies to it, you have the +option of following the terms and conditions either of that numbered +version or of any later version published by the Free Software +Foundation. If the Program does not specify a version number of the +GNU Affero General Public License, you may choose any version ever published +by the Free Software Foundation. + + If the Program specifies that a proxy can decide which future +versions of the GNU Affero General Public License can be used, that proxy's +public statement of acceptance of a version permanently authorizes you +to choose that version for the Program. + + Later license versions may give you additional or different +permissions. However, no additional obligations are imposed on any +author or copyright holder as a result of your choosing to follow a +later version. + + 15. Disclaimer of Warranty. + + THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY +APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR +PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM +IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF +ALL NECESSARY SERVICING, REPAIR OR CORRECTION. + + 16. Limitation of Liability. + + IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF +SUCH DAMAGES. + + 17. Interpretation of Sections 15 and 16. + + If the disclaimer of warranty and limitation of liability provided +above cannot be given local legal effect according to their terms, +reviewing courts shall apply local law that most closely approximates +an absolute waiver of all civil liability in connection with the +Program, unless a warranty or assumption of liability accompanies a +copy of the Program in return for a fee. + + END OF TERMS AND CONDITIONS + + How to Apply These Terms to Your New Programs + + If you develop a new program, and you want it to be of the greatest +possible use to the public, the best way to achieve this is to make it +free software which everyone can redistribute and change under these terms. + + To do so, attach the following notices to the program. It is safest +to attach them to the start of each source file to most effectively +state the exclusion of warranty; and each file should have at least +the "copyright" line and a pointer to where the full notice is found. + + + Copyright (C) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU Affero General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU Affero General Public License for more details. + + You should have received a copy of the GNU Affero General Public License + along with this program. If not, see . + +Also add information on how to contact you by electronic and paper mail. + + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. + + You should also get your employer (if you work as a programmer) or school, +if any, to sign a "copyright disclaimer" for the program, if necessary. +For more information on this, and how to apply and follow the GNU AGPL, see +. -- cgit v1.2.3 From bb9869595f25d9b992855e40a2efa21e78a8f4e1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:24:04 -0300 Subject: fake-symlinks: Rename macro in preamble.org s/tasks/task/ --- bash/templates/preamble.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/preamble.org b/bash/templates/preamble.org index 884b691..d2d438d 100644 --- a/bash/templates/preamble.org +++ b/bash/templates/preamble.org @@ -11,7 +11,7 @@ #+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] #+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] #+MACRO: bug bug\nbsp{}[[#$1][#$1]] -#+MACRO: tasks tasks\nbsp{}[[#$1][#$1]] +#+MACRO: task task\nbsp{}[[#$1][#$1]] #+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. -- cgit v1.2.3 From 0f972d354fd33b2bbb675c0755b17fb0f67d92e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:24:58 -0300 Subject: fake-symlinks: Fix links in Sphinx documentation --- bash/templates/breadcrumbs.html | 2 +- bash/templates/conf.py | 4 ++-- bash/templates/layout.html | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/bash/templates/breadcrumbs.html b/bash/templates/breadcrumbs.html index b0133fd..6190a1a 100644 --- a/bash/templates/breadcrumbs.html +++ b/bash/templates/breadcrumbs.html @@ -2,7 +2,7 @@ {% block breadcrumbs_aside %}
  • - + View source
  • diff --git a/bash/templates/conf.py b/bash/templates/conf.py index b6e8f84..24d7c38 100644 --- a/bash/templates/conf.py +++ b/bash/templates/conf.py @@ -46,8 +46,8 @@ html_context = { "all_versions": all_versions, "langs": metadata["langs"], "current_lang": metadata["current_lang"], - "sourcehut_url_prefix": "https://git.euandreh.xyz/songbooks/tree/master/docs", - "gitlab_url_prefix": "https://gitlab.com/EuAndreh/songbooks/-/blob/master/docs", + "cgit_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs", + "gitlab_url_prefix": "https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs", "i18n_pagenames": i18n_pagenames } diff --git a/bash/templates/layout.html b/bash/templates/layout.html index 5132373..3182c8c 100644 --- a/bash/templates/layout.html +++ b/bash/templates/layout.html @@ -44,12 +44,12 @@ https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a8 {% endfor %}
    Downloads
    - + PDF
    - + EPUB
    -- cgit v1.2.3 From 7767baec5b4cccfa5197ee932fd25211b206136e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:25:10 -0300 Subject: fake-symlinks: Add sphinx.ext.todo extension in conf.py --- bash/templates/conf.py | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/templates/conf.py b/bash/templates/conf.py index 24d7c38..2aa45a3 100644 --- a/bash/templates/conf.py +++ b/bash/templates/conf.py @@ -21,10 +21,13 @@ nitpicky = True extensions = [ "sphinx.ext.extlinks", "sphinx.ext.graphviz", + "sphinx.ext.todo", ] graphviz_output_format = "svg" +todo_include_todos = True + templates_path = ["_templates"] html_theme = "sphinx_rtd_theme" html_theme_options = { -- cgit v1.2.3 From f978b2d7ba40081ec22a5af5a0cb798ae5e0ffe8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:25:39 -0300 Subject: fake-symlinks: Remove hardcoded "songbooks" name in utils-i18n.nix --- bash/templates/utils-i18n.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/utils-i18n.nix b/bash/templates/utils-i18n.nix index 9f9d242..953f3a2 100644 --- a/bash/templates/utils-i18n.nix +++ b/bash/templates/utils-i18n.nix @@ -24,7 +24,7 @@ sha256 = affSHA256; }; in pkgs.stdenv.mkDerivation { - name = "songbooks-dict-${DOLLAR}{lang}"; + name = "$PROJECT-dict-${DOLLAR}{lang}"; builder = builtins.toFile "builder.sh" '' source ${DOLLAR}stdenv/setup install -dm755 ${DOLLAR}out/share/hunspell -- cgit v1.2.3 From d977916c586952140db64d91e01eea33f43c32a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:26:07 -0300 Subject: fake-symlinks: Add singlehtml Sphinx output to build-site.sh --- bash/templates/build-site.sh | 24 +++++++++++++++++------- 1 file changed, 17 insertions(+), 7 deletions(-) diff --git a/bash/templates/build-site.sh b/bash/templates/build-site.sh index a58030e..7bde0fd 100755 --- a/bash/templates/build-site.sh +++ b/bash/templates/build-site.sh @@ -21,14 +21,14 @@ emacs tasks-and-bugs.org \ # Add anchor link to bug headers perl -pe \ 's|^

    (.*)

    $|

    \2
    #\1

    |' \ - tasks-and-bugs.html > "${OUT}/tasks-and-bugs.html" + tasks-and-bugs.html > "$OUT/tasks-and-bugs.html" pushd docs make html popd cp docs/favicon.ico "$OUT" -mv docs/_build/html/_static/ "${OUT}/_static/" +mv docs/_build/html/_static/ "$OUT/_static/" CURRENT_LANG="$(jq -r .current_lang < metadata.json)" LANGS="$(jq -r .langs[] < metadata.json)" @@ -57,15 +57,25 @@ for lang in ${LANGS}; do done fi - make SPHINXOPTS="-D language=$lang" latexpdf epub html + make SPHINXOPTS="-D language=$lang" latexpdf epub singlehtml html popd - mkdir "${OUT}/$lang/" - mv "tmp/$lang/$tag/docs/_build/html/" "${OUT}/$lang/$tag/" - pushd "${OUT}/$lang/$tag/" + mkdir "$OUT/$lang/" + + mv "tmp/$lang/$tag/docs/_build/html/" "$OUT/$lang/$tag/" + pushd "$OUT/$lang/$tag/" rm -rf _static/ ln -s ../../_static . popd - mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" + + mv "tmp/$lang/$tag/docs/_build/singlehtml/" "$OUT/$lang/$tag/single/" + pushd "$OUT/$lang/$tag/single/" + rm -rf _static/ + ln -s ../../../_static . + rm -rf _images/ + ln -s ../_images . + popd + + mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" done done -- cgit v1.2.3 From c156373ed01046469f946835209f658f707bda21 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:26:25 -0300 Subject: configuration.nix: Add symbola font --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4a79ff6..ef41427 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -68,6 +68,7 @@ in { fira-mono fira-code-symbols freefont_ttf + symbola ]; environment.systemPackages = let -- cgit v1.2.3 From c9feec71238d84a60a25bab8236d58b9d11dbb9e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:26:59 -0300 Subject: fake-symlinks.sh: Add remotePublishScript attribute to utils.nix --- bash/templates/utils.nix | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 65843a7..05fc884 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -43,6 +43,17 @@ cp -R ${DOLLAR}{site} ${DOLLAR}OUT_PATH chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too ''; + remotePublishScript = pkgs.writeShellScriptBin "publish.sh" '' + set -euo pipefail + SERVER_URL='euandreh.xyz' + REMOTE_PATH=/data/static/$PROJECT/ + ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" chmod -R +w "${DOLLAR}REMOTE_PATH" + ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" rm -rf "${DOLLAR}REMOTE_PATH/*" + ${DOLLAR}{pkgs.rsync}/bin/rsync -avzP \ + --rsh="ssh -o StrictHostKeyChecking=no" \ + "${DOLLAR}{site}/" \ + "${DOLLAR}SERVER_URL:${DOLLAR}REMOTE_PATH" + ''; shell = pkgs.mkShell { name = "$PROJECT-development-environment-shell"; buildInputs = projectBuildInputs; -- cgit v1.2.3 From f83ea775748bb952f2d5b519b2bd8441cafa83c7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:28:45 -0300 Subject: backup.sh: Add ~/dev/libre/website/ to backup --- scripts/ad-hoc/backup.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 6def0f3..6bd3544 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -24,7 +24,8 @@ borg create \ ~/archive/ \ ~/.mozilla/ \ ~/.config/quodlibet/ \ - ~/gPodder/ + ~/gPodder/ \ + ~/dev/libre/website/ # add folders to be backed up here cd ~/dev/libre/borg/ -- cgit v1.2.3 From 99d2ae9cd1347b1f9c29784b4d0a2f5403a5dce9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 11:39:04 -0300 Subject: TODOs.org: Add link on Emacs on Nix --- TODOs.org | 2 ++ 1 file changed, 2 insertions(+) diff --git a/TODOs.org b/TODOs.org index 2834a83..126d960 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,4 +1,6 @@ * Tasks +** Emacs on Nix +https://github.com/abcdw/rde/tree/master/src/modules/emacs ** TODO Remove =org-time-add= definition froom spacemacs.el ** TODO Reproducible setup *** TODO Add =cachix use=s to configuration.nix: -- cgit v1.2.3 From 30b0f254e16f45f29d701926011863efa2ae83ad Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 12:02:21 -0300 Subject: Emacs: Add back elfeed Long-live Emacs! Good-bye, "LiveMarks"! --- bash/fake-symlinks.sh | 2 +- nixos/common.nix | 1 + nixos/usurpador.nix | 1 + scripts/ad-hoc/backup.sh | 3 ++- scripts/ad-hoc/elfeed.sh | 9 +++++++++ scripts/cron/elfeed-job.sh | 25 +++++++++++++++++++++++++ spacemacs.el | 14 ++++++++++++++ 7 files changed, 53 insertions(+), 2 deletions(-) create mode 100755 scripts/ad-hoc/elfeed.sh create mode 100755 scripts/cron/elfeed-job.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3ee5588..13c59ba 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -63,7 +63,7 @@ for r in boneco website dotfiles; do chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" done -for job in annex backup repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do +for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done diff --git a/nixos/common.nix b/nixos/common.nix index f66f0c7..d8c4d0f 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -9,6 +9,7 @@ let deliver-queued-mail = every-hour; annex-job = daily-at-12h30min; + elfeed-job = daily-at-12h30min; backup-job = daily-at-12h30min; repo-update-job = daily-at-12h30min; notmuch-dump-job = daily-at-12h30min; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index ce78fb8..66462ce 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -15,6 +15,7 @@ in rec { common.crons.deliver-queued-mail common.crons.annex-job + common.crons.elfeed-job common.crons.backup-job common.crons.repo-update-job common.crons.notmuch-dump-job diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 6bd3544..112ccca 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -25,7 +25,8 @@ borg create \ ~/.mozilla/ \ ~/.config/quodlibet/ \ ~/gPodder/ \ - ~/dev/libre/website/ + ~/dev/libre/website/ \ + ~/.elfeed/ # add folders to be backed up here cd ~/dev/libre/borg/ diff --git a/scripts/ad-hoc/elfeed.sh b/scripts/ad-hoc/elfeed.sh new file mode 100755 index 0000000..e6d3104 --- /dev/null +++ b/scripts/ad-hoc/elfeed.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +timeout 120 \ + emacs \ + -batch \ + -l ~/.emacs.d/init.el \ + --eval "(run-hooks 'emacs-startup-hook)" \ + --eval '(euandreh/elfeed-batch-update)' diff --git a/scripts/cron/elfeed-job.sh b/scripts/cron/elfeed-job.sh new file mode 100755 index 0000000..29e675a --- /dev/null +++ b/scripts/cron/elfeed-job.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + echo "Sending report email..." + + SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -s "$SUBJECT" eu@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/elfeed.sh +echo "Finishing: $(date -Is)" diff --git a/spacemacs.el b/spacemacs.el index a64f110..d72024e 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -57,6 +57,8 @@ This function should only modify configuration layer settings." docker elixir erc + (elfeed :variables + rmh-elfeed-org-files '("~/.emacs.d/private/elfeed.org")) elm emacs-lisp epub @@ -744,6 +746,17 @@ through `notmuch-message-attach-regex'." commit start))) +(defun euandreh/elfeed-batch-update () + (message "Starting (elfeed-update).") + (elfeed-org) + (elfeed) + (elfeed-update) + (while (> (elfeed-queue-count-total) 0) + (print (elfeed-queue-count-total)) + (sleep-for 1) + (accept-process-output)) + (message "Done.")) + (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. @@ -770,6 +783,7 @@ This is the place where most of your configurations should be done. Unless it is "p C-r" 'euandreh/projectile-reload-known-projects "an" 'notmuch "ai" 'erc-track-switch-buffer + "af" 'elfeed "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage -- cgit v1.2.3 From 12f0978c82b2ec6ec1383cb8191cdd9848ac0009 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 12:05:38 -0300 Subject: spacemacs.el: Show unread articles on default elfeed search filter --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index d72024e..b6a009e 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -946,7 +946,7 @@ This is the place where most of your configurations should be done. Unless it is ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared")) browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url - elfeed-search-filter "@2020-01-01--0-day-ago +unread -news -high_volume " + elfeed-search-filter "@2020-01-01--0-day-ago -news -high_volume " auth-source-debug t -- cgit v1.2.3 From 97cc9be684747662470e140ac2f698fc314edfa9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 18:34:53 -0300 Subject: Generate local ril.xml from Firefox bookmarks --- .gitignore | 2 +- scripts/ad-hoc/elfeed.js | 19 +++++++++++++++++++ scripts/ad-hoc/elfeed.sh | 38 ++++++++++++++++++++++++++++++++++++++ scripts/ad-hoc/package-lock.json | 33 +++++++++++++++++++++++++++++++++ 4 files changed, 91 insertions(+), 1 deletion(-) create mode 100644 scripts/ad-hoc/elfeed.js create mode 100644 scripts/ad-hoc/package-lock.json diff --git a/.gitignore b/.gitignore index 68b7e2f..258e7a4 100644 --- a/.gitignore +++ b/.gitignore @@ -2,5 +2,5 @@ mail/offlineimap.pyc tam_required /result -/scripts/node_modules/ +/scripts/ad-hoc/node_modules/ /scripts/package-lock.json \ No newline at end of file diff --git a/scripts/ad-hoc/elfeed.js b/scripts/ad-hoc/elfeed.js new file mode 100644 index 0000000..54ed7ab --- /dev/null +++ b/scripts/ad-hoc/elfeed.js @@ -0,0 +1,19 @@ +const fs = require("fs"); +const rss = require("rss"); + +const items = JSON.parse(fs.readFileSync(0, "utf-8")); + +const feed = new rss({ + title: "EuAndreh RIL title", + description: "EuAndreh RIL description", +}); + +items.forEach(({ title, url }) => + feed.item({ + title, + url + })); + +const xml = feed.xml({indent: true}); + +console.log(xml); diff --git a/scripts/ad-hoc/elfeed.sh b/scripts/ad-hoc/elfeed.sh index e6d3104..8316941 100755 --- a/scripts/ad-hoc/elfeed.sh +++ b/scripts/ad-hoc/elfeed.sh @@ -1,6 +1,44 @@ #!/usr/bin/env bash set -Eeuo pipefail +QUERY=$(cat < ~/.elfeed/ril.xml + timeout 120 \ emacs \ -batch \ diff --git a/scripts/ad-hoc/package-lock.json b/scripts/ad-hoc/package-lock.json new file mode 100644 index 0000000..29925e3 --- /dev/null +++ b/scripts/ad-hoc/package-lock.json @@ -0,0 +1,33 @@ +{ + "requires": true, + "lockfileVersion": 1, + "dependencies": { + "mime-db": { + "version": "1.25.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", + "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=" + }, + "mime-types": { + "version": "2.1.13", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", + "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", + "requires": { + "mime-db": "~1.25.0" + } + }, + "rss": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/rss/-/rss-1.2.2.tgz", + "integrity": "sha1-UKFpiHYTgTOnT5oF0r3I240nqSE=", + "requires": { + "mime-types": "2.1.13", + "xml": "1.0.1" + } + }, + "xml": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", + "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" + } + } +} -- cgit v1.2.3 From e64b704f351323b6524d52cbf65a6a5f2ae6c608 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 18:35:10 -0300 Subject: fake-symlinks: Generate gistat website on build-site.sh --- bash/templates/build-site.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/templates/build-site.sh b/bash/templates/build-site.sh index 7bde0fd..9a6ed7e 100755 --- a/bash/templates/build-site.sh +++ b/bash/templates/build-site.sh @@ -79,3 +79,5 @@ for lang in ${LANGS}; do mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" done done + +gitstats . $OUT/gitstats/ -- cgit v1.2.3 From ca5992d3fd6bb87f4699628274df4942fbfd98cc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 18:35:33 -0300 Subject: hd.sh: Run archive-box.sh --- scripts/ad-hoc/hd.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index 3e2aee7..8ed9113 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -11,3 +11,4 @@ rsync -avzP "$R:desktop-borg/" ~/UTCLOUD/backups/desk rsync -avzP euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ rsync -avzP ~/UTCLOUD/backups/box-duplicity/ "$R:box-duplicity/" aws s3 sync ~/UTCLOUD/backups/ s3://euandreh-backups/ +archive-box.sh -- cgit v1.2.3 From 41322c0d441f41725b0570cd13bc936c32543f89 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 3 Oct 2020 18:42:49 -0300 Subject: elfeed.sh: cd into directory for running npm ci --- scripts/ad-hoc/elfeed.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/elfeed.sh b/scripts/ad-hoc/elfeed.sh index 8316941..fd6c2c7 100755 --- a/scripts/ad-hoc/elfeed.sh +++ b/scripts/ad-hoc/elfeed.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" QUERY=$(cat < Date: Sat, 3 Oct 2020 23:00:08 -0300 Subject: fake-symlinks: Add quote to gitstats out path --- bash/templates/build-site.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/build-site.sh b/bash/templates/build-site.sh index 9a6ed7e..5a3b90b 100755 --- a/bash/templates/build-site.sh +++ b/bash/templates/build-site.sh @@ -80,4 +80,4 @@ for lang in ${LANGS}; do done done -gitstats . $OUT/gitstats/ +gitstats . "$OUT/gitstats/" -- cgit v1.2.3 From 00a7b71d4eed450fc62de30e6bdd1584f3acd60d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 4 Oct 2020 09:26:59 -0300 Subject: spacemacs.el: Use custom shortcuts for org-mode items --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index b6a009e..6bec684 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -903,7 +903,7 @@ This is the place where most of your configurations should be done. Unless it is org-log-state-notes-insert-after-drawers nil - org-todo-keywords '((sequence "TODO(!)" "NEXT(!)" "WAITING(!)" "MEETING(!)" "INACTIVE(!)" "DOING(!)" "|" "CANCELLED(!)" "DONE(!)")) + org-todo-keywords '((sequence "TODO(t!)" "NEXT(n!)" "WAITING(w!)" "MEETING(m!)" "INACTIVE(i!)" "DOING(d!)" "|" "CANCELLED(c@)" "DONE(x@)")) org-todo-keyword-faces '(("TODO" . (:foreground "brown" :weight bold)) ("DOING" . (:foreground "yellow" :weight bold)) -- cgit v1.2.3 From b657c4ce6f007b298500d2f8907b1d354c9d026b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 4 Oct 2020 23:20:55 -0300 Subject: fake-symlinks: Also use metadata.json on "simple" projects --- bash/templates/simple-pre-push-hook.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/templates/simple-pre-push-hook.sh b/bash/templates/simple-pre-push-hook.sh index f07fb69..b67b13d 100755 --- a/bash/templates/simple-pre-push-hook.sh +++ b/bash/templates/simple-pre-push-hook.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash set -Eeuo pipefail +set -x -scp description euandreh.xyz:/data/git/$PROJECT.git/description +jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' -- cgit v1.2.3 From 59f50eaa1ed7a2ebbddf436b5650726b0dd1b782 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 4 Oct 2020 23:21:13 -0300 Subject: configuration.nix: Add niv package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ef41427..0a07ebe 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -203,6 +203,7 @@ in { cachix nixfmt + niv sbcl leiningen python3 -- cgit v1.2.3 From e3f489eb67d1c9ddf34bc428491c5bb84103b781 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 4 Oct 2020 23:21:31 -0300 Subject: fake-symlinks: Also enable -x in pre-push-hook.sh --- bash/templates/pre-push-hook.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/templates/pre-push-hook.sh b/bash/templates/pre-push-hook.sh index 8cd50a1..d56c40d 100755 --- a/bash/templates/pre-push-hook.sh +++ b/bash/templates/pre-push-hook.sh @@ -1,5 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail +set -x scp ./scripts/ci-build.sh euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' -- cgit v1.2.3 From c33f589aeaff80cc0f1d0c04216d88bab2dc119d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 4 Oct 2020 23:21:56 -0300 Subject: Update fake-symlinks.sh with placeholder templates and more projects --- bash/fake-symlinks.sh | 12 ++++++++++-- bash/templates/base-packages.nix | 22 ++++++++++++++++++++++ bash/templates/i18n-pagenames.json | 3 +++ bash/templates/metadata.json | 8 ++++++++ 4 files changed, 43 insertions(+), 2 deletions(-) create mode 100644 bash/templates/base-packages.nix create mode 100644 bash/templates/i18n-pagenames.json create mode 100644 bash/templates/metadata.json diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 13c59ba..5a4821f 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -47,17 +47,25 @@ documented-project-fake-ln() { envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/" cp LICENSE "$HOME/dev/libre/$PROJECT/" + cp base-packages.nix "$HOME/dev/libre/$PROJECT/base-packages.nix" + + if [[ ! -f "$HOME/dev/libre/$PROJECT/docs/i18n-pagenames.json" ]]; then + cp i18n-pagenames.json "$HOME/dev/libre/$PROJECT/docs/" + fi + if [[ ! -f "$HOME/dev/libre/$PROJECT/metadata.json" ]]; then + cp metadata.json "$HOME/dev/libre/$PROJECT/docs/" + fi } for r in songbooks mediator intermediauth cement; do documented-project-fake-ln "$r" "${r^}" done -for r in byopds byodb; do +for r in byopds; do documented-project-fake-ln "$r" "$(echo "$1" | tr '[:lower:]' '[:upper:]')" done -for r in boneco website dotfiles; do +for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo vps; do export PROJECT="$r" envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" diff --git a/bash/templates/base-packages.nix b/bash/templates/base-packages.nix new file mode 100644 index 0000000..98f9404 --- /dev/null +++ b/bash/templates/base-packages.nix @@ -0,0 +1,22 @@ +{ pkgs, utils-i18n }: +with pkgs; [ + # Project-wide packages + jq + rq + nixfmt + shellcheck + direnv + niv + bats + gitstats + + # Documentation + (python3.withPackages (p: [ p.sphinx p.sphinx_rtd_theme ])) + (hunspellWithDicts (with utils-i18n.dicts; [ en pt fr ])) + utils-i18n.sphinx-intl + emacs + git + moreutils # sponge + graphviz + texlive.combined.scheme-full +] diff --git a/bash/templates/i18n-pagenames.json b/bash/templates/i18n-pagenames.json new file mode 100644 index 0000000..6b674df --- /dev/null +++ b/bash/templates/i18n-pagenames.json @@ -0,0 +1,3 @@ +{ + "en": {} +} diff --git a/bash/templates/metadata.json b/bash/templates/metadata.json new file mode 100644 index 0000000..fc749ed --- /dev/null +++ b/bash/templates/metadata.json @@ -0,0 +1,8 @@ +{ + "version": "master", + "project_name": "FIXME", + "description": "FIXME", + "authors": ["EuAndreh "], + "langs": ["en"], + "current_lang": "en" +} -- cgit v1.2.3 From 143e7c7d683a37eb21a7fdbeec031f95c3c695a6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 11 Oct 2020 10:39:56 -0300 Subject: Update pastebin.sh helper to new layout --- scripts/ad-hoc/pastebin.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index d2b06cf..5d7adb2 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -34,7 +34,8 @@ slugify() { } SLUG_TITLE="$(slugify "${FULL_TITLE}")" -OUT="_pastebins/${SLUG_TITLE}.md" +PASTE_DATE="$(date -I)" +OUT="_pastebins/${PASTE_DATE}-${SLUG_TITLE}.md" pushd ~/dev/libre/website > /dev/null @@ -46,8 +47,8 @@ pushd ~/dev/libre/website > /dev/null cat < "${OUT}" --- title: ${FULL_TITLE} -date: $(date -I) -layout: pastebin +date: ${PASTE_DATE} +layout: post lang: en --- -- cgit v1.2.3 From b5eb21398e4b0ae5956ad9b3286dd39197a4e77f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 11 Oct 2020 10:40:24 -0300 Subject: configuration.nix: Add rq package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0a07ebe..38dee78 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -137,6 +137,7 @@ in { rlwrap awscli jq + rq openvpn xclip bc # binary calculator used in nucli -- cgit v1.2.3 From 726ae98f9ff3184e56e5e04969e104e7167fd4b0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 11 Oct 2020 10:41:06 -0300 Subject: fake-symlinks: Add more placeholder files --- bash/fake-symlinks.sh | 36 +++++++++++++++++++++++------ bash/templates/TODOs.org | 12 ++++++++++ bash/templates/default.nix | 15 ++++++++++++ bash/templates/docs/Makefile | 20 ++++++++++++++++ bash/templates/docs/i18n-pagenames.json | 3 +++ bash/templates/docs/index.rst | 32 +++++++++++++++++++++++++ bash/templates/i18n-pagenames.json | 3 --- templates/slides.html | 41 +++++++++++++++++++++++++++++++++ 8 files changed, 152 insertions(+), 10 deletions(-) create mode 100644 bash/templates/TODOs.org create mode 100644 bash/templates/default.nix create mode 100644 bash/templates/docs/Makefile create mode 100644 bash/templates/docs/i18n-pagenames.json create mode 100644 bash/templates/docs/index.rst delete mode 100644 bash/templates/i18n-pagenames.json create mode 100644 templates/slides.html diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 5a4821f..031c685 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -23,6 +23,10 @@ documented-project-fake-ln() { export PROJECT="$1" export PROJECT_UC="$2" + for d in workflow scripts docs docs/templates docs/dictionaries; do + mkdir -p "$HOME/dev/libre/$PROJECT/$d" + done + sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" envsubst < conf.py > "$HOME/dev/libre/$PROJECT/docs/conf.py" @@ -49,12 +53,21 @@ documented-project-fake-ln() { cp LICENSE "$HOME/dev/libre/$PROJECT/" cp base-packages.nix "$HOME/dev/libre/$PROJECT/base-packages.nix" - if [[ ! -f "$HOME/dev/libre/$PROJECT/docs/i18n-pagenames.json" ]]; then - cp i18n-pagenames.json "$HOME/dev/libre/$PROJECT/docs/" - fi - if [[ ! -f "$HOME/dev/libre/$PROJECT/metadata.json" ]]; then - cp metadata.json "$HOME/dev/libre/$PROJECT/docs/" - fi + for f in metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix; do + if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then + cp "$f" "$HOME/dev/libre/$PROJECT/$f" + fi + done + + for f in docs/index.rst; do + if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then + envsubst < "$f" > "$HOME/dev/libre/$PROJECT/$f" + fi + done + + for f in docs/dictionaries/international.txt docs/dictionaries/en.txt; do + touch "$HOME/dev/libre/$PROJECT/$f" + done } for r in songbooks mediator intermediauth cement; do @@ -65,7 +78,11 @@ for r in byopds; do documented-project-fake-ln "$r" "$(echo "$1" | tr '[:lower:]' '[:upper:]')" done -for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo vps; do +for r in x-bindgen libedn eq; do + documented-project-fake-ln "$r" "$r" +done + +for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do export PROJECT="$r" envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" @@ -76,4 +93,9 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done +# website +envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" +cp assert-nixfmt.sh "$HOME/dev/libre/website/scripts/" +cp assert-shellcheck.sh "$HOME/dev/libre/website/scripts/" + popd > /dev/null || exit 1 diff --git a/bash/templates/TODOs.org b/bash/templates/TODOs.org new file mode 100644 index 0000000..4b0c4a9 --- /dev/null +++ b/bash/templates/TODOs.org @@ -0,0 +1,12 @@ +* Tasks +:PROPERTIES: +:CUSTOM_ID: tasks +:END: +* Bugs +:PROPERTIES: +:CUSTOM_ID: bugs +:END: +* Improvements +* Questions +* Resources +* Scratch diff --git a/bash/templates/default.nix b/bash/templates/default.nix new file mode 100644 index 0000000..a2d5b0d --- /dev/null +++ b/bash/templates/default.nix @@ -0,0 +1,15 @@ +let + niv-sources = import ./nix/sources.nix; + pkgs = import niv-sources.nixpkgs { overlays = [ ]; }; + src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; + utils-i18n = pkgs.callPackage ./utils-i18n.nix { }; + + projectBuildInputs = with pkgs; [ + ] ++ pkgs.callPackage ./base-packages.nix { inherit utils-i18n; }; + + preTestPhaseSetup = '' + ''; + utils = import ./utils.nix { + inherit pkgs src projectBuildInputs preTestPhaseSetup; + }; +in { inherit (utils) test site shell publishScript remotePublishScript; } diff --git a/bash/templates/docs/Makefile b/bash/templates/docs/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/bash/templates/docs/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/bash/templates/docs/i18n-pagenames.json b/bash/templates/docs/i18n-pagenames.json new file mode 100644 index 0000000..6b674df --- /dev/null +++ b/bash/templates/docs/i18n-pagenames.json @@ -0,0 +1,3 @@ +{ + "en": {} +} diff --git a/bash/templates/docs/index.rst b/bash/templates/docs/index.rst new file mode 100644 index 0000000..ca3497a --- /dev/null +++ b/bash/templates/docs/index.rst @@ -0,0 +1,32 @@ +$PROJECT_UC +======== + +FIXME: description + +Useful links: +~~~~~~~~~~~~~ + +- `documentation`_ (`single page documentation`_) +- `mailing list`_ +- `source code`_ (`GitLab mirror`_) +- `tasks and bugs`_ +- `build logs`_ + +See also: + +- `repository statistics`_ + +.. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ +.. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ +.. _`mailing list`: https://lists.sr.ht/~euandreh/$PROJECT +.. _`source code`: https://git.euandreh.xyz/$PROJECT +.. _`GitLab mirror`: https://gitlab.com/EuAndreh/$PROJECT +.. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html +.. _`build logs`: https://ci.euandreh.xyz/#$PROJECT +.. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ + +Introduction +~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 2 diff --git a/bash/templates/i18n-pagenames.json b/bash/templates/i18n-pagenames.json deleted file mode 100644 index 6b674df..0000000 --- a/bash/templates/i18n-pagenames.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "en": {} -} diff --git a/templates/slides.html b/templates/slides.html new file mode 100644 index 0000000..665890e --- /dev/null +++ b/templates/slides.html @@ -0,0 +1,41 @@ + + + + + + + reveal.js + + + + + + + + + +
    +
    +
    +
    +
    +
    + + + + + + + + -- cgit v1.2.3 From 789016d4a85fefc65c23abb4523724fbb09e79cc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 11 Oct 2020 10:41:49 -0300 Subject: Move description -> metadata.json --- description | 1 - metadata.json | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 description create mode 100644 metadata.json diff --git a/description b/description deleted file mode 100644 index bc1f7be..0000000 --- a/description +++ /dev/null @@ -1 +0,0 @@ -Personal OS configuration files. \ No newline at end of file diff --git a/metadata.json b/metadata.json new file mode 100644 index 0000000..354ed37 --- /dev/null +++ b/metadata.json @@ -0,0 +1 @@ +{"description":"Personal OS configuration files."} -- cgit v1.2.3 From ea44086ba11608769fba680d278b44eec0d837b2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 11 Oct 2020 10:43:07 -0300 Subject: Fix tests --- bash/fake-symlinks.sh | 2 ++ bash/templates/default.nix | 7 +++---- default.nix | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 031c685..af3f763 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -59,6 +59,7 @@ documented-project-fake-ln() { fi done + # shellcheck disable=2043 for f in docs/index.rst; do if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then envsubst < "$f" > "$HOME/dev/libre/$PROJECT/$f" @@ -74,6 +75,7 @@ for r in songbooks mediator intermediauth cement; do documented-project-fake-ln "$r" "${r^}" done +# shellcheck disable=2043 for r in byopds; do documented-project-fake-ln "$r" "$(echo "$1" | tr '[:lower:]' '[:upper:]')" done diff --git a/bash/templates/default.nix b/bash/templates/default.nix index a2d5b0d..a5660f5 100644 --- a/bash/templates/default.nix +++ b/bash/templates/default.nix @@ -4,11 +4,10 @@ let src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; utils-i18n = pkgs.callPackage ./utils-i18n.nix { }; - projectBuildInputs = with pkgs; [ - ] ++ pkgs.callPackage ./base-packages.nix { inherit utils-i18n; }; + projectBuildInputs = with pkgs; + [ ] ++ pkgs.callPackage ./base-packages.nix { inherit utils-i18n; }; - preTestPhaseSetup = '' - ''; + preTestPhaseSetup = ""; utils = import ./utils.nix { inherit pkgs src projectBuildInputs preTestPhaseSetup; }; diff --git a/default.nix b/default.nix index 5ca6098..b479f63 100644 --- a/default.nix +++ b/default.nix @@ -22,7 +22,7 @@ in rec { "default.nix" "utils.nix" "scripts/ad-hoc/pastebin.sh" - "bash/templates/assert-todos.sh" + "bash/templates/" ]) ]; publishScript = -- cgit v1.2.3 From 1a655eaec04975b78cbf4ced4920477dfe6f1f88 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 11 Oct 2020 14:18:41 -0300 Subject: Remove website from backup.sh --- scripts/ad-hoc/backup.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 112ccca..a996de1 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -25,7 +25,6 @@ borg create \ ~/.mozilla/ \ ~/.config/quodlibet/ \ ~/gPodder/ \ - ~/dev/libre/website/ \ ~/.elfeed/ # add folders to be backed up here -- cgit v1.2.3 From 9626d793f196ab57ceb08bcaa51e180930369b37 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 14 Oct 2020 06:24:02 -0300 Subject: fake-symlinks: Add placeholder .gitignore --- bash/fake-symlinks.sh | 2 +- bash/templates/.gitignore | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 bash/templates/.gitignore diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index af3f763..4a0ba76 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -53,7 +53,7 @@ documented-project-fake-ln() { cp LICENSE "$HOME/dev/libre/$PROJECT/" cp base-packages.nix "$HOME/dev/libre/$PROJECT/base-packages.nix" - for f in metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix; do + for f in .gitignore metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix; do if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then cp "$f" "$HOME/dev/libre/$PROJECT/$f" fi diff --git a/bash/templates/.gitignore b/bash/templates/.gitignore new file mode 100644 index 0000000..d6815e6 --- /dev/null +++ b/bash/templates/.gitignore @@ -0,0 +1,5 @@ +# Nix +/result + +# Sphinx +docs/_build/ -- cgit v1.2.3 From 89c21d128e7a6d415498ccf0d60dc91b4103b3e3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 14 Oct 2020 06:24:18 -0300 Subject: fake-symlinks.sh: Fix argument variable being forwarded --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 4a0ba76..a560a08 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -77,7 +77,7 @@ done # shellcheck disable=2043 for r in byopds; do - documented-project-fake-ln "$r" "$(echo "$1" | tr '[:lower:]' '[:upper:]')" + documented-project-fake-ln "$r" "$(echo "$r" | tr '[:lower:]' '[:upper:]')" done for r in x-bindgen libedn eq; do -- cgit v1.2.3 From 38f1e514bf26abb56e32d71855fae60bdf2c42a9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 14 Oct 2020 06:49:55 -0300 Subject: fake-symlinks: Don't build EPUB by default in build-site.sh --- bash/templates/build-site.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/build-site.sh b/bash/templates/build-site.sh index 5a3b90b..a35a15c 100755 --- a/bash/templates/build-site.sh +++ b/bash/templates/build-site.sh @@ -57,7 +57,7 @@ for lang in ${LANGS}; do done fi - make SPHINXOPTS="-D language=$lang" latexpdf epub singlehtml html + make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html popd mkdir "$OUT/$lang/" -- cgit v1.2.3 From e8a9a372aacc00908b352e38d45b66973c77d611 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 16 Oct 2020 13:15:09 -0300 Subject: fake-symlinks: add $MAILING_LIST variable --- bash/fake-symlinks.sh | 7 ++++--- bash/templates/docs/index.rst | 2 +- bash/templates/preamble.org | 2 +- 3 files changed, 6 insertions(+), 5 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a560a08..ea86ad6 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -22,6 +22,7 @@ export DOLLAR='$' documented-project-fake-ln() { export PROJECT="$1" export PROJECT_UC="$2" + export MAILING_LIST="$3" for d in workflow scripts docs docs/templates docs/dictionaries; do mkdir -p "$HOME/dev/libre/$PROJECT/$d" @@ -72,16 +73,16 @@ documented-project-fake-ln() { } for r in songbooks mediator intermediauth cement; do - documented-project-fake-ln "$r" "${r^}" + documented-project-fake-ln "$r" "${r^}" "$r" done # shellcheck disable=2043 for r in byopds; do - documented-project-fake-ln "$r" "$(echo "$r" | tr '[:lower:]' '[:upper:]')" + documented-project-fake-ln "$r" "$(echo "$r" | tr '[:lower:]' '[:upper:]')" "$r" done for r in x-bindgen libedn eq; do - documented-project-fake-ln "$r" "$r" + documented-project-fake-ln "$r" "$r" 'mediator' done for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do diff --git a/bash/templates/docs/index.rst b/bash/templates/docs/index.rst index ca3497a..e43b391 100644 --- a/bash/templates/docs/index.rst +++ b/bash/templates/docs/index.rst @@ -18,7 +18,7 @@ See also: .. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ .. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ -.. _`mailing list`: https://lists.sr.ht/~euandreh/$PROJECT +.. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST .. _`source code`: https://git.euandreh.xyz/$PROJECT .. _`GitLab mirror`: https://gitlab.com/EuAndreh/$PROJECT .. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html diff --git a/bash/templates/preamble.org b/bash/templates/preamble.org index d2d438d..7e3c2c5 100644 --- a/bash/templates/preamble.org +++ b/bash/templates/preamble.org @@ -16,7 +16,7 @@ Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. -Register a new one: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$PROJECT@lists.sr.ht]]. +Register a new one: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. /Você também pode escrever em português./ -- cgit v1.2.3 From c972bb1dc5570cb4b51b0857ca3ea4e0026b28a0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 16 Oct 2020 13:15:55 -0300 Subject: configuration.nix: Add libressl package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 38dee78..90e9fe3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -175,6 +175,7 @@ in { ledger ranger electrum + libressl gnome3.libgnome-keyring gnome3.gnome-keyring -- cgit v1.2.3 From ae9d08c534e802c56b0d2d45c56462508b88ad24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 22 Oct 2020 15:59:44 -0300 Subject: fake-symlinks: Use $MAILING_LIST instead of $PROJECT --- bash/templates/preamble.org | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/preamble.org b/bash/templates/preamble.org index 7e3c2c5..1da69e7 100644 --- a/bash/templates/preamble.org +++ b/bash/templates/preamble.org @@ -16,7 +16,7 @@ Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. -Register a new one: [[mailto:~euandreh/$PROJECT@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. +Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. /Você também pode escrever em português./ -- cgit v1.2.3 From 695d52b7be97d35d93981984ed7dec39503cb63d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 22 Oct 2020 20:51:25 -0300 Subject: configuration.nix: Enable noise cancellation in pulseaudio Taken from: https://til.flourishing.stream/2020/05/24/cancelamento-de-ruido-pulseaudio/ --- nixos/configuration.nix | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 90e9fe3..4c17656 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -30,6 +30,18 @@ in { package = pkgs.pulseaudioFull; enable = true; extraModules = [ pkgs.pulseaudio-modules-bt ]; + extraConfig = '' + # Switch between headset and headphone mode (e.g. for calls and music) automatically + load-module module-bluetooth-policy auto_switch=2 + # Echo cancellation and noise cleanup of mic + load-module module-echo-cancel aec_method=webrtc + + # https://til.flourishing.stream/2020/05/24/cancelamento-de-ruido-pulseaudio/ + ### Enable Echo/Noise-Cancellation + load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink + set-default-source echoCancel_source + set-default-sink echoCancel_sink + ''; }; }; -- cgit v1.2.3 From 17f6b1c14a8edef5a652bd6cde4ee20cbd79802e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Oct 2020 08:07:59 -0300 Subject: Use git.euandreh.xyz over git.sr.ht --- README.org | 9 +-------- bash/templates/workflow.css | 2 +- public/nixos/setup.sh | 2 +- 3 files changed, 3 insertions(+), 10 deletions(-) diff --git a/README.org b/README.org index ad038c8..d1caada 100644 --- a/README.org +++ b/README.org @@ -1,11 +1,4 @@ -* [[https://git.sr.ht/~euandreh/dotfiles][dotfiles]] - EuAndreh's personal repository -#+BEGIN_HTML -

    - - - -

    -#+END_HTML +* dotfiles - EuAndreh's personal repository ** Instructions - setting up a new NixOS installation *** 1. Prepare the USB stick Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] (prefer the KDE image for easy network connection) and burn it to the USB stick (check the device with =lsblk=): diff --git a/bash/templates/workflow.css b/bash/templates/workflow.css index d0bc519..0e4f851 100644 --- a/bash/templates/workflow.css +++ b/bash/templates/workflow.css @@ -21,7 +21,7 @@ a.header-anchor { /* Replicate colors from: - https://git.sr.ht/~euandreh/dotfiles/tree/fcd9f9c4ef399d45d54927382dc1cdde251ebb0a/spacemacs.el#L866 + https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866 */ .TODO { diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh index 1892233..2587fe9 100755 --- a/public/nixos/setup.sh +++ b/public/nixos/setup.sh @@ -119,7 +119,7 @@ configure_dotfiles() { ssh-add mkdir -p ~/dev/libre/ - git clone git@git.sr.ht:~euandreh/dotfiles ~/dev/libre/dotfiles/ + git clone git.euandreh.xyz/dotfiles ~/dev/libre/dotfiles/ pushd ~/dev/libre/dotfiles/ git crypt unlock popd -- cgit v1.2.3 From bccbb71cc3af3468ba4c41207b97371da9b79cdb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Oct 2020 08:29:39 -0300 Subject: Remove .build.yml --- .build.yml | 20 -------------------- bash/fake-symlinks.sh | 1 - bash/templates/.build.yml | 12 ------------ 3 files changed, 33 deletions(-) delete mode 100644 .build.yml delete mode 100644 bash/templates/.build.yml diff --git a/.build.yml b/.build.yml deleted file mode 100644 index 83d6a51..0000000 --- a/.build.yml +++ /dev/null @@ -1,20 +0,0 @@ -image: nixos/unstable -repositories: - nixpkgs: https://nixos.org/channels/nixpkgs-unstable -triggers: - - condition: failure - action: email - to: EuAndreh -sources: - - https://git.sr.ht/~euandreh/dotfiles -secrets: - - 148e7be0-9948-4e49-88e3-ca8c5b7ac9f0 -tasks: - - tests: | - cd dotfiles/ - nix-build -A test - - docs: | - cd dotfiles/ - nix-build -A publishScript - source ./docs/env.sh - ./result/bin/publish.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index ea86ad6..3c073cc 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -49,7 +49,6 @@ documented-project-fake-ln() { cp assert-nixfmt.sh "$HOME/dev/libre/$PROJECT/scripts/" cp assert-todos.sh "$HOME/dev/libre/$PROJECT/scripts/" cp shell.nix "$HOME/dev/libre/$PROJECT/" - envsubst < .build.yml > "$HOME/dev/libre/$PROJECT/.build.yml" cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/" cp LICENSE "$HOME/dev/libre/$PROJECT/" cp base-packages.nix "$HOME/dev/libre/$PROJECT/base-packages.nix" diff --git a/bash/templates/.build.yml b/bash/templates/.build.yml deleted file mode 100644 index 24c5818..0000000 --- a/bash/templates/.build.yml +++ /dev/null @@ -1,12 +0,0 @@ -image: nixos/unstable -triggers: - - condition: failure - action: email - to: EuAndreh -sources: - - https://git.sr.ht/~euandreh/$PROJECT -tasks: - - tests: | - cd $PROJECT/ - nix-build -A test - nix-build -A site -- cgit v1.2.3 From 8b9fa73474a109ff81fc97dec7013e8c9dcf7a48 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Oct 2020 08:30:29 -0300 Subject: Remove utils.nix --- utils.nix | 105 -------------------------------------------------------------- 1 file changed, 105 deletions(-) delete mode 100644 utils.nix diff --git a/utils.nix b/utils.nix deleted file mode 100644 index 5bcbb10..0000000 --- a/utils.nix +++ /dev/null @@ -1,105 +0,0 @@ -{ pkgs, src, baseName }: rec { - baseTask = pkgs.stdenv.mkDerivation { - name = "${baseName}-task"; - src = src; - buildInputs = [ ]; - phases = "unpackPhase buildPhase"; - buildPhase = '' - echo "ERROR: base task buildPhase not overriden." - exit 1 - ''; - }; - shellcheck = ignoredFindPattern: - baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-shellcheck"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.shellcheck ]; - ignoredPattern = - if ignoredFindPattern == null then "" else ignoredFindPattern; - buildPhase = '' - find . -type f \( -name '*.sh' -and -regextype egrep ! -regex '${ignoredPattern}' \) -print0 | xargs -0 shellcheck -x - touch $out - ''; - }); - formatNix = baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-nixfmt"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.nixfmt ]; - buildPhase = '' - format() { - nix_file="$1" - diff <(nixfmt < "$nix_file") "$nix_file" || { - echo "The $nix_file is unformatted. To fix it, run:" - echo " nixfmt $nix_file" - exit 1 - } - } - export -f format - find . -type f -name '*.nix' -print0 | xargs -0 -I{} bash -c "format {}" \; - touch $out - ''; - }); - fixme = ignoredFiles: - baseTask.overrideAttrs (baseAttrs: rec { - name = "${baseAttrs.name}-fixme"; - buildInputs = baseAttrs.buildInputs ++ [ pkgs.ag ]; - ignoredPattern = pkgs.lib.fold (a: b: " --ignore ${a} ${b}") "" - (if ignoredFiles == null then [ - "utils.nix" - "TODOs.org" - ] else - ignoredFiles); - buildPhase = '' - ag FIXME ${ignoredPattern} || { - touch $out - exit 0 - } - echo " Found dangling FIXME markers on the project." - echo " You should write them down properly on TODOs.org." - exit 1 - ''; - }); - readmeOrg = title: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-readme-docs"; - buildInputs = [ pkgs.pandoc ]; - buildPhase = '' - pandoc README.org -o $out --css docs/README.css --to=html5 --self-contained --metadata title="${title}" - ''; - }); - test = testDerivations: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-test"; - buildPhase = '' - echo "Ran tests for:" - for d in ${builtins.toString testDerivations}; do - echo " $d" - done - echo "All tests passed!" - touch $out - ''; - }); - shellEnvironmentBuild = shellBuildInputs: - baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-shell-build-inputs"; - buildPhase = '' - echo "Can build shell environment for shellBuildInputs!" - echo noop > $out - ''; - }); - shellEnvironment = shellBuildInputs: - pkgs.mkShell { - name = "${baseName}-shell"; - buildInputs = shellBuildInputs; - }; - overwritingPublishScript = { docsDerivation, overwrite ? true }: - pkgs.writeShellScriptBin "publish.sh" '' - set -euo pipefail - OUT_DOCS="${docsDerivation}" - ${ - if overwrite then "" else "# " - }${pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "$SERVER_URL" rm -rf "$DOCS_SERVER_PATH/*" - ${pkgs.rsync}/bin/rsync -avzP \ - --rsh="ssh -o StrictHostKeyChecking=no" \ - "$OUT_DOCS/" \ - "$SERVER_URL:$DOCS_SERVER_PATH" - ''; -} -- cgit v1.2.3 From 086b440fef982abe82d3a6426bda730d530a5b98 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Oct 2020 08:50:31 -0300 Subject: fake-symlinks: Add scripts copying to weird repos --- bash/fake-symlinks.sh | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3c073cc..8b143c4 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -95,9 +95,11 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done -# website envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" -cp assert-nixfmt.sh "$HOME/dev/libre/website/scripts/" -cp assert-shellcheck.sh "$HOME/dev/libre/website/scripts/" +for r in dotfiles vps website; do + cp assert-todos.sh "$HOME/dev/libre/$r/scripts/" + cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" + cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" +done popd > /dev/null || exit 1 -- cgit v1.2.3 From 819e7f812465e62394ad9e73e19fd3940730fc43 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Oct 2020 09:29:12 -0300 Subject: Fix default.nix without using utils.nix --- bash/fake-symlinks.sh | 2 +- default.nix | 43 +++++++++++++++---------------------------- scripts/assert-nixfmt.sh | 16 ++++++++++++++++ scripts/assert-shellcheck.sh | 6 ++++++ tests.sh | 8 ++++++++ 5 files changed, 46 insertions(+), 29 deletions(-) create mode 100755 scripts/assert-nixfmt.sh create mode 100755 scripts/assert-shellcheck.sh create mode 100755 tests.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 8b143c4..10be0ba 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -96,7 +96,7 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- done envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" -for r in dotfiles vps website; do +for r in vps website; do cp assert-todos.sh "$HOME/dev/libre/$r/scripts/" cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" diff --git a/default.nix b/default.nix index b479f63..613a2f7 100644 --- a/default.nix +++ b/default.nix @@ -1,30 +1,17 @@ -let pkgs = import { }; -in rec { - utils = import ./utils.nix { - pkgs = pkgs; - src = pkgs.nix-gitignore.gitignoreSource [ ] ./.; - baseName = "dotfiles"; +let + pkgs = import { }; + src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; + projectBuildInputs = with pkgs; [ nixfmt gitMinimal shellcheck ]; +in { + test = pkgs.stdenv.mkDerivation { + inherit src; + name = "dotfiles-test"; + phases = [ "unpackPhase" "buildPhase" ]; + buildInputs = projectBuildInputs; + buildPhase = '' + patchShebangs . + ./tests.sh + touch $out + ''; }; - subtasks = rec { - docs = utils.baseTask.overrideAttrs (baseAttrs: { - name = "${baseAttrs.name}-docs"; - buildPhase = '' - mkdir $out - cp ${utils.readmeOrg "dotfiles"} $out/index.html - cp -Lr public/* $out/ - ''; - }); - }; - test = utils.test [ - utils.formatNix - (utils.shellcheck ".*(encrypted|npmrc|bash/templates/).*") - (utils.fixme [ - "default.nix" - "utils.nix" - "scripts/ad-hoc/pastebin.sh" - "bash/templates/" - ]) - ]; - publishScript = - utils.overwritingPublishScript { docsDerivation = subtasks.docs; }; } diff --git a/scripts/assert-nixfmt.sh b/scripts/assert-nixfmt.sh new file mode 100755 index 0000000..7a68fa9 --- /dev/null +++ b/scripts/assert-nixfmt.sh @@ -0,0 +1,16 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +format() { + nix_file="${1}" + diff <(nixfmt < "${nix_file}") "${nix_file}" || { + echo "The file '${nix_file}' is unformatted. To fix it, run:" + echo " nixfmt ${nix_file}" + exit 1 + } +} +export -f format + +find . -type f -name '*.nix' -print0 | xargs -0 -I% bash -c "format %" diff --git a/scripts/assert-shellcheck.sh b/scripts/assert-shellcheck.sh new file mode 100755 index 0000000..f3c110c --- /dev/null +++ b/scripts/assert-shellcheck.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +git ls-files | grep '\.sh$' | grep -v bash/templates/ | xargs shellcheck diff --git a/tests.sh b/tests.sh new file mode 100755 index 0000000..68d47f4 --- /dev/null +++ b/tests.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +set -x + +./scripts/assert-nixfmt.sh +./scripts/assert-shellcheck.sh -- cgit v1.2.3 From c98ee1f004d26d0d220ebc5b4273bc3440828e25 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 23 Oct 2020 09:47:44 -0300 Subject: fake-symlinks: Remove assert-todos.sh from loop of copied files --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 10be0ba..4f46d8d 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -96,8 +96,8 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- done envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" +cp assert-todos.sh "$HOME/dev/libre/vps/scripts/" for r in vps website; do - cp assert-todos.sh "$HOME/dev/libre/$r/scripts/" cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" done -- cgit v1.2.3 From 3e95a6783e294b5182e5249cc04011fcb24d83fd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 24 Oct 2020 08:06:09 -0300 Subject: fake-symlinks.sh: Move Nix files into nix/ folder --- bash/fake-symlinks.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 4f46d8d..78e3511 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -32,10 +32,10 @@ documented-project-fake-ln() { chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" envsubst < conf.py > "$HOME/dev/libre/$PROJECT/docs/conf.py" envsubst < layout.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html" - envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/utils-i18n.nix" + envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/nix/utils-i18n.nix" cp assert-docs-spelling.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh" - envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/utils.nix" + envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/nix/utils.nix" envsubst < preamble.org > "$HOME/dev/libre/$PROJECT/workflow/preamble.org" cp workflow.css "$HOME/dev/libre/$PROJECT/workflow/" envsubst < pre-push-hook.sh > "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push" @@ -51,7 +51,7 @@ documented-project-fake-ln() { cp shell.nix "$HOME/dev/libre/$PROJECT/" cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/" cp LICENSE "$HOME/dev/libre/$PROJECT/" - cp base-packages.nix "$HOME/dev/libre/$PROJECT/base-packages.nix" + cp base-packages.nix "$HOME/dev/libre/$PROJECT/nix/base-packages.nix" for f in .gitignore metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix; do if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then -- cgit v1.2.3 From 44dedecb72250670759a5626eabbc16018bba2e4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 30 Oct 2020 08:05:05 -0300 Subject: Add money-bot cronjob --- nixos/common.nix | 7 ++++++- nixos/usurpador.nix | 2 ++ 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index d8c4d0f..5bf7add 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -17,4 +17,9 @@ let nix-search-update-job = daily-at-12h30min; mr-remotes-backup-job = daily-at-12h30min; }; -in { crons = builtins.mapAttrs cron-for-name crons; } +in { + crons = builtins.mapAttrs cron-for-name crons // { + money-bot = + "${daily-at-12h30min} andreh /home/andreh/annex/bin/money-bot.sh >> /tmp/cron-dbg.money-bot.log 2>&1"; + }; +} diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 66462ce..1e4ae79 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,6 +10,8 @@ in rec { proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ + common.crons.money-bot + common.crons.nextcloud common.crons.sync-mail common.crons.deliver-queued-mail -- cgit v1.2.3 From b273570d61a6a3c0b150c397cb6dd242710700e6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 31 Oct 2020 06:20:41 -0300 Subject: fake-symlinks: Add esperanto dictionaries --- bash/templates/utils-i18n.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/bash/templates/utils-i18n.nix b/bash/templates/utils-i18n.nix index 953f3a2..5253e78 100644 --- a/bash/templates/utils-i18n.nix +++ b/bash/templates/utils-i18n.nix @@ -48,5 +48,10 @@ dicSHA256 = "10p6jlk9j117mjd1z3dp3vfszcvxqha11kfvksqhvrq4ld9xwzbn"; affSHA256 = "0d6k608h7gm1za3vdq1fhlwqzz2zxg1z0bx1bfvi0spg4a2mn09p"; }; + eo = mkDict { + lang = "eo"; + dicSHA256 = "1hbs8f67kq953llcx8pm0rwi2ln2y693pva952fb9mjc4l99ic3m"; + affSHA256 = "198jaiab98xks5srizi3ww7sg5biqhjl7acjhrsrmcycp8jvns56"; + }; }; } -- cgit v1.2.3 From 7ff81aafeb9d6abd22bc4e304c676c14c5a23a85 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 31 Oct 2020 06:21:03 -0300 Subject: fake-symlinks.sh: Fix environment for copying utils-i18n.nix to website --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 78e3511..bd954e8 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -95,7 +95,7 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done -envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" +PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" cp assert-todos.sh "$HOME/dev/libre/vps/scripts/" for r in vps website; do cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" -- cgit v1.2.3 From da2a2067983150a2b7065919cd0de3cdf35ec477 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Nov 2020 20:20:17 -0300 Subject: fake-symlinks: Add tests.sh --- bash/fake-symlinks.sh | 12 ++++++------ bash/templates/tests.sh | 11 +++++++++++ 2 files changed, 17 insertions(+), 6 deletions(-) create mode 100755 bash/templates/tests.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index bd954e8..08709dd 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -28,6 +28,12 @@ documented-project-fake-ln() { mkdir -p "$HOME/dev/libre/$PROJECT/$d" done + for f in .gitignore metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix tests.sh; do + if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then + cp "$f" "$HOME/dev/libre/$PROJECT/$f" + fi + done + sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh" envsubst < conf.py > "$HOME/dev/libre/$PROJECT/docs/conf.py" @@ -53,12 +59,6 @@ documented-project-fake-ln() { cp LICENSE "$HOME/dev/libre/$PROJECT/" cp base-packages.nix "$HOME/dev/libre/$PROJECT/nix/base-packages.nix" - for f in .gitignore metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix; do - if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then - cp "$f" "$HOME/dev/libre/$PROJECT/$f" - fi - done - # shellcheck disable=2043 for f in docs/index.rst; do if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then diff --git a/bash/templates/tests.sh b/bash/templates/tests.sh new file mode 100755 index 0000000..466c1f0 --- /dev/null +++ b/bash/templates/tests.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +set -x + +echo "Project-wide tests" +./scripts/assert-nixfmt.sh +./scripts/assert-shellcheck.sh +./scripts/assert-todos.sh +./scripts/assert-docs-spelling.sh -- cgit v1.2.3 From 5ec0065a897a4335ed6742fe958c104c954ded68 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Nov 2020 20:21:07 -0300 Subject: fake-symlinks.sh: Refactor and add parsecc --- bash/fake-symlinks.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 08709dd..5685c7f 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -24,7 +24,7 @@ documented-project-fake-ln() { export PROJECT_UC="$2" export MAILING_LIST="$3" - for d in workflow scripts docs docs/templates docs/dictionaries; do + for d in workflow scripts docs docs/_templates docs/dictionaries nix; do mkdir -p "$HOME/dev/libre/$PROJECT/$d" done @@ -84,6 +84,8 @@ for r in x-bindgen libedn eq; do documented-project-fake-ln "$r" "$r" 'mediator' done +documented-project-fake-ln 'parsecc' 'ParsecC' 'parsecc' + for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do export PROJECT="$r" envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" @@ -96,8 +98,11 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- done PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" + cp assert-todos.sh "$HOME/dev/libre/vps/scripts/" + for r in vps website; do + mkdir -p "$HOME/dev/libre/$r/scripts/" cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" done -- cgit v1.2.3 From 42fbb914e5bdf14631a4f98df5ce7f394a62f7f1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Nov 2020 20:21:31 -0300 Subject: fake-symlinks: Fix paths to Nix files in default.nix --- bash/templates/default.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/templates/default.nix b/bash/templates/default.nix index a5660f5..adbefea 100644 --- a/bash/templates/default.nix +++ b/bash/templates/default.nix @@ -2,13 +2,13 @@ let niv-sources = import ./nix/sources.nix; pkgs = import niv-sources.nixpkgs { overlays = [ ]; }; src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; - utils-i18n = pkgs.callPackage ./utils-i18n.nix { }; + utils-i18n = pkgs.callPackage ./nix/utils-i18n.nix { }; projectBuildInputs = with pkgs; - [ ] ++ pkgs.callPackage ./base-packages.nix { inherit utils-i18n; }; + [ ] ++ pkgs.callPackage ./nix/base-packages.nix { inherit utils-i18n; }; preTestPhaseSetup = ""; - utils = import ./utils.nix { + utils = import ./nix/utils.nix { inherit pkgs src projectBuildInputs preTestPhaseSetup; }; in { inherit (utils) test site shell publishScript remotePublishScript; } -- cgit v1.2.3 From e2d9c0aeef2ea9769719bb34c1e53e86180060b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Nov 2020 20:21:50 -0300 Subject: configuration.nix: Add niv package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4c17656..ec398c2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -162,6 +162,7 @@ in { unzip # used by extract bash function and Clojure go-to-source feh # simplistic image viewer nixUnstable # =nix= + niv zip alsaUtils # for xmonad volume commands nssTools # =pk12util= -- cgit v1.2.3 From ced7a895dafa604d297bfa632b971db7511db455 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Nov 2020 23:00:57 -0300 Subject: fake-symlinks.sh: Add parseclj project --- bash/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 5685c7f..9cb132d 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -84,7 +84,8 @@ for r in x-bindgen libedn eq; do documented-project-fake-ln "$r" "$r" 'mediator' done -documented-project-fake-ln 'parsecc' 'ParsecC' 'parsecc' +documented-project-fake-ln 'parsecc' 'ParsecC' 'public-inbox' +documented-project-fake-ln 'parseclj' 'parseclj' 'public-inbox' for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do export PROJECT="$r" -- cgit v1.2.3 From 198d84c7d5ac843c84bc11dd73fbf12350c329e6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 1 Nov 2020 23:01:13 -0300 Subject: env.sh: Add $BORG_REMOTE_PATH --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index f5c9010..b3a51aa 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -4,6 +4,7 @@ export R='16686@ch-s010.rsync.net' export EDITOR=vi export INPUTRC=~/.inputrc export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin:$DOTFILES/bin:${PATH}" +export BORG_REMOTE_PATH='borg1' # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From 3878cc431a363d3916eaff36990b8dd555e1f75e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 2 Nov 2020 14:44:36 -0300 Subject: configuration.nix: Add nim package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ec398c2..b71ef37 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -234,6 +234,7 @@ in { nodejs-10_x ruby pinentry + nim ## Containers and VMs -- cgit v1.2.3 From f3022771e27c9b2688eed5827c9b2c6e6ed22967 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 2 Nov 2020 19:23:46 -0300 Subject: fake-symlinks.sh: Remove ParsecC and parsecclj --- bash/fake-symlinks.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 9cb132d..fb4341c 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -84,9 +84,6 @@ for r in x-bindgen libedn eq; do documented-project-fake-ln "$r" "$r" 'mediator' done -documented-project-fake-ln 'parsecc' 'ParsecC' 'public-inbox' -documented-project-fake-ln 'parseclj' 'parseclj' 'public-inbox' - for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do export PROJECT="$r" envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" -- cgit v1.2.3 From 286854c9423025864f6ad4fb93e6cc2bd56b5650 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 2 Nov 2020 20:12:34 -0300 Subject: common.nix: Move log redirection common string to function --- nixos/common.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 5bf7add..6eca32c 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,6 +1,8 @@ let + log-redirect = name: + ">> /tmp/cron-dbg.${name}.log 2>&1"; cron-for-name = name: cron: - "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh >> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; + "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh ${log-redirect name}"; daily-at-12h30min = "30 12 * * *"; every-hour = "0 * * * *"; crons = { @@ -20,6 +22,6 @@ let in { crons = builtins.mapAttrs cron-for-name crons // { money-bot = - "${daily-at-12h30min} andreh /home/andreh/annex/bin/money-bot.sh >> /tmp/cron-dbg.money-bot.log 2>&1"; + "${daily-at-12h30min} andreh /home/andreh/annex/bin/money-bot.sh ${log-redirect "money-bot"}"; }; } -- cgit v1.2.3 From 9797f6541af2c2cf49216473343c34293b88044d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Nov 2020 06:10:34 -0300 Subject: backup.sh: Add website repository --- scripts/ad-hoc/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index a996de1..112ccca 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -25,6 +25,7 @@ borg create \ ~/.mozilla/ \ ~/.config/quodlibet/ \ ~/gPodder/ \ + ~/dev/libre/website/ \ ~/.elfeed/ # add folders to be backed up here -- cgit v1.2.3 From db7e81272a9ec2f937ec9829a9ddd3de133558c2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 3 Nov 2020 06:12:02 -0300 Subject: Update start command for annex.yml tmuxinator template --- tmux/projects/annex.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml index 5768eaf..d61155f 100644 --- a/tmux/projects/annex.yml +++ b/tmux/projects/annex.yml @@ -13,6 +13,6 @@ windows: - reload - website: - cd ~/dev/libre/website/ - - nix-shell --run 'jekyll serve --future' + - nix-shell - annex: - git status -- cgit v1.2.3 From ecf282a97e809c6379e459896baa3bfdc4b34483 Mon Sep 17 00:00:00 2001 From: nixpkgs-review Date: Fri, 6 Nov 2020 08:55:41 -0300 Subject: fake-symlinks.sh: Update to sync with mrconfig.ini --- LICENSE | 147 +++++++++++++++++++++-------------------------- bash/fake-symlinks.sh | 17 ++++-- bash/symlinks.sh | 2 +- scripts/ad-hoc/backup.sh | 2 +- 4 files changed, 80 insertions(+), 88 deletions(-) diff --git a/LICENSE b/LICENSE index f288702..be3f7b2 100644 --- a/LICENSE +++ b/LICENSE @@ -1,5 +1,5 @@ - GNU GENERAL PUBLIC LICENSE - Version 3, 29 June 2007 + GNU AFFERO GENERAL PUBLIC LICENSE + Version 3, 19 November 2007 Copyright (C) 2007 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies @@ -7,17 +7,15 @@ Preamble - The GNU General Public License is a free, copyleft license for -software and other kinds of works. + The GNU Affero General Public License is a free, copyleft license for +software and other kinds of works, specifically designed to ensure +cooperation with the community in the case of network server software. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, -the GNU General Public License is intended to guarantee your freedom to +our General Public Licenses are intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free -software for all its users. We, the Free Software Foundation, use the -GNU General Public License for most of our software; it applies also to -any other work released this way by its authors. You can apply it to -your programs, too. +software for all its users. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you @@ -26,44 +24,34 @@ them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. - To protect your rights, we need to prevent others from denying you -these rights or asking you to surrender the rights. Therefore, you have -certain responsibilities if you distribute copies of the software, or if -you modify it: responsibilities to respect the freedom of others. - - For example, if you distribute copies of such a program, whether -gratis or for a fee, you must pass on to the recipients the same -freedoms that you received. You must make sure that they, too, receive -or can get the source code. And you must show them these terms so they -know their rights. - - Developers that use the GNU GPL protect your rights with two steps: -(1) assert copyright on the software, and (2) offer you this License -giving you legal permission to copy, distribute and/or modify it. - - For the developers' and authors' protection, the GPL clearly explains -that there is no warranty for this free software. For both users' and -authors' sake, the GPL requires that modified versions be marked as -changed, so that their problems will not be attributed erroneously to -authors of previous versions. - - Some devices are designed to deny users access to install or run -modified versions of the software inside them, although the manufacturer -can do so. This is fundamentally incompatible with the aim of -protecting users' freedom to change the software. The systematic -pattern of such abuse occurs in the area of products for individuals to -use, which is precisely where it is most unacceptable. Therefore, we -have designed this version of the GPL to prohibit the practice for those -products. If such problems arise substantially in other domains, we -stand ready to extend this provision to those domains in future versions -of the GPL, as needed to protect the freedom of users. - - Finally, every program is threatened constantly by software patents. -States should not allow patents to restrict development and use of -software on general-purpose computers, but in those that do, we wish to -avoid the special danger that patents applied to a free program could -make it effectively proprietary. To prevent this, the GPL assures that -patents cannot be used to render the program non-free. + Developers that use our General Public Licenses protect your rights +with two steps: (1) assert copyright on the software, and (2) offer +you this License which gives you legal permission to copy, distribute +and/or modify the software. + + A secondary benefit of defending all users' freedom is that +improvements made in alternate versions of the program, if they +receive widespread use, become available for other developers to +incorporate. Many developers of free software are heartened and +encouraged by the resulting cooperation. However, in the case of +software used on network servers, this result may fail to come about. +The GNU General Public License permits making a modified version and +letting the public access it on a server without ever releasing its +source code to the public. + + The GNU Affero General Public License is designed specifically to +ensure that, in such cases, the modified source code becomes available +to the community. It requires the operator of a network server to +provide the source code of the modified version running there to the +users of that server. Therefore, public use of a modified version, on +a publicly accessible server, gives the public access to the source +code of the modified version. + + An older license, called the Affero General Public License and +published by Affero, was designed to accomplish similar goals. This is +a different license, not a version of the Affero GPL, but Affero has +released a new version of the Affero GPL which permits relicensing under +this license. The precise terms and conditions for copying, distribution and modification follow. @@ -72,7 +60,7 @@ modification follow. 0. Definitions. - "This License" refers to version 3 of the GNU General Public License. + "This License" refers to version 3 of the GNU Affero General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. @@ -549,35 +537,45 @@ to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. - 13. Use with the GNU Affero General Public License. + 13. Remote Network Interaction; Use with the GNU General Public License. + + Notwithstanding any other provision of this License, if you modify the +Program, your modified version must prominently offer all users +interacting with it remotely through a computer network (if your version +supports such interaction) an opportunity to receive the Corresponding +Source of your version by providing access to the Corresponding Source +from a network server at no charge, through some standard or customary +means of facilitating copying of software. This Corresponding Source +shall include the Corresponding Source for any work covered by version 3 +of the GNU General Public License that is incorporated pursuant to the +following paragraph. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed -under version 3 of the GNU Affero General Public License into a single +under version 3 of the GNU General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, -but the special requirements of the GNU Affero General Public License, -section 13, concerning interaction through a network will apply to the -combination as such. +but the work with which it is combined will remain governed by version +3 of the GNU General Public License. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of -the GNU General Public License from time to time. Such new versions will -be similar in spirit to the present version, but may differ in detail to +the GNU Affero General Public License from time to time. Such new versions +will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU General +Program specifies that a certain numbered version of the GNU Affero General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the -GNU General Public License, you may choose any version ever published +GNU Affero General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future -versions of the GNU General Public License can be used, that proxy's +versions of the GNU Affero General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. @@ -635,40 +633,29 @@ the "copyright" line and a pointer to where the full notice is found. Copyright (C) This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by + it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU General Public License for more details. + GNU Affero General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Affero General Public License along with this program. If not, see . Also add information on how to contact you by electronic and paper mail. - If the program does terminal interaction, make it output a short -notice like this when it starts in an interactive mode: - - Copyright (C) - This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. - This is free software, and you are welcome to redistribute it - under certain conditions; type `show c' for details. - -The hypothetical commands `show w' and `show c' should show the appropriate -parts of the General Public License. Of course, your program's commands -might be different; for a GUI interface, you would use an "about box". + If your software can interact with users remotely through a computer +network, you should also make sure that it provides a way for users to +get its source. For example, if your program is a web application, its +interface could display a "Source" link that leads users to an archive +of the code. There are many ways you could offer source, and different +solutions will be better for different programs; see section 13 for the +specific requirements. You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU GPL, see +For more information on this, and how to apply and follow the GNU AGPL, see . - - The GNU General Public License does not permit incorporating your program -into proprietary programs. If your program is a subroutine library, you -may consider it more useful to permit linking proprietary applications with -the library. If this is what you want to do, use the GNU Lesser General -Public License instead of this License. But first, please read -. diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index fb4341c..40bdd24 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -71,7 +71,7 @@ documented-project-fake-ln() { done } -for r in songbooks mediator intermediauth cement; do +for r in songbooks mediator cement; do documented-project-fake-ln "$r" "${r^}" "$r" done @@ -84,10 +84,15 @@ for r in x-bindgen libedn eq; do documented-project-fake-ln "$r" "$r" 'mediator' done -for r in boneco website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria pires swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do - export PROJECT="$r" - envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$r/.git/hooks/pre-push" - chmod +x "$HOME/dev/libre/$r/.git/hooks/pre-push" +simple-project-fake-ln() { + export PROJECT="$1" + envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$1/.git/hooks/pre-push" + chmod +x "$HOME/dev/libre/$1/.git/hooks/pre-push" + cp LICENSE "$HOME/dev/libre/$PROJECT/" +} + +for r in boneco brinquedoteca casa-do-caminho website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do + simple-project-fake-ln "$r" done for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do @@ -95,7 +100,7 @@ for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search- chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done -PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/utils-i18n.nix" +PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/nix/utils-i18n.nix" cp assert-todos.sh "$HOME/dev/libre/vps/scripts/" diff --git a/bash/symlinks.sh b/bash/symlinks.sh index bfcd2b5..1c54d53 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -9,7 +9,7 @@ function upsert_dir_symlink() { } export -f upsert_dir_symlink -upsert_dir_symlink "$HOME/dev/libre/borg/config" ~/.config/borg +upsert_dir_symlink "$HOME/dev/libre/others/borg/config" ~/.config/borg ln -fs "$DOTFILES/bash/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/bash/bash_profile.sh" ~/.bash_profile diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 112ccca..1a6dc8e 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -29,7 +29,7 @@ borg create \ ~/.elfeed/ # add folders to be backed up here -cd ~/dev/libre/borg/ +cd ~/dev/libre/others/borg/ git add . git commit -m 'JOB: automated update of borg config files after backup.sh' git push origin master -- cgit v1.2.3 From 278d33703d3d9344718f7da921dd506d8980a990 Mon Sep 17 00:00:00 2001 From: nixpkgs-review Date: Fri, 6 Nov 2020 08:57:03 -0300 Subject: Add po-mode and poedit --- nixos/configuration.nix | 1 + spacemacs.el | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b71ef37..c45aff9 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -132,6 +132,7 @@ in { ## CLI tools + poedit bash bash-completion nix-bash-completions diff --git a/spacemacs.el b/spacemacs.el index 6bec684..d1f71f8 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -119,6 +119,7 @@ This function should only modify configuration layer settings." ;; '(your-package :location "~/path/to/your-package/") ;; Also include the dependencies as they will not be resolved automatically. dotspacemacs-additional-packages '(paredit + po-mode interleave debbugs fireplace @@ -990,9 +991,23 @@ This function is called at the very end of Spacemacs initialization." ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages - '(lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) + '(po-mode lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) '(safe-local-variable-values - '((eval c-set-offset 'inlambda 0) + '((eval let* + ((root-dir + (expand-file-name + (locate-dominating-file default-directory ".dir-locals.el"))) + (root-dir* + (directory-file-name root-dir))) + (unless + (boundp 'geiser-guile-load-path) + (defvar geiser-guile-load-path 'nil)) + (make-local-variable 'geiser-guile-load-path) + (require 'cl-lib) + (cl-pushnew root-dir* geiser-guile-load-path :test #'string-equal)) + (eval setq guix-directory + (locate-dominating-file default-directory ".dir-locals.el")) + (eval c-set-offset 'inlambda 0) (eval c-set-offset 'access-label '-) (eval c-set-offset 'substatement-open 0) (eval c-set-offset 'arglist-cont-nonempty '+) -- cgit v1.2.3 From 45edceea7c8c2107bffa4af7c6c184a547a281ff Mon Sep 17 00:00:00 2001 From: nixpkgs-review Date: Fri, 6 Nov 2020 08:57:13 -0300 Subject: configuration.nix: Add bundix package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c45aff9..97396c3 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -132,6 +132,7 @@ in { ## CLI tools + bundix poedit bash bash-completion -- cgit v1.2.3 From ec5525a6213a8b44e5aa01b776a43658e05c0d76 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Nov 2020 08:58:08 -0300 Subject: nixfmt ./nixos/common.nix --- nixos/common.nix | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 6eca32c..9a462b1 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,8 +1,9 @@ let - log-redirect = name: - ">> /tmp/cron-dbg.${name}.log 2>&1"; + log-redirect = name: ">> /tmp/cron-dbg.${name}.log 2>&1"; cron-for-name = name: cron: - "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh ${log-redirect name}"; + "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh ${ + log-redirect name + }"; daily-at-12h30min = "30 12 * * *"; every-hour = "0 * * * *"; crons = { @@ -22,6 +23,8 @@ let in { crons = builtins.mapAttrs cron-for-name crons // { money-bot = - "${daily-at-12h30min} andreh /home/andreh/annex/bin/money-bot.sh ${log-redirect "money-bot"}"; + "${daily-at-12h30min} andreh /home/andreh/annex/bin/money-bot.sh ${ + log-redirect "money-bot" + }"; }; } -- cgit v1.2.3 From ec30cabeb9de035ef2be5cbeadb7c9fdd5af89a6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Nov 2020 09:04:46 -0300 Subject: fake-symlinks.sh: Add parsecc and parseclj --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 40bdd24..677e4fa 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -91,7 +91,7 @@ simple-project-fake-ln() { cp LICENSE "$HOME/dev/libre/$PROJECT/" } -for r in boneco brinquedoteca casa-do-caminho website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do +for r in parsecc parseclj boneco brinquedoteca casa-do-caminho website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do simple-project-fake-ln "$r" done -- cgit v1.2.3 From 5704d9d2d1682071c757911b24b46327aef8f18c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Nov 2020 21:11:18 -0300 Subject: spacemacs.el: Add euandreh/find-fake-symlinks-file --- spacemacs.el | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index d1f71f8..a5ee069 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -663,6 +663,10 @@ dump." (interactive) (find-file-existing (concat (getenv "DOTFILES") "/nixos/configuration.nix"))) +(defun euandreh/find-fake-symlinks-file () + (interactive) + (find-file-existing (concat (getenv "DOTFILES") "/bash/fake-symlinks.sh"))) + ;; Taken from: ;; https://notmuchmail.org/emacstips/#index25h2 (defun euandreh/notmuch-show-view-as-patch () @@ -788,7 +792,8 @@ This is the place where most of your configurations should be done. Unless it is "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage - "feo" 'euandreh/find-os-declaration-file) + "feo" 'euandreh/find-os-declaration-file + "feb" 'euandreh/find-fake-symlinks-file) (spacemacs/set-leader-keys-for-major-mode 'typescript-mode "." 'spacemacs/jump-to-definition -- cgit v1.2.3 From 09f9fee4901c0bf2f0a6282622ed3f20241fe17d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 6 Nov 2020 21:11:54 -0300 Subject: Remove reference to GitLab --- bash/fake-symlinks.sh | 1 - bash/templates/breadcrumbs.html | 15 --------------- bash/templates/conf.py | 3 +-- bash/templates/docs/index.rst | 5 ++--- 4 files changed, 3 insertions(+), 21 deletions(-) delete mode 100644 bash/templates/breadcrumbs.html diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 677e4fa..b7e5f27 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -49,7 +49,6 @@ documented-project-fake-ln() { envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" chmod +x "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh" cat <(printf "%s\n\n" "$PROJECT_UC") <(jq -r .description < "$HOME/dev/libre/$PROJECT/metadata.json" | fold -w 72 | sed 's/^ //') <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README" - cp breadcrumbs.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp footer.html "$HOME/dev/libre/$PROJECT/docs/_templates/" cp assert-shellcheck.sh "$HOME/dev/libre/$PROJECT/scripts/" cp assert-nixfmt.sh "$HOME/dev/libre/$PROJECT/scripts/" diff --git a/bash/templates/breadcrumbs.html b/bash/templates/breadcrumbs.html deleted file mode 100644 index 6190a1a..0000000 --- a/bash/templates/breadcrumbs.html +++ /dev/null @@ -1,15 +0,0 @@ -{%- extends "!breadcrumbs.html" %} - -{% block breadcrumbs_aside %} -
  • - - View source - -
  • -
    -
  • - - Edit on GitLab - -
  • -{% endblock %} diff --git a/bash/templates/conf.py b/bash/templates/conf.py index 2aa45a3..8727603 100644 --- a/bash/templates/conf.py +++ b/bash/templates/conf.py @@ -49,8 +49,7 @@ html_context = { "all_versions": all_versions, "langs": metadata["langs"], "current_lang": metadata["current_lang"], - "cgit_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs", - "gitlab_url_prefix": "https://gitlab.com/EuAndreh/$PROJECT/-/blob/master/docs", + "source_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs/", "i18n_pagenames": i18n_pagenames } diff --git a/bash/templates/docs/index.rst b/bash/templates/docs/index.rst index e43b391..78baef3 100644 --- a/bash/templates/docs/index.rst +++ b/bash/templates/docs/index.rst @@ -8,7 +8,7 @@ Useful links: - `documentation`_ (`single page documentation`_) - `mailing list`_ -- `source code`_ (`GitLab mirror`_) +- `source code`_ - `tasks and bugs`_ - `build logs`_ @@ -19,8 +19,7 @@ See also: .. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ .. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ .. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST -.. _`source code`: https://git.euandreh.xyz/$PROJECT -.. _`GitLab mirror`: https://gitlab.com/EuAndreh/$PROJECT +.. _`source code`: https://git.euandreh.xyz/$PROJECT/about/ .. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html .. _`build logs`: https://ci.euandreh.xyz/#$PROJECT .. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ -- cgit v1.2.3 From 103efdda98b2646319867544088bddcb250398dd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 7 Nov 2020 11:06:59 -0300 Subject: fake-symlinks: mkdir -p $REMOTE_PATH before interacting in utils.nix --- bash/templates/utils.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix index 05fc884..82ecf67 100644 --- a/bash/templates/utils.nix +++ b/bash/templates/utils.nix @@ -47,6 +47,7 @@ set -euo pipefail SERVER_URL='euandreh.xyz' REMOTE_PATH=/data/static/$PROJECT/ + ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" mkdir -p "${DOLLAR}REMOTE_PATH" ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" chmod -R +w "${DOLLAR}REMOTE_PATH" ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" rm -rf "${DOLLAR}REMOTE_PATH/*" ${DOLLAR}{pkgs.rsync}/bin/rsync -avzP \ -- cgit v1.2.3 From 5dd3479b81e159c3ce75939134e1972d212527ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 8 Nov 2020 09:31:45 -0300 Subject: default.nix: Shrink exp --- default.nix | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/default.nix b/default.nix index 613a2f7..49df575 100644 --- a/default.nix +++ b/default.nix @@ -1,13 +1,9 @@ -let - pkgs = import { }; - src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; - projectBuildInputs = with pkgs; [ nixfmt gitMinimal shellcheck ]; -in { +with import { }; { test = pkgs.stdenv.mkDerivation { - inherit src; + src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; name = "dotfiles-test"; phases = [ "unpackPhase" "buildPhase" ]; - buildInputs = projectBuildInputs; + buildInputs = [ nixfmt gitMinimal shellcheck ]; buildPhase = '' patchShebangs . ./tests.sh -- cgit v1.2.3 From 99a7c939d8b4ad0805338c2886775f65c0e7fb14 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 9 Nov 2020 13:04:25 -0300 Subject: common.nix: Append .euandreh to cron log files --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index 9a462b1..b8be8a1 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,5 +1,5 @@ let - log-redirect = name: ">> /tmp/cron-dbg.${name}.log 2>&1"; + log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; cron-for-name = name: cron: "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh ${ log-redirect name -- cgit v1.2.3 From d3fc775e8c6b626a914f0c6c23a9d422a727533f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 12 Nov 2020 11:30:46 -0300 Subject: backup.sh: Add backup pruning --- scripts/ad-hoc/backup.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 1a6dc8e..a2aabfc 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -29,6 +29,8 @@ borg create \ ~/.elfeed/ # add folders to be backed up here +borg prune --keep-last 10 --verbose "$R:desktop-borg" + cd ~/dev/libre/others/borg/ git add . git commit -m 'JOB: automated update of borg config files after backup.sh' -- cgit v1.2.3 From 941ea35584e30cc02d1cad54b14813deb3ad759a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 12 Nov 2020 15:54:19 -0300 Subject: fake-symlinks.sh: Stop copying Emacs layout files --- bash/fake-symlinks.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index b7e5f27..453abdb 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -2,11 +2,6 @@ cat "${DOTFILES}/git/gitconfig.ini" ~/annex/secret/Git/gitconfig.ini > ~/.gitconfig -EMACS_LAYOUTS_DIR="${HOME}/.emacs.d/.cache/layouts/" -[[ -d "${EMACS_LAYOUTS_DIR}" ]] && { - cp "${EMACS_LAYOUTS_DIR}"/* ~/Nextcloud/Cache/emacs/ -} - mkdir -p ~/.tmuxinator for template in "${DOTFILES}"/tmux/projects/*; do -- cgit v1.2.3 From d166d84f9578da8395878cae15830c473a81ca38 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 14 Nov 2020 13:17:31 -0300 Subject: aliases.sh: Add td alias --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 711470e..85df354 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -41,3 +41,4 @@ alias r="source ~/.bashrc" alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" alias grep='grep --color=always' +alias td='pushd $(mktemp -d)' -- cgit v1.2.3 From 8bc460f03501d448f075936de71c931afdc7eca3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Nov 2020 08:29:34 -0300 Subject: backup.sh: Add note on initing a backup --- scripts/ad-hoc/backup.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index a2aabfc..158b3ad6 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -11,6 +11,9 @@ export BORG_PASSPHRASE R='16686@ch-s010.rsync.net' export BORG_REMOTE_PATH='borg1' +# env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' +# borg init -e repokey-blake2 --append-only $R:desktop-borg/ + borg create \ --exclude ~/mbsync/.notmuch/ \ --exclude ~/gPodder/Downloads \ -- cgit v1.2.3 From f1ca12f23ac01e59efedb28ce7c93e6d368a598a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 15 Nov 2020 09:06:21 -0300 Subject: Add copy-box-backups.sh script and cronjob --- bash/fake-symlinks.sh | 3 ++- nixos/common.nix | 1 + nixos/usurpador.nix | 1 + scripts/ad-hoc/copy-box-backups.sh | 9 +++++++++ scripts/cron/copy-box-backups-job.sh | 25 +++++++++++++++++++++++++ 5 files changed, 38 insertions(+), 1 deletion(-) create mode 100755 scripts/ad-hoc/copy-box-backups.sh create mode 100755 scripts/cron/copy-box-backups-job.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 453abdb..3425fc4 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -89,8 +89,9 @@ for r in parsecc parseclj boneco brinquedoteca casa-do-caminho website dotfiles simple-project-fake-ln "$r" done -for job in annex elfeed backup repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do +for job in annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/scripts/ad-hoc/${job}.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done diff --git a/nixos/common.nix b/nixos/common.nix index b8be8a1..517a8c4 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -17,6 +17,7 @@ let repo-update-job = daily-at-12h30min; notmuch-dump-job = daily-at-12h30min; mbox-archive-job = daily-at-12h30min; + copy-box-backups-job = daily-at-12h30min; nix-search-update-job = daily-at-12h30min; mr-remotes-backup-job = daily-at-12h30min; }; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 1e4ae79..600fd57 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -22,6 +22,7 @@ in rec { common.crons.repo-update-job common.crons.notmuch-dump-job common.crons.mbox-archive-job + common.crons.copy-box-backups-job common.crons.nix-search-update-job common.crons.mr-remotes-backup-job ]; diff --git a/scripts/ad-hoc/copy-box-backups.sh b/scripts/ad-hoc/copy-box-backups.sh new file mode 100755 index 0000000..df50ac9 --- /dev/null +++ b/scripts/ad-hoc/copy-box-backups.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +set -x + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" > /dev/null +R='16686@ch-s010.rsync.net' + +ssh euandre.org rsync -avzP --delete-after /home/user-data/backup/ "$R:box-duplicity/" diff --git a/scripts/cron/copy-box-backups-job.sh b/scripts/cron/copy-box-backups-job.sh new file mode 100755 index 0000000..1e39a2f --- /dev/null +++ b/scripts/cron/copy-box-backups-job.sh @@ -0,0 +1,25 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + echo "Sending report email..." + + SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail -s "$SUBJECT" eu@euandre.org + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/copy-box-backups.sh +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 1d3104dd1c1a827df0352850ec831e185236f39b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 06:23:15 -0300 Subject: Remove money-bot as a cronjob --- nixos/common.nix | 9 +-------- nixos/usurpador.nix | 2 -- 2 files changed, 1 insertion(+), 10 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 517a8c4..0e73bb7 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -21,11 +21,4 @@ let nix-search-update-job = daily-at-12h30min; mr-remotes-backup-job = daily-at-12h30min; }; -in { - crons = builtins.mapAttrs cron-for-name crons // { - money-bot = - "${daily-at-12h30min} andreh /home/andreh/annex/bin/money-bot.sh ${ - log-redirect "money-bot" - }"; - }; -} +in { crons = builtins.mapAttrs cron-for-name crons; } diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 600fd57..0a537c6 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,8 +10,6 @@ in rec { proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ - common.crons.money-bot - common.crons.nextcloud common.crons.sync-mail common.crons.deliver-queued-mail -- cgit v1.2.3 From d71770c285b52448fe36230b6bd836bc343f9787 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 10:16:34 -0300 Subject: common.nix: Run cronjobs every second hour --- nixos/common.nix | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 0e73bb7..ea5dd79 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -5,11 +5,11 @@ let log-redirect name }"; daily-at-12h30min = "30 12 * * *"; - every-hour = "0 * * * *"; + every-other-hour = "0 */2 * * *"; crons = { - nextcloud = every-hour; - sync-mail = every-hour; - deliver-queued-mail = every-hour; + nextcloud = every-other-hour; + sync-mail = every-other-hour; + deliver-queued-mail = every-other-hour; annex-job = daily-at-12h30min; elfeed-job = daily-at-12h30min; -- cgit v1.2.3 From 4eb0a31d20844d5ee7b61e60c03cb26af760dcd3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 10:21:39 -0300 Subject: youtube.sh: Update path o download-archive --- bash/youtube.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/bash/youtube.sh b/bash/youtube.sh index fac6469..9288a2a 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -6,10 +6,10 @@ export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title download() { youtube-dl "$1" \ - --download-archive ~/Nextcloud/Cache/youtube-dl-seen.conf \ - --prefer-free-formats \ - --playlist-end "$2" \ - --write-description \ + --download-archive ~/archive/youtube-dl-seen.conf \ + --prefer-free-formats \ + --playlist-end "$2" \ + --write-description \ --output "$YT_TEMPLATE" } export -f download -- cgit v1.2.3 From 4e2874f2fae79098d76572084a9b487555dfb242 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 10:57:36 -0300 Subject: configuration.nix: Add zbar for scanning QR codes from webcam --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 97396c3..52391f1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -262,6 +262,7 @@ in { ## GUI programs + zbar fractal calibre gpodder-with-youtube-dl -- cgit v1.2.3 From 6475f41b8f29635fa7892267d5a6739c2c623491 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 12:49:39 -0300 Subject: configuration.nix: Enable syncthing service --- nixos/configuration.nix | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 52391f1..6c46435 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -293,6 +293,13 @@ in { }; services = { + syncthing = { + enable = true; + user = "andreh"; + group = "users"; + dataDir = "/home/andreh/.syncthing"; + }; + flatpak.enable = localConfiguration.enableFlatpak; ssmtp = { enable = true; -- cgit v1.2.3 From e2b38e7f21cac6e722f4c5dac2ab6086e2cb35f8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 15:41:24 -0300 Subject: configuration.nix: Disable Nix GC --- nixos/configuration.nix | 7 ------- 1 file changed, 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6c46435..25b84bc 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -53,13 +53,6 @@ in { channel = "https://nixos.org/channels/nixos-unstable"; }; - nix = { - gc.automatic = true; - extraOptions = '' - trusted-users = root andreh - ''; - }; - console = { keyMap = "br-abnt2"; font = "Lat2-Terminus16"; -- cgit v1.2.3 From 6eb85005bb2599005782fdac4b1802dd65543531 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 18:43:55 -0300 Subject: Replace Nextcloud with Syncthing --- bash/aliases.sh | 1 - nixos/common.nix | 1 - nixos/configuration.nix | 1 - nixos/usurpador.nix | 1 - scripts/ad-hoc/backup.sh | 2 +- scripts/cron/nextcloud.sh | 23 ----------------------- 6 files changed, 1 insertion(+), 28 deletions(-) delete mode 100755 scripts/cron/nextcloud.sh diff --git a/bash/aliases.sh b/bash/aliases.sh index 85df354..cb78b16 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -14,7 +14,6 @@ alias sbcl="rlwrap sbcl" alias ncdu="ncdu --color dark" alias mm="sync-mail.sh" alias m="sync-mail.sh --fast" -alias n="nextcloud.sh" alias sqlite="rlwrap sqlite3" alias p='ping euandre.org -c 3' alias c='tmux send-keys -R \; clear-history' diff --git a/nixos/common.nix b/nixos/common.nix index ea5dd79..40c6cdf 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -7,7 +7,6 @@ let daily-at-12h30min = "30 12 * * *"; every-other-hour = "0 */2 * * *"; crons = { - nextcloud = every-other-hour; sync-mail = every-other-hour; deliver-queued-mail = every-other-hour; diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 25b84bc..f50530b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -120,7 +120,6 @@ in { git-lfs gnupg mr - nextcloud-client borgbackup ## CLI tools diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 0a537c6..b9e3a0f 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -10,7 +10,6 @@ in rec { proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ - common.crons.nextcloud common.crons.sync-mail common.crons.deliver-queued-mail diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 158b3ad6..9592b61 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -22,7 +22,7 @@ borg create \ --progress \ --compression lzma,6 \ "$R:desktop-borg::{hostname}-{now}-${BACKUP_TAG}" \ - ~/Nextcloud/ \ + ~/Sync/ \ ~/mbsync/ \ ~/archive/ \ ~/.mozilla/ \ diff --git a/scripts/cron/nextcloud.sh b/scripts/cron/nextcloud.sh deleted file mode 100755 index 9e7ed72..0000000 --- a/scripts/cron/nextcloud.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[@]}")" - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -USER="$(cat ~/annex/secret/Nextcloud/user.txt)" -PASSWORD="$(cat ~/annex/secret/Nextcloud/password.txt)" -URL="$(cat ~/annex/secret/Nextcloud/url.txt)" - -pgrep nextcloud && { - echo 'Nextloud already running. Exitting.' - exit 1 -} - -nextcloudcmd -h \ - -u "${USER}" \ - -p "${PASSWORD}" \ - ~/Nextcloud/ \ - "${URL}" - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 05470eae962bf62e93d7f9a0a510c1632ff398b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 18:44:05 -0300 Subject: Add ".ignore" file to global gitignore list --- git/gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/gitignore b/git/gitignore index 6d57a5a..d682515 100644 --- a/git/gitignore +++ b/git/gitignore @@ -2,4 +2,5 @@ playground.clj req.http .postman-ns *.swp -gemset.nix \ No newline at end of file +gemset.nix +.ignore \ No newline at end of file -- cgit v1.2.3 From 1082cdadf9b24acacc508bb283f382cb7f7d1743 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 19:37:29 -0300 Subject: env.sh: Add $GUIX_LOCPATH variable --- bash/env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/env.sh b/bash/env.sh index b3a51aa..ff01d60 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -8,3 +8,5 @@ export BORG_REMOTE_PATH='borg1' # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 + +export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -- cgit v1.2.3 From 7d6255af6a52cc74feaf3a975ea55cd29e8a8536 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 19:37:50 -0300 Subject: configuration.nix: Remove extra Guix service configuration --- nixos/configuration.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f50530b..dfe2f58 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -427,11 +427,6 @@ in { serviceConfig = { ExecStart = "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; - Environment = "GUIX_LOCPATH=/root/.guix-profile/lib/locale"; - RemainAfterExit = "yes"; - StandardOutput = "syslog"; - StandardError = "syslog"; - TaskMax = "8192"; }; wantedBy = [ "multi-user.target" ]; }; -- cgit v1.2.3 From 2363ed57b062a6ff732bf481f3953cee8f30b457 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 16 Nov 2020 19:50:22 -0300 Subject: env.sh: Add and source $GUIX_PROFILE variable --- bash/env.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/env.sh b/bash/env.sh index ff01d60..7bfb010 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -10,3 +10,6 @@ export BORG_REMOTE_PATH='borg1' export NIX_BUILD_CORES=0 export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" +GUIX_PROFILE="/home/andreh/.config/guix/current" +# shellcheck disable=1090 +. "$GUIX_PROFILE/etc/profile" -- cgit v1.2.3 From 1dfc3609891527cca35330e96d18358cdd967ff1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 07:00:31 -0300 Subject: fake-symlinks.sh: Stop copying assert-todos.sh to vps repo --- bash/fake-symlinks.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3425fc4..a88912c 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -97,8 +97,6 @@ done PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/nix/utils-i18n.nix" -cp assert-todos.sh "$HOME/dev/libre/vps/scripts/" - for r in vps website; do mkdir -p "$HOME/dev/libre/$r/scripts/" cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" -- cgit v1.2.3 From 9a112bcc25a66c3ef3dfac62144f78857754bc80 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 07:00:56 -0300 Subject: annex.sh: Stop calling nextcloud.sh --- scripts/ad-hoc/annex.sh | 9 ++------- 1 file changed, 2 insertions(+), 7 deletions(-) diff --git a/scripts/ad-hoc/annex.sh b/scripts/ad-hoc/annex.sh index d7347c1..9da5535 100755 --- a/scripts/ad-hoc/annex.sh +++ b/scripts/ad-hoc/annex.sh @@ -9,11 +9,6 @@ AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" export AWS_ACCESS_KEY_ID export AWS_SECRET_ACCESS_KEY -cd "$(dirname "${BASH_SOURCE[0]}")" -../cron/nextcloud.sh - -cd ~/annex/ +pushd ~/annex/ git annex sync - -cd "$(dirname "${BASH_SOURCE[0]}")" -../cron/nextcloud.sh +popd -- cgit v1.2.3 From 85ff120d60afdc8ffe6ec2d07a196026c207be8f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 07:01:18 -0300 Subject: spacemacs.el: Enable paredit-mode in scheme-mode --- spacemacs.el | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index a5ee069..e007294 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -618,7 +618,8 @@ dump." clojurec-mode clojurescript-mode clojurex-mode - cider-clojure-interaction-mode)) + cider-clojure-interaction-mode + scheme-mode)) (defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) ("C-i" . evil-jump-forward) -- cgit v1.2.3 From 8efa2fda5350ad135577345959bf7f2d2a8b6d6d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 07:01:35 -0300 Subject: spacemacs.el: Change path to TODOs.txt file --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index e007294..b5892df 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -629,7 +629,7 @@ dump." ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))) ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) - ("M-]" . (lambda () (interactive) (find-file "~/Nextcloud/Notes/TODOs.txt"))) + ("M-]" . (lambda () (interactive) (find-file "~/Sync/TODOs.txt"))) ("M-s-q" . (lambda () (interactive) (insert "/"))) ("M-s-w" . (lambda () (interactive) (insert "?"))) ("M-s-a" . (lambda () (interactive) (insert "\\"))) -- cgit v1.2.3 From 8d226135304d274b69c5603492e721595fee218b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 11:51:33 -0300 Subject: common.nix: Run crons every 3 hours instead of 2 --- nixos/common.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 40c6cdf..0bd4e5d 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -5,10 +5,10 @@ let log-redirect name }"; daily-at-12h30min = "30 12 * * *"; - every-other-hour = "0 */2 * * *"; + every-x-hours = "0 */3 * * *"; crons = { - sync-mail = every-other-hour; - deliver-queued-mail = every-other-hour; + sync-mail = every-x-hours; + deliver-queued-mail = every-x-hours; annex-job = daily-at-12h30min; elfeed-job = daily-at-12h30min; -- cgit v1.2.3 From 36401c6cae0d76b8dc5ce34d55954a02b1126623 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 11:52:08 -0300 Subject: spacemacs.el: euandreh/notmuch-copy-git-am-command --- spacemacs.el | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index b5892df..53c211a 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -692,6 +692,14 @@ dump." (add-to-list 'minor-mode-overriding-map-alist new-ro-bind)) (goto-char (point-min)))) +(defun euandreh/notmuch-copy-git-am-command () + "View the the current message as a patch." + (interactive) + (let* ((id (notmuch-show-get-message-id)) + (cmd (format "notmuch show --format=raw %s | git am" id))) + (kill-new cmd) + (message cmd))) + ;; Taken from: ;; https://notmuchmail.org/pipermail/notmuch/2018/026414.html (defcustom euandreh/notmuch-attach-regex @@ -769,6 +777,7 @@ This function is called at the very end of Spacemacs initialization after layers This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." (require 'notmuch) (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) + (define-key 'notmuch-show-part-map "y" 'euandreh/notmuch-copy-git-am-command) (define-key 'notmuch-search-mode-map "e" 'euandreh/notmuch-extend-current-query-with-tag) (define-key 'notmuch-search-mode-map "E" 'euandreh/notmuch-extend-current-query) (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) @@ -778,9 +787,6 @@ This is the place where most of your configurations should be done. Unless it is (add-hook 'rst-mode-hook 'turn-on-auto-fill) (add-hook 'org-mode-hook 'turn-on-auto-fill) - (with-eval-after-load 'geiser-guile - (add-to-list 'geiser-guile-load-path "~/guix/guix")) - (eval-after-load 'clojure-mode '(set-custom-clj-indent)) (eval-after-load 'midje-mode '(set-custom-clj-indent)) (add-hook 'dante-mode-hook 'flycheck-mode) -- cgit v1.2.3 From 2220ce335a86134e08735d011d4886adcfd48132 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 11:52:22 -0300 Subject: configuration.nix: Add help2man --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dfe2f58..d6ea313 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -183,6 +183,7 @@ in { ranger electrum libressl + help2man gnome3.libgnome-keyring gnome3.gnome-keyring -- cgit v1.2.3 From 8ee05b91988db6b0867dbf0ceace7ff1898a4bdb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 11:52:32 -0300 Subject: global-gitignore: add tmp/ --- git/gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/gitignore b/git/gitignore index d682515..60fa782 100644 --- a/git/gitignore +++ b/git/gitignore @@ -3,4 +3,5 @@ req.http .postman-ns *.swp gemset.nix -.ignore \ No newline at end of file +.ignore +tmp/ \ No newline at end of file -- cgit v1.2.3 From 376b836ef17cd83333f43e2e604eff3c57b235bf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 11:52:44 -0300 Subject: gitconfig.ini: assume UTF-8 enconding when sending email --- git/gitconfig.ini | 2 ++ 1 file changed, 2 insertions(+) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index fba6c98..0b3a176 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -54,3 +54,5 @@ packSizeLimit = 2g [pull] rebase = false +[sendemail] + assume8bitEncoding = UTF-8 -- cgit v1.2.3 From f9de948fc136af85299b58750df7a482d602ef32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 11:53:09 -0300 Subject: fake-symlinks.sh: Stop copying assert-nixfmt.sh to vps repo --- bash/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a88912c..087959e 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -97,9 +97,10 @@ done PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/nix/utils-i18n.nix" +cp assert-nixfmt.sh "$HOME/dev/libre/website/scripts/" + for r in vps website; do mkdir -p "$HOME/dev/libre/$r/scripts/" - cp assert-nixfmt.sh "$HOME/dev/libre/$r/scripts/" cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/" done -- cgit v1.2.3 From 53c4333e2801d4adfa9f2c67c510947f33545d5f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 12:13:16 -0300 Subject: Move all gitconfig here, other the secrets --- bash/fake-symlinks.sh | 2 -- bash/symlinks.sh | 1 + git/gitconfig.ini | 8 ++++++++ 3 files changed, 9 insertions(+), 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 087959e..a8f3a0a 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,7 +1,5 @@ #!/usr/bin/env bash -cat "${DOTFILES}/git/gitconfig.ini" ~/annex/secret/Git/gitconfig.ini > ~/.gitconfig - mkdir -p ~/.tmuxinator for template in "${DOTFILES}"/tmux/projects/*; do diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 1c54d53..d7d5ae1 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -15,6 +15,7 @@ ln -fs "$DOTFILES/bash/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/bash/bash_profile.sh" ~/.bash_profile ln -fs "$DOTFILES/git/gitattributes" ~/.gitattributes ln -fs "$DOTFILES/git/gitignore" ~/.gitignore_global +ln -fs "$DOTFILES/git/gitconfig.ini" ~/.gitconfig ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap diff --git a/git/gitconfig.ini b/git/gitconfig.ini index 0b3a176..cbebff8 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -56,3 +56,11 @@ rebase = false [sendemail] assume8bitEncoding = UTF-8 + smtpuser = eu@euandre.org + smtpserver = box.euandre.org + smtpencryption = tls + smtpserverport = 587 + annotate = yes + confirm = never +[include] + path = ~/annex/secret/Git/gitconfig.ini \ No newline at end of file -- cgit v1.2.3 From d149bd7f37095f3a1236152d2491ae2377a09ff7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 12:13:31 -0300 Subject: env.sh: Add ~/annex/bin/cron to $PATH --- bash/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index 7bfb010..ec56393 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -3,7 +3,7 @@ export R='16686@ch-s010.rsync.net' export EDITOR=vi export INPUTRC=~/.inputrc -export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin:$DOTFILES/bin:${PATH}" +export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin/ad-hoc:$HOME/annex/bin/cron:$DOTFILES/bin:${PATH}" export BORG_REMOTE_PATH='borg1' # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 -- cgit v1.2.3 From 79765237e7e067130e8732d471752e854cf3860f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 13:24:39 -0300 Subject: fake-symlinks.sh: Generated job wrapper for private cronjobs --- bash/fake-symlinks.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a8f3a0a..fcd0529 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,4 +1,5 @@ #!/usr/bin/env bash +# shellcheck disable=2043 mkdir -p ~/.tmuxinator @@ -51,7 +52,6 @@ documented-project-fake-ln() { cp LICENSE "$HOME/dev/libre/$PROJECT/" cp base-packages.nix "$HOME/dev/libre/$PROJECT/nix/base-packages.nix" - # shellcheck disable=2043 for f in docs/index.rst; do if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then envsubst < "$f" > "$HOME/dev/libre/$PROJECT/$f" @@ -67,7 +67,6 @@ for r in songbooks mediator cement; do documented-project-fake-ln "$r" "${r^}" "$r" done -# shellcheck disable=2043 for r in byopds; do documented-project-fake-ln "$r" "$(echo "$r" | tr '[:lower:]' '[:upper:]')" "$r" done @@ -93,6 +92,13 @@ for job in annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-ar chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done +for job in pacheco; do + prefix="$HOME/annex/bin/ad-hoc" + sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" + chmod +x "$HOME/annex/bin/ad-hoc/${job}.sh" + chmod +x "$HOME/annex/bin/cron/${job}-job.sh" +done + PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/nix/utils-i18n.nix" cp assert-nixfmt.sh "$HOME/dev/libre/website/scripts/" -- cgit v1.2.3 From 95f963de81bf431fe2a69383c4278c5ddf4f2da9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 13:25:21 -0300 Subject: common.nix: Add pacheco cronjob --- nixos/common.nix | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 0bd4e5d..9e720a8 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -1,12 +1,13 @@ let log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; - cron-for-name = name: cron: - "${cron} andreh /home/andreh/dev/libre/dotfiles/scripts/cron/${name}.sh ${ - log-redirect name - }"; + cron-for-name = prefix: name: cron: + "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; + pub-cron-for-name = name: cron: + cron-for-name "/home/andreh/dev/libre/dotfiles/scripts/cron"; + priv-cron-for-name = name: cron: cron-for-name "/home/andreh/annex/cron"; daily-at-12h30min = "30 12 * * *"; every-x-hours = "0 */3 * * *"; - crons = { + pub-crons = { sync-mail = every-x-hours; deliver-queued-mail = every-x-hours; @@ -20,4 +21,8 @@ let nix-search-update-job = daily-at-12h30min; mr-remotes-backup-job = daily-at-12h30min; }; -in { crons = builtins.mapAttrs cron-for-name crons; } + priv-crons = { pacheco-job = "0 12 5 * *"; }; +in { + crons = builtins.mapAttrs pub-cron-for-name pub-crons + // builtins.mapAttrs priv-cron-for-name priv-crons; +} -- cgit v1.2.3 From c408b03acaba63ca01bdced17234dbabe96dcaf5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 13:25:41 -0300 Subject: fake-symlinks: Add utf-8 content-type to cronjob-with-email.sh --- bash/templates/cronjob-with-email.sh | 2 +- scripts/cron/annex-job.sh | 2 +- scripts/cron/backup-job.sh | 2 +- scripts/cron/copy-box-backups-job.sh | 2 +- scripts/cron/elfeed-job.sh | 2 +- scripts/cron/mbox-archive-job.sh | 2 +- scripts/cron/mr-remotes-backup-job.sh | 2 +- scripts/cron/nix-search-update-job.sh | 2 +- scripts/cron/notmuch-dump-job.sh | 2 +- scripts/cron/repo-update-job.sh | 2 +- 10 files changed, 10 insertions(+), 10 deletions(-) diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 0e3be29..379e60c 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 7aa04d5..4766498 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index ee02947..a037426 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/copy-box-backups-job.sh b/scripts/cron/copy-box-backups-job.sh index 1e39a2f..e6ff7ec 100755 --- a/scripts/cron/copy-box-backups-job.sh +++ b/scripts/cron/copy-box-backups-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/elfeed-job.sh b/scripts/cron/elfeed-job.sh index 29e675a..6716aa5 100755 --- a/scripts/cron/elfeed-job.sh +++ b/scripts/cron/elfeed-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index e5f590e..17a323f 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index 274fcac..da3fd78 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index eeaaa61..a55e225 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index 7ed316f..637358c 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 3742129..eb4d284 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -15,7 +15,7 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" eu@euandre.org + mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org echo 'Mail sent!' } trap finish EXIT -- cgit v1.2.3 From 9df0d186bd61b26f1c19df796f1f6426a06f1c47 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 13:34:39 -0300 Subject: fake-symlinks.sh: Add "From:" header when sending cron job report emails --- bash/templates/cronjob-with-email.sh | 5 ++++- scripts/cron/annex-job.sh | 5 ++++- scripts/cron/backup-job.sh | 5 ++++- scripts/cron/copy-box-backups-job.sh | 5 ++++- scripts/cron/elfeed-job.sh | 5 ++++- scripts/cron/mbox-archive-job.sh | 5 ++++- scripts/cron/mr-remotes-backup-job.sh | 5 ++++- scripts/cron/nix-search-update-job.sh | 5 ++++- scripts/cron/notmuch-dump-job.sh | 5 ++++- scripts/cron/repo-update-job.sh | 5 ++++- 10 files changed, 40 insertions(+), 10 deletions(-) diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 379e60c..ff170c3 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 4766498..4fef635 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index a037426..0b74e34 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/copy-box-backups-job.sh b/scripts/cron/copy-box-backups-job.sh index e6ff7ec..4147c4d 100755 --- a/scripts/cron/copy-box-backups-job.sh +++ b/scripts/cron/copy-box-backups-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/elfeed-job.sh b/scripts/cron/elfeed-job.sh index 6716aa5..7f913c1 100755 --- a/scripts/cron/elfeed-job.sh +++ b/scripts/cron/elfeed-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index 17a323f..8e18e56 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index da3fd78..c8e9c85 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index a55e225..4c05472 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index 637358c..7f66426 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index eb4d284..2351b75 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -15,7 +15,10 @@ finish() { SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail -s "$SUBJECT" --content-type 'text/plain; charset=utf-8' eu@euandre.org + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' echo 'Mail sent!' } trap finish EXIT -- cgit v1.2.3 From 666e64b8cf5986389e519d03fde9f6c9690777f4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 14:04:06 -0300 Subject: backup.sh: Add ~/BigSync/ --- scripts/ad-hoc/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 9592b61..e73478e 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -23,6 +23,7 @@ borg create \ --compression lzma,6 \ "$R:desktop-borg::{hostname}-{now}-${BACKUP_TAG}" \ ~/Sync/ \ + ~/BigSync/ \ ~/mbsync/ \ ~/archive/ \ ~/.mozilla/ \ -- cgit v1.2.3 From a9cd01c4fd6f63764d3dbc11f7a7a28f058034d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 18 Nov 2020 18:02:20 -0300 Subject: spacemacs.el: Update generated content --- spacemacs.el | 19 ++++++++++++++++++- 1 file changed, 18 insertions(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index 53c211a..fa3b34f 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -1005,7 +1005,24 @@ This function is called at the very end of Spacemacs initialization." '(package-selected-packages '(po-mode lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) '(safe-local-variable-values - '((eval let* + '((eval let + ((root-dir-unexpanded + (locate-dominating-file default-directory ".dir-locals.el"))) + (when root-dir-unexpanded + (let* + ((root-dir + (expand-file-name root-dir-unexpanded)) + (root-dir* + (directory-file-name root-dir))) + (unless + (boundp 'geiser-guile-load-path) + (defvar geiser-guile-load-path 'nil)) + (make-local-variable 'geiser-guile-load-path) + (require 'cl-lib) + (cl-pushnew root-dir* geiser-guile-load-path :test #'string-equal)))) + (eval setq-local guix-directory + (locate-dominating-file default-directory ".dir-locals.el")) + (eval let* ((root-dir (expand-file-name (locate-dominating-file default-directory ".dir-locals.el"))) -- cgit v1.2.3 From 8052f75795718b1b1065968122eb5ea0c1f6ac15 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:43:21 -0300 Subject: xsession.sh: Mark as executable --- xmonad/xsession.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 xmonad/xsession.sh diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 2aa00e510f04da4cce0967b5a5639fa373c7314f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:44:04 -0300 Subject: guix.scm: Add some packages --- guix.scm | 13 ++++++++----- 1 file changed, 8 insertions(+), 5 deletions(-) diff --git a/guix.scm b/guix.scm index 79b70d8..676dee5 100644 --- a/guix.scm +++ b/guix.scm @@ -27,21 +27,23 @@ (list (specification->package (first spec-pair)) (second spec-pair))))) '("nss-certs" ;; suggested by Guix - "help2man" ;; used in Guix development + "help2man" ;; used in Guix development "strace" + "curl" "wget" "xclip" "autojump" "git" "git:send-email" + "git-lfs" "rlwrap" "myrepos" "borg" "bash-completion" "vlc" "youtube-dl" - "sox" + "sox" ;; play "jq" "calibre" "notmuch" @@ -67,8 +69,8 @@ "nvi" "tmux" "direnv" - "pinentry-gnome3" - "pinentry" + "pinentry-tty" + ;; "pinentry" "keepassxc" "recutils" "owncloud-client" @@ -82,7 +84,8 @@ "gcc-toolchain" "glibc" "xmobar" - "dmenu")) + "dmenu" + "yeganesh")) %base-packages)) (services (append -- cgit v1.2.3 From 983ec2852ddcb50c5fec599f2a3a14671205829c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:44:48 -0300 Subject: env.sh: Remove $GUIX_LOCPATH --- bash/env.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index ec56393..b783d94 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -9,7 +9,6 @@ export BORG_REMOTE_PATH='borg1' # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" GUIX_PROFILE="/home/andreh/.config/guix/current" # shellcheck disable=1090 . "$GUIX_PROFILE/etc/profile" -- cgit v1.2.3 From bde2bf476e35ed6b947a691e7738edd096e1b299 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:49:06 -0300 Subject: env.sh: Remove $GUIX_PROFILE and add .config/guix/current/bin to $PATH --- bash/env.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index b783d94..045a364 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -3,12 +3,8 @@ export R='16686@ch-s010.rsync.net' export EDITOR=vi export INPUTRC=~/.inputrc -export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin/ad-hoc:$HOME/annex/bin/cron:$DOTFILES/bin:${PATH}" +export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin/ad-hoc:$HOME/annex/bin/cron:$DOTFILES/bin:${PATH}:$HOME/.config/guix/current/bin" export BORG_REMOTE_PATH='borg1' # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 - -GUIX_PROFILE="/home/andreh/.config/guix/current" -# shellcheck disable=1090 -. "$GUIX_PROFILE/etc/profile" -- cgit v1.2.3 From 6b8e6f28bee1bda4a5bbdbbb74824343b521f978 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:49:28 -0300 Subject: Remove scripts/ad-hoc/guix --- scripts/ad-hoc/guix | 1 - 1 file changed, 1 deletion(-) delete mode 120000 scripts/ad-hoc/guix diff --git a/scripts/ad-hoc/guix b/scripts/ad-hoc/guix deleted file mode 120000 index 65b4074..0000000 --- a/scripts/ad-hoc/guix +++ /dev/null @@ -1 +0,0 @@ -/var/guix/profiles/per-user/root/current-guix/bin/guix \ No newline at end of file -- cgit v1.2.3 From 5fc3a225b2dc8b950d46d843495a3fbc816476ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:49:57 -0300 Subject: backup.sh: Ignore $1 argument backup name --- scripts/ad-hoc/backup.sh | 36 ++++++++++++++++++------------------ 1 file changed, 18 insertions(+), 18 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index e73478e..2c75db2 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -2,7 +2,7 @@ set -Eeuo pipefail cd "$(dirname "${BASH_SOURCE[0]}")" -BACKUP_TAG="${1-cron}" +set -x # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null @@ -12,24 +12,24 @@ R='16686@ch-s010.rsync.net' export BORG_REMOTE_PATH='borg1' # env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' -# borg init -e repokey-blake2 --append-only $R:desktop-borg/ +# borg init -e repokey-blake2 $R:desktop-borg -borg create \ - --exclude ~/mbsync/.notmuch/ \ - --exclude ~/gPodder/Downloads \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - "$R:desktop-borg::{hostname}-{now}-${BACKUP_TAG}" \ - ~/Sync/ \ - ~/BigSync/ \ - ~/mbsync/ \ - ~/archive/ \ - ~/.mozilla/ \ - ~/.config/quodlibet/ \ - ~/gPodder/ \ - ~/dev/libre/website/ \ +borg create \ + --exclude ~/mbsync/.notmuch/ \ + --exclude ~/gPodder/Downloads \ + --verbose \ + --stats \ + --progress \ + --compression lzma,6 \ + "$R:desktop-borg::{hostname}-{now}-job" \ + ~/Sync/ \ + ~/BigSync/ \ + ~/mbsync/ \ + ~/archive/ \ + ~/.mozilla/ \ + ~/.config/quodlibet/ \ + ~/gPodder/ \ + ~/dev/libre/website/ \ ~/.elfeed/ # add folders to be backed up here -- cgit v1.2.3 From b08ee930ebcac059dc5e339c23f340d6a2e0fc1a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:50:18 -0300 Subject: backup.sh: Don't prune backups for now --- scripts/ad-hoc/backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 2c75db2..8fbb0d5 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -33,7 +33,7 @@ borg create \ ~/.elfeed/ # add folders to be backed up here -borg prune --keep-last 10 --verbose "$R:desktop-borg" +# borg prune --keep-last 60 --verbose "$R:desktop-borg" cd ~/dev/libre/others/borg/ git add . -- cgit v1.2.3 From 241f6b2750fbdb381e12300dc5fd539ef0f3743c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:51:12 -0300 Subject: symlinks.sh: Stop making desktop symlinks --- bash/symlinks.sh | 5 ----- 1 file changed, 5 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index d7d5ae1..5e42aeb 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -35,11 +35,6 @@ ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf -## NixOS -ln -fs "${DOTFILES}/nixos/evince.desktop" ~/.local/share/applications/evince.desktop -ln -fs "${DOTFILES}/nixos/firefox.desktop" ~/.local/share/applications/firefox.desktop -ln -fs "${DOTFILES}/nixos/nautilus.desktop" ~/.local/share/applications/nautilus.desktop - ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs -- cgit v1.2.3 From 32841870f986dabc145b6d92e70006bd6be820bd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 15:58:52 -0300 Subject: guix.scm: Remove initial generated comment --- guix.scm | 3 --- 1 file changed, 3 deletions(-) diff --git a/guix.scm b/guix.scm index 676dee5..0dae7b8 100644 --- a/guix.scm +++ b/guix.scm @@ -1,6 +1,3 @@ -;; This is an operating system configuration generated -;; by the graphical installer. - (use-modules (gnu) (srfi srfi-1)) (use-service-modules desktop networking ssh xorg nix) -- cgit v1.2.3 From 9016c78fd2b29df32fc7e8c1cfb2f3e9240c2c58 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 20:17:48 -0300 Subject: symlinks.sh: Remove gnus.el symlink --- bash/symlinks.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 5e42aeb..7b743de 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -38,7 +38,6 @@ ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs -ln -fs "$DOTFILES/emacs/gnus.el" ~/.gnus.el ## xmonad mkdir -p ~/.xmonad -- cgit v1.2.3 From 81dda423b3d1aad76c65438375efa445e0968097 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:39:37 -0300 Subject: common.nix: Remove intermediate functions --- nixos/common.nix | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 9e720a8..e995db4 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -2,9 +2,6 @@ let log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; cron-for-name = prefix: name: cron: "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; - pub-cron-for-name = name: cron: - cron-for-name "/home/andreh/dev/libre/dotfiles/scripts/cron"; - priv-cron-for-name = name: cron: cron-for-name "/home/andreh/annex/cron"; daily-at-12h30min = "30 12 * * *"; every-x-hours = "0 */3 * * *"; pub-crons = { @@ -23,6 +20,6 @@ let }; priv-crons = { pacheco-job = "0 12 5 * *"; }; in { - crons = builtins.mapAttrs pub-cron-for-name pub-crons - // builtins.mapAttrs priv-cron-for-name priv-crons; + crons = builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/scripts/cron") pub-crons + // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; } -- cgit v1.2.3 From 4f1e076e7466186453a27a9711b1c8db44a799db Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:40:21 -0300 Subject: xmonad.hs: Use st over gnome-terminal --- nixos/configuration.nix | 1 + xmonad/xmonad.hs | 2 +- 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d6ea313..affeb15 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -187,6 +187,7 @@ in { gnome3.libgnome-keyring gnome3.gnome-keyring + st ## Mail diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 7f313b8..972ba3e 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -24,7 +24,7 @@ main = do } `additionalKeysP` myKeyPBindings myTerminal :: String -myTerminal = "gnome-terminal" +myTerminal = "st" dbg :: String dbg = "xmessage 'xmonad EuAndreh debug'" -- cgit v1.2.3 From 80bc750e7792d3608040572cebe1f029b4071088 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:41:23 -0300 Subject: hd.sh: rsync with delete from rsync.net --- scripts/ad-hoc/hd.sh | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index 8ed9113..cf70281 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -1,14 +1,13 @@ #!/usr/bin/env bash set -Eeuo pipefail +set -x -cd "$(dirname "${BASH_SOURCE[0]}")" -../cron/annex.sh +annex.sh cd ~/dev/ mr -s hd -rsync -avzP "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ -rsync -avzP "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ -rsync -avzP euandre.org:/home/user-data/backup/encrypted/ ~/UTCLOUD/backups/box-duplicity/ -rsync -avzP ~/UTCLOUD/backups/box-duplicity/ "$R:box-duplicity/" -aws s3 sync ~/UTCLOUD/backups/ s3://euandreh-backups/ + +rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ +rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ +rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ archive-box.sh -- cgit v1.2.3 From 663bb0caee2554ec80c6efff5719dcd9ee6b3ccc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:41:50 -0300 Subject: archive-box.sh: init before if dir doesn't exist --- scripts/ad-hoc/archive-box.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/ad-hoc/archive-box.sh b/scripts/ad-hoc/archive-box.sh index 05b5856..562193b 100755 --- a/scripts/ad-hoc/archive-box.sh +++ b/scripts/ad-hoc/archive-box.sh @@ -34,8 +34,10 @@ EOF TMPDB="$(mktemp)" cp ~/.mozilla/firefox/*.default/places.sqlite "$TMPDB" +mkdir -p "$HOME/UTCLOUD/archive-box/" cd "$HOME/UTCLOUD/archive-box/" # I gave up on proper packaging for now, I'll stick with Docker # while I regain energy and try again later +docker run -v "$PWD:/data" -ti nikisweeting/archivebox init sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i nikisweeting/archivebox add -- cgit v1.2.3 From 44cff3906f17843c704381d43715c975beebb1be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:43:52 -0300 Subject: xsession.sh: Remove shebang line --- xmonad/xsession.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh index 542994f..b25a9a1 100755 --- a/xmonad/xsession.sh +++ b/xmonad/xsession.sh @@ -1,3 +1 @@ -#!/usr/bin/env bash - xmonad -- cgit v1.2.3 From c35ce18a85e6d257e83646e6e435e7f176daec56 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:44:13 -0300 Subject: guix.scm: Re-order packages --- guix.scm | 26 +++++++++++++++----------- 1 file changed, 15 insertions(+), 11 deletions(-) diff --git a/guix.scm b/guix.scm index 0dae7b8..1a94972 100644 --- a/guix.scm +++ b/guix.scm @@ -1,6 +1,6 @@ (use-modules (gnu) (srfi srfi-1)) -(use-service-modules desktop networking ssh xorg nix) +(use-service-modules desktop networking ssh xorg) (operating-system (locale "en_US.utf8") @@ -31,11 +31,16 @@ "wget" "xclip" "autojump" + "git" "git:send-email" "git-lfs" - "rlwrap" + "git-annex" "myrepos" + "git-remote-gcrypt" + "git-crypt" + + "rlwrap" "borg" "bash-completion" "vlc" @@ -46,19 +51,15 @@ "notmuch" "isync" "xset" - "bluez" + "blueman" + ;; "bluez" "playerctl" "xmessage" "alsa-utils" "icecat" - "git-remote-gcrypt" - "git-crypt" "the-silver-searcher" "fd" "ranger" - "seahorse" - "nautilus" - "git-annex" "emacs" "gettext" "openssh" @@ -70,12 +71,15 @@ ;; "pinentry" "keepassxc" "recutils" - "owncloud-client" - "xterm" + ;;; "xterm" + "st" "htop" + ;; X -> wayland + + ;; xmonad - "xmonad" + ;; "xmonad" "ghc" "ghc-xmonad-contrib" "gcc-toolchain" -- cgit v1.2.3 From 51b8b106e0344f4c0a09b1098650109a2d64aded Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:45:01 -0300 Subject: nixfmt ./nixos/common.nix --- nixos/common.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index e995db4..7324080 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -20,6 +20,7 @@ let }; priv-crons = { pacheco-job = "0 12 5 * *"; }; in { - crons = builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/scripts/cron") pub-crons + crons = builtins.mapAttrs + (cron-for-name "/home/andreh/dev/libre/dotfiles/scripts/cron") pub-crons // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; } -- cgit v1.2.3 From 5643f8665f57addd588dc6486db5a0b38eb873d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 21:51:21 -0300 Subject: guix.scm: Indent code --- guix.scm | 144 +++++++++++++++++++++++++++++++-------------------------------- 1 file changed, 72 insertions(+), 72 deletions(-) diff --git a/guix.scm b/guix.scm index 1a94972..671cc3f 100644 --- a/guix.scm +++ b/guix.scm @@ -8,86 +8,86 @@ (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape"))) (host-name "velhinho-guix-system") (users (cons* (user-account - (name "andreh") - (comment "andreh") - (group "users") - (home-directory "/home/andreh") - (supplementary-groups - '("wheel" "netdev" "audio" "video"))) + (name "andreh") + (comment "andreh") + (group "users") + (home-directory "/home/andreh") + (supplementary-groups + '("wheel" "netdev" "audio" "video"))) %base-user-accounts)) (packages - (append - (map (lambda (spec) - (if (not (string-contains spec ":")) - (specification->package spec) - (let ((spec-pair (string-split spec #\:))) - (list (specification->package (first spec-pair)) - (second spec-pair))))) - '("nss-certs" ;; suggested by Guix - "help2man" ;; used in Guix development - "strace" + (append + (map (lambda (spec) + (if (not (string-contains spec ":")) + (specification->package spec) + (let ((spec-pair (string-split spec #\:))) + (list (specification->package (first spec-pair)) + (second spec-pair))))) + '("nss-certs" ;; suggested by Guix + "help2man" ;; used in Guix development + "strace" - "curl" - "wget" - "xclip" - "autojump" + "curl" + "wget" + "xclip" + "autojump" - "git" - "git:send-email" - "git-lfs" - "git-annex" - "myrepos" - "git-remote-gcrypt" - "git-crypt" + "git" + "git:send-email" + "git-lfs" + "git-annex" + "myrepos" + "git-remote-gcrypt" + "git-crypt" - "rlwrap" - "borg" - "bash-completion" - "vlc" - "youtube-dl" - "sox" ;; play - "jq" - "calibre" - "notmuch" - "isync" - "xset" - "blueman" - ;; "bluez" - "playerctl" - "xmessage" - "alsa-utils" - "icecat" - "the-silver-searcher" - "fd" - "ranger" - "emacs" - "gettext" - "openssh" - "gnupg" - "nvi" - "tmux" - "direnv" - "pinentry-tty" - ;; "pinentry" - "keepassxc" - "recutils" - ;;; "xterm" - "st" - "htop" + "rlwrap" + "borg" + "bash-completion" + "vlc" + "youtube-dl" + "sox" ;; play + "jq" + "calibre" + "notmuch" + "isync" + "xset" + "blueman" + ;; "bluez" + "playerctl" + "xmessage" + "alsa-utils" + "icecat" + "the-silver-searcher" + "fd" + "ranger" + "emacs" + "gettext" + "openssh" + "gnupg" + "nvi" + "tmux" + "direnv" + "pinentry-tty" + ;; "pinentry" + "keepassxc" + "recutils" +;;; "xterm" + "st" + "htop" - ;; X -> wayland + ;; X -> wayland - ;; xmonad - ;; "xmonad" - "ghc" - "ghc-xmonad-contrib" - "gcc-toolchain" - "glibc" - "xmobar" - "dmenu" - "yeganesh")) - %base-packages)) + ;; xmonad + ;; "xmonad" + "ghc" + "ghc-xmonad-contrib" + "gcc-toolchain" + "glibc" + "xmobar" + "dmenu" + "yeganesh")) + %base-packages)) (services (append (list (service gnome-desktop-service-type) -- cgit v1.2.3 From 79f18219388f81ab5e0b548286bd3cd10dd1f6dd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 19 Nov 2020 22:41:20 -0300 Subject: Remove nixos/*.desktop files --- nixos/evince.desktop | 7 ------- nixos/firefox.desktop | 7 ------- nixos/nautilus.desktop | 8 -------- 3 files changed, 22 deletions(-) delete mode 100644 nixos/evince.desktop delete mode 100644 nixos/firefox.desktop delete mode 100644 nixos/nautilus.desktop diff --git a/nixos/evince.desktop b/nixos/evince.desktop deleted file mode 100644 index 74db13a..0000000 --- a/nixos/evince.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Type=Application -Name=evince -Comment=Evince PDF viewer -Terminal=false -Exec=evince -Categories=Network;WebBrowser diff --git a/nixos/firefox.desktop b/nixos/firefox.desktop deleted file mode 100644 index cc59647..0000000 --- a/nixos/firefox.desktop +++ /dev/null @@ -1,7 +0,0 @@ -[Desktop Entry] -Type=Application -Name=firefox -Comment=Firefox browser -Terminal=false -Exec=firefox -Categories=WebBrowser \ No newline at end of file diff --git a/nixos/nautilus.desktop b/nixos/nautilus.desktop deleted file mode 100644 index 5b1e7e2..0000000 --- a/nixos/nautilus.desktop +++ /dev/null @@ -1,8 +0,0 @@ -[Desktop Entry] -Type=Application -Name=nautilus -Comment=Evince PDF viewer -Terminal=false -Exec=nautilus -MimeType=inode/directory -Categories=GTK;GNOME;System;Filesystem -- cgit v1.2.3 From 8609c1c9708380525fa2f12d828feda3ebbb1865 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 20 Nov 2020 00:08:28 -0300 Subject: hd.sh: Run "mr hd" in 4 threads --- scripts/ad-hoc/hd.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index cf70281..e605d2c 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -5,7 +5,7 @@ set -x annex.sh cd ~/dev/ -mr -s hd +mr -s -j4 hd rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ -- cgit v1.2.3 From 8e064c6a8b395b5aaf444755a63c9750d6925750 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 20 Nov 2020 00:10:20 -0300 Subject: hd.sh: Run "mr hd" last --- scripts/ad-hoc/hd.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index e605d2c..9ca105d 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -4,10 +4,10 @@ set -x annex.sh -cd ~/dev/ -mr -s -j4 hd - rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ archive-box.sh + +cd ~/dev/ +mr -s -j4 hd -- cgit v1.2.3 From b89683093edad7fb30a55c638bf5bf2fe3395ae0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 20 Nov 2020 15:54:12 -0300 Subject: ps1.sh: Rewrite and simplify --- bash/colors.sh | 13 +++++ bash/ps1.sh | 170 +++++++++++++++++++++------------------------------------ 2 files changed, 74 insertions(+), 109 deletions(-) diff --git a/bash/colors.sh b/bash/colors.sh index ce21da0..8ec71b5 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -18,6 +18,9 @@ export purple="\033[0;35m" export purpleb="\033[1;35m" export lightblue="\033[0;36m" export lightblueb="\033[1;36m" +export blacki="\033[0;90m" +export bluei="\033[0;94m" + function black { echo -e "${black}${1}${end}" @@ -29,6 +32,11 @@ function blackb { } export -f blackb +function blacki { + echo -e "${blacki}${1}${end}" +} +export -f blacki + function white { echo -e "${white}${1}${end}" } @@ -79,6 +87,11 @@ function blueb { } export -f blueb +function bluei { + echo -e "${bluei}${1}${end}" +} +export -f bluei + function purple { echo -e "${purple}${1}${end}" } diff --git a/bash/ps1.sh b/bash/ps1.sh index 4f73584..01bd72f 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -1,111 +1,63 @@ #!/usr/bin/env bash -# shellcheck disable=1117 disable=1004 disable=2034 disable=2154 -# Customize BASH PS1 prompt to show current GIT repository and branch. -# by Mike Stewart - http://MediaDoneRight.com - -# SETUP CONSTANTS -# Bunch-o-predefined colors. Makes reading code easier than escape sequences. -# I don't remember where I found this. o_O - -# Reset -Color_Off="\[\033[0m\]" # Text Reset - -# Regular Colors -Black="\[\033[0;30m\]" # Black -Red="\[\033[0;31m\]" # Red -Green="\[\033[0;32m\]" # Green -Yellow="\[\033[0;33m\]" # Yellow -Blue="\[\033[0;34m\]" # Blue -Purple="\[\033[0;35m\]" # Purple -Cyan="\[\033[0;36m\]" # Cyan -White="\[\033[0;37m\]" # White - -# Bold -BBlack="\[\033[1;30m\]" # Black -BRed="\[\033[1;31m\]" # Red -BGreen="\[\033[1;32m\]" # Green -BYellow="\[\033[1;33m\]" # Yellow -BBlue="\[\033[1;34m\]" # Blue -BPurple="\[\033[1;35m\]" # Purple -BCyan="\[\033[1;36m\]" # Cyan -BWhite="\[\033[1;37m\]" # White - -# Underline -UBlack="\[\033[4;30m\]" # Black -URed="\[\033[4;31m\]" # Red -UGreen="\[\033[4;32m\]" # Green -UYellow="\[\033[4;33m\]" # Yellow -UBlue="\[\033[4;34m\]" # Blue -UPurple="\[\033[4;35m\]" # Purple -UCyan="\[\033[4;36m\]" # Cyan -UWhite="\[\033[4;37m\]" # White - -# Background -On_Black="\[\033[40m\]" # Black -On_Red="\[\033[41m\]" # Red -On_Green="\[\033[42m\]" # Green -On_Yellow="\[\033[43m\]" # Yellow -On_Blue="\[\033[44m\]" # Blue -On_Purple="\[\033[45m\]" # Purple -On_Cyan="\[\033[46m\]" # Cyan -On_White="\[\033[47m\]" # White - -# High Intensty -IBlack="\[\033[0;90m\]" # Black -IRed="\[\033[0;91m\]" # Red -IGreen="\[\033[0;92m\]" # Green -IYellow="\[\033[0;93m\]" # Yellow -IBlue="\[\033[0;94m\]" # Blue -IPurple="\[\033[0;95m\]" # Purple -ICyan="\[\033[0;96m\]" # Cyan -IWhite="\[\033[0;97m\]" # White - -# Bold High Intensty -BIBlack="\[\033[1;90m\]" # Black -BIRed="\[\033[1;91m\]" # Red -BIGreen="\[\033[1;92m\]" # Green -BIYellow="\[\033[1;93m\]" # Yellow -BIBlue="\[\033[1;94m\]" # Blue -BIPurple="\[\033[1;95m\]" # Purple -BICyan="\[\033[1;96m\]" # Cyan -BIWhite="\[\033[1;97m\]" # White - -# High Intensty backgrounds -On_IBlack="\[\033[0;100m\]" # Black -On_IRed="\[\033[0;101m\]" # Red -On_IGreen="\[\033[0;102m\]" # Green -On_IYellow="\[\033[0;103m\]" # Yellow -On_IBlue="\[\033[0;104m\]" # Blue -On_IPurple="\[\033[10;95m\]" # Purple -On_ICyan="\[\033[0;106m\]" # Cyan -On_IWhite="\[\033[0;107m\]" # White - -# Various variables you might want for your PS1 prompt instead -Time12h="\T" -Time12a="\@" -PathShort="\w" -PathFull="\W" -NewLine="\n" -Jobs="\j" - - -# This PS1 snippet was adopted from code for MAC/BSD I saw from: http://allancraig.net/index.php?option=com_content&view=article&id=108:ps1-export-command-for-git&catid=45:general&Itemid=96 -# I tweaked it to work on UBUNTU 11.04 & 11.10 plus made it mo' better - -export PS1='$(if [ $? != 0 ]; then \ - echo "'$BIRed' (!!) '$Color_Off'"; \ -fi)'$IBlack$Time12h$Color_Off' '$BYellow$PathShort/$Color_Off'\ -$(git branch &>/dev/null;\ -if [ $? -eq 0 ]; then \ - echo "$(\ - echo `git status` | grep "Modifications" > /dev/null 2>&1 && echo "'$IRed'"$(__git_ps1 " {%s}")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [^%s^]")"'$Color_Off'"; \ - echo `git status` | grep -v "Changes" | grep -E "Votre branche est en retard" > /dev/null 2>&1 && echo "'$IBlue'"$(__git_ps1 " [v%sv]")"'$Color_Off'"; \ - echo `git status` | grep -v "Modifications" | grep -E -v "Votre branche est en retard|Votre branche est en avance sur" > /dev/null 2>&1 && echo "'$Green'"$(__git_ps1 " (%s)")"'$Color_Off'"; \ - )" - $(echo "'$IBlack'"`git sha7`"'$Color_Off'"); \ -fi)$(if [[ ${IN_NIX_SHELL:-} != "" ]]; then\ - echo "\n'$IBlack'~>'$Color_Off' '$BIPurple''$IN_NIX_SHELL''$Purple' nix-shell'$Color_Off' ('$BIBlue'$name'$Color_Off')'$Color_Off'" ;\ -fi)$(if [[ ${GUIX_ENVIRONMENT:-} != "" ]]; then\ - echo "\n'$IBlack'~>'$Color_Off' '$Purple'guix environment'$Color_Off' ('$BIBlue'$GUIX_ENVIRONMENT'$Color_Off')'$Color_Off'" ;\ -fi)$(echo "\n'$BIPurple'\$'$Color_Off' ";)' +error-marker() { + if [ $? != 0 ]; then + redb ' (!!) ' | tr -d '\n' + fi +} + +timestamp() { + blacki '\T' | tr -d '\n' +} + +path() { + yellowb '\w/' | tr -d '\n' +} + +repo-status() { + branch="$(git branch --format='%(refname:short)' 2> /dev/null)" + if [ "$branch" != '' ]; then + OUT="$(env LANG=en_US.UTF-8 git status)" + if ! git diff --quiet &> /dev/null || ! git diff --staged --quiet &> /dev/null; then + redb "{$branch}" | tr -d '\n' + elif grep 'to publish your local commits' <(echo "$OUT") > /dev/null; then + bluei "[^${branch}^]" | tr -d '\n' + elif grep 'to update your local branch' <(echo "$OUT") > /dev/null; then + bluei "[v${branch}v]" | tr -d '\n' + else + green "(${branch})" | tr -d '\n' + fi + printf ' - ' + blacki "$(git rev-parse HEAD | head -c 7)" | tr -d '\n' + fi +} + +guix-env() { + if [ "$GUIX_ENVIRONMENT" != '' ]; then + printf '\n' + blacki '~> ' | tr -d '\n' + purple 'guix environment ' | tr -d '\n' + printf '(' + blueb "$GUIX_ENVIRONMENT" | tr -d '\n' + printf ')' + fi +} + +in-nix-shell() { + if [ "$IN_NIX_SHELL" != '' ]; then + printf '\n' + blacki '~> ' | tr -d '\n' + purpleb "$IN_NIX_SHELL " | tr -d '\n' + purple 'nix-shell ' | tr -d '\n' + printf '(' + blueb "$name" | tr -d '\n' + printf ')' + fi +} + +prompt() { + purpleb ' +$ ' +} + +export PS1='`error-marker`'$(timestamp)' '$(path)' `repo-status``guix-env``in-nix-shell`'$(prompt) -- cgit v1.2.3 From b6467f3017098ae4ea12a619c6651f022af34d8c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 20 Nov 2020 16:16:29 -0300 Subject: agents.sh: Remove gpg debug.gpg --- bash/agents.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/bash/agents.sh b/bash/agents.sh index e23d6e5..4428163 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -22,6 +22,4 @@ start_agent() { } } || start_agent -gpg -q -d "$DOTFILES/bash/debug.gpg" - eval "$(direnv hook bash)" -- cgit v1.2.3 From 919da13c4eb516c1f26eef4c46860863159871eb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 21 Nov 2020 19:00:27 -0300 Subject: ps1.sh: Print only current branch --- bash/ps1.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 01bd72f..2593e05 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -15,7 +15,7 @@ path() { } repo-status() { - branch="$(git branch --format='%(refname:short)' 2> /dev/null)" + branch="$(git branch --show-current 2> /dev/null)" if [ "$branch" != '' ]; then OUT="$(env LANG=en_US.UTF-8 git status)" if ! git diff --quiet &> /dev/null || ! git diff --staged --quiet &> /dev/null; then -- cgit v1.2.3 From 7d06f2b0b028e1216980140289bc9af9c0a78118 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 21 Nov 2020 19:01:57 -0300 Subject: Remove gnome-control-center alias and use pavucontrol instead --- bash/aliases.sh | 1 - nixos/configuration.nix | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index cb78b16..3c42eae 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -17,7 +17,6 @@ alias m="sync-mail.sh --fast" alias sqlite="rlwrap sqlite3" alias p='ping euandre.org -c 3' alias c='tmux send-keys -R \; clear-history' -alias gnome-control-center="XDG_CURRENT_DESKTOP=GNOME gnome-control-center" alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator start" diff --git a/nixos/configuration.nix b/nixos/configuration.nix index affeb15..2a82892 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -188,6 +188,7 @@ in { gnome3.libgnome-keyring gnome3.gnome-keyring st + pavucontrol ## Mail -- cgit v1.2.3 From 3d8f229137a1394148a7445384072614256bc0cf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 16:29:40 -0300 Subject: configuration.nix: Add alternative smaller packages for day-to-day --- nixos/configuration.nix | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2a82892..ed5a32b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -189,6 +189,10 @@ in { gnome3.gnome-keyring st pavucontrol + qutebrowser + weechat + aerc + newsboat ## Mail -- cgit v1.2.3 From 4b5194c3b7f7a6eb633cfa69ad78fdd66481922e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 16:44:50 -0300 Subject: TODOs.org: Remove old things --- TODOs.org | 252 -------------------------------------------------------------- 1 file changed, 252 deletions(-) diff --git a/TODOs.org b/TODOs.org index 126d960..b3cc034 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,79 +1,8 @@ * Tasks -** Emacs on Nix -https://github.com/abcdw/rde/tree/master/src/modules/emacs -** TODO Remove =org-time-add= definition froom spacemacs.el -** TODO Reproducible setup -*** TODO Add =cachix use=s to configuration.nix: -: substituters = https://cache.nixos.org/ https://miso-haskell.cachix.org https://all-hies.cachix.org -** DOING Simplify the installation of NixOS -*** DONE Preparation phase -CLOSED: [2019-05-30 Thu 20:17] -Create =burn-nixos.sh= with something like: -#+BEGIN_SOURCE shell -NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-graphical-19.03.172764.50d5d73e22b-x86_64-linux.iso' -burn-nixos.sh "$NIXOS_URL" /dev/sdb -#+END_SOURCE -*** DONE Installation phase -CLOSED: [2019-06-02 Sun 02:26] -**** DONE Choose proper tool -CLOSED: [2019-05-31 Fri 21:40] -=fdisk=? =gdisk=? =gparted=? Why? Why not? - -=parted= allows for CLI based interactions instead of interactive only. It also supports GPT partitions, and is a GNU project :) -**** DONE Make disk partitioning declarative -CLOSED: [2019-05-31 Fri 21:40] -Not really declarative, but scripted instead. -**** DONE Always use UEFI and GPT (which I think is better) -CLOSED: [2019-05-31 Fri 21:40] -**** DONE Parameterize the disk to be partitioned -CLOSED: [2019-05-31 Fri 21:41] -So I can give the installation script an argument and reuse later on the program. Something like: -#+BEGIN_SOURCE shell -$ wget -qO- https://euandre.org/install-nixos.sh | sh -s /dev/sda -#+END_SOURCE -**** DONE Publish =install-nixos.sh= in CI run -CLOSED: [2019-05-30 Thu 23:42] -Add =publishScript= derivation and run it in builds.sr.ht. -**** DONE Partition, format and encrypt -CLOSED: [2019-06-02 Sun 01:54] -**** DONE Properly document (in README?) how to connect to the internet -CLOSED: [2019-06-01 Sat 22:05] -#+BEGIN_SOURCE bash -wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) -curl https://euandre.org/dotfiles/nixos/install.sh > install.sh -chmod +x ./install.sh -./install.sh -#+END_SOURCE -*** DOING Setup phase -**** DOING Fix =enabling= of Git Annex remotes -**** TODO Install Guix -**** TODO Symlink Bash -: sudo ln -s /bin/sh /bin/bash -**** TODO Configure Git Annex -*** DONE Document the discrete three step phases -CLOSED: [2019-06-01 Sat 22:04] -Put all of this on the README for future easy access. -**** Steps -1. Preparing the USB stick; -2. Performing a fresh install; -3. Bootstraping the new installation's configuration and data. ** DOING Workflow improvement *** TODO Guix **** TODO Create =burn.sh=, =install.sh= and =setup.sh= Guix installation scripts **** TODO https://framagit.org/tyreunom/guix-home-manager -**** TODO Put Btrfs on Guix -**** DONE Consider using Btrfs? Why? Why not? -CLOSED: [2019-06-02 Sun 15:04] -Guix already has initial support for it, and ZFS is incompatible with GPL :shrug: - -Test installing it on =velhinho=. -**** DONE Is there a Hydra equivalent for Guix? Add it to the VPS? -CLOSED: [2019-06-02 Sun 02:43] -Cuirass! Yes! -*** TODO cmus -**** TODO Fetch metadata from [[https://musicbrainz.org/][MusicBrainz]] -**** TODO Add covers to albums -**** TODO How to fuzzy search? *** TODO GPG **** TODO Is it possible to use GPG (sub)key for SSH access? **** TODO GPG YubiKey Setup @@ -88,185 +17,4 @@ Remove all passwords from Firefox and put them all in KeePassXC. *** TODO Misc **** TODO =say= command With quality comparable to macOS. -**** TODO Write URL to file when downloading with =yt= -**** DONE Make =thefuck= great again -CLOSED: [2019-06-20 Thu 07:47] **** TODO Make xmodmap commands declarative -**** TODO Test cyanogen on old K10 -**** TODO Install OpenBazaar -**** TODO Open =.description= files with text editor -**** TODO Change email address of SSH key pair in builds.sr.ht -**** CANCELLED Adjust layout for =annex.yml= tmuxinator template -I actually got used to it and now I like it :) -**** DONE Improve README.org -**** DONE Test elfeed -CLOSED: [2019-06-08 Sat 16:53] -This way I can more easily link to an article from org-mode! -CLOSED: [2019-06-02 Sun 02:43] -*** TODO Tmux -**** TODO Add =C-S-k= to kill line -The original terminal kill =C-k= is overriden by tmux. -*** TODO xmonad -**** TODO Show DiskIO and Network in xmobar -**** TODO Show red warning when battery is low -**** TODO Spawn xmobar once -**** TODO Double-check brightness commands -**** TODO Nextcloud out of trayer: where to put it now? -**** TODO Show playerctl $CURRENT_PLAYER in center -Stylized? -vlc -> VLC -cmus -> ? -**** TODO Show playerctl stats in center -**** TODO Show memory and CPU history besides the current number -**** TODO Show network upload and download -**** TODO Show temperature -**** TODO Show cmus song -**** TODO Fix screen brightness shortcuts :velhinho: -**** TODO Add clipboard manager -**** DONE Add play/pause, previous and next shortcuts :velhinho: -*** TODO Borg -**** TODO Copy content of Borg to S3 and Glacier -**** WAITING Simplify and automate backup.sh -**** TODO Add weekly cronjob for running backup.sh -*** TODO ArchiveBox -**** DONE Fix cronjob for ArchiveBox -CLOSED: [2019-06-19 Wed 18:11] -**** TODO How to not keep always updating archived webpages? -**** TODO Remove the need for =trayer= and =nm-applet= when interacting with wireless network -**** DONE Fix ArchiveBox errors -CLOSED: [2019-06-19 Wed 18:11] -**** DONE Remove public link to Pocket feed -CLOSED: [2019-06-16 Sun 12:14] -**** CANCELLED First class ArchiveBox <-> Wallabag integration (instead of Atom feed?) -Use Firefox bookmarks instead. -*** TODO Git Annex -**** TODO Configure small disk in usurpador to not download get some Git Annex folders -**** TODO Fix AWS_SECRET_KEY env var -Make embedcreds actually work. -**** TODO Use Glacier as Git Annex remote -**** TODO Make HD cheaper than S3 -**** TODO Tune =numcopies=, =git annex copy= -**** TODO Add more cheap remotes? -**** TODO Add GitLab as git-remote-gcrypt remote? -Can it perform incremental SSH pushes? -*** TODO Email -**** WAITING Finish importing mailing list emails -Right now, the =mb2md= doesn't recognize the concatenated MBOX file as valid. - -: less /nix/store/255i0f5k8k6n6q94fmw5h4mj95dxbh8p-mb2md-3.20/bin/.mb2md-wrapped -**** TODO Allow notmuch to enqueue email when offline -**** TODO Make =mbsync= faster -Either polling, fetching a subset of folders, etc. -**** TODO Improve spam filtering -https://notmuchmail.org/initial_tagging/ -**** TODO notmuch: send email from mor SMTP accounts -**** TODO Add lock for running =sync-mail.sh= -**** TODO Change =m= jump to search for =tag:ml AND date:"last 7 days"= -**** TODO Refile "archived" emails into actual Archive folder -Query for =tag:archive AND tag:euandreh AND folder:/INBOX/= emails and refile them into =Archive= folder: -#+BEGIN_SRC shell -# WIP -OUT="${HOME}/mbsync/EuAndreh/Archive/cur" -notmuch search --output=files tag:archive AND tag:euandreh AND folder:/INBOX/ | xargs -I{} mv "{}" "${OUT}/$(echo {} | awk -F, '{print $1}' | awk -F/ '{print $NF}')" -#+END_SRC -Make sure to keep existing tags from it? Will there be any case, since they're all INBOX emails? -**** TODO Improve =mailing-list-import-mbox.sh= -***** TODO Import MBOX archive from sr.ht -Relatevant tickets: -- https://todo.sr.ht/~sircmpwn/lists.sr.ht/22 -- https://todo.sr.ht/~sircmpwn/lists.sr.ht/94 -***** TODO Import MBOX archive from Discourse -*** TODO Emacs -**** TODO = Date: Sun, 22 Nov 2020 17:04:02 -0300 Subject: tmux.conf: Add key binding to swap window to first position --- tmux/tmux.conf | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 1adc419..46c751c 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -45,6 +45,9 @@ set-option -g history-limit 150000 # How many lines of history to keep set -g base-index 1 set-window-option -g pane-base-index 1 +# Set key to re-order current window to the first position +bind-key P swap-window -t 1 + # Automatically set window title set-window-option -g automatic-rename on set-option -g set-titles on @@ -62,4 +65,4 @@ set-option -gw xterm-keys on # Display pane numbers for longer # https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q -set -g display-panes-time 2500 \ No newline at end of file +set -g display-panes-time 2500 -- cgit v1.2.3 From dbda44225997d42e840f1fa137b2075e2eb8ef55 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 17:21:27 -0300 Subject: guix.scm: Remove quotes and add some packages --- guix.scm | 138 ++++++++++++++++++++++++++++++++++----------------------------- 1 file changed, 75 insertions(+), 63 deletions(-) diff --git a/guix.scm b/guix.scm index 671cc3f..1b66639 100644 --- a/guix.scm +++ b/guix.scm @@ -5,7 +5,7 @@ (operating-system (locale "en_US.utf8") (timezone "America/Sao_Paulo") - (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape"))) + (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape" "esperanto:qwerty"))) (host-name "velhinho-guix-system") (users (cons* (user-account (name "andreh") @@ -18,75 +18,87 @@ (packages (append (map (lambda (spec) - (if (not (string-contains spec ":")) - (specification->package spec) - (let ((spec-pair (string-split spec #\:))) - (list (specification->package (first spec-pair)) - (second spec-pair))))) - '("nss-certs" ;; suggested by Guix - "help2man" ;; used in Guix development - "strace" + (let ((spec-str (symbol->string spec))) + (if (not (string-contains spec-str ":")) + (specification->package spec-str) + (let ((spec-pair (string-split spec-str #\:))) + (list (specification->package (first spec-pair)) + (second spec-pair)))))) + ;; Base + '(nss-certs ;; suggested by Guix + help2man ;; used in Guix development + strace - "curl" - "wget" - "xclip" - "autojump" + ;; CLI tools + vim + curl + wget + autojump - "git" - "git:send-email" - "git-lfs" - "git-annex" - "myrepos" - "git-remote-gcrypt" - "git-crypt" + xclip - "rlwrap" - "borg" - "bash-completion" - "vlc" - "youtube-dl" - "sox" ;; play - "jq" - "calibre" - "notmuch" - "isync" - "xset" - "blueman" - ;; "bluez" - "playerctl" - "xmessage" - "alsa-utils" - "icecat" - "the-silver-searcher" - "fd" - "ranger" - "emacs" - "gettext" - "openssh" - "gnupg" - "nvi" - "tmux" - "direnv" - "pinentry-tty" - ;; "pinentry" - "keepassxc" - "recutils" -;;; "xterm" - "st" - "htop" + ;; DVCS tools + git + git:send-email + git-lfs + git-annex + myrepos + git-remote-gcrypt + git-crypt + fossil - ;; X -> wayland + rlwrap + borg + bash-completion + vlc + youtube-dl + sox ;; play + jq + ;; calibre + notmuch + isync + xset + blueman + bluez + playerctl + xmessage + qutebrowser + the-silver-searcher + fd + ranger + emacs ;; REMOVEME + gettext + openssh + gnupg + ;; nvi + tmux + direnv + pinentry-tty + ;; pinentry + keepassxc + recutils + st + htop + zathura + zathura-ps + zathura-pdf-poppler + zathura-djvu + zathura-cb + ;; zathura-pdf-mupdf + + + + + gpodder + newsboat ;; xmonad - ;; "xmonad" - "ghc" - "ghc-xmonad-contrib" - "gcc-toolchain" - "glibc" - "xmobar" - "dmenu" - "yeganesh")) + ghc + ghc-xmonad-contrib + xmobar + dmenu + yeganesh)) %base-packages)) (services (append -- cgit v1.2.3 From 642b11fec518e5c9e828bbd246a82a6c8ff8940d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 18:57:05 -0300 Subject: bashrc.sh: Source .nurc directly from bashrc.sh --- bash/bashrc.sh | 1 + bash/symlinks.sh | 3 +++ 2 files changed, 4 insertions(+) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index f083463..4f8660f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -15,6 +15,7 @@ source $DOTFILES/bash/init.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh source $HOME/annex/bin/misc/env.sh +source $HOME/.nurc source $DOTFILES/bash/fake-symlinks.sh env > ~/.spacemacs.env diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 7b743de..bfcb2dd 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -54,3 +54,6 @@ ln -fs "${DOTFILES}/ranger.conf" ~/.config/ranger/rc.conf ## Vim ln -fs "${DOTFILES}/vimrc.conf" ~/.vimrc + +## nu +ln -fs "$HOME/annex/bin/misc/nurc.sh" ~/.nurc -- cgit v1.2.3 From 8bfa61f8ed11bde0f88b2cf79a5ea352e72e4ccb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 20:02:42 -0300 Subject: TODOs.org: Remove more old things --- TODOs.org | 6 ------ 1 file changed, 6 deletions(-) diff --git a/TODOs.org b/TODOs.org index b3cc034..c46db9a 100644 --- a/TODOs.org +++ b/TODOs.org @@ -1,8 +1,5 @@ * Tasks ** DOING Workflow improvement -*** TODO Guix -**** TODO Create =burn.sh=, =install.sh= and =setup.sh= Guix installation scripts -**** TODO https://framagit.org/tyreunom/guix-home-manager *** TODO GPG **** TODO Is it possible to use GPG (sub)key for SSH access? **** TODO GPG YubiKey Setup @@ -10,9 +7,6 @@ - https://nullprogram.com/blog/2017/03/12/ - https://alexcabal.com/creating-the-perfect-gpg-keypair - https://rzetterberg.github.io/yubikey-gpg-nixos.html -**** TODO Make KeePassXC interop with Firefox -**** TODO Make Nextcloud pick password from KeePassXC or GPG file -Remove all passwords from Firefox and put them all in KeePassXC. **** TODO Use horcrux keys beyond paperkey (in case of fire) *** TODO Misc **** TODO =say= command -- cgit v1.2.3 From 747bafaa1635d46481d11504e80d89a8f4aa090a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 20:54:34 -0300 Subject: usurpador.nix: Remove elfeed-job from the cronjobs list --- nixos/usurpador.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index b9e3a0f..b971a0f 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -14,7 +14,6 @@ in rec { common.crons.deliver-queued-mail common.crons.annex-job - common.crons.elfeed-job common.crons.backup-job common.crons.repo-update-job common.crons.notmuch-dump-job -- cgit v1.2.3 From 96c71521eaa4ffff559474dbe61d299bb2ae8b98 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 22 Nov 2020 20:58:46 -0300 Subject: guix.scm: Add Source Code Pro font package --- guix.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/guix.scm b/guix.scm index 1b66639..8b25603 100644 --- a/guix.scm +++ b/guix.scm @@ -29,6 +29,9 @@ help2man ;; used in Guix development strace + ;; Fonts + font-adobe-source-code-pro + ;; CLI tools vim curl -- cgit v1.2.3 From 71d1533524b985f1a6f43d20e4e5913da45aa07f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 09:46:19 -0300 Subject: guix.scm: Add some emacs packages --- guix.scm | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/guix.scm b/guix.scm index 8b25603..eeb537d 100644 --- a/guix.scm +++ b/guix.scm @@ -32,6 +32,13 @@ ;; Fonts font-adobe-source-code-pro + ;; Emacs + emacs + emacs-spacemacs-theme + emacs-spaceline + emacs-evil + emacs-evil-collection + ;; CLI tools vim curl @@ -69,7 +76,6 @@ the-silver-searcher fd ranger - emacs ;; REMOVEME gettext openssh gnupg -- cgit v1.2.3 From 45a1ad98709a4f2c1ae141483d01db8c35f218ea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 15:30:54 -0300 Subject: Add symlink to Guix channel --- bash/symlinks.sh | 3 ++ guix.scm | 140 ------------------------------------------------------ guix/channels.scm | 12 +++++ guix/os.scm | 140 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ 4 files changed, 155 insertions(+), 140 deletions(-) delete mode 100644 guix.scm create mode 100644 guix/channels.scm create mode 100644 guix/os.scm diff --git a/bash/symlinks.sh b/bash/symlinks.sh index bfcb2dd..e04268c 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -57,3 +57,6 @@ ln -fs "${DOTFILES}/vimrc.conf" ~/.vimrc ## nu ln -fs "$HOME/annex/bin/misc/nurc.sh" ~/.nurc + +## Guix +ln -fs "$DOTFILES/guix/channels.scm" ~/.config/guix/channels.scm diff --git a/guix.scm b/guix.scm deleted file mode 100644 index eeb537d..0000000 --- a/guix.scm +++ /dev/null @@ -1,140 +0,0 @@ -(use-modules (gnu) - (srfi srfi-1)) -(use-service-modules desktop networking ssh xorg) - -(operating-system - (locale "en_US.utf8") - (timezone "America/Sao_Paulo") - (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape" "esperanto:qwerty"))) - (host-name "velhinho-guix-system") - (users (cons* (user-account - (name "andreh") - (comment "andreh") - (group "users") - (home-directory "/home/andreh") - (supplementary-groups - '("wheel" "netdev" "audio" "video"))) - %base-user-accounts)) - (packages - (append - (map (lambda (spec) - (let ((spec-str (symbol->string spec))) - (if (not (string-contains spec-str ":")) - (specification->package spec-str) - (let ((spec-pair (string-split spec-str #\:))) - (list (specification->package (first spec-pair)) - (second spec-pair)))))) - ;; Base - '(nss-certs ;; suggested by Guix - help2man ;; used in Guix development - strace - - ;; Fonts - font-adobe-source-code-pro - - ;; Emacs - emacs - emacs-spacemacs-theme - emacs-spaceline - emacs-evil - emacs-evil-collection - - ;; CLI tools - vim - curl - wget - autojump - - xclip - - ;; DVCS tools - git - git:send-email - git-lfs - git-annex - myrepos - git-remote-gcrypt - git-crypt - fossil - - rlwrap - borg - bash-completion - vlc - youtube-dl - sox ;; play - jq - ;; calibre - notmuch - isync - xset - blueman - bluez - playerctl - xmessage - qutebrowser - the-silver-searcher - fd - ranger - gettext - openssh - gnupg - ;; nvi - tmux - direnv - pinentry-tty - ;; pinentry - keepassxc - recutils - st - htop - - zathura - zathura-ps - zathura-pdf-poppler - zathura-djvu - zathura-cb - ;; zathura-pdf-mupdf - - - - - gpodder - newsboat - - ;; xmonad - ghc - ghc-xmonad-contrib - xmobar - dmenu - yeganesh)) - %base-packages)) - (services - (append - (list (service gnome-desktop-service-type) - (set-xorg-configuration - (xorg-configuration - (keyboard-layout keyboard-layout)))) - %desktop-services)) - (bootloader - (bootloader-configuration - (bootloader grub-efi-bootloader) - (target "/boot/efi") - (keyboard-layout keyboard-layout))) - (mapped-devices - (list (mapped-device - (source - (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) - (target "cryptroot") - (type luks-device-mapping)))) - (file-systems - (cons* (file-system - (mount-point "/") - (device "/dev/mapper/cryptroot") - (type "btrfs") - (dependencies mapped-devices)) - (file-system - (mount-point "/boot/efi") - (device (uuid "1B26-9F4E" 'fat32)) - (type "vfat")) - %base-file-systems))) diff --git a/guix/channels.scm b/guix/channels.scm new file mode 100644 index 0000000..b437c93 --- /dev/null +++ b/guix/channels.scm @@ -0,0 +1,12 @@ +(append + (list + (channel + (name 'euandreh) + (url "https://git.sr.ht/~euandreh/euandreh-guix-channel") + (branch "master") + (introduction + (make-channel-introduction + "641f9388002cd874040938ab1c6da7ac9d0e54ca" + (openpgp-fingerprint + "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060"))))) + %default-channels) diff --git a/guix/os.scm b/guix/os.scm new file mode 100644 index 0000000..eeb537d --- /dev/null +++ b/guix/os.scm @@ -0,0 +1,140 @@ +(use-modules (gnu) + (srfi srfi-1)) +(use-service-modules desktop networking ssh xorg) + +(operating-system + (locale "en_US.utf8") + (timezone "America/Sao_Paulo") + (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape" "esperanto:qwerty"))) + (host-name "velhinho-guix-system") + (users (cons* (user-account + (name "andreh") + (comment "andreh") + (group "users") + (home-directory "/home/andreh") + (supplementary-groups + '("wheel" "netdev" "audio" "video"))) + %base-user-accounts)) + (packages + (append + (map (lambda (spec) + (let ((spec-str (symbol->string spec))) + (if (not (string-contains spec-str ":")) + (specification->package spec-str) + (let ((spec-pair (string-split spec-str #\:))) + (list (specification->package (first spec-pair)) + (second spec-pair)))))) + ;; Base + '(nss-certs ;; suggested by Guix + help2man ;; used in Guix development + strace + + ;; Fonts + font-adobe-source-code-pro + + ;; Emacs + emacs + emacs-spacemacs-theme + emacs-spaceline + emacs-evil + emacs-evil-collection + + ;; CLI tools + vim + curl + wget + autojump + + xclip + + ;; DVCS tools + git + git:send-email + git-lfs + git-annex + myrepos + git-remote-gcrypt + git-crypt + fossil + + rlwrap + borg + bash-completion + vlc + youtube-dl + sox ;; play + jq + ;; calibre + notmuch + isync + xset + blueman + bluez + playerctl + xmessage + qutebrowser + the-silver-searcher + fd + ranger + gettext + openssh + gnupg + ;; nvi + tmux + direnv + pinentry-tty + ;; pinentry + keepassxc + recutils + st + htop + + zathura + zathura-ps + zathura-pdf-poppler + zathura-djvu + zathura-cb + ;; zathura-pdf-mupdf + + + + + gpodder + newsboat + + ;; xmonad + ghc + ghc-xmonad-contrib + xmobar + dmenu + yeganesh)) + %base-packages)) + (services + (append + (list (service gnome-desktop-service-type) + (set-xorg-configuration + (xorg-configuration + (keyboard-layout keyboard-layout)))) + %desktop-services)) + (bootloader + (bootloader-configuration + (bootloader grub-efi-bootloader) + (target "/boot/efi") + (keyboard-layout keyboard-layout))) + (mapped-devices + (list (mapped-device + (source + (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) + (target "cryptroot") + (type luks-device-mapping)))) + (file-systems + (cons* (file-system + (mount-point "/") + (device "/dev/mapper/cryptroot") + (type "btrfs") + (dependencies mapped-devices)) + (file-system + (mount-point "/boot/efi") + (device (uuid "1B26-9F4E" 'fat32)) + (type "vfat")) + %base-file-systems))) -- cgit v1.2.3 From cddc8ccf8eb88cc1abca21c1bfb2350b750bd23a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 15:32:01 -0300 Subject: os.scm: Add diff-so-fancy package (from my channel) --- guix/os.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/guix/os.scm b/guix/os.scm index eeb537d..22a2d70 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -56,6 +56,7 @@ git-remote-gcrypt git-crypt fossil + diff-so-fancy rlwrap borg -- cgit v1.2.3 From 11f9d17736a0dc57cbb9b0b36349214554a16127 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 16:19:06 -0300 Subject: os.scm: Add git-open --- guix/os.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/guix/os.scm b/guix/os.scm index 22a2d70..bfdaeaf 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -57,6 +57,7 @@ git-crypt fossil diff-so-fancy + git-open rlwrap borg -- cgit v1.2.3 From f48d8804acaaecdcaeb83a9e070897b9669f29be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 16:53:47 -0300 Subject: os.scm: Add zbar package --- guix/os.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/guix/os.scm b/guix/os.scm index bfdaeaf..0d5b59b 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -100,7 +100,7 @@ - + zbar gpodder newsboat -- cgit v1.2.3 From 815856c1fac47e120f96fe454bb9de8e9127bd1e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 17:06:01 -0300 Subject: Remove TODOs.org --- TODOs.org | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 TODOs.org diff --git a/TODOs.org b/TODOs.org deleted file mode 100644 index c46db9a..0000000 --- a/TODOs.org +++ /dev/null @@ -1,14 +0,0 @@ -* Tasks -** DOING Workflow improvement -*** TODO GPG -**** TODO Is it possible to use GPG (sub)key for SSH access? -**** TODO GPG YubiKey Setup -- https://github.com/drduh/YubiKey-Guide -- https://nullprogram.com/blog/2017/03/12/ -- https://alexcabal.com/creating-the-perfect-gpg-keypair -- https://rzetterberg.github.io/yubikey-gpg-nixos.html -**** TODO Use horcrux keys beyond paperkey (in case of fire) -*** TODO Misc -**** TODO =say= command -With quality comparable to macOS. -**** TODO Make xmodmap commands declarative -- cgit v1.2.3 From 239dbc12cf630fe60ebe8ad1768f394693c778a7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 17:07:38 -0300 Subject: common.nix: Run cronjobs every hour --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index 7324080..e7446b8 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -3,7 +3,7 @@ let cron-for-name = prefix: name: cron: "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; daily-at-12h30min = "30 12 * * *"; - every-x-hours = "0 */3 * * *"; + every-x-hours = "0 * * * *"; pub-crons = { sync-mail = every-x-hours; deliver-queued-mail = every-x-hours; -- cgit v1.2.3 From 710a2c99e8d7e6b1927514ea05f4cb5765321be4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 23 Nov 2020 19:19:28 -0300 Subject: archive-box.sh: Fix config with SAVE_MEDIA=False --- scripts/ad-hoc/archive-box.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/ad-hoc/archive-box.sh b/scripts/ad-hoc/archive-box.sh index 562193b..8845e47 100755 --- a/scripts/ad-hoc/archive-box.sh +++ b/scripts/ad-hoc/archive-box.sh @@ -39,5 +39,14 @@ cd "$HOME/UTCLOUD/archive-box/" # I gave up on proper packaging for now, I'll stick with Docker # while I regain energy and try again later -docker run -v "$PWD:/data" -ti nikisweeting/archivebox init -sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i nikisweeting/archivebox add +docker run -v "$PWD:/data" -ti archivebox/archivebox init +cat < ArchiveBox.conf +[SERVER_CONFIG] +SECRET_KEY = c2.o66u!7!tdfohba7r7w!qhgb9.+1hmjtg_lfvebucus6pow3 +SAVE_MEDIA=False +EOF +sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i archivebox/archivebox add + +# Start server with: +# $ cd "$HOME/UTCLOUD/archive-box/" +# $ docker run -v $PWD:/data -it -p 8000:8000 archivebox/archivebox -- cgit v1.2.3 From 12263a38c723ca04e7a34e81527758c174b714bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 25 Nov 2020 10:32:28 -0300 Subject: ps1.sh: Remove colored dollar --- bash/ps1.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 2593e05..ba43cde 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -55,9 +55,5 @@ in-nix-shell() { fi } -prompt() { - purpleb ' +export PS1='`error-marker`'$(timestamp)' '$(path)' `repo-status``guix-env``in-nix-shell` $ ' -} - -export PS1='`error-marker`'$(timestamp)' '$(path)' `repo-status``guix-env``in-nix-shell`'$(prompt) -- cgit v1.2.3 From bd63461359b0562d1748a9df3fe4c9f432eb1bfc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 25 Nov 2020 17:41:53 -0300 Subject: os.scm: Uncomment calibre and nvi, and add rsync package --- guix/os.scm | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/guix/os.scm b/guix/os.scm index 0d5b59b..1fa5cc2 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -44,6 +44,7 @@ curl wget autojump + rsync xclip @@ -66,7 +67,7 @@ youtube-dl sox ;; play jq - ;; calibre + calibre notmuch isync xset @@ -81,7 +82,7 @@ gettext openssh gnupg - ;; nvi + nvi tmux direnv pinentry-tty -- cgit v1.2.3 From c6b11e18600c164b5601de09f75e3a0015babf51 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 25 Nov 2020 19:43:35 -0300 Subject: symlinks.sh: Add link to newsboat urls again --- bash/symlinks.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index e04268c..b7441dd 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -26,6 +26,9 @@ ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig +mkdir -p ~/.newsboat +ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls + MEDIA_PREFIX=/run/media/andreh upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER -- cgit v1.2.3 From db404f0b4666940ab393e7dd5b947d1f6d0016f1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 25 Nov 2020 20:17:47 -0300 Subject: os.scm: Add workstation packages - mutt, weechat and newsboat --- guix/os.scm | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/guix/os.scm b/guix/os.scm index 1fa5cc2..dd7148d 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -46,8 +46,6 @@ autojump rsync - xclip - ;; DVCS tools git git:send-email @@ -60,6 +58,7 @@ diff-so-fancy git-open + xclip rlwrap borg bash-completion @@ -92,6 +91,11 @@ st htop + ;; Workstation personal programs + mutt + weechat + newsboat + zathura zathura-ps zathura-pdf-poppler -- cgit v1.2.3 From da28d80b395e61d564794b6d80da56bd62d1ab83 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 14:20:52 -0300 Subject: Move bin/ to scripts/ad-hoc/ --- bin/git-blame-someone-else | 21 --------------------- bin/sl | 13 ------------- bin/sleepsort | 20 -------------------- scripts/ad-hoc/git-blame-someone-else | 21 +++++++++++++++++++++ scripts/ad-hoc/sl | 13 +++++++++++++ scripts/ad-hoc/sleepsort | 20 ++++++++++++++++++++ 6 files changed, 54 insertions(+), 54 deletions(-) delete mode 100755 bin/git-blame-someone-else delete mode 100755 bin/sl delete mode 100755 bin/sleepsort create mode 100755 scripts/ad-hoc/git-blame-someone-else create mode 100755 scripts/ad-hoc/sl create mode 100755 scripts/ad-hoc/sleepsort diff --git a/bin/git-blame-someone-else b/bin/git-blame-someone-else deleted file mode 100755 index dd71826..0000000 --- a/bin/git-blame-someone-else +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Taken from https://github.com/jayphelps/git-blame-someone-else/ - -if [ $# -ne 2 ]; then - >&2 echo "Usage: $0 " - exit 1 -fi - -AUTHOR=$1 -AUTHOR_NAME=$(echo $AUTHOR | perl -wlne '/^(.*?)\s*<.*>$/ and print $1') -AUTHOR_EMAIL=$(echo $AUTHOR | perl -wlne '/^.*\s*<(.*)>$/ and print $1') -COMMIT=$(git rev-parse --short $2) - -{ - GIT_SEQUENCE_EDITOR="sed -i -e 's/^pick $COMMIT/edit $COMMIT/'" git rebase -i $COMMIT~1^^ - GIT_COMMITTER_NAME="$AUTHOR_NAME" GIT_COMMITTER_EMAIL="$AUTHOR_EMAIL" git commit --amend --no-edit --author="$AUTHOR" - # git rebase --continue -} &> /dev/null - -echo "$AUTHOR_NAME is now the author of $COMMIT. You're officially an asshole."; diff --git a/bin/sl b/bin/sl deleted file mode 100755 index 2333462..0000000 --- a/bin/sl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -# Taken from: -# https://gir.st/blog/sl-alt.htm - -# sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 - -LEN=$(ls "$@" |wc -L) # get the length of the longest line - -ls "$@" | rev | while read -r line -do - printf "%${LEN}.${LEN}s\\n" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' -done \ No newline at end of file diff --git a/bin/sleepsort b/bin/sleepsort deleted file mode 100755 index ea20fcb..0000000 --- a/bin/sleepsort +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Taken from: -# https://www.quora.com/What-is-the-strangest-sorting-algorithm/answer/Nipun-Ramakrishnan - -function f() { - sleep "$1" - echo "$1" -} - -while [ -n "$1" ] -do - f "$1" & - shift -done - -wait - -# example usage: -# sleepsort 5 3 6 3 6 3 1 4 7 diff --git a/scripts/ad-hoc/git-blame-someone-else b/scripts/ad-hoc/git-blame-someone-else new file mode 100755 index 0000000..dd71826 --- /dev/null +++ b/scripts/ad-hoc/git-blame-someone-else @@ -0,0 +1,21 @@ +#!/usr/bin/env bash + +# Taken from https://github.com/jayphelps/git-blame-someone-else/ + +if [ $# -ne 2 ]; then + >&2 echo "Usage: $0 " + exit 1 +fi + +AUTHOR=$1 +AUTHOR_NAME=$(echo $AUTHOR | perl -wlne '/^(.*?)\s*<.*>$/ and print $1') +AUTHOR_EMAIL=$(echo $AUTHOR | perl -wlne '/^.*\s*<(.*)>$/ and print $1') +COMMIT=$(git rev-parse --short $2) + +{ + GIT_SEQUENCE_EDITOR="sed -i -e 's/^pick $COMMIT/edit $COMMIT/'" git rebase -i $COMMIT~1^^ + GIT_COMMITTER_NAME="$AUTHOR_NAME" GIT_COMMITTER_EMAIL="$AUTHOR_EMAIL" git commit --amend --no-edit --author="$AUTHOR" + # git rebase --continue +} &> /dev/null + +echo "$AUTHOR_NAME is now the author of $COMMIT. You're officially an asshole."; diff --git a/scripts/ad-hoc/sl b/scripts/ad-hoc/sl new file mode 100755 index 0000000..2333462 --- /dev/null +++ b/scripts/ad-hoc/sl @@ -0,0 +1,13 @@ +#!/usr/bin/env bash + +# Taken from: +# https://gir.st/blog/sl-alt.htm + +# sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 + +LEN=$(ls "$@" |wc -L) # get the length of the longest line + +ls "$@" | rev | while read -r line +do + printf "%${LEN}.${LEN}s\\n" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' +done \ No newline at end of file diff --git a/scripts/ad-hoc/sleepsort b/scripts/ad-hoc/sleepsort new file mode 100755 index 0000000..ea20fcb --- /dev/null +++ b/scripts/ad-hoc/sleepsort @@ -0,0 +1,20 @@ +#!/usr/bin/env bash + +# Taken from: +# https://www.quora.com/What-is-the-strangest-sorting-algorithm/answer/Nipun-Ramakrishnan + +function f() { + sleep "$1" + echo "$1" +} + +while [ -n "$1" ] +do + f "$1" & + shift +done + +wait + +# example usage: +# sleepsort 5 3 6 3 6 3 1 4 7 -- cgit v1.2.3 From b8a6980fba25a4248187a19cd41021506a435d9e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 14:22:38 -0300 Subject: Reset $PATH and use $GUIX_PROFILE --- bash/bashrc.sh | 1 + bash/env.sh | 10 +++++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 4f8660f..3b58a3f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -6,6 +6,7 @@ export DOTFILES=~/dev/libre/dotfiles source $DOTFILES/bash/config.sh source $DOTFILES/bash/env.sh +source $GUIX_PROFILE/etc/profile source $DOTFILES/bash/colors.sh source $DOTFILES/bash/ps1.sh source $DOTFILES/bash/aliases.sh diff --git a/bash/env.sh b/bash/env.sh index 045a364..5a2319c 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -3,8 +3,16 @@ export R='16686@ch-s010.rsync.net' export EDITOR=vi export INPUTRC=~/.inputrc -export PATH="${DOTFILES}/scripts/ad-hoc:${DOTFILES}/scripts/cron:$HOME/annex/bin/ad-hoc:$HOME/annex/bin/cron:$DOTFILES/bin:${PATH}:$HOME/.config/guix/current/bin" export BORG_REMOTE_PATH='borg1' # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 + +export GUIX_PROFILE="$HOME/.guix-profile" + +# reset $PATH +PATH='/run/setuid-programs:/run/current-system/profile/bin:/run/current-system/profile/sbin' + +for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do + PATH="$PATH:$p/ad-hoc:$p/cron" +done -- cgit v1.2.3 From 7fd84353a773af92ce4dab6f24208b5d6b6022c2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 14:22:56 -0300 Subject: os.scm: Add terraform and bind packages --- guix/os.scm | 2 ++ 1 file changed, 2 insertions(+) diff --git a/guix/os.scm b/guix/os.scm index dd7148d..e77e630 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -45,6 +45,7 @@ wget autojump rsync + terraform ;; DVCS tools git @@ -90,6 +91,7 @@ recutils st htop + bind ;; Workstation personal programs mutt -- cgit v1.2.3 From 64e0c3ec7a44d0038bf4854325ad965335f43fcf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 15:36:22 -0300 Subject: env.sh: Stop reseting $PATH So it can be enhanced by external tools, such as "guix environment" --- bash/env.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 5a2319c..39dba90 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -10,9 +10,6 @@ export NIX_BUILD_CORES=0 export GUIX_PROFILE="$HOME/.guix-profile" -# reset $PATH -PATH='/run/setuid-programs:/run/current-system/profile/bin:/run/current-system/profile/sbin' - for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do PATH="$PATH:$p/ad-hoc:$p/cron" done -- cgit v1.2.3 From 512e48e539c7c03398293236a1df0fe55a39bd68 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 15:36:47 -0300 Subject: os.scm: Add openssl --- guix/os.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/guix/os.scm b/guix/os.scm index e77e630..538ab40 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -92,6 +92,7 @@ st htop bind + openssl ;; Workstation personal programs mutt -- cgit v1.2.3 From 093bafe8efcc7863b0566670f62176e41ecc8f57 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 17:24:49 -0300 Subject: spacemacs.el: Move TODOs.org file and put it in a var --- spacemacs.el | 34 ++++++++++++++++++---------------- 1 file changed, 18 insertions(+), 16 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index fa3b34f..bc88c69 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -621,19 +621,21 @@ dump." cider-clojure-interaction-mode scheme-mode)) -(defvar custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) - ("C-i" . evil-jump-forward) - ("M-ç" . (lambda () (interactive) (find-file "~/annex/txt/TODOs.org"))) - ("M-n" . (lambda () (interactive) (find-file "~/annex/txt/Work.org"))) - ("M-p" . interleave-mode) - ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) - ("M-SPC" . (lambda () (interactive) (just-one-space -1))) - ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) - ("M-]" . (lambda () (interactive) (find-file "~/Sync/TODOs.txt"))) - ("M-s-q" . (lambda () (interactive) (insert "/"))) - ("M-s-w" . (lambda () (interactive) (insert "?"))) - ("M-s-a" . (lambda () (interactive) (insert "\\"))) - ("M-s-s" . (lambda () (interactive) (insert "|"))))) +(defvar todos "~/Sync/TODOs.org") + +(setq custom-keybindings '(("→" . (lambda () (interactive) (evil-insert 1))) + ("C-i" . evil-jump-forward) + ("M-ç" . (lambda () (interactive) (find-file todos))) + ("M-n" . (lambda () (interactive) (find-file "~/annex/txt/Work.org"))) + ("M-p" . interleave-mode) + ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/money.ledger"))) + ("M-SPC" . (lambda () (interactive) (just-one-space -1))) + ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) + ("M-]" . (lambda () (interactive) (find-file todos))) + ("M-s-q" . (lambda () (interactive) (insert "/"))) + ("M-s-w" . (lambda () (interactive) (insert "?"))) + ("M-s-a" . (lambda () (interactive) (insert "\\"))) + ("M-s-s" . (lambda () (interactive) (insert "|"))))) (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" "~/annex/bin/misc/erc.el" @@ -929,10 +931,10 @@ This is the place where most of your configurations should be done. Unless it is ("CANCELLED" . (:foreground "green" :weight bold)) ("DONE" . (:foreground "green" :weight bold))) - org-agenda-files '("~/Nextcloud/txt/TODOs.org") + org-agenda-files (list todos) org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" - org-default-notes-file "~/annex/txt/TODOs.org" - org-scratch-notes-file "~/annex/txt/TODOs.org" + org-default-notes-file todos + org-scratch-notes-file todos org-diary-notes-file "~/annex/txt/Diary.org" org-decision-notes-file "~/annex/txt/Decisions.org" org-dream-notes-file "~/annex/txt/Dreams.org" -- cgit v1.2.3 From 26dbb8efc8fd3c26fb76f43f8dced92d3077f395 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 19:25:48 -0300 Subject: os.scm: Replace ad-hoc lambda with composition of existing functions --- guix/os.scm | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/guix/os.scm b/guix/os.scm index 538ab40..3fe40f3 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -17,13 +17,7 @@ %base-user-accounts)) (packages (append - (map (lambda (spec) - (let ((spec-str (symbol->string spec))) - (if (not (string-contains spec-str ":")) - (specification->package spec-str) - (let ((spec-pair (string-split spec-str #\:))) - (list (specification->package (first spec-pair)) - (second spec-pair)))))) + (map (compose list specification->package+output symbol->string) ;; Base '(nss-certs ;; suggested by Guix help2man ;; used in Guix development -- cgit v1.2.3 From 399dd3945ef58d8bcc0763f4095e4925124be156 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 20:53:09 -0300 Subject: os.scm: Add clojure package --- guix/os.scm | 3 +++ 1 file changed, 3 insertions(+) diff --git a/guix/os.scm b/guix/os.scm index 3fe40f3..1dddd32 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -88,6 +88,9 @@ bind openssl + ;; Programming + clojure + ;; Workstation personal programs mutt weechat -- cgit v1.2.3 From 4e1b5d010f8ccba9b83ec0b76b28ebe670111f5e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 26 Nov 2020 21:30:32 -0300 Subject: aliases.sh: Allow aliases in sudo calls --- bash/aliases.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 3c42eae..e8d1bd6 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -40,3 +40,5 @@ alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" alias grep='grep --color=always' alias td='pushd $(mktemp -d)' +# https://linuxhandbook.com/run-alias-as-sudo/ +alias sudo='sudo ' -- cgit v1.2.3 From f9f81f59677bc4ead7869551e163fff7502cf274 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 28 Nov 2020 17:09:29 -0300 Subject: annex.sh: Fix cron job environment --- scripts/ad-hoc/annex.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/ad-hoc/annex.sh b/scripts/ad-hoc/annex.sh index 9da5535..bc84034 100755 --- a/scripts/ad-hoc/annex.sh +++ b/scripts/ad-hoc/annex.sh @@ -8,6 +8,8 @@ AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" export AWS_ACCESS_KEY_ID export AWS_SECRET_ACCESS_KEY +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" pushd ~/annex/ git annex sync -- cgit v1.2.3 From 40a910fc79283d74647b7542a154f43d41549245 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 30 Nov 2020 23:53:26 -0300 Subject: spacemacs.el: Add euandreh/notmuch-copy-archive-url --- spacemacs.el | 31 +++++++++++++++++++++++++++++++ 1 file changed, 31 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index bc88c69..a3a3741 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -702,6 +702,36 @@ dump." (kill-new cmd) (message cmd))) +(defun euandreh/copy-url (ml) + (let* ((ml (if (string= ml "help-guix") + "guix-user" + ml)) + (url (format "https://yhetil.org/%s/%s" ml id))) + (kill-new url) + (message url))) + +(defvar candidates '("help-guix" + "guix-devel" + "guix-user" + "guix-science" + "gwl" + "guix-bugs" + "guix-patches")) + +(defun euandreh/notmuch-copy-archive-url () + "View the current message on the browser." + (interactive) + (setq helm-kill-ring--truncated-flag nil) + (let* ((id (notmuch-show-get-message-id t)) + (tags (notmuch-show-get-tags)) + (matches (cl-intersection tags candidates :test 'string=))) + (if matches + (euandreh/copy-url (car matches)) + (helm :sources + (helm-build-sync-source "mailint lists" + :candidates candidates + :action '(("Kill Register" . euandreh/copy-url))))))) + ;; Taken from: ;; https://notmuchmail.org/pipermail/notmuch/2018/026414.html (defcustom euandreh/notmuch-attach-regex @@ -780,6 +810,7 @@ This is the place where most of your configurations should be done. Unless it is (require 'notmuch) (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) (define-key 'notmuch-show-part-map "y" 'euandreh/notmuch-copy-git-am-command) + (define-key 'notmuch-show-part-map "b" 'euandreh/notmuch-copy-archive-url) (define-key 'notmuch-search-mode-map "e" 'euandreh/notmuch-extend-current-query-with-tag) (define-key 'notmuch-search-mode-map "E" 'euandreh/notmuch-extend-current-query) (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) -- cgit v1.2.3 From d7abe823e5d3c0fdad0687010a81e66715f24fb9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 30 Nov 2020 23:53:45 -0300 Subject: pastebin.sh: Change layout to pastebin --- scripts/ad-hoc/pastebin.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index 5d7adb2..a3ecb3a 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -48,7 +48,7 @@ cat < "${OUT}" --- title: ${FULL_TITLE} date: ${PASTE_DATE} -layout: post +layout: pastebin lang: en --- -- cgit v1.2.3 From 8c86681b1b14b4f8a08179bc8825f972cd2bef86 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 30 Nov 2020 23:54:03 -0300 Subject: x.sh: Increase keyboard rate --- bash/x.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/x.sh b/bash/x.sh index 04d38a1..04b7c25 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -1,7 +1,7 @@ #!/usr/bin/env bash setxkbmap -option esperanto:qwerty -xset r rate 250 50 +xset r rate 225 75 # query with: xdg-mime query filetype xdg-mime default evince.desktop application/pdf -- cgit v1.2.3 From 575cc3a9ebb2dd4dfe4cce263c97968c0ce6c8e9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 13:43:09 -0300 Subject: aliases.sh: Use c executable over alias to work with entr --- bash/aliases.sh | 1 - scripts/ad-hoc/c | 1 + 2 files changed, 1 insertion(+), 1 deletion(-) create mode 100755 scripts/ad-hoc/c diff --git a/bash/aliases.sh b/bash/aliases.sh index e8d1bd6..4e0a8f9 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -16,7 +16,6 @@ alias mm="sync-mail.sh" alias m="sync-mail.sh --fast" alias sqlite="rlwrap sqlite3" alias p='ping euandre.org -c 3' -alias c='tmux send-keys -R \; clear-history' alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator start" diff --git a/scripts/ad-hoc/c b/scripts/ad-hoc/c new file mode 100755 index 0000000..b31137b --- /dev/null +++ b/scripts/ad-hoc/c @@ -0,0 +1 @@ +tmux send-keys -R \; clear-history -- cgit v1.2.3 From 84f8132c1043376f34a8f7fee70e26fab739cff2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 13:44:25 -0300 Subject: Move fake-symlinks.sh loading to rr alias, create reload.sh --- bash/aliases.sh | 5 ++--- bash/bashrc.sh | 9 +++------ bash/init.sh | 24 ------------------------ bash/mr-execute.sh | 17 +++++++++++++++++ bash/reload.sh | 8 ++++++++ bash/tests.sh | 3 --- 6 files changed, 30 insertions(+), 36 deletions(-) delete mode 100644 bash/init.sh create mode 100644 bash/mr-execute.sh create mode 100644 bash/reload.sh delete mode 100644 bash/tests.sh diff --git a/bash/aliases.sh b/bash/aliases.sh index 4e0a8f9..1a66e40 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -30,9 +30,8 @@ u() { } export -f u - -alias reload="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" -alias rr="locked_init && source $DOTFILES/bash/x.sh; source $DOTFILES/bash/tests.sh && source ~/.bashrc" +alias reload="source $DOTFILES/bash/reload.sh" +alias rr="source $DOTFILES/bash/reload.sh" alias r="source ~/.bashrc" alias ag="ag --hidden" diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 3b58a3f..c3fa2cb 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -1,23 +1,20 @@ #!/usr/bin/env bash # shellcheck disable=SC1090 -# shellcheck disable=SC2086 export DOTFILES=~/dev/libre/dotfiles source $DOTFILES/bash/config.sh source $DOTFILES/bash/env.sh -source $GUIX_PROFILE/etc/profile +source "$GUIX_PROFILE/etc/profile" source $DOTFILES/bash/colors.sh source $DOTFILES/bash/ps1.sh source $DOTFILES/bash/aliases.sh source $DOTFILES/bash/util.sh source $DOTFILES/bash/agents.sh -source $DOTFILES/bash/init.sh source $DOTFILES/bash/symlinks.sh source $DOTFILES/bash/youtube.sh -source $HOME/annex/bin/misc/env.sh -source $HOME/.nurc -source $DOTFILES/bash/fake-symlinks.sh +source "$HOME/annex/bin/misc/env.sh" +source "$HOME/.nurc" env > ~/.spacemacs.env declare -px > ~/.bash.env diff --git a/bash/init.sh b/bash/init.sh deleted file mode 100644 index f14f955..0000000 --- a/bash/init.sh +++ /dev/null @@ -1,24 +0,0 @@ -#!/usr/bin/env bash - -locked_init() { - pushd ~/ > /dev/null || exit 1 - - mkdir -p ~/.emacs.d/.cache/ - AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt" - mkdir -p "$(dirname "$AUTOJUMP_TXT")" - touch "$AUTOJUMP_TXT" - - # clone all missing repos - mr checkout > /dev/null - - printf "" > /tmp/mr-repos - mr inject > /dev/null - - printf "(\\n" > /tmp/mr-projectile - sed -E 's/\/home\/andreh/~/' /tmp/mr-repos | awk '{print "\""$1"/""\""}' >> /tmp/mr-projectile - printf ")" >> /tmp/mr-projectile - cp /tmp/mr-projectile ~/.emacs.d/.cache/projectile-bookmarks.eld - - popd > /dev/null || exit 1 -} -export -f locked_init diff --git a/bash/mr-execute.sh b/bash/mr-execute.sh new file mode 100644 index 0000000..fd2112e --- /dev/null +++ b/bash/mr-execute.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +pushd ~/ > /dev/null || exit 1 + +AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt" +mkdir -p "$(dirname "$AUTOJUMP_TXT")" +touch "$AUTOJUMP_TXT" + +mr checkout > /dev/null + +mkdir -p ~/.emacs.d/.cache/ +(mr inject2 3>&2 2>&1 1>&3) 2>/dev/null | \ + sed -E 's/\/home\/andreh/~/' | \ + awk '{print "\""$1"/""\""}' | \ + cat <(printf "(\\n") - <(printf ")") > ~/.emacs.d/.cache/projectile-bookmarks.eld + +popd > /dev/null || exit 1 diff --git a/bash/reload.sh b/bash/reload.sh new file mode 100644 index 0000000..98bd73a --- /dev/null +++ b/bash/reload.sh @@ -0,0 +1,8 @@ +#!/usr/bin/env bash +# shellcheck disable=SC1090 + +source ~/.bashrc +source "$DOTFILES/bash/x.sh" +source "$DOTFILES/bash/mr-execute.sh" +source "$DOTFILES/bash/fake-symlinks.sh" +source ~/annex/bin/misc/tmuxinator-templates.sh diff --git a/bash/tests.sh b/bash/tests.sh deleted file mode 100644 index 6941614..0000000 --- a/bash/tests.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -# autotime test > /dev/null -- cgit v1.2.3 From 8b439cc538b746011296aed0194fa6b22d7de624 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 13:44:50 -0300 Subject: env.sh: Add explict $LANG and $LANGUAGE variables --- bash/env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/env.sh b/bash/env.sh index 39dba90..a1d424a 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -4,6 +4,8 @@ export R='16686@ch-s010.rsync.net' export EDITOR=vi export INPUTRC=~/.inputrc export BORG_REMOTE_PATH='borg1' +export LANG=fr_FR.UTF-8 +export LANGUAGE=fr_FR.UTF-8 # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From 4bd627675a984db1907560559393bfda1d20f3d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 13:46:08 -0300 Subject: configuration.nix: Add Autotools (autoconf, automake and pkg-config) --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ed5a32b..1db6d01 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -236,6 +236,9 @@ in { ruby pinentry nim + autoconf + automake + pkg-config ## Containers and VMs -- cgit v1.2.3 From c59063c2b3053c3afeae7f7da98ac94defbc57c6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 13:46:27 -0300 Subject: configuration.nix: Add ripgrep-all --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1db6d01..688624a 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -184,6 +184,7 @@ in { electrum libressl help2man + ripgrep-all gnome3.libgnome-keyring gnome3.gnome-keyring -- cgit v1.2.3 From b229c19de94e8999a65c227ccf6a66fb964fba00 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 13:47:00 -0300 Subject: common.nix: Run email jobs every 6 hours --- nixos/common.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/common.nix b/nixos/common.nix index e7446b8..67fa7a2 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -3,7 +3,7 @@ let cron-for-name = prefix: name: cron: "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; daily-at-12h30min = "30 12 * * *"; - every-x-hours = "0 * * * *"; + every-x-hours = "0 */6 * * *"; pub-crons = { sync-mail = every-x-hours; deliver-queued-mail = every-x-hours; -- cgit v1.2.3 From 2ac698884e808c8e692907ae665f8938ca56856a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 3 Dec 2020 14:00:38 -0300 Subject: Vendor in git-prompt.sh --- bash/bashrc.sh | 1 + bash/git-prompt.sh | 589 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 590 insertions(+) create mode 100644 bash/git-prompt.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index c3fa2cb..e03434f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -7,6 +7,7 @@ source $DOTFILES/bash/config.sh source $DOTFILES/bash/env.sh source "$GUIX_PROFILE/etc/profile" source $DOTFILES/bash/colors.sh +source $DOTFILES/bash/git-prompt.sh source $DOTFILES/bash/ps1.sh source $DOTFILES/bash/aliases.sh source $DOTFILES/bash/util.sh diff --git a/bash/git-prompt.sh b/bash/git-prompt.sh new file mode 100644 index 0000000..79fd908 --- /dev/null +++ b/bash/git-prompt.sh @@ -0,0 +1,589 @@ +# Taken from: +# curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > bash/git-prompt.sh + +# bash/zsh git prompt support +# +# Copyright (C) 2006,2007 Shawn O. Pearce +# Distributed under the GNU General Public License, version 2.0. +# +# This script allows you to see repository status in your prompt. +# +# To enable: +# +# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). +# 2) Add the following line to your .bashrc/.zshrc: +# source ~/.git-prompt.sh +# 3a) Change your PS1 to call __git_ps1 as +# command-substitution: +# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' +# ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' +# the optional argument will be used as format string. +# 3b) Alternatively, for a slightly faster prompt, __git_ps1 can +# be used for PROMPT_COMMAND in Bash or for precmd() in Zsh +# with two parameters,
     and , which are strings
    +#        you would put in $PS1 before and after the status string
    +#        generated by the git-prompt machinery.  e.g.
    +#        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
    +#          will show username, at-sign, host, colon, cwd, then
    +#          various status string, followed by dollar and SP, as
    +#          your prompt.
    +#        ZSH:  precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
    +#          will show username, pipe, then various status string,
    +#          followed by colon, cwd, dollar and SP, as your prompt.
    +#        Optionally, you can supply a third argument with a printf
    +#        format string to finetune the output of the branch status
    +#
    +# The repository status will be displayed only if you are currently in a
    +# git repository. The %s token is the placeholder for the shown status.
    +#
    +# The prompt status always includes the current branch name.
    +#
    +# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
    +# unstaged (*) and staged (+) changes will be shown next to the branch
    +# name.  You can configure this per-repository with the
    +# bash.showDirtyState variable, which defaults to true once
    +# GIT_PS1_SHOWDIRTYSTATE is enabled.
    +#
    +# You can also see if currently something is stashed, by setting
    +# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
    +# then a '$' will be shown next to the branch name.
    +#
    +# If you would like to see if there're untracked files, then you can set
    +# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
    +# files, then a '%' will be shown next to the branch name.  You can
    +# configure this per-repository with the bash.showUntrackedFiles
    +# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
    +# enabled.
    +#
    +# If you would like to see the difference between HEAD and its upstream,
    +# set GIT_PS1_SHOWUPSTREAM="auto".  A "<" indicates you are behind, ">"
    +# indicates you are ahead, "<>" indicates you have diverged and "="
    +# indicates that there is no difference. You can further control
    +# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
    +# of values:
    +#
    +#     verbose       show number of commits ahead/behind (+/-) upstream
    +#     name          if verbose, then also show the upstream abbrev name
    +#     legacy        don't use the '--count' option available in recent
    +#                   versions of git-rev-list
    +#     git           always compare HEAD to @{upstream}
    +#     svn           always compare HEAD to your SVN upstream
    +#
    +# You can change the separator between the branch name and the above
    +# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
    +# is SP.
    +#
    +# When there is an in-progress operation such as a merge, rebase,
    +# revert, cherry-pick, or bisect, the prompt will include information
    +# related to the operation, often in the form "|".
    +#
    +# When the repository has a sparse-checkout, a notification of the form
    +# "|SPARSE" will be included in the prompt.  This can be shortened to a
    +# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
    +# by setting GIT_PS1_OMITSPARSESTATE.
    +#
    +# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
    +# find one, or @{upstream} otherwise.  Once you have set
    +# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
    +# setting the bash.showUpstream config variable.
    +#
    +# If you would like to see more information about the identity of
    +# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
    +# to one of these values:
    +#
    +#     contains      relative to newer annotated tag (v1.6.3.2~35)
    +#     branch        relative to newer tag or branch (master~4)
    +#     describe      relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
    +#     tag           relative to any older tag (v1.6.3.1-13-gdd42c2f)
    +#     default       exactly matching tag
    +#
    +# If you would like a colored hint about the current dirty state, set
    +# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
    +# the colored output of "git status -sb" and are available only when
    +# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
    +# but always available in Zsh.
    +#
    +# If you would like __git_ps1 to do nothing in the case when the current
    +# directory is set up to be ignored by git, then set
    +# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
    +# repository level by setting bash.hideIfPwdIgnored to "false".
    +
    +# check whether printf supports -v
    +__git_printf_supports_v=
    +printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
    +
    +# stores the divergence from upstream in $p
    +# used by GIT_PS1_SHOWUPSTREAM
    +__git_ps1_show_upstream ()
    +{
    +	local key value
    +	local svn_remote svn_url_pattern count n
    +	local upstream=git legacy="" verbose="" name=""
    +
    +	svn_remote=()
    +	# get some config options from git-config
    +	local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
    +	while read -r key value; do
    +		case "$key" in
    +		bash.showupstream)
    +			GIT_PS1_SHOWUPSTREAM="$value"
    +			if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
    +				p=""
    +				return
    +			fi
    +			;;
    +		svn-remote.*.url)
    +			svn_remote[$((${#svn_remote[@]} + 1))]="$value"
    +			svn_url_pattern="$svn_url_pattern\\|$value"
    +			upstream=svn+git # default upstream is SVN if available, else git
    +			;;
    +		esac
    +	done <<< "$output"
    +
    +	# parse configuration values
    +	local option
    +	for option in ${GIT_PS1_SHOWUPSTREAM}; do
    +		case "$option" in
    +		git|svn) upstream="$option" ;;
    +		verbose) verbose=1 ;;
    +		legacy)  legacy=1  ;;
    +		name)    name=1 ;;
    +		esac
    +	done
    +
    +	# Find our upstream
    +	case "$upstream" in
    +	git)    upstream="@{upstream}" ;;
    +	svn*)
    +		# get the upstream from the "git-svn-id: ..." in a commit message
    +		# (git-svn uses essentially the same procedure internally)
    +		local -a svn_upstream
    +		svn_upstream=($(git log --first-parent -1 \
    +					--grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
    +		if [[ 0 -ne ${#svn_upstream[@]} ]]; then
    +			svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
    +			svn_upstream=${svn_upstream%@*}
    +			local n_stop="${#svn_remote[@]}"
    +			for ((n=1; n <= n_stop; n++)); do
    +				svn_upstream=${svn_upstream#${svn_remote[$n]}}
    +			done
    +
    +			if [[ -z "$svn_upstream" ]]; then
    +				# default branch name for checkouts with no layout:
    +				upstream=${GIT_SVN_ID:-git-svn}
    +			else
    +				upstream=${svn_upstream#/}
    +			fi
    +		elif [[ "svn+git" = "$upstream" ]]; then
    +			upstream="@{upstream}"
    +		fi
    +		;;
    +	esac
    +
    +	# Find how many commits we are ahead/behind our upstream
    +	if [[ -z "$legacy" ]]; then
    +		count="$(git rev-list --count --left-right \
    +				"$upstream"...HEAD 2>/dev/null)"
    +	else
    +		# produce equivalent output to --count for older versions of git
    +		local commits
    +		if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
    +		then
    +			local commit behind=0 ahead=0
    +			for commit in $commits
    +			do
    +				case "$commit" in
    +				"<"*) ((behind++)) ;;
    +				*)    ((ahead++))  ;;
    +				esac
    +			done
    +			count="$behind	$ahead"
    +		else
    +			count=""
    +		fi
    +	fi
    +
    +	# calculate the result
    +	if [[ -z "$verbose" ]]; then
    +		case "$count" in
    +		"") # no upstream
    +			p="" ;;
    +		"0	0") # equal to upstream
    +			p="=" ;;
    +		"0	"*) # ahead of upstream
    +			p=">" ;;
    +		*"	0") # behind upstream
    +			p="<" ;;
    +		*)	    # diverged from upstream
    +			p="<>" ;;
    +		esac
    +	else
    +		case "$count" in
    +		"") # no upstream
    +			p="" ;;
    +		"0	0") # equal to upstream
    +			p=" u=" ;;
    +		"0	"*) # ahead of upstream
    +			p=" u+${count#0	}" ;;
    +		*"	0") # behind upstream
    +			p=" u-${count%	0}" ;;
    +		*)	    # diverged from upstream
    +			p=" u+${count#*	}-${count%	*}" ;;
    +		esac
    +		if [[ -n "$count" && -n "$name" ]]; then
    +			__git_ps1_upstream_name=$(git rev-parse \
    +				--abbrev-ref "$upstream" 2>/dev/null)
    +			if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    +				p="$p \${__git_ps1_upstream_name}"
    +			else
    +				p="$p ${__git_ps1_upstream_name}"
    +				# not needed anymore; keep user's
    +				# environment clean
    +				unset __git_ps1_upstream_name
    +			fi
    +		fi
    +	fi
    +
    +}
    +
    +# Helper function that is meant to be called from __git_ps1.  It
    +# injects color codes into the appropriate gitstring variables used
    +# to build a gitstring.
    +__git_ps1_colorize_gitstring ()
    +{
    +	if [[ -n ${ZSH_VERSION-} ]]; then
    +		local c_red='%F{red}'
    +		local c_green='%F{green}'
    +		local c_lblue='%F{blue}'
    +		local c_clear='%f'
    +	else
    +		# Using \[ and \] around colors is necessary to prevent
    +		# issues with command line editing/browsing/completion!
    +		local c_red='\[\e[31m\]'
    +		local c_green='\[\e[32m\]'
    +		local c_lblue='\[\e[1;34m\]'
    +		local c_clear='\[\e[0m\]'
    +	fi
    +	local bad_color=$c_red
    +	local ok_color=$c_green
    +	local flags_color="$c_lblue"
    +
    +	local branch_color=""
    +	if [ $detached = no ]; then
    +		branch_color="$ok_color"
    +	else
    +		branch_color="$bad_color"
    +	fi
    +	c="$branch_color$c"
    +
    +	z="$c_clear$z"
    +	if [ "$w" = "*" ]; then
    +		w="$bad_color$w"
    +	fi
    +	if [ -n "$i" ]; then
    +		i="$ok_color$i"
    +	fi
    +	if [ -n "$s" ]; then
    +		s="$flags_color$s"
    +	fi
    +	if [ -n "$u" ]; then
    +		u="$bad_color$u"
    +	fi
    +	r="$c_clear$r"
    +}
    +
    +# Helper function to read the first line of a file into a variable.
    +# __git_eread requires 2 arguments, the file path and the name of the
    +# variable, in that order.
    +__git_eread ()
    +{
    +	test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
    +}
    +
    +# see if a cherry-pick or revert is in progress, if the user has committed a
    +# conflict resolution with 'git commit' in the middle of a sequence of picks or
    +# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
    +# the todo file.
    +__git_sequencer_status ()
    +{
    +	local todo
    +	if test -f "$g/CHERRY_PICK_HEAD"
    +	then
    +		r="|CHERRY-PICKING"
    +		return 0;
    +	elif test -f "$g/REVERT_HEAD"
    +	then
    +		r="|REVERTING"
    +		return 0;
    +	elif __git_eread "$g/sequencer/todo" todo
    +	then
    +		case "$todo" in
    +		p[\ \	]|pick[\ \	]*)
    +			r="|CHERRY-PICKING"
    +			return 0
    +		;;
    +		revert[\ \	]*)
    +			r="|REVERTING"
    +			return 0
    +		;;
    +		esac
    +	fi
    +	return 1
    +}
    +
    +# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
    +# when called from PS1 using command substitution
    +# in this mode it prints text to add to bash PS1 prompt (includes branch name)
    +#
    +# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
    +# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
    +# when two arguments are given, the first is prepended and the second appended
    +# to the state string when assigned to PS1.
    +# The optional third parameter will be used as printf format string to further
    +# customize the output of the git-status string.
    +# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
    +__git_ps1 ()
    +{
    +	# preserve exit status
    +	local exit=$?
    +	local pcmode=no
    +	local detached=no
    +	local ps1pc_start='\u@\h:\w '
    +	local ps1pc_end='\$ '
    +	local printf_format=' (%s)'
    +
    +	case "$#" in
    +		2|3)	pcmode=yes
    +			ps1pc_start="$1"
    +			ps1pc_end="$2"
    +			printf_format="${3:-$printf_format}"
    +			# set PS1 to a plain prompt so that we can
    +			# simply return early if the prompt should not
    +			# be decorated
    +			PS1="$ps1pc_start$ps1pc_end"
    +		;;
    +		0|1)	printf_format="${1:-$printf_format}"
    +		;;
    +		*)	return $exit
    +		;;
    +	esac
    +
    +	# ps1_expanded:  This variable is set to 'yes' if the shell
    +	# subjects the value of PS1 to parameter expansion:
    +	#
    +	#   * bash does unless the promptvars option is disabled
    +	#   * zsh does not unless the PROMPT_SUBST option is set
    +	#   * POSIX shells always do
    +	#
    +	# If the shell would expand the contents of PS1 when drawing
    +	# the prompt, a raw ref name must not be included in PS1.
    +	# This protects the user from arbitrary code execution via
    +	# specially crafted ref names.  For example, a ref named
    +	# 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the
    +	# shell to execute 'sudo rm -rf /' when the prompt is drawn.
    +	#
    +	# Instead, the ref name should be placed in a separate global
    +	# variable (in the __git_ps1_* namespace to avoid colliding
    +	# with the user's environment) and that variable should be
    +	# referenced from PS1.  For example:
    +	#
    +	#     __git_ps1_foo=$(do_something_to_get_ref_name)
    +	#     PS1="...stuff...\${__git_ps1_foo}...stuff..."
    +	#
    +	# If the shell does not expand the contents of PS1, the raw
    +	# ref name must be included in PS1.
    +	#
    +	# The value of this variable is only relevant when in pcmode.
    +	#
    +	# Assume that the shell follows the POSIX specification and
    +	# expands PS1 unless determined otherwise.  (This is more
    +	# likely to be correct if the user has a non-bash, non-zsh
    +	# shell and safer than the alternative if the assumption is
    +	# incorrect.)
    +	#
    +	local ps1_expanded=yes
    +	[ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
    +	[ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no
    +
    +	local repo_info rev_parse_exit_code
    +	repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
    +		--is-bare-repository --is-inside-work-tree \
    +		--short HEAD 2>/dev/null)"
    +	rev_parse_exit_code="$?"
    +
    +	if [ -z "$repo_info" ]; then
    +		return $exit
    +	fi
    +
    +	local short_sha=""
    +	if [ "$rev_parse_exit_code" = "0" ]; then
    +		short_sha="${repo_info##*$'\n'}"
    +		repo_info="${repo_info%$'\n'*}"
    +	fi
    +	local inside_worktree="${repo_info##*$'\n'}"
    +	repo_info="${repo_info%$'\n'*}"
    +	local bare_repo="${repo_info##*$'\n'}"
    +	repo_info="${repo_info%$'\n'*}"
    +	local inside_gitdir="${repo_info##*$'\n'}"
    +	local g="${repo_info%$'\n'*}"
    +
    +	if [ "true" = "$inside_worktree" ] &&
    +	   [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
    +	   [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
    +	   git check-ignore -q .
    +	then
    +		return $exit
    +	fi
    +
    +	local sparse=""
    +	if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    +	   [ -z "${GIT_PS1_OMITSPARSESTATE}" ] &&
    +	   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    +		sparse="|SPARSE"
    +	fi
    +
    +	local r=""
    +	local b=""
    +	local step=""
    +	local total=""
    +	if [ -d "$g/rebase-merge" ]; then
    +		__git_eread "$g/rebase-merge/head-name" b
    +		__git_eread "$g/rebase-merge/msgnum" step
    +		__git_eread "$g/rebase-merge/end" total
    +		r="|REBASE"
    +	else
    +		if [ -d "$g/rebase-apply" ]; then
    +			__git_eread "$g/rebase-apply/next" step
    +			__git_eread "$g/rebase-apply/last" total
    +			if [ -f "$g/rebase-apply/rebasing" ]; then
    +				__git_eread "$g/rebase-apply/head-name" b
    +				r="|REBASE"
    +			elif [ -f "$g/rebase-apply/applying" ]; then
    +				r="|AM"
    +			else
    +				r="|AM/REBASE"
    +			fi
    +		elif [ -f "$g/MERGE_HEAD" ]; then
    +			r="|MERGING"
    +		elif __git_sequencer_status; then
    +			:
    +		elif [ -f "$g/BISECT_LOG" ]; then
    +			r="|BISECTING"
    +		fi
    +
    +		if [ -n "$b" ]; then
    +			:
    +		elif [ -h "$g/HEAD" ]; then
    +			# symlink symbolic ref
    +			b="$(git symbolic-ref HEAD 2>/dev/null)"
    +		else
    +			local head=""
    +			if ! __git_eread "$g/HEAD" head; then
    +				return $exit
    +			fi
    +			# is it a symbolic ref?
    +			b="${head#ref: }"
    +			if [ "$head" = "$b" ]; then
    +				detached=yes
    +				b="$(
    +				case "${GIT_PS1_DESCRIBE_STYLE-}" in
    +				(contains)
    +					git describe --contains HEAD ;;
    +				(branch)
    +					git describe --contains --all HEAD ;;
    +				(tag)
    +					git describe --tags HEAD ;;
    +				(describe)
    +					git describe HEAD ;;
    +				(* | default)
    +					git describe --tags --exact-match HEAD ;;
    +				esac 2>/dev/null)" ||
    +
    +				b="$short_sha..."
    +				b="($b)"
    +			fi
    +		fi
    +	fi
    +
    +	if [ -n "$step" ] && [ -n "$total" ]; then
    +		r="$r $step/$total"
    +	fi
    +
    +	local w=""
    +	local i=""
    +	local s=""
    +	local u=""
    +	local h=""
    +	local c=""
    +	local p=""
    +
    +	if [ "true" = "$inside_gitdir" ]; then
    +		if [ "true" = "$bare_repo" ]; then
    +			c="BARE:"
    +		else
    +			b="GIT_DIR!"
    +		fi
    +	elif [ "true" = "$inside_worktree" ]; then
    +		if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
    +		   [ "$(git config --bool bash.showDirtyState)" != "false" ]
    +		then
    +			git diff --no-ext-diff --quiet || w="*"
    +			git diff --no-ext-diff --cached --quiet || i="+"
    +			if [ -z "$short_sha" ] && [ -z "$i" ]; then
    +				i="#"
    +			fi
    +		fi
    +		if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
    +		   git rev-parse --verify --quiet refs/stash >/dev/null
    +		then
    +			s="$"
    +		fi
    +
    +		if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
    +		   [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
    +		   git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
    +		then
    +			u="%${ZSH_VERSION+%}"
    +		fi
    +
    +		if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    +		   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    +			h="?"
    +		fi
    +
    +		if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
    +			__git_ps1_show_upstream
    +		fi
    +	fi
    +
    +	local z="${GIT_PS1_STATESEPARATOR-" "}"
    +
    +	# NO color option unless in PROMPT_COMMAND mode or it's Zsh
    +	if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
    +		if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
    +			__git_ps1_colorize_gitstring
    +		fi
    +	fi
    +
    +	b=${b##refs/heads/}
    +	if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    +		__git_ps1_branch_name=$b
    +		b="\${__git_ps1_branch_name}"
    +	fi
    +
    +	local f="$h$w$i$s$u"
    +	local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
    +
    +	if [ $pcmode = yes ]; then
    +		if [ "${__git_printf_supports_v-}" != yes ]; then
    +			gitstring=$(printf -- "$printf_format" "$gitstring")
    +		else
    +			printf -v gitstring -- "$printf_format" "$gitstring"
    +		fi
    +		PS1="$ps1pc_start$gitstring$ps1pc_end"
    +	else
    +		printf -- "$printf_format" "$gitstring"
    +	fi
    +
    +	return $exit
    +}
    -- 
    cgit v1.2.3
    
    
    From 4d8f9e1a89d4ea359fe332af353b28bedb88551f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 14:01:42 -0300
    Subject: Remove diff-so-fancy
    
    It breaks in some cases, so I'd rather just not have it. Magit already does this
    very well by itself.
    ---
     git/gitconfig.ini       | 1 -
     nixos/configuration.nix | 1 -
     2 files changed, 2 deletions(-)
    
    diff --git a/git/gitconfig.ini b/git/gitconfig.ini
    index cbebff8..d05ce16 100644
    --- a/git/gitconfig.ini
    +++ b/git/gitconfig.ini
    @@ -14,7 +14,6 @@
       textconv = "echo .dump | sqlite3"
     [core]
       editor = vi
    -  pager = diff-so-fancy | less --tabs=4 -RFX
       excludesfile = ~/.gitignore_global
     
       # https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important#5834094
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 688624a..6a51c61 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -113,7 +113,6 @@ in {
     
         gitAndTools.git-open
         gitAndTools.gitFull
    -    gitAndTools.diff-so-fancy
         gitAndTools.git-annex
         gitAndTools.gitRemoteGcrypt
         git-crypt
    -- 
    cgit v1.2.3
    
    
    From 375970d7d18f34bf951f3c7c68c6bf04f426a613 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 14:02:34 -0300
    Subject: spacemacs.el: Refactor custom-keybindings and org-capture config
    
    ---
     spacemacs.el | 92 +++++++++++++++++++++++++++---------------------------------
     1 file changed, 41 insertions(+), 51 deletions(-)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index a3a3741..47825b5 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -1,15 +1,5 @@
    -;; -*- mode: emacs-lisp -*-
    -;; This file is loaded by Spacemacs at startup.
    -;; It must be stored in your home directory.
    -
    -
    -;; macOS TLS error, fix from:
    -;; https://blog.vifortech.com/posts/emacs-tls-fix/
    -(require 'gnutls)
    -(add-to-list 'gnutls-trustfiles "/usr/local/etc/openssl/cert.pem")
    -
    -(defun org-time-add (&rest r)
    -  nil)
    +;; (defun org-time-add (&rest r)
    +;;   nil)
     
     (defun dotspacemacs/layers ()
       "Layer configuration:
    @@ -621,21 +611,8 @@ dump."
                             cider-clojure-interaction-mode
                             scheme-mode))
     
    -(defvar todos "~/Sync/TODOs.org")
    -
    -(setq custom-keybindings '(("→"     . (lambda () (interactive) (evil-insert 1)))
    -                           ("C-i"   . evil-jump-forward)
    -                           ("M-ç"   . (lambda () (interactive) (find-file todos)))
    -                           ("M-n"   . (lambda () (interactive) (find-file "~/annex/txt/Work.org")))
    -                           ("M-p"   . interleave-mode)
    -                           ("M-´"   . (lambda () (interactive) (find-file "~/annex/txt/money.ledger")))
    -                           ("M-SPC" . (lambda () (interactive) (just-one-space -1)))
    -                           ("M-["   . (lambda () (interactive) (find-file "~/tmp/scratch.org")))
    -                           ("M-]"   . (lambda () (interactive) (find-file todos)))
    -                           ("M-s-q"             . (lambda () (interactive) (insert "/")))
    -                           ("M-s-w"             . (lambda () (interactive) (insert "?")))
    -                           ("M-s-a"             . (lambda () (interactive) (insert "\\")))
    -                           ("M-s-s"             . (lambda () (interactive) (insert "|")))))
    +(setq custom-keybindings '(("M-ç"   . euandreh/find-bookmarked-files)
    +                           ("M-SPC" . (lambda () (interactive) (just-one-space -1)))))
     
     (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el"
                               "~/annex/bin/misc/erc.el"
    @@ -721,7 +698,7 @@ dump."
     (defun euandreh/notmuch-copy-archive-url ()
       "View the current message on the browser."
       (interactive)
    -  (setq helm-kill-ring--truncated-flag nil)
    +  ;; (setq helm-kill-ring--truncated-flag nil)
       (let* ((id (notmuch-show-get-message-id t))
              (tags (notmuch-show-get-tags))
              (matches (cl-intersection tags candidates :test 'string=)))
    @@ -783,7 +760,7 @@ through `notmuch-message-attach-regex'."
       (let* ((project-name (car (last (split-string dirname "/"))))
              (format-string (pcase hostname
                               ("git.euandreh.xyz" "https://%s/%s/tree/%s?id=%s#n%s")
    -                          ("git.savannah.gnu.org" "https://%s/%s.git/tree/%s?id=%s#n%s")
    +                          ("git.savannah.gnu.org" "https://%s/cgit/%s.git/tree/%s?id=%s#n%s")
                               (t "https://%s/%s.git/tree/%s?id=%s#n%s"))))
         (format format-string
                 hostname
    @@ -792,6 +769,29 @@ through `notmuch-message-attach-regex'."
                 commit
                 start)))
     
    +(defun euandreh/find-bookmarked-files ()
    +  (interactive)
    +  (helm :sources
    +        (helm-build-sync-source "mailint lists"
    +          :candidates '("Sync/TODOs.org"
    +                        "annex/txt/Work.org"
    +                        "annex/txt/Things.org"
    +                        "annex/txt/writing.org"
    +                        ;; "annex/txt/archive/Things.old.org"
    +                        "annex/bin/misc/git/mrconfig.ini"
    +                        "annex/bin/misc/erc.el"
    +                        "bin/misc/mail/notmuch-post.sh"
    +                        "bin/misc/mail/notmuch.el"
    +                        "tmp/scratch.org"
    +                        "tmp/playlist.txt"
    +                        "annex/txt/Meeting Notes.org"
    +                        "dev/libre/others/dinheiros/money.ledger")
    +          :action '(("Find file" . (lambda (f)
    +                                     (find-file (concat "~/" f))))))))
    +
    +(concat "oijoiJ" "Oioij")
    +(apply 'append "oiJ" "Oioj" "oijoij")
    +
     (defun euandreh/elfeed-batch-update ()
       (message "Starting (elfeed-update).")
       (elfeed-org)
    @@ -944,7 +944,7 @@ This is the place where most of your configurations should be done. Unless it is
             ;; - http://doc.norang.ca/org-mode.html
     
     
    -        org-log-done (quote time)
    +        org-log-done 'time
             org-log-into-drawer nil
             org-log-state-notes-insert-after-drawers nil
     
    @@ -964,27 +964,13 @@ This is the place where most of your configurations should be done. Unless it is
                                      ("DONE"      . (:foreground "green"  :weight bold)))
             org-agenda-files (list todos)
             org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA"
    -        org-default-notes-file todos
    -        org-scratch-notes-file todos
    -        org-diary-notes-file "~/annex/txt/Diary.org"
    -        org-decision-notes-file "~/annex/txt/Decisions.org"
    -        org-dream-notes-file "~/annex/txt/Dreams.org"
    -        org-capture-templates '(("t" "TODO" entry (file org-default-notes-file)
    -                                 "* TODO %?\n%u\n%a\n" :clock-in t :clock-resume t)
    -                                ("s" "Scratch" entry (file org-scratch-notes-file)
    -                                 "* %?\n%U\n" :clock-in t :clock-resume t)
    -                                ("m" "Meeting" entry (file org-default-notes-file)
    -                                 "* MEETING with %? :MEETING:\n%t" :clock-in t :clock-resume t)
    -                                ("d" "Diary" entry (file+datetree org-diary-notes-file)
    -                                 "* %?\n%U\n" :clock-in t :clock-resume t)
    -                                ("D" "Decision" entry (file+datetree org-decision-notes-file)
    -                                 "* %?\n%U\n" :clock-in t :clock-resume t)
    -                                ("S" "Dream" entry (file+datetree org-dream-notes-file)
    -                                 "* %?\n%U\n" :clock-in t :clock-resume t)
    -                                ("i" "Idea" entry (file org-default-notes-file)
    -                                 "* %? :IDEA: \n%t" :clock-in t :clock-resume t)
    -                                ("n" "Next Task" entry (file+headline org-default-notes-file "Tasks")
    -                                 "** NEXT %? \nDEADLINE: %t"))
    +
    +        org-capture-templates '(("c" "Dump"          entry (file          "~/annex/txt/Dump.org")          " ")
    +                                ("d" "Diary"         entry (file+datetree "~/annex/txt/Diary.org")         "* %?\n%U\n" :clock-in t :clock-resume t)
    +                                ("D" "Decision"      entry (file+datetree "~/annex/txt/Decisions.org")     "* %?\n%U\n" :clock-in t :clock-resume t)
    +                                ("t" "Terapia"       entry (file+datetree "~/annex/txt/Terapia.org")       "* %?\n%U\n" :clock-in t :clock-resume t)
    +                                ("S" "Dream"         entry (file+datetree "~/annex/txt/Dreams.org")        "* %?\n%U\n" :clock-in t :clock-resume t)
    +                                ("m" "Meeting notes" entry (file+datetree "~/annex/txt/Meeting Notes.org") "* MEETING with %?\n"))
     
             ;; Make splitting vertically more likely on smaller (velhinho) screens
             split-width-threshold 120
    @@ -1015,6 +1001,10 @@ This is the place where most of your configurations should be done. Unless it is
       (with-eval-after-load 'yasnippet
         (add-to-list 'yas-snippet-dirs "~/dev/guix/guix/etc/snippets"))
       (setq geiser-active-implementations '(guile))
    +  (put 't:test-equal 'scheme-indent-function 1)
    +  (put 't:test-assert 'scheme-indent-function 1)
    +  (put 'srfi-9:define-record-type 'scheme-indent-function 1)
    +  (put 'srfi-9-gnu:set-record-type-printer! 'scheme-indent-function 1)
     
       (with-eval-after-load 'info-lookup-mode
         (turn-off-evil-mode))
    -- 
    cgit v1.2.3
    
    
    From bf0d7ef137c46c3b2549bd38c8ceda9062a21ffb Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 14:26:13 -0300
    Subject: fake-symlinks: Refactor from scratch
    
    ---
     COPYING                                           |   661 ++
     bash/fake-symlinks.sh                             |   307 +-
     bash/templates/.gitignore                         |    51 +-
     bash/templates/AUTHORS                            |     2 +
     bash/templates/COPYING                            |   661 ++
     bash/templates/ChangeLog                          |     2 +
     bash/templates/HACKING                            |     5 +
     bash/templates/INSTALL                            |   368 +
     bash/templates/LICENSE                            |   661 --
     bash/templates/Makefile.am                        |    23 +
     bash/templates/NEWS                               |     7 +
     bash/templates/README                             |     6 +
     bash/templates/assert-docs-spelling.sh            |    32 -
     bash/templates/assert-nixfmt.sh                   |    16 -
     bash/templates/assert-shellcheck.sh               |     6 -
     bash/templates/assert-todos.sh                    |    43 -
     bash/templates/base-packages.nix                  |    22 -
     bash/templates/bootstrap                          |     3 +
     bash/templates/build-aux/git-notes-release.am     |    17 +
     bash/templates/build-aux/guile.am                 |    25 +
     bash/templates/build-aux/pre-inst-env.in          |    13 +
     bash/templates/build-aux/texinfo.tex              | 11614 ++++++++++++++++++++
     bash/templates/build-site.sh                      |    83 -
     bash/templates/ci-build.sh                        |    31 -
     bash/templates/conf.py                            |    56 -
     bash/templates/configure.ac                       |    14 +
     bash/templates/description                        |     1 +
     bash/templates/doc/Makefile                       |    20 +
     bash/templates/doc/_templates/footer.html         |     7 +
     bash/templates/doc/_templates/layout.html         |    59 +
     bash/templates/doc/conf.py.in                     |    56 +
     bash/templates/doc/dictionaries/en.txt            |     0
     bash/templates/doc/dictionaries/international.txt |     0
     bash/templates/doc/favicon.ico                    |   Bin 0 -> 1150 bytes
     bash/templates/doc/i18n-pagenames.json            |     3 +
     bash/templates/doc/index.rst                      |    31 +
     bash/templates/docs/Makefile                      |    20 -
     bash/templates/docs/i18n-pagenames.json           |     3 -
     bash/templates/docs/index.rst                     |    31 -
     bash/templates/favicon.ico                        |   Bin 1150 -> 0 bytes
     bash/templates/footer.html                        |     7 -
     bash/templates/guix/channels.scm                  |    11 +
     bash/templates/guix/manifest.scm                  |    18 +
     bash/templates/layout.html                        |    59 -
     bash/templates/m4/guile.m4                        |   397 +
     bash/templates/pre-push-hook.sh                   |     6 -
     bash/templates/preamble.org                       |    25 -
     bash/templates/rename/empty-texinfo.texi          |     5 +
     bash/templates/scripts/assert-docs-spelling.sh    |    32 +
     bash/templates/scripts/assert-shellcheck.sh       |     6 +
     bash/templates/scripts/assert-todos.sh            |    43 +
     bash/templates/scripts/build-sphinx.sh            |    66 +
     bash/templates/scripts/ci-build.sh                |    40 +
     bash/templates/scripts/generate-tasks-and-bugs.sh |    24 +
     bash/templates/scripts/with-container.sh          |     3 +
     bash/templates/shell.nix                          |     1 -
     bash/templates/simple-pre-push-hook.sh            |     5 -
     bash/templates/tests.sh                           |    11 -
     bash/templates/utils-i18n.nix                     |    57 -
     bash/templates/utils.nix                          |    65 -
     bash/templates/workflow.css                       |    49 -
     bash/templates/workflow/preamble.org              |    25 +
     bash/templates/workflow/vendor/htmlize.el         |  1884 ++++
     bash/templates/workflow/vendor/org.css            |     5 +
     bash/templates/workflow/workflow.css              |    49 +
     65 files changed, 16488 insertions(+), 1365 deletions(-)
     create mode 100644 COPYING
     create mode 100644 bash/templates/AUTHORS
     create mode 100644 bash/templates/COPYING
     create mode 100644 bash/templates/ChangeLog
     create mode 100644 bash/templates/HACKING
     create mode 100644 bash/templates/INSTALL
     delete mode 100644 bash/templates/LICENSE
     create mode 100644 bash/templates/Makefile.am
     create mode 100644 bash/templates/NEWS
     create mode 100644 bash/templates/README
     delete mode 100755 bash/templates/assert-docs-spelling.sh
     delete mode 100755 bash/templates/assert-nixfmt.sh
     delete mode 100755 bash/templates/assert-shellcheck.sh
     delete mode 100755 bash/templates/assert-todos.sh
     delete mode 100644 bash/templates/base-packages.nix
     create mode 100755 bash/templates/bootstrap
     create mode 100644 bash/templates/build-aux/git-notes-release.am
     create mode 100644 bash/templates/build-aux/guile.am
     create mode 100644 bash/templates/build-aux/pre-inst-env.in
     create mode 100644 bash/templates/build-aux/texinfo.tex
     delete mode 100755 bash/templates/build-site.sh
     delete mode 100755 bash/templates/ci-build.sh
     delete mode 100644 bash/templates/conf.py
     create mode 100644 bash/templates/configure.ac
     create mode 100644 bash/templates/description
     create mode 100644 bash/templates/doc/Makefile
     create mode 100644 bash/templates/doc/_templates/footer.html
     create mode 100644 bash/templates/doc/_templates/layout.html
     create mode 100644 bash/templates/doc/conf.py.in
     create mode 100644 bash/templates/doc/dictionaries/en.txt
     create mode 100644 bash/templates/doc/dictionaries/international.txt
     create mode 100644 bash/templates/doc/favicon.ico
     create mode 100644 bash/templates/doc/i18n-pagenames.json
     create mode 100644 bash/templates/doc/index.rst
     delete mode 100644 bash/templates/docs/Makefile
     delete mode 100644 bash/templates/docs/i18n-pagenames.json
     delete mode 100644 bash/templates/docs/index.rst
     delete mode 100644 bash/templates/favicon.ico
     delete mode 100644 bash/templates/footer.html
     create mode 100644 bash/templates/guix/channels.scm
     create mode 100644 bash/templates/guix/manifest.scm
     delete mode 100644 bash/templates/layout.html
     create mode 100644 bash/templates/m4/guile.m4
     delete mode 100755 bash/templates/pre-push-hook.sh
     delete mode 100644 bash/templates/preamble.org
     create mode 100644 bash/templates/rename/empty-texinfo.texi
     create mode 100755 bash/templates/scripts/assert-docs-spelling.sh
     create mode 100755 bash/templates/scripts/assert-shellcheck.sh
     create mode 100755 bash/templates/scripts/assert-todos.sh
     create mode 100755 bash/templates/scripts/build-sphinx.sh
     create mode 100755 bash/templates/scripts/ci-build.sh
     create mode 100755 bash/templates/scripts/generate-tasks-and-bugs.sh
     create mode 100755 bash/templates/scripts/with-container.sh
     delete mode 100644 bash/templates/shell.nix
     delete mode 100755 bash/templates/simple-pre-push-hook.sh
     delete mode 100755 bash/templates/tests.sh
     delete mode 100644 bash/templates/utils-i18n.nix
     delete mode 100644 bash/templates/utils.nix
     delete mode 100644 bash/templates/workflow.css
     create mode 100644 bash/templates/workflow/preamble.org
     create mode 100644 bash/templates/workflow/vendor/htmlize.el
     create mode 100644 bash/templates/workflow/vendor/org.css
     create mode 100644 bash/templates/workflow/workflow.css
    
    diff --git a/COPYING b/COPYING
    new file mode 100644
    index 0000000..be3f7b2
    --- /dev/null
    +++ b/COPYING
    @@ -0,0 +1,661 @@
    +                    GNU AFFERO GENERAL PUBLIC LICENSE
    +                       Version 3, 19 November 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. 
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +                            Preamble
    +
    +  The GNU Affero General Public License is a free, copyleft license for
    +software and other kinds of works, specifically designed to ensure
    +cooperation with the community in the case of network server software.
    +
    +  The licenses for most software and other practical works are designed
    +to take away your freedom to share and change the works.  By contrast,
    +our General Public Licenses are intended to guarantee your freedom to
    +share and change all versions of a program--to make sure it remains free
    +software for all its users.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +them if you wish), that you receive source code or can get it if you
    +want it, that you can change the software or use pieces of it in new
    +free programs, and that you know you can do these things.
    +
    +  Developers that use our General Public Licenses protect your rights
    +with two steps: (1) assert copyright on the software, and (2) offer
    +you this License which gives you legal permission to copy, distribute
    +and/or modify the software.
    +
    +  A secondary benefit of defending all users' freedom is that
    +improvements made in alternate versions of the program, if they
    +receive widespread use, become available for other developers to
    +incorporate.  Many developers of free software are heartened and
    +encouraged by the resulting cooperation.  However, in the case of
    +software used on network servers, this result may fail to come about.
    +The GNU General Public License permits making a modified version and
    +letting the public access it on a server without ever releasing its
    +source code to the public.
    +
    +  The GNU Affero General Public License is designed specifically to
    +ensure that, in such cases, the modified source code becomes available
    +to the community.  It requires the operator of a network server to
    +provide the source code of the modified version running there to the
    +users of that server.  Therefore, public use of a modified version, on
    +a publicly accessible server, gives the public access to the source
    +code of the modified version.
    +
    +  An older license, called the Affero General Public License and
    +published by Affero, was designed to accomplish similar goals.  This is
    +a different license, not a version of the Affero GPL, but Affero has
    +released a new version of the Affero GPL which permits relicensing under
    +this license.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +                       TERMS AND CONDITIONS
    +
    +  0. Definitions.
    +
    +  "This License" refers to version 3 of the GNU Affero General Public License.
    +
    +  "Copyright" also means copyright-like laws that apply to other kinds of
    +works, such as semiconductor masks.
    +
    +  "The Program" refers to any copyrightable work licensed under this
    +License.  Each licensee is addressed as "you".  "Licensees" and
    +"recipients" may be individuals or organizations.
    +
    +  To "modify" a work means to copy from or adapt all or part of the work
    +in a fashion requiring copyright permission, other than the making of an
    +exact copy.  The resulting work is called a "modified version" of the
    +earlier work or a work "based on" the earlier work.
    +
    +  A "covered work" means either the unmodified Program or a work based
    +on the Program.
    +
    +  To "propagate" a work means to do anything with it that, without
    +permission, would make you directly or secondarily liable for
    +infringement under applicable copyright law, except executing it on a
    +computer or modifying a private copy.  Propagation includes copying,
    +distribution (with or without modification), making available to the
    +public, and in some countries other activities as well.
    +
    +  To "convey" a work means any kind of propagation that enables other
    +parties to make or receive copies.  Mere interaction with a user through
    +a computer network, with no transfer of a copy, is not conveying.
    +
    +  An interactive user interface displays "Appropriate Legal Notices"
    +to the extent that it includes a convenient and prominently visible
    +feature that (1) displays an appropriate copyright notice, and (2)
    +tells the user that there is no warranty for the work (except to the
    +extent that warranties are provided), that licensees may convey the
    +work under this License, and how to view a copy of this License.  If
    +the interface presents a list of user commands or options, such as a
    +menu, a prominent item in the list meets this criterion.
    +
    +  1. Source Code.
    +
    +  The "source code" for a work means the preferred form of the work
    +for making modifications to it.  "Object code" means any non-source
    +form of a work.
    +
    +  A "Standard Interface" means an interface that either is an official
    +standard defined by a recognized standards body, or, in the case of
    +interfaces specified for a particular programming language, one that
    +is widely used among developers working in that language.
    +
    +  The "System Libraries" of an executable work include anything, other
    +than the work as a whole, that (a) is included in the normal form of
    +packaging a Major Component, but which is not part of that Major
    +Component, and (b) serves only to enable use of the work with that
    +Major Component, or to implement a Standard Interface for which an
    +implementation is available to the public in source code form.  A
    +"Major Component", in this context, means a major essential component
    +(kernel, window system, and so on) of the specific operating system
    +(if any) on which the executable work runs, or a compiler used to
    +produce the work, or an object code interpreter used to run it.
    +
    +  The "Corresponding Source" for a work in object code form means all
    +the source code needed to generate, install, and (for an executable
    +work) run the object code and to modify the work, including scripts to
    +control those activities.  However, it does not include the work's
    +System Libraries, or general-purpose tools or generally available free
    +programs which are used unmodified in performing those activities but
    +which are not part of the work.  For example, Corresponding Source
    +includes interface definition files associated with source files for
    +the work, and the source code for shared libraries and dynamically
    +linked subprograms that the work is specifically designed to require,
    +such as by intimate data communication or control flow between those
    +subprograms and other parts of the work.
    +
    +  The Corresponding Source need not include anything that users
    +can regenerate automatically from other parts of the Corresponding
    +Source.
    +
    +  The Corresponding Source for a work in source code form is that
    +same work.
    +
    +  2. Basic Permissions.
    +
    +  All rights granted under this License are granted for the term of
    +copyright on the Program, and are irrevocable provided the stated
    +conditions are met.  This License explicitly affirms your unlimited
    +permission to run the unmodified Program.  The output from running a
    +covered work is covered by this License only if the output, given its
    +content, constitutes a covered work.  This License acknowledges your
    +rights of fair use or other equivalent, as provided by copyright law.
    +
    +  You may make, run and propagate covered works that you do not
    +convey, without conditions so long as your license otherwise remains
    +in force.  You may convey covered works to others for the sole purpose
    +of having them make modifications exclusively for you, or provide you
    +with facilities for running those works, provided that you comply with
    +the terms of this License in conveying all material for which you do
    +not control copyright.  Those thus making or running the covered works
    +for you must do so exclusively on your behalf, under your direction
    +and control, on terms that prohibit them from making any copies of
    +your copyrighted material outside their relationship with you.
    +
    +  Conveying under any other circumstances is permitted solely under
    +the conditions stated below.  Sublicensing is not allowed; section 10
    +makes it unnecessary.
    +
    +  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    +
    +  No covered work shall be deemed part of an effective technological
    +measure under any applicable law fulfilling obligations under article
    +11 of the WIPO copyright treaty adopted on 20 December 1996, or
    +similar laws prohibiting or restricting circumvention of such
    +measures.
    +
    +  When you convey a covered work, you waive any legal power to forbid
    +circumvention of technological measures to the extent such circumvention
    +is effected by exercising rights under this License with respect to
    +the covered work, and you disclaim any intention to limit operation or
    +modification of the work as a means of enforcing, against the work's
    +users, your or third parties' legal rights to forbid circumvention of
    +technological measures.
    +
    +  4. Conveying Verbatim Copies.
    +
    +  You may convey verbatim copies of the Program's source code as you
    +receive it, in any medium, provided that you conspicuously and
    +appropriately publish on each copy an appropriate copyright notice;
    +keep intact all notices stating that this License and any
    +non-permissive terms added in accord with section 7 apply to the code;
    +keep intact all notices of the absence of any warranty; and give all
    +recipients a copy of this License along with the Program.
    +
    +  You may charge any price or no price for each copy that you convey,
    +and you may offer support or warranty protection for a fee.
    +
    +  5. Conveying Modified Source Versions.
    +
    +  You may convey a work based on the Program, or the modifications to
    +produce it from the Program, in the form of source code under the
    +terms of section 4, provided that you also meet all of these conditions:
    +
    +    a) The work must carry prominent notices stating that you modified
    +    it, and giving a relevant date.
    +
    +    b) The work must carry prominent notices stating that it is
    +    released under this License and any conditions added under section
    +    7.  This requirement modifies the requirement in section 4 to
    +    "keep intact all notices".
    +
    +    c) You must license the entire work, as a whole, under this
    +    License to anyone who comes into possession of a copy.  This
    +    License will therefore apply, along with any applicable section 7
    +    additional terms, to the whole of the work, and all its parts,
    +    regardless of how they are packaged.  This License gives no
    +    permission to license the work in any other way, but it does not
    +    invalidate such permission if you have separately received it.
    +
    +    d) If the work has interactive user interfaces, each must display
    +    Appropriate Legal Notices; however, if the Program has interactive
    +    interfaces that do not display Appropriate Legal Notices, your
    +    work need not make them do so.
    +
    +  A compilation of a covered work with other separate and independent
    +works, which are not by their nature extensions of the covered work,
    +and which are not combined with it such as to form a larger program,
    +in or on a volume of a storage or distribution medium, is called an
    +"aggregate" if the compilation and its resulting copyright are not
    +used to limit the access or legal rights of the compilation's users
    +beyond what the individual works permit.  Inclusion of a covered work
    +in an aggregate does not cause this License to apply to the other
    +parts of the aggregate.
    +
    +  6. Conveying Non-Source Forms.
    +
    +  You may convey a covered work in object code form under the terms
    +of sections 4 and 5, provided that you also convey the
    +machine-readable Corresponding Source under the terms of this License,
    +in one of these ways:
    +
    +    a) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by the
    +    Corresponding Source fixed on a durable physical medium
    +    customarily used for software interchange.
    +
    +    b) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by a
    +    written offer, valid for at least three years and valid for as
    +    long as you offer spare parts or customer support for that product
    +    model, to give anyone who possesses the object code either (1) a
    +    copy of the Corresponding Source for all the software in the
    +    product that is covered by this License, on a durable physical
    +    medium customarily used for software interchange, for a price no
    +    more than your reasonable cost of physically performing this
    +    conveying of source, or (2) access to copy the
    +    Corresponding Source from a network server at no charge.
    +
    +    c) Convey individual copies of the object code with a copy of the
    +    written offer to provide the Corresponding Source.  This
    +    alternative is allowed only occasionally and noncommercially, and
    +    only if you received the object code with such an offer, in accord
    +    with subsection 6b.
    +
    +    d) Convey the object code by offering access from a designated
    +    place (gratis or for a charge), and offer equivalent access to the
    +    Corresponding Source in the same way through the same place at no
    +    further charge.  You need not require recipients to copy the
    +    Corresponding Source along with the object code.  If the place to
    +    copy the object code is a network server, the Corresponding Source
    +    may be on a different server (operated by you or a third party)
    +    that supports equivalent copying facilities, provided you maintain
    +    clear directions next to the object code saying where to find the
    +    Corresponding Source.  Regardless of what server hosts the
    +    Corresponding Source, you remain obligated to ensure that it is
    +    available for as long as needed to satisfy these requirements.
    +
    +    e) Convey the object code using peer-to-peer transmission, provided
    +    you inform other peers where the object code and Corresponding
    +    Source of the work are being offered to the general public at no
    +    charge under subsection 6d.
    +
    +  A separable portion of the object code, whose source code is excluded
    +from the Corresponding Source as a System Library, need not be
    +included in conveying the object code work.
    +
    +  A "User Product" is either (1) a "consumer product", which means any
    +tangible personal property which is normally used for personal, family,
    +or household purposes, or (2) anything designed or sold for incorporation
    +into a dwelling.  In determining whether a product is a consumer product,
    +doubtful cases shall be resolved in favor of coverage.  For a particular
    +product received by a particular user, "normally used" refers to a
    +typical or common use of that class of product, regardless of the status
    +of the particular user or of the way in which the particular user
    +actually uses, or expects or is expected to use, the product.  A product
    +is a consumer product regardless of whether the product has substantial
    +commercial, industrial or non-consumer uses, unless such uses represent
    +the only significant mode of use of the product.
    +
    +  "Installation Information" for a User Product means any methods,
    +procedures, authorization keys, or other information required to install
    +and execute modified versions of a covered work in that User Product from
    +a modified version of its Corresponding Source.  The information must
    +suffice to ensure that the continued functioning of the modified object
    +code is in no case prevented or interfered with solely because
    +modification has been made.
    +
    +  If you convey an object code work under this section in, or with, or
    +specifically for use in, a User Product, and the conveying occurs as
    +part of a transaction in which the right of possession and use of the
    +User Product is transferred to the recipient in perpetuity or for a
    +fixed term (regardless of how the transaction is characterized), the
    +Corresponding Source conveyed under this section must be accompanied
    +by the Installation Information.  But this requirement does not apply
    +if neither you nor any third party retains the ability to install
    +modified object code on the User Product (for example, the work has
    +been installed in ROM).
    +
    +  The requirement to provide Installation Information does not include a
    +requirement to continue to provide support service, warranty, or updates
    +for a work that has been modified or installed by the recipient, or for
    +the User Product in which it has been modified or installed.  Access to a
    +network may be denied when the modification itself materially and
    +adversely affects the operation of the network or violates the rules and
    +protocols for communication across the network.
    +
    +  Corresponding Source conveyed, and Installation Information provided,
    +in accord with this section must be in a format that is publicly
    +documented (and with an implementation available to the public in
    +source code form), and must require no special password or key for
    +unpacking, reading or copying.
    +
    +  7. Additional Terms.
    +
    +  "Additional permissions" are terms that supplement the terms of this
    +License by making exceptions from one or more of its conditions.
    +Additional permissions that are applicable to the entire Program shall
    +be treated as though they were included in this License, to the extent
    +that they are valid under applicable law.  If additional permissions
    +apply only to part of the Program, that part may be used separately
    +under those permissions, but the entire Program remains governed by
    +this License without regard to the additional permissions.
    +
    +  When you convey a copy of a covered work, you may at your option
    +remove any additional permissions from that copy, or from any part of
    +it.  (Additional permissions may be written to require their own
    +removal in certain cases when you modify the work.)  You may place
    +additional permissions on material, added by you to a covered work,
    +for which you have or can give appropriate copyright permission.
    +
    +  Notwithstanding any other provision of this License, for material you
    +add to a covered work, you may (if authorized by the copyright holders of
    +that material) supplement the terms of this License with terms:
    +
    +    a) Disclaiming warranty or limiting liability differently from the
    +    terms of sections 15 and 16 of this License; or
    +
    +    b) Requiring preservation of specified reasonable legal notices or
    +    author attributions in that material or in the Appropriate Legal
    +    Notices displayed by works containing it; or
    +
    +    c) Prohibiting misrepresentation of the origin of that material, or
    +    requiring that modified versions of such material be marked in
    +    reasonable ways as different from the original version; or
    +
    +    d) Limiting the use for publicity purposes of names of licensors or
    +    authors of the material; or
    +
    +    e) Declining to grant rights under trademark law for use of some
    +    trade names, trademarks, or service marks; or
    +
    +    f) Requiring indemnification of licensors and authors of that
    +    material by anyone who conveys the material (or modified versions of
    +    it) with contractual assumptions of liability to the recipient, for
    +    any liability that these contractual assumptions directly impose on
    +    those licensors and authors.
    +
    +  All other non-permissive additional terms are considered "further
    +restrictions" within the meaning of section 10.  If the Program as you
    +received it, or any part of it, contains a notice stating that it is
    +governed by this License along with a term that is a further
    +restriction, you may remove that term.  If a license document contains
    +a further restriction but permits relicensing or conveying under this
    +License, you may add to a covered work material governed by the terms
    +of that license document, provided that the further restriction does
    +not survive such relicensing or conveying.
    +
    +  If you add terms to a covered work in accord with this section, you
    +must place, in the relevant source files, a statement of the
    +additional terms that apply to those files, or a notice indicating
    +where to find the applicable terms.
    +
    +  Additional terms, permissive or non-permissive, may be stated in the
    +form of a separately written license, or stated as exceptions;
    +the above requirements apply either way.
    +
    +  8. Termination.
    +
    +  You may not propagate or modify a covered work except as expressly
    +provided under this License.  Any attempt otherwise to propagate or
    +modify it is void, and will automatically terminate your rights under
    +this License (including any patent licenses granted under the third
    +paragraph of section 11).
    +
    +  However, if you cease all violation of this License, then your
    +license from a particular copyright holder is reinstated (a)
    +provisionally, unless and until the copyright holder explicitly and
    +finally terminates your license, and (b) permanently, if the copyright
    +holder fails to notify you of the violation by some reasonable means
    +prior to 60 days after the cessation.
    +
    +  Moreover, your license from a particular copyright holder is
    +reinstated permanently if the copyright holder notifies you of the
    +violation by some reasonable means, this is the first time you have
    +received notice of violation of this License (for any work) from that
    +copyright holder, and you cure the violation prior to 30 days after
    +your receipt of the notice.
    +
    +  Termination of your rights under this section does not terminate the
    +licenses of parties who have received copies or rights from you under
    +this License.  If your rights have been terminated and not permanently
    +reinstated, you do not qualify to receive new licenses for the same
    +material under section 10.
    +
    +  9. Acceptance Not Required for Having Copies.
    +
    +  You are not required to accept this License in order to receive or
    +run a copy of the Program.  Ancillary propagation of a covered work
    +occurring solely as a consequence of using peer-to-peer transmission
    +to receive a copy likewise does not require acceptance.  However,
    +nothing other than this License grants you permission to propagate or
    +modify any covered work.  These actions infringe copyright if you do
    +not accept this License.  Therefore, by modifying or propagating a
    +covered work, you indicate your acceptance of this License to do so.
    +
    +  10. Automatic Licensing of Downstream Recipients.
    +
    +  Each time you convey a covered work, the recipient automatically
    +receives a license from the original licensors, to run, modify and
    +propagate that work, subject to this License.  You are not responsible
    +for enforcing compliance by third parties with this License.
    +
    +  An "entity transaction" is a transaction transferring control of an
    +organization, or substantially all assets of one, or subdividing an
    +organization, or merging organizations.  If propagation of a covered
    +work results from an entity transaction, each party to that
    +transaction who receives a copy of the work also receives whatever
    +licenses to the work the party's predecessor in interest had or could
    +give under the previous paragraph, plus a right to possession of the
    +Corresponding Source of the work from the predecessor in interest, if
    +the predecessor has it or can get it with reasonable efforts.
    +
    +  You may not impose any further restrictions on the exercise of the
    +rights granted or affirmed under this License.  For example, you may
    +not impose a license fee, royalty, or other charge for exercise of
    +rights granted under this License, and you may not initiate litigation
    +(including a cross-claim or counterclaim in a lawsuit) alleging that
    +any patent claim is infringed by making, using, selling, offering for
    +sale, or importing the Program or any portion of it.
    +
    +  11. Patents.
    +
    +  A "contributor" is a copyright holder who authorizes use under this
    +License of the Program or a work on which the Program is based.  The
    +work thus licensed is called the contributor's "contributor version".
    +
    +  A contributor's "essential patent claims" are all patent claims
    +owned or controlled by the contributor, whether already acquired or
    +hereafter acquired, that would be infringed by some manner, permitted
    +by this License, of making, using, or selling its contributor version,
    +but do not include claims that would be infringed only as a
    +consequence of further modification of the contributor version.  For
    +purposes of this definition, "control" includes the right to grant
    +patent sublicenses in a manner consistent with the requirements of
    +this License.
    +
    +  Each contributor grants you a non-exclusive, worldwide, royalty-free
    +patent license under the contributor's essential patent claims, to
    +make, use, sell, offer for sale, import and otherwise run, modify and
    +propagate the contents of its contributor version.
    +
    +  In the following three paragraphs, a "patent license" is any express
    +agreement or commitment, however denominated, not to enforce a patent
    +(such as an express permission to practice a patent or covenant not to
    +sue for patent infringement).  To "grant" such a patent license to a
    +party means to make such an agreement or commitment not to enforce a
    +patent against the party.
    +
    +  If you convey a covered work, knowingly relying on a patent license,
    +and the Corresponding Source of the work is not available for anyone
    +to copy, free of charge and under the terms of this License, through a
    +publicly available network server or other readily accessible means,
    +then you must either (1) cause the Corresponding Source to be so
    +available, or (2) arrange to deprive yourself of the benefit of the
    +patent license for this particular work, or (3) arrange, in a manner
    +consistent with the requirements of this License, to extend the patent
    +license to downstream recipients.  "Knowingly relying" means you have
    +actual knowledge that, but for the patent license, your conveying the
    +covered work in a country, or your recipient's use of the covered work
    +in a country, would infringe one or more identifiable patents in that
    +country that you have reason to believe are valid.
    +
    +  If, pursuant to or in connection with a single transaction or
    +arrangement, you convey, or propagate by procuring conveyance of, a
    +covered work, and grant a patent license to some of the parties
    +receiving the covered work authorizing them to use, propagate, modify
    +or convey a specific copy of the covered work, then the patent license
    +you grant is automatically extended to all recipients of the covered
    +work and works based on it.
    +
    +  A patent license is "discriminatory" if it does not include within
    +the scope of its coverage, prohibits the exercise of, or is
    +conditioned on the non-exercise of one or more of the rights that are
    +specifically granted under this License.  You may not convey a covered
    +work if you are a party to an arrangement with a third party that is
    +in the business of distributing software, under which you make payment
    +to the third party based on the extent of your activity of conveying
    +the work, and under which the third party grants, to any of the
    +parties who would receive the covered work from you, a discriminatory
    +patent license (a) in connection with copies of the covered work
    +conveyed by you (or copies made from those copies), or (b) primarily
    +for and in connection with specific products or compilations that
    +contain the covered work, unless you entered into that arrangement,
    +or that patent license was granted, prior to 28 March 2007.
    +
    +  Nothing in this License shall be construed as excluding or limiting
    +any implied license or other defenses to infringement that may
    +otherwise be available to you under applicable patent law.
    +
    +  12. No Surrender of Others' Freedom.
    +
    +  If conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot convey a
    +covered work so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you may
    +not convey it at all.  For example, if you agree to terms that obligate you
    +to collect a royalty for further conveying from those to whom you convey
    +the Program, the only way you could satisfy both those terms and this
    +License would be to refrain entirely from conveying the Program.
    +
    +  13. Remote Network Interaction; Use with the GNU General Public License.
    +
    +  Notwithstanding any other provision of this License, if you modify the
    +Program, your modified version must prominently offer all users
    +interacting with it remotely through a computer network (if your version
    +supports such interaction) an opportunity to receive the Corresponding
    +Source of your version by providing access to the Corresponding Source
    +from a network server at no charge, through some standard or customary
    +means of facilitating copying of software.  This Corresponding Source
    +shall include the Corresponding Source for any work covered by version 3
    +of the GNU General Public License that is incorporated pursuant to the
    +following paragraph.
    +
    +  Notwithstanding any other provision of this License, you have
    +permission to link or combine any covered work with a work licensed
    +under version 3 of the GNU General Public License into a single
    +combined work, and to convey the resulting work.  The terms of this
    +License will continue to apply to the part which is the covered work,
    +but the work with which it is combined will remain governed by version
    +3 of the GNU General Public License.
    +
    +  14. Revised Versions of this License.
    +
    +  The Free Software Foundation may publish revised and/or new versions of
    +the GNU Affero General Public License from time to time.  Such new versions
    +will be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +  Each version is given a distinguishing version number.  If the
    +Program specifies that a certain numbered version of the GNU Affero General
    +Public License "or any later version" applies to it, you have the
    +option of following the terms and conditions either of that numbered
    +version or of any later version published by the Free Software
    +Foundation.  If the Program does not specify a version number of the
    +GNU Affero General Public License, you may choose any version ever published
    +by the Free Software Foundation.
    +
    +  If the Program specifies that a proxy can decide which future
    +versions of the GNU Affero General Public License can be used, that proxy's
    +public statement of acceptance of a version permanently authorizes you
    +to choose that version for the Program.
    +
    +  Later license versions may give you additional or different
    +permissions.  However, no additional obligations are imposed on any
    +author or copyright holder as a result of your choosing to follow a
    +later version.
    +
    +  15. Disclaimer of Warranty.
    +
    +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    +IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. Limitation of Liability.
    +
    +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGES.
    +
    +  17. Interpretation of Sections 15 and 16.
    +
    +  If the disclaimer of warranty and limitation of liability provided
    +above cannot be given local legal effect according to their terms,
    +reviewing courts shall apply local law that most closely approximates
    +an absolute waiver of all civil liability in connection with the
    +Program, unless a warranty or assumption of liability accompanies a
    +copy of the Program in return for a fee.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +            How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +state the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C)   
    +
    +    This program is free software: you can redistribute it and/or modify
    +    it under the terms of the GNU Affero General Public License as published by
    +    the Free Software Foundation, either version 3 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU Affero General Public License for more details.
    +
    +    You should have received a copy of the GNU Affero General Public License
    +    along with this program.  If not, see .
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +  If your software can interact with users remotely through a computer
    +network, you should also make sure that it provides a way for users to
    +get its source.  For example, if your program is a web application, its
    +interface could display a "Source" link that leads users to an archive
    +of the code.  There are many ways you could offer source, and different
    +solutions will be better for different programs; see section 13 for the
    +specific requirements.
    +
    +  You should also get your employer (if you work as a programmer) or school,
    +if any, to sign a "copyright disclaimer" for the program, if necessary.
    +For more information on this, and how to apply and follow the GNU AGPL, see
    +.
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index fcd0529..1222b7a 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -13,99 +13,262 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin
     pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1
     export DOLLAR='$'
     
    -documented-project-fake-ln() {
    -  export PROJECT="$1"
    -  export PROJECT_UC="$2"
    -  export MAILING_LIST="$3"
    +for job in annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do
    +  sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh"
    +  chmod +x "$HOME/dev/libre/dotfiles/scripts/ad-hoc/${job}.sh"
    +  chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh"
    +done
     
    -  for d in workflow scripts docs docs/_templates docs/dictionaries nix; do
    -    mkdir -p "$HOME/dev/libre/$PROJECT/$d"
    +for job in pacheco; do
    +  prefix="$HOME/annex/bin/ad-hoc"
    +  sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh"
    +  chmod +x "$HOME/annex/bin/ad-hoc/${job}.sh"
    +  chmod +x "$HOME/annex/bin/cron/${job}-job.sh"
    +done
    +
    +cp-all() {
    +  for f in "$@"; do
    +    mkdir -p "$(dirname "$PREFIX/$f")"
    +    cp "$f" "$PREFIX/$f"
       done
    +}
     
    -  for f in .gitignore metadata.json docs/i18n-pagenames.json TODOs.org docs/Makefile default.nix tests.sh; do
    -    if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then
    -      cp "$f" "$HOME/dev/libre/$PROJECT/$f"
    +cp-if-not() {
    +  for f in "$@"; do
    +    if [[ ! -f "$PREFIX/$f" ]]; then
    +      mkdir -p "$(dirname "$PREFIX/$f")"
    +      cp "$f" "$PREFIX/$f"
         fi
       done
    +}
     
    -  sed "s/__PROJECT_UC__/$PROJECT_UC/" build-site.sh > "$HOME/dev/libre/$PROJECT/scripts/build-site.sh"
    -  chmod +x "$HOME/dev/libre/$PROJECT/scripts/build-site.sh"
    -  envsubst < conf.py > "$HOME/dev/libre/$PROJECT/docs/conf.py"
    -  envsubst < layout.html > "$HOME/dev/libre/$PROJECT/docs/_templates/layout.html"
    -  envsubst < utils-i18n.nix > "$HOME/dev/libre/$PROJECT/nix/utils-i18n.nix"
    -  cp assert-docs-spelling.sh "$HOME/dev/libre/$PROJECT/scripts/assert-docs-spelling.sh"
    -
    -  envsubst < utils.nix > "$HOME/dev/libre/$PROJECT/nix/utils.nix"
    -  envsubst < preamble.org > "$HOME/dev/libre/$PROJECT/workflow/preamble.org"
    -  cp workflow.css "$HOME/dev/libre/$PROJECT/workflow/"
    -  envsubst < pre-push-hook.sh > "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push"
    -  chmod +x "$HOME/dev/libre/$PROJECT/.git/hooks/pre-push"
    -  envsubst < ci-build.sh > "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh"
    -  chmod +x "$HOME/dev/libre/$PROJECT/scripts/ci-build.sh"
    -  cat <(printf "%s\n\n" "$PROJECT_UC") <(jq -r .description < "$HOME/dev/libre/$PROJECT/metadata.json" | fold -w 72 | sed 's/^ //') <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") > "$HOME/dev/libre/$PROJECT/README"
    -  cp footer.html "$HOME/dev/libre/$PROJECT/docs/_templates/"
    -  cp assert-shellcheck.sh "$HOME/dev/libre/$PROJECT/scripts/"
    -  cp assert-nixfmt.sh "$HOME/dev/libre/$PROJECT/scripts/"
    -  cp assert-todos.sh "$HOME/dev/libre/$PROJECT/scripts/"
    -  cp shell.nix "$HOME/dev/libre/$PROJECT/"
    -  cp favicon.ico "$HOME/dev/libre/$PROJECT/docs/"
    -  cp LICENSE "$HOME/dev/libre/$PROJECT/"
    -  cp base-packages.nix "$HOME/dev/libre/$PROJECT/nix/base-packages.nix"
    -
    -  for f in docs/index.rst; do
    -    if [[ ! -f "$HOME/dev/libre/$PROJECT/$f" ]]; then
    -      envsubst < "$f" > "$HOME/dev/libre/$PROJECT/$f"
    -    fi
    +envsubst-all() {
    +  for f in "$@"; do
    +    mkdir -p "$(dirname "$PREFIX/$f")"
    +    envsubst < "$f" > "$PREFIX/$f"
       done
    +}
     
    -  for f in docs/dictionaries/international.txt docs/dictionaries/en.txt; do
    -    touch "$HOME/dev/libre/$PROJECT/$f"
    +envsubst-if-not() {
    +  for f in "$@"; do
    +    if [[ ! -f "$PREFIX/$f" ]]; then
    +      mkdir -p "$(dirname "$PREFIX/$f")"
    +      envsubst < "$f" > "$PREFIX/$f"
    +    fi
       done
     }
     
    -for r in songbooks mediator cement; do
    -  documented-project-fake-ln "$r" "${r^}" "$r"
    -done
    +sed-all() {
    +  for f in "$@"; do
    +    mkdir -p "$(dirname "$PREFIX/$f")"
    +    sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$f"
    +  done
    +}
     
    -for r in byopds; do
    -  documented-project-fake-ln "$r" "$(echo "$r" | tr '[:lower:]' '[:upper:]')" "$r"
    -done
    +sed-if-not() {
    +  for f in "$@"; do
    +    if [[ ! -f "$PREFIX/$f" ]]; then
    +      mkdir -p "$(dirname "$PREFIX/$f")"
    +      sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$f"
    +    fi
    +  done
    +}
     
    -for r in x-bindgen libedn eq; do
    -  documented-project-fake-ln "$r" "$r" 'mediator'
    -done
    +chmod+x-all() {
    +  for f in "$@"; do
    +    chmod +x "$PREFIX/$f"
    +  done
    +}
     
    -simple-project-fake-ln() {
    +ln-env() {
       export PROJECT="$1"
    -  envsubst < simple-pre-push-hook.sh > "$HOME/dev/libre/$1/.git/hooks/pre-push"
    -  chmod +x "$HOME/dev/libre/$1/.git/hooks/pre-push"
    -  cp LICENSE "$HOME/dev/libre/$PROJECT/"
    +  export PREFIX="$HOME/dev/libre/$PROJECT"
    +  export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}"
    +  export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}"
     }
     
    -for r in parsecc parseclj boneco brinquedoteca casa-do-caminho website dotfiles euandreh-guix-channel guile-quickcheck music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo vps x-bindgen; do
    -  simple-project-fake-ln "$r"
    -done
    +ln-init() {
    +  if ! grep "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini > /dev/null; then
    +    red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")"
    +  fi
     
    -for job in annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do
    -  sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh"
    -  chmod +x "$HOME/dev/libre/dotfiles/scripts/ad-hoc/${job}.sh"
    -  chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh"
    -done
    +  if [[ ! -d "$PREFIX" ]]; then
    +    git init "$PREFIX"
    +  fi
    +}
     
    -for job in pacheco; do
    -  prefix="$HOME/annex/bin/ad-hoc"
    -  sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh"
    -  chmod +x "$HOME/annex/bin/ad-hoc/${job}.sh"
    -  chmod +x "$HOME/annex/bin/cron/${job}-job.sh"
    -done
    +ln-autotools() {
    +  cp-all AUTHORS bootstrap ChangeLog INSTALL
    +  cp-if-not description
     
    -PROJECT='website' envsubst < utils-i18n.nix > "$HOME/dev/libre/website/nix/utils-i18n.nix"
    +  # assumes:
    +  # - ln-worflow for .gitignore
    +  # - ln-git-notes-release for Makefile.am
    +  # - ln-guix-container for Makefile.am
    +  envsubst-all .gitignore configure.ac Makefile.am README
    +}
     
    -cp assert-nixfmt.sh "$HOME/dev/libre/website/scripts/"
    +ln-workflow() {
    +  cp-all workflow/vendor/org.css      \
    +         workflow/vendor/htmlize.el   \
    +         workflow/workflow.css        \
    +         scripts/assert-todos.sh      \
    +         scripts/assert-shellcheck.sh \
    +         scripts/generate-tasks-and-bugs.sh
    +  cp-if-not TODOs.org
    +  envsubst-all workflow/preamble.org
    +}
     
    -for r in vps website; do
    -  mkdir -p "$HOME/dev/libre/$r/scripts/"
    -  cp assert-shellcheck.sh "$HOME/dev/libre/$r/scripts/"
    -done
    +ln-agpl() {
    +  cp-all COPYING
    +}
    +
    +ln-guix-container() {
    +  cp-all scripts/with-container.sh scripts/assert-shellcheck.sh
    +  cp-if-not guix/channels.scm guix/manifest.scm
    +}
    +
    +ln-guile-files() {
    +  cp-all build-aux/guile.am build-aux/pre-inst-env.in m4/guile.m4
    +}
    +
    +ln-ci() {
    +  cp-all scripts/assert-shellcheck.sh
    +
    +  if [[ -f "$PREFIX/configure.ac" ]]; then
    +    export AUTOTOOLS_SETUP='./bootstrap && ./configure && '
    +  else
    +    export AUTOTOOLS_SETUP=''
    +  fi
    +  envsubst-all scripts/ci-build.sh .git/hooks/pre-push
    +  chmod+x-all  scripts/ci-build.sh .git/hooks/pre-push
    +}
    +
    +ln-git-notes-release() {
    +  cp-all build-aux/git-notes-release.am
    +  cp-if-not NEWS
    +}
    +
    +ln-dicts() {
    +  cp-all doc/dictionaries/international.txt doc/dictionaries/en.txt
    +}
    +
    +ln-texinfo() {
    +  envsubst-all HACKING
    +  envsubst-if-not empty-texinfo.texi
    +  cp-all build-aux/texinfo.tex
    +  chmod +w "$PREFIX/build-aux/texinfo.tex" ||:
    +  ln-dicts
    +}
    +
    +ln-sphinx() {
    +  ln-dicts
    +  cp-all scripts/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico
    +  envsubst-all doc/conf.py.in doc/_templates/layout.html
    +  envsubst-if-not doc/index.rst
    +  sed-all scripts/build-sphinx.sh
    +  chmod+x-all /scripts/build-sphinx.sh
    +  cp-if-not doc/i18n-pagenames.json doc/Makefile
    +}
    +
    +ln-scribble() {
    +  ln-dicts
    +}
    +
    +ln-antora() {
    +  ln-dicts
    +}
    +
    +ln-base-autotools-guix-project() {
    +  ln-env "$1"
    +  ln-init
    +
    +  ln-workflow
    +  ln-guix-container
    +  ln-git-notes-release
    +  ln-autotools
    +
    +  ln-agpl
    +  ln-guile-files
    +  ln-ci
    +}
    +
    +ln-texinfo-autotools-guix-project() {
    +  ln-base-autotools-guix-project "$1"
    +  ln-texinfo
    +}
    +
    +ln-sphinx-autotools-guix-project() {
    +  ln-base-autotools-guix-project "$1"
    +  ln-sphinx
    +}
    +
    +ln-scribble-autotools-guix-project() {
    +  ln-base-autotools-guix-project "$1"
    +  ln-scribble
    +}
    +
    +ln-antora-autotools-guix-project() {
    +  ln-base-autotools-guix-project "$1"
    +  ln-antora
    +}
    +
    +ln-simple-makefile() {
    +  cp-all Makefile
    +}
    +
    +ln-generated-readme() {
    +  cat <(printf "%s\n\n" "$PROJECT_UC")                        \
    +      description                                             \
    +      <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \
    +      > "$PREFIX/README"
    +}
    +
    +ln-makefile-only-guix-project() {
    +  ln-env "$1"
    +  ln-agpl
    +  ln-workflow
    +  ln-guix-container
    +  ln-ci
    +}
    +
    +ln-bare-project() {
    +  ln-agpl
    +
    +  if [[ -f "$PREFIX/Makefile" ]]; then
    +    export DISABLE_CI=''
    +    envsubst-all scripts/ci-build.sh
    +    chmod+x-all  scripts/ci-build.sh
    +  else
    +    export DISABLE_CI='# '
    +  fi
    +  envsubst-all .git/hooks/pre-push
    +  chmod+x-all  .git/hooks/pre-push
    +}
    +
    +declare -A PROJECT_NAMES=(
    +  [vps]=VPS
    +  [cement]=Cement
    +  [parsecc]=ParsecC
    +)
    +
    +declare -A ML_FOR_PROJECT=(
    +  [cement]=byopds
    +)
    +
    +ln-all() {
    +  LN_FN="$1"
    +  shift
    +  for f in "$@"; do
    +    "$LN_FN" "$f"
    +  done
    +}
    +
    +ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds cement
    +ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
    +ln-all ln-scribble-autotools-guix-project songbooks
    +ln-all ln-antora-autotools-guix-project   byopds
    +ln-all ln-makefile-only-guix-project      vps parsecc
    +ln-all ln-bare-project                    parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo x-bindgen website
     
     popd > /dev/null || exit 1
    diff --git a/bash/templates/.gitignore b/bash/templates/.gitignore
    index d6815e6..3614924 100644
    --- a/bash/templates/.gitignore
    +++ b/bash/templates/.gitignore
    @@ -1,5 +1,48 @@
    -# Nix
    -/result
    +# GNU Autotools
    +/Makefile.in
    +/pre-inst-env
     
    -# Sphinx
    -docs/_build/
    +autom4te.cache
    +/autoscan.log
    +/autoscan-*.log
    +/aclocal.m4
    +/compile
    +/config.guess
    +/config.h.in
    +/config.log
    +/config.status
    +/config.sub
    +/configure
    +/configure.scan
    +/depcomp
    +/install-sh
    +/missing
    +/stamp-h1
    +
    +/.deps/
    +/Makefile
    +/config.h
    +
    +/build-aux/compile
    +/build-aux/depcomp
    +/build-aux/install-sh
    +/build-aux/missing
    +/build-aux/test-driver
    +
    +/$PROJECT-*.tar.gz
    +/$PROJECT-*.tar.gz.asc
    +/$PROJECT-*/
    +
    +/doc/$PROJECT.info
    +
    +# TODOs.org
    +/tasks-and-bugs.org
    +/tasks-and-bugs.html
    +/tasks-and-bugs.html~
    +/public/
    +
    +# Guile
    +*.go
    +/*.log
    +/tests/*.log
    +/tests/*.trs
    \ No newline at end of file
    diff --git a/bash/templates/AUTHORS b/bash/templates/AUTHORS
    new file mode 100644
    index 0000000..119be5e
    --- /dev/null
    +++ b/bash/templates/AUTHORS
    @@ -0,0 +1,2 @@
    +The AUTHORS file is auto-generated when releasing.
    +If you are seeing this, use 'git shortlog --summary --email' for a list of authors.
    diff --git a/bash/templates/COPYING b/bash/templates/COPYING
    new file mode 100644
    index 0000000..be3f7b2
    --- /dev/null
    +++ b/bash/templates/COPYING
    @@ -0,0 +1,661 @@
    +                    GNU AFFERO GENERAL PUBLIC LICENSE
    +                       Version 3, 19 November 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. 
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +                            Preamble
    +
    +  The GNU Affero General Public License is a free, copyleft license for
    +software and other kinds of works, specifically designed to ensure
    +cooperation with the community in the case of network server software.
    +
    +  The licenses for most software and other practical works are designed
    +to take away your freedom to share and change the works.  By contrast,
    +our General Public Licenses are intended to guarantee your freedom to
    +share and change all versions of a program--to make sure it remains free
    +software for all its users.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +them if you wish), that you receive source code or can get it if you
    +want it, that you can change the software or use pieces of it in new
    +free programs, and that you know you can do these things.
    +
    +  Developers that use our General Public Licenses protect your rights
    +with two steps: (1) assert copyright on the software, and (2) offer
    +you this License which gives you legal permission to copy, distribute
    +and/or modify the software.
    +
    +  A secondary benefit of defending all users' freedom is that
    +improvements made in alternate versions of the program, if they
    +receive widespread use, become available for other developers to
    +incorporate.  Many developers of free software are heartened and
    +encouraged by the resulting cooperation.  However, in the case of
    +software used on network servers, this result may fail to come about.
    +The GNU General Public License permits making a modified version and
    +letting the public access it on a server without ever releasing its
    +source code to the public.
    +
    +  The GNU Affero General Public License is designed specifically to
    +ensure that, in such cases, the modified source code becomes available
    +to the community.  It requires the operator of a network server to
    +provide the source code of the modified version running there to the
    +users of that server.  Therefore, public use of a modified version, on
    +a publicly accessible server, gives the public access to the source
    +code of the modified version.
    +
    +  An older license, called the Affero General Public License and
    +published by Affero, was designed to accomplish similar goals.  This is
    +a different license, not a version of the Affero GPL, but Affero has
    +released a new version of the Affero GPL which permits relicensing under
    +this license.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +                       TERMS AND CONDITIONS
    +
    +  0. Definitions.
    +
    +  "This License" refers to version 3 of the GNU Affero General Public License.
    +
    +  "Copyright" also means copyright-like laws that apply to other kinds of
    +works, such as semiconductor masks.
    +
    +  "The Program" refers to any copyrightable work licensed under this
    +License.  Each licensee is addressed as "you".  "Licensees" and
    +"recipients" may be individuals or organizations.
    +
    +  To "modify" a work means to copy from or adapt all or part of the work
    +in a fashion requiring copyright permission, other than the making of an
    +exact copy.  The resulting work is called a "modified version" of the
    +earlier work or a work "based on" the earlier work.
    +
    +  A "covered work" means either the unmodified Program or a work based
    +on the Program.
    +
    +  To "propagate" a work means to do anything with it that, without
    +permission, would make you directly or secondarily liable for
    +infringement under applicable copyright law, except executing it on a
    +computer or modifying a private copy.  Propagation includes copying,
    +distribution (with or without modification), making available to the
    +public, and in some countries other activities as well.
    +
    +  To "convey" a work means any kind of propagation that enables other
    +parties to make or receive copies.  Mere interaction with a user through
    +a computer network, with no transfer of a copy, is not conveying.
    +
    +  An interactive user interface displays "Appropriate Legal Notices"
    +to the extent that it includes a convenient and prominently visible
    +feature that (1) displays an appropriate copyright notice, and (2)
    +tells the user that there is no warranty for the work (except to the
    +extent that warranties are provided), that licensees may convey the
    +work under this License, and how to view a copy of this License.  If
    +the interface presents a list of user commands or options, such as a
    +menu, a prominent item in the list meets this criterion.
    +
    +  1. Source Code.
    +
    +  The "source code" for a work means the preferred form of the work
    +for making modifications to it.  "Object code" means any non-source
    +form of a work.
    +
    +  A "Standard Interface" means an interface that either is an official
    +standard defined by a recognized standards body, or, in the case of
    +interfaces specified for a particular programming language, one that
    +is widely used among developers working in that language.
    +
    +  The "System Libraries" of an executable work include anything, other
    +than the work as a whole, that (a) is included in the normal form of
    +packaging a Major Component, but which is not part of that Major
    +Component, and (b) serves only to enable use of the work with that
    +Major Component, or to implement a Standard Interface for which an
    +implementation is available to the public in source code form.  A
    +"Major Component", in this context, means a major essential component
    +(kernel, window system, and so on) of the specific operating system
    +(if any) on which the executable work runs, or a compiler used to
    +produce the work, or an object code interpreter used to run it.
    +
    +  The "Corresponding Source" for a work in object code form means all
    +the source code needed to generate, install, and (for an executable
    +work) run the object code and to modify the work, including scripts to
    +control those activities.  However, it does not include the work's
    +System Libraries, or general-purpose tools or generally available free
    +programs which are used unmodified in performing those activities but
    +which are not part of the work.  For example, Corresponding Source
    +includes interface definition files associated with source files for
    +the work, and the source code for shared libraries and dynamically
    +linked subprograms that the work is specifically designed to require,
    +such as by intimate data communication or control flow between those
    +subprograms and other parts of the work.
    +
    +  The Corresponding Source need not include anything that users
    +can regenerate automatically from other parts of the Corresponding
    +Source.
    +
    +  The Corresponding Source for a work in source code form is that
    +same work.
    +
    +  2. Basic Permissions.
    +
    +  All rights granted under this License are granted for the term of
    +copyright on the Program, and are irrevocable provided the stated
    +conditions are met.  This License explicitly affirms your unlimited
    +permission to run the unmodified Program.  The output from running a
    +covered work is covered by this License only if the output, given its
    +content, constitutes a covered work.  This License acknowledges your
    +rights of fair use or other equivalent, as provided by copyright law.
    +
    +  You may make, run and propagate covered works that you do not
    +convey, without conditions so long as your license otherwise remains
    +in force.  You may convey covered works to others for the sole purpose
    +of having them make modifications exclusively for you, or provide you
    +with facilities for running those works, provided that you comply with
    +the terms of this License in conveying all material for which you do
    +not control copyright.  Those thus making or running the covered works
    +for you must do so exclusively on your behalf, under your direction
    +and control, on terms that prohibit them from making any copies of
    +your copyrighted material outside their relationship with you.
    +
    +  Conveying under any other circumstances is permitted solely under
    +the conditions stated below.  Sublicensing is not allowed; section 10
    +makes it unnecessary.
    +
    +  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    +
    +  No covered work shall be deemed part of an effective technological
    +measure under any applicable law fulfilling obligations under article
    +11 of the WIPO copyright treaty adopted on 20 December 1996, or
    +similar laws prohibiting or restricting circumvention of such
    +measures.
    +
    +  When you convey a covered work, you waive any legal power to forbid
    +circumvention of technological measures to the extent such circumvention
    +is effected by exercising rights under this License with respect to
    +the covered work, and you disclaim any intention to limit operation or
    +modification of the work as a means of enforcing, against the work's
    +users, your or third parties' legal rights to forbid circumvention of
    +technological measures.
    +
    +  4. Conveying Verbatim Copies.
    +
    +  You may convey verbatim copies of the Program's source code as you
    +receive it, in any medium, provided that you conspicuously and
    +appropriately publish on each copy an appropriate copyright notice;
    +keep intact all notices stating that this License and any
    +non-permissive terms added in accord with section 7 apply to the code;
    +keep intact all notices of the absence of any warranty; and give all
    +recipients a copy of this License along with the Program.
    +
    +  You may charge any price or no price for each copy that you convey,
    +and you may offer support or warranty protection for a fee.
    +
    +  5. Conveying Modified Source Versions.
    +
    +  You may convey a work based on the Program, or the modifications to
    +produce it from the Program, in the form of source code under the
    +terms of section 4, provided that you also meet all of these conditions:
    +
    +    a) The work must carry prominent notices stating that you modified
    +    it, and giving a relevant date.
    +
    +    b) The work must carry prominent notices stating that it is
    +    released under this License and any conditions added under section
    +    7.  This requirement modifies the requirement in section 4 to
    +    "keep intact all notices".
    +
    +    c) You must license the entire work, as a whole, under this
    +    License to anyone who comes into possession of a copy.  This
    +    License will therefore apply, along with any applicable section 7
    +    additional terms, to the whole of the work, and all its parts,
    +    regardless of how they are packaged.  This License gives no
    +    permission to license the work in any other way, but it does not
    +    invalidate such permission if you have separately received it.
    +
    +    d) If the work has interactive user interfaces, each must display
    +    Appropriate Legal Notices; however, if the Program has interactive
    +    interfaces that do not display Appropriate Legal Notices, your
    +    work need not make them do so.
    +
    +  A compilation of a covered work with other separate and independent
    +works, which are not by their nature extensions of the covered work,
    +and which are not combined with it such as to form a larger program,
    +in or on a volume of a storage or distribution medium, is called an
    +"aggregate" if the compilation and its resulting copyright are not
    +used to limit the access or legal rights of the compilation's users
    +beyond what the individual works permit.  Inclusion of a covered work
    +in an aggregate does not cause this License to apply to the other
    +parts of the aggregate.
    +
    +  6. Conveying Non-Source Forms.
    +
    +  You may convey a covered work in object code form under the terms
    +of sections 4 and 5, provided that you also convey the
    +machine-readable Corresponding Source under the terms of this License,
    +in one of these ways:
    +
    +    a) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by the
    +    Corresponding Source fixed on a durable physical medium
    +    customarily used for software interchange.
    +
    +    b) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by a
    +    written offer, valid for at least three years and valid for as
    +    long as you offer spare parts or customer support for that product
    +    model, to give anyone who possesses the object code either (1) a
    +    copy of the Corresponding Source for all the software in the
    +    product that is covered by this License, on a durable physical
    +    medium customarily used for software interchange, for a price no
    +    more than your reasonable cost of physically performing this
    +    conveying of source, or (2) access to copy the
    +    Corresponding Source from a network server at no charge.
    +
    +    c) Convey individual copies of the object code with a copy of the
    +    written offer to provide the Corresponding Source.  This
    +    alternative is allowed only occasionally and noncommercially, and
    +    only if you received the object code with such an offer, in accord
    +    with subsection 6b.
    +
    +    d) Convey the object code by offering access from a designated
    +    place (gratis or for a charge), and offer equivalent access to the
    +    Corresponding Source in the same way through the same place at no
    +    further charge.  You need not require recipients to copy the
    +    Corresponding Source along with the object code.  If the place to
    +    copy the object code is a network server, the Corresponding Source
    +    may be on a different server (operated by you or a third party)
    +    that supports equivalent copying facilities, provided you maintain
    +    clear directions next to the object code saying where to find the
    +    Corresponding Source.  Regardless of what server hosts the
    +    Corresponding Source, you remain obligated to ensure that it is
    +    available for as long as needed to satisfy these requirements.
    +
    +    e) Convey the object code using peer-to-peer transmission, provided
    +    you inform other peers where the object code and Corresponding
    +    Source of the work are being offered to the general public at no
    +    charge under subsection 6d.
    +
    +  A separable portion of the object code, whose source code is excluded
    +from the Corresponding Source as a System Library, need not be
    +included in conveying the object code work.
    +
    +  A "User Product" is either (1) a "consumer product", which means any
    +tangible personal property which is normally used for personal, family,
    +or household purposes, or (2) anything designed or sold for incorporation
    +into a dwelling.  In determining whether a product is a consumer product,
    +doubtful cases shall be resolved in favor of coverage.  For a particular
    +product received by a particular user, "normally used" refers to a
    +typical or common use of that class of product, regardless of the status
    +of the particular user or of the way in which the particular user
    +actually uses, or expects or is expected to use, the product.  A product
    +is a consumer product regardless of whether the product has substantial
    +commercial, industrial or non-consumer uses, unless such uses represent
    +the only significant mode of use of the product.
    +
    +  "Installation Information" for a User Product means any methods,
    +procedures, authorization keys, or other information required to install
    +and execute modified versions of a covered work in that User Product from
    +a modified version of its Corresponding Source.  The information must
    +suffice to ensure that the continued functioning of the modified object
    +code is in no case prevented or interfered with solely because
    +modification has been made.
    +
    +  If you convey an object code work under this section in, or with, or
    +specifically for use in, a User Product, and the conveying occurs as
    +part of a transaction in which the right of possession and use of the
    +User Product is transferred to the recipient in perpetuity or for a
    +fixed term (regardless of how the transaction is characterized), the
    +Corresponding Source conveyed under this section must be accompanied
    +by the Installation Information.  But this requirement does not apply
    +if neither you nor any third party retains the ability to install
    +modified object code on the User Product (for example, the work has
    +been installed in ROM).
    +
    +  The requirement to provide Installation Information does not include a
    +requirement to continue to provide support service, warranty, or updates
    +for a work that has been modified or installed by the recipient, or for
    +the User Product in which it has been modified or installed.  Access to a
    +network may be denied when the modification itself materially and
    +adversely affects the operation of the network or violates the rules and
    +protocols for communication across the network.
    +
    +  Corresponding Source conveyed, and Installation Information provided,
    +in accord with this section must be in a format that is publicly
    +documented (and with an implementation available to the public in
    +source code form), and must require no special password or key for
    +unpacking, reading or copying.
    +
    +  7. Additional Terms.
    +
    +  "Additional permissions" are terms that supplement the terms of this
    +License by making exceptions from one or more of its conditions.
    +Additional permissions that are applicable to the entire Program shall
    +be treated as though they were included in this License, to the extent
    +that they are valid under applicable law.  If additional permissions
    +apply only to part of the Program, that part may be used separately
    +under those permissions, but the entire Program remains governed by
    +this License without regard to the additional permissions.
    +
    +  When you convey a copy of a covered work, you may at your option
    +remove any additional permissions from that copy, or from any part of
    +it.  (Additional permissions may be written to require their own
    +removal in certain cases when you modify the work.)  You may place
    +additional permissions on material, added by you to a covered work,
    +for which you have or can give appropriate copyright permission.
    +
    +  Notwithstanding any other provision of this License, for material you
    +add to a covered work, you may (if authorized by the copyright holders of
    +that material) supplement the terms of this License with terms:
    +
    +    a) Disclaiming warranty or limiting liability differently from the
    +    terms of sections 15 and 16 of this License; or
    +
    +    b) Requiring preservation of specified reasonable legal notices or
    +    author attributions in that material or in the Appropriate Legal
    +    Notices displayed by works containing it; or
    +
    +    c) Prohibiting misrepresentation of the origin of that material, or
    +    requiring that modified versions of such material be marked in
    +    reasonable ways as different from the original version; or
    +
    +    d) Limiting the use for publicity purposes of names of licensors or
    +    authors of the material; or
    +
    +    e) Declining to grant rights under trademark law for use of some
    +    trade names, trademarks, or service marks; or
    +
    +    f) Requiring indemnification of licensors and authors of that
    +    material by anyone who conveys the material (or modified versions of
    +    it) with contractual assumptions of liability to the recipient, for
    +    any liability that these contractual assumptions directly impose on
    +    those licensors and authors.
    +
    +  All other non-permissive additional terms are considered "further
    +restrictions" within the meaning of section 10.  If the Program as you
    +received it, or any part of it, contains a notice stating that it is
    +governed by this License along with a term that is a further
    +restriction, you may remove that term.  If a license document contains
    +a further restriction but permits relicensing or conveying under this
    +License, you may add to a covered work material governed by the terms
    +of that license document, provided that the further restriction does
    +not survive such relicensing or conveying.
    +
    +  If you add terms to a covered work in accord with this section, you
    +must place, in the relevant source files, a statement of the
    +additional terms that apply to those files, or a notice indicating
    +where to find the applicable terms.
    +
    +  Additional terms, permissive or non-permissive, may be stated in the
    +form of a separately written license, or stated as exceptions;
    +the above requirements apply either way.
    +
    +  8. Termination.
    +
    +  You may not propagate or modify a covered work except as expressly
    +provided under this License.  Any attempt otherwise to propagate or
    +modify it is void, and will automatically terminate your rights under
    +this License (including any patent licenses granted under the third
    +paragraph of section 11).
    +
    +  However, if you cease all violation of this License, then your
    +license from a particular copyright holder is reinstated (a)
    +provisionally, unless and until the copyright holder explicitly and
    +finally terminates your license, and (b) permanently, if the copyright
    +holder fails to notify you of the violation by some reasonable means
    +prior to 60 days after the cessation.
    +
    +  Moreover, your license from a particular copyright holder is
    +reinstated permanently if the copyright holder notifies you of the
    +violation by some reasonable means, this is the first time you have
    +received notice of violation of this License (for any work) from that
    +copyright holder, and you cure the violation prior to 30 days after
    +your receipt of the notice.
    +
    +  Termination of your rights under this section does not terminate the
    +licenses of parties who have received copies or rights from you under
    +this License.  If your rights have been terminated and not permanently
    +reinstated, you do not qualify to receive new licenses for the same
    +material under section 10.
    +
    +  9. Acceptance Not Required for Having Copies.
    +
    +  You are not required to accept this License in order to receive or
    +run a copy of the Program.  Ancillary propagation of a covered work
    +occurring solely as a consequence of using peer-to-peer transmission
    +to receive a copy likewise does not require acceptance.  However,
    +nothing other than this License grants you permission to propagate or
    +modify any covered work.  These actions infringe copyright if you do
    +not accept this License.  Therefore, by modifying or propagating a
    +covered work, you indicate your acceptance of this License to do so.
    +
    +  10. Automatic Licensing of Downstream Recipients.
    +
    +  Each time you convey a covered work, the recipient automatically
    +receives a license from the original licensors, to run, modify and
    +propagate that work, subject to this License.  You are not responsible
    +for enforcing compliance by third parties with this License.
    +
    +  An "entity transaction" is a transaction transferring control of an
    +organization, or substantially all assets of one, or subdividing an
    +organization, or merging organizations.  If propagation of a covered
    +work results from an entity transaction, each party to that
    +transaction who receives a copy of the work also receives whatever
    +licenses to the work the party's predecessor in interest had or could
    +give under the previous paragraph, plus a right to possession of the
    +Corresponding Source of the work from the predecessor in interest, if
    +the predecessor has it or can get it with reasonable efforts.
    +
    +  You may not impose any further restrictions on the exercise of the
    +rights granted or affirmed under this License.  For example, you may
    +not impose a license fee, royalty, or other charge for exercise of
    +rights granted under this License, and you may not initiate litigation
    +(including a cross-claim or counterclaim in a lawsuit) alleging that
    +any patent claim is infringed by making, using, selling, offering for
    +sale, or importing the Program or any portion of it.
    +
    +  11. Patents.
    +
    +  A "contributor" is a copyright holder who authorizes use under this
    +License of the Program or a work on which the Program is based.  The
    +work thus licensed is called the contributor's "contributor version".
    +
    +  A contributor's "essential patent claims" are all patent claims
    +owned or controlled by the contributor, whether already acquired or
    +hereafter acquired, that would be infringed by some manner, permitted
    +by this License, of making, using, or selling its contributor version,
    +but do not include claims that would be infringed only as a
    +consequence of further modification of the contributor version.  For
    +purposes of this definition, "control" includes the right to grant
    +patent sublicenses in a manner consistent with the requirements of
    +this License.
    +
    +  Each contributor grants you a non-exclusive, worldwide, royalty-free
    +patent license under the contributor's essential patent claims, to
    +make, use, sell, offer for sale, import and otherwise run, modify and
    +propagate the contents of its contributor version.
    +
    +  In the following three paragraphs, a "patent license" is any express
    +agreement or commitment, however denominated, not to enforce a patent
    +(such as an express permission to practice a patent or covenant not to
    +sue for patent infringement).  To "grant" such a patent license to a
    +party means to make such an agreement or commitment not to enforce a
    +patent against the party.
    +
    +  If you convey a covered work, knowingly relying on a patent license,
    +and the Corresponding Source of the work is not available for anyone
    +to copy, free of charge and under the terms of this License, through a
    +publicly available network server or other readily accessible means,
    +then you must either (1) cause the Corresponding Source to be so
    +available, or (2) arrange to deprive yourself of the benefit of the
    +patent license for this particular work, or (3) arrange, in a manner
    +consistent with the requirements of this License, to extend the patent
    +license to downstream recipients.  "Knowingly relying" means you have
    +actual knowledge that, but for the patent license, your conveying the
    +covered work in a country, or your recipient's use of the covered work
    +in a country, would infringe one or more identifiable patents in that
    +country that you have reason to believe are valid.
    +
    +  If, pursuant to or in connection with a single transaction or
    +arrangement, you convey, or propagate by procuring conveyance of, a
    +covered work, and grant a patent license to some of the parties
    +receiving the covered work authorizing them to use, propagate, modify
    +or convey a specific copy of the covered work, then the patent license
    +you grant is automatically extended to all recipients of the covered
    +work and works based on it.
    +
    +  A patent license is "discriminatory" if it does not include within
    +the scope of its coverage, prohibits the exercise of, or is
    +conditioned on the non-exercise of one or more of the rights that are
    +specifically granted under this License.  You may not convey a covered
    +work if you are a party to an arrangement with a third party that is
    +in the business of distributing software, under which you make payment
    +to the third party based on the extent of your activity of conveying
    +the work, and under which the third party grants, to any of the
    +parties who would receive the covered work from you, a discriminatory
    +patent license (a) in connection with copies of the covered work
    +conveyed by you (or copies made from those copies), or (b) primarily
    +for and in connection with specific products or compilations that
    +contain the covered work, unless you entered into that arrangement,
    +or that patent license was granted, prior to 28 March 2007.
    +
    +  Nothing in this License shall be construed as excluding or limiting
    +any implied license or other defenses to infringement that may
    +otherwise be available to you under applicable patent law.
    +
    +  12. No Surrender of Others' Freedom.
    +
    +  If conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot convey a
    +covered work so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you may
    +not convey it at all.  For example, if you agree to terms that obligate you
    +to collect a royalty for further conveying from those to whom you convey
    +the Program, the only way you could satisfy both those terms and this
    +License would be to refrain entirely from conveying the Program.
    +
    +  13. Remote Network Interaction; Use with the GNU General Public License.
    +
    +  Notwithstanding any other provision of this License, if you modify the
    +Program, your modified version must prominently offer all users
    +interacting with it remotely through a computer network (if your version
    +supports such interaction) an opportunity to receive the Corresponding
    +Source of your version by providing access to the Corresponding Source
    +from a network server at no charge, through some standard or customary
    +means of facilitating copying of software.  This Corresponding Source
    +shall include the Corresponding Source for any work covered by version 3
    +of the GNU General Public License that is incorporated pursuant to the
    +following paragraph.
    +
    +  Notwithstanding any other provision of this License, you have
    +permission to link or combine any covered work with a work licensed
    +under version 3 of the GNU General Public License into a single
    +combined work, and to convey the resulting work.  The terms of this
    +License will continue to apply to the part which is the covered work,
    +but the work with which it is combined will remain governed by version
    +3 of the GNU General Public License.
    +
    +  14. Revised Versions of this License.
    +
    +  The Free Software Foundation may publish revised and/or new versions of
    +the GNU Affero General Public License from time to time.  Such new versions
    +will be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +  Each version is given a distinguishing version number.  If the
    +Program specifies that a certain numbered version of the GNU Affero General
    +Public License "or any later version" applies to it, you have the
    +option of following the terms and conditions either of that numbered
    +version or of any later version published by the Free Software
    +Foundation.  If the Program does not specify a version number of the
    +GNU Affero General Public License, you may choose any version ever published
    +by the Free Software Foundation.
    +
    +  If the Program specifies that a proxy can decide which future
    +versions of the GNU Affero General Public License can be used, that proxy's
    +public statement of acceptance of a version permanently authorizes you
    +to choose that version for the Program.
    +
    +  Later license versions may give you additional or different
    +permissions.  However, no additional obligations are imposed on any
    +author or copyright holder as a result of your choosing to follow a
    +later version.
    +
    +  15. Disclaimer of Warranty.
    +
    +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    +IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. Limitation of Liability.
    +
    +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGES.
    +
    +  17. Interpretation of Sections 15 and 16.
    +
    +  If the disclaimer of warranty and limitation of liability provided
    +above cannot be given local legal effect according to their terms,
    +reviewing courts shall apply local law that most closely approximates
    +an absolute waiver of all civil liability in connection with the
    +Program, unless a warranty or assumption of liability accompanies a
    +copy of the Program in return for a fee.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +            How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +state the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C)   
    +
    +    This program is free software: you can redistribute it and/or modify
    +    it under the terms of the GNU Affero General Public License as published by
    +    the Free Software Foundation, either version 3 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU Affero General Public License for more details.
    +
    +    You should have received a copy of the GNU Affero General Public License
    +    along with this program.  If not, see .
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +  If your software can interact with users remotely through a computer
    +network, you should also make sure that it provides a way for users to
    +get its source.  For example, if your program is a web application, its
    +interface could display a "Source" link that leads users to an archive
    +of the code.  There are many ways you could offer source, and different
    +solutions will be better for different programs; see section 13 for the
    +specific requirements.
    +
    +  You should also get your employer (if you work as a programmer) or school,
    +if any, to sign a "copyright disclaimer" for the program, if necessary.
    +For more information on this, and how to apply and follow the GNU AGPL, see
    +.
    diff --git a/bash/templates/ChangeLog b/bash/templates/ChangeLog
    new file mode 100644
    index 0000000..9001919
    --- /dev/null
    +++ b/bash/templates/ChangeLog
    @@ -0,0 +1,2 @@
    +The ChangeLog file is auto-generated when releasing.
    +If you are seeing this, use 'git log' for a detailed list of changes.
    diff --git a/bash/templates/HACKING b/bash/templates/HACKING
    new file mode 100644
    index 0000000..090c33f
    --- /dev/null
    +++ b/bash/templates/HACKING
    @@ -0,0 +1,5 @@
    +See the manual for useful hacking information, either by running
    +
    +  info -f doc/$PROJECT.info "Contributing"
    +
    +or by checking the web copy of the manual: https://$PROJECT.euandreh.xyz/Contributing.html
    diff --git a/bash/templates/INSTALL b/bash/templates/INSTALL
    new file mode 100644
    index 0000000..8865734
    --- /dev/null
    +++ b/bash/templates/INSTALL
    @@ -0,0 +1,368 @@
    +Installation Instructions
    +*************************
    +
    +   Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
    +Foundation, Inc.
    +
    +   Copying and distribution of this file, with or without modification,
    +are permitted in any medium without royalty provided the copyright
    +notice and this notice are preserved.  This file is offered as-is,
    +without warranty of any kind.
    +
    +Basic Installation
    +==================
    +
    +   Briefly, the shell command './configure && make && make install'
    +should configure, build, and install this package.  The following
    +more-detailed instructions are generic; see the 'README' file for
    +instructions specific to this package.  Some packages provide this
    +'INSTALL' file but do not implement all of the features documented
    +below.  The lack of an optional feature in a given package is not
    +necessarily a bug.  More recommendations for GNU packages can be found
    +in *note Makefile Conventions: (standards)Makefile Conventions.
    +
    +   The 'configure' shell script attempts to guess correct values for
    +various system-dependent variables used during compilation.  It uses
    +those values to create a 'Makefile' in each directory of the package.
    +It may also create one or more '.h' files containing system-dependent
    +definitions.  Finally, it creates a shell script 'config.status' that
    +you can run in the future to recreate the current configuration, and a
    +file 'config.log' containing compiler output (useful mainly for
    +debugging 'configure').
    +
    +   It can also use an optional file (typically called 'config.cache' and
    +enabled with '--cache-file=config.cache' or simply '-C') that saves the
    +results of its tests to speed up reconfiguring.  Caching is disabled by
    +default to prevent problems with accidental use of stale cache files.
    +
    +   If you need to do unusual things to compile the package, please try
    +to figure out how 'configure' could check whether to do them, and mail
    +diffs or instructions to the address given in the 'README' so they can
    +be considered for the next release.  If you are using the cache, and at
    +some point 'config.cache' contains results you don't want to keep, you
    +may remove or edit it.
    +
    +   The file 'configure.ac' (or 'configure.in') is used to create
    +'configure' by a program called 'autoconf'.  You need 'configure.ac' if
    +you want to change it or regenerate 'configure' using a newer version of
    +'autoconf'.
    +
    +   The simplest way to compile this package is:
    +
    +  1. 'cd' to the directory containing the package's source code and type
    +     './configure' to configure the package for your system.
    +
    +     Running 'configure' might take a while.  While running, it prints
    +     some messages telling which features it is checking for.
    +
    +  2. Type 'make' to compile the package.
    +
    +  3. Optionally, type 'make check' to run any self-tests that come with
    +     the package, generally using the just-built uninstalled binaries.
    +
    +  4. Type 'make install' to install the programs and any data files and
    +     documentation.  When installing into a prefix owned by root, it is
    +     recommended that the package be configured and built as a regular
    +     user, and only the 'make install' phase executed with root
    +     privileges.
    +
    +  5. Optionally, type 'make installcheck' to repeat any self-tests, but
    +     this time using the binaries in their final installed location.
    +     This target does not install anything.  Running this target as a
    +     regular user, particularly if the prior 'make install' required
    +     root privileges, verifies that the installation completed
    +     correctly.
    +
    +  6. You can remove the program binaries and object files from the
    +     source code directory by typing 'make clean'.  To also remove the
    +     files that 'configure' created (so you can compile the package for
    +     a different kind of computer), type 'make distclean'.  There is
    +     also a 'make maintainer-clean' target, but that is intended mainly
    +     for the package's developers.  If you use it, you may have to get
    +     all sorts of other programs in order to regenerate files that came
    +     with the distribution.
    +
    +  7. Often, you can also type 'make uninstall' to remove the installed
    +     files again.  In practice, not all packages have tested that
    +     uninstallation works correctly, even though it is required by the
    +     GNU Coding Standards.
    +
    +  8. Some packages, particularly those that use Automake, provide 'make
    +     distcheck', which can by used by developers to test that all other
    +     targets like 'make install' and 'make uninstall' work correctly.
    +     This target is generally not run by end users.
    +
    +Compilers and Options
    +=====================
    +
    +   Some systems require unusual options for compilation or linking that
    +the 'configure' script does not know about.  Run './configure --help'
    +for details on some of the pertinent environment variables.
    +
    +   You can give 'configure' initial values for configuration parameters
    +by setting variables in the command line or in the environment.  Here is
    +an example:
    +
    +     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
    +
    +   *Note Defining Variables::, for more details.
    +
    +Compiling For Multiple Architectures
    +====================================
    +
    +   You can compile the package for more than one kind of computer at the
    +same time, by placing the object files for each architecture in their
    +own directory.  To do this, you can use GNU 'make'.  'cd' to the
    +directory where you want the object files and executables to go and run
    +the 'configure' script.  'configure' automatically checks for the source
    +code in the directory that 'configure' is in and in '..'.  This is known
    +as a "VPATH" build.
    +
    +   With a non-GNU 'make', it is safer to compile the package for one
    +architecture at a time in the source code directory.  After you have
    +installed the package for one architecture, use 'make distclean' before
    +reconfiguring for another architecture.
    +
    +   On MacOS X 10.5 and later systems, you can create libraries and
    +executables that work on multiple system types--known as "fat" or
    +"universal" binaries--by specifying multiple '-arch' options to the
    +compiler but only a single '-arch' option to the preprocessor.  Like
    +this:
    +
    +     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
    +                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
    +                 CPP="gcc -E" CXXCPP="g++ -E"
    +
    +   This is not guaranteed to produce working output in all cases, you
    +may have to build one architecture at a time and combine the results
    +using the 'lipo' tool if you have problems.
    +
    +Installation Names
    +==================
    +
    +   By default, 'make install' installs the package's commands under
    +'/usr/local/bin', include files under '/usr/local/include', etc.  You
    +can specify an installation prefix other than '/usr/local' by giving
    +'configure' the option '--prefix=PREFIX', where PREFIX must be an
    +absolute file name.
    +
    +   You can specify separate installation prefixes for
    +architecture-specific files and architecture-independent files.  If you
    +pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
    +PREFIX as the prefix for installing programs and libraries.
    +Documentation and other data files still use the regular prefix.
    +
    +   In addition, if you use an unusual directory layout you can give
    +options like '--bindir=DIR' to specify different values for particular
    +kinds of files.  Run 'configure --help' for a list of the directories
    +you can set and what kinds of files go in them.  In general, the default
    +for these options is expressed in terms of '${prefix}', so that
    +specifying just '--prefix' will affect all of the other directory
    +specifications that were not explicitly provided.
    +
    +   The most portable way to affect installation locations is to pass the
    +correct locations to 'configure'; however, many packages provide one or
    +both of the following shortcuts of passing variable assignments to the
    +'make install' command line to change installation locations without
    +having to reconfigure or recompile.
    +
    +   The first method involves providing an override variable for each
    +affected directory.  For example, 'make install
    +prefix=/alternate/directory' will choose an alternate location for all
    +directory configuration variables that were expressed in terms of
    +'${prefix}'.  Any directories that were specified during 'configure',
    +but not in terms of '${prefix}', must each be overridden at install time
    +for the entire installation to be relocated.  The approach of makefile
    +variable overrides for each directory variable is required by the GNU
    +Coding Standards, and ideally causes no recompilation.  However, some
    +platforms have known limitations with the semantics of shared libraries
    +that end up requiring recompilation when using this method, particularly
    +noticeable in packages that use GNU Libtool.
    +
    +   The second method involves providing the 'DESTDIR' variable.  For
    +example, 'make install DESTDIR=/alternate/directory' will prepend
    +'/alternate/directory' before all installation names.  The approach of
    +'DESTDIR' overrides is not required by the GNU Coding Standards, and
    +does not work on platforms that have drive letters.  On the other hand,
    +it does better at avoiding recompilation issues, and works well even
    +when some directory options were not specified in terms of '${prefix}'
    +at 'configure' time.
    +
    +Optional Features
    +=================
    +
    +   If the package supports it, you can cause programs to be installed
    +with an extra prefix or suffix on their names by giving 'configure' the
    +option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
    +
    +   Some packages pay attention to '--enable-FEATURE' options to
    +'configure', where FEATURE indicates an optional part of the package.
    +They may also pay attention to '--with-PACKAGE' options, where PACKAGE
    +is something like 'gnu-as' or 'x' (for the X Window System).  The
    +'README' should mention any '--enable-' and '--with-' options that the
    +package recognizes.
    +
    +   For packages that use the X Window System, 'configure' can usually
    +find the X include and library files automatically, but if it doesn't,
    +you can use the 'configure' options '--x-includes=DIR' and
    +'--x-libraries=DIR' to specify their locations.
    +
    +   Some packages offer the ability to configure how verbose the
    +execution of 'make' will be.  For these packages, running './configure
    +--enable-silent-rules' sets the default to minimal output, which can be
    +overridden with 'make V=1'; while running './configure
    +--disable-silent-rules' sets the default to verbose, which can be
    +overridden with 'make V=0'.
    +
    +Particular systems
    +==================
    +
    +   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC
    +is not installed, it is recommended to use the following options in
    +order to use an ANSI C compiler:
    +
    +     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
    +
    +and if that doesn't work, install pre-built binaries of GCC for HP-UX.
    +
    +   HP-UX 'make' updates targets which have the same time stamps as their
    +prerequisites, which makes it generally unusable when shipped generated
    +files such as 'configure' are involved.  Use GNU 'make' instead.
    +
    +   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
    +parse its '' header file.  The option '-nodtk' can be used as a
    +workaround.  If GNU CC is not installed, it is therefore recommended to
    +try
    +
    +     ./configure CC="cc"
    +
    +and if that doesn't work, try
    +
    +     ./configure CC="cc -nodtk"
    +
    +   On Solaris, don't put '/usr/ucb' early in your 'PATH'.  This
    +directory contains several dysfunctional programs; working variants of
    +these programs are available in '/usr/bin'.  So, if you need '/usr/ucb'
    +in your 'PATH', put it _after_ '/usr/bin'.
    +
    +   On Haiku, software installed for all users goes in '/boot/common',
    +not '/usr/local'.  It is recommended to use the following options:
    +
    +     ./configure --prefix=/boot/common
    +
    +Specifying the System Type
    +==========================
    +
    +   There may be some features 'configure' cannot figure out
    +automatically, but needs to determine by the type of machine the package
    +will run on.  Usually, assuming the package is built to be run on the
    +_same_ architectures, 'configure' can figure that out, but if it prints
    +a message saying it cannot guess the machine type, give it the
    +'--build=TYPE' option.  TYPE can either be a short name for the system
    +type, such as 'sun4', or a canonical name which has the form:
    +
    +     CPU-COMPANY-SYSTEM
    +
    +where SYSTEM can have one of these forms:
    +
    +     OS
    +     KERNEL-OS
    +
    +   See the file 'config.sub' for the possible values of each field.  If
    +'config.sub' isn't included in this package, then this package doesn't
    +need to know the machine type.
    +
    +   If you are _building_ compiler tools for cross-compiling, you should
    +use the option '--target=TYPE' to select the type of system they will
    +produce code for.
    +
    +   If you want to _use_ a cross compiler, that generates code for a
    +platform different from the build platform, you should specify the
    +"host" platform (i.e., that on which the generated programs will
    +eventually be run) with '--host=TYPE'.
    +
    +Sharing Defaults
    +================
    +
    +   If you want to set default values for 'configure' scripts to share,
    +you can create a site shell script called 'config.site' that gives
    +default values for variables like 'CC', 'cache_file', and 'prefix'.
    +'configure' looks for 'PREFIX/share/config.site' if it exists, then
    +'PREFIX/etc/config.site' if it exists.  Or, you can set the
    +'CONFIG_SITE' environment variable to the location of the site script.
    +A warning: not all 'configure' scripts look for a site script.
    +
    +Defining Variables
    +==================
    +
    +   Variables not defined in a site shell script can be set in the
    +environment passed to 'configure'.  However, some packages may run
    +configure again during the build, and the customized values of these
    +variables may be lost.  In order to avoid this problem, you should set
    +them in the 'configure' command line, using 'VAR=value'.  For example:
    +
    +     ./configure CC=/usr/local2/bin/gcc
    +
    +causes the specified 'gcc' to be used as the C compiler (unless it is
    +overridden in the site shell script).
    +
    +Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
    +Autoconf limitation.  Until the limitation is lifted, you can use this
    +workaround:
    +
    +     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
    +
    +'configure' Invocation
    +======================
    +
    +   'configure' recognizes the following options to control how it
    +operates.
    +
    +'--help'
    +'-h'
    +     Print a summary of all of the options to 'configure', and exit.
    +
    +'--help=short'
    +'--help=recursive'
    +     Print a summary of the options unique to this package's
    +     'configure', and exit.  The 'short' variant lists options used only
    +     in the top level, while the 'recursive' variant lists options also
    +     present in any nested packages.
    +
    +'--version'
    +'-V'
    +     Print the version of Autoconf used to generate the 'configure'
    +     script, and exit.
    +
    +'--cache-file=FILE'
    +     Enable the cache: use and save the results of the tests in FILE,
    +     traditionally 'config.cache'.  FILE defaults to '/dev/null' to
    +     disable caching.
    +
    +'--config-cache'
    +'-C'
    +     Alias for '--cache-file=config.cache'.
    +
    +'--quiet'
    +'--silent'
    +'-q'
    +     Do not print messages saying which checks are being made.  To
    +     suppress all normal output, redirect it to '/dev/null' (any error
    +     messages will still be shown).
    +
    +'--srcdir=DIR'
    +     Look for the package's source code in directory DIR.  Usually
    +     'configure' can determine that directory automatically.
    +
    +'--prefix=DIR'
    +     Use DIR as the installation prefix.  *note Installation Names:: for
    +     more details, including other options available for fine-tuning the
    +     installation locations.
    +
    +'--no-create'
    +'-n'
    +     Run the configure checks, but stop before creating any output
    +     files.
    +
    +'configure' also accepts some other, not widely useful, options.  Run
    +'configure --help' for more details.
    diff --git a/bash/templates/LICENSE b/bash/templates/LICENSE
    deleted file mode 100644
    index be3f7b2..0000000
    --- a/bash/templates/LICENSE
    +++ /dev/null
    @@ -1,661 +0,0 @@
    -                    GNU AFFERO GENERAL PUBLIC LICENSE
    -                       Version 3, 19 November 2007
    -
    - Copyright (C) 2007 Free Software Foundation, Inc. 
    - Everyone is permitted to copy and distribute verbatim copies
    - of this license document, but changing it is not allowed.
    -
    -                            Preamble
    -
    -  The GNU Affero General Public License is a free, copyleft license for
    -software and other kinds of works, specifically designed to ensure
    -cooperation with the community in the case of network server software.
    -
    -  The licenses for most software and other practical works are designed
    -to take away your freedom to share and change the works.  By contrast,
    -our General Public Licenses are intended to guarantee your freedom to
    -share and change all versions of a program--to make sure it remains free
    -software for all its users.
    -
    -  When we speak of free software, we are referring to freedom, not
    -price.  Our General Public Licenses are designed to make sure that you
    -have the freedom to distribute copies of free software (and charge for
    -them if you wish), that you receive source code or can get it if you
    -want it, that you can change the software or use pieces of it in new
    -free programs, and that you know you can do these things.
    -
    -  Developers that use our General Public Licenses protect your rights
    -with two steps: (1) assert copyright on the software, and (2) offer
    -you this License which gives you legal permission to copy, distribute
    -and/or modify the software.
    -
    -  A secondary benefit of defending all users' freedom is that
    -improvements made in alternate versions of the program, if they
    -receive widespread use, become available for other developers to
    -incorporate.  Many developers of free software are heartened and
    -encouraged by the resulting cooperation.  However, in the case of
    -software used on network servers, this result may fail to come about.
    -The GNU General Public License permits making a modified version and
    -letting the public access it on a server without ever releasing its
    -source code to the public.
    -
    -  The GNU Affero General Public License is designed specifically to
    -ensure that, in such cases, the modified source code becomes available
    -to the community.  It requires the operator of a network server to
    -provide the source code of the modified version running there to the
    -users of that server.  Therefore, public use of a modified version, on
    -a publicly accessible server, gives the public access to the source
    -code of the modified version.
    -
    -  An older license, called the Affero General Public License and
    -published by Affero, was designed to accomplish similar goals.  This is
    -a different license, not a version of the Affero GPL, but Affero has
    -released a new version of the Affero GPL which permits relicensing under
    -this license.
    -
    -  The precise terms and conditions for copying, distribution and
    -modification follow.
    -
    -                       TERMS AND CONDITIONS
    -
    -  0. Definitions.
    -
    -  "This License" refers to version 3 of the GNU Affero General Public License.
    -
    -  "Copyright" also means copyright-like laws that apply to other kinds of
    -works, such as semiconductor masks.
    -
    -  "The Program" refers to any copyrightable work licensed under this
    -License.  Each licensee is addressed as "you".  "Licensees" and
    -"recipients" may be individuals or organizations.
    -
    -  To "modify" a work means to copy from or adapt all or part of the work
    -in a fashion requiring copyright permission, other than the making of an
    -exact copy.  The resulting work is called a "modified version" of the
    -earlier work or a work "based on" the earlier work.
    -
    -  A "covered work" means either the unmodified Program or a work based
    -on the Program.
    -
    -  To "propagate" a work means to do anything with it that, without
    -permission, would make you directly or secondarily liable for
    -infringement under applicable copyright law, except executing it on a
    -computer or modifying a private copy.  Propagation includes copying,
    -distribution (with or without modification), making available to the
    -public, and in some countries other activities as well.
    -
    -  To "convey" a work means any kind of propagation that enables other
    -parties to make or receive copies.  Mere interaction with a user through
    -a computer network, with no transfer of a copy, is not conveying.
    -
    -  An interactive user interface displays "Appropriate Legal Notices"
    -to the extent that it includes a convenient and prominently visible
    -feature that (1) displays an appropriate copyright notice, and (2)
    -tells the user that there is no warranty for the work (except to the
    -extent that warranties are provided), that licensees may convey the
    -work under this License, and how to view a copy of this License.  If
    -the interface presents a list of user commands or options, such as a
    -menu, a prominent item in the list meets this criterion.
    -
    -  1. Source Code.
    -
    -  The "source code" for a work means the preferred form of the work
    -for making modifications to it.  "Object code" means any non-source
    -form of a work.
    -
    -  A "Standard Interface" means an interface that either is an official
    -standard defined by a recognized standards body, or, in the case of
    -interfaces specified for a particular programming language, one that
    -is widely used among developers working in that language.
    -
    -  The "System Libraries" of an executable work include anything, other
    -than the work as a whole, that (a) is included in the normal form of
    -packaging a Major Component, but which is not part of that Major
    -Component, and (b) serves only to enable use of the work with that
    -Major Component, or to implement a Standard Interface for which an
    -implementation is available to the public in source code form.  A
    -"Major Component", in this context, means a major essential component
    -(kernel, window system, and so on) of the specific operating system
    -(if any) on which the executable work runs, or a compiler used to
    -produce the work, or an object code interpreter used to run it.
    -
    -  The "Corresponding Source" for a work in object code form means all
    -the source code needed to generate, install, and (for an executable
    -work) run the object code and to modify the work, including scripts to
    -control those activities.  However, it does not include the work's
    -System Libraries, or general-purpose tools or generally available free
    -programs which are used unmodified in performing those activities but
    -which are not part of the work.  For example, Corresponding Source
    -includes interface definition files associated with source files for
    -the work, and the source code for shared libraries and dynamically
    -linked subprograms that the work is specifically designed to require,
    -such as by intimate data communication or control flow between those
    -subprograms and other parts of the work.
    -
    -  The Corresponding Source need not include anything that users
    -can regenerate automatically from other parts of the Corresponding
    -Source.
    -
    -  The Corresponding Source for a work in source code form is that
    -same work.
    -
    -  2. Basic Permissions.
    -
    -  All rights granted under this License are granted for the term of
    -copyright on the Program, and are irrevocable provided the stated
    -conditions are met.  This License explicitly affirms your unlimited
    -permission to run the unmodified Program.  The output from running a
    -covered work is covered by this License only if the output, given its
    -content, constitutes a covered work.  This License acknowledges your
    -rights of fair use or other equivalent, as provided by copyright law.
    -
    -  You may make, run and propagate covered works that you do not
    -convey, without conditions so long as your license otherwise remains
    -in force.  You may convey covered works to others for the sole purpose
    -of having them make modifications exclusively for you, or provide you
    -with facilities for running those works, provided that you comply with
    -the terms of this License in conveying all material for which you do
    -not control copyright.  Those thus making or running the covered works
    -for you must do so exclusively on your behalf, under your direction
    -and control, on terms that prohibit them from making any copies of
    -your copyrighted material outside their relationship with you.
    -
    -  Conveying under any other circumstances is permitted solely under
    -the conditions stated below.  Sublicensing is not allowed; section 10
    -makes it unnecessary.
    -
    -  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    -
    -  No covered work shall be deemed part of an effective technological
    -measure under any applicable law fulfilling obligations under article
    -11 of the WIPO copyright treaty adopted on 20 December 1996, or
    -similar laws prohibiting or restricting circumvention of such
    -measures.
    -
    -  When you convey a covered work, you waive any legal power to forbid
    -circumvention of technological measures to the extent such circumvention
    -is effected by exercising rights under this License with respect to
    -the covered work, and you disclaim any intention to limit operation or
    -modification of the work as a means of enforcing, against the work's
    -users, your or third parties' legal rights to forbid circumvention of
    -technological measures.
    -
    -  4. Conveying Verbatim Copies.
    -
    -  You may convey verbatim copies of the Program's source code as you
    -receive it, in any medium, provided that you conspicuously and
    -appropriately publish on each copy an appropriate copyright notice;
    -keep intact all notices stating that this License and any
    -non-permissive terms added in accord with section 7 apply to the code;
    -keep intact all notices of the absence of any warranty; and give all
    -recipients a copy of this License along with the Program.
    -
    -  You may charge any price or no price for each copy that you convey,
    -and you may offer support or warranty protection for a fee.
    -
    -  5. Conveying Modified Source Versions.
    -
    -  You may convey a work based on the Program, or the modifications to
    -produce it from the Program, in the form of source code under the
    -terms of section 4, provided that you also meet all of these conditions:
    -
    -    a) The work must carry prominent notices stating that you modified
    -    it, and giving a relevant date.
    -
    -    b) The work must carry prominent notices stating that it is
    -    released under this License and any conditions added under section
    -    7.  This requirement modifies the requirement in section 4 to
    -    "keep intact all notices".
    -
    -    c) You must license the entire work, as a whole, under this
    -    License to anyone who comes into possession of a copy.  This
    -    License will therefore apply, along with any applicable section 7
    -    additional terms, to the whole of the work, and all its parts,
    -    regardless of how they are packaged.  This License gives no
    -    permission to license the work in any other way, but it does not
    -    invalidate such permission if you have separately received it.
    -
    -    d) If the work has interactive user interfaces, each must display
    -    Appropriate Legal Notices; however, if the Program has interactive
    -    interfaces that do not display Appropriate Legal Notices, your
    -    work need not make them do so.
    -
    -  A compilation of a covered work with other separate and independent
    -works, which are not by their nature extensions of the covered work,
    -and which are not combined with it such as to form a larger program,
    -in or on a volume of a storage or distribution medium, is called an
    -"aggregate" if the compilation and its resulting copyright are not
    -used to limit the access or legal rights of the compilation's users
    -beyond what the individual works permit.  Inclusion of a covered work
    -in an aggregate does not cause this License to apply to the other
    -parts of the aggregate.
    -
    -  6. Conveying Non-Source Forms.
    -
    -  You may convey a covered work in object code form under the terms
    -of sections 4 and 5, provided that you also convey the
    -machine-readable Corresponding Source under the terms of this License,
    -in one of these ways:
    -
    -    a) Convey the object code in, or embodied in, a physical product
    -    (including a physical distribution medium), accompanied by the
    -    Corresponding Source fixed on a durable physical medium
    -    customarily used for software interchange.
    -
    -    b) Convey the object code in, or embodied in, a physical product
    -    (including a physical distribution medium), accompanied by a
    -    written offer, valid for at least three years and valid for as
    -    long as you offer spare parts or customer support for that product
    -    model, to give anyone who possesses the object code either (1) a
    -    copy of the Corresponding Source for all the software in the
    -    product that is covered by this License, on a durable physical
    -    medium customarily used for software interchange, for a price no
    -    more than your reasonable cost of physically performing this
    -    conveying of source, or (2) access to copy the
    -    Corresponding Source from a network server at no charge.
    -
    -    c) Convey individual copies of the object code with a copy of the
    -    written offer to provide the Corresponding Source.  This
    -    alternative is allowed only occasionally and noncommercially, and
    -    only if you received the object code with such an offer, in accord
    -    with subsection 6b.
    -
    -    d) Convey the object code by offering access from a designated
    -    place (gratis or for a charge), and offer equivalent access to the
    -    Corresponding Source in the same way through the same place at no
    -    further charge.  You need not require recipients to copy the
    -    Corresponding Source along with the object code.  If the place to
    -    copy the object code is a network server, the Corresponding Source
    -    may be on a different server (operated by you or a third party)
    -    that supports equivalent copying facilities, provided you maintain
    -    clear directions next to the object code saying where to find the
    -    Corresponding Source.  Regardless of what server hosts the
    -    Corresponding Source, you remain obligated to ensure that it is
    -    available for as long as needed to satisfy these requirements.
    -
    -    e) Convey the object code using peer-to-peer transmission, provided
    -    you inform other peers where the object code and Corresponding
    -    Source of the work are being offered to the general public at no
    -    charge under subsection 6d.
    -
    -  A separable portion of the object code, whose source code is excluded
    -from the Corresponding Source as a System Library, need not be
    -included in conveying the object code work.
    -
    -  A "User Product" is either (1) a "consumer product", which means any
    -tangible personal property which is normally used for personal, family,
    -or household purposes, or (2) anything designed or sold for incorporation
    -into a dwelling.  In determining whether a product is a consumer product,
    -doubtful cases shall be resolved in favor of coverage.  For a particular
    -product received by a particular user, "normally used" refers to a
    -typical or common use of that class of product, regardless of the status
    -of the particular user or of the way in which the particular user
    -actually uses, or expects or is expected to use, the product.  A product
    -is a consumer product regardless of whether the product has substantial
    -commercial, industrial or non-consumer uses, unless such uses represent
    -the only significant mode of use of the product.
    -
    -  "Installation Information" for a User Product means any methods,
    -procedures, authorization keys, or other information required to install
    -and execute modified versions of a covered work in that User Product from
    -a modified version of its Corresponding Source.  The information must
    -suffice to ensure that the continued functioning of the modified object
    -code is in no case prevented or interfered with solely because
    -modification has been made.
    -
    -  If you convey an object code work under this section in, or with, or
    -specifically for use in, a User Product, and the conveying occurs as
    -part of a transaction in which the right of possession and use of the
    -User Product is transferred to the recipient in perpetuity or for a
    -fixed term (regardless of how the transaction is characterized), the
    -Corresponding Source conveyed under this section must be accompanied
    -by the Installation Information.  But this requirement does not apply
    -if neither you nor any third party retains the ability to install
    -modified object code on the User Product (for example, the work has
    -been installed in ROM).
    -
    -  The requirement to provide Installation Information does not include a
    -requirement to continue to provide support service, warranty, or updates
    -for a work that has been modified or installed by the recipient, or for
    -the User Product in which it has been modified or installed.  Access to a
    -network may be denied when the modification itself materially and
    -adversely affects the operation of the network or violates the rules and
    -protocols for communication across the network.
    -
    -  Corresponding Source conveyed, and Installation Information provided,
    -in accord with this section must be in a format that is publicly
    -documented (and with an implementation available to the public in
    -source code form), and must require no special password or key for
    -unpacking, reading or copying.
    -
    -  7. Additional Terms.
    -
    -  "Additional permissions" are terms that supplement the terms of this
    -License by making exceptions from one or more of its conditions.
    -Additional permissions that are applicable to the entire Program shall
    -be treated as though they were included in this License, to the extent
    -that they are valid under applicable law.  If additional permissions
    -apply only to part of the Program, that part may be used separately
    -under those permissions, but the entire Program remains governed by
    -this License without regard to the additional permissions.
    -
    -  When you convey a copy of a covered work, you may at your option
    -remove any additional permissions from that copy, or from any part of
    -it.  (Additional permissions may be written to require their own
    -removal in certain cases when you modify the work.)  You may place
    -additional permissions on material, added by you to a covered work,
    -for which you have or can give appropriate copyright permission.
    -
    -  Notwithstanding any other provision of this License, for material you
    -add to a covered work, you may (if authorized by the copyright holders of
    -that material) supplement the terms of this License with terms:
    -
    -    a) Disclaiming warranty or limiting liability differently from the
    -    terms of sections 15 and 16 of this License; or
    -
    -    b) Requiring preservation of specified reasonable legal notices or
    -    author attributions in that material or in the Appropriate Legal
    -    Notices displayed by works containing it; or
    -
    -    c) Prohibiting misrepresentation of the origin of that material, or
    -    requiring that modified versions of such material be marked in
    -    reasonable ways as different from the original version; or
    -
    -    d) Limiting the use for publicity purposes of names of licensors or
    -    authors of the material; or
    -
    -    e) Declining to grant rights under trademark law for use of some
    -    trade names, trademarks, or service marks; or
    -
    -    f) Requiring indemnification of licensors and authors of that
    -    material by anyone who conveys the material (or modified versions of
    -    it) with contractual assumptions of liability to the recipient, for
    -    any liability that these contractual assumptions directly impose on
    -    those licensors and authors.
    -
    -  All other non-permissive additional terms are considered "further
    -restrictions" within the meaning of section 10.  If the Program as you
    -received it, or any part of it, contains a notice stating that it is
    -governed by this License along with a term that is a further
    -restriction, you may remove that term.  If a license document contains
    -a further restriction but permits relicensing or conveying under this
    -License, you may add to a covered work material governed by the terms
    -of that license document, provided that the further restriction does
    -not survive such relicensing or conveying.
    -
    -  If you add terms to a covered work in accord with this section, you
    -must place, in the relevant source files, a statement of the
    -additional terms that apply to those files, or a notice indicating
    -where to find the applicable terms.
    -
    -  Additional terms, permissive or non-permissive, may be stated in the
    -form of a separately written license, or stated as exceptions;
    -the above requirements apply either way.
    -
    -  8. Termination.
    -
    -  You may not propagate or modify a covered work except as expressly
    -provided under this License.  Any attempt otherwise to propagate or
    -modify it is void, and will automatically terminate your rights under
    -this License (including any patent licenses granted under the third
    -paragraph of section 11).
    -
    -  However, if you cease all violation of this License, then your
    -license from a particular copyright holder is reinstated (a)
    -provisionally, unless and until the copyright holder explicitly and
    -finally terminates your license, and (b) permanently, if the copyright
    -holder fails to notify you of the violation by some reasonable means
    -prior to 60 days after the cessation.
    -
    -  Moreover, your license from a particular copyright holder is
    -reinstated permanently if the copyright holder notifies you of the
    -violation by some reasonable means, this is the first time you have
    -received notice of violation of this License (for any work) from that
    -copyright holder, and you cure the violation prior to 30 days after
    -your receipt of the notice.
    -
    -  Termination of your rights under this section does not terminate the
    -licenses of parties who have received copies or rights from you under
    -this License.  If your rights have been terminated and not permanently
    -reinstated, you do not qualify to receive new licenses for the same
    -material under section 10.
    -
    -  9. Acceptance Not Required for Having Copies.
    -
    -  You are not required to accept this License in order to receive or
    -run a copy of the Program.  Ancillary propagation of a covered work
    -occurring solely as a consequence of using peer-to-peer transmission
    -to receive a copy likewise does not require acceptance.  However,
    -nothing other than this License grants you permission to propagate or
    -modify any covered work.  These actions infringe copyright if you do
    -not accept this License.  Therefore, by modifying or propagating a
    -covered work, you indicate your acceptance of this License to do so.
    -
    -  10. Automatic Licensing of Downstream Recipients.
    -
    -  Each time you convey a covered work, the recipient automatically
    -receives a license from the original licensors, to run, modify and
    -propagate that work, subject to this License.  You are not responsible
    -for enforcing compliance by third parties with this License.
    -
    -  An "entity transaction" is a transaction transferring control of an
    -organization, or substantially all assets of one, or subdividing an
    -organization, or merging organizations.  If propagation of a covered
    -work results from an entity transaction, each party to that
    -transaction who receives a copy of the work also receives whatever
    -licenses to the work the party's predecessor in interest had or could
    -give under the previous paragraph, plus a right to possession of the
    -Corresponding Source of the work from the predecessor in interest, if
    -the predecessor has it or can get it with reasonable efforts.
    -
    -  You may not impose any further restrictions on the exercise of the
    -rights granted or affirmed under this License.  For example, you may
    -not impose a license fee, royalty, or other charge for exercise of
    -rights granted under this License, and you may not initiate litigation
    -(including a cross-claim or counterclaim in a lawsuit) alleging that
    -any patent claim is infringed by making, using, selling, offering for
    -sale, or importing the Program or any portion of it.
    -
    -  11. Patents.
    -
    -  A "contributor" is a copyright holder who authorizes use under this
    -License of the Program or a work on which the Program is based.  The
    -work thus licensed is called the contributor's "contributor version".
    -
    -  A contributor's "essential patent claims" are all patent claims
    -owned or controlled by the contributor, whether already acquired or
    -hereafter acquired, that would be infringed by some manner, permitted
    -by this License, of making, using, or selling its contributor version,
    -but do not include claims that would be infringed only as a
    -consequence of further modification of the contributor version.  For
    -purposes of this definition, "control" includes the right to grant
    -patent sublicenses in a manner consistent with the requirements of
    -this License.
    -
    -  Each contributor grants you a non-exclusive, worldwide, royalty-free
    -patent license under the contributor's essential patent claims, to
    -make, use, sell, offer for sale, import and otherwise run, modify and
    -propagate the contents of its contributor version.
    -
    -  In the following three paragraphs, a "patent license" is any express
    -agreement or commitment, however denominated, not to enforce a patent
    -(such as an express permission to practice a patent or covenant not to
    -sue for patent infringement).  To "grant" such a patent license to a
    -party means to make such an agreement or commitment not to enforce a
    -patent against the party.
    -
    -  If you convey a covered work, knowingly relying on a patent license,
    -and the Corresponding Source of the work is not available for anyone
    -to copy, free of charge and under the terms of this License, through a
    -publicly available network server or other readily accessible means,
    -then you must either (1) cause the Corresponding Source to be so
    -available, or (2) arrange to deprive yourself of the benefit of the
    -patent license for this particular work, or (3) arrange, in a manner
    -consistent with the requirements of this License, to extend the patent
    -license to downstream recipients.  "Knowingly relying" means you have
    -actual knowledge that, but for the patent license, your conveying the
    -covered work in a country, or your recipient's use of the covered work
    -in a country, would infringe one or more identifiable patents in that
    -country that you have reason to believe are valid.
    -
    -  If, pursuant to or in connection with a single transaction or
    -arrangement, you convey, or propagate by procuring conveyance of, a
    -covered work, and grant a patent license to some of the parties
    -receiving the covered work authorizing them to use, propagate, modify
    -or convey a specific copy of the covered work, then the patent license
    -you grant is automatically extended to all recipients of the covered
    -work and works based on it.
    -
    -  A patent license is "discriminatory" if it does not include within
    -the scope of its coverage, prohibits the exercise of, or is
    -conditioned on the non-exercise of one or more of the rights that are
    -specifically granted under this License.  You may not convey a covered
    -work if you are a party to an arrangement with a third party that is
    -in the business of distributing software, under which you make payment
    -to the third party based on the extent of your activity of conveying
    -the work, and under which the third party grants, to any of the
    -parties who would receive the covered work from you, a discriminatory
    -patent license (a) in connection with copies of the covered work
    -conveyed by you (or copies made from those copies), or (b) primarily
    -for and in connection with specific products or compilations that
    -contain the covered work, unless you entered into that arrangement,
    -or that patent license was granted, prior to 28 March 2007.
    -
    -  Nothing in this License shall be construed as excluding or limiting
    -any implied license or other defenses to infringement that may
    -otherwise be available to you under applicable patent law.
    -
    -  12. No Surrender of Others' Freedom.
    -
    -  If conditions are imposed on you (whether by court order, agreement or
    -otherwise) that contradict the conditions of this License, they do not
    -excuse you from the conditions of this License.  If you cannot convey a
    -covered work so as to satisfy simultaneously your obligations under this
    -License and any other pertinent obligations, then as a consequence you may
    -not convey it at all.  For example, if you agree to terms that obligate you
    -to collect a royalty for further conveying from those to whom you convey
    -the Program, the only way you could satisfy both those terms and this
    -License would be to refrain entirely from conveying the Program.
    -
    -  13. Remote Network Interaction; Use with the GNU General Public License.
    -
    -  Notwithstanding any other provision of this License, if you modify the
    -Program, your modified version must prominently offer all users
    -interacting with it remotely through a computer network (if your version
    -supports such interaction) an opportunity to receive the Corresponding
    -Source of your version by providing access to the Corresponding Source
    -from a network server at no charge, through some standard or customary
    -means of facilitating copying of software.  This Corresponding Source
    -shall include the Corresponding Source for any work covered by version 3
    -of the GNU General Public License that is incorporated pursuant to the
    -following paragraph.
    -
    -  Notwithstanding any other provision of this License, you have
    -permission to link or combine any covered work with a work licensed
    -under version 3 of the GNU General Public License into a single
    -combined work, and to convey the resulting work.  The terms of this
    -License will continue to apply to the part which is the covered work,
    -but the work with which it is combined will remain governed by version
    -3 of the GNU General Public License.
    -
    -  14. Revised Versions of this License.
    -
    -  The Free Software Foundation may publish revised and/or new versions of
    -the GNU Affero General Public License from time to time.  Such new versions
    -will be similar in spirit to the present version, but may differ in detail to
    -address new problems or concerns.
    -
    -  Each version is given a distinguishing version number.  If the
    -Program specifies that a certain numbered version of the GNU Affero General
    -Public License "or any later version" applies to it, you have the
    -option of following the terms and conditions either of that numbered
    -version or of any later version published by the Free Software
    -Foundation.  If the Program does not specify a version number of the
    -GNU Affero General Public License, you may choose any version ever published
    -by the Free Software Foundation.
    -
    -  If the Program specifies that a proxy can decide which future
    -versions of the GNU Affero General Public License can be used, that proxy's
    -public statement of acceptance of a version permanently authorizes you
    -to choose that version for the Program.
    -
    -  Later license versions may give you additional or different
    -permissions.  However, no additional obligations are imposed on any
    -author or copyright holder as a result of your choosing to follow a
    -later version.
    -
    -  15. Disclaimer of Warranty.
    -
    -  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    -APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    -PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    -IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    -ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    -
    -  16. Limitation of Liability.
    -
    -  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    -SUCH DAMAGES.
    -
    -  17. Interpretation of Sections 15 and 16.
    -
    -  If the disclaimer of warranty and limitation of liability provided
    -above cannot be given local legal effect according to their terms,
    -reviewing courts shall apply local law that most closely approximates
    -an absolute waiver of all civil liability in connection with the
    -Program, unless a warranty or assumption of liability accompanies a
    -copy of the Program in return for a fee.
    -
    -                     END OF TERMS AND CONDITIONS
    -
    -            How to Apply These Terms to Your New Programs
    -
    -  If you develop a new program, and you want it to be of the greatest
    -possible use to the public, the best way to achieve this is to make it
    -free software which everyone can redistribute and change under these terms.
    -
    -  To do so, attach the following notices to the program.  It is safest
    -to attach them to the start of each source file to most effectively
    -state the exclusion of warranty; and each file should have at least
    -the "copyright" line and a pointer to where the full notice is found.
    -
    -    
    -    Copyright (C)   
    -
    -    This program is free software: you can redistribute it and/or modify
    -    it under the terms of the GNU Affero General Public License as published by
    -    the Free Software Foundation, either version 3 of the License, or
    -    (at your option) any later version.
    -
    -    This program is distributed in the hope that it will be useful,
    -    but WITHOUT ANY WARRANTY; without even the implied warranty of
    -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -    GNU Affero General Public License for more details.
    -
    -    You should have received a copy of the GNU Affero General Public License
    -    along with this program.  If not, see .
    -
    -Also add information on how to contact you by electronic and paper mail.
    -
    -  If your software can interact with users remotely through a computer
    -network, you should also make sure that it provides a way for users to
    -get its source.  For example, if your program is a web application, its
    -interface could display a "Source" link that leads users to an archive
    -of the code.  There are many ways you could offer source, and different
    -solutions will be better for different programs; see section 13 for the
    -specific requirements.
    -
    -  You should also get your employer (if you work as a programmer) or school,
    -if any, to sign a "copyright disclaimer" for the program, if necessary.
    -For more information on this, and how to apply and follow the GNU AGPL, see
    -.
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    new file mode 100644
    index 0000000..42e7c83
    --- /dev/null
    +++ b/bash/templates/Makefile.am
    @@ -0,0 +1,23 @@
    +include $(srcdir)/build-aux/git-notes-release.am
    +
    +SOURCES =
    +
    +TESTS =
    +
    +EXTRA_DIST =                \
    +  guix/manifest.scm         \
    +  guix/channels.scm         \
    +  scripts/with-container.sh \
    +  $(TESTS)
    +
    +info_TEXINFOS = doc/$PROJECT.texi
    +
    +check:
    +	bash scripts/assert-shellcheck.sh
    +	bash scripts/assert-todos.sh
    +
    +clean-local:
    +	rm -rf public/
    +
    +public:
    +	bash scripts/generate-tasks-and-bugs.sh
    diff --git a/bash/templates/NEWS b/bash/templates/NEWS
    new file mode 100644
    index 0000000..76f6a7f
    --- /dev/null
    +++ b/bash/templates/NEWS
    @@ -0,0 +1,7 @@
    +* Unreleased
    +** Added
    +** Changed
    +** Deprecated
    +** Removed
    +** Fixed
    +** Security
    diff --git a/bash/templates/README b/bash/templates/README
    new file mode 100644
    index 0000000..813d609
    --- /dev/null
    +++ b/bash/templates/README
    @@ -0,0 +1,6 @@
    +$PROJECT
    +
    +FIXME
    +
    +Online documentation available at:
    +https://$PROJECT.euandreh.xyz
    \ No newline at end of file
    diff --git a/bash/templates/assert-docs-spelling.sh b/bash/templates/assert-docs-spelling.sh
    deleted file mode 100755
    index cb2ba7f..0000000
    --- a/bash/templates/assert-docs-spelling.sh
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../docs/
    -
    -export LANG=C.UTF-8
    -
    -for DICT in dictionaries/*.txt; do
    -  diff <(sort "$DICT") "$DICT" || {
    -    echo "The $DICT dictionary is unsorted. To fix it, run:" >&2
    -    echo "  LANG=C.UTF-8 sort docs/$DICT | sponge docs/$DICT" >&2
    -    exit 1
    -  }
    -done
    -
    -OUT="$(mktemp)"
    -LANGS="$(jq -r .langs[] < ../metadata.json)"
    -
    -for l in ${LANGS}; do
    -  make SPHINXOPTS="-D language=$l" html
    -  hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT"
    -done
    -
    -if [[ -s "$OUT" ]]; then
    -  printf "\nvvv Mispelled words detected by hunspell.\n\n"
    -  sort < "$OUT" | uniq
    -  printf "\n^^^\n" >&2
    -  exit 1
    -else
    -  echo "No spelling errors detected"
    -  exit 0
    -fi
    diff --git a/bash/templates/assert-nixfmt.sh b/bash/templates/assert-nixfmt.sh
    deleted file mode 100755
    index 7a68fa9..0000000
    --- a/bash/templates/assert-nixfmt.sh
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    -
    -format() {
    -  nix_file="${1}"
    -  diff <(nixfmt < "${nix_file}") "${nix_file}" || {
    -    echo "The file '${nix_file}' is unformatted. To fix it, run:"
    -    echo "  nixfmt ${nix_file}"
    -    exit 1
    -  }
    -}
    -export -f format
    -
    -find . -type f -name '*.nix' -print0 | xargs -0 -I% bash -c "format %"
    diff --git a/bash/templates/assert-shellcheck.sh b/bash/templates/assert-shellcheck.sh
    deleted file mode 100755
    index e24c29c..0000000
    --- a/bash/templates/assert-shellcheck.sh
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    -
    -git ls-files | grep '\.sh$' | xargs shellcheck
    diff --git a/bash/templates/assert-todos.sh b/bash/templates/assert-todos.sh
    deleted file mode 100755
    index c3139d1..0000000
    --- a/bash/templates/assert-todos.sh
    +++ /dev/null
    @@ -1,43 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    -
    -# shellcheck disable=2046
    -if grep -R FIXME $(git ls-files) | grep -v '^TODOs.org' | grep -v '^.git/' | grep -v '^scripts/assert-todos.sh'; then
    -  echo "Found dangling FIXME markers on the project."
    -  echo "You should write them down properly on TODOs.org."
    -  exit 1
    -fi
    -
    -contains-element() {
    -  local e match="$1"
    -  shift
    -  for e; do [[ "$e" == "$match" ]] && return 0; done
    -  return 1
    -}
    -
    -KNOWN_IDS=()
    -has_error=0
    -# shellcheck disable=2013
    -for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do
    -  if grep -E '^\*\* (CANCELLED|DONE)' <(sed "${todo}q;d" TODOs.org) > /dev/null; then
    -    ID_OFFSET=3
    -  else
    -    ID_OFFSET=2
    -  fi
    -  ID="$(sed "$((todo+ID_OFFSET))q;d" TODOs.org)"
    -  if grep '^:CUSTOM_ID: .*$' <(echo "$ID") > /dev/null; then
    -    if contains-element "$ID" "${KNOWN_IDS[@]}"; then
    -      echo "Duplicated ID: $ID"
    -      has_error=1
    -    else
    -      KNOWN_IDS+=("$ID")
    -    fi
    -  else
    -    echo "Missing ID for TODO in line $todo"
    -    has_error=1
    -  fi
    -done
    -
    -exit "$has_error"
    diff --git a/bash/templates/base-packages.nix b/bash/templates/base-packages.nix
    deleted file mode 100644
    index 98f9404..0000000
    --- a/bash/templates/base-packages.nix
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -{ pkgs, utils-i18n }:
    -with pkgs; [
    -  # Project-wide packages
    -  jq
    -  rq
    -  nixfmt
    -  shellcheck
    -  direnv
    -  niv
    -  bats
    -  gitstats
    -
    -  # Documentation
    -  (python3.withPackages (p: [ p.sphinx p.sphinx_rtd_theme ]))
    -  (hunspellWithDicts (with utils-i18n.dicts; [ en pt fr ]))
    -  utils-i18n.sphinx-intl
    -  emacs
    -  git
    -  moreutils # sponge
    -  graphviz
    -  texlive.combined.scheme-full
    -]
    diff --git a/bash/templates/bootstrap b/bash/templates/bootstrap
    new file mode 100755
    index 0000000..a8fd885
    --- /dev/null
    +++ b/bash/templates/bootstrap
    @@ -0,0 +1,3 @@
    +#!/bin/sh
    +
    +autoreconf --verbose --install --force
    diff --git a/bash/templates/build-aux/git-notes-release.am b/bash/templates/build-aux/git-notes-release.am
    new file mode 100644
    index 0000000..1f41001
    --- /dev/null
    +++ b/bash/templates/build-aux/git-notes-release.am
    @@ -0,0 +1,17 @@
    +upgrade-news:
    +	sed -i "s/^\* Unreleased$$/* $(VERSION) - $$(date -I)/" NEWS
    +	printf '* Unreleased\n** Added\n** Changed\n** Deprecated\n** Removed\n** Fixed\n** Security\n' | cat - NEWS | sponge NEWS
    +	git diff
    +	read -p "Is the above NEWS diff acceptable? Press CTRL+c to cancel."
    +	git add NEWS
    +	git commit -m 'Update NEWS.'
    +
    +release: upgrade-news check distcheck dist
    +	gpg --sign --armor --yes $(DIST_ARCHIVES)
    +	git tag $(VERSION)
    +	SHA_TAR=$$(git hash-object -w $(DIST_ARCHIVES));                          \
    +	SHA_SIG=$$(git hash-object -w $(DIST_ARCHIVES).asc);                      \
    +	git notes --ref=refs/notes/tarballs   add -f -C $$SHA_TAR $(VERSION);     \
    +	git notes --ref=refs/notes/signatures add -f -C $$SHA_SIG $(VERSION);     \
    +	git notes append -m "$$(printf "Get this release with:\n  git cat-file -p $$SHA_TAR > $(DIST_ARCHIVES)\n  git cat-file -p $$SHA_SIG > $(DIST_ARCHIVES).asc")"
    +	git push --all
    diff --git a/bash/templates/build-aux/guile.am b/bash/templates/build-aux/guile.am
    new file mode 100644
    index 0000000..c5cfcf6
    --- /dev/null
    +++ b/bash/templates/build-aux/guile.am
    @@ -0,0 +1,25 @@
    +moddir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)
    +godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache
    +
    +GOBJECTS = $(SOURCES:%.scm=%.go)
    +
    +nobase_dist_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES)
    +nobase_go_DATA = $(GOBJECTS)
    +
    +# Make sure source files are installed first, so that the mtime of
    +# installed compiled files is greater than that of installed source
    +# files.  See
    +# 
    +# for details.
    +guile_install_go_files = install-nobase-goDATA
    +$(guile_install_go_files): instal-nobase_dist_modDATA
    +
    +CLEANFILES = $(GOBJECTS) $(TESTS:tests/%.scm=%.log)
    +GUILE_WARNING = -Wunbound-variable -Warity-mismatch -Wformat
    +SUFFIXES = .scm .go
    +.scm.go:
    +	$(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILD) compile $(GUILE_WARNING) -o "$@" "$<"
    +
    +TEST_EXTENSIONS = .scm
    +AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)/src"
    +SCM_LOG_COMPILER = $(top_builddir)/pre-inst-env $(GUILE)
    diff --git a/bash/templates/build-aux/pre-inst-env.in b/bash/templates/build-aux/pre-inst-env.in
    new file mode 100644
    index 0000000..ebf1a05
    --- /dev/null
    +++ b/bash/templates/build-aux/pre-inst-env.in
    @@ -0,0 +1,13 @@
    +#!/bin/sh
    +
    +abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`"
    +abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`"
    +
    +GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
    +GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
    +export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH
    +
    +PATH="$abs_top_builddir:$PATH"
    +export PATH
    +
    +exec "$@"
    diff --git a/bash/templates/build-aux/texinfo.tex b/bash/templates/build-aux/texinfo.tex
    new file mode 100644
    index 0000000..deca599
    --- /dev/null
    +++ b/bash/templates/build-aux/texinfo.tex
    @@ -0,0 +1,11614 @@
    +% texinfo.tex -- TeX macros to handle Texinfo files.
    +%
    +% Load plain if necessary, i.e., if running under initex.
    +\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
    +%
    +\def\texinfoversion{2020-02-11.09}
    +%
    +% Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc.
    +%
    +% This texinfo.tex file is free software: you can redistribute it and/or
    +% modify it under the terms of the GNU General Public License as
    +% published by the Free Software Foundation, either version 3 of the
    +% License, or (at your option) any later version.
    +%
    +% This texinfo.tex file is distributed in the hope that it will be
    +% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
    +% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    +% General Public License for more details.
    +%
    +% You should have received a copy of the GNU General Public License
    +% along with this program.  If not, see .
    +%
    +% As a special exception, when this file is read by TeX when processing
    +% a Texinfo source document, you may use the result without
    +% restriction. This Exception is an additional permission under section 7
    +% of the GNU General Public License, version 3 ("GPLv3").
    +%
    +% Please try the latest version of texinfo.tex before submitting bug
    +% reports; you can get the latest version from:
    +%   https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
    +%   https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
    +%   https://www.gnu.org/software/texinfo/ (the Texinfo home page)
    +% The texinfo.tex in any given distribution could well be out
    +% of date, so if that's what you're using, please check.
    +%
    +% Send bug reports to bug-texinfo@gnu.org.  Please include including a
    +% complete document in each bug report with which we can reproduce the
    +% problem.  Patches are, of course, greatly appreciated.
    +%
    +% To process a Texinfo manual with TeX, it's most reliable to use the
    +% texi2dvi shell script that comes with the distribution.  For a simple
    +% manual foo.texi, however, you can get away with this:
    +%   tex foo.texi
    +%   texindex foo.??
    +%   tex foo.texi
    +%   tex foo.texi
    +%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
    +% The extra TeX runs get the cross-reference information correct.
    +% Sometimes one run after texindex suffices, and sometimes you need more
    +% than two; texi2dvi does it as many times as necessary.
    +%
    +% It is possible to adapt texinfo.tex for other languages, to some
    +% extent.  You can get the existing language-specific files from the
    +% full Texinfo distribution.
    +%
    +% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
    +
    +
    +\message{Loading texinfo [version \texinfoversion]:}
    +
    +% If in a .fmt file, print the version number
    +% and turn on active characters that we couldn't do earlier because
    +% they might have appeared in the input file name.
    +\everyjob{\message{[Texinfo version \texinfoversion]}%
    +  \catcode`+=\active \catcode`\_=\active}
    +
    +% LaTeX's \typeout.  This ensures that the messages it is used for
    +% are identical in format to the corresponding ones from latex/pdflatex.
    +\def\typeout{\immediate\write17}%
    +
    +\chardef\other=12
    +
    +% We never want plain's \outer definition of \+ in Texinfo.
    +% For @tex, we can use \tabalign.
    +\let\+ = \relax
    +
    +% Save some plain tex macros whose names we will redefine.
    +\let\ptexb=\b
    +\let\ptexbullet=\bullet
    +\let\ptexc=\c
    +\let\ptexcomma=\,
    +\let\ptexdot=\.
    +\let\ptexdots=\dots
    +\let\ptexend=\end
    +\let\ptexequiv=\equiv
    +\let\ptexexclam=\!
    +\let\ptexfootnote=\footnote
    +\let\ptexgtr=>
    +\let\ptexhat=^
    +\let\ptexi=\i
    +\let\ptexindent=\indent
    +\let\ptexinsert=\insert
    +\let\ptexlbrace=\{
    +\let\ptexless=<
    +\let\ptexnewwrite\newwrite
    +\let\ptexnoindent=\noindent
    +\let\ptexplus=+
    +\let\ptexraggedright=\raggedright
    +\let\ptexrbrace=\}
    +\let\ptexslash=\/
    +\let\ptexsp=\sp
    +\let\ptexstar=\*
    +\let\ptexsup=\sup
    +\let\ptext=\t
    +\let\ptextop=\top
    +{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
    +
    +% If this character appears in an error message or help string, it
    +% starts a new line in the output.
    +\newlinechar = `^^J
    +
    +% Use TeX 3.0's \inputlineno to get the line number, for better error
    +% messages, but if we're using an old version of TeX, don't do anything.
    +%
    +\ifx\inputlineno\thisisundefined
    +  \let\linenumber = \empty % Pre-3.0.
    +\else
    +  \def\linenumber{l.\the\inputlineno:\space}
    +\fi
    +
    +% Set up fixed words for English if not already set.
    +\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
    +\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
    +\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
    +\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
    +\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
    +\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
    +\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
    +\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
    +\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
    +\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
    +\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
    +\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
    +\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
    +\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
    +\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
    +\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
    +\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
    +\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
    +\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
    +\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
    +%
    +\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
    +\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
    +\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
    +\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
    +\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
    +\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
    +\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
    +\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
    +\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
    +\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
    +\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
    +\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
    +%
    +\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
    +\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
    +\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
    +\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
    +\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
    +
    +% Give the space character the catcode for a space.
    +\def\spaceisspace{\catcode`\ =10\relax}
    +
    +% Likewise for ^^M, the end of line character.
    +\def\endlineisspace{\catcode13=10\relax}
    +
    +\chardef\dashChar  = `\-
    +\chardef\slashChar = `\/
    +\chardef\underChar = `\_
    +
    +% Ignore a token.
    +%
    +\def\gobble#1{}
    +
    +% The following is used inside several \edef's.
    +\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
    +
    +% Hyphenation fixes.
    +\hyphenation{
    +  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
    +  ap-pen-dix bit-map bit-maps
    +  data-base data-bases eshell fall-ing half-way long-est man-u-script
    +  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
    +  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
    +  spell-ing spell-ings
    +  stand-alone strong-est time-stamp time-stamps which-ever white-space
    +  wide-spread wrap-around
    +}
    +
    +% Sometimes it is convenient to have everything in the transcript file
    +% and nothing on the terminal.  We don't just call \tracingall here,
    +% since that produces some useless output on the terminal.  We also make
    +% some effort to order the tracing commands to reduce output in the log
    +% file; cf. trace.sty in LaTeX.
    +%
    +\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
    +\def\loggingall{%
    +  \tracingstats2
    +  \tracingpages1
    +  \tracinglostchars2  % 2 gives us more in etex
    +  \tracingparagraphs1
    +  \tracingoutput1
    +  \tracingmacros2
    +  \tracingrestores1
    +  \showboxbreadth\maxdimen \showboxdepth\maxdimen
    +  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
    +    \tracingscantokens1
    +    \tracingifs1
    +    \tracinggroups1
    +    \tracingnesting2
    +    \tracingassigns1
    +  \fi
    +  \tracingcommands3  % 3 gives us more in etex
    +  \errorcontextlines16
    +}%
    +
    +% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
    +% aren't perfect, it's not the end of the world, being an error message,
    +% after all.
    +%
    +\def\errormsg{\begingroup \indexnofonts \doerrormsg}
    +\def\doerrormsg#1{\errmessage{#1}}
    +
    +% add check for \lastpenalty to plain's definitions.  If the last thing
    +% we did was a \nobreak, we don't want to insert more space.
    +%
    +\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
    +  \removelastskip\penalty-50\smallskip\fi\fi}
    +\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
    +  \removelastskip\penalty-100\medskip\fi\fi}
    +\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
    +  \removelastskip\penalty-200\bigskip\fi\fi}
    +
    +% Output routine
    +%
    +
    +% For a final copy, take out the rectangles
    +% that mark overfull boxes (in case you have decided
    +% that the text looks ok even though it passes the margin).
    +%
    +\def\finalout{\overfullrule=0pt }
    +
    +\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
    +\newdimen\topandbottommargin \topandbottommargin=.75in
    +
    +% Output a mark which sets \thischapter, \thissection and \thiscolor.
    +% We dump everything together because we only have one kind of mark.
    +% This works because we only use \botmark / \topmark, not \firstmark.
    +%
    +% A mark contains a subexpression of the \ifcase ... \fi construct.
    +% \get*marks macros below extract the needed part using \ifcase.
    +%
    +% Another complication is to let the user choose whether \thischapter
    +% (\thissection) refers to the chapter (section) in effect at the top
    +% of a page, or that at the bottom of a page.
    +
    +% \domark is called twice inside \chapmacro, to add one
    +% mark before the section break, and one after.
    +%   In the second call \prevchapterdefs is the same as \currentchapterdefs,
    +% and \prevsectiondefs is the same as \currentsectiondefs.
    +%   Then if the page is not broken at the mark, some of the previous
    +% section appears on the page, and we can get the name of this section
    +% from \firstmark for @everyheadingmarks top.
    +%   @everyheadingmarks bottom uses \botmark.
    +%
    +% See page 260 of The TeXbook.
    +\def\domark{%
    +  \toks0=\expandafter{\currentchapterdefs}%
    +  \toks2=\expandafter{\currentsectiondefs}%
    +  \toks4=\expandafter{\prevchapterdefs}%
    +  \toks6=\expandafter{\prevsectiondefs}%
    +  \toks8=\expandafter{\currentcolordefs}%
    +  \mark{%
    +                   \the\toks0 \the\toks2  % 0: marks for @everyheadingmarks top
    +      \noexpand\or \the\toks4 \the\toks6  % 1: for @everyheadingmarks bottom
    +    \noexpand\else \the\toks8             % 2: color marks
    +  }%
    +}
    +
    +% \gettopheadingmarks, \getbottomheadingmarks,
    +% \getcolormarks - extract needed part of mark.
    +%
    +% \topmark doesn't work for the very first chapter (after the title
    +% page or the contents), so we use \firstmark there -- this gets us
    +% the mark with the chapter defs, unless the user sneaks in, e.g.,
    +% @setcolor (or @url, or @link, etc.) between @contents and the very
    +% first @chapter.
    +\def\gettopheadingmarks{%
    +  \ifcase0\the\savedtopmark\fi
    +  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
    +}
    +\def\getbottomheadingmarks{\ifcase1\botmark\fi}
    +\def\getcolormarks{\ifcase2\the\savedtopmark\fi}
    +
    +% Avoid "undefined control sequence" errors.
    +\def\currentchapterdefs{}
    +\def\currentsectiondefs{}
    +\def\currentsection{}
    +\def\prevchapterdefs{}
    +\def\prevsectiondefs{}
    +\def\currentcolordefs{}
    +
    +% Margin to add to right of even pages, to left of odd pages.
    +\newdimen\bindingoffset
    +\newdimen\normaloffset
    +\newdimen\txipagewidth \newdimen\txipageheight
    +
    +% Main output routine.
    +%
    +\chardef\PAGE = 255
    +\newtoks\defaultoutput
    +\defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}}
    +\output=\expandafter{\the\defaultoutput}
    +
    +\newbox\headlinebox
    +\newbox\footlinebox
    +
    +% When outputting the double column layout for indices, an output routine
    +% is run several times, which hides the original value of \topmark.  This
    +% can lead to a page heading being output and duplicating the chapter heading
    +% of the index.  Hence, save the contents of \topmark at the beginning of
    +% the output routine.  The saved contents are valid until we actually
    +% \shipout a page.
    +%
    +% (We used to run a short output routine to actually set \topmark and
    +% \firstmark to the right values, but if this was called with an empty page
    +% containing whatsits for writing index entries, the whatsits would be thrown
    +% away and the index auxiliary file would remain empty.)
    +%
    +\newtoks\savedtopmark
    +\newif\iftopmarksaved
    +\topmarksavedtrue
    +\def\savetopmark{%
    +  \iftopmarksaved\else
    +    \global\savedtopmark=\expandafter{\topmark}%
    +    \global\topmarksavedtrue
    +  \fi
    +}
    +
    +% \onepageout takes a vbox as an argument.
    +% \shipout a vbox for a single page, adding an optional header, footer
    +% and footnote.  This also causes index entries for this page to be written
    +% to the auxiliary files.
    +%
    +\def\onepageout#1{%
    +  \hoffset=\normaloffset
    +  %
    +  \ifodd\pageno  \advance\hoffset by \bindingoffset
    +  \else \advance\hoffset by -\bindingoffset\fi
    +  %
    +  % Retrieve the information for the headings from the marks in the page,
    +  % and call Plain TeX's \makeheadline and \makefootline, which use the
    +  % values in \headline and \footline.
    +  %
    +  % This is used to check if we are on the first page of a chapter.
    +  \ifcase1\the\savedtopmark\fi
    +  \let\prevchaptername\thischaptername
    +  \ifcase0\firstmark\fi
    +  \let\curchaptername\thischaptername
    +  %
    +  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
    +  %
    +  \ifx\curchaptername\prevchaptername
    +    \let\thischapterheading\thischapter
    +  \else
    +    % \thischapterheading is the same as \thischapter except it is blank
    +    % for the first page of a chapter.  This is to prevent the chapter name
    +    % being shown twice.
    +    \def\thischapterheading{}%
    +  \fi
    +  %
    +  % Common context changes for both heading and footing.
    +  % Do this outside of the \shipout so @code etc. will be expanded in
    +  % the headline as they should be, not taken literally (outputting ''code).
    +  \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars}
    +  %
    +  \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}%
    +  %
    +  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
    +  \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}%
    +  %
    +  {%
    +    % Set context for writing to auxiliary files like index files.
    +    % Have to do this stuff outside the \shipout because we want it to
    +    % take effect in \write's, yet the group defined by the \vbox ends
    +    % before the \shipout runs.
    +    %
    +    \atdummies         % don't expand commands in the output.
    +    \turnoffactive
    +    \shipout\vbox{%
    +      % Do this early so pdf references go to the beginning of the page.
    +      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
    +      %
    +      \unvbox\headlinebox
    +      \pagebody{#1}%
    +      \ifdim\ht\footlinebox > 0pt
    +        % Only leave this space if the footline is nonempty.
    +        % (We lessened \vsize for it in \oddfootingyyy.)
    +        % The \baselineskip=24pt in plain's \makefootline has no effect.
    +        \vskip 24pt
    +        \unvbox\footlinebox
    +      \fi
    +      %
    +    }%
    +  }%
    +  \global\topmarksavedfalse
    +  \advancepageno
    +  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
    +}
    +
    +\newinsert\margin \dimen\margin=\maxdimen
    +
    +% Main part of page, including any footnotes
    +\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
    +{\catcode`\@ =11
    +\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
    +% marginal hacks, juha@viisa.uucp (Juha Takala)
    +\ifvoid\margin\else % marginal info is present
    +  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
    +\dimen@=\dp#1\relax \unvbox#1\relax
    +\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
    +\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
    +}
    +
    +
    +% Argument parsing
    +
    +% Parse an argument, then pass it to #1.  The argument is the rest of
    +% the input line (except we remove a trailing comment).  #1 should be a
    +% macro which expects an ordinary undelimited TeX argument.
    +% For example, \def\foo{\parsearg\fooxxx}.
    +%
    +\def\parsearg{\parseargusing{}}
    +\def\parseargusing#1#2{%
    +  \def\argtorun{#2}%
    +  \begingroup
    +    \obeylines
    +    \spaceisspace
    +    #1%
    +    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
    +}
    +
    +{\obeylines %
    +  \gdef\parseargline#1^^M{%
    +    \endgroup % End of the group started in \parsearg.
    +    \argremovecomment #1\comment\ArgTerm%
    +  }%
    +}
    +
    +% First remove any @comment, then any @c comment.  Pass the result on to
    +% \argcheckspaces.
    +\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
    +\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
    +
    +% Each occurrence of `\^^M' or `\^^M' is replaced by a single space.
    +%
    +% \argremovec might leave us with trailing space, e.g.,
    +%    @end itemize  @c foo
    +% This space token undergoes the same procedure and is eventually removed
    +% by \finishparsearg.
    +%
    +\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
    +\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
    +\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
    +  \def\temp{#3}%
    +  \ifx\temp\empty
    +    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
    +    \let\temp\finishparsearg
    +  \else
    +    \let\temp\argcheckspaces
    +  \fi
    +  % Put the space token in:
    +  \temp#1 #3\ArgTerm
    +}
    +
    +% If a _delimited_ argument is enclosed in braces, they get stripped; so
    +% to get _exactly_ the rest of the line, we had to prevent such situation.
    +% We prepended an \empty token at the very beginning and we expand it now,
    +% just before passing the control to \argtorun.
    +% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
    +% either the null string, or it ends with \^^M---thus there is no danger
    +% that a pair of braces would be stripped.
    +%
    +% But first, we have to remove the trailing space token.
    +%
    +\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
    +
    +
    +% \parseargdef - define a command taking an argument on the line
    +%
    +% \parseargdef\foo{...}
    +%	is roughly equivalent to
    +% \def\foo{\parsearg\Xfoo}
    +% \def\Xfoo#1{...}
    +\def\parseargdef#1{%
    +  \expandafter \doparseargdef \csname\string#1\endcsname #1%
    +}
    +\def\doparseargdef#1#2{%
    +  \def#2{\parsearg#1}%
    +  \def#1##1%
    +}
    +
    +% Several utility definitions with active space:
    +{
    +  \obeyspaces
    +  \gdef\obeyedspace{ }
    +
    +  % Make each space character in the input produce a normal interword
    +  % space in the output.  Don't allow a line break at this space, as this
    +  % is used only in environments like @example, where each line of input
    +  % should produce a line of output anyway.
    +  %
    +  \gdef\sepspaces{\obeyspaces\let =\tie}
    +
    +  % If an index command is used in an @example environment, any spaces
    +  % therein should become regular spaces in the raw index file, not the
    +  % expansion of \tie (\leavevmode \penalty \@M \ ).
    +  \gdef\unsepspaces{\let =\space}
    +}
    +
    +
    +\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
    +
    +% Define the framework for environments in texinfo.tex.  It's used like this:
    +%
    +%   \envdef\foo{...}
    +%   \def\Efoo{...}
    +%
    +% It's the responsibility of \envdef to insert \begingroup before the
    +% actual body; @end closes the group after calling \Efoo.  \envdef also
    +% defines \thisenv, so the current environment is known; @end checks
    +% whether the environment name matches.  The \checkenv macro can also be
    +% used to check whether the current environment is the one expected.
    +%
    +% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
    +% are not treated as environments; they don't open a group.  (The
    +% implementation of @end takes care not to call \endgroup in this
    +% special case.)
    +
    +
    +% At run-time, environments start with this:
    +\def\startenvironment#1{\begingroup\def\thisenv{#1}}
    +% initialize
    +\let\thisenv\empty
    +
    +% ... but they get defined via ``\envdef\foo{...}'':
    +\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
    +\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
    +
    +% Check whether we're in the right environment:
    +\def\checkenv#1{%
    +  \def\temp{#1}%
    +  \ifx\thisenv\temp
    +  \else
    +    \badenverr
    +  \fi
    +}
    +
    +% Environment mismatch, #1 expected:
    +\def\badenverr{%
    +  \errhelp = \EMsimple
    +  \errmessage{This command can appear only \inenvironment\temp,
    +    not \inenvironment\thisenv}%
    +}
    +\def\inenvironment#1{%
    +  \ifx#1\empty
    +    outside of any environment%
    +  \else
    +    in environment \expandafter\string#1%
    +  \fi
    +}
    +
    +% @end foo executes the definition of \Efoo.
    +% But first, it executes a specialized version of \checkenv
    +%
    +\parseargdef\end{%
    +  \if 1\csname iscond.#1\endcsname
    +  \else
    +    % The general wording of \badenverr may not be ideal.
    +    \expandafter\checkenv\csname#1\endcsname
    +    \csname E#1\endcsname
    +    \endgroup
    +  \fi
    +}
    +
    +\newhelp\EMsimple{Press RETURN to continue.}
    +
    +
    +% Be sure we're in horizontal mode when doing a tie, since we make space
    +% equivalent to this in @example-like environments. Otherwise, a space
    +% at the beginning of a line will start with \penalty -- and
    +% since \penalty is valid in vertical mode, we'd end up putting the
    +% penalty on the vertical list instead of in the new paragraph.
    +{\catcode`@ = 11
    + % Avoid using \@M directly, because that causes trouble
    + % if the definition is written into an index file.
    + \global\let\tiepenalty = \@M
    + \gdef\tie{\leavevmode\penalty\tiepenalty\ }
    +}
    +
    +% @: forces normal size whitespace following.
    +\def\:{\spacefactor=1000 }
    +
    +% @* forces a line break.
    +\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
    +
    +% @/ allows a line break.
    +\let\/=\allowbreak
    +
    +% @. is an end-of-sentence period.
    +\def\.{.\spacefactor=\endofsentencespacefactor\space}
    +
    +% @! is an end-of-sentence bang.
    +\def\!{!\spacefactor=\endofsentencespacefactor\space}
    +
    +% @? is an end-of-sentence query.
    +\def\?{?\spacefactor=\endofsentencespacefactor\space}
    +
    +% @frenchspacing on|off  says whether to put extra space after punctuation.
    +%
    +\def\onword{on}
    +\def\offword{off}
    +%
    +\parseargdef\frenchspacing{%
    +  \def\temp{#1}%
    +  \ifx\temp\onword \plainfrenchspacing
    +  \else\ifx\temp\offword \plainnonfrenchspacing
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
    +  \fi\fi
    +}
    +
    +% @w prevents a word break.  Without the \leavevmode, @w at the
    +% beginning of a paragraph, when TeX is still in vertical mode, would
    +% produce a whole line of output instead of starting the paragraph.
    +\def\w#1{\leavevmode\hbox{#1}}
    +
    +% @group ... @end group forces ... to be all on one page, by enclosing
    +% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
    +% to keep its height that of a normal line.  According to the rules for
    +% \topskip (p.114 of the TeXbook), the glue inserted is
    +% max (\topskip - \ht (first item), 0).  If that height is large,
    +% therefore, no glue is inserted, and the space between the headline and
    +% the text is small, which looks bad.
    +%
    +% Another complication is that the group might be very large.  This can
    +% cause the glue on the previous page to be unduly stretched, because it
    +% does not have much material.  In this case, it's better to add an
    +% explicit \vfill so that the extra space is at the bottom.  The
    +% threshold for doing this is if the group is more than \vfilllimit
    +% percent of a page (\vfilllimit can be changed inside of @tex).
    +%
    +\newbox\groupbox
    +\def\vfilllimit{0.7}
    +%
    +\envdef\group{%
    +  \ifnum\catcode`\^^M=\active \else
    +    \errhelp = \groupinvalidhelp
    +    \errmessage{@group invalid in context where filling is enabled}%
    +  \fi
    +  \startsavinginserts
    +  %
    +  \setbox\groupbox = \vtop\bgroup
    +    % Do @comment since we are called inside an environment such as
    +    % @example, where each end-of-line in the input causes an
    +    % end-of-line in the output.  We don't want the end-of-line after
    +    % the `@group' to put extra space in the output.  Since @group
    +    % should appear on a line by itself (according to the Texinfo
    +    % manual), we don't worry about eating any user text.
    +    \comment
    +}
    +%
    +% The \vtop produces a box with normal height and large depth; thus, TeX puts
    +% \baselineskip glue before it, and (when the next line of text is done)
    +% \lineskip glue after it.  Thus, space below is not quite equal to space
    +% above.  But it's pretty close.
    +\def\Egroup{%
    +    % To get correct interline space between the last line of the group
    +    % and the first line afterwards, we have to propagate \prevdepth.
    +    \endgraf % Not \par, as it may have been set to \lisppar.
    +    \global\dimen1 = \prevdepth
    +  \egroup           % End the \vtop.
    +  \addgroupbox
    +  \prevdepth = \dimen1
    +  \checkinserts
    +}
    +
    +\def\addgroupbox{
    +  % \dimen0 is the vertical size of the group's box.
    +  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
    +  % \dimen2 is how much space is left on the page (more or less).
    +  \dimen2 = \txipageheight   \advance\dimen2 by -\pagetotal
    +  % if the group doesn't fit on the current page, and it's a big big
    +  % group, force a page break.
    +  \ifdim \dimen0 > \dimen2
    +    \ifdim \pagetotal < \vfilllimit\txipageheight
    +      \page
    +    \fi
    +  \fi
    +  \box\groupbox
    +}
    +
    +%
    +% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
    +% message, so this ends up printing `@group can only ...'.
    +%
    +\newhelp\groupinvalidhelp{%
    +group can only be used in environments such as @example,^^J%
    +where each line of input produces a line of output.}
    +
    +% @need space-in-mils
    +% forces a page break if there is not space-in-mils remaining.
    +
    +\newdimen\mil  \mil=0.001in
    +
    +\parseargdef\need{%
    +  % Ensure vertical mode, so we don't make a big box in the middle of a
    +  % paragraph.
    +  \par
    +  %
    +  % If the @need value is less than one line space, it's useless.
    +  \dimen0 = #1\mil
    +  \dimen2 = \ht\strutbox
    +  \advance\dimen2 by \dp\strutbox
    +  \ifdim\dimen0 > \dimen2
    +    %
    +    % Do a \strut just to make the height of this box be normal, so the
    +    % normal leading is inserted relative to the preceding line.
    +    % And a page break here is fine.
    +    \vtop to #1\mil{\strut\vfil}%
    +    %
    +    % TeX does not even consider page breaks if a penalty added to the
    +    % main vertical list is 10000 or more.  But in order to see if the
    +    % empty box we just added fits on the page, we must make it consider
    +    % page breaks.  On the other hand, we don't want to actually break the
    +    % page after the empty box.  So we use a penalty of 9999.
    +    %
    +    % There is an extremely small chance that TeX will actually break the
    +    % page at this \penalty, if there are no other feasible breakpoints in
    +    % sight.  (If the user is using lots of big @group commands, which
    +    % almost-but-not-quite fill up a page, TeX will have a hard time doing
    +    % good page breaking, for example.)  However, I could not construct an
    +    % example where a page broke at this \penalty; if it happens in a real
    +    % document, then we can reconsider our strategy.
    +    \penalty9999
    +    %
    +    % Back up by the size of the box, whether we did a page break or not.
    +    \kern -#1\mil
    +    %
    +    % Do not allow a page break right after this kern.
    +    \nobreak
    +  \fi
    +}
    +
    +% @br   forces paragraph break (and is undocumented).
    +
    +\let\br = \par
    +
    +% @page forces the start of a new page.
    +%
    +\def\page{\par\vfill\supereject}
    +
    +% @exdent text....
    +% outputs text on separate line in roman font, starting at standard page margin
    +
    +% This records the amount of indent in the innermost environment.
    +% That's how much \exdent should take out.
    +\newskip\exdentamount
    +
    +% This defn is used inside fill environments such as @defun.
    +\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
    +
    +% This defn is used inside nofill environments such as @example.
    +\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
    +  \leftline{\hskip\leftskip{\rm#1}}}}
    +
    +% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
    +% paragraph.  For more general purposes, use the \margin insertion
    +% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
    +%
    +\newskip\inmarginspacing \inmarginspacing=1cm
    +\def\strutdepth{\dp\strutbox}
    +%
    +\def\doinmargin#1#2{\strut\vadjust{%
    +  \nobreak
    +  \kern-\strutdepth
    +  \vtop to \strutdepth{%
    +    \baselineskip=\strutdepth
    +    \vss
    +    % if you have multiple lines of stuff to put here, you'll need to
    +    % make the vbox yourself of the appropriate size.
    +    \ifx#1l%
    +      \llap{\ignorespaces #2\hskip\inmarginspacing}%
    +    \else
    +      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
    +    \fi
    +    \null
    +  }%
    +}}
    +\def\inleftmargin{\doinmargin l}
    +\def\inrightmargin{\doinmargin r}
    +%
    +% @inmargin{TEXT [, RIGHT-TEXT]}
    +% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
    +% else use TEXT for both).
    +%
    +\def\inmargin#1{\parseinmargin #1,,\finish}
    +\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
    +  \setbox0 = \hbox{\ignorespaces #2}%
    +  \ifdim\wd0 > 0pt
    +    \def\lefttext{#1}%  have both texts
    +    \def\righttext{#2}%
    +  \else
    +    \def\lefttext{#1}%  have only one text
    +    \def\righttext{#1}%
    +  \fi
    +  %
    +  \ifodd\pageno
    +    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
    +  \else
    +    \def\temp{\inleftmargin\lefttext}%
    +  \fi
    +  \temp
    +}
    +
    +% @include FILE -- \input text of FILE.
    +%
    +\def\include{\parseargusing\filenamecatcodes\includezzz}
    +\def\includezzz#1{%
    +  \pushthisfilestack
    +  \def\thisfile{#1}%
    +  {%
    +    \makevalueexpandable  % we want to expand any @value in FILE.
    +    \turnoffactive        % and allow special characters in the expansion
    +    \indexnofonts         % Allow `@@' and other weird things in file names.
    +    \wlog{texinfo.tex: doing @include of #1^^J}%
    +    \edef\temp{\noexpand\input #1 }%
    +    %
    +    % This trickery is to read FILE outside of a group, in case it makes
    +    % definitions, etc.
    +    \expandafter
    +  }\temp
    +  \popthisfilestack
    +}
    +\def\filenamecatcodes{%
    +  \catcode`\\=\other
    +  \catcode`~=\other
    +  \catcode`^=\other
    +  \catcode`_=\other
    +  \catcode`|=\other
    +  \catcode`<=\other
    +  \catcode`>=\other
    +  \catcode`+=\other
    +  \catcode`-=\other
    +  \catcode`\`=\other
    +  \catcode`\'=\other
    +}
    +
    +\def\pushthisfilestack{%
    +  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
    +}
    +\def\pushthisfilestackX{%
    +  \expandafter\pushthisfilestackY\thisfile\StackTerm
    +}
    +\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
    +  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
    +}
    +
    +\def\popthisfilestack{\errthisfilestackempty}
    +\def\errthisfilestackempty{\errmessage{Internal error:
    +  the stack of filenames is empty.}}
    +%
    +\def\thisfile{}
    +
    +% @center line
    +% outputs that line, centered.
    +%
    +\parseargdef\center{%
    +  \ifhmode
    +    \let\centersub\centerH
    +  \else
    +    \let\centersub\centerV
    +  \fi
    +  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
    +  \let\centersub\relax % don't let the definition persist, just in case
    +}
    +\def\centerH#1{{%
    +  \hfil\break
    +  \advance\hsize by -\leftskip
    +  \advance\hsize by -\rightskip
    +  \line{#1}%
    +  \break
    +}}
    +%
    +\newcount\centerpenalty
    +\def\centerV#1{%
    +  % The idea here is the same as in \startdefun, \cartouche, etc.: if
    +  % @center is the first thing after a section heading, we need to wipe
    +  % out the negative parskip inserted by \sectionheading, but still
    +  % prevent a page break here.
    +  \centerpenalty = \lastpenalty
    +  \ifnum\centerpenalty>10000 \vskip\parskip \fi
    +  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
    +  \line{\kern\leftskip #1\kern\rightskip}%
    +}
    +
    +% @sp n   outputs n lines of vertical space
    +%
    +\parseargdef\sp{\vskip #1\baselineskip}
    +
    +% @comment ...line which is ignored...
    +% @c is the same as @comment
    +% @ignore ... @end ignore  is another way to write a comment
    +
    +
    +\def\c{\begingroup \catcode`\^^M=\active%
    +\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
    +\cxxx}
    +{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
    +%
    +\let\comment\c
    +
    +% @paragraphindent NCHARS
    +% We'll use ems for NCHARS, close enough.
    +% NCHARS can also be the word `asis' or `none'.
    +% We cannot feasibly implement @paragraphindent asis, though.
    +%
    +\def\asisword{asis} % no translation, these are keywords
    +\def\noneword{none}
    +%
    +\parseargdef\paragraphindent{%
    +  \def\temp{#1}%
    +  \ifx\temp\asisword
    +  \else
    +    \ifx\temp\noneword
    +      \defaultparindent = 0pt
    +    \else
    +      \defaultparindent = #1em
    +    \fi
    +  \fi
    +  \parindent = \defaultparindent
    +}
    +
    +% @exampleindent NCHARS
    +% We'll use ems for NCHARS like @paragraphindent.
    +% It seems @exampleindent asis isn't necessary, but
    +% I preserve it to make it similar to @paragraphindent.
    +\parseargdef\exampleindent{%
    +  \def\temp{#1}%
    +  \ifx\temp\asisword
    +  \else
    +    \ifx\temp\noneword
    +      \lispnarrowing = 0pt
    +    \else
    +      \lispnarrowing = #1em
    +    \fi
    +  \fi
    +}
    +
    +% @firstparagraphindent WORD
    +% If WORD is `none', then suppress indentation of the first paragraph
    +% after a section heading.  If WORD is `insert', then do indent at such
    +% paragraphs.
    +%
    +% The paragraph indentation is suppressed or not by calling
    +% \suppressfirstparagraphindent, which the sectioning commands do.
    +% We switch the definition of this back and forth according to WORD.
    +% By default, we suppress indentation.
    +%
    +\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
    +\def\insertword{insert}
    +%
    +\parseargdef\firstparagraphindent{%
    +  \def\temp{#1}%
    +  \ifx\temp\noneword
    +    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
    +  \else\ifx\temp\insertword
    +    \let\suppressfirstparagraphindent = \relax
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @firstparagraphindent option `\temp'}%
    +  \fi\fi
    +}
    +
    +% Here is how we actually suppress indentation.  Redefine \everypar to
    +% \kern backwards by \parindent, and then reset itself to empty.
    +%
    +% We also make \indent itself not actually do anything until the next
    +% paragraph.
    +%
    +\gdef\dosuppressfirstparagraphindent{%
    +  \gdef\indent  {\restorefirstparagraphindent \indent}%
    +  \gdef\noindent{\restorefirstparagraphindent \noindent}%
    +  \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
    +}
    +%
    +\gdef\restorefirstparagraphindent{%
    +  \global\let\indent = \ptexindent
    +  \global\let\noindent = \ptexnoindent
    +  \global\everypar = {}%
    +}
    +
    +
    +% @refill is a no-op.
    +\let\refill=\relax
    +
    +% @setfilename INFO-FILENAME - ignored
    +\let\setfilename=\comment
    +
    +% @bye.
    +\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
    +
    +
    +\message{pdf,}
    +% adobe `portable' document format
    +\newcount\tempnum
    +\newcount\lnkcount
    +\newtoks\filename
    +\newcount\filenamelength
    +\newcount\pgn
    +\newtoks\toksA
    +\newtoks\toksB
    +\newtoks\toksC
    +\newtoks\toksD
    +\newbox\boxA
    +\newbox\boxB
    +\newcount\countA
    +\newif\ifpdf
    +\newif\ifpdfmakepagedest
    +
    +%
    +% For LuaTeX
    +%
    +
    +\newif\iftxiuseunicodedestname
    +\txiuseunicodedestnamefalse % For pdfTeX etc.
    +
    +\ifx\luatexversion\thisisundefined
    +\else
    +  % Use Unicode destination names
    +  \txiuseunicodedestnametrue
    +  % Escape PDF strings with converting UTF-16 from UTF-8
    +  \begingroup
    +    \catcode`\%=12
    +    \directlua{
    +      function UTF16oct(str)
    +        tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
    +        for c in string.utfvalues(str) do
    +          if c < 0x10000 then
    +            tex.sprint(
    +              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
    +                            string.char(0x5c) .. string.char(0x25) .. '03o',
    +                            math.floor(c / 256), math.floor(c % 256)))
    +          else
    +            c = c - 0x10000
    +            local c_hi = c / 1024 + 0xd800
    +            local c_lo = c % 1024 + 0xdc00
    +            tex.sprint(
    +              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
    +                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
    +                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
    +                            string.char(0x5c) .. string.char(0x25) .. '03o',
    +                            math.floor(c_hi / 256), math.floor(c_hi % 256),
    +                            math.floor(c_lo / 256), math.floor(c_lo % 256)))
    +          end
    +        end
    +      end
    +    }
    +  \endgroup
    +  \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
    +  % Escape PDF strings without converting
    +  \begingroup
    +    \directlua{
    +      function PDFescstr(str)
    +        for c in string.bytes(str) do
    +          if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
    +            tex.sprint(-2,
    +              string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
    +                            c))
    +          else
    +            tex.sprint(-2, string.char(c))
    +          end
    +        end
    +      end
    +    }
    +    % The -2 in the arguments here gives all the input to TeX catcode 12
    +    % (other) or 10 (space), preventing undefined control sequence errors. See
    +    % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
    +    %
    +  \endgroup
    +  \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
    +  \ifnum\luatexversion>84
    +    % For LuaTeX >= 0.85
    +    \def\pdfdest{\pdfextension dest}
    +    \let\pdfoutput\outputmode
    +    \def\pdfliteral{\pdfextension literal}
    +    \def\pdfcatalog{\pdfextension catalog}
    +    \def\pdftexversion{\numexpr\pdffeedback version\relax}
    +    \let\pdfximage\saveimageresource
    +    \let\pdfrefximage\useimageresource
    +    \let\pdflastximage\lastsavedimageresourceindex
    +    \def\pdfendlink{\pdfextension endlink\relax}
    +    \def\pdfoutline{\pdfextension outline}
    +    \def\pdfstartlink{\pdfextension startlink}
    +    \def\pdffontattr{\pdfextension fontattr}
    +    \def\pdfobj{\pdfextension obj}
    +    \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
    +    \let\pdfpagewidth\pagewidth
    +    \let\pdfpageheight\pageheight
    +    \edef\pdfhorigin{\pdfvariable horigin}
    +    \edef\pdfvorigin{\pdfvariable vorigin}
    +  \fi
    +\fi
    +
    +% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
    +% can be set).  So we test for \relax and 0 as well as being undefined.
    +\ifx\pdfoutput\thisisundefined
    +\else
    +  \ifx\pdfoutput\relax
    +  \else
    +    \ifcase\pdfoutput
    +    \else
    +      \pdftrue
    +    \fi
    +  \fi
    +\fi
    +
    +\newif\ifpdforxetex
    +\pdforxetexfalse
    +\ifpdf
    +  \pdforxetextrue
    +\fi
    +\ifx\XeTeXrevision\thisisundefined\else
    +  \pdforxetextrue
    +\fi
    +
    +
    +% PDF uses PostScript string constants for the names of xref targets,
    +% for display in the outlines, and in other places.  Thus, we have to
    +% double any backslashes.  Otherwise, a name like "\node" will be
    +% interpreted as a newline (\n), followed by o, d, e.  Not good.
    +%
    +% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
    +% related messages.  The final outcome is that it is up to the TeX user
    +% to double the backslashes and otherwise make the string valid, so
    +% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
    +% do this reliably, so we use it.
    +
    +% #1 is a control sequence in which to do the replacements,
    +% which we \xdef.
    +\def\txiescapepdf#1{%
    +  \ifx\pdfescapestring\thisisundefined
    +    % No primitive available; should we give a warning or log?
    +    % Many times it won't matter.
    +    \xdef#1{#1}%
    +  \else
    +    % The expandable \pdfescapestring primitive escapes parentheses,
    +    % backslashes, and other special chars.
    +    \xdef#1{\pdfescapestring{#1}}%
    +  \fi
    +}
    +\def\txiescapepdfutfsixteen#1{%
    +  \ifx\pdfescapestrutfsixteen\thisisundefined
    +    % No UTF-16 converting macro available.
    +    \txiescapepdf{#1}%
    +  \else
    +    \xdef#1{\pdfescapestrutfsixteen{#1}}%
    +  \fi
    +}
    +
    +\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
    +with PDF output, and none of those formats could be found.  (.eps cannot
    +be supported due to the design of the PDF format; use regular TeX (DVI
    +output) for that.)}
    +
    +\ifpdf
    +  %
    +  % Color manipulation macros using ideas from pdfcolor.tex,
    +  % except using rgb instead of cmyk; the latter is said to render as a
    +  % very dark gray on-screen and a very dark halftone in print, instead
    +  % of actual black. The dark red here is dark enough to print on paper as
    +  % nearly black, but still distinguishable for online viewing.  We use
    +  % black by default, though.
    +  \def\rgbDarkRed{0.50 0.09 0.12}
    +  \def\rgbBlack{0 0 0}
    +  %
    +  % rg sets the color for filling (usual text, etc.);
    +  % RG sets the color for stroking (thin rules, e.g., normal _'s).
    +  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
    +  %
    +  % Set color, and create a mark which defines \thiscolor accordingly,
    +  % so that \makeheadline knows which color to restore.
    +  \def\setcolor#1{%
    +    \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
    +    \domark
    +    \pdfsetcolor{#1}%
    +  }
    +  %
    +  \def\maincolor{\rgbBlack}
    +  \pdfsetcolor{\maincolor}
    +  \edef\thiscolor{\maincolor}
    +  \def\currentcolordefs{}
    +  %
    +  \def\makefootline{%
    +    \baselineskip24pt
    +    \line{\pdfsetcolor{\maincolor}\the\footline}%
    +  }
    +  %
    +  \def\makeheadline{%
    +    \vbox to 0pt{%
    +      \vskip-22.5pt
    +      \line{%
    +        \vbox to8.5pt{}%
    +        % Extract \thiscolor definition from the marks.
    +        \getcolormarks
    +        % Typeset the headline with \maincolor, then restore the color.
    +        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
    +      }%
    +      \vss
    +    }%
    +    \nointerlineskip
    +  }
    +  %
    +  %
    +  \pdfcatalog{/PageMode /UseOutlines}
    +  %
    +  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
    +  \def\dopdfimage#1#2#3{%
    +    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
    +    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
    +    %
    +    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
    +    % others).  Let's try in that order, PDF first since if
    +    % someone has a scalable image, presumably better to use that than a
    +    % bitmap.
    +    \let\pdfimgext=\empty
    +    \begingroup
    +      \openin 1 #1.pdf \ifeof 1
    +        \openin 1 #1.PDF \ifeof 1
    +          \openin 1 #1.png \ifeof 1
    +            \openin 1 #1.jpg \ifeof 1
    +              \openin 1 #1.jpeg \ifeof 1
    +                \openin 1 #1.JPG \ifeof 1
    +                  \errhelp = \nopdfimagehelp
    +                  \errmessage{Could not find image file #1 for pdf}%
    +                \else \gdef\pdfimgext{JPG}%
    +                \fi
    +              \else \gdef\pdfimgext{jpeg}%
    +              \fi
    +            \else \gdef\pdfimgext{jpg}%
    +            \fi
    +          \else \gdef\pdfimgext{png}%
    +          \fi
    +        \else \gdef\pdfimgext{PDF}%
    +        \fi
    +      \else \gdef\pdfimgext{pdf}%
    +      \fi
    +      \closein 1
    +    \endgroup
    +    %
    +    % without \immediate, ancient pdftex seg faults when the same image is
    +    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
    +    \ifnum\pdftexversion < 14
    +      \immediate\pdfimage
    +    \else
    +      \immediate\pdfximage
    +    \fi
    +      \ifdim \wd0 >0pt width \pdfimagewidth \fi
    +      \ifdim \wd2 >0pt height \pdfimageheight \fi
    +      \ifnum\pdftexversion<13
    +         #1.\pdfimgext
    +       \else
    +         {#1.\pdfimgext}%
    +       \fi
    +    \ifnum\pdftexversion < 14 \else
    +      \pdfrefximage \pdflastximage
    +    \fi}
    +  %
    +  \def\setpdfdestname#1{{%
    +    % We have to set dummies so commands such as @code, and characters
    +    % such as \, aren't expanded when present in a section title.
    +    \indexnofonts
    +    \makevalueexpandable
    +    \turnoffactive
    +    \iftxiuseunicodedestname
    +      \ifx \declaredencoding \latone
    +        % Pass through Latin-1 characters.
    +        % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
    +      \else
    +        \ifx \declaredencoding \utfeight
    +          % Pass through Unicode characters.
    +        \else
    +          % Use ASCII approximations in destination names.
    +          \passthroughcharsfalse
    +        \fi
    +      \fi
    +    \else
    +      % Use ASCII approximations in destination names.
    +      \passthroughcharsfalse
    +    \fi
    +    \def\pdfdestname{#1}%
    +    \txiescapepdf\pdfdestname
    +  }}
    +  %
    +  \def\setpdfoutlinetext#1{{%
    +    \indexnofonts
    +    \makevalueexpandable
    +    \turnoffactive
    +    \ifx \declaredencoding \latone
    +      % The PDF format can use an extended form of Latin-1 in bookmark
    +      % strings.  See Appendix D of the PDF Reference, Sixth Edition, for
    +      % the "PDFDocEncoding".
    +      \passthroughcharstrue
    +      % Pass through Latin-1 characters.
    +      %   LuaTeX: Convert to Unicode
    +      %   pdfTeX: Use Latin-1 as PDFDocEncoding
    +      \def\pdfoutlinetext{#1}%
    +    \else
    +      \ifx \declaredencoding \utfeight
    +        \ifx\luatexversion\thisisundefined
    +          % For pdfTeX  with UTF-8.
    +          % TODO: the PDF format can use UTF-16 in bookmark strings,
    +          % but the code for this isn't done yet.
    +          % Use ASCII approximations.
    +          \passthroughcharsfalse
    +          \def\pdfoutlinetext{#1}%
    +        \else
    +          % For LuaTeX with UTF-8.
    +          % Pass through Unicode characters for title texts.
    +          \passthroughcharstrue
    +          \def\pdfoutlinetext{#1}%
    +        \fi
    +      \else
    +        % For non-Latin-1 or non-UTF-8 encodings.
    +        % Use ASCII approximations.
    +        \passthroughcharsfalse
    +        \def\pdfoutlinetext{#1}%
    +      \fi
    +    \fi
    +    % LuaTeX: Convert to UTF-16
    +    % pdfTeX: Use Latin-1 as PDFDocEncoding
    +    \txiescapepdfutfsixteen\pdfoutlinetext
    +  }}
    +  %
    +  \def\pdfmkdest#1{%
    +    \setpdfdestname{#1}%
    +    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
    +  }
    +  %
    +  % used to mark target names; must be expandable.
    +  \def\pdfmkpgn#1{#1}
    +  %
    +  % by default, use black for everything.
    +  \def\urlcolor{\rgbBlack}
    +  \def\linkcolor{\rgbBlack}
    +  \def\endlink{\setcolor{\maincolor}\pdfendlink}
    +  %
    +  % Adding outlines to PDF; macros for calculating structure of outlines
    +  % come from Petr Olsak
    +  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
    +    \else \csname#1\endcsname \fi}
    +  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
    +    \advance\tempnum by 1
    +    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
    +  %
    +  % #1 is the section text, which is what will be displayed in the
    +  % outline by the pdf viewer.  #2 is the pdf expression for the number
    +  % of subentries (or empty, for subsubsections).  #3 is the node text,
    +  % which might be empty if this toc entry had no corresponding node.
    +  % #4 is the page number
    +  %
    +  \def\dopdfoutline#1#2#3#4{%
    +    % Generate a link to the node text if that exists; else, use the
    +    % page number.  We could generate a destination for the section
    +    % text in the case where a section has no node, but it doesn't
    +    % seem worth the trouble, since most documents are normally structured.
    +    \setpdfoutlinetext{#1}
    +    \setpdfdestname{#3}
    +    \ifx\pdfdestname\empty
    +      \def\pdfdestname{#4}%
    +    \fi
    +    %
    +    \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
    +  }
    +  %
    +  \def\pdfmakeoutlines{%
    +    \begingroup
    +      % Read toc silently, to get counts of subentries for \pdfoutline.
    +      \def\partentry##1##2##3##4{}% ignore parts in the outlines
    +      \def\numchapentry##1##2##3##4{%
    +	\def\thischapnum{##2}%
    +	\def\thissecnum{0}%
    +	\def\thissubsecnum{0}%
    +      }%
    +      \def\numsecentry##1##2##3##4{%
    +	\advancenumber{chap\thischapnum}%
    +	\def\thissecnum{##2}%
    +	\def\thissubsecnum{0}%
    +      }%
    +      \def\numsubsecentry##1##2##3##4{%
    +	\advancenumber{sec\thissecnum}%
    +	\def\thissubsecnum{##2}%
    +      }%
    +      \def\numsubsubsecentry##1##2##3##4{%
    +	\advancenumber{subsec\thissubsecnum}%
    +      }%
    +      \def\thischapnum{0}%
    +      \def\thissecnum{0}%
    +      \def\thissubsecnum{0}%
    +      %
    +      % use \def rather than \let here because we redefine \chapentry et
    +      % al. a second time, below.
    +      \def\appentry{\numchapentry}%
    +      \def\appsecentry{\numsecentry}%
    +      \def\appsubsecentry{\numsubsecentry}%
    +      \def\appsubsubsecentry{\numsubsubsecentry}%
    +      \def\unnchapentry{\numchapentry}%
    +      \def\unnsecentry{\numsecentry}%
    +      \def\unnsubsecentry{\numsubsecentry}%
    +      \def\unnsubsubsecentry{\numsubsubsecentry}%
    +      \readdatafile{toc}%
    +      %
    +      % Read toc second time, this time actually producing the outlines.
    +      % The `-' means take the \expnumber as the absolute number of
    +      % subentries, which we calculated on our first read of the .toc above.
    +      %
    +      % We use the node names as the destinations.
    +      \def\numchapentry##1##2##3##4{%
    +        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
    +      \def\numsecentry##1##2##3##4{%
    +        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
    +      \def\numsubsecentry##1##2##3##4{%
    +        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
    +      \def\numsubsubsecentry##1##2##3##4{% count is always zero
    +        \dopdfoutline{##1}{}{##3}{##4}}%
    +      %
    +      % PDF outlines are displayed using system fonts, instead of
    +      % document fonts.  Therefore we cannot use special characters,
    +      % since the encoding is unknown.  For example, the eogonek from
    +      % Latin 2 (0xea) gets translated to a | character.  Info from
    +      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
    +      %
    +      % TODO this right, we have to translate 8-bit characters to
    +      % their "best" equivalent, based on the @documentencoding.  Too
    +      % much work for too little return.  Just use the ASCII equivalents
    +      % we use for the index sort strings.
    +      %
    +      \indexnofonts
    +      \setupdatafile
    +      % We can have normal brace characters in the PDF outlines, unlike
    +      % Texinfo index files.  So set that up.
    +      \def\{{\lbracecharliteral}%
    +      \def\}{\rbracecharliteral}%
    +      \catcode`\\=\active \otherbackslash
    +      \input \tocreadfilename
    +    \endgroup
    +  }
    +  {\catcode`[=1 \catcode`]=2
    +   \catcode`{=\other \catcode`}=\other
    +   \gdef\lbracecharliteral[{]%
    +   \gdef\rbracecharliteral[}]%
    +  ]
    +  %
    +  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
    +    \ifx\PP\D\let\nextsp\relax
    +    \else\let\nextsp\skipspaces
    +      \addtokens{\filename}{\PP}%
    +      \advance\filenamelength by 1
    +    \fi
    +    \nextsp}
    +  \def\getfilename#1{%
    +    \filenamelength=0
    +    % If we don't expand the argument now, \skipspaces will get
    +    % snagged on things like "@value{foo}".
    +    \edef\temp{#1}%
    +    \expandafter\skipspaces\temp|\relax
    +  }
    +  \ifnum\pdftexversion < 14
    +    \let \startlink \pdfannotlink
    +  \else
    +    \let \startlink \pdfstartlink
    +  \fi
    +  % make a live url in pdf output.
    +  \def\pdfurl#1{%
    +    \begingroup
    +      % it seems we really need yet another set of dummies; have not
    +      % tried to figure out what each command should do in the context
    +      % of @url.  for now, just make @/ a no-op, that's the only one
    +      % people have actually reported a problem with.
    +      %
    +      \normalturnoffactive
    +      \def\@{@}%
    +      \let\/=\empty
    +      \makevalueexpandable
    +      % do we want to go so far as to use \indexnofonts instead of just
    +      % special-casing \var here?
    +      \def\var##1{##1}%
    +      %
    +      \leavevmode\setcolor{\urlcolor}%
    +      \startlink attr{/Border [0 0 0]}%
    +        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
    +    \endgroup}
    +  % \pdfgettoks - Surround page numbers in #1 with @pdflink.  #1 may
    +  % be a simple number, or a list of numbers in the case of an index
    +  % entry.
    +  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
    +  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
    +  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
    +  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
    +  \def\maketoks{%
    +    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
    +    \ifx\first0\adn0
    +    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
    +    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
    +    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
    +    \else
    +      \ifnum0=\countA\else\makelink\fi
    +      \ifx\first.\let\next=\done\else
    +        \let\next=\maketoks
    +        \addtokens{\toksB}{\the\toksD}
    +        \ifx\first,\addtokens{\toksB}{\space}\fi
    +      \fi
    +    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    +    \next}
    +  \def\makelink{\addtokens{\toksB}%
    +    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
    +  \def\pdflink#1{%
    +    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
    +    \setcolor{\linkcolor}#1\endlink}
    +  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
    +\else
    +  % non-pdf mode
    +  \let\pdfmkdest = \gobble
    +  \let\pdfurl = \gobble
    +  \let\endlink = \relax
    +  \let\setcolor = \gobble
    +  \let\pdfsetcolor = \gobble
    +  \let\pdfmakeoutlines = \relax
    +\fi  % \ifx\pdfoutput
    +
    +%
    +% For XeTeX
    +%
    +\ifx\XeTeXrevision\thisisundefined
    +\else
    +  %
    +  % XeTeX version check
    +  %
    +  \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
    +    % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
    +    % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
    +    % For avoiding PDF destination name replacement, we use this special
    +    % instead of xdvipdfmx's command line option `-C 0x0010'.
    +    \special{dvipdfmx:config C 0x0010}
    +    % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
    +    % It can handle Unicode destination names for PDF.
    +    \txiuseunicodedestnametrue
    +  \else
    +    % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
    +    % `dvipdfmx:config' special.
    +    % So for avoiding PDF destination name replacement,
    +    % xdvipdfmx's command line option `-C 0x0010' is necessary.
    +    %
    +    % XeTeX < 0.99995 can not handle Unicode destination names for PDF
    +    % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
    +    % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
    +    \txiuseunicodedestnamefalse
    +  \fi
    +  %
    +  % Color support
    +  %
    +  \def\rgbDarkRed{0.50 0.09 0.12}
    +  \def\rgbBlack{0 0 0}
    +  %
    +  \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
    +  %
    +  % Set color, and create a mark which defines \thiscolor accordingly,
    +  % so that \makeheadline knows which color to restore.
    +  \def\setcolor#1{%
    +    \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
    +    \domark
    +    \pdfsetcolor{#1}%
    +  }
    +  %
    +  \def\maincolor{\rgbBlack}
    +  \pdfsetcolor{\maincolor}
    +  \edef\thiscolor{\maincolor}
    +  \def\currentcolordefs{}
    +  %
    +  \def\makefootline{%
    +    \baselineskip24pt
    +    \line{\pdfsetcolor{\maincolor}\the\footline}%
    +  }
    +  %
    +  \def\makeheadline{%
    +    \vbox to 0pt{%
    +      \vskip-22.5pt
    +      \line{%
    +        \vbox to8.5pt{}%
    +        % Extract \thiscolor definition from the marks.
    +        \getcolormarks
    +        % Typeset the headline with \maincolor, then restore the color.
    +        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
    +      }%
    +      \vss
    +    }%
    +    \nointerlineskip
    +  }
    +  %
    +  % PDF outline support
    +  %
    +  % Emulate pdfTeX primitive
    +  \def\pdfdest name#1 xyz{%
    +    \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
    +  }
    +  %
    +  \def\setpdfdestname#1{{%
    +    % We have to set dummies so commands such as @code, and characters
    +    % such as \, aren't expanded when present in a section title.
    +    \indexnofonts
    +    \makevalueexpandable
    +    \turnoffactive
    +    \iftxiuseunicodedestname
    +      % Pass through Unicode characters.
    +    \else
    +      % Use ASCII approximations in destination names.
    +      \passthroughcharsfalse
    +    \fi
    +    \def\pdfdestname{#1}%
    +    \txiescapepdf\pdfdestname
    +  }}
    +  %
    +  \def\setpdfoutlinetext#1{{%
    +    \turnoffactive
    +    % Always use Unicode characters in title texts.
    +    \def\pdfoutlinetext{#1}%
    +    % For XeTeX, xdvipdfmx converts to UTF-16.
    +    % So we do not convert.
    +    \txiescapepdf\pdfoutlinetext
    +  }}
    +  %
    +  \def\pdfmkdest#1{%
    +    \setpdfdestname{#1}%
    +    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
    +  }
    +  %
    +  % by default, use black for everything.
    +  \def\urlcolor{\rgbBlack}
    +  \def\linkcolor{\rgbBlack}
    +  \def\endlink{\setcolor{\maincolor}\pdfendlink}
    +  %
    +  \def\dopdfoutline#1#2#3#4{%
    +    \setpdfoutlinetext{#1}
    +    \setpdfdestname{#3}
    +    \ifx\pdfdestname\empty
    +      \def\pdfdestname{#4}%
    +    \fi
    +    %
    +    \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
    +      << /S /GoTo /D (\pdfdestname) >> >> }%
    +  }
    +  %
    +  \def\pdfmakeoutlines{%
    +    \begingroup
    +      %
    +      % For XeTeX, counts of subentries are not necessary.
    +      % Therefore, we read toc only once.
    +      %
    +      % We use node names as destinations.
    +      \def\partentry##1##2##3##4{}% ignore parts in the outlines
    +      \def\numchapentry##1##2##3##4{%
    +        \dopdfoutline{##1}{1}{##3}{##4}}%
    +      \def\numsecentry##1##2##3##4{%
    +        \dopdfoutline{##1}{2}{##3}{##4}}%
    +      \def\numsubsecentry##1##2##3##4{%
    +        \dopdfoutline{##1}{3}{##3}{##4}}%
    +      \def\numsubsubsecentry##1##2##3##4{%
    +        \dopdfoutline{##1}{4}{##3}{##4}}%
    +      %
    +      \let\appentry\numchapentry%
    +      \let\appsecentry\numsecentry%
    +      \let\appsubsecentry\numsubsecentry%
    +      \let\appsubsubsecentry\numsubsubsecentry%
    +      \let\unnchapentry\numchapentry%
    +      \let\unnsecentry\numsecentry%
    +      \let\unnsubsecentry\numsubsecentry%
    +      \let\unnsubsubsecentry\numsubsubsecentry%
    +      %
    +      % For XeTeX, xdvipdfmx converts strings to UTF-16.
    +      % Therefore, the encoding and the language may not be considered.
    +      %
    +      \indexnofonts
    +      \setupdatafile
    +      % We can have normal brace characters in the PDF outlines, unlike
    +      % Texinfo index files.  So set that up.
    +      \def\{{\lbracecharliteral}%
    +      \def\}{\rbracecharliteral}%
    +      \catcode`\\=\active \otherbackslash
    +      \input \tocreadfilename
    +    \endgroup
    +  }
    +  {\catcode`[=1 \catcode`]=2
    +   \catcode`{=\other \catcode`}=\other
    +   \gdef\lbracecharliteral[{]%
    +   \gdef\rbracecharliteral[}]%
    +  ]
    +
    +  \special{pdf:docview << /PageMode /UseOutlines >> }
    +  % ``\special{pdf:tounicode ...}'' is not necessary
    +  % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
    +  % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
    +  % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
    +  % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
    +%
    +  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
    +    \ifx\PP\D\let\nextsp\relax
    +    \else\let\nextsp\skipspaces
    +      \addtokens{\filename}{\PP}%
    +      \advance\filenamelength by 1
    +    \fi
    +    \nextsp}
    +  \def\getfilename#1{%
    +    \filenamelength=0
    +    % If we don't expand the argument now, \skipspaces will get
    +    % snagged on things like "@value{foo}".
    +    \edef\temp{#1}%
    +    \expandafter\skipspaces\temp|\relax
    +  }
    +  % make a live url in pdf output.
    +  \def\pdfurl#1{%
    +    \begingroup
    +      % it seems we really need yet another set of dummies; have not
    +      % tried to figure out what each command should do in the context
    +      % of @url.  for now, just make @/ a no-op, that's the only one
    +      % people have actually reported a problem with.
    +      %
    +      \normalturnoffactive
    +      \def\@{@}%
    +      \let\/=\empty
    +      \makevalueexpandable
    +      % do we want to go so far as to use \indexnofonts instead of just
    +      % special-casing \var here?
    +      \def\var##1{##1}%
    +      %
    +      \leavevmode\setcolor{\urlcolor}%
    +      \special{pdf:bann << /Border [0 0 0]
    +        /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
    +    \endgroup}
    +  \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
    +  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
    +  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
    +  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
    +  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
    +  \def\maketoks{%
    +    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
    +    \ifx\first0\adn0
    +    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
    +    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
    +    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
    +    \else
    +      \ifnum0=\countA\else\makelink\fi
    +      \ifx\first.\let\next=\done\else
    +        \let\next=\maketoks
    +        \addtokens{\toksB}{\the\toksD}
    +        \ifx\first,\addtokens{\toksB}{\space}\fi
    +      \fi
    +    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    +    \next}
    +  \def\makelink{\addtokens{\toksB}%
    +    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
    +  \def\pdflink#1{%
    +    \special{pdf:bann << /Border [0 0 0]
    +      /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
    +    \setcolor{\linkcolor}#1\endlink}
    +  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
    +%
    +  %
    +  % @image support
    +  %
    +  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
    +  \def\doxeteximage#1#2#3{%
    +    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
    +    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
    +    %
    +    % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
    +    % others).  Let's try in that order, PDF first since if
    +    % someone has a scalable image, presumably better to use that than a
    +    % bitmap.
    +    \let\xeteximgext=\empty
    +    \begingroup
    +      \openin 1 #1.pdf \ifeof 1
    +        \openin 1 #1.PDF \ifeof 1
    +          \openin 1 #1.png \ifeof 1
    +            \openin 1 #1.jpg \ifeof 1
    +              \openin 1 #1.jpeg \ifeof 1
    +                \openin 1 #1.JPG \ifeof 1
    +                  \errmessage{Could not find image file #1 for XeTeX}%
    +                \else \gdef\xeteximgext{JPG}%
    +                \fi
    +              \else \gdef\xeteximgext{jpeg}%
    +              \fi
    +            \else \gdef\xeteximgext{jpg}%
    +            \fi
    +          \else \gdef\xeteximgext{png}%
    +          \fi
    +        \else \gdef\xeteximgext{PDF}%
    +        \fi
    +      \else \gdef\xeteximgext{pdf}%
    +      \fi
    +      \closein 1
    +    \endgroup
    +    %
    +    \def\xetexpdfext{pdf}%
    +    \ifx\xeteximgext\xetexpdfext
    +      \XeTeXpdffile "#1".\xeteximgext ""
    +    \else
    +      \def\xetexpdfext{PDF}%
    +      \ifx\xeteximgext\xetexpdfext
    +        \XeTeXpdffile "#1".\xeteximgext ""
    +      \else
    +        \XeTeXpicfile "#1".\xeteximgext ""
    +      \fi
    +    \fi
    +    \ifdim \wd0 >0pt width \xeteximagewidth \fi
    +    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
    +  }
    +\fi
    +
    +
    +%
    +\message{fonts,}
    +
    +% Set the baselineskip to #1, and the lineskip and strut size
    +% correspondingly.  There is no deep meaning behind these magic numbers
    +% used as factors; they just match (closely enough) what Knuth defined.
    +%
    +\def\lineskipfactor{.08333}
    +\def\strutheightpercent{.70833}
    +\def\strutdepthpercent {.29167}
    +%
    +% can get a sort of poor man's double spacing by redefining this.
    +\def\baselinefactor{1}
    +%
    +\newdimen\textleading
    +\def\setleading#1{%
    +  \dimen0 = #1\relax
    +  \normalbaselineskip = \baselinefactor\dimen0
    +  \normallineskip = \lineskipfactor\normalbaselineskip
    +  \normalbaselines
    +  \setbox\strutbox =\hbox{%
    +    \vrule width0pt height\strutheightpercent\baselineskip
    +                    depth \strutdepthpercent \baselineskip
    +  }%
    +}
    +
    +% PDF CMaps.  See also LaTeX's t1.cmap.
    +%
    +% do nothing with this by default.
    +\expandafter\let\csname cmapOT1\endcsname\gobble
    +\expandafter\let\csname cmapOT1IT\endcsname\gobble
    +\expandafter\let\csname cmapOT1TT\endcsname\gobble
    +
    +% if we are producing pdf, and we have \pdffontattr, then define cmaps.
    +% (\pdffontattr was introduced many years ago, but people still run
    +% older pdftex's; it's easy to conditionalize, so we do.)
    +\ifpdf \ifx\pdffontattr\thisisundefined \else
    +  \begingroup
    +    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    +    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
    +%%DocumentNeededResources: ProcSet (CIDInit)
    +%%IncludeResource: ProcSet (CIDInit)
    +%%BeginResource: CMap (TeX-OT1-0)
    +%%Title: (TeX-OT1-0 TeX OT1 0)
    +%%Version: 1.000
    +%%EndComments
    +/CIDInit /ProcSet findresource begin
    +12 dict begin
    +begincmap
    +/CIDSystemInfo
    +<< /Registry (TeX)
    +/Ordering (OT1)
    +/Supplement 0
    +>> def
    +/CMapName /TeX-OT1-0 def
    +/CMapType 2 def
    +1 begincodespacerange
    +<00> <7F>
    +endcodespacerange
    +8 beginbfrange
    +<00> <01> <0393>
    +<09> <0A> <03A8>
    +<23> <26> <0023>
    +<28> <3B> <0028>
    +<3F> <5B> <003F>
    +<5D> <5E> <005D>
    +<61> <7A> <0061>
    +<7B> <7C> <2013>
    +endbfrange
    +40 beginbfchar
    +<02> <0398>
    +<03> <039B>
    +<04> <039E>
    +<05> <03A0>
    +<06> <03A3>
    +<07> <03D2>
    +<08> <03A6>
    +<0B> <00660066>
    +<0C> <00660069>
    +<0D> <0066006C>
    +<0E> <006600660069>
    +<0F> <00660066006C>
    +<10> <0131>
    +<11> <0237>
    +<12> <0060>
    +<13> <00B4>
    +<14> <02C7>
    +<15> <02D8>
    +<16> <00AF>
    +<17> <02DA>
    +<18> <00B8>
    +<19> <00DF>
    +<1A> <00E6>
    +<1B> <0153>
    +<1C> <00F8>
    +<1D> <00C6>
    +<1E> <0152>
    +<1F> <00D8>
    +<21> <0021>
    +<22> <201D>
    +<27> <2019>
    +<3C> <00A1>
    +<3D> <003D>
    +<3E> <00BF>
    +<5C> <201C>
    +<5F> <02D9>
    +<60> <2018>
    +<7D> <02DD>
    +<7E> <007E>
    +<7F> <00A8>
    +endbfchar
    +endcmap
    +CMapName currentdict /CMap defineresource pop
    +end
    +end
    +%%EndResource
    +%%EOF
    +    }\endgroup
    +  \expandafter\edef\csname cmapOT1\endcsname#1{%
    +    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
    +  }%
    +%
    +% \cmapOT1IT
    +  \begingroup
    +    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    +    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
    +%%DocumentNeededResources: ProcSet (CIDInit)
    +%%IncludeResource: ProcSet (CIDInit)
    +%%BeginResource: CMap (TeX-OT1IT-0)
    +%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
    +%%Version: 1.000
    +%%EndComments
    +/CIDInit /ProcSet findresource begin
    +12 dict begin
    +begincmap
    +/CIDSystemInfo
    +<< /Registry (TeX)
    +/Ordering (OT1IT)
    +/Supplement 0
    +>> def
    +/CMapName /TeX-OT1IT-0 def
    +/CMapType 2 def
    +1 begincodespacerange
    +<00> <7F>
    +endcodespacerange
    +8 beginbfrange
    +<00> <01> <0393>
    +<09> <0A> <03A8>
    +<25> <26> <0025>
    +<28> <3B> <0028>
    +<3F> <5B> <003F>
    +<5D> <5E> <005D>
    +<61> <7A> <0061>
    +<7B> <7C> <2013>
    +endbfrange
    +42 beginbfchar
    +<02> <0398>
    +<03> <039B>
    +<04> <039E>
    +<05> <03A0>
    +<06> <03A3>
    +<07> <03D2>
    +<08> <03A6>
    +<0B> <00660066>
    +<0C> <00660069>
    +<0D> <0066006C>
    +<0E> <006600660069>
    +<0F> <00660066006C>
    +<10> <0131>
    +<11> <0237>
    +<12> <0060>
    +<13> <00B4>
    +<14> <02C7>
    +<15> <02D8>
    +<16> <00AF>
    +<17> <02DA>
    +<18> <00B8>
    +<19> <00DF>
    +<1A> <00E6>
    +<1B> <0153>
    +<1C> <00F8>
    +<1D> <00C6>
    +<1E> <0152>
    +<1F> <00D8>
    +<21> <0021>
    +<22> <201D>
    +<23> <0023>
    +<24> <00A3>
    +<27> <2019>
    +<3C> <00A1>
    +<3D> <003D>
    +<3E> <00BF>
    +<5C> <201C>
    +<5F> <02D9>
    +<60> <2018>
    +<7D> <02DD>
    +<7E> <007E>
    +<7F> <00A8>
    +endbfchar
    +endcmap
    +CMapName currentdict /CMap defineresource pop
    +end
    +end
    +%%EndResource
    +%%EOF
    +    }\endgroup
    +  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
    +    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
    +  }%
    +%
    +% \cmapOT1TT
    +  \begingroup
    +    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    +    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
    +%%DocumentNeededResources: ProcSet (CIDInit)
    +%%IncludeResource: ProcSet (CIDInit)
    +%%BeginResource: CMap (TeX-OT1TT-0)
    +%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
    +%%Version: 1.000
    +%%EndComments
    +/CIDInit /ProcSet findresource begin
    +12 dict begin
    +begincmap
    +/CIDSystemInfo
    +<< /Registry (TeX)
    +/Ordering (OT1TT)
    +/Supplement 0
    +>> def
    +/CMapName /TeX-OT1TT-0 def
    +/CMapType 2 def
    +1 begincodespacerange
    +<00> <7F>
    +endcodespacerange
    +5 beginbfrange
    +<00> <01> <0393>
    +<09> <0A> <03A8>
    +<21> <26> <0021>
    +<28> <5F> <0028>
    +<61> <7E> <0061>
    +endbfrange
    +32 beginbfchar
    +<02> <0398>
    +<03> <039B>
    +<04> <039E>
    +<05> <03A0>
    +<06> <03A3>
    +<07> <03D2>
    +<08> <03A6>
    +<0B> <2191>
    +<0C> <2193>
    +<0D> <0027>
    +<0E> <00A1>
    +<0F> <00BF>
    +<10> <0131>
    +<11> <0237>
    +<12> <0060>
    +<13> <00B4>
    +<14> <02C7>
    +<15> <02D8>
    +<16> <00AF>
    +<17> <02DA>
    +<18> <00B8>
    +<19> <00DF>
    +<1A> <00E6>
    +<1B> <0153>
    +<1C> <00F8>
    +<1D> <00C6>
    +<1E> <0152>
    +<1F> <00D8>
    +<20> <2423>
    +<27> <2019>
    +<60> <2018>
    +<7F> <00A8>
    +endbfchar
    +endcmap
    +CMapName currentdict /CMap defineresource pop
    +end
    +end
    +%%EndResource
    +%%EOF
    +    }\endgroup
    +  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
    +    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
    +  }%
    +\fi\fi
    +
    +
    +% Set the font macro #1 to the font named \fontprefix#2.
    +% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
    +% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
    +% Example:
    +% #1 = \textrm
    +% #2 = \rmshape
    +% #3 = 10
    +% #4 = \mainmagstep
    +% #5 = OT1
    +%
    +\def\setfont#1#2#3#4#5{%
    +  \font#1=\fontprefix#2#3 scaled #4
    +  \csname cmap#5\endcsname#1%
    +}
    +% This is what gets called when #5 of \setfont is empty.
    +\let\cmap\gobble
    +%
    +% (end of cmaps)
    +
    +% Use cm as the default font prefix.
    +% To specify the font prefix, you must define \fontprefix
    +% before you read in texinfo.tex.
    +\ifx\fontprefix\thisisundefined
    +\def\fontprefix{cm}
    +\fi
    +% Support font families that don't use the same naming scheme as CM.
    +\def\rmshape{r}
    +\def\rmbshape{bx}               % where the normal face is bold
    +\def\bfshape{b}
    +\def\bxshape{bx}
    +\def\ttshape{tt}
    +\def\ttbshape{tt}
    +\def\ttslshape{sltt}
    +\def\itshape{ti}
    +\def\itbshape{bxti}
    +\def\slshape{sl}
    +\def\slbshape{bxsl}
    +\def\sfshape{ss}
    +\def\sfbshape{ss}
    +\def\scshape{csc}
    +\def\scbshape{csc}
    +
    +% Definitions for a main text size of 11pt.  (The default in Texinfo.)
    +%
    +\def\definetextfontsizexi{%
    +% Text fonts (11.2pt, magstep1).
    +\def\textnominalsize{11pt}
    +\edef\mainmagstep{\magstephalf}
    +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
    +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
    +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
    +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
    +\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
    +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
    +\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
    +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
    +\font\texti=cmmi10 scaled \mainmagstep
    +\font\textsy=cmsy10 scaled \mainmagstep
    +\def\textecsize{1095}
    +
    +% A few fonts for @defun names and args.
    +\setfont\defbf\bfshape{10}{\magstep1}{OT1}
    +\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
    +\setfont\defsl\slshape{10}{\magstep1}{OT1}
    +\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
    +\def\df{\let\ttfont=\deftt \let\bffont = \defbf
    +\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
    +
    +% Fonts for indices, footnotes, small examples (9pt).
    +\def\smallnominalsize{9pt}
    +\setfont\smallrm\rmshape{9}{1000}{OT1}
    +\setfont\smalltt\ttshape{9}{1000}{OT1TT}
    +\setfont\smallbf\bfshape{10}{900}{OT1}
    +\setfont\smallit\itshape{9}{1000}{OT1IT}
    +\setfont\smallsl\slshape{9}{1000}{OT1}
    +\setfont\smallsf\sfshape{9}{1000}{OT1}
    +\setfont\smallsc\scshape{10}{900}{OT1}
    +\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
    +\font\smalli=cmmi9
    +\font\smallsy=cmsy9
    +\def\smallecsize{0900}
    +
    +% Fonts for small examples (8pt).
    +\def\smallernominalsize{8pt}
    +\setfont\smallerrm\rmshape{8}{1000}{OT1}
    +\setfont\smallertt\ttshape{8}{1000}{OT1TT}
    +\setfont\smallerbf\bfshape{10}{800}{OT1}
    +\setfont\smallerit\itshape{8}{1000}{OT1IT}
    +\setfont\smallersl\slshape{8}{1000}{OT1}
    +\setfont\smallersf\sfshape{8}{1000}{OT1}
    +\setfont\smallersc\scshape{10}{800}{OT1}
    +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
    +\font\smalleri=cmmi8
    +\font\smallersy=cmsy8
    +\def\smallerecsize{0800}
    +
    +% Fonts for math mode superscripts (7pt).
    +\def\sevennominalsize{7pt}
    +\setfont\sevenrm\rmshape{7}{1000}{OT1}
    +\setfont\seventt\ttshape{10}{700}{OT1TT}
    +\setfont\sevenbf\bfshape{10}{700}{OT1}
    +\setfont\sevenit\itshape{7}{1000}{OT1IT}
    +\setfont\sevensl\slshape{10}{700}{OT1}
    +\setfont\sevensf\sfshape{10}{700}{OT1}
    +\setfont\sevensc\scshape{10}{700}{OT1}
    +\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
    +\font\seveni=cmmi7
    +\font\sevensy=cmsy7
    +\def\sevenecsize{0700}
    +
    +% Fonts for title page (20.4pt):
    +\def\titlenominalsize{20pt}
    +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
    +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
    +\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
    +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
    +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
    +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
    +\let\titlebf=\titlerm
    +\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
    +\font\titlei=cmmi12 scaled \magstep3
    +\font\titlesy=cmsy10 scaled \magstep4
    +\def\titleecsize{2074}
    +
    +% Chapter (and unnumbered) fonts (17.28pt).
    +\def\chapnominalsize{17pt}
    +\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
    +\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
    +\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
    +\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
    +\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
    +\setfont\chapsf\sfbshape{17}{1000}{OT1}
    +\let\chapbf=\chaprm
    +\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
    +\font\chapi=cmmi12 scaled \magstep2
    +\font\chapsy=cmsy10 scaled \magstep3
    +\def\chapecsize{1728}
    +
    +% Section fonts (14.4pt).
    +\def\secnominalsize{14pt}
    +\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
    +\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
    +\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
    +\setfont\secsl\slbshape{10}{\magstep2}{OT1}
    +\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
    +\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
    +\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
    +\let\secbf\secrm
    +\setfont\secsc\scbshape{10}{\magstep2}{OT1}
    +\font\seci=cmmi12 scaled \magstep1
    +\font\secsy=cmsy10 scaled \magstep2
    +\def\sececsize{1440}
    +
    +% Subsection fonts (13.15pt).
    +\def\ssecnominalsize{13pt}
    +\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
    +\setfont\ssecit\itbshape{10}{1315}{OT1IT}
    +\setfont\ssecsl\slbshape{10}{1315}{OT1}
    +\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
    +\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
    +\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
    +\let\ssecbf\ssecrm
    +\setfont\ssecsc\scbshape{10}{1315}{OT1}
    +\font\sseci=cmmi12 scaled \magstephalf
    +\font\ssecsy=cmsy10 scaled 1315
    +\def\ssececsize{1200}
    +
    +% Reduced fonts for @acronym in text (10pt).
    +\def\reducednominalsize{10pt}
    +\setfont\reducedrm\rmshape{10}{1000}{OT1}
    +\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
    +\setfont\reducedbf\bfshape{10}{1000}{OT1}
    +\setfont\reducedit\itshape{10}{1000}{OT1IT}
    +\setfont\reducedsl\slshape{10}{1000}{OT1}
    +\setfont\reducedsf\sfshape{10}{1000}{OT1}
    +\setfont\reducedsc\scshape{10}{1000}{OT1}
    +\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
    +\font\reducedi=cmmi10
    +\font\reducedsy=cmsy10
    +\def\reducedecsize{1000}
    +
    +\textleading = 13.2pt % line spacing for 11pt CM
    +\textfonts            % reset the current fonts
    +\rm
    +} % end of 11pt text font size definitions, \definetextfontsizexi
    +
    +
    +% Definitions to make the main text be 10pt Computer Modern, with
    +% section, chapter, etc., sizes following suit.  This is for the GNU
    +% Press printing of the Emacs 22 manual.  Maybe other manuals in the
    +% future.  Used with @smallbook, which sets the leading to 12pt.
    +%
    +\def\definetextfontsizex{%
    +% Text fonts (10pt).
    +\def\textnominalsize{10pt}
    +\edef\mainmagstep{1000}
    +\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
    +\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
    +\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
    +\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
    +\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
    +\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
    +\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
    +\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
    +\font\texti=cmmi10 scaled \mainmagstep
    +\font\textsy=cmsy10 scaled \mainmagstep
    +\def\textecsize{1000}
    +
    +% A few fonts for @defun names and args.
    +\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
    +\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
    +\setfont\defsl\slshape{10}{\magstephalf}{OT1}
    +\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
    +\def\df{\let\ttfont=\deftt \let\bffont = \defbf
    +\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
    +
    +% Fonts for indices, footnotes, small examples (9pt).
    +\def\smallnominalsize{9pt}
    +\setfont\smallrm\rmshape{9}{1000}{OT1}
    +\setfont\smalltt\ttshape{9}{1000}{OT1TT}
    +\setfont\smallbf\bfshape{10}{900}{OT1}
    +\setfont\smallit\itshape{9}{1000}{OT1IT}
    +\setfont\smallsl\slshape{9}{1000}{OT1}
    +\setfont\smallsf\sfshape{9}{1000}{OT1}
    +\setfont\smallsc\scshape{10}{900}{OT1}
    +\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
    +\font\smalli=cmmi9
    +\font\smallsy=cmsy9
    +\def\smallecsize{0900}
    +
    +% Fonts for small examples (8pt).
    +\def\smallernominalsize{8pt}
    +\setfont\smallerrm\rmshape{8}{1000}{OT1}
    +\setfont\smallertt\ttshape{8}{1000}{OT1TT}
    +\setfont\smallerbf\bfshape{10}{800}{OT1}
    +\setfont\smallerit\itshape{8}{1000}{OT1IT}
    +\setfont\smallersl\slshape{8}{1000}{OT1}
    +\setfont\smallersf\sfshape{8}{1000}{OT1}
    +\setfont\smallersc\scshape{10}{800}{OT1}
    +\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
    +\font\smalleri=cmmi8
    +\font\smallersy=cmsy8
    +\def\smallerecsize{0800}
    +
    +% Fonts for math mode superscripts (7pt).
    +\def\sevennominalsize{7pt}
    +\setfont\sevenrm\rmshape{7}{1000}{OT1}
    +\setfont\seventt\ttshape{10}{700}{OT1TT}
    +\setfont\sevenbf\bfshape{10}{700}{OT1}
    +\setfont\sevenit\itshape{7}{1000}{OT1IT}
    +\setfont\sevensl\slshape{10}{700}{OT1}
    +\setfont\sevensf\sfshape{10}{700}{OT1}
    +\setfont\sevensc\scshape{10}{700}{OT1}
    +\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
    +\font\seveni=cmmi7
    +\font\sevensy=cmsy7
    +\def\sevenecsize{0700}
    +
    +% Fonts for title page (20.4pt):
    +\def\titlenominalsize{20pt}
    +\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
    +\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
    +\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
    +\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
    +\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
    +\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
    +\let\titlebf=\titlerm
    +\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
    +\font\titlei=cmmi12 scaled \magstep3
    +\font\titlesy=cmsy10 scaled \magstep4
    +\def\titleecsize{2074}
    +
    +% Chapter fonts (14.4pt).
    +\def\chapnominalsize{14pt}
    +\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
    +\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
    +\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
    +\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
    +\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
    +\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
    +\let\chapbf\chaprm
    +\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
    +\font\chapi=cmmi12 scaled \magstep1
    +\font\chapsy=cmsy10 scaled \magstep2
    +\def\chapecsize{1440}
    +
    +% Section fonts (12pt).
    +\def\secnominalsize{12pt}
    +\setfont\secrm\rmbshape{12}{1000}{OT1}
    +\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
    +\setfont\secsl\slbshape{10}{\magstep1}{OT1}
    +\setfont\sectt\ttbshape{12}{1000}{OT1TT}
    +\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
    +\setfont\secsf\sfbshape{12}{1000}{OT1}
    +\let\secbf\secrm
    +\setfont\secsc\scbshape{10}{\magstep1}{OT1}
    +\font\seci=cmmi12
    +\font\secsy=cmsy10 scaled \magstep1
    +\def\sececsize{1200}
    +
    +% Subsection fonts (10pt).
    +\def\ssecnominalsize{10pt}
    +\setfont\ssecrm\rmbshape{10}{1000}{OT1}
    +\setfont\ssecit\itbshape{10}{1000}{OT1IT}
    +\setfont\ssecsl\slbshape{10}{1000}{OT1}
    +\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
    +\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
    +\setfont\ssecsf\sfbshape{10}{1000}{OT1}
    +\let\ssecbf\ssecrm
    +\setfont\ssecsc\scbshape{10}{1000}{OT1}
    +\font\sseci=cmmi10
    +\font\ssecsy=cmsy10
    +\def\ssececsize{1000}
    +
    +% Reduced fonts for @acronym in text (9pt).
    +\def\reducednominalsize{9pt}
    +\setfont\reducedrm\rmshape{9}{1000}{OT1}
    +\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
    +\setfont\reducedbf\bfshape{10}{900}{OT1}
    +\setfont\reducedit\itshape{9}{1000}{OT1IT}
    +\setfont\reducedsl\slshape{9}{1000}{OT1}
    +\setfont\reducedsf\sfshape{9}{1000}{OT1}
    +\setfont\reducedsc\scshape{10}{900}{OT1}
    +\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
    +\font\reducedi=cmmi9
    +\font\reducedsy=cmsy9
    +\def\reducedecsize{0900}
    +
    +\divide\parskip by 2  % reduce space between paragraphs
    +\textleading = 12pt   % line spacing for 10pt CM
    +\textfonts            % reset the current fonts
    +\rm
    +} % end of 10pt text font size definitions, \definetextfontsizex
    +
    +% Fonts for short table of contents.
    +\setfont\shortcontrm\rmshape{12}{1000}{OT1}
    +\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
    +\setfont\shortcontsl\slshape{12}{1000}{OT1}
    +\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
    +
    +
    +% We provide the user-level command
    +%   @fonttextsize 10
    +% (or 11) to redefine the text font size.  pt is assumed.
    +%
    +\def\xiword{11}
    +\def\xword{10}
    +\def\xwordpt{10pt}
    +%
    +\parseargdef\fonttextsize{%
    +  \def\textsizearg{#1}%
    +  %\wlog{doing @fonttextsize \textsizearg}%
    +  %
    +  % Set \globaldefs so that documents can use this inside @tex, since
    +  % makeinfo 4.8 does not support it, but we need it nonetheless.
    +  %
    + \begingroup \globaldefs=1
    +  \ifx\textsizearg\xword \definetextfontsizex
    +  \else \ifx\textsizearg\xiword \definetextfontsizexi
    +  \else
    +    \errhelp=\EMsimple
    +    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
    +  \fi\fi
    + \endgroup
    +}
    +
    +%
    +% Change the current font style to #1, remembering it in \curfontstyle.
    +% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
    +% italics, not bold italics.
    +%
    +\def\setfontstyle#1{%
    +  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
    +  \csname #1font\endcsname  % change the current font
    +}
    +
    +\def\rm{\fam=0 \setfontstyle{rm}}
    +\def\it{\fam=\itfam \setfontstyle{it}}
    +\def\sl{\fam=\slfam \setfontstyle{sl}}
    +\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
    +\def\tt{\fam=\ttfam \setfontstyle{tt}}
    +
    +% Texinfo sort of supports the sans serif font style, which plain TeX does not.
    +% So we set up a \sf.
    +\newfam\sffam
    +\def\sf{\fam=\sffam \setfontstyle{sf}}
    +
    +% We don't need math for this font style.
    +\def\ttsl{\setfontstyle{ttsl}}
    +
    +
    +% In order for the font changes to affect most math symbols and letters,
    +% we have to define the \textfont of the standard families.
    +% We don't bother to reset \scriptscriptfont; awaiting user need.
    +%
    +\def\resetmathfonts{%
    +  \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
    +  \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
    +  \textfont\ttfam=\ttfont \textfont\sffam=\sffont
    +  %
    +  % Fonts for superscript.  Note that the 7pt fonts are used regardless
    +  % of the current font size.
    +  \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy
    +  \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl
    +  \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt
    +  \scriptfont\sffam=\sevensf
    +}
    +
    +%
    +
    +% The font-changing commands (all called \...fonts) redefine the meanings
    +% of \STYLEfont, instead of just \STYLE.  We do this because \STYLE needs
    +% to also set the current \fam for math mode.  Our \STYLE (e.g., \rm)
    +% commands hardwire \STYLEfont to set the current font.
    +%
    +% The fonts used for \ifont are for "math italics"  (\itfont is for italics
    +% in regular text).  \syfont is also used in math mode only.
    +%
    +% Each font-changing command also sets the names \lsize (one size lower)
    +% and \lllsize (three sizes lower).  These relative commands are used
    +% in, e.g., the LaTeX logo and acronyms.
    +%
    +% This all needs generalizing, badly.
    +%
    +
    +\def\assignfonts#1{%
    +  \expandafter\let\expandafter\rmfont\csname #1rm\endcsname
    +  \expandafter\let\expandafter\itfont\csname #1it\endcsname
    +  \expandafter\let\expandafter\slfont\csname #1sl\endcsname
    +  \expandafter\let\expandafter\bffont\csname #1bf\endcsname
    +  \expandafter\let\expandafter\ttfont\csname #1tt\endcsname
    +  \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname
    +  \expandafter\let\expandafter\sffont  \csname #1sf\endcsname
    +  \expandafter\let\expandafter\ifont   \csname #1i\endcsname
    +  \expandafter\let\expandafter\syfont  \csname #1sy\endcsname
    +  \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname
    +}
    +
    +\newif\ifrmisbold
    +
    +% Select smaller font size with the current style.  Used to change font size
    +% in, e.g., the LaTeX logo and acronyms.  If we are using bold fonts for
    +% normal roman text, also use bold fonts for roman text in the smaller size.
    +\def\switchtolllsize{%
    +   \expandafter\assignfonts\expandafter{\lllsize}%
    +   \ifrmisbold
    +     \let\rmfont\bffont
    +   \fi
    +   \csname\curfontstyle\endcsname
    +}%
    +
    +\def\switchtolsize{%
    +   \expandafter\assignfonts\expandafter{\lsize}%
    +   \ifrmisbold
    +     \let\rmfont\bffont
    +   \fi
    +   \csname\curfontstyle\endcsname
    +}%
    +
    +\def\definefontsetatsize#1#2#3#4#5{%
    +\expandafter\def\csname #1fonts\endcsname{%
    +  \def\curfontsize{#1}%
    +  \def\lsize{#2}\def\lllsize{#3}%
    +  \csname rmisbold#5\endcsname
    +  \assignfonts{#1}%
    +  \resetmathfonts
    +  \setleading{#4}%
    +}}
    +
    +\definefontsetatsize{text}   {reduced}{smaller}{\textleading}{false}
    +\definefontsetatsize{title}  {chap}   {subsec} {27pt}  {true}
    +\definefontsetatsize{chap}   {sec}    {text}   {19pt}  {true}
    +\definefontsetatsize{sec}    {subsec} {reduced}{17pt}  {true}
    +\definefontsetatsize{ssec}   {text}   {small}  {15pt}  {true}
    +\definefontsetatsize{reduced}{small}  {smaller}{10.5pt}{false}
    +\definefontsetatsize{small}  {smaller}{smaller}{10.5pt}{false}
    +\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
    +
    +\def\titlefont#1{{\titlefonts\rm #1}}
    +\let\subsecfonts = \ssecfonts
    +\let\subsubsecfonts = \ssecfonts
    +
    +% Define these just so they can be easily changed for other fonts.
    +\def\angleleft{$\langle$}
    +\def\angleright{$\rangle$}
    +
    +% Set the fonts to use with the @small... environments.
    +\let\smallexamplefonts = \smallfonts
    +
    +% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
    +% can fit this many characters:
    +%   8.5x11=86   smallbook=72  a4=90  a5=69
    +% If we use \scriptfonts (8pt), then we can fit this many characters:
    +%   8.5x11=90+  smallbook=80  a4=90+  a5=77
    +% For me, subjectively, the few extra characters that fit aren't worth
    +% the additional smallness of 8pt.  So I'm making the default 9pt.
    +%
    +% By the way, for comparison, here's what fits with @example (10pt):
    +%   8.5x11=71  smallbook=60  a4=75  a5=58
    +% --karl, 24jan03.
    +
    +% Set up the default fonts, so we can use them for creating boxes.
    +%
    +\definetextfontsizexi
    +
    +
    +\message{markup,}
    +
    +% Check if we are currently using a typewriter font.  Since all the
    +% Computer Modern typewriter fonts have zero interword stretch (and
    +% shrink), and it is reasonable to expect all typewriter fonts to have
    +% this property, we can check that font parameter.
    +%
    +\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
    +
    +% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
    +% define and register \INITMACRO to be called on markup style changes.
    +% \INITMACRO can check \currentmarkupstyle for the innermost
    +% style.
    +
    +\let\currentmarkupstyle\empty
    +
    +\def\setupmarkupstyle#1{%
    +  \def\currentmarkupstyle{#1}%
    +  \markupstylesetup
    +}
    +
    +\let\markupstylesetup\empty
    +
    +\def\defmarkupstylesetup#1{%
    +  \expandafter\def\expandafter\markupstylesetup
    +    \expandafter{\markupstylesetup #1}%
    +  \def#1%
    +}
    +
    +% Markup style setup for left and right quotes.
    +\defmarkupstylesetup\markupsetuplq{%
    +  \expandafter\let\expandafter \temp
    +    \csname markupsetuplq\currentmarkupstyle\endcsname
    +  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
    +}
    +
    +\defmarkupstylesetup\markupsetuprq{%
    +  \expandafter\let\expandafter \temp
    +    \csname markupsetuprq\currentmarkupstyle\endcsname
    +  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
    +}
    +
    +{
    +\catcode`\'=\active
    +\catcode`\`=\active
    +
    +\gdef\markupsetuplqdefault{\let`\lq}
    +\gdef\markupsetuprqdefault{\let'\rq}
    +
    +\gdef\markupsetcodequoteleft{\let`\codequoteleft}
    +\gdef\markupsetcodequoteright{\let'\codequoteright}
    +}
    +
    +\let\markupsetuplqcode \markupsetcodequoteleft
    +\let\markupsetuprqcode \markupsetcodequoteright
    +%
    +\let\markupsetuplqexample \markupsetcodequoteleft
    +\let\markupsetuprqexample \markupsetcodequoteright
    +%
    +\let\markupsetuplqkbd     \markupsetcodequoteleft
    +\let\markupsetuprqkbd     \markupsetcodequoteright
    +%
    +\let\markupsetuplqsamp \markupsetcodequoteleft
    +\let\markupsetuprqsamp \markupsetcodequoteright
    +%
    +\let\markupsetuplqverb \markupsetcodequoteleft
    +\let\markupsetuprqverb \markupsetcodequoteright
    +%
    +\let\markupsetuplqverbatim \markupsetcodequoteleft
    +\let\markupsetuprqverbatim \markupsetcodequoteright
    +
    +% Allow an option to not use regular directed right quote/apostrophe
    +% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
    +% The undirected quote is ugly, so don't make it the default, but it
    +% works for pasting with more pdf viewers (at least evince), the
    +% lilypond developers report.  xpdf does work with the regular 0x27.
    +%
    +\def\codequoteright{%
    +  \ifmonospace
    +    \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
    +      \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
    +        '%
    +      \else \char'15 \fi
    +    \else \char'15 \fi
    +   \else
    +     '%
    +   \fi
    +}
    +%
    +% and a similar option for the left quote char vs. a grave accent.
    +% Modern fonts display ASCII 0x60 as a grave accent, so some people like
    +% the code environments to do likewise.
    +%
    +\def\codequoteleft{%
    +  \ifmonospace
    +    \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
    +      \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
    +        % [Knuth] pp. 380,381,391
    +        % \relax disables Spanish ligatures ?` and !` of \tt font.
    +        \relax`%
    +      \else \char'22 \fi
    +    \else \char'22 \fi
    +   \else
    +     \relax`%
    +   \fi
    +}
    +
    +% Commands to set the quote options.
    +%
    +\parseargdef\codequoteundirected{%
    +  \def\temp{#1}%
    +  \ifx\temp\onword
    +    \expandafter\let\csname SETtxicodequoteundirected\endcsname
    +      = t%
    +  \else\ifx\temp\offword
    +    \expandafter\let\csname SETtxicodequoteundirected\endcsname
    +      = \relax
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
    +  \fi\fi
    +}
    +%
    +\parseargdef\codequotebacktick{%
    +  \def\temp{#1}%
    +  \ifx\temp\onword
    +    \expandafter\let\csname SETtxicodequotebacktick\endcsname
    +      = t%
    +  \else\ifx\temp\offword
    +    \expandafter\let\csname SETtxicodequotebacktick\endcsname
    +      = \relax
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
    +  \fi\fi
    +}
    +
    +% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
    +\def\noligaturesquoteleft{\relax\lq}
    +
    +% Count depth in font-changes, for error checks
    +\newcount\fontdepth \fontdepth=0
    +
    +% Font commands.
    +
    +% #1 is the font command (\sl or \it), #2 is the text to slant.
    +% If we are in a monospaced environment, however, 1) always use \ttsl,
    +% and 2) do not add an italic correction.
    +\def\dosmartslant#1#2{%
    +  \ifusingtt
    +    {{\ttsl #2}\let\next=\relax}%
    +    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
    +  \next
    +}
    +\def\smartslanted{\dosmartslant\sl}
    +\def\smartitalic{\dosmartslant\it}
    +
    +% Output an italic correction unless \next (presumed to be the following
    +% character) is such as not to need one.
    +\def\smartitaliccorrection{%
    +  \ifx\next,%
    +  \else\ifx\next-%
    +  \else\ifx\next.%
    +  \else\ifx\next\.%
    +  \else\ifx\next\comma%
    +  \else\ptexslash
    +  \fi\fi\fi\fi\fi
    +  \aftersmartic
    +}
    +
    +% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
    +\def\ttslanted#1{{\ttsl #1}}
    +
    +% @cite is like \smartslanted except unconditionally use \sl.  We never want
    +% ttsl for book titles, do we?
    +\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
    +
    +\def\aftersmartic{}
    +\def\var#1{%
    +  \let\saveaftersmartic = \aftersmartic
    +  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
    +  \smartslanted{#1}%
    +}
    +
    +\let\i=\smartitalic
    +\let\slanted=\smartslanted
    +\let\dfn=\smartslanted
    +\let\emph=\smartitalic
    +
    +% Explicit font changes: @r, @sc, undocumented @ii.
    +\def\r#1{{\rm #1}}              % roman font
    +\def\sc#1{{\smallcaps#1}}       % smallcaps font
    +\def\ii#1{{\it #1}}             % italic font
    +
    +% @b, explicit bold.  Also @strong.
    +\def\b#1{{\bf #1}}
    +\let\strong=\b
    +
    +% @sansserif, explicit sans.
    +\def\sansserif#1{{\sf #1}}
    +
    +% We can't just use \exhyphenpenalty, because that only has effect at
    +% the end of a paragraph.  Restore normal hyphenation at the end of the
    +% group within which \nohyphenation is presumably called.
    +%
    +\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
    +\def\restorehyphenation{\hyphenchar\font = `- }
    +
    +% Set sfcode to normal for the chars that usually have another value.
    +% Can't use plain's \frenchspacing because it uses the `\x notation, and
    +% sometimes \x has an active definition that messes things up.
    +%
    +\catcode`@=11
    +  \def\plainfrenchspacing{%
    +    \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
    +    \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
    +    \def\endofsentencespacefactor{1000}% for @. and friends
    +  }
    +  \def\plainnonfrenchspacing{%
    +    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
    +    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
    +    \def\endofsentencespacefactor{3000}% for @. and friends
    +  }
    +\catcode`@=\other
    +\def\endofsentencespacefactor{3000}% default
    +
    +% @t, explicit typewriter.
    +\def\t#1{%
    +  {\tt \plainfrenchspacing #1}%
    +  \null
    +}
    +
    +% @samp.
    +\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
    +
    +% @indicateurl is \samp, that is, with quotes.
    +\let\indicateurl=\samp
    +
    +% @code (and similar) prints in typewriter, but with spaces the same
    +% size as normal in the surrounding text, without hyphenation, etc.
    +% This is a subroutine for that.
    +\def\tclose#1{%
    +  {%
    +    % Change normal interword space to be same as for the current font.
    +    \spaceskip = \fontdimen2\font
    +    %
    +    % Switch to typewriter.
    +    \tt
    +    %
    +    % But `\ ' produces the large typewriter interword space.
    +    \def\ {{\spaceskip = 0pt{} }}%
    +    %
    +    % Turn off hyphenation.
    +    \nohyphenation
    +    %
    +    \plainfrenchspacing
    +    #1%
    +  }%
    +  \null % reset spacefactor to 1000
    +}
    +
    +% We *must* turn on hyphenation at `-' and `_' in @code.
    +% (But see \codedashfinish below.)
    +% Otherwise, it is too hard to avoid overfull hboxes
    +% in the Emacs manual, the Library manual, etc.
    +%
    +% Unfortunately, TeX uses one parameter (\hyphenchar) to control
    +% both hyphenation at - and hyphenation within words.
    +% We must therefore turn them both off (\tclose does that)
    +% and arrange explicitly to hyphenate at a dash. -- rms.
    +{
    +  \catcode`\-=\active \catcode`\_=\active
    +  \catcode`\'=\active \catcode`\`=\active
    +  \global\let'=\rq \global\let`=\lq  % default definitions
    +  %
    +  \global\def\code{\begingroup
    +    \setupmarkupstyle{code}%
    +    % The following should really be moved into \setupmarkupstyle handlers.
    +    \catcode\dashChar=\active  \catcode\underChar=\active
    +    \ifallowcodebreaks
    +     \let-\codedash
    +     \let_\codeunder
    +    \else
    +     \let-\normaldash
    +     \let_\realunder
    +    \fi
    +    % Given -foo (with a single dash), we do not want to allow a break
    +    % after the hyphen.
    +    \global\let\codedashprev=\codedash
    +    %
    +    \codex
    +  }
    +  %
    +  \gdef\codedash{\futurelet\next\codedashfinish}
    +  \gdef\codedashfinish{%
    +    \normaldash % always output the dash character itself.
    +    %
    +    % Now, output a discretionary to allow a line break, unless
    +    % (a) the next character is a -, or
    +    % (b) the preceding character is a -.
    +    % E.g., given --posix, we do not want to allow a break after either -.
    +    % Given --foo-bar, we do want to allow a break between the - and the b.
    +    \ifx\next\codedash \else
    +      \ifx\codedashprev\codedash
    +      \else \discretionary{}{}{}\fi
    +    \fi
    +    % we need the space after the = for the case when \next itself is a
    +    % space token; it would get swallowed otherwise.  As in @code{- a}.
    +    \global\let\codedashprev= \next
    +  }
    +}
    +\def\normaldash{-}
    +%
    +\def\codex #1{\tclose{#1}\endgroup}
    +
    +\def\codeunder{%
    +  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
    +  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
    +  % will therefore expand the active definition of _, which is us
    +  % (inside @code that is), therefore an endless loop.
    +  \ifusingtt{\ifmmode
    +               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
    +             \else\normalunderscore \fi
    +             \discretionary{}{}{}}%
    +            {\_}%
    +}
    +
    +% An additional complication: the above will allow breaks after, e.g.,
    +% each of the four underscores in __typeof__.  This is bad.
    +% @allowcodebreaks provides a document-level way to turn breaking at -
    +% and _ on and off.
    +%
    +\newif\ifallowcodebreaks  \allowcodebreakstrue
    +
    +\def\keywordtrue{true}
    +\def\keywordfalse{false}
    +
    +\parseargdef\allowcodebreaks{%
    +  \def\txiarg{#1}%
    +  \ifx\txiarg\keywordtrue
    +    \allowcodebreakstrue
    +  \else\ifx\txiarg\keywordfalse
    +    \allowcodebreaksfalse
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
    +  \fi\fi
    +}
    +
    +% For @command, @env, @file, @option quotes seem unnecessary,
    +% so use \code rather than \samp.
    +\let\command=\code
    +\let\env=\code
    +\let\file=\code
    +\let\option=\code
    +
    +% @uref (abbreviation for `urlref') aka @url takes an optional
    +% (comma-separated) second argument specifying the text to display and
    +% an optional third arg as text to display instead of (rather than in
    +% addition to) the url itself.  First (mandatory) arg is the url.
    +
    +% TeX-only option to allow changing PDF output to show only the second
    +% arg (if given), and not the url (which is then just the link target).
    +\newif\ifurefurlonlylink
    +
    +% The main macro is \urefbreak, which allows breaking at expected
    +% places within the url.  (There used to be another version, which
    +% didn't support automatic breaking.)
    +\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
    +\let\uref=\urefbreak
    +%
    +\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
    +\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
    +  \unsepspaces
    +  \pdfurl{#1}%
    +  \setbox0 = \hbox{\ignorespaces #3}%
    +  \ifdim\wd0 > 0pt
    +    \unhbox0 % third arg given, show only that
    +  \else
    +    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
    +    \ifdim\wd0 > 0pt
    +      \ifpdf
    +        % For pdfTeX and LuaTeX
    +        \ifurefurlonlylink
    +          % PDF plus option to not display url, show just arg
    +          \unhbox0
    +        \else
    +          % PDF, normally display both arg and url for consistency,
    +          % visibility, if the pdf is eventually used to print, etc.
    +          \unhbox0\ (\urefcode{#1})%
    +        \fi
    +      \else
    +        \ifx\XeTeXrevision\thisisundefined
    +          \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
    +        \else
    +          % For XeTeX
    +          \ifurefurlonlylink
    +            % PDF plus option to not display url, show just arg
    +            \unhbox0
    +          \else
    +            % PDF, normally display both arg and url for consistency,
    +            % visibility, if the pdf is eventually used to print, etc.
    +            \unhbox0\ (\urefcode{#1})%
    +          \fi
    +        \fi
    +      \fi
    +    \else
    +      \urefcode{#1}% only url given, so show it
    +    \fi
    +  \fi
    +  \endlink
    +\endgroup}
    +
    +% Allow line breaks around only a few characters (only).
    +\def\urefcatcodes{%
    +  \catcode`\&=\active \catcode`\.=\active
    +  \catcode`\#=\active \catcode`\?=\active
    +  \catcode`\/=\active
    +}
    +{
    +  \urefcatcodes
    +  %
    +  \global\def\urefcode{\begingroup
    +    \setupmarkupstyle{code}%
    +    \urefcatcodes
    +    \let&\urefcodeamp
    +    \let.\urefcodedot
    +    \let#\urefcodehash
    +    \let?\urefcodequest
    +    \let/\urefcodeslash
    +    \codex
    +  }
    +  %
    +  % By default, they are just regular characters.
    +  \global\def&{\normalamp}
    +  \global\def.{\normaldot}
    +  \global\def#{\normalhash}
    +  \global\def?{\normalquest}
    +  \global\def/{\normalslash}
    +}
    +
    +\def\urefcodeamp{\urefprebreak \&\urefpostbreak}
    +\def\urefcodedot{\urefprebreak .\urefpostbreak}
    +\def\urefcodehash{\urefprebreak \#\urefpostbreak}
    +\def\urefcodequest{\urefprebreak ?\urefpostbreak}
    +\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
    +{
    +  \catcode`\/=\active
    +  \global\def\urefcodeslashfinish{%
    +    \urefprebreak \slashChar
    +    % Allow line break only after the final / in a sequence of
    +    % slashes, to avoid line break between the slashes in http://.
    +    \ifx\next/\else \urefpostbreak \fi
    +  }
    +}
    +
    +% By default we'll break after the special characters, but some people like to
    +% break before the special chars, so allow that.  Also allow no breaking at
    +% all, for manual control.
    +%
    +\parseargdef\urefbreakstyle{%
    +  \def\txiarg{#1}%
    +  \ifx\txiarg\wordnone
    +    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
    +  \else\ifx\txiarg\wordbefore
    +    \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak}
    +  \else\ifx\txiarg\wordafter
    +    \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak}
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
    +  \fi\fi\fi
    +}
    +\def\wordafter{after}
    +\def\wordbefore{before}
    +\def\wordnone{none}
    +
    +% Allow a ragged right output to aid breaking long URL's.  There can
    +% be a break at the \allowbreak with no extra glue (if the existing stretch in
    +% the line is sufficent), a break at the \penalty100 with extra glue added
    +% at the end of the line, or no break at all here.
    +%   Changing the value of the penalty and/or the amount of stretch affects how
    +% preferrable one choice is over the other.
    +\def\urefallowbreak{%
    +  \allowbreak
    +  \hskip 0pt plus 2 em\relax
    +  \penalty300
    +  \hskip 0pt plus -2 em\relax
    +}
    +
    +\urefbreakstyle after
    +
    +% @url synonym for @uref, since that's how everyone uses it.
    +%
    +\let\url=\uref
    +
    +% rms does not like angle brackets --karl, 17may97.
    +% So now @email is just like @uref, unless we are pdf.
    +%
    +%\def\email#1{\angleleft{\tt #1}\angleright}
    +\ifpdforxetex
    +  \def\email#1{\doemail#1,,\finish}
    +  \def\doemail#1,#2,#3\finish{\begingroup
    +    \unsepspaces
    +    \pdfurl{mailto:#1}%
    +    \setbox0 = \hbox{\ignorespaces #2}%
    +    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
    +    \endlink
    +  \endgroup}
    +\else
    +  \let\email=\uref
    +\fi
    +
    +% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
    +%   `example' (@kbd uses ttsl only inside of @example and friends),
    +%   or `code' (@kbd uses normal tty font always).
    +\parseargdef\kbdinputstyle{%
    +  \def\txiarg{#1}%
    +  \ifx\txiarg\worddistinct
    +    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
    +  \else\ifx\txiarg\wordexample
    +    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
    +  \else\ifx\txiarg\wordcode
    +    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
    +  \fi\fi\fi
    +}
    +\def\worddistinct{distinct}
    +\def\wordexample{example}
    +\def\wordcode{code}
    +
    +% Default is `distinct'.
    +\kbdinputstyle distinct
    +
    +% @kbd is like @code, except that if the argument is just one @key command,
    +% then @kbd has no effect.
    +\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
    +
    +\def\xkey{\key}
    +\def\kbdsub#1#2#3\par{%
    +  \def\one{#1}\def\three{#3}\def\threex{??}%
    +  \ifx\one\xkey\ifx\threex\three \key{#2}%
    +  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
    +  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
    +}
    +
    +% definition of @key that produces a lozenge.  Doesn't adjust to text size.
    +%\setfont\keyrm\rmshape{8}{1000}{OT1}
    +%\font\keysy=cmsy9
    +%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
    +%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
    +%    \vbox{\hrule\kern-0.4pt
    +%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
    +%    \kern-0.4pt\hrule}%
    +%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
    +
    +% definition of @key with no lozenge.  If the current font is already
    +% monospace, don't change it; that way, we respect @kbdinputstyle.  But
    +% if it isn't monospace, then use \tt.
    +%
    +\def\key#1{{\setupmarkupstyle{key}%
    +  \nohyphenation
    +  \ifmonospace\else\tt\fi
    +  #1}\null}
    +
    +% @clicksequence{File @click{} Open ...}
    +\def\clicksequence#1{\begingroup #1\endgroup}
    +
    +% @clickstyle @arrow   (by default)
    +\parseargdef\clickstyle{\def\click{#1}}
    +\def\click{\arrow}
    +
    +% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
    +% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
    +%
    +\def\dmn#1{\thinspace #1}
    +
    +% @acronym for "FBI", "NATO", and the like.
    +% We print this one point size smaller, since it's intended for
    +% all-uppercase.
    +%
    +\def\acronym#1{\doacronym #1,,\finish}
    +\def\doacronym#1,#2,#3\finish{%
    +  {\switchtolsize #1}%
    +  \def\temp{#2}%
    +  \ifx\temp\empty \else
    +    \space ({\unsepspaces \ignorespaces \temp \unskip})%
    +  \fi
    +  \null % reset \spacefactor=1000
    +}
    +
    +% @abbr for "Comput. J." and the like.
    +% No font change, but don't do end-of-sentence spacing.
    +%
    +\def\abbr#1{\doabbr #1,,\finish}
    +\def\doabbr#1,#2,#3\finish{%
    +  {\plainfrenchspacing #1}%
    +  \def\temp{#2}%
    +  \ifx\temp\empty \else
    +    \space ({\unsepspaces \ignorespaces \temp \unskip})%
    +  \fi
    +  \null % reset \spacefactor=1000
    +}
    +
    +% @asis just yields its argument.  Used with @table, for example.
    +%
    +\def\asis#1{#1}
    +
    +% @math outputs its argument in math mode.
    +%
    +% One complication: _ usually means subscripts, but it could also mean
    +% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
    +% _ active, and distinguish by seeing if the current family is \slfam,
    +% which is what @var uses.
    +{
    +  \catcode`\_ = \active
    +  \gdef\mathunderscore{%
    +    \catcode`\_=\active
    +    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
    +  }
    +}
    +% Another complication: we want \\ (and @\) to output a math (or tt) \.
    +% FYI, plain.tex uses \\ as a temporary control sequence (for no
    +% particular reason), but this is not advertised and we don't care.
    +%
    +% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
    +\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
    +%
    +\def\math{%
    +  \ifmmode\else % only go into math if not in math mode already
    +    \tex
    +    \mathunderscore
    +    \let\\ = \mathbackslash
    +    \mathactive
    +    % make the texinfo accent commands work in math mode
    +    \let\"=\ddot
    +    \let\'=\acute
    +    \let\==\bar
    +    \let\^=\hat
    +    \let\`=\grave
    +    \let\u=\breve
    +    \let\v=\check
    +    \let\~=\tilde
    +    \let\dotaccent=\dot
    +    % have to provide another name for sup operator
    +    \let\mathopsup=\sup
    +  $\expandafter\finishmath\fi
    +}
    +\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
    +
    +% Some active characters (such as <) are spaced differently in math.
    +% We have to reset their definitions in case the @math was an argument
    +% to a command which sets the catcodes (such as @item or @section).
    +%
    +{
    +  \catcode`^ = \active
    +  \catcode`< = \active
    +  \catcode`> = \active
    +  \catcode`+ = \active
    +  \catcode`' = \active
    +  \gdef\mathactive{%
    +    \let^ = \ptexhat
    +    \let< = \ptexless
    +    \let> = \ptexgtr
    +    \let+ = \ptexplus
    +    \let' = \ptexquoteright
    +  }
    +}
    +
    +% for @sub and @sup, if in math mode, just do a normal sub/superscript.
    +% If in text, use math to place as sub/superscript, but switch
    +% into text mode, with smaller fonts.  This is a different font than the
    +% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
    +% fix it (significant additions to font machinery) until someone notices.
    +%
    +\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
    +\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
    +%
    +\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
    +\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%
    +
    +% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
    +% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
    +% except specified as a normal braced arg, so no newlines to worry about.
    +%
    +\def\outfmtnametex{tex}
    +%
    +\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
    +\long\def\doinlinefmt#1,#2,\finish{%
    +  \def\inlinefmtname{#1}%
    +  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
    +}
    +%
    +% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
    +% FMTNAME is tex, else ELSE-TEXT.
    +\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
    +\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
    +  \def\inlinefmtname{#1}%
    +  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
    +}
    +%
    +% For raw, must switch into @tex before parsing the argument, to avoid
    +% setting catcodes prematurely.  Doing it this way means that, for
    +% example, @inlineraw{html, foo{bar} gets a parse error instead of being
    +% ignored.  But this isn't important because if people want a literal
    +% *right* brace they would have to use a command anyway, so they may as
    +% well use a command to get a left brace too.  We could re-use the
    +% delimiter character idea from \verb, but it seems like overkill.
    +%
    +\long\def\inlineraw{\tex \doinlineraw}
    +\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
    +\def\doinlinerawtwo#1,#2,\finish{%
    +  \def\inlinerawname{#1}%
    +  \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
    +  \endgroup % close group opened by \tex.
    +}
    +
    +% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
    +%
    +\long\def\inlineifset#1{\doinlineifset #1,\finish}
    +\long\def\doinlineifset#1,#2,\finish{%
    +  \def\inlinevarname{#1}%
    +  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
    +  \else\ignorespaces#2\fi
    +}
    +
    +% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
    +%
    +\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
    +\long\def\doinlineifclear#1,#2,\finish{%
    +  \def\inlinevarname{#1}%
    +  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
    +}
    +
    +
    +\message{glyphs,}
    +% and logos.
    +
    +% @@ prints an @, as does @atchar{}.
    +\def\@{\char64 }
    +\let\atchar=\@
    +
    +% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
    +\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
    +\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
    +\let\{=\lbracechar
    +\let\}=\rbracechar
    +
    +% @comma{} to avoid , parsing problems.
    +\let\comma = ,
    +
    +% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
    +% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
    +\let\, = \ptexc
    +\let\dotaccent = \ptexdot
    +\def\ringaccent#1{{\accent23 #1}}
    +\let\tieaccent = \ptext
    +\let\ubaraccent = \ptexb
    +\let\udotaccent = \d
    +
    +% Other special characters: @questiondown @exclamdown @ordf @ordm
    +% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
    +\def\questiondown{?`}
    +\def\exclamdown{!`}
    +\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}}
    +\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}}
    +
    +% Dotless i and dotless j, used for accents.
    +\def\imacro{i}
    +\def\jmacro{j}
    +\def\dotless#1{%
    +  \def\temp{#1}%
    +  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
    +  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
    +  \else \errmessage{@dotless can be used only with i or j}%
    +  \fi\fi
    +}
    +
    +% The \TeX{} logo, as in plain, but resetting the spacing so that a
    +% period following counts as ending a sentence.  (Idea found in latex.)
    +%
    +\edef\TeX{\TeX \spacefactor=1000 }
    +
    +% @LaTeX{} logo.  Not quite the same results as the definition in
    +% latex.ltx, since we use a different font for the raised A; it's most
    +% convenient for us to use an explicitly smaller font, rather than using
    +% the \scriptstyle font (since we don't reset \scriptstyle and
    +% \scriptscriptstyle).
    +%
    +\def\LaTeX{%
    +  L\kern-.36em
    +  {\setbox0=\hbox{T}%
    +   \vbox to \ht0{\hbox{%
    +     \ifx\textnominalsize\xwordpt
    +       % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX.
    +       % Revert to plain's \scriptsize, which is 7pt.
    +       \count255=\the\fam $\fam\count255 \scriptstyle A$%
    +     \else
    +       % For 11pt, we can use our lllsize.
    +       \switchtolllsize A%
    +     \fi
    +     }%
    +     \vss
    +  }}%
    +  \kern-.15em
    +  \TeX
    +}
    +
    +% Some math mode symbols.  Define \ensuremath to switch into math mode
    +% unless we are already there.  Expansion tricks may not be needed here,
    +% but safer, and can't hurt.
    +\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
    +\def\ensuredmath#1{$\relax#1$}
    +%
    +\def\bullet{\ensuremath\ptexbullet}
    +\def\geq{\ensuremath\ge}
    +\def\leq{\ensuremath\le}
    +\def\minus{\ensuremath-}
    +
    +% @dots{} outputs an ellipsis using the current font.
    +% We do .5em per period so that it has the same spacing in the cm
    +% typewriter fonts as three actual period characters; on the other hand,
    +% in other typewriter fonts three periods are wider than 1.5em.  So do
    +% whichever is larger.
    +%
    +\def\dots{%
    +  \leavevmode
    +  \setbox0=\hbox{...}% get width of three periods
    +  \ifdim\wd0 > 1.5em
    +    \dimen0 = \wd0
    +  \else
    +    \dimen0 = 1.5em
    +  \fi
    +  \hbox to \dimen0{%
    +    \hskip 0pt plus.25fil
    +    .\hskip 0pt plus1fil
    +    .\hskip 0pt plus1fil
    +    .\hskip 0pt plus.5fil
    +  }%
    +}
    +
    +% @enddots{} is an end-of-sentence ellipsis.
    +%
    +\def\enddots{%
    +  \dots
    +  \spacefactor=\endofsentencespacefactor
    +}
    +
    +% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
    +%
    +% Since these characters are used in examples, they should be an even number of
    +% \tt widths. Each \tt character is 1en, so two makes it 1em.
    +%
    +\def\point{$\star$}
    +\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
    +\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
    +\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
    +\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
    +\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
    +
    +% The @error{} command.
    +% Adapted from the TeXbook's \boxit.
    +%
    +\newbox\errorbox
    +%
    +{\ttfont \global\dimen0 = 3em}% Width of the box.
    +\dimen2 = .55pt % Thickness of rules
    +% The text. (`r' is open on the right, `e' somewhat less so on the left.)
    +\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
    +%
    +\setbox\errorbox=\hbox to \dimen0{\hfil
    +   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
    +   \advance\hsize by -2\dimen2 % Rules.
    +   \vbox{%
    +      \hrule height\dimen2
    +      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
    +         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
    +         \kern3pt\vrule width\dimen2}% Space to right.
    +      \hrule height\dimen2}
    +    \hfil}
    +%
    +\def\error{\leavevmode\lower.7ex\copy\errorbox}
    +
    +% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
    +%
    +\def\pounds{{\it\$}}
    +
    +% @euro{} comes from a separate font, depending on the current style.
    +% We use the free feym* fonts from the eurosym package by Henrik
    +% Theiling, which support regular, slanted, bold and bold slanted (and
    +% "outlined" (blackboard board, sort of) versions, which we don't need).
    +% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
    +%
    +% Although only regular is the truly official Euro symbol, we ignore
    +% that.  The Euro is designed to be slightly taller than the regular
    +% font height.
    +%
    +% feymr - regular
    +% feymo - slanted
    +% feybr - bold
    +% feybo - bold slanted
    +%
    +% There is no good (free) typewriter version, to my knowledge.
    +% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
    +% Hmm.
    +%
    +% Also doesn't work in math.  Do we need to do math with euro symbols?
    +% Hope not.
    +%
    +%
    +\def\euro{{\eurofont e}}
    +\def\eurofont{%
    +  % We set the font at each command, rather than predefining it in
    +  % \textfonts and the other font-switching commands, so that
    +  % installations which never need the symbol don't have to have the
    +  % font installed.
    +  %
    +  % There is only one designed size (nominal 10pt), so we always scale
    +  % that to the current nominal size.
    +  %
    +  % By the way, simply using "at 1em" works for cmr10 and the like, but
    +  % does not work for cmbx10 and other extended/shrunken fonts.
    +  %
    +  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
    +  %
    +  \ifx\curfontstyle\bfstylename
    +    % bold:
    +    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
    +  \else
    +    % regular:
    +    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
    +  \fi
    +  \thiseurofont
    +}
    +
    +% Glyphs from the EC fonts.  We don't use \let for the aliases, because
    +% sometimes we redefine the original macro, and the alias should reflect
    +% the redefinition.
    +%
    +% Use LaTeX names for the Icelandic letters.
    +\def\DH{{\ecfont \char"D0}} % Eth
    +\def\dh{{\ecfont \char"F0}} % eth
    +\def\TH{{\ecfont \char"DE}} % Thorn
    +\def\th{{\ecfont \char"FE}} % thorn
    +%
    +\def\guillemetleft{{\ecfont \char"13}}
    +\def\guillemotleft{\guillemetleft}
    +\def\guillemetright{{\ecfont \char"14}}
    +\def\guillemotright{\guillemetright}
    +\def\guilsinglleft{{\ecfont \char"0E}}
    +\def\guilsinglright{{\ecfont \char"0F}}
    +\def\quotedblbase{{\ecfont \char"12}}
    +\def\quotesinglbase{{\ecfont \char"0D}}
    +%
    +% This positioning is not perfect (see the ogonek LaTeX package), but
    +% we have the precomposed glyphs for the most common cases.  We put the
    +% tests to use those glyphs in the single \ogonek macro so we have fewer
    +% dummy definitions to worry about for index entries, etc.
    +%
    +% ogonek is also used with other letters in Lithuanian (IOU), but using
    +% the precomposed glyphs for those is not so easy since they aren't in
    +% the same EC font.
    +\def\ogonek#1{{%
    +  \def\temp{#1}%
    +  \ifx\temp\macrocharA\Aogonek
    +  \else\ifx\temp\macrochara\aogonek
    +  \else\ifx\temp\macrocharE\Eogonek
    +  \else\ifx\temp\macrochare\eogonek
    +  \else
    +    \ecfont \setbox0=\hbox{#1}%
    +    \ifdim\ht0=1ex\accent"0C #1%
    +    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
    +    \fi
    +  \fi\fi\fi\fi
    +  }%
    +}
    +\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
    +\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
    +\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
    +\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
    +%
    +% Use the European Computer Modern fonts (cm-super in outline format)
    +% for non-CM glyphs.  That is ec* for regular text and tc* for the text
    +% companion symbols (LaTeX TS1 encoding).  Both are part of the ec
    +% package and follow the same conventions.
    +%
    +\def\ecfont{\etcfont{e}}
    +\def\tcfont{\etcfont{t}}
    +%
    +\def\etcfont#1{%
    +  % We can't distinguish serif/sans and italic/slanted, but this
    +  % is used for crude hacks anyway (like adding French and German
    +  % quotes to documents typeset with CM, where we lose kerning), so
    +  % hopefully nobody will notice/care.
    +  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
    +  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
    +  \ifmonospace
    +    % typewriter:
    +    \font\thisecfont = #1ctt\ecsize \space at \nominalsize
    +  \else
    +    \ifx\curfontstyle\bfstylename
    +      % bold:
    +      \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
    +    \else
    +      % regular:
    +      \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
    +    \fi
    +  \fi
    +  \thisecfont
    +}
    +
    +% @registeredsymbol - R in a circle.  The font for the R should really
    +% be smaller yet, but lllsize is the best we can do for now.
    +% Adapted from the plain.tex definition of \copyright.
    +%
    +\def\registeredsymbol{%
    +  $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}%
    +               \hfil\crcr\Orb}}%
    +    }$%
    +}
    +
    +% @textdegree - the normal degrees sign.
    +%
    +\def\textdegree{$^\circ$}
    +
    +% Laurent Siebenmann reports \Orb undefined with:
    +%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
    +% so we'll define it if necessary.
    +%
    +\ifx\Orb\thisisundefined
    +\def\Orb{\mathhexbox20D}
    +\fi
    +
    +% Quotes.
    +\chardef\quotedblleft="5C
    +\chardef\quotedblright=`\"
    +\chardef\quoteleft=`\`
    +\chardef\quoteright=`\'
    +
    +
    +\message{page headings,}
    +
    +\newskip\titlepagetopglue \titlepagetopglue = 1.5in
    +\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
    +
    +% First the title page.  Must do @settitle before @titlepage.
    +\newif\ifseenauthor
    +\newif\iffinishedtitlepage
    +
    +% @setcontentsaftertitlepage used to do an implicit @contents or
    +% @shortcontents after @end titlepage, but it is now obsolete.
    +\def\setcontentsaftertitlepage{%
    +  \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
    +              command; move your @contents command if you want the contents
    +              after the title page.}}%
    +\def\setshortcontentsaftertitlepage{%
    +  \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
    +              command; move your @shortcontents and @contents commands if you
    +              want the contents after the title page.}}%
    +
    +\parseargdef\shorttitlepage{%
    +  \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
    +  \endgroup\page\hbox{}\page}
    +
    +\envdef\titlepage{%
    +  % Open one extra group, as we want to close it in the middle of \Etitlepage.
    +  \begingroup
    +    \parindent=0pt \textfonts
    +    % Leave some space at the very top of the page.
    +    \vglue\titlepagetopglue
    +    % No rule at page bottom unless we print one at the top with @title.
    +    \finishedtitlepagetrue
    +    %
    +    % Most title ``pages'' are actually two pages long, with space
    +    % at the top of the second.  We don't want the ragged left on the second.
    +    \let\oldpage = \page
    +    \def\page{%
    +      \iffinishedtitlepage\else
    +	 \finishtitlepage
    +      \fi
    +      \let\page = \oldpage
    +      \page
    +      \null
    +    }%
    +}
    +
    +\def\Etitlepage{%
    +    \iffinishedtitlepage\else
    +	\finishtitlepage
    +    \fi
    +    % It is important to do the page break before ending the group,
    +    % because the headline and footline are only empty inside the group.
    +    % If we use the new definition of \page, we always get a blank page
    +    % after the title page, which we certainly don't want.
    +    \oldpage
    +  \endgroup
    +  %
    +  % Need this before the \...aftertitlepage checks so that if they are
    +  % in effect the toc pages will come out with page numbers.
    +  \HEADINGSon
    +}
    +
    +\def\finishtitlepage{%
    +  \vskip4pt \hrule height 2pt width \hsize
    +  \vskip\titlepagebottomglue
    +  \finishedtitlepagetrue
    +}
    +
    +% Settings used for typesetting titles: no hyphenation, no indentation,
    +% don't worry much about spacing, ragged right.  This should be used
    +% inside a \vbox, and fonts need to be set appropriately first. \par should
    +% be specified before the end of the \vbox, since a vbox is a group.
    +%
    +\def\raggedtitlesettings{%
    +  \rm
    +  \hyphenpenalty=10000
    +  \parindent=0pt
    +  \tolerance=5000
    +  \ptexraggedright
    +}
    +
    +% Macros to be used within @titlepage:
    +
    +\let\subtitlerm=\rmfont
    +\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
    +
    +\parseargdef\title{%
    +  \checkenv\titlepage
    +  \vbox{\titlefonts \raggedtitlesettings #1\par}%
    +  % print a rule at the page bottom also.
    +  \finishedtitlepagefalse
    +  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
    +}
    +
    +\parseargdef\subtitle{%
    +  \checkenv\titlepage
    +  {\subtitlefont \rightline{#1}}%
    +}
    +
    +% @author should come last, but may come many times.
    +% It can also be used inside @quotation.
    +%
    +\parseargdef\author{%
    +  \def\temp{\quotation}%
    +  \ifx\thisenv\temp
    +    \def\quotationauthor{#1}% printed in \Equotation.
    +  \else
    +    \checkenv\titlepage
    +    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
    +    {\secfonts\rm \leftline{#1}}%
    +  \fi
    +}
    +
    +
    +% Set up page headings and footings.
    +
    +\let\thispage=\folio
    +
    +\newtoks\evenheadline    % headline on even pages
    +\newtoks\oddheadline     % headline on odd pages
    +\newtoks\evenfootline    % footline on even pages
    +\newtoks\oddfootline     % footline on odd pages
    +
    +% Now make \makeheadline and \makefootline in Plain TeX use those variables
    +\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
    +                            \else \the\evenheadline \fi}}
    +\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
    +                            \else \the\evenfootline \fi}\HEADINGShook}
    +\let\HEADINGShook=\relax
    +
    +% Commands to set those variables.
    +% For example, this is what  @headings on  does
    +% @evenheading @thistitle|@thispage|@thischapter
    +% @oddheading @thischapter|@thispage|@thistitle
    +% @evenfooting @thisfile||
    +% @oddfooting ||@thisfile
    +
    +
    +\def\evenheading{\parsearg\evenheadingxxx}
    +\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
    +\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
    +\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
    +
    +\def\oddheading{\parsearg\oddheadingxxx}
    +\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
    +\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
    +\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
    +
    +\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
    +
    +\def\evenfooting{\parsearg\evenfootingxxx}
    +\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
    +\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
    +\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
    +
    +\def\oddfooting{\parsearg\oddfootingxxx}
    +\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
    +\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
    +  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
    +  %
    +  % Leave some space for the footline.  Hopefully ok to assume
    +  % @evenfooting will not be used by itself.
    +  \global\advance\txipageheight by -12pt
    +  \global\advance\vsize by -12pt
    +}
    +
    +\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
    +
    +% @evenheadingmarks top     \thischapter <- chapter at the top of a page
    +% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
    +%
    +% The same set of arguments for:
    +%
    +% @oddheadingmarks
    +% @evenfootingmarks
    +% @oddfootingmarks
    +% @everyheadingmarks
    +% @everyfootingmarks
    +
    +% These define \getoddheadingmarks, \getevenheadingmarks,
    +% \getoddfootingmarks, and \getevenfootingmarks, each to one of
    +% \gettopheadingmarks, \getbottomheadingmarks.
    +%
    +\def\evenheadingmarks{\headingmarks{even}{heading}}
    +\def\oddheadingmarks{\headingmarks{odd}{heading}}
    +\def\evenfootingmarks{\headingmarks{even}{footing}}
    +\def\oddfootingmarks{\headingmarks{odd}{footing}}
    +\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
    +                          \headingmarks{odd}{heading}{#1} }
    +\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
    +                          \headingmarks{odd}{footing}{#1} }
    +% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
    +\def\headingmarks#1#2#3 {%
    +  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
    +  \global\expandafter\let\csname get#1#2marks\endcsname \temp
    +}
    +
    +\everyheadingmarks bottom
    +\everyfootingmarks bottom
    +
    +% @headings double      turns headings on for double-sided printing.
    +% @headings single      turns headings on for single-sided printing.
    +% @headings off         turns them off.
    +% @headings on          same as @headings double, retained for compatibility.
    +% @headings after       turns on double-sided headings after this page.
    +% @headings doubleafter turns on double-sided headings after this page.
    +% @headings singleafter turns on single-sided headings after this page.
    +% By default, they are off at the start of a document,
    +% and turned `on' after @end titlepage.
    +
    +\parseargdef\headings{\csname HEADINGS#1\endcsname}
    +
    +\def\headingsoff{% non-global headings elimination
    +  \evenheadline={\hfil}\evenfootline={\hfil}%
    +   \oddheadline={\hfil}\oddfootline={\hfil}%
    +}
    +
    +\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
    +\HEADINGSoff  % it's the default
    +
    +% When we turn headings on, set the page number to 1.
    +% For double-sided printing, put current file name in lower left corner,
    +% chapter name on inside top of right hand pages, document
    +% title on inside top of left hand pages, and page numbers on outside top
    +% edge of all pages.
    +\def\HEADINGSdouble{%
    +\global\pageno=1
    +\global\evenfootline={\hfil}
    +\global\oddfootline={\hfil}
    +\global\evenheadline={\line{\folio\hfil\thistitle}}
    +\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    +\global\let\contentsalignmacro = \chapoddpage
    +}
    +\let\contentsalignmacro = \chappager
    +
    +% For single-sided printing, chapter title goes across top left of page,
    +% page number on top right.
    +\def\HEADINGSsingle{%
    +\global\pageno=1
    +\global\evenfootline={\hfil}
    +\global\oddfootline={\hfil}
    +\global\evenheadline={\line{\thischapterheading\hfil\folio}}
    +\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    +\global\let\contentsalignmacro = \chappager
    +}
    +\def\HEADINGSon{\HEADINGSdouble}
    +
    +\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
    +\let\HEADINGSdoubleafter=\HEADINGSafter
    +\def\HEADINGSdoublex{%
    +\global\evenfootline={\hfil}
    +\global\oddfootline={\hfil}
    +\global\evenheadline={\line{\folio\hfil\thistitle}}
    +\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    +\global\let\contentsalignmacro = \chapoddpage
    +}
    +
    +\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
    +\def\HEADINGSsinglex{%
    +\global\evenfootline={\hfil}
    +\global\oddfootline={\hfil}
    +\global\evenheadline={\line{\thischapterheading\hfil\folio}}
    +\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    +\global\let\contentsalignmacro = \chappager
    +}
    +
    +% Subroutines used in generating headings
    +% This produces Day Month Year style of output.
    +% Only define if not already defined, in case a txi-??.tex file has set
    +% up a different format (e.g., txi-cs.tex does this).
    +\ifx\today\thisisundefined
    +\def\today{%
    +  \number\day\space
    +  \ifcase\month
    +  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
    +  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
    +  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
    +  \fi
    +  \space\number\year}
    +\fi
    +
    +% @settitle line...  specifies the title of the document, for headings.
    +% It generates no output of its own.
    +\def\thistitle{\putwordNoTitle}
    +\def\settitle{\parsearg{\gdef\thistitle}}
    +
    +
    +\message{tables,}
    +% Tables -- @table, @ftable, @vtable, @item(x).
    +
    +% default indentation of table text
    +\newdimen\tableindent \tableindent=.8in
    +% default indentation of @itemize and @enumerate text
    +\newdimen\itemindent  \itemindent=.3in
    +% margin between end of table item and start of table text.
    +\newdimen\itemmargin  \itemmargin=.1in
    +
    +% used internally for \itemindent minus \itemmargin
    +\newdimen\itemmax
    +
    +% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
    +% these defs.
    +% They also define \itemindex
    +% to index the item name in whatever manner is desired (perhaps none).
    +
    +\newif\ifitemxneedsnegativevskip
    +
    +\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
    +
    +\def\internalBitem{\smallbreak \parsearg\itemzzz}
    +\def\internalBitemx{\itemxpar \parsearg\itemzzz}
    +
    +\def\itemzzz #1{\begingroup %
    +  \advance\hsize by -\rightskip
    +  \advance\hsize by -\tableindent
    +  \setbox0=\hbox{\itemindicate{#1}}%
    +  \itemindex{#1}%
    +  \nobreak % This prevents a break before @itemx.
    +  %
    +  % If the item text does not fit in the space we have, put it on a line
    +  % by itself, and do not allow a page break either before or after that
    +  % line.  We do not start a paragraph here because then if the next
    +  % command is, e.g., @kindex, the whatsit would get put into the
    +  % horizontal list on a line by itself, resulting in extra blank space.
    +  \ifdim \wd0>\itemmax
    +    %
    +    % Make this a paragraph so we get the \parskip glue and wrapping,
    +    % but leave it ragged-right.
    +    \begingroup
    +      \advance\leftskip by-\tableindent
    +      \advance\hsize by\tableindent
    +      \advance\rightskip by0pt plus1fil\relax
    +      \leavevmode\unhbox0\par
    +    \endgroup
    +    %
    +    % We're going to be starting a paragraph, but we don't want the
    +    % \parskip glue -- logically it's part of the @item we just started.
    +    \nobreak \vskip-\parskip
    +    %
    +    % Stop a page break at the \parskip glue coming up.  However, if
    +    % what follows is an environment such as @example, there will be no
    +    % \parskip glue; then the negative vskip we just inserted would
    +    % cause the example and the item to crash together.  So we use this
    +    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
    +    % \parskip glue after all.  Section titles are handled this way also.
    +    %
    +    \penalty 10001
    +    \endgroup
    +    \itemxneedsnegativevskipfalse
    +  \else
    +    % The item text fits into the space.  Start a paragraph, so that the
    +    % following text (if any) will end up on the same line.
    +    \noindent
    +    % Do this with kerns and \unhbox so that if there is a footnote in
    +    % the item text, it can migrate to the main vertical list and
    +    % eventually be printed.
    +    \nobreak\kern-\tableindent
    +    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
    +    \unhbox0
    +    \nobreak\kern\dimen0
    +    \endgroup
    +    \itemxneedsnegativevskiptrue
    +  \fi
    +}
    +
    +\def\item{\errmessage{@item while not in a list environment}}
    +\def\itemx{\errmessage{@itemx while not in a list environment}}
    +
    +% @table, @ftable, @vtable.
    +\envdef\table{%
    +  \let\itemindex\gobble
    +  \tablecheck{table}%
    +}
    +\envdef\ftable{%
    +  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
    +  \tablecheck{ftable}%
    +}
    +\envdef\vtable{%
    +  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
    +  \tablecheck{vtable}%
    +}
    +\def\tablecheck#1{%
    +  \ifnum \the\catcode`\^^M=\active
    +    \endgroup
    +    \errmessage{This command won't work in this context; perhaps the problem is
    +      that we are \inenvironment\thisenv}%
    +    \def\next{\doignore{#1}}%
    +  \else
    +    \let\next\tablex
    +  \fi
    +  \next
    +}
    +\def\tablex#1{%
    +  \def\itemindicate{#1}%
    +  \parsearg\tabley
    +}
    +\def\tabley#1{%
    +  {%
    +    \makevalueexpandable
    +    \edef\temp{\noexpand\tablez #1\space\space\space}%
    +    \expandafter
    +  }\temp \endtablez
    +}
    +\def\tablez #1 #2 #3 #4\endtablez{%
    +  \aboveenvbreak
    +  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
    +  \ifnum 0#2>0 \tableindent=#2\mil \fi
    +  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
    +  \itemmax=\tableindent
    +  \advance \itemmax by -\itemmargin
    +  \advance \leftskip by \tableindent
    +  \exdentamount=\tableindent
    +  \parindent = 0pt
    +  \parskip = \smallskipamount
    +  \ifdim \parskip=0pt \parskip=2pt \fi
    +  \let\item = \internalBitem
    +  \let\itemx = \internalBitemx
    +}
    +\def\Etable{\endgraf\afterenvbreak}
    +\let\Eftable\Etable
    +\let\Evtable\Etable
    +\let\Eitemize\Etable
    +\let\Eenumerate\Etable
    +
    +% This is the counter used by @enumerate, which is really @itemize
    +
    +\newcount \itemno
    +
    +\envdef\itemize{\parsearg\doitemize}
    +
    +\def\doitemize#1{%
    +  \aboveenvbreak
    +  \itemmax=\itemindent
    +  \advance\itemmax by -\itemmargin
    +  \advance\leftskip by \itemindent
    +  \exdentamount=\itemindent
    +  \parindent=0pt
    +  \parskip=\smallskipamount
    +  \ifdim\parskip=0pt \parskip=2pt \fi
    +  %
    +  % Try typesetting the item mark so that if the document erroneously says
    +  % something like @itemize @samp (intending @table), there's an error
    +  % right away at the @itemize.  It's not the best error message in the
    +  % world, but it's better than leaving it to the @item.  This means if
    +  % the user wants an empty mark, they have to say @w{} not just @w.
    +  \def\itemcontents{#1}%
    +  \setbox0 = \hbox{\itemcontents}%
    +  %
    +  % @itemize with no arg is equivalent to @itemize @bullet.
    +  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
    +  %
    +  \let\item=\itemizeitem
    +}
    +
    +% Definition of @item while inside @itemize and @enumerate.
    +%
    +\def\itemizeitem{%
    +  \advance\itemno by 1  % for enumerations
    +  {\let\par=\endgraf \smallbreak}% reasonable place to break
    +  {%
    +   % If the document has an @itemize directly after a section title, a
    +   % \nobreak will be last on the list, and \sectionheading will have
    +   % done a \vskip-\parskip.  In that case, we don't want to zero
    +   % parskip, or the item text will crash with the heading.  On the
    +   % other hand, when there is normal text preceding the item (as there
    +   % usually is), we do want to zero parskip, or there would be too much
    +   % space.  In that case, we won't have a \nobreak before.  At least
    +   % that's the theory.
    +   \ifnum\lastpenalty<10000 \parskip=0in \fi
    +   \noindent
    +   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
    +   %
    +   \ifinner\else
    +     \vadjust{\penalty 1200}% not good to break after first line of item.
    +   \fi
    +   % We can be in inner vertical mode in a footnote, although an
    +   % @itemize looks awful there.
    +  }%
    +  \flushcr
    +}
    +
    +% \splitoff TOKENS\endmark defines \first to be the first token in
    +% TOKENS, and \rest to be the remainder.
    +%
    +\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
    +
    +% Allow an optional argument of an uppercase letter, lowercase letter,
    +% or number, to specify the first label in the enumerated list.  No
    +% argument is the same as `1'.
    +%
    +\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
    +\def\enumeratey #1 #2\endenumeratey{%
    +  % If we were given no argument, pretend we were given `1'.
    +  \def\thearg{#1}%
    +  \ifx\thearg\empty \def\thearg{1}\fi
    +  %
    +  % Detect if the argument is a single token.  If so, it might be a
    +  % letter.  Otherwise, the only valid thing it can be is a number.
    +  % (We will always have one token, because of the test we just made.
    +  % This is a good thing, since \splitoff doesn't work given nothing at
    +  % all -- the first parameter is undelimited.)
    +  \expandafter\splitoff\thearg\endmark
    +  \ifx\rest\empty
    +    % Only one token in the argument.  It could still be anything.
    +    % A ``lowercase letter'' is one whose \lccode is nonzero.
    +    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
    +    %   not equal to itself.
    +    % Otherwise, we assume it's a number.
    +    %
    +    % We need the \relax at the end of the \ifnum lines to stop TeX from
    +    % continuing to look for a .
    +    %
    +    \ifnum\lccode\expandafter`\thearg=0\relax
    +      \numericenumerate % a number (we hope)
    +    \else
    +      % It's a letter.
    +      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
    +        \lowercaseenumerate % lowercase letter
    +      \else
    +        \uppercaseenumerate % uppercase letter
    +      \fi
    +    \fi
    +  \else
    +    % Multiple tokens in the argument.  We hope it's a number.
    +    \numericenumerate
    +  \fi
    +}
    +
    +% An @enumerate whose labels are integers.  The starting integer is
    +% given in \thearg.
    +%
    +\def\numericenumerate{%
    +  \itemno = \thearg
    +  \startenumeration{\the\itemno}%
    +}
    +
    +% The starting (lowercase) letter is in \thearg.
    +\def\lowercaseenumerate{%
    +  \itemno = \expandafter`\thearg
    +  \startenumeration{%
    +    % Be sure we're not beyond the end of the alphabet.
    +    \ifnum\itemno=0
    +      \errmessage{No more lowercase letters in @enumerate; get a bigger
    +                  alphabet}%
    +    \fi
    +    \char\lccode\itemno
    +  }%
    +}
    +
    +% The starting (uppercase) letter is in \thearg.
    +\def\uppercaseenumerate{%
    +  \itemno = \expandafter`\thearg
    +  \startenumeration{%
    +    % Be sure we're not beyond the end of the alphabet.
    +    \ifnum\itemno=0
    +      \errmessage{No more uppercase letters in @enumerate; get a bigger
    +                  alphabet}
    +    \fi
    +    \char\uccode\itemno
    +  }%
    +}
    +
    +% Call \doitemize, adding a period to the first argument and supplying the
    +% common last two arguments.  Also subtract one from the initial value in
    +% \itemno, since @item increments \itemno.
    +%
    +\def\startenumeration#1{%
    +  \advance\itemno by -1
    +  \doitemize{#1.}\flushcr
    +}
    +
    +% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
    +% to @enumerate.
    +%
    +\def\alphaenumerate{\enumerate{a}}
    +\def\capsenumerate{\enumerate{A}}
    +\def\Ealphaenumerate{\Eenumerate}
    +\def\Ecapsenumerate{\Eenumerate}
    +
    +
    +% @multitable macros
    +% Amy Hendrickson, 8/18/94, 3/6/96
    +%
    +% @multitable ... @end multitable will make as many columns as desired.
    +% Contents of each column will wrap at width given in preamble.  Width
    +% can be specified either with sample text given in a template line,
    +% or in percent of \hsize, the current width of text on page.
    +
    +% Table can continue over pages but will only break between lines.
    +
    +% To make preamble:
    +%
    +% Either define widths of columns in terms of percent of \hsize:
    +%   @multitable @columnfractions .25 .3 .45
    +%   @item ...
    +%
    +%   Numbers following @columnfractions are the percent of the total
    +%   current hsize to be used for each column. You may use as many
    +%   columns as desired.
    +
    +
    +% Or use a template:
    +%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
    +%   @item ...
    +%   using the widest term desired in each column.
    +
    +% Each new table line starts with @item, each subsequent new column
    +% starts with @tab. Empty columns may be produced by supplying @tab's
    +% with nothing between them for as many times as empty columns are needed,
    +% ie, @tab@tab@tab will produce two empty columns.
    +
    +% @item, @tab do not need to be on their own lines, but it will not hurt
    +% if they are.
    +
    +% Sample multitable:
    +
    +%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
    +%   @item first col stuff @tab second col stuff @tab third col
    +%   @item
    +%   first col stuff
    +%   @tab
    +%   second col stuff
    +%   @tab
    +%   third col
    +%   @item first col stuff @tab second col stuff
    +%   @tab Many paragraphs of text may be used in any column.
    +%
    +%         They will wrap at the width determined by the template.
    +%   @item@tab@tab This will be in third column.
    +%   @end multitable
    +
    +% Default dimensions may be reset by user.
    +% @multitableparskip is vertical space between paragraphs in table.
    +% @multitableparindent is paragraph indent in table.
    +% @multitablecolmargin is horizontal space to be left between columns.
    +% @multitablelinespace is space to leave between table items, baseline
    +%                                                            to baseline.
    +%   0pt means it depends on current normal line spacing.
    +%
    +\newskip\multitableparskip
    +\newskip\multitableparindent
    +\newdimen\multitablecolspace
    +\newskip\multitablelinespace
    +\multitableparskip=0pt
    +\multitableparindent=6pt
    +\multitablecolspace=12pt
    +\multitablelinespace=0pt
    +
    +% Macros used to set up halign preamble:
    +%
    +\let\endsetuptable\relax
    +\def\xendsetuptable{\endsetuptable}
    +\let\columnfractions\relax
    +\def\xcolumnfractions{\columnfractions}
    +\newif\ifsetpercent
    +
    +% #1 is the @columnfraction, usually a decimal number like .5, but might
    +% be just 1.  We just use it, whatever it is.
    +%
    +\def\pickupwholefraction#1 {%
    +  \global\advance\colcount by 1
    +  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
    +  \setuptable
    +}
    +
    +\newcount\colcount
    +\def\setuptable#1{%
    +  \def\firstarg{#1}%
    +  \ifx\firstarg\xendsetuptable
    +    \let\go = \relax
    +  \else
    +    \ifx\firstarg\xcolumnfractions
    +      \global\setpercenttrue
    +    \else
    +      \ifsetpercent
    +         \let\go\pickupwholefraction
    +      \else
    +         \global\advance\colcount by 1
    +         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
    +                   % separator; typically that is always in the input, anyway.
    +         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
    +      \fi
    +    \fi
    +    \ifx\go\pickupwholefraction
    +      % Put the argument back for the \pickupwholefraction call, so
    +      % we'll always have a period there to be parsed.
    +      \def\go{\pickupwholefraction#1}%
    +    \else
    +      \let\go = \setuptable
    +    \fi%
    +  \fi
    +  \go
    +}
    +
    +% multitable-only commands.
    +%
    +% @headitem starts a heading row, which we typeset in bold.  Assignments
    +% have to be global since we are inside the implicit group of an
    +% alignment entry.  \everycr below resets \everytab so we don't have to
    +% undo it ourselves.
    +\def\headitemfont{\b}% for people to use in the template row; not changeable
    +\def\headitem{%
    +  \checkenv\multitable
    +  \crcr
    +  \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
    +  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
    +  \the\everytab % for the first item
    +}%
    +%
    +% default for tables with no headings.
    +\let\headitemcrhook=\relax
    +%
    +% A \tab used to include \hskip1sp.  But then the space in a template
    +% line is not enough.  That is bad.  So let's go back to just `&' until
    +% we again encounter the problem the 1sp was intended to solve.
    +%					--karl, nathan@acm.org, 20apr99.
    +\def\tab{\checkenv\multitable &\the\everytab}%
    +
    +% @multitable ... @end multitable definitions:
    +%
    +\newtoks\everytab  % insert after every tab.
    +%
    +\envdef\multitable{%
    +  \vskip\parskip
    +  \startsavinginserts
    +  %
    +  % @item within a multitable starts a normal row.
    +  % We use \def instead of \let so that if one of the multitable entries
    +  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
    +  % \endtemplate) expanding \doitemize.
    +  \def\item{\crcr}%
    +  %
    +  \tolerance=9500
    +  \hbadness=9500
    +  \setmultitablespacing
    +  \parskip=\multitableparskip
    +  \parindent=\multitableparindent
    +  \overfullrule=0pt
    +  \global\colcount=0
    +  %
    +  \everycr = {%
    +    \noalign{%
    +      \global\everytab={}% Reset from possible headitem.
    +      \global\colcount=0 % Reset the column counter.
    +      %
    +      % Check for saved footnotes, etc.:
    +      \checkinserts
    +      %
    +      % Perhaps a \nobreak, then reset:
    +      \headitemcrhook
    +      \global\let\headitemcrhook=\relax
    +    }%
    +  }%
    +  %
    +  \parsearg\domultitable
    +}
    +\def\domultitable#1{%
    +  % To parse everything between @multitable and @item:
    +  \setuptable#1 \endsetuptable
    +  %
    +  % This preamble sets up a generic column definition, which will
    +  % be used as many times as user calls for columns.
    +  % \vtop will set a single line and will also let text wrap and
    +  % continue for many paragraphs if desired.
    +  \halign\bgroup &%
    +    \global\advance\colcount by 1
    +    \multistrut
    +    \vtop{%
    +      % Use the current \colcount to find the correct column width:
    +      \hsize=\expandafter\csname col\the\colcount\endcsname
    +      %
    +      % In order to keep entries from bumping into each other
    +      % we will add a \leftskip of \multitablecolspace to all columns after
    +      % the first one.
    +      %
    +      % If a template has been used, we will add \multitablecolspace
    +      % to the width of each template entry.
    +      %
    +      % If the user has set preamble in terms of percent of \hsize we will
    +      % use that dimension as the width of the column, and the \leftskip
    +      % will keep entries from bumping into each other.  Table will start at
    +      % left margin and final column will justify at right margin.
    +      %
    +      % Make sure we don't inherit \rightskip from the outer environment.
    +      \rightskip=0pt
    +      \ifnum\colcount=1
    +	% The first column will be indented with the surrounding text.
    +	\advance\hsize by\leftskip
    +      \else
    +	\ifsetpercent \else
    +	  % If user has not set preamble in terms of percent of \hsize
    +	  % we will advance \hsize by \multitablecolspace.
    +	  \advance\hsize by \multitablecolspace
    +	\fi
    +       % In either case we will make \leftskip=\multitablecolspace:
    +      \leftskip=\multitablecolspace
    +      \fi
    +      % Ignoring space at the beginning and end avoids an occasional spurious
    +      % blank line, when TeX decides to break the line at the space before the
    +      % box from the multistrut, so the strut ends up on a line by itself.
    +      % For example:
    +      % @multitable @columnfractions .11 .89
    +      % @item @code{#}
    +      % @tab Legal holiday which is valid in major parts of the whole country.
    +      % Is automatically provided with highlighting sequences respectively
    +      % marking characters.
    +      \noindent\ignorespaces##\unskip\multistrut
    +    }\cr
    +}
    +\def\Emultitable{%
    +  \crcr
    +  \egroup % end the \halign
    +  \global\setpercentfalse
    +}
    +
    +\def\setmultitablespacing{%
    +  \def\multistrut{\strut}% just use the standard line spacing
    +  %
    +  % Compute \multitablelinespace (if not defined by user) for use in
    +  % \multitableparskip calculation.  We used define \multistrut based on
    +  % this, but (ironically) that caused the spacing to be off.
    +  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
    +\ifdim\multitablelinespace=0pt
    +\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
    +\global\advance\multitablelinespace by-\ht0
    +\fi
    +% Test to see if parskip is larger than space between lines of
    +% table. If not, do nothing.
    +%        If so, set to same dimension as multitablelinespace.
    +\ifdim\multitableparskip>\multitablelinespace
    +\global\multitableparskip=\multitablelinespace
    +\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
    +                                      % than skip between lines in the table.
    +\fi%
    +\ifdim\multitableparskip=0pt
    +\global\multitableparskip=\multitablelinespace
    +\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
    +                                      % than skip between lines in the table.
    +\fi}
    +
    +
    +\message{conditionals,}
    +
    +% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
    +% @ifnotxml always succeed.  They currently do nothing; we don't
    +% attempt to check whether the conditionals are properly nested.  But we
    +% have to remember that they are conditionals, so that @end doesn't
    +% attempt to close an environment group.
    +%
    +\def\makecond#1{%
    +  \expandafter\let\csname #1\endcsname = \relax
    +  \expandafter\let\csname iscond.#1\endcsname = 1
    +}
    +\makecond{iftex}
    +\makecond{ifnotdocbook}
    +\makecond{ifnothtml}
    +\makecond{ifnotinfo}
    +\makecond{ifnotplaintext}
    +\makecond{ifnotxml}
    +
    +% Ignore @ignore, @ifhtml, @ifinfo, and the like.
    +%
    +\def\direntry{\doignore{direntry}}
    +\def\documentdescription{\doignore{documentdescription}}
    +\def\docbook{\doignore{docbook}}
    +\def\html{\doignore{html}}
    +\def\ifdocbook{\doignore{ifdocbook}}
    +\def\ifhtml{\doignore{ifhtml}}
    +\def\ifinfo{\doignore{ifinfo}}
    +\def\ifnottex{\doignore{ifnottex}}
    +\def\ifplaintext{\doignore{ifplaintext}}
    +\def\ifxml{\doignore{ifxml}}
    +\def\ignore{\doignore{ignore}}
    +\def\menu{\doignore{menu}}
    +\def\xml{\doignore{xml}}
    +
    +% Ignore text until a line `@end #1', keeping track of nested conditionals.
    +%
    +% A count to remember the depth of nesting.
    +\newcount\doignorecount
    +
    +\def\doignore#1{\begingroup
    +  % Scan in ``verbatim'' mode:
    +  \obeylines
    +  \catcode`\@ = \other
    +  \catcode`\{ = \other
    +  \catcode`\} = \other
    +  %
    +  % Make sure that spaces turn into tokens that match what \doignoretext wants.
    +  \spaceisspace
    +  %
    +  % Count number of #1's that we've seen.
    +  \doignorecount = 0
    +  %
    +  % Swallow text until we reach the matching `@end #1'.
    +  \dodoignore{#1}%
    +}
    +
    +{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
    +  \obeylines %
    +  %
    +  \gdef\dodoignore#1{%
    +    % #1 contains the command name as a string, e.g., `ifinfo'.
    +    %
    +    % Define a command to find the next `@end #1'.
    +    \long\def\doignoretext##1^^M@end #1{%
    +      \doignoretextyyy##1^^M@#1\_STOP_}%
    +    %
    +    % And this command to find another #1 command, at the beginning of a
    +    % line.  (Otherwise, we would consider a line `@c @ifset', for
    +    % example, to count as an @ifset for nesting.)
    +    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
    +    %
    +    % And now expand that command.
    +    \doignoretext ^^M%
    +  }%
    +}
    +
    +\def\doignoreyyy#1{%
    +  \def\temp{#1}%
    +  \ifx\temp\empty			% Nothing found.
    +    \let\next\doignoretextzzz
    +  \else					% Found a nested condition, ...
    +    \advance\doignorecount by 1
    +    \let\next\doignoretextyyy		% ..., look for another.
    +    % If we're here, #1 ends with ^^M\ifinfo (for example).
    +  \fi
    +  \next #1% the token \_STOP_ is present just after this macro.
    +}
    +
    +% We have to swallow the remaining "\_STOP_".
    +%
    +\def\doignoretextzzz#1{%
    +  \ifnum\doignorecount = 0	% We have just found the outermost @end.
    +    \let\next\enddoignore
    +  \else				% Still inside a nested condition.
    +    \advance\doignorecount by -1
    +    \let\next\doignoretext      % Look for the next @end.
    +  \fi
    +  \next
    +}
    +
    +% Finish off ignored text.
    +{ \obeylines%
    +  % Ignore anything after the last `@end #1'; this matters in verbatim
    +  % environments, where otherwise the newline after an ignored conditional
    +  % would result in a blank line in the output.
    +  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
    +}
    +
    +
    +% @set VAR sets the variable VAR to an empty value.
    +% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
    +%
    +% Since we want to separate VAR from REST-OF-LINE (which might be
    +% empty), we can't just use \parsearg; we have to insert a space of our
    +% own to delimit the rest of the line, and then take it out again if we
    +% didn't need it.
    +% We rely on the fact that \parsearg sets \catcode`\ =10.
    +%
    +\parseargdef\set{\setyyy#1 \endsetyyy}
    +\def\setyyy#1 #2\endsetyyy{%
    +  {%
    +    \makevalueexpandable
    +    \def\temp{#2}%
    +    \edef\next{\gdef\makecsname{SET#1}}%
    +    \ifx\temp\empty
    +      \next{}%
    +    \else
    +      \setzzz#2\endsetzzz
    +    \fi
    +  }%
    +}
    +% Remove the trailing space \setxxx inserted.
    +\def\setzzz#1 \endsetzzz{\next{#1}}
    +
    +% @clear VAR clears (i.e., unsets) the variable VAR.
    +%
    +\parseargdef\clear{%
    +  {%
    +    \makevalueexpandable
    +    \global\expandafter\let\csname SET#1\endcsname=\relax
    +  }%
    +}
    +
    +% @value{foo} gets the text saved in variable foo.
    +\def\value{\begingroup\makevalueexpandable\valuexxx}
    +\def\valuexxx#1{\expandablevalue{#1}\endgroup}
    +{
    +  \catcode`\-=\active \catcode`\_=\active
    +  %
    +  \gdef\makevalueexpandable{%
    +    \let\value = \expandablevalue
    +    % We don't want these characters active, ...
    +    \catcode`\-=\other \catcode`\_=\other
    +    % ..., but we might end up with active ones in the argument if
    +    % we're called from @code, as @code{@value{foo-bar_}}, though.
    +    % So \let them to their normal equivalents.
    +    \let-\normaldash \let_\normalunderscore
    +  }
    +}
    +
    +\def\expandablevalue#1{%
    +  \expandafter\ifx\csname SET#1\endcsname\relax
    +    {[No value for ``#1'']}%
    +    \message{Variable `#1', used in @value, is not set.}%
    +  \else
    +    \csname SET#1\endcsname
    +  \fi
    +}
    +
    +% Like \expandablevalue, but completely expandable (the \message in the
    +% definition above operates at the execution level of TeX).  Used when
    +% writing to auxiliary files, due to the expansion that \write does.
    +% If flag is undefined, pass through an unexpanded @value command: maybe it
    +% will be set by the time it is read back in.
    +%
    +% NB flag names containing - or _ may not work here.
    +\def\dummyvalue#1{%
    +  \expandafter\ifx\csname SET#1\endcsname\relax
    +    \string\value{#1}%
    +  \else
    +    \csname SET#1\endcsname
    +  \fi
    +}
    +
    +% Used for @value's in index entries to form the sort key: expand the @value
    +% if possible, otherwise sort late.
    +\def\indexnofontsvalue#1{%
    +  \expandafter\ifx\csname SET#1\endcsname\relax
    +    ZZZZZZZ%
    +  \else
    +    \csname SET#1\endcsname
    +  \fi
    +}
    +
    +% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
    +% with @set.
    +%
    +% To get the special treatment we need for `@end ifset,' we call
    +% \makecond and then redefine.
    +%
    +\makecond{ifset}
    +\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
    +\def\doifset#1#2{%
    +  {%
    +    \makevalueexpandable
    +    \let\next=\empty
    +    \expandafter\ifx\csname SET#2\endcsname\relax
    +      #1% If not set, redefine \next.
    +    \fi
    +    \expandafter
    +  }\next
    +}
    +\def\ifsetfail{\doignore{ifset}}
    +
    +% @ifclear VAR ... @end executes the `...' iff VAR has never been
    +% defined with @set, or has been undefined with @clear.
    +%
    +% The `\else' inside the `\doifset' parameter is a trick to reuse the
    +% above code: if the variable is not set, do nothing, if it is set,
    +% then redefine \next to \ifclearfail.
    +%
    +\makecond{ifclear}
    +\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
    +\def\ifclearfail{\doignore{ifclear}}
    +
    +% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
    +% without the @) is in fact defined.  We can only feasibly check at the
    +% TeX level, so something like `mathcode' is going to considered
    +% defined even though it is not a Texinfo command.
    +%
    +\makecond{ifcommanddefined}
    +\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
    +%
    +\def\doifcmddefined#1#2{{%
    +    \makevalueexpandable
    +    \let\next=\empty
    +    \expandafter\ifx\csname #2\endcsname\relax
    +      #1% If not defined, \let\next as above.
    +    \fi
    +    \expandafter
    +  }\next
    +}
    +\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
    +
    +% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
    +\makecond{ifcommandnotdefined}
    +\def\ifcommandnotdefined{%
    +  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
    +\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
    +
    +% Set the `txicommandconditionals' variable, so documents have a way to
    +% test if the @ifcommand...defined conditionals are available.
    +\set txicommandconditionals
    +
    +% @dircategory CATEGORY  -- specify a category of the dir file
    +% which this file should belong to.  Ignore this in TeX.
    +\let\dircategory=\comment
    +
    +% @defininfoenclose.
    +\let\definfoenclose=\comment
    +
    +
    +\message{indexing,}
    +% Index generation facilities
    +
    +% Define \newwrite to be identical to plain tex's \newwrite
    +% except not \outer, so it can be used within macros and \if's.
    +\edef\newwrite{\makecsname{ptexnewwrite}}
    +
    +% \newindex {foo} defines an index named IX.
    +% It automatically defines \IXindex such that
    +% \IXindex ...rest of line... puts an entry in the index IX.
    +% It also defines \IXindfile to be the number of the output channel for
    +% the file that accumulates this index.  The file's extension is IX.
    +% The name of an index should be no more than 2 characters long
    +% for the sake of vms.
    +%
    +\def\newindex#1{%
    +  \expandafter\chardef\csname#1indfile\endcsname=0
    +  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
    +    \noexpand\doindex{#1}}
    +}
    +
    +% @defindex foo  ==  \newindex{foo}
    +%
    +\def\defindex{\parsearg\newindex}
    +
    +% Define @defcodeindex, like @defindex except put all entries in @code.
    +%
    +\def\defcodeindex{\parsearg\newcodeindex}
    +%
    +\def\newcodeindex#1{%
    +  \expandafter\chardef\csname#1indfile\endcsname=0
    +  \expandafter\xdef\csname#1index\endcsname{%
    +    \noexpand\docodeindex{#1}}%
    +}
    +
    +% The default indices:
    +\newindex{cp}%      concepts,
    +\newcodeindex{fn}%  functions,
    +\newcodeindex{vr}%  variables,
    +\newcodeindex{tp}%  types,
    +\newcodeindex{ky}%  keys
    +\newcodeindex{pg}%  and programs.
    +
    +
    +% @synindex foo bar    makes index foo feed into index bar.
    +% Do this instead of @defindex foo if you don't want it as a separate index.
    +%
    +% @syncodeindex foo bar   similar, but put all entries made for index foo
    +% inside @code.
    +%
    +\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
    +\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
    +
    +% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
    +% #3 the target index (bar).
    +\def\dosynindex#1#2#3{%
    +  \requireopenindexfile{#3}%
    +  % redefine \fooindfile:
    +  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
    +  \expandafter\let\csname#2indfile\endcsname=\temp
    +  % redefine \fooindex:
    +  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
    +}
    +
    +% Define \doindex, the driver for all index macros.
    +% Argument #1 is generated by the calling \fooindex macro,
    +% and it is the two-letter name of the index.
    +
    +\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
    +\def\doindexxxx #1{\doind{\indexname}{#1}}
    +
    +% like the previous two, but they put @code around the argument.
    +\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
    +\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
    +
    +
    +% Used for the aux, toc and index files to prevent expansion of Texinfo
    +% commands.
    +%
    +\def\atdummies{%
    +  \definedummyletter\@%
    +  \definedummyletter\ %
    +  \definedummyletter\{%
    +  \definedummyletter\}%
    +  \definedummyletter\&%
    +  %
    +  % Do the redefinitions.
    +  \definedummies
    +  \otherbackslash
    +}
    +
    +% \definedummyword defines \#1 as \string\#1\space, thus effectively
    +% preventing its expansion.  This is used only for control words,
    +% not control letters, because the \space would be incorrect for
    +% control characters, but is needed to separate the control word
    +% from whatever follows.
    +%
    +% These can be used both for control words that take an argument and
    +% those that do not.  If it is followed by {arg} in the input, then
    +% that will dutifully get written to the index (or wherever).
    +%
    +% For control letters, we have \definedummyletter, which omits the
    +% space.
    +%
    +\def\definedummyword  #1{\def#1{\string#1\space}}%
    +\def\definedummyletter#1{\def#1{\string#1}}%
    +\let\definedummyaccent\definedummyletter
    +
    +% Called from \atdummies to prevent the expansion of commands.
    +%
    +\def\definedummies{%
    +  %
    +  \let\commondummyword\definedummyword
    +  \let\commondummyletter\definedummyletter
    +  \let\commondummyaccent\definedummyaccent
    +  \commondummiesnofonts
    +  %
    +  \definedummyletter\_%
    +  \definedummyletter\-%
    +  %
    +  % Non-English letters.
    +  \definedummyword\AA
    +  \definedummyword\AE
    +  \definedummyword\DH
    +  \definedummyword\L
    +  \definedummyword\O
    +  \definedummyword\OE
    +  \definedummyword\TH
    +  \definedummyword\aa
    +  \definedummyword\ae
    +  \definedummyword\dh
    +  \definedummyword\exclamdown
    +  \definedummyword\l
    +  \definedummyword\o
    +  \definedummyword\oe
    +  \definedummyword\ordf
    +  \definedummyword\ordm
    +  \definedummyword\questiondown
    +  \definedummyword\ss
    +  \definedummyword\th
    +  %
    +  % Although these internal commands shouldn't show up, sometimes they do.
    +  \definedummyword\bf
    +  \definedummyword\gtr
    +  \definedummyword\hat
    +  \definedummyword\less
    +  \definedummyword\sf
    +  \definedummyword\sl
    +  \definedummyword\tclose
    +  \definedummyword\tt
    +  %
    +  \definedummyword\LaTeX
    +  \definedummyword\TeX
    +  %
    +  % Assorted special characters.
    +  \definedummyword\ampchar
    +  \definedummyword\atchar
    +  \definedummyword\arrow
    +  \definedummyword\backslashchar
    +  \definedummyword\bullet
    +  \definedummyword\comma
    +  \definedummyword\copyright
    +  \definedummyword\registeredsymbol
    +  \definedummyword\dots
    +  \definedummyword\enddots
    +  \definedummyword\entrybreak
    +  \definedummyword\equiv
    +  \definedummyword\error
    +  \definedummyword\euro
    +  \definedummyword\expansion
    +  \definedummyword\geq
    +  \definedummyword\guillemetleft
    +  \definedummyword\guillemetright
    +  \definedummyword\guilsinglleft
    +  \definedummyword\guilsinglright
    +  \definedummyword\lbracechar
    +  \definedummyword\leq
    +  \definedummyword\mathopsup
    +  \definedummyword\minus
    +  \definedummyword\ogonek
    +  \definedummyword\pounds
    +  \definedummyword\point
    +  \definedummyword\print
    +  \definedummyword\quotedblbase
    +  \definedummyword\quotedblleft
    +  \definedummyword\quotedblright
    +  \definedummyword\quoteleft
    +  \definedummyword\quoteright
    +  \definedummyword\quotesinglbase
    +  \definedummyword\rbracechar
    +  \definedummyword\result
    +  \definedummyword\sub
    +  \definedummyword\sup
    +  \definedummyword\textdegree
    +  %
    +  \definedummyword\subentry
    +  %
    +  % We want to disable all macros so that they are not expanded by \write.
    +  \macrolist
    +  \let\value\dummyvalue
    +  %
    +  \normalturnoffactive
    +}
    +
    +% \commondummiesnofonts: common to \definedummies and \indexnofonts.
    +% Define \commondummyletter, \commondummyaccent and \commondummyword before
    +% using.  Used for accents, font commands, and various control letters.
    +%
    +\def\commondummiesnofonts{%
    +  % Control letters and accents.
    +  \commondummyletter\!%
    +  \commondummyaccent\"%
    +  \commondummyaccent\'%
    +  \commondummyletter\*%
    +  \commondummyaccent\,%
    +  \commondummyletter\.%
    +  \commondummyletter\/%
    +  \commondummyletter\:%
    +  \commondummyaccent\=%
    +  \commondummyletter\?%
    +  \commondummyaccent\^%
    +  \commondummyaccent\`%
    +  \commondummyaccent\~%
    +  \commondummyword\u
    +  \commondummyword\v
    +  \commondummyword\H
    +  \commondummyword\dotaccent
    +  \commondummyword\ogonek
    +  \commondummyword\ringaccent
    +  \commondummyword\tieaccent
    +  \commondummyword\ubaraccent
    +  \commondummyword\udotaccent
    +  \commondummyword\dotless
    +  %
    +  % Texinfo font commands.
    +  \commondummyword\b
    +  \commondummyword\i
    +  \commondummyword\r
    +  \commondummyword\sansserif
    +  \commondummyword\sc
    +  \commondummyword\slanted
    +  \commondummyword\t
    +  %
    +  % Commands that take arguments.
    +  \commondummyword\abbr
    +  \commondummyword\acronym
    +  \commondummyword\anchor
    +  \commondummyword\cite
    +  \commondummyword\code
    +  \commondummyword\command
    +  \commondummyword\dfn
    +  \commondummyword\dmn
    +  \commondummyword\email
    +  \commondummyword\emph
    +  \commondummyword\env
    +  \commondummyword\file
    +  \commondummyword\image
    +  \commondummyword\indicateurl
    +  \commondummyword\inforef
    +  \commondummyword\kbd
    +  \commondummyword\key
    +  \commondummyword\math
    +  \commondummyword\option
    +  \commondummyword\pxref
    +  \commondummyword\ref
    +  \commondummyword\samp
    +  \commondummyword\strong
    +  \commondummyword\tie
    +  \commondummyword\U
    +  \commondummyword\uref
    +  \commondummyword\url
    +  \commondummyword\var
    +  \commondummyword\verb
    +  \commondummyword\w
    +  \commondummyword\xref
    +}
    +
    +\let\indexlbrace\relax
    +\let\indexrbrace\relax
    +\let\indexatchar\relax
    +\let\indexbackslash\relax
    +
    +{\catcode`\@=0
    +\catcode`\\=13
    +  @gdef@backslashdisappear{@def\{}}
    +}
    +
    +{
    +\catcode`\<=13
    +\catcode`\-=13
    +\catcode`\`=13
    +  \gdef\indexnonalnumdisappear{%
    +    \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
    +      % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
    +      % (Introduced for FSFS 2nd ed.)
    +      \let`=\empty
    +    \fi
    +    %
    +    \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
    +      \backslashdisappear
    +    \fi
    +    %
    +    \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
    +      \def-{}%
    +    \fi
    +    \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
    +      \def<{}%
    +    \fi
    +    \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
    +      \def\@{}%
    +    \fi
    +  }
    +
    +  \gdef\indexnonalnumreappear{%
    +    \let-\normaldash
    +    \let<\normalless
    +  }
    +}
    +
    +
    +% \indexnofonts is used when outputting the strings to sort the index
    +% by, and when constructing control sequence names.  It eliminates all
    +% control sequences and just writes whatever the best ASCII sort string
    +% would be for a given command (usually its argument).
    +%
    +\def\indexnofonts{%
    +  % Accent commands should become @asis.
    +  \def\commondummyaccent##1{\let##1\asis}%
    +  % We can just ignore other control letters.
    +  \def\commondummyletter##1{\let##1\empty}%
    +  % All control words become @asis by default; overrides below.
    +  \let\commondummyword\commondummyaccent
    +  \commondummiesnofonts
    +  %
    +  % Don't no-op \tt, since it isn't a user-level command
    +  % and is used in the definitions of the active chars like <, >, |, etc.
    +  % Likewise with the other plain tex font commands.
    +  %\let\tt=\asis
    +  %
    +  \def\ { }%
    +  \def\@{@}%
    +  \def\_{\normalunderscore}%
    +  \def\-{}% @- shouldn't affect sorting
    +  %
    +  \uccode`\1=`\{ \uppercase{\def\{{1}}%
    +  \uccode`\1=`\} \uppercase{\def\}{1}}%
    +  \let\lbracechar\{%
    +  \let\rbracechar\}%
    +  %
    +  % Non-English letters.
    +  \def\AA{AA}%
    +  \def\AE{AE}%
    +  \def\DH{DZZ}%
    +  \def\L{L}%
    +  \def\OE{OE}%
    +  \def\O{O}%
    +  \def\TH{TH}%
    +  \def\aa{aa}%
    +  \def\ae{ae}%
    +  \def\dh{dzz}%
    +  \def\exclamdown{!}%
    +  \def\l{l}%
    +  \def\oe{oe}%
    +  \def\ordf{a}%
    +  \def\ordm{o}%
    +  \def\o{o}%
    +  \def\questiondown{?}%
    +  \def\ss{ss}%
    +  \def\th{th}%
    +  %
    +  \def\LaTeX{LaTeX}%
    +  \def\TeX{TeX}%
    +  %
    +  % Assorted special characters.  \defglyph gives the control sequence a
    +  % definition that removes the {} that follows its use.
    +  \defglyph\atchar{@}%
    +  \defglyph\arrow{->}%
    +  \defglyph\bullet{bullet}%
    +  \defglyph\comma{,}%
    +  \defglyph\copyright{copyright}%
    +  \defglyph\dots{...}%
    +  \defglyph\enddots{...}%
    +  \defglyph\equiv{==}%
    +  \defglyph\error{error}%
    +  \defglyph\euro{euro}%
    +  \defglyph\expansion{==>}%
    +  \defglyph\geq{>=}%
    +  \defglyph\guillemetleft{<<}%
    +  \defglyph\guillemetright{>>}%
    +  \defglyph\guilsinglleft{<}%
    +  \defglyph\guilsinglright{>}%
    +  \defglyph\leq{<=}%
    +  \defglyph\lbracechar{\{}%
    +  \defglyph\minus{-}%
    +  \defglyph\point{.}%
    +  \defglyph\pounds{pounds}%
    +  \defglyph\print{-|}%
    +  \defglyph\quotedblbase{"}%
    +  \defglyph\quotedblleft{"}%
    +  \defglyph\quotedblright{"}%
    +  \defglyph\quoteleft{`}%
    +  \defglyph\quoteright{'}%
    +  \defglyph\quotesinglbase{,}%
    +  \defglyph\rbracechar{\}}%
    +  \defglyph\registeredsymbol{R}%
    +  \defglyph\result{=>}%
    +  \defglyph\textdegree{o}%
    +  %
    +  % We need to get rid of all macros, leaving only the arguments (if present).
    +  % Of course this is not nearly correct, but it is the best we can do for now.
    +  % makeinfo does not expand macros in the argument to @deffn, which ends up
    +  % writing an index entry, and texindex isn't prepared for an index sort entry
    +  % that starts with \.
    +  %
    +  % Since macro invocations are followed by braces, we can just redefine them
    +  % to take a single TeX argument.  The case of a macro invocation that
    +  % goes to end-of-line is not handled.
    +  %
    +  \macrolist
    +  \let\value\indexnofontsvalue
    +}
    +\def\defglyph#1#2{\def#1##1{#2}} % see above
    +
    +
    +
    +
    +% #1 is the index name, #2 is the entry text.
    +\def\doind#1#2{%
    +  \iflinks
    +  {%
    +    %
    +    \requireopenindexfile{#1}%
    +    \edef\writeto{\csname#1indfile\endcsname}%
    +    %
    +    \def\indextext{#2}%
    +    \safewhatsit\doindwrite
    +  }%
    +  \fi
    +}
    +
    +% Check if an index file has been opened, and if not, open it.
    +\def\requireopenindexfile#1{%
    +\ifnum\csname #1indfile\endcsname=0
    +  \expandafter\newwrite \csname#1indfile\endcsname
    +  \edef\suffix{#1}%
    +  % A .fls suffix would conflict with the file extension for the output
    +  % of -recorder, so use .f1s instead.
    +  \ifx\suffix\indexisfl\def\suffix{f1}\fi
    +  % Open the file
    +  \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
    +  % Using \immediate above here prevents an object entering into the current
    +  % box, which could confound checks such as those in \safewhatsit for
    +  % preceding skips.
    +  \typeout{Writing index file \jobname.\suffix}%
    +\fi}
    +\def\indexisfl{fl}
    +
    +% Definition for writing index entry sort key.
    +{
    +\catcode`\-=13
    +\gdef\indexwritesortas{%
    +  \begingroup
    +  \indexnonalnumreappear
    +  \indexwritesortasxxx}
    +\gdef\indexwritesortasxxx#1{%
    +  \xdef\indexsortkey{#1}\endgroup}
    +}
    +
    +\def\indexwriteseealso#1{
    +  \gdef\pagenumbertext{\string\seealso{#1}}%
    +}
    +\def\indexwriteseeentry#1{
    +  \gdef\pagenumbertext{\string\seeentry{#1}}%
    +}
    +
    +% The default definitions
    +\def\sortas#1{}%
    +\def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only
    +\def\putwordSeeAlso{See also}
    +\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only
    +
    +
    +% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}":
    +%   * Set \bracedtext to "{aaa}{bbb}"
    +%   * Set \fullindexsortkey to "aaa @subentry ZZZ"
    +%   * If @seealso occurs, set \pagenumbertext
    +%
    +\def\splitindexentry#1{%
    +  \gdef\fullindexsortkey{}%
    +  \xdef\bracedtext{}%
    +  \def\sep{}%
    +  \def\seealso##1{}%
    +  \def\seeentry##1{}%
    +  \expandafter\doindexsegment#1\subentry\finish\subentry
    +}
    +
    +% append the results from the next segment
    +\def\doindexsegment#1\subentry{%
    +  \def\segment{#1}%
    +  \ifx\segment\isfinish
    +  \else
    +    %
    +    % Fully expand the segment, throwing away any @sortas directives, and
    +    % trim spaces.
    +    \edef\trimmed{\segment}%
    +    \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
    +    %
    +    \xdef\bracedtext{\bracedtext{\trimmed}}%
    +    %
    +    % Get the string to sort by.  Process the segment with all
    +    % font commands turned off.
    +    \bgroup
    +      \let\sortas\indexwritesortas
    +      \let\seealso\indexwriteseealso
    +      \let\seeentry\indexwriteseeentry
    +      \indexnofonts
    +      % The braces around the commands are recognized by texindex.
    +      \def\lbracechar{{\string\indexlbrace}}%
    +      \def\rbracechar{{\string\indexrbrace}}%
    +      \let\{=\lbracechar
    +      \let\}=\rbracechar
    +      \def\@{{\string\indexatchar}}%
    +      \def\atchar##1{\@}%
    +      \def\backslashchar{{\string\indexbackslash}}%
    +      \uccode`\~=`\\ \uppercase{\let~\backslashchar}%
    +      %
    +      \let\indexsortkey\empty
    +      \global\let\pagenumbertext\empty
    +      % Execute the segment and throw away the typeset output.  This executes
    +      % any @sortas or @seealso commands in this segment.
    +      \setbox\dummybox = \hbox{\segment}%
    +      \ifx\indexsortkey\empty{%
    +        \indexnonalnumdisappear
    +        \xdef\trimmed{\segment}%
    +        \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
    +        \xdef\indexsortkey{\trimmed}%
    +        \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
    +      }\fi
    +      %
    +      % Append to \fullindexsortkey.
    +      \edef\tmp{\gdef\noexpand\fullindexsortkey{%
    +                  \fullindexsortkey\sep\indexsortkey}}%
    +      \tmp
    +    \egroup
    +    \def\sep{\subentry}%
    +    %
    +    \expandafter\doindexsegment
    +  \fi
    +}
    +\def\isfinish{\finish}%
    +\newbox\dummybox % used above
    +
    +\let\subentry\relax
    +
    +% Use \ instead of @ in index files.  To support old texi2dvi and texindex.
    +% This works without changing the escape character used in the toc or aux
    +% files because the index entries are fully expanded here, and \string uses
    +% the current value of \escapechar.
    +\def\escapeisbackslash{\escapechar=`\\}
    +
    +% Use \ in index files by default.  texi2dvi didn't support @ as the escape
    +% character (as it checked for "\entry" in the files, and not "@entry").  When
    +% the new version of texi2dvi has had a chance to become more prevalent, then
    +% the escape character can change back to @ again.  This should be an easy
    +% change to make now because both @ and \ are only used as escape characters in
    +% index files, never standing for themselves.
    +%
    +\set txiindexescapeisbackslash
    +
    +% Write the entry in \indextext to the index file.
    +%
    +\def\doindwrite{%
    +  \maybemarginindex
    +  %
    +  \atdummies
    +  %
    +  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else
    +    \escapeisbackslash
    +  \fi
    +  %
    +  % For texindex which always views { and } as separators.
    +  \def\{{\lbracechar{}}%
    +  \def\}{\rbracechar{}}%
    +  \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
    +  %
    +  % Split the entry into primary entry and any subentries, and get the index
    +  % sort key.
    +  \splitindexentry\indextext
    +  %
    +  % Set up the complete index entry, with both the sort key and
    +  % the original text, including any font commands.  We write
    +  % three arguments to \entry to the .?? file (four in the
    +  % subentry case), texindex reduces to two when writing the .??s
    +  % sorted result.
    +  %
    +  \edef\temp{%
    +    \write\writeto{%
    +      \string\entry{\fullindexsortkey}%
    +        {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}%
    +        \bracedtext}%
    +  }%
    +  \temp
    +}
    +
    +% Put the index entry in the margin if desired (undocumented).
    +\def\maybemarginindex{%
    +  \ifx\SETmarginindex\relax\else
    +    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}%
    +  \fi
    +}
    +\let\SETmarginindex=\relax
    +
    +
    +% Take care of unwanted page breaks/skips around a whatsit:
    +%
    +% If a skip is the last thing on the list now, preserve it
    +% by backing up by \lastskip, doing the \write, then inserting
    +% the skip again.  Otherwise, the whatsit generated by the
    +% \write or \pdfdest will make \lastskip zero.  The result is that
    +% sequences like this:
    +% @end defun
    +% @tindex whatever
    +% @defun ...
    +% will have extra space inserted, because the \medbreak in the
    +% start of the @defun won't see the skip inserted by the @end of
    +% the previous defun.
    +%
    +% But don't do any of this if we're not in vertical mode.  We
    +% don't want to do a \vskip and prematurely end a paragraph.
    +%
    +% Avoid page breaks due to these extra skips, too.
    +%
    +% But wait, there is a catch there:
    +% We'll have to check whether \lastskip is zero skip.  \ifdim is not
    +% sufficient for this purpose, as it ignores stretch and shrink parts
    +% of the skip.  The only way seems to be to check the textual
    +% representation of the skip.
    +%
    +% The following is almost like \def\zeroskipmacro{0.0pt} except that
    +% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
    +%
    +\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
    +%
    +\newskip\whatsitskip
    +\newcount\whatsitpenalty
    +%
    +% ..., ready, GO:
    +%
    +\def\safewhatsit#1{\ifhmode
    +  #1%
    + \else
    +  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
    +  \whatsitskip = \lastskip
    +  \edef\lastskipmacro{\the\lastskip}%
    +  \whatsitpenalty = \lastpenalty
    +  %
    +  % If \lastskip is nonzero, that means the last item was a
    +  % skip.  And since a skip is discardable, that means this
    +  % -\whatsitskip glue we're inserting is preceded by a
    +  % non-discardable item, therefore it is not a potential
    +  % breakpoint, therefore no \nobreak needed.
    +  \ifx\lastskipmacro\zeroskipmacro
    +  \else
    +    \vskip-\whatsitskip
    +  \fi
    +  %
    +  #1%
    +  %
    +  \ifx\lastskipmacro\zeroskipmacro
    +    % If \lastskip was zero, perhaps the last item was a penalty, and
    +    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
    +    % to re-insert the same penalty (values >10000 are used for various
    +    % signals); since we just inserted a non-discardable item, any
    +    % following glue (such as a \parskip) would be a breakpoint.  For example:
    +    %   @deffn deffn-whatever
    +    %   @vindex index-whatever
    +    %   Description.
    +    % would allow a break between the index-whatever whatsit
    +    % and the "Description." paragraph.
    +    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
    +  \else
    +    % On the other hand, if we had a nonzero \lastskip,
    +    % this make-up glue would be preceded by a non-discardable item
    +    % (the whatsit from the \write), so we must insert a \nobreak.
    +    \nobreak\vskip\whatsitskip
    +  \fi
    +\fi}
    +
    +% The index entry written in the file actually looks like
    +%  \entry {sortstring}{page}{topic}
    +% or
    +%  \entry {sortstring}{page}{topic}{subtopic}
    +% The texindex program reads in these files and writes files
    +% containing these kinds of lines:
    +%  \initial {c}
    +%     before the first topic whose initial is c
    +%  \entry {topic}{pagelist}
    +%     for a topic that is used without subtopics
    +%  \primary {topic}
    +%  \entry {topic}{}
    +%     for the beginning of a topic that is used with subtopics
    +%  \secondary {subtopic}{pagelist}
    +%     for each subtopic.
    +%  \secondary {subtopic}{}
    +%     for a subtopic with sub-subtopics
    +%  \tertiary {subtopic}{subsubtopic}{pagelist}
    +%     for each sub-subtopic.
    +
    +% Define the user-accessible indexing commands
    +% @findex, @vindex, @kindex, @cindex.
    +
    +\def\findex {\fnindex}
    +\def\kindex {\kyindex}
    +\def\cindex {\cpindex}
    +\def\vindex {\vrindex}
    +\def\tindex {\tpindex}
    +\def\pindex {\pgindex}
    +
    +% Define the macros used in formatting output of the sorted index material.
    +
    +% @printindex causes a particular index (the ??s file) to get printed.
    +% It does not print any chapter heading (usually an @unnumbered).
    +%
    +\parseargdef\printindex{\begingroup
    +  \dobreak \chapheadingskip{10000}%
    +  %
    +  \smallfonts \rm
    +  \tolerance = 9500
    +  \plainfrenchspacing
    +  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
    +  %
    +  % See comment in \requireopenindexfile.
    +  \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
    +  %
    +  % See if the index file exists and is nonempty.
    +  \openin 1 \jobname.\indexname s
    +  \ifeof 1
    +    % \enddoublecolumns gets confused if there is no text in the index,
    +    % and it loses the chapter title and the aux file entries for the
    +    % index.  The easiest way to prevent this problem is to make sure
    +    % there is some text.
    +    \putwordIndexNonexistent
    +    \typeout{No file \jobname.\indexname s.}%
    +  \else
    +    % If the index file exists but is empty, then \openin leaves \ifeof
    +    % false.  We have to make TeX try to read something from the file, so
    +    % it can discover if there is anything in it.
    +    \read 1 to \thisline
    +    \ifeof 1
    +      \putwordIndexIsEmpty
    +    \else
    +      \expandafter\printindexzz\thisline\relax\relax\finish%
    +    \fi
    +  \fi
    +  \closein 1
    +\endgroup}
    +
    +% If the index file starts with a backslash, forgo reading the index
    +% file altogether.  If somebody upgrades texinfo.tex they may still have
    +% old index files using \ as the escape character.  Reading this would
    +% at best lead to typesetting garbage, at worst a TeX syntax error.
    +\def\printindexzz#1#2\finish{%
    +  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax
    +    \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
    +      \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
    +\errmessage{%
    +ERROR: A sorted index file in an obsolete format was skipped.
    +To fix this problem, please upgrade your version of 'texi2dvi'
    +or 'texi2pdf' to that at .
    +If you are using an old version of 'texindex' (part of the Texinfo
    +distribution), you may also need to upgrade to a newer version (at least 6.0).
    +You may be able to typeset the index if you run
    +'texindex \jobname.\indexname' yourself.
    +You could also try setting the 'txiindexescapeisbackslash' flag by
    +running a command like
    +'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do
    +this, Texinfo will try to use index files in the old format.
    +If you continue to have problems, deleting the index files and starting again
    +might help (with 'rm \jobname.?? \jobname.??s')%
    +}%
    +      \else
    +        (Skipped sorted index file in obsolete format)
    +      \fi
    +    \else
    +      \begindoublecolumns
    +      \input \jobname.\indexname s
    +      \enddoublecolumns
    +    \fi
    +  \else
    +    \begindoublecolumns
    +    \catcode`\\=0\relax
    +    \catcode`\@=12\relax
    +    \input \jobname.\indexname s
    +    \enddoublecolumns
    +  \fi
    +}
    +
    +% These macros are used by the sorted index file itself.
    +% Change them to control the appearance of the index.
    +
    +{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
    +\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
    +\catcode`\$=3
    +\gdef\initialglyphs{%
    +  % special control sequences used in the index sort key
    +  \let\indexlbrace\{%
    +  \let\indexrbrace\}%
    +  \let\indexatchar\@%
    +  \def\indexbackslash{\math{\backslash}}%
    +  %
    +  % Some changes for non-alphabetic characters.  Using the glyphs from the
    +  % math fonts looks more consistent than the typewriter font used elsewhere
    +  % for these characters.
    +  \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}}
    +  %
    +  % In case @\ is used for backslash
    +  \uppercase{\let\\=~}
    +  % Can't get bold backslash so don't use bold forward slash
    +  \catcode`\/=13
    +  \def/{{\secrmnotbold \normalslash}}%
    +  \def-{{\normaldash\normaldash}}% en dash `--'
    +  \def^{{\chapbf \normalcaret}}%
    +  \def~{{\chapbf \normaltilde}}%
    +  \def\_{%
    +     \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
    +  \def|{$\vert$}%
    +  \def<{$\less$}%
    +  \def>{$\gtr$}%
    +  \def+{$\normalplus$}%
    +}}
    +
    +\def\initial{%
    +  \bgroup
    +  \initialglyphs
    +  \initialx
    +}
    +
    +\def\initialx#1{%
    +  % Remove any glue we may have, we'll be inserting our own.
    +  \removelastskip
    +  %
    +  % We like breaks before the index initials, so insert a bonus.
    +  % The glue before the bonus allows a little bit of space at the
    +  % bottom of a column to reduce an increase in inter-line spacing.
    +  \nobreak
    +  \vskip 0pt plus 5\baselineskip
    +  \penalty -300
    +  \vskip 0pt plus -5\baselineskip
    +  %
    +  % Typeset the initial.  Making this add up to a whole number of
    +  % baselineskips increases the chance of the dots lining up from column
    +  % to column.  It still won't often be perfect, because of the stretch
    +  % we need before each entry, but it's better.
    +  %
    +  % No shrink because it confuses \balancecolumns.
    +  \vskip 1.67\baselineskip plus 1\baselineskip
    +  \leftline{\secfonts \kern-0.05em \secbf #1}%
    +  % \secfonts is inside the argument of \leftline so that the change of
    +  % \baselineskip will not affect any glue inserted before the vbox that
    +  % \leftline creates.
    +  % Do our best not to break after the initial.
    +  \nobreak
    +  \vskip .33\baselineskip plus .1\baselineskip
    +  \egroup % \initialglyphs
    +}
    +
    +\newdimen\entryrightmargin
    +\entryrightmargin=0pt
    +
    +% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
    +% then page number (#2) flushed to the right margin.  It is used for index
    +% and table of contents entries.  The paragraph is indented by \leftskip.
    +%
    +\def\entry{%
    +  \begingroup
    +    %
    +    % Start a new paragraph if necessary, so our assignments below can't
    +    % affect previous text.
    +    \par
    +    %
    +    % No extra space above this paragraph.
    +    \parskip = 0in
    +    %
    +    % When reading the text of entry, convert explicit line breaks
    +    % from @* into spaces.  The user might give these in long section
    +    % titles, for instance.
    +    \def\*{\unskip\space\ignorespaces}%
    +    \def\entrybreak{\hfil\break}% An undocumented command
    +    %
    +    % Swallow the left brace of the text (first parameter):
    +    \afterassignment\doentry
    +    \let\temp =
    +}
    +\def\entrybreak{\unskip\space\ignorespaces}%
    +\def\doentry{%
    +    % Save the text of the entry
    +    \global\setbox\boxA=\hbox\bgroup
    +    \bgroup % Instead of the swallowed brace.
    +      \noindent
    +      \aftergroup\finishentry
    +      % And now comes the text of the entry.
    +      % Not absorbing as a macro argument reduces the chance of problems
    +      % with catcodes occurring.
    +}
    +{\catcode`\@=11
    +\gdef\finishentry#1{%
    +    \egroup % end box A
    +    \dimen@ = \wd\boxA % Length of text of entry
    +    \global\setbox\boxA=\hbox\bgroup
    +      \unhbox\boxA
    +      % #1 is the page number.
    +      %
    +      % Get the width of the page numbers, and only use
    +      % leaders if they are present.
    +      \global\setbox\boxB = \hbox{#1}%
    +      \ifdim\wd\boxB = 0pt
    +        \null\nobreak\hfill\ %
    +      \else
    +        %
    +        \null\nobreak\indexdotfill % Have leaders before the page number.
    +        %
    +        \ifpdforxetex
    +          \pdfgettoks#1.%
    +          \hskip\skip\thinshrinkable\the\toksA
    +        \else
    +          \hskip\skip\thinshrinkable #1%
    +        \fi
    +      \fi
    +    \egroup % end \boxA
    +    \ifdim\wd\boxB = 0pt
    +      \noindent\unhbox\boxA\par
    +      \nobreak
    +    \else\bgroup
    +      % We want the text of the entries to be aligned to the left, and the
    +      % page numbers to be aligned to the right.
    +      %
    +      \parindent = 0pt
    +      \advance\leftskip by 0pt plus 1fil
    +      \advance\leftskip by 0pt plus -1fill
    +      \rightskip = 0pt plus -1fil
    +      \advance\rightskip by 0pt plus 1fill
    +      % Cause last line, which could consist of page numbers on their own
    +      % if the list of page numbers is long, to be aligned to the right.
    +      \parfillskip=0pt plus -1fill
    +      %
    +      \advance\rightskip by \entryrightmargin
    +      % Determine how far we can stretch into the margin.
    +      % This allows, e.g., "Appendix H  GNU Free Documentation License" to
    +      % fit on one line in @letterpaper format.
    +      \ifdim\entryrightmargin>2.1em
    +        \dimen@i=2.1em
    +      \else
    +        \dimen@i=0em
    +      \fi
    +      \advance \parfillskip by 0pt minus 1\dimen@i
    +      %
    +      \dimen@ii = \hsize
    +      \advance\dimen@ii by -1\leftskip
    +      \advance\dimen@ii by -1\entryrightmargin
    +      \advance\dimen@ii by 1\dimen@i
    +      \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
    +      \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
    +        % Try to split the text roughly evenly.  \dimen@ will be the length of
    +        % the first line.
    +        \dimen@ = 0.7\dimen@
    +        \dimen@ii = \hsize
    +        \ifnum\dimen@>\dimen@ii
    +          % If the entry is too long (for example, if it needs more than
    +          % two lines), use all the space in the first line.
    +          \dimen@ = \dimen@ii
    +        \fi
    +        \advance\leftskip by 0pt plus 1fill % ragged right
    +        \advance \dimen@ by 1\rightskip
    +        \parshape = 2 0pt \dimen@ 0em \dimen@ii
    +        % Ideally we'd add a finite glue at the end of the first line only,
    +        % instead of using \parshape with explicit line lengths, but TeX
    +        % doesn't seem to provide a way to do such a thing.
    +        %
    +        % Indent all lines but the first one.
    +        \advance\leftskip by 1em
    +        \advance\parindent by -1em
    +      \fi\fi
    +      \indent % start paragraph
    +      \unhbox\boxA
    +      %
    +      % Do not prefer a separate line ending with a hyphen to fewer lines.
    +      \finalhyphendemerits = 0
    +      %
    +      % Word spacing - no stretch
    +      \spaceskip=\fontdimen2\font minus \fontdimen4\font
    +      %
    +      \linepenalty=1000  % Discourage line breaks.
    +      \hyphenpenalty=5000  % Discourage hyphenation.
    +      %
    +      \par % format the paragraph
    +    \egroup % The \vbox
    +    \fi
    +  \endgroup
    +}}
    +
    +\newskip\thinshrinkable
    +\skip\thinshrinkable=.15em minus .15em
    +
    +% Like plain.tex's \dotfill, except uses up at least 1 em.
    +% The filll stretch here overpowers both the fil and fill stretch to push
    +% the page number to the right.
    +\def\indexdotfill{\cleaders
    +  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
    +
    +
    +\def\primary #1{\line{#1\hfil}}
    +
    +\def\secondary{\indententry{0.5cm}}
    +\def\tertiary{\indententry{1cm}}
    +
    +\def\indententry#1#2#3{%
    +  \bgroup
    +  \leftskip=#1
    +  \entry{#2}{#3}%
    +  \egroup
    +}
    +
    +% Define two-column mode, which we use to typeset indexes.
    +% Adapted from the TeXbook, page 416, which is to say,
    +% the manmac.tex format used to print the TeXbook itself.
    +\catcode`\@=11  % private names
    +
    +\newbox\partialpage
    +\newdimen\doublecolumnhsize
    +
    +\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
    +  % If not much space left on page, start a new page.
    +  \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
    +  %
    +  % Grab any single-column material above us.
    +  \output = {%
    +    \savetopmark
    +    %
    +    \global\setbox\partialpage = \vbox{%
    +      % Unvbox the main output page.
    +      \unvbox\PAGE
    +      \kern-\topskip \kern\baselineskip
    +    }%
    +  }%
    +  \eject % run that output routine to set \partialpage
    +  %
    +  % Use the double-column output routine for subsequent pages.
    +  \output = {\doublecolumnout}%
    +  %
    +  % Change the page size parameters.  We could do this once outside this
    +  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
    +  % format, but then we repeat the same computation.  Repeating a couple
    +  % of assignments once per index is clearly meaningless for the
    +  % execution time, so we may as well do it in one place.
    +  %
    +  % First we halve the line length, less a little for the gutter between
    +  % the columns.  We compute the gutter based on the line length, so it
    +  % changes automatically with the paper format.  The magic constant
    +  % below is chosen so that the gutter has the same value (well, +-<1pt)
    +  % as it did when we hard-coded it.
    +  %
    +  % We put the result in a separate register, \doublecolumhsize, so we
    +  % can restore it in \pagesofar, after \hsize itself has (potentially)
    +  % been clobbered.
    +  %
    +  \doublecolumnhsize = \hsize
    +    \advance\doublecolumnhsize by -.04154\hsize
    +    \divide\doublecolumnhsize by 2
    +  \hsize = \doublecolumnhsize
    +  %
    +  % Get the available space for the double columns -- the normal
    +  % (undoubled) page height minus any material left over from the
    +  % previous page.
    +  \advance\vsize by -\ht\partialpage
    +  \vsize = 2\vsize
    +  %
    +  % For the benefit of balancing columns
    +  \advance\baselineskip by 0pt plus 0.5pt
    +}
    +
    +% The double-column output routine for all double-column pages except
    +% the last, which is done by \balancecolumns.
    +%
    +\def\doublecolumnout{%
    +  %
    +  \savetopmark
    +  \splittopskip=\topskip \splitmaxdepth=\maxdepth
    +  \dimen@ = \vsize
    +  \divide\dimen@ by 2
    +  %
    +  % box0 will be the left-hand column, box2 the right.
    +  \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
    +  \global\advance\vsize by 2\ht\partialpage
    +  \onepageout\pagesofar % empty except for the first time we are called
    +  \unvbox\PAGE
    +  \penalty\outputpenalty
    +}
    +%
    +% Re-output the contents of the output page -- any previous material,
    +% followed by the two boxes we just split, in box0 and box2.
    +\def\pagesofar{%
    +  \unvbox\partialpage
    +  %
    +  \hsize = \doublecolumnhsize
    +  \wd0=\hsize \wd2=\hsize
    +  \hbox to\txipagewidth{\box0\hfil\box2}%
    +}
    +
    +
    +% Finished with double columns.
    +\def\enddoublecolumns{%
    +  % The following penalty ensures that the page builder is exercised
    +  % _before_ we change the output routine.  This is necessary in the
    +  % following situation:
    +  %
    +  % The last section of the index consists only of a single entry.
    +  % Before this section, \pagetotal is less than \pagegoal, so no
    +  % break occurs before the last section starts.  However, the last
    +  % section, consisting of \initial and the single \entry, does not
    +  % fit on the page and has to be broken off.  Without the following
    +  % penalty the page builder will not be exercised until \eject
    +  % below, and by that time we'll already have changed the output
    +  % routine to the \balancecolumns version, so the next-to-last
    +  % double-column page will be processed with \balancecolumns, which
    +  % is wrong:  The two columns will go to the main vertical list, with
    +  % the broken-off section in the recent contributions.  As soon as
    +  % the output routine finishes, TeX starts reconsidering the page
    +  % break.  The two columns and the broken-off section both fit on the
    +  % page, because the two columns now take up only half of the page
    +  % goal.  When TeX sees \eject from below which follows the final
    +  % section, it invokes the new output routine that we've set after
    +  % \balancecolumns below; \onepageout will try to fit the two columns
    +  % and the final section into the vbox of \txipageheight (see
    +  % \pagebody), causing an overfull box.
    +  %
    +  % Note that glue won't work here, because glue does not exercise the
    +  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
    +  \penalty0
    +  %
    +  \output = {%
    +    % Split the last of the double-column material.
    +    \savetopmark
    +    \balancecolumns
    +  }%
    +  \eject % call the \output just set
    +  \ifdim\pagetotal=0pt
    +    % Having called \balancecolumns once, we do not
    +    % want to call it again.  Therefore, reset \output to its normal
    +    % definition right away.
    +    \global\output=\expandafter{\the\defaultoutput}
    +    %
    +    \endgroup % started in \begindoublecolumns
    +    % Leave the double-column material on the current page, no automatic
    +    % page break.
    +    \box\balancedcolumns
    +    %
    +    % \pagegoal was set to the doubled \vsize above, since we restarted
    +    % the current page.  We're now back to normal single-column
    +    % typesetting, so reset \pagegoal to the normal \vsize.
    +    \global\vsize = \txipageheight %
    +    \pagegoal = \txipageheight %
    +  \else
    +    % We had some left-over material.  This might happen when \doublecolumnout
    +    % is called in \balancecolumns.  Try again.
    +    \expandafter\enddoublecolumns
    +  \fi
    +}
    +\newbox\balancedcolumns
    +\setbox\balancedcolumns=\vbox{shouldnt see this}%
    +%
    +% Only called for the last of the double column material.  \doublecolumnout
    +% does the others.
    +\def\balancecolumns{%
    +  \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
    +  \dimen@ = \ht0
    +  \ifdim\dimen@<7\baselineskip
    +    % Don't split a short final column in two.
    +    \setbox2=\vbox{}%
    +    \global\setbox\balancedcolumns=\vbox{\pagesofar}%
    +  \else
    +    % double the leading vertical space
    +    \advance\dimen@ by \topskip
    +    \advance\dimen@ by-\baselineskip
    +    \divide\dimen@ by 2 % target to split to
    +    \dimen@ii = \dimen@
    +    \splittopskip = \topskip
    +    % Loop until left column is at least as high as the right column.
    +    {%
    +      \vbadness = 10000
    +      \loop
    +        \global\setbox3 = \copy0
    +        \global\setbox1 = \vsplit3 to \dimen@
    +      \ifdim\ht1<\ht3
    +        \global\advance\dimen@ by 1pt
    +      \repeat
    +    }%
    +    % Now the left column is in box 1, and the right column in box 3.
    +    %
    +    % Check whether the left column has come out higher than the page itself.
    +    % (Note that we have doubled \vsize for the double columns, so
    +    % the actual height of the page is 0.5\vsize).
    +    \ifdim2\ht1>\vsize
    +      % It appears that we have been called upon to balance too much material.
    +      % Output some of it with \doublecolumnout, leaving the rest on the page.
    +      \setbox\PAGE=\box0
    +      \doublecolumnout
    +    \else
    +      % Compare the heights of the two columns.
    +      \ifdim4\ht1>5\ht3
    +        % Column heights are too different, so don't make their bottoms
    +        % flush with each other.
    +        \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
    +        \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
    +      \else
    +        % Make column bottoms flush with each other.
    +        \setbox2=\vbox to\ht1{\unvbox3\unskip}%
    +        \setbox0=\vbox to\ht1{\unvbox1\unskip}%
    +      \fi
    +      \global\setbox\balancedcolumns=\vbox{\pagesofar}%
    +    \fi
    +  \fi
    +  %
    +}
    +\catcode`\@ = \other
    +
    +
    +\message{sectioning,}
    +% Chapters, sections, etc.
    +
    +% Let's start with @part.
    +\outer\parseargdef\part{\partzzz{#1}}
    +\def\partzzz#1{%
    +  \chapoddpage
    +  \null
    +  \vskip.3\vsize  % move it down on the page a bit
    +  \begingroup
    +    \noindent \titlefonts\rm #1\par % the text
    +    \let\lastnode=\empty      % no node to associate with
    +    \writetocentry{part}{#1}{}% but put it in the toc
    +    \headingsoff              % no headline or footline on the part page
    +    % This outputs a mark at the end of the page that clears \thischapter
    +    % and \thissection, as is done in \startcontents.
    +    \let\pchapsepmacro\relax
    +    \chapmacro{}{Yomitfromtoc}{}%
    +    \chapoddpage
    +  \endgroup
    +}
    +
    +% \unnumberedno is an oxymoron.  But we count the unnumbered
    +% sections so that we can refer to them unambiguously in the pdf
    +% outlines by their "section number".  We avoid collisions with chapter
    +% numbers by starting them at 10000.  (If a document ever has 10000
    +% chapters, we're in trouble anyway, I'm sure.)
    +\newcount\unnumberedno \unnumberedno = 10000
    +\newcount\chapno
    +\newcount\secno        \secno=0
    +\newcount\subsecno     \subsecno=0
    +\newcount\subsubsecno  \subsubsecno=0
    +
    +% This counter is funny since it counts through charcodes of letters A, B, ...
    +\newcount\appendixno  \appendixno = `\@
    +%
    +% \def\appendixletter{\char\the\appendixno}
    +% We do the following ugly conditional instead of the above simple
    +% construct for the sake of pdftex, which needs the actual
    +% letter in the expansion, not just typeset.
    +%
    +\def\appendixletter{%
    +  \ifnum\appendixno=`A A%
    +  \else\ifnum\appendixno=`B B%
    +  \else\ifnum\appendixno=`C C%
    +  \else\ifnum\appendixno=`D D%
    +  \else\ifnum\appendixno=`E E%
    +  \else\ifnum\appendixno=`F F%
    +  \else\ifnum\appendixno=`G G%
    +  \else\ifnum\appendixno=`H H%
    +  \else\ifnum\appendixno=`I I%
    +  \else\ifnum\appendixno=`J J%
    +  \else\ifnum\appendixno=`K K%
    +  \else\ifnum\appendixno=`L L%
    +  \else\ifnum\appendixno=`M M%
    +  \else\ifnum\appendixno=`N N%
    +  \else\ifnum\appendixno=`O O%
    +  \else\ifnum\appendixno=`P P%
    +  \else\ifnum\appendixno=`Q Q%
    +  \else\ifnum\appendixno=`R R%
    +  \else\ifnum\appendixno=`S S%
    +  \else\ifnum\appendixno=`T T%
    +  \else\ifnum\appendixno=`U U%
    +  \else\ifnum\appendixno=`V V%
    +  \else\ifnum\appendixno=`W W%
    +  \else\ifnum\appendixno=`X X%
    +  \else\ifnum\appendixno=`Y Y%
    +  \else\ifnum\appendixno=`Z Z%
    +  % The \the is necessary, despite appearances, because \appendixletter is
    +  % expanded while writing the .toc file.  \char\appendixno is not
    +  % expandable, thus it is written literally, thus all appendixes come out
    +  % with the same letter (or @) in the toc without it.
    +  \else\char\the\appendixno
    +  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    +  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
    +
    +% Each @chapter defines these (using marks) as the number+name, number
    +% and name of the chapter.  Page headings and footings can use
    +% these.  @section does likewise.
    +\def\thischapter{}
    +\def\thischapternum{}
    +\def\thischaptername{}
    +\def\thissection{}
    +\def\thissectionnum{}
    +\def\thissectionname{}
    +
    +\newcount\absseclevel % used to calculate proper heading level
    +\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
    +
    +% @raisesections: treat @section as chapter, @subsection as section, etc.
    +\def\raisesections{\global\advance\secbase by -1}
    +
    +% @lowersections: treat @chapter as section, @section as subsection, etc.
    +\def\lowersections{\global\advance\secbase by 1}
    +
    +% we only have subsub.
    +\chardef\maxseclevel = 3
    +%
    +% A numbered section within an unnumbered changes to unnumbered too.
    +% To achieve this, remember the "biggest" unnum. sec. we are currently in:
    +\chardef\unnlevel = \maxseclevel
    +%
    +% Trace whether the current chapter is an appendix or not:
    +% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
    +\def\chapheadtype{N}
    +
    +% Choose a heading macro
    +% #1 is heading type
    +% #2 is heading level
    +% #3 is text for heading
    +\def\genhead#1#2#3{%
    +  % Compute the abs. sec. level:
    +  \absseclevel=#2
    +  \advance\absseclevel by \secbase
    +  % Make sure \absseclevel doesn't fall outside the range:
    +  \ifnum \absseclevel < 0
    +    \absseclevel = 0
    +  \else
    +    \ifnum \absseclevel > 3
    +      \absseclevel = 3
    +    \fi
    +  \fi
    +  % The heading type:
    +  \def\headtype{#1}%
    +  \if \headtype U%
    +    \ifnum \absseclevel < \unnlevel
    +      \chardef\unnlevel = \absseclevel
    +    \fi
    +  \else
    +    % Check for appendix sections:
    +    \ifnum \absseclevel = 0
    +      \edef\chapheadtype{\headtype}%
    +    \else
    +      \if \headtype A\if \chapheadtype N%
    +	\errmessage{@appendix... within a non-appendix chapter}%
    +      \fi\fi
    +    \fi
    +    % Check for numbered within unnumbered:
    +    \ifnum \absseclevel > \unnlevel
    +      \def\headtype{U}%
    +    \else
    +      \chardef\unnlevel = 3
    +    \fi
    +  \fi
    +  % Now print the heading:
    +  \if \headtype U%
    +    \ifcase\absseclevel
    +	\unnumberedzzz{#3}%
    +    \or \unnumberedseczzz{#3}%
    +    \or \unnumberedsubseczzz{#3}%
    +    \or \unnumberedsubsubseczzz{#3}%
    +    \fi
    +  \else
    +    \if \headtype A%
    +      \ifcase\absseclevel
    +	  \appendixzzz{#3}%
    +      \or \appendixsectionzzz{#3}%
    +      \or \appendixsubseczzz{#3}%
    +      \or \appendixsubsubseczzz{#3}%
    +      \fi
    +    \else
    +      \ifcase\absseclevel
    +	  \chapterzzz{#3}%
    +      \or \seczzz{#3}%
    +      \or \numberedsubseczzz{#3}%
    +      \or \numberedsubsubseczzz{#3}%
    +      \fi
    +    \fi
    +  \fi
    +  \suppressfirstparagraphindent
    +}
    +
    +% an interface:
    +\def\numhead{\genhead N}
    +\def\apphead{\genhead A}
    +\def\unnmhead{\genhead U}
    +
    +% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
    +% all lower-level sectioning counters to zero.
    +%
    +% Also set \chaplevelprefix, which we prepend to @float sequence numbers
    +% (e.g., figures), q.v.  By default (before any chapter), that is empty.
    +\let\chaplevelprefix = \empty
    +%
    +\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
    +\def\chapterzzz#1{%
    +  % section resetting is \global in case the chapter is in a group, such
    +  % as an @include file.
    +  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    +    \global\advance\chapno by 1
    +  %
    +  % Used for \float.
    +  \gdef\chaplevelprefix{\the\chapno.}%
    +  \resetallfloatnos
    +  %
    +  % \putwordChapter can contain complex things in translations.
    +  \toks0=\expandafter{\putwordChapter}%
    +  \message{\the\toks0 \space \the\chapno}%
    +  %
    +  % Write the actual heading.
    +  \chapmacro{#1}{Ynumbered}{\the\chapno}%
    +  %
    +  % So @section and the like are numbered underneath this chapter.
    +  \global\let\section = \numberedsec
    +  \global\let\subsection = \numberedsubsec
    +  \global\let\subsubsection = \numberedsubsubsec
    +}
    +
    +\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
    +%
    +\def\appendixzzz#1{%
    +  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    +    \global\advance\appendixno by 1
    +  \gdef\chaplevelprefix{\appendixletter.}%
    +  \resetallfloatnos
    +  %
    +  % \putwordAppendix can contain complex things in translations.
    +  \toks0=\expandafter{\putwordAppendix}%
    +  \message{\the\toks0 \space \appendixletter}%
    +  %
    +  \chapmacro{#1}{Yappendix}{\appendixletter}%
    +  %
    +  \global\let\section = \appendixsec
    +  \global\let\subsection = \appendixsubsec
    +  \global\let\subsubsection = \appendixsubsubsec
    +}
    +
    +% normally unnmhead0 calls unnumberedzzz:
    +\outer\parseargdef\unnumbered{\unnmhead0{#1}}
    +\def\unnumberedzzz#1{%
    +  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    +    \global\advance\unnumberedno by 1
    +  %
    +  % Since an unnumbered has no number, no prefix for figures.
    +  \global\let\chaplevelprefix = \empty
    +  \resetallfloatnos
    +  %
    +  % This used to be simply \message{#1}, but TeX fully expands the
    +  % argument to \message.  Therefore, if #1 contained @-commands, TeX
    +  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
    +  % expanded @cite (which turns out to cause errors because \cite is meant
    +  % to be executed, not expanded).
    +  %
    +  % Anyway, we don't want the fully-expanded definition of @cite to appear
    +  % as a result of the \message, we just want `@cite' itself.  We use
    +  % \the to achieve this: TeX expands \the only once,
    +  % simply yielding the contents of .  (We also do this for
    +  % the toc entries.)
    +  \toks0 = {#1}%
    +  \message{(\the\toks0)}%
    +  %
    +  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
    +  %
    +  \global\let\section = \unnumberedsec
    +  \global\let\subsection = \unnumberedsubsec
    +  \global\let\subsubsection = \unnumberedsubsubsec
    +}
    +
    +% @centerchap is like @unnumbered, but the heading is centered.
    +\outer\parseargdef\centerchap{%
    +  \let\centerparametersmaybe = \centerparameters
    +  \unnmhead0{#1}%
    +  \let\centerparametersmaybe = \relax
    +}
    +
    +% @top is like @unnumbered.
    +\let\top\unnumbered
    +
    +% Sections.
    +%
    +\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
    +\def\seczzz#1{%
    +  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
    +  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
    +}
    +
    +% normally calls appendixsectionzzz:
    +\outer\parseargdef\appendixsection{\apphead1{#1}}
    +\def\appendixsectionzzz#1{%
    +  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
    +  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
    +}
    +\let\appendixsec\appendixsection
    +
    +% normally calls unnumberedseczzz:
    +\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
    +\def\unnumberedseczzz#1{%
    +  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
    +  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
    +}
    +
    +% Subsections.
    +%
    +% normally calls numberedsubseczzz:
    +\outer\parseargdef\numberedsubsec{\numhead2{#1}}
    +\def\numberedsubseczzz#1{%
    +  \global\subsubsecno=0  \global\advance\subsecno by 1
    +  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
    +}
    +
    +% normally calls appendixsubseczzz:
    +\outer\parseargdef\appendixsubsec{\apphead2{#1}}
    +\def\appendixsubseczzz#1{%
    +  \global\subsubsecno=0  \global\advance\subsecno by 1
    +  \sectionheading{#1}{subsec}{Yappendix}%
    +                 {\appendixletter.\the\secno.\the\subsecno}%
    +}
    +
    +% normally calls unnumberedsubseczzz:
    +\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
    +\def\unnumberedsubseczzz#1{%
    +  \global\subsubsecno=0  \global\advance\subsecno by 1
    +  \sectionheading{#1}{subsec}{Ynothing}%
    +                 {\the\unnumberedno.\the\secno.\the\subsecno}%
    +}
    +
    +% Subsubsections.
    +%
    +% normally numberedsubsubseczzz:
    +\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
    +\def\numberedsubsubseczzz#1{%
    +  \global\advance\subsubsecno by 1
    +  \sectionheading{#1}{subsubsec}{Ynumbered}%
    +                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
    +}
    +
    +% normally appendixsubsubseczzz:
    +\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
    +\def\appendixsubsubseczzz#1{%
    +  \global\advance\subsubsecno by 1
    +  \sectionheading{#1}{subsubsec}{Yappendix}%
    +                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
    +}
    +
    +% normally unnumberedsubsubseczzz:
    +\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
    +\def\unnumberedsubsubseczzz#1{%
    +  \global\advance\subsubsecno by 1
    +  \sectionheading{#1}{subsubsec}{Ynothing}%
    +                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
    +}
    +
    +% These macros control what the section commands do, according
    +% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
    +% Define them by default for a numbered chapter.
    +\let\section = \numberedsec
    +\let\subsection = \numberedsubsec
    +\let\subsubsection = \numberedsubsubsec
    +
    +% Define @majorheading, @heading and @subheading
    +
    +\def\majorheading{%
    +  {\advance\chapheadingskip by 10pt \chapbreak }%
    +  \parsearg\chapheadingzzz
    +}
    +
    +\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
    +\def\chapheadingzzz#1{%
    +  \vbox{\chapfonts \raggedtitlesettings #1\par}%
    +  \nobreak\bigskip \nobreak
    +  \suppressfirstparagraphindent
    +}
    +
    +% @heading, @subheading, @subsubheading.
    +\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
    +  \suppressfirstparagraphindent}
    +\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
    +  \suppressfirstparagraphindent}
    +\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
    +  \suppressfirstparagraphindent}
    +
    +% These macros generate a chapter, section, etc. heading only
    +% (including whitespace, linebreaking, etc. around it),
    +% given all the information in convenient, parsed form.
    +
    +% Args are the skip and penalty (usually negative)
    +\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
    +
    +% Parameter controlling skip before chapter headings (if needed)
    +\newskip\chapheadingskip
    +
    +% Define plain chapter starts, and page on/off switching for it.
    +\def\chapbreak{\dobreak \chapheadingskip {-4000}}
    +
    +% Start a new page
    +\def\chappager{\par\vfill\supereject}
    +
    +% \chapoddpage - start on an odd page for a new chapter
    +% Because \domark is called before \chapoddpage, the filler page will
    +% get the headings for the next chapter, which is wrong.  But we don't
    +% care -- we just disable all headings on the filler page.
    +\def\chapoddpage{%
    +  \chappager
    +  \ifodd\pageno \else
    +    \begingroup
    +      \headingsoff
    +      \null
    +      \chappager
    +    \endgroup
    +  \fi
    +}
    +
    +\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
    +
    +\def\CHAPPAGoff{%
    +\global\let\contentsalignmacro = \chappager
    +\global\let\pchapsepmacro=\chapbreak
    +\global\let\pagealignmacro=\chappager}
    +
    +\def\CHAPPAGon{%
    +\global\let\contentsalignmacro = \chappager
    +\global\let\pchapsepmacro=\chappager
    +\global\let\pagealignmacro=\chappager
    +\global\def\HEADINGSon{\HEADINGSsingle}}
    +
    +\def\CHAPPAGodd{%
    +\global\let\contentsalignmacro = \chapoddpage
    +\global\let\pchapsepmacro=\chapoddpage
    +\global\let\pagealignmacro=\chapoddpage
    +\global\def\HEADINGSon{\HEADINGSdouble}}
    +
    +\CHAPPAGon
    +
    +% \chapmacro - Chapter opening.
    +%
    +% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
    +% Yappendix, Yomitfromtoc), #3 the chapter number.
    +% Not used for @heading series.
    +%
    +% To test against our argument.
    +\def\Ynothingkeyword{Ynothing}
    +\def\Yappendixkeyword{Yappendix}
    +\def\Yomitfromtockeyword{Yomitfromtoc}
    +%
    +\def\chapmacro#1#2#3{%
    +  \expandafter\ifx\thisenv\titlepage\else
    +    \checkenv{}% chapters, etc., should not start inside an environment.
    +  \fi
    +  % Insert the first mark before the heading break (see notes for \domark).
    +  \let\prevchapterdefs=\currentchapterdefs
    +  \let\prevsectiondefs=\currentsectiondefs
    +  \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
    +                        \gdef\thissection{}}%
    +  %
    +  \def\temptype{#2}%
    +  \ifx\temptype\Ynothingkeyword
    +    \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
    +                          \gdef\thischapter{\thischaptername}}%
    +  \else\ifx\temptype\Yomitfromtockeyword
    +    \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
    +                          \gdef\thischapter{}}%
    +  \else\ifx\temptype\Yappendixkeyword
    +    \toks0={#1}%
    +    \xdef\currentchapterdefs{%
    +      \gdef\noexpand\thischaptername{\the\toks0}%
    +      \gdef\noexpand\thischapternum{\appendixletter}%
    +      % \noexpand\putwordAppendix avoids expanding indigestible
    +      % commands in some of the translations.
    +      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
    +                                 \noexpand\thischapternum:
    +                                 \noexpand\thischaptername}%
    +    }%
    +  \else
    +    \toks0={#1}%
    +    \xdef\currentchapterdefs{%
    +      \gdef\noexpand\thischaptername{\the\toks0}%
    +      \gdef\noexpand\thischapternum{\the\chapno}%
    +      % \noexpand\putwordChapter avoids expanding indigestible
    +      % commands in some of the translations.
    +      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
    +                                 \noexpand\thischapternum:
    +                                 \noexpand\thischaptername}%
    +    }%
    +  \fi\fi\fi
    +  %
    +  % Output the mark.  Pass it through \safewhatsit, to take care of
    +  % the preceding space.
    +  \safewhatsit\domark
    +  %
    +  % Insert the chapter heading break.
    +  \pchapsepmacro
    +  %
    +  % Now the second mark, after the heading break.  No break points
    +  % between here and the heading.
    +  \let\prevchapterdefs=\currentchapterdefs
    +  \let\prevsectiondefs=\currentsectiondefs
    +  \domark
    +  %
    +  {%
    +    \chapfonts \rm
    +    \let\footnote=\errfootnoteheading % give better error message
    +    %
    +    % Have to define \currentsection before calling \donoderef, because the
    +    % xref code eventually uses it.  On the other hand, it has to be called
    +    % after \pchapsepmacro, or the headline will change too soon.
    +    \gdef\currentsection{#1}%
    +    %
    +    % Only insert the separating space if we have a chapter/appendix
    +    % number, and don't print the unnumbered ``number''.
    +    \ifx\temptype\Ynothingkeyword
    +      \setbox0 = \hbox{}%
    +      \def\toctype{unnchap}%
    +    \else\ifx\temptype\Yomitfromtockeyword
    +      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
    +      \def\toctype{omit}%
    +    \else\ifx\temptype\Yappendixkeyword
    +      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
    +      \def\toctype{app}%
    +    \else
    +      \setbox0 = \hbox{#3\enspace}%
    +      \def\toctype{numchap}%
    +    \fi\fi\fi
    +    %
    +    % Write the toc entry for this chapter.  Must come before the
    +    % \donoderef, because we include the current node name in the toc
    +    % entry, and \donoderef resets it to empty.
    +    \writetocentry{\toctype}{#1}{#3}%
    +    %
    +    % For pdftex, we have to write out the node definition (aka, make
    +    % the pdfdest) after any page break, but before the actual text has
    +    % been typeset.  If the destination for the pdf outline is after the
    +    % text, then jumping from the outline may wind up with the text not
    +    % being visible, for instance under high magnification.
    +    \donoderef{#2}%
    +    %
    +    % Typeset the actual heading.
    +    \nobreak % Avoid page breaks at the interline glue.
    +    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
    +          \unhbox0 #1\par}%
    +  }%
    +  \nobreak\bigskip % no page break after a chapter title
    +  \nobreak
    +}
    +
    +% @centerchap -- centered and unnumbered.
    +\let\centerparametersmaybe = \relax
    +\def\centerparameters{%
    +  \advance\rightskip by 3\rightskip
    +  \leftskip = \rightskip
    +  \parfillskip = 0pt
    +}
    +
    +
    +% Section titles.  These macros combine the section number parts and
    +% call the generic \sectionheading to do the printing.
    +%
    +\newskip\secheadingskip
    +\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
    +
    +% Subsection titles.
    +\newskip\subsecheadingskip
    +\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
    +
    +% Subsubsection titles.
    +\def\subsubsecheadingskip{\subsecheadingskip}
    +\def\subsubsecheadingbreak{\subsecheadingbreak}
    +
    +
    +% Print any size, any type, section title.
    +%
    +% #1 is the text of the title,
    +% #2 is the section level (sec/subsec/subsubsec),
    +% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
    +% #4 is the section number.
    +%
    +\def\seckeyword{sec}
    +%
    +\def\sectionheading#1#2#3#4{%
    +  {%
    +    \def\sectionlevel{#2}%
    +    \def\temptype{#3}%
    +    %
    +    % It is ok for the @heading series commands to appear inside an
    +    % environment (it's been historically allowed, though the logic is
    +    % dubious), but not the others.
    +    \ifx\temptype\Yomitfromtockeyword\else
    +      \checkenv{}% non-@*heading should not be in an environment.
    +    \fi
    +    \let\footnote=\errfootnoteheading
    +    %
    +    % Switch to the right set of fonts.
    +    \csname #2fonts\endcsname \rm
    +    %
    +    % Insert first mark before the heading break (see notes for \domark).
    +    \let\prevsectiondefs=\currentsectiondefs
    +    \ifx\temptype\Ynothingkeyword
    +      \ifx\sectionlevel\seckeyword
    +        \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
    +                              \gdef\thissection{\thissectionname}}%
    +      \fi
    +    \else\ifx\temptype\Yomitfromtockeyword
    +      % Don't redefine \thissection.
    +    \else\ifx\temptype\Yappendixkeyword
    +      \ifx\sectionlevel\seckeyword
    +        \toks0={#1}%
    +        \xdef\currentsectiondefs{%
    +          \gdef\noexpand\thissectionname{\the\toks0}%
    +          \gdef\noexpand\thissectionnum{#4}%
    +          % \noexpand\putwordSection avoids expanding indigestible
    +          % commands in some of the translations.
    +          \gdef\noexpand\thissection{\noexpand\putwordSection{}
    +                                     \noexpand\thissectionnum:
    +                                     \noexpand\thissectionname}%
    +        }%
    +      \fi
    +    \else
    +      \ifx\sectionlevel\seckeyword
    +        \toks0={#1}%
    +        \xdef\currentsectiondefs{%
    +          \gdef\noexpand\thissectionname{\the\toks0}%
    +          \gdef\noexpand\thissectionnum{#4}%
    +          % \noexpand\putwordSection avoids expanding indigestible
    +          % commands in some of the translations.
    +          \gdef\noexpand\thissection{\noexpand\putwordSection{}
    +                                     \noexpand\thissectionnum:
    +                                     \noexpand\thissectionname}%
    +        }%
    +      \fi
    +    \fi\fi\fi
    +    %
    +    % Go into vertical mode.  Usually we'll already be there, but we
    +    % don't want the following whatsit to end up in a preceding paragraph
    +    % if the document didn't happen to have a blank line.
    +    \par
    +    %
    +    % Output the mark.  Pass it through \safewhatsit, to take care of
    +    % the preceding space.
    +    \safewhatsit\domark
    +    %
    +    % Insert space above the heading.
    +    \csname #2headingbreak\endcsname
    +    %
    +    % Now the second mark, after the heading break.  No break points
    +    % between here and the heading.
    +    \global\let\prevsectiondefs=\currentsectiondefs
    +    \domark
    +    %
    +    % Only insert the space after the number if we have a section number.
    +    \ifx\temptype\Ynothingkeyword
    +      \setbox0 = \hbox{}%
    +      \def\toctype{unn}%
    +      \gdef\currentsection{#1}%
    +    \else\ifx\temptype\Yomitfromtockeyword
    +      % for @headings -- no section number, don't include in toc,
    +      % and don't redefine \currentsection.
    +      \setbox0 = \hbox{}%
    +      \def\toctype{omit}%
    +      \let\sectionlevel=\empty
    +    \else\ifx\temptype\Yappendixkeyword
    +      \setbox0 = \hbox{#4\enspace}%
    +      \def\toctype{app}%
    +      \gdef\currentsection{#1}%
    +    \else
    +      \setbox0 = \hbox{#4\enspace}%
    +      \def\toctype{num}%
    +      \gdef\currentsection{#1}%
    +    \fi\fi\fi
    +    %
    +    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
    +    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
    +    %
    +    % Write the node reference (= pdf destination for pdftex).
    +    % Again, see comments in \chapmacro.
    +    \donoderef{#3}%
    +    %
    +    % Interline glue will be inserted when the vbox is completed.
    +    % That glue will be a valid breakpoint for the page, since it'll be
    +    % preceded by a whatsit (usually from the \donoderef, or from the
    +    % \writetocentry if there was no node).  We don't want to allow that
    +    % break, since then the whatsits could end up on page n while the
    +    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
    +    \nobreak
    +    %
    +    % Output the actual section heading.
    +    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
    +          \hangindent=\wd0  % zero if no section number
    +          \unhbox0 #1}%
    +  }%
    +  % Add extra space after the heading -- half of whatever came above it.
    +  % Don't allow stretch, though.
    +  \kern .5 \csname #2headingskip\endcsname
    +  %
    +  % Do not let the kern be a potential breakpoint, as it would be if it
    +  % was followed by glue.
    +  \nobreak
    +  %
    +  % We'll almost certainly start a paragraph next, so don't let that
    +  % glue accumulate.  (Not a breakpoint because it's preceded by a
    +  % discardable item.)  However, when a paragraph is not started next
    +  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
    +  % or the negative glue will cause weirdly wrong output, typically
    +  % obscuring the section heading with something else.
    +  \vskip-\parskip
    +  %
    +  % This is so the last item on the main vertical list is a known
    +  % \penalty > 10000, so \startdefun, etc., can recognize the situation
    +  % and do the needful.
    +  \penalty 10001
    +}
    +
    +
    +\message{toc,}
    +% Table of contents.
    +\newwrite\tocfile
    +
    +% Write an entry to the toc file, opening it if necessary.
    +% Called from @chapter, etc.
    +%
    +% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
    +% We append the current node name (if any) and page number as additional
    +% arguments for the \{chap,sec,...}entry macros which will eventually
    +% read this.  The node name is used in the pdf outlines as the
    +% destination to jump to.
    +%
    +% We open the .toc file for writing here instead of at @setfilename (or
    +% any other fixed time) so that @contents can be anywhere in the document.
    +% But if #1 is `omit', then we don't do anything.  This is used for the
    +% table of contents chapter openings themselves.
    +%
    +\newif\iftocfileopened
    +\def\omitkeyword{omit}%
    +%
    +\def\writetocentry#1#2#3{%
    +  \edef\writetoctype{#1}%
    +  \ifx\writetoctype\omitkeyword \else
    +    \iftocfileopened\else
    +      \immediate\openout\tocfile = \jobname.toc
    +      \global\tocfileopenedtrue
    +    \fi
    +    %
    +    \iflinks
    +      {\atdummies
    +       \edef\temp{%
    +         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
    +       \temp
    +      }%
    +    \fi
    +  \fi
    +  %
    +  % Tell \shipout to create a pdf destination on each page, if we're
    +  % writing pdf.  These are used in the table of contents.  We can't
    +  % just write one on every page because the title pages are numbered
    +  % 1 and 2 (the page numbers aren't printed), and so are the first
    +  % two pages of the document.  Thus, we'd have two destinations named
    +  % `1', and two named `2'.
    +  \ifpdforxetex
    +    \global\pdfmakepagedesttrue
    +  \fi
    +}
    +
    +
    +% These characters do not print properly in the Computer Modern roman
    +% fonts, so we must take special care.  This is more or less redundant
    +% with the Texinfo input format setup at the end of this file.
    +%
    +\def\activecatcodes{%
    +  \catcode`\"=\active
    +  \catcode`\$=\active
    +  \catcode`\<=\active
    +  \catcode`\>=\active
    +  \catcode`\\=\active
    +  \catcode`\^=\active
    +  \catcode`\_=\active
    +  \catcode`\|=\active
    +  \catcode`\~=\active
    +}
    +
    +
    +% Read the toc file, which is essentially Texinfo input.
    +\def\readtocfile{%
    +  \setupdatafile
    +  \activecatcodes
    +  \input \tocreadfilename
    +}
    +
    +\newskip\contentsrightmargin \contentsrightmargin=1in
    +\newcount\savepageno
    +\newcount\lastnegativepageno \lastnegativepageno = -1
    +
    +% Prepare to read what we've written to \tocfile.
    +%
    +\def\startcontents#1{%
    +  % If @setchapternewpage on, and @headings double, the contents should
    +  % start on an odd page, unlike chapters.  Thus, we maintain
    +  % \contentsalignmacro in parallel with \pagealignmacro.
    +  % From: Torbjorn Granlund 
    +  \contentsalignmacro
    +  \immediate\closeout\tocfile
    +  %
    +  % Don't need to put `Contents' or `Short Contents' in the headline.
    +  % It is abundantly clear what they are.
    +  \chapmacro{#1}{Yomitfromtoc}{}%
    +  %
    +  \savepageno = \pageno
    +  \begingroup                  % Set up to handle contents files properly.
    +    \raggedbottom              % Worry more about breakpoints than the bottom.
    +    \entryrightmargin=\contentsrightmargin % Don't use the full line length.
    +    %
    +    % Roman numerals for page numbers.
    +    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
    +}
    +
    +% redefined for the two-volume lispref.  We always output on
    +% \jobname.toc even if this is redefined.
    +%
    +\def\tocreadfilename{\jobname.toc}
    +
    +% Normal (long) toc.
    +%
    +\def\contents{%
    +  \startcontents{\putwordTOC}%
    +    \openin 1 \tocreadfilename\space
    +    \ifeof 1 \else
    +      \readtocfile
    +    \fi
    +    \vfill \eject
    +    \contentsalignmacro % in case @setchapternewpage odd is in effect
    +    \ifeof 1 \else
    +      \pdfmakeoutlines
    +    \fi
    +    \closein 1
    +  \endgroup
    +  \lastnegativepageno = \pageno
    +  \global\pageno = \savepageno
    +}
    +
    +% And just the chapters.
    +\def\summarycontents{%
    +  \startcontents{\putwordShortTOC}%
    +    %
    +    \let\partentry = \shortpartentry
    +    \let\numchapentry = \shortchapentry
    +    \let\appentry = \shortchapentry
    +    \let\unnchapentry = \shortunnchapentry
    +    % We want a true roman here for the page numbers.
    +    \secfonts
    +    \let\rm=\shortcontrm \let\bf=\shortcontbf
    +    \let\sl=\shortcontsl \let\tt=\shortconttt
    +    \rm
    +    \hyphenpenalty = 10000
    +    \advance\baselineskip by 1pt % Open it up a little.
    +    \def\numsecentry##1##2##3##4{}
    +    \let\appsecentry = \numsecentry
    +    \let\unnsecentry = \numsecentry
    +    \let\numsubsecentry = \numsecentry
    +    \let\appsubsecentry = \numsecentry
    +    \let\unnsubsecentry = \numsecentry
    +    \let\numsubsubsecentry = \numsecentry
    +    \let\appsubsubsecentry = \numsecentry
    +    \let\unnsubsubsecentry = \numsecentry
    +    \openin 1 \tocreadfilename\space
    +    \ifeof 1 \else
    +      \readtocfile
    +    \fi
    +    \closein 1
    +    \vfill \eject
    +    \contentsalignmacro % in case @setchapternewpage odd is in effect
    +  \endgroup
    +  \lastnegativepageno = \pageno
    +  \global\pageno = \savepageno
    +}
    +\let\shortcontents = \summarycontents
    +
    +% Typeset the label for a chapter or appendix for the short contents.
    +% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
    +%
    +\def\shortchaplabel#1{%
    +  % This space should be enough, since a single number is .5em, and the
    +  % widest letter (M) is 1em, at least in the Computer Modern fonts.
    +  % But use \hss just in case.
    +  % (This space doesn't include the extra space that gets added after
    +  % the label; that gets put in by \shortchapentry above.)
    +  %
    +  % We'd like to right-justify chapter numbers, but that looks strange
    +  % with appendix letters.  And right-justifying numbers and
    +  % left-justifying letters looks strange when there is less than 10
    +  % chapters.  Have to read the whole toc once to know how many chapters
    +  % there are before deciding ...
    +  \hbox to 1em{#1\hss}%
    +}
    +
    +% These macros generate individual entries in the table of contents.
    +% The first argument is the chapter or section name.
    +% The last argument is the page number.
    +% The arguments in between are the chapter number, section number, ...
    +
    +% Parts, in the main contents.  Replace the part number, which doesn't
    +% exist, with an empty box.  Let's hope all the numbers have the same width.
    +% Also ignore the page number, which is conventionally not printed.
    +\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
    +\def\partentry#1#2#3#4{%
    +  % Add stretch and a bonus for breaking the page before the part heading.
    +  % This reduces the chance of the page being broken immediately after the
    +  % part heading, before a following chapter heading.
    +  \vskip 0pt plus 5\baselineskip
    +  \penalty-300
    +  \vskip 0pt plus -5\baselineskip
    +  \dochapentry{\numeralbox\labelspace#1}{}%
    +}
    +%
    +% Parts, in the short toc.
    +\def\shortpartentry#1#2#3#4{%
    +  \penalty-300
    +  \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
    +  \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
    +}
    +
    +% Chapters, in the main contents.
    +\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
    +
    +% Chapters, in the short toc.
    +% See comments in \dochapentry re vbox and related settings.
    +\def\shortchapentry#1#2#3#4{%
    +  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
    +}
    +
    +% Appendices, in the main contents.
    +% Need the word Appendix, and a fixed-size box.
    +%
    +\def\appendixbox#1{%
    +  % We use M since it's probably the widest letter.
    +  \setbox0 = \hbox{\putwordAppendix{} M}%
    +  \hbox to \wd0{\putwordAppendix{} #1\hss}}
    +%
    +\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
    +
    +% Unnumbered chapters.
    +\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
    +\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
    +
    +% Sections.
    +\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
    +\let\appsecentry=\numsecentry
    +\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
    +
    +% Subsections.
    +\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
    +\let\appsubsecentry=\numsubsecentry
    +\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
    +
    +% And subsubsections.
    +\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
    +\let\appsubsubsecentry=\numsubsubsecentry
    +\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
    +
    +% This parameter controls the indentation of the various levels.
    +% Same as \defaultparindent.
    +\newdimen\tocindent \tocindent = 15pt
    +
    +% Now for the actual typesetting. In all these, #1 is the text and #2 is the
    +% page number.
    +%
    +% If the toc has to be broken over pages, we want it to be at chapters
    +% if at all possible; hence the \penalty.
    +\def\dochapentry#1#2{%
    +   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    +   \begingroup
    +     % Move the page numbers slightly to the right
    +     \advance\entryrightmargin by -0.05em
    +     \chapentryfonts
    +     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    +   \endgroup
    +   \nobreak\vskip .25\baselineskip plus.1\baselineskip
    +}
    +
    +\def\dosecentry#1#2{\begingroup
    +  \secentryfonts \leftskip=\tocindent
    +  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    +\endgroup}
    +
    +\def\dosubsecentry#1#2{\begingroup
    +  \subsecentryfonts \leftskip=2\tocindent
    +  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    +\endgroup}
    +
    +\def\dosubsubsecentry#1#2{\begingroup
    +  \subsubsecentryfonts \leftskip=3\tocindent
    +  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    +\endgroup}
    +
    +% We use the same \entry macro as for the index entries.
    +\let\tocentry = \entry
    +
    +% Space between chapter (or whatever) number and the title.
    +\def\labelspace{\hskip1em \relax}
    +
    +\def\dopageno#1{{\rm #1}}
    +\def\doshortpageno#1{{\rm #1}}
    +
    +\def\chapentryfonts{\secfonts \rm}
    +\def\secentryfonts{\textfonts}
    +\def\subsecentryfonts{\textfonts}
    +\def\subsubsecentryfonts{\textfonts}
    +
    +
    +\message{environments,}
    +% @foo ... @end foo.
    +
    +% @tex ... @end tex    escapes into raw TeX temporarily.
    +% One exception: @ is still an escape character, so that @end tex works.
    +% But \@ or @@ will get a plain @ character.
    +
    +\envdef\tex{%
    +  \setupmarkupstyle{tex}%
    +  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
    +  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
    +  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
    +  \catcode `\%=14
    +  \catcode `\+=\other
    +  \catcode `\"=\other
    +  \catcode `\|=\other
    +  \catcode `\<=\other
    +  \catcode `\>=\other
    +  \catcode `\`=\other
    +  \catcode `\'=\other
    +  %
    +  % ' is active in math mode (mathcode"8000).  So reset it, and all our
    +  % other math active characters (just in case), to plain's definitions.
    +  \mathactive
    +  %
    +  % Inverse of the list at the beginning of the file.
    +  \let\b=\ptexb
    +  \let\bullet=\ptexbullet
    +  \let\c=\ptexc
    +  \let\,=\ptexcomma
    +  \let\.=\ptexdot
    +  \let\dots=\ptexdots
    +  \let\equiv=\ptexequiv
    +  \let\!=\ptexexclam
    +  \let\i=\ptexi
    +  \let\indent=\ptexindent
    +  \let\noindent=\ptexnoindent
    +  \let\{=\ptexlbrace
    +  \let\+=\tabalign
    +  \let\}=\ptexrbrace
    +  \let\/=\ptexslash
    +  \let\sp=\ptexsp
    +  \let\*=\ptexstar
    +  %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
    +  \let\t=\ptext
    +  \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
    +  \let\frenchspacing=\plainfrenchspacing
    +  %
    +  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
    +  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
    +  \def\@{@}%
    +}
    +% There is no need to define \Etex.
    +
    +% Define @lisp ... @end lisp.
    +% @lisp environment forms a group so it can rebind things,
    +% including the definition of @end lisp (which normally is erroneous).
    +
    +% Amount to narrow the margins by for @lisp.
    +\newskip\lispnarrowing \lispnarrowing=0.4in
    +
    +% This is the definition that ^^M gets inside @lisp, @example, and other
    +% such environments.  \null is better than a space, since it doesn't
    +% have any width.
    +\def\lisppar{\null\endgraf}
    +
    +% This space is always present above and below environments.
    +\newskip\envskipamount \envskipamount = 0pt
    +
    +% Make spacing and below environment symmetrical.  We use \parskip here
    +% to help in doing that, since in @example-like environments \parskip
    +% is reset to zero; thus the \afterenvbreak inserts no space -- but the
    +% start of the next paragraph will insert \parskip.
    +%
    +\def\aboveenvbreak{{%
    +  % =10000 instead of <10000 because of a special case in \itemzzz and
    +  % \sectionheading, q.v.
    +  \ifnum \lastpenalty=10000 \else
    +    \advance\envskipamount by \parskip
    +    \endgraf
    +    \ifdim\lastskip<\envskipamount
    +      \removelastskip
    +      \ifnum\lastpenalty<10000
    +        % Penalize breaking before the environment, because preceding text
    +        % often leads into it.
    +        \penalty100
    +      \fi
    +      \vskip\envskipamount
    +    \fi
    +  \fi
    +}}
    +
    +\def\afterenvbreak{{%
    +  % =10000 instead of <10000 because of a special case in \itemzzz and
    +  % \sectionheading, q.v.
    +  \ifnum \lastpenalty=10000 \else
    +    \advance\envskipamount by \parskip
    +    \endgraf
    +    \ifdim\lastskip<\envskipamount
    +      \removelastskip
    +      % it's not a good place to break if the last penalty was \nobreak
    +      % or better ...
    +      \ifnum\lastpenalty<10000 \penalty-50 \fi
    +      \vskip\envskipamount
    +    \fi
    +  \fi
    +}}
    +
    +% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
    +% also clear it, so that its embedded environments do the narrowing again.
    +\let\nonarrowing=\relax
    +
    +% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
    +% environment contents.
    +
    +%
    +\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
    +\def\ctr{{\hskip 6pt\circle\char'010}}
    +\def\cbl{{\circle\char'012\hskip -6pt}}
    +\def\cbr{{\hskip 6pt\circle\char'011}}
    +\def\carttop{\hbox to \cartouter{\hskip\lskip
    +        \ctl\leaders\hrule height\circthick\hfil\ctr
    +        \hskip\rskip}}
    +\def\cartbot{\hbox to \cartouter{\hskip\lskip
    +        \cbl\leaders\hrule height\circthick\hfil\cbr
    +        \hskip\rskip}}
    +%
    +\newskip\lskip\newskip\rskip
    +
    +% only require the font if @cartouche is actually used
    +\def\cartouchefontdefs{%
    +  \font\circle=lcircle10\relax
    +  \circthick=\fontdimen8\circle
    +}
    +\newdimen\circthick
    +\newdimen\cartouter\newdimen\cartinner
    +\newskip\normbskip\newskip\normpskip\newskip\normlskip
    +
    +
    +\envdef\cartouche{%
    +  \cartouchefontdefs
    +  \ifhmode\par\fi  % can't be in the midst of a paragraph.
    +  \startsavinginserts
    +  \lskip=\leftskip \rskip=\rightskip
    +  \leftskip=0pt\rightskip=0pt % we want these *outside*.
    +  \cartinner=\hsize \advance\cartinner by-\lskip
    +  \advance\cartinner by-\rskip
    +  \cartouter=\hsize
    +  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
    +				% side, and for 6pt waste from
    +				% each corner char, and rule thickness
    +  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
    +  %
    +  % If this cartouche directly follows a sectioning command, we need the
    +  % \parskip glue (backspaced over by default) or the cartouche can
    +  % collide with the section heading.
    +  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
    +  %
    +  \setbox\groupbox=\vbox\bgroup
    +      \baselineskip=0pt\parskip=0pt\lineskip=0pt
    +      \carttop
    +      \hbox\bgroup
    +	  \hskip\lskip
    +	  \vrule\kern3pt
    +	  \vbox\bgroup
    +	      \kern3pt
    +	      \hsize=\cartinner
    +	      \baselineskip=\normbskip
    +	      \lineskip=\normlskip
    +	      \parskip=\normpskip
    +	      \vskip -\parskip
    +	      \comment % For explanation, see the end of def\group.
    +}
    +\def\Ecartouche{%
    +              \ifhmode\par\fi
    +	      \kern3pt
    +	  \egroup
    +	  \kern3pt\vrule
    +	  \hskip\rskip
    +      \egroup
    +      \cartbot
    +  \egroup
    +  \addgroupbox
    +  \checkinserts
    +}
    +
    +
    +% This macro is called at the beginning of all the @example variants,
    +% inside a group.
    +\newdimen\nonfillparindent
    +\def\nonfillstart{%
    +  \aboveenvbreak
    +  \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
    +  \sepspaces % Make spaces be word-separators rather than space tokens.
    +  \let\par = \lisppar % don't ignore blank lines
    +  \obeylines % each line of input is a line of output
    +  \parskip = 0pt
    +  % Turn off paragraph indentation but redefine \indent to emulate
    +  % the normal \indent.
    +  \nonfillparindent=\parindent
    +  \parindent = 0pt
    +  \let\indent\nonfillindent
    +  %
    +  \emergencystretch = 0pt % don't try to avoid overfull boxes
    +  \ifx\nonarrowing\relax
    +    \advance \leftskip by \lispnarrowing
    +    \exdentamount=\lispnarrowing
    +  \else
    +    \let\nonarrowing = \relax
    +  \fi
    +  \let\exdent=\nofillexdent
    +}
    +
    +\begingroup
    +\obeyspaces
    +% We want to swallow spaces (but not other tokens) after the fake
    +% @indent in our nonfill-environments, where spaces are normally
    +% active and set to @tie, resulting in them not being ignored after
    +% @indent.
    +\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
    +\gdef\nonfillindentcheck{%
    +\ifx\temp %
    +\expandafter\nonfillindentgobble%
    +\else%
    +\leavevmode\nonfillindentbox%
    +\fi%
    +}%
    +\endgroup
    +\def\nonfillindentgobble#1{\nonfillindent}
    +\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
    +
    +% If you want all examples etc. small: @set dispenvsize small.
    +% If you want even small examples the full size: @set dispenvsize nosmall.
    +% This affects the following displayed environments:
    +%    @example, @display, @format, @lisp
    +%
    +\def\smallword{small}
    +\def\nosmallword{nosmall}
    +\let\SETdispenvsize\relax
    +\def\setnormaldispenv{%
    +  \ifx\SETdispenvsize\smallword
    +    % end paragraph for sake of leading, in case document has no blank
    +    % line.  This is redundant with what happens in \aboveenvbreak, but
    +    % we need to do it before changing the fonts, and it's inconvenient
    +    % to change the fonts afterward.
    +    \ifnum \lastpenalty=10000 \else \endgraf \fi
    +    \smallexamplefonts \rm
    +  \fi
    +}
    +\def\setsmalldispenv{%
    +  \ifx\SETdispenvsize\nosmallword
    +  \else
    +    \ifnum \lastpenalty=10000 \else \endgraf \fi
    +    \smallexamplefonts \rm
    +  \fi
    +}
    +
    +% We often define two environments, @foo and @smallfoo.
    +% Let's do it in one command.  #1 is the env name, #2 the definition.
    +\def\makedispenvdef#1#2{%
    +  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
    +  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
    +  \expandafter\let\csname E#1\endcsname \afterenvbreak
    +  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
    +}
    +
    +% Define two environment synonyms (#1 and #2) for an environment.
    +\def\maketwodispenvdef#1#2#3{%
    +  \makedispenvdef{#1}{#3}%
    +  \makedispenvdef{#2}{#3}%
    +}
    +%
    +% @lisp: indented, narrowed, typewriter font;
    +% @example: same as @lisp.
    +%
    +% @smallexample and @smalllisp: use smaller fonts.
    +% Originally contributed by Pavel@xerox.
    +%
    +\maketwodispenvdef{lisp}{example}{%
    +  \nonfillstart
    +  \tt\setupmarkupstyle{example}%
    +  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
    +  \gobble % eat return
    +}
    +% @display/@smalldisplay: same as @lisp except keep current font.
    +%
    +\makedispenvdef{display}{%
    +  \nonfillstart
    +  \gobble
    +}
    +
    +% @format/@smallformat: same as @display except don't narrow margins.
    +%
    +\makedispenvdef{format}{%
    +  \let\nonarrowing = t%
    +  \nonfillstart
    +  \gobble
    +}
    +
    +% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
    +\envdef\flushleft{%
    +  \let\nonarrowing = t%
    +  \nonfillstart
    +  \gobble
    +}
    +\let\Eflushleft = \afterenvbreak
    +
    +% @flushright.
    +%
    +\envdef\flushright{%
    +  \let\nonarrowing = t%
    +  \nonfillstart
    +  \advance\leftskip by 0pt plus 1fill\relax
    +  \gobble
    +}
    +\let\Eflushright = \afterenvbreak
    +
    +
    +% @raggedright does more-or-less normal line breaking but no right
    +% justification.  From plain.tex.
    +\envdef\raggedright{%
    +  \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
    +}
    +\let\Eraggedright\par
    +
    +\envdef\raggedleft{%
    +  \parindent=0pt \leftskip0pt plus2em
    +  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
    +  \hbadness=10000 % Last line will usually be underfull, so turn off
    +                  % badness reporting.
    +}
    +\let\Eraggedleft\par
    +
    +\envdef\raggedcenter{%
    +  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
    +  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
    +  \hbadness=10000 % Last line will usually be underfull, so turn off
    +                  % badness reporting.
    +}
    +\let\Eraggedcenter\par
    +
    +
    +% @quotation does normal linebreaking (hence we can't use \nonfillstart)
    +% and narrows the margins.  We keep \parskip nonzero in general, since
    +% we're doing normal filling.  So, when using \aboveenvbreak and
    +% \afterenvbreak, temporarily make \parskip 0.
    +%
    +\makedispenvdef{quotation}{\quotationstart}
    +%
    +\def\quotationstart{%
    +  \indentedblockstart % same as \indentedblock, but increase right margin too.
    +  \ifx\nonarrowing\relax
    +    \advance\rightskip by \lispnarrowing
    +  \fi
    +  \parsearg\quotationlabel
    +}
    +
    +% We have retained a nonzero parskip for the environment, since we're
    +% doing normal filling.
    +%
    +\def\Equotation{%
    +  \par
    +  \ifx\quotationauthor\thisisundefined\else
    +    % indent a bit.
    +    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
    +  \fi
    +  {\parskip=0pt \afterenvbreak}%
    +}
    +\def\Esmallquotation{\Equotation}
    +
    +% If we're given an argument, typeset it in bold with a colon after.
    +\def\quotationlabel#1{%
    +  \def\temp{#1}%
    +  \ifx\temp\empty \else
    +    {\bf #1: }%
    +  \fi
    +}
    +
    +% @indentedblock is like @quotation, but indents only on the left and
    +% has no optional argument.
    +%
    +\makedispenvdef{indentedblock}{\indentedblockstart}
    +%
    +\def\indentedblockstart{%
    +  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
    +  \parindent=0pt
    +  %
    +  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
    +  \ifx\nonarrowing\relax
    +    \advance\leftskip by \lispnarrowing
    +    \exdentamount = \lispnarrowing
    +  \else
    +    \let\nonarrowing = \relax
    +  \fi
    +}
    +
    +% Keep a nonzero parskip for the environment, since we're doing normal filling.
    +%
    +\def\Eindentedblock{%
    +  \par
    +  {\parskip=0pt \afterenvbreak}%
    +}
    +\def\Esmallindentedblock{\Eindentedblock}
    +
    +
    +% LaTeX-like @verbatim...@end verbatim and @verb{...}
    +% If we want to allow any  as delimiter,
    +% we need the curly braces so that makeinfo sees the @verb command, eg:
    +% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
    +%
    +% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
    +%
    +% [Knuth] p.344; only we need to do the other characters Texinfo sets
    +% active too.  Otherwise, they get lost as the first character on a
    +% verbatim line.
    +\def\dospecials{%
    +  \do\ \do\\\do\{\do\}\do\$\do\&%
    +  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
    +  \do\<\do\>\do\|\do\@\do+\do\"%
    +  % Don't do the quotes -- if we do, @set txicodequoteundirected and
    +  % @set txicodequotebacktick will not have effect on @verb and
    +  % @verbatim, and ?` and !` ligatures won't get disabled.
    +  %\do\`\do\'%
    +}
    +%
    +% [Knuth] p. 380
    +\def\uncatcodespecials{%
    +  \def\do##1{\catcode`##1=\other}\dospecials}
    +%
    +% Setup for the @verb command.
    +%
    +% Eight spaces for a tab
    +\begingroup
    +  \catcode`\^^I=\active
    +  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
    +\endgroup
    +%
    +\def\setupverb{%
    +  \tt  % easiest (and conventionally used) font for verbatim
    +  \def\par{\leavevmode\endgraf}%
    +  \setupmarkupstyle{verb}%
    +  \tabeightspaces
    +  % Respect line breaks,
    +  % print special symbols as themselves, and
    +  % make each space count
    +  % must do in this order:
    +  \obeylines \uncatcodespecials \sepspaces
    +}
    +
    +% Setup for the @verbatim environment
    +%
    +% Real tab expansion.
    +\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
    +%
    +% We typeset each line of the verbatim in an \hbox, so we can handle
    +% tabs.  The \global is in case the verbatim line starts with an accent,
    +% or some other command that starts with a begin-group.  Otherwise, the
    +% entire \verbbox would disappear at the corresponding end-group, before
    +% it is typeset.  Meanwhile, we can't have nested verbatim commands
    +% (can we?), so the \global won't be overwriting itself.
    +\newbox\verbbox
    +\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
    +%
    +\begingroup
    +  \catcode`\^^I=\active
    +  \gdef\tabexpand{%
    +    \catcode`\^^I=\active
    +    \def^^I{\leavevmode\egroup
    +      \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
    +      \divide\dimen\verbbox by\tabw
    +      \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
    +      \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
    +      \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
    +    }%
    +  }
    +\endgroup
    +
    +% start the verbatim environment.
    +\def\setupverbatim{%
    +  \let\nonarrowing = t%
    +  \nonfillstart
    +  \tt % easiest (and conventionally used) font for verbatim
    +  % The \leavevmode here is for blank lines.  Otherwise, we would
    +  % never \starttabbox and the \egroup would end verbatim mode.
    +  \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
    +  \tabexpand
    +  \setupmarkupstyle{verbatim}%
    +  % Respect line breaks,
    +  % print special symbols as themselves, and
    +  % make each space count.
    +  % Must do in this order:
    +  \obeylines \uncatcodespecials \sepspaces
    +  \everypar{\starttabbox}%
    +}
    +
    +% Do the @verb magic: verbatim text is quoted by unique
    +% delimiter characters.  Before first delimiter expect a
    +% right brace, after last delimiter expect closing brace:
    +%
    +%    \def\doverb'{'#1'}'{#1}
    +%
    +% [Knuth] p. 382; only eat outer {}
    +\begingroup
    +  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
    +  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
    +\endgroup
    +%
    +\def\verb{\begingroup\setupverb\doverb}
    +%
    +%
    +% Do the @verbatim magic: define the macro \doverbatim so that
    +% the (first) argument ends when '@end verbatim' is reached, ie:
    +%
    +%     \def\doverbatim#1@end verbatim{#1}
    +%
    +% For Texinfo it's a lot easier than for LaTeX,
    +% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
    +% we need not redefine '\', '{' and '}'.
    +%
    +% Inspired by LaTeX's verbatim command set [latex.ltx]
    +%
    +\begingroup
    +  \catcode`\ =\active
    +  \obeylines %
    +  % ignore everything up to the first ^^M, that's the newline at the end
    +  % of the @verbatim input line itself.  Otherwise we get an extra blank
    +  % line in the output.
    +  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
    +  % We really want {...\end verbatim} in the body of the macro, but
    +  % without the active space; thus we have to use \xdef and \gobble.
    +\endgroup
    +%
    +\envdef\verbatim{%
    +    \setupverbatim\doverbatim
    +}
    +\let\Everbatim = \afterenvbreak
    +
    +
    +% @verbatiminclude FILE - insert text of file in verbatim environment.
    +%
    +\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
    +%
    +\def\doverbatiminclude#1{%
    +  {%
    +    \makevalueexpandable
    +    \setupverbatim
    +    {%
    +      \indexnofonts       % Allow `@@' and other weird things in file names.
    +      \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
    +      \edef\tmp{\noexpand\input #1 }
    +      \expandafter
    +    }\tmp
    +    \afterenvbreak
    +  }%
    +}
    +
    +% @copying ... @end copying.
    +% Save the text away for @insertcopying later.
    +%
    +% We save the uninterpreted tokens, rather than creating a box.
    +% Saving the text in a box would be much easier, but then all the
    +% typesetting commands (@smallbook, font changes, etc.) have to be done
    +% beforehand -- and a) we want @copying to be done first in the source
    +% file; b) letting users define the frontmatter in as flexible order as
    +% possible is desirable.
    +%
    +\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
    +\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
    +%
    +\def\insertcopying{%
    +  \begingroup
    +    \parindent = 0pt  % paragraph indentation looks wrong on title page
    +    \scanexp\copyingtext
    +  \endgroup
    +}
    +
    +
    +\message{defuns,}
    +% @defun etc.
    +
    +\newskip\defbodyindent \defbodyindent=.4in
    +\newskip\defargsindent \defargsindent=50pt
    +\newskip\deflastargmargin \deflastargmargin=18pt
    +\newcount\defunpenalty
    +
    +% Start the processing of @deffn:
    +\def\startdefun{%
    +  \ifnum\lastpenalty<10000
    +    \medbreak
    +    \defunpenalty=10003 % Will keep this @deffn together with the
    +                        % following @def command, see below.
    +  \else
    +    % If there are two @def commands in a row, we'll have a \nobreak,
    +    % which is there to keep the function description together with its
    +    % header.  But if there's nothing but headers, we need to allow a
    +    % break somewhere.  Check specifically for penalty 10002, inserted
    +    % by \printdefunline, instead of 10000, since the sectioning
    +    % commands also insert a nobreak penalty, and we don't want to allow
    +    % a break between a section heading and a defun.
    +    %
    +    % As a further refinement, we avoid "club" headers by signalling
    +    % with penalty of 10003 after the very first @deffn in the
    +    % sequence (see above), and penalty of 10002 after any following
    +    % @def command.
    +    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
    +    %
    +    % Similarly, after a section heading, do not allow a break.
    +    % But do insert the glue.
    +    \medskip  % preceded by discardable penalty, so not a breakpoint
    +  \fi
    +  %
    +  \parindent=0in
    +  \advance\leftskip by \defbodyindent
    +  \exdentamount=\defbodyindent
    +}
    +
    +\def\dodefunx#1{%
    +  % First, check whether we are in the right environment:
    +  \checkenv#1%
    +  %
    +  % As above, allow line break if we have multiple x headers in a row.
    +  % It's not a great place, though.
    +  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
    +  %
    +  % And now, it's time to reuse the body of the original defun:
    +  \expandafter\gobbledefun#1%
    +}
    +\def\gobbledefun#1\startdefun{}
    +
    +% \printdefunline \deffnheader{text}
    +%
    +\def\printdefunline#1#2{%
    +  \begingroup
    +    % call \deffnheader:
    +    #1#2 \endheader
    +    % common ending:
    +    \interlinepenalty = 10000
    +    \advance\rightskip by 0pt plus 1fil\relax
    +    \endgraf
    +    \nobreak\vskip -\parskip
    +    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
    +    % Some of the @defun-type tags do not enable magic parentheses,
    +    % rendering the following check redundant.  But we don't optimize.
    +    \checkparencounts
    +  \endgroup
    +}
    +
    +\def\Edefun{\endgraf\medbreak}
    +
    +% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
    +% the only thing remaining is to define \deffnheader.
    +%
    +\def\makedefun#1{%
    +  \expandafter\let\csname E#1\endcsname = \Edefun
    +  \edef\temp{\noexpand\domakedefun
    +    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
    +  \temp
    +}
    +
    +% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
    +%
    +% Define \deffn and \deffnx, without parameters.
    +% \deffnheader has to be defined explicitly.
    +%
    +\def\domakedefun#1#2#3{%
    +  \envdef#1{%
    +    \startdefun
    +    \doingtypefnfalse    % distinguish typed functions from all else
    +    \parseargusing\activeparens{\printdefunline#3}%
    +  }%
    +  \def#2{\dodefunx#1}%
    +  \def#3%
    +}
    +
    +\newif\ifdoingtypefn       % doing typed function?
    +\newif\ifrettypeownline    % typeset return type on its own line?
    +
    +% @deftypefnnewline on|off says whether the return type of typed functions
    +% are printed on their own line.  This affects @deftypefn, @deftypefun,
    +% @deftypeop, and @deftypemethod.
    +%
    +\parseargdef\deftypefnnewline{%
    +  \def\temp{#1}%
    +  \ifx\temp\onword
    +    \expandafter\let\csname SETtxideftypefnnl\endcsname
    +      = \empty
    +  \else\ifx\temp\offword
    +    \expandafter\let\csname SETtxideftypefnnl\endcsname
    +      = \relax
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @txideftypefnnl value `\temp',
    +                must be on|off}%
    +  \fi\fi
    +}
    +
    +% \dosubind {index}{topic}{subtopic}
    +%
    +% If SUBTOPIC is present, precede it with a space, and call \doind.
    +% (At some time during the 20th century, this made a two-level entry in an
    +% index such as the operation index.  Nobody seemed to notice the change in
    +% behaviour though.)
    +\def\dosubind#1#2#3{%
    +  \def\thirdarg{#3}%
    +  \ifx\thirdarg\empty
    +    \doind{#1}{#2}%
    +  \else
    +    \doind{#1}{#2\space#3}%
    +  \fi
    +}
    +
    +% Untyped functions:
    +
    +% @deffn category name args
    +\makedefun{deffn}{\deffngeneral{}}
    +
    +% @deffn category class name args
    +\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
    +
    +% \defopon {category on}class name args
    +\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
    +
    +% \deffngeneral {subind}category name args
    +%
    +\def\deffngeneral#1#2 #3 #4\endheader{%
    +  \dosubind{fn}{\code{#3}}{#1}%
    +  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
    +}
    +
    +% Typed functions:
    +
    +% @deftypefn category type name args
    +\makedefun{deftypefn}{\deftypefngeneral{}}
    +
    +% @deftypeop category class type name args
    +\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
    +
    +% \deftypeopon {category on}class type name args
    +\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
    +
    +% \deftypefngeneral {subind}category type name args
    +%
    +\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
    +  \dosubind{fn}{\code{#4}}{#1}%
    +  \doingtypefntrue
    +  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
    +}
    +
    +% Typed variables:
    +
    +% @deftypevr category type var args
    +\makedefun{deftypevr}{\deftypecvgeneral{}}
    +
    +% @deftypecv category class type var args
    +\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
    +
    +% \deftypecvof {category of}class type var args
    +\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
    +
    +% \deftypecvgeneral {subind}category type var args
    +%
    +\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
    +  \dosubind{vr}{\code{#4}}{#1}%
    +  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
    +}
    +
    +% Untyped variables:
    +
    +% @defvr category var args
    +\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
    +
    +% @defcv category class var args
    +\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
    +
    +% \defcvof {category of}class var args
    +\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
    +
    +% Types:
    +
    +% @deftp category name args
    +\makedefun{deftp}#1 #2 #3\endheader{%
    +  \doind{tp}{\code{#2}}%
    +  \defname{#1}{}{#2}\defunargs{#3\unskip}%
    +}
    +
    +% Remaining @defun-like shortcuts:
    +\makedefun{defun}{\deffnheader{\putwordDeffunc} }
    +\makedefun{defmac}{\deffnheader{\putwordDefmac} }
    +\makedefun{defspec}{\deffnheader{\putwordDefspec} }
    +\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
    +\makedefun{defvar}{\defvrheader{\putwordDefvar} }
    +\makedefun{defopt}{\defvrheader{\putwordDefopt} }
    +\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
    +\makedefun{defmethod}{\defopon\putwordMethodon}
    +\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
    +\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
    +\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
    +
    +% \defname, which formats the name of the @def (not the args).
    +% #1 is the category, such as "Function".
    +% #2 is the return type, if any.
    +% #3 is the function name.
    +%
    +% We are followed by (but not passed) the arguments, if any.
    +%
    +\def\defname#1#2#3{%
    +  \par
    +  % Get the values of \leftskip and \rightskip as they were outside the @def...
    +  \advance\leftskip by -\defbodyindent
    +  %
    +  % Determine if we are typesetting the return type of a typed function
    +  % on a line by itself.
    +  \rettypeownlinefalse
    +  \ifdoingtypefn  % doing a typed function specifically?
    +    % then check user option for putting return type on its own line:
    +    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
    +      \rettypeownlinetrue
    +    \fi
    +  \fi
    +  %
    +  % How we'll format the category name.  Putting it in brackets helps
    +  % distinguish it from the body text that may end up on the next line
    +  % just below it.
    +  \def\temp{#1}%
    +  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
    +  %
    +  % Figure out line sizes for the paragraph shape.  We'll always have at
    +  % least two.
    +  \tempnum = 2
    +  %
    +  % The first line needs space for \box0; but if \rightskip is nonzero,
    +  % we need only space for the part of \box0 which exceeds it:
    +  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
    +  %
    +  % If doing a return type on its own line, we'll have another line.
    +  \ifrettypeownline
    +    \advance\tempnum by 1
    +    \def\maybeshapeline{0in \hsize}%
    +  \else
    +    \def\maybeshapeline{}%
    +  \fi
    +  %
    +  % The continuations:
    +  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
    +  %
    +  % The final paragraph shape:
    +  \parshape \tempnum  0in \dimen0  \maybeshapeline  \defargsindent \dimen2
    +  %
    +  % Put the category name at the right margin.
    +  \noindent
    +  \hbox to 0pt{%
    +    \hfil\box0 \kern-\hsize
    +    % \hsize has to be shortened this way:
    +    \kern\leftskip
    +    % Intentionally do not respect \rightskip, since we need the space.
    +  }%
    +  %
    +  % Allow all lines to be underfull without complaint:
    +  \tolerance=10000 \hbadness=10000
    +  \exdentamount=\defbodyindent
    +  {%
    +    % defun fonts. We use typewriter by default (used to be bold) because:
    +    % . we're printing identifiers, they should be in tt in principle.
    +    % . in languages with many accents, such as Czech or French, it's
    +    %   common to leave accents off identifiers.  The result looks ok in
    +    %   tt, but exceedingly strange in rm.
    +    % . we don't want -- and --- to be treated as ligatures.
    +    % . this still does not fix the ?` and !` ligatures, but so far no
    +    %   one has made identifiers using them :).
    +    \df \tt
    +    \def\temp{#2}% text of the return type
    +    \ifx\temp\empty\else
    +      \tclose{\temp}% typeset the return type
    +      \ifrettypeownline
    +        % put return type on its own line; prohibit line break following:
    +        \hfil\vadjust{\nobreak}\break
    +      \else
    +        \space  % type on same line, so just followed by a space
    +      \fi
    +    \fi           % no return type
    +    #3% output function name
    +  }%
    +  {\rm\enskip}% hskip 0.5 em of \rmfont
    +  %
    +  \boldbrax
    +  % arguments will be output next, if any.
    +}
    +
    +% Print arguments in slanted roman (not ttsl), inconsistently with using
    +% tt for the name.  This is because literal text is sometimes needed in
    +% the argument list (groff manual), and ttsl and tt are not very
    +% distinguishable.  Prevent hyphenation at `-' chars.
    +%
    +\def\defunargs#1{%
    +  % use sl by default (not ttsl),
    +  % tt for the names.
    +  \df \sl \hyphenchar\font=0
    +  %
    +  % On the other hand, if an argument has two dashes (for instance), we
    +  % want a way to get ttsl.  We used to recommend @var for that, so
    +  % leave the code in, but it's strange for @var to lead to typewriter.
    +  % Nowadays we recommend @code, since the difference between a ttsl hyphen
    +  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
    +  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
    +  #1%
    +  \sl\hyphenchar\font=45
    +}
    +
    +% We want ()&[] to print specially on the defun line.
    +%
    +\def\activeparens{%
    +  \catcode`\(=\active \catcode`\)=\active
    +  \catcode`\[=\active \catcode`\]=\active
    +  \catcode`\&=\active
    +}
    +
    +% Make control sequences which act like normal parenthesis chars.
    +\let\lparen = ( \let\rparen = )
    +
    +% Be sure that we always have a definition for `(', etc.  For example,
    +% if the fn name has parens in it, \boldbrax will not be in effect yet,
    +% so TeX would otherwise complain about undefined control sequence.
    +{
    +  \activeparens
    +  \global\let(=\lparen \global\let)=\rparen
    +  \global\let[=\lbrack \global\let]=\rbrack
    +  \global\let& = \&
    +
    +  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
    +  \gdef\magicamp{\let&=\amprm}
    +}
    +\let\ampchar\&
    +
    +\newcount\parencount
    +
    +% If we encounter &foo, then turn on ()-hacking afterwards
    +\newif\ifampseen
    +\def\amprm#1 {\ampseentrue{\bf\ }}
    +
    +\def\parenfont{%
    +  \ifampseen
    +    % At the first level, print parens in roman,
    +    % otherwise use the default font.
    +    \ifnum \parencount=1 \rm \fi
    +  \else
    +    % The \sf parens (in \boldbrax) actually are a little bolder than
    +    % the contained text.  This is especially needed for [ and ] .
    +    \sf
    +  \fi
    +}
    +\def\infirstlevel#1{%
    +  \ifampseen
    +    \ifnum\parencount=1
    +      #1%
    +    \fi
    +  \fi
    +}
    +\def\bfafterword#1 {#1 \bf}
    +
    +\def\opnr{%
    +  \global\advance\parencount by 1
    +  {\parenfont(}%
    +  \infirstlevel \bfafterword
    +}
    +\def\clnr{%
    +  {\parenfont)}%
    +  \infirstlevel \sl
    +  \global\advance\parencount by -1
    +}
    +
    +\newcount\brackcount
    +\def\lbrb{%
    +  \global\advance\brackcount by 1
    +  {\bf[}%
    +}
    +\def\rbrb{%
    +  {\bf]}%
    +  \global\advance\brackcount by -1
    +}
    +
    +\def\checkparencounts{%
    +  \ifnum\parencount=0 \else \badparencount \fi
    +  \ifnum\brackcount=0 \else \badbrackcount \fi
    +}
    +% these should not use \errmessage; the glibc manual, at least, actually
    +% has such constructs (when documenting function pointers).
    +\def\badparencount{%
    +  \message{Warning: unbalanced parentheses in @def...}%
    +  \global\parencount=0
    +}
    +\def\badbrackcount{%
    +  \message{Warning: unbalanced square brackets in @def...}%
    +  \global\brackcount=0
    +}
    +
    +
    +\message{macros,}
    +% @macro.
    +
    +% To do this right we need a feature of e-TeX, \scantokens,
    +% which we arrange to emulate with a temporary file in ordinary TeX.
    +\ifx\eTeXversion\thisisundefined
    +  \newwrite\macscribble
    +  \def\scantokens#1{%
    +    \toks0={#1}%
    +    \immediate\openout\macscribble=\jobname.tmp
    +    \immediate\write\macscribble{\the\toks0}%
    +    \immediate\closeout\macscribble
    +    \input \jobname.tmp
    +  }
    +\fi
    +
    +% Used at the time of macro expansion.
    +% Argument is macro body with arguments substituted
    +\def\scanmacro#1{%
    +  \newlinechar`\^^M
    +  \def\xeatspaces{\eatspaces}%
    +  %
    +  % Process the macro body under the current catcode regime.
    +  \scantokens{#1@comment}%
    +  %
    +  % The \comment is to remove the \newlinechar added by \scantokens, and
    +  % can be noticed by \parsearg.  Note \c isn't used because this means cedilla
    +  % in math mode.
    +}
    +
    +% Used for copying and captions
    +\def\scanexp#1{%
    +  \expandafter\scanmacro\expandafter{#1}%
    +}
    +
    +\newcount\paramno   % Count of parameters
    +\newtoks\macname    % Macro name
    +\newif\ifrecursive  % Is it recursive?
    +
    +% List of all defined macros in the form
    +%    \commondummyword\macro1\commondummyword\macro2...
    +% Currently is also contains all @aliases; the list can be split
    +% if there is a need.
    +\def\macrolist{}
    +
    +% Add the macro to \macrolist
    +\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
    +\def\addtomacrolistxxx#1{%
    +     \toks0 = \expandafter{\macrolist\commondummyword#1}%
    +     \xdef\macrolist{\the\toks0}%
    +}
    +
    +% Utility routines.
    +% This does \let #1 = #2, with \csnames; that is,
    +%   \let \csname#1\endcsname = \csname#2\endcsname
    +% (except of course we have to play expansion games).
    +%
    +\def\cslet#1#2{%
    +  \expandafter\let
    +  \csname#1\expandafter\endcsname
    +  \csname#2\endcsname
    +}
    +
    +% Trim leading and trailing spaces off a string.
    +% Concepts from aro-bend problem 15 (see CTAN).
    +{\catcode`\@=11
    +\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
    +\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
    +\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
    +\def\unbrace#1{#1}
    +\unbrace{\gdef\trim@@@ #1 } #2@{#1}
    +}
    +
    +% Trim a single trailing ^^M off a string.
    +{\catcode`\^^M=\other \catcode`\Q=3%
    +\gdef\eatcr #1{\eatcra #1Q^^MQ}%
    +\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
    +\gdef\eatcrb#1Q#2Q{#1}%
    +}
    +
    +% Macro bodies are absorbed as an argument in a context where
    +% all characters are catcode 10, 11 or 12, except \ which is active
    +% (as in normal texinfo). It is necessary to change the definition of \
    +% to recognize macro arguments; this is the job of \mbodybackslash.
    +%
    +% Non-ASCII encodings make 8-bit characters active, so un-activate
    +% them to avoid their expansion.  Must do this non-globally, to
    +% confine the change to the current group.
    +%
    +% It's necessary to have hard CRs when the macro is executed. This is
    +% done by making ^^M (\endlinechar) catcode 12 when reading the macro
    +% body, and then making it the \newlinechar in \scanmacro.
    +%
    +\def\scanctxt{% used as subroutine
    +  \catcode`\"=\other
    +  \catcode`\+=\other
    +  \catcode`\<=\other
    +  \catcode`\>=\other
    +  \catcode`\^=\other
    +  \catcode`\_=\other
    +  \catcode`\|=\other
    +  \catcode`\~=\other
    +  \passthroughcharstrue
    +}
    +
    +\def\scanargctxt{% used for copying and captions, not macros.
    +  \scanctxt
    +  \catcode`\@=\other
    +  \catcode`\\=\other
    +  \catcode`\^^M=\other
    +}
    +
    +\def\macrobodyctxt{% used for @macro definitions
    +  \scanctxt
    +  \catcode`\ =\other
    +  \catcode`\@=\other
    +  \catcode`\{=\other
    +  \catcode`\}=\other
    +  \catcode`\^^M=\other
    +  \usembodybackslash
    +}
    +
    +% Used when scanning braced macro arguments.  Note, however, that catcode
    +% changes here are ineffectual if the macro invocation was nested inside
    +% an argument to another Texinfo command.
    +\def\macroargctxt{%
    +  \scanctxt
    +  \catcode`\ =\active
    +  \catcode`\@=\other
    +  \catcode`\^^M=\other
    +  \catcode`\\=\active
    +}
    +
    +\def\macrolineargctxt{% used for whole-line arguments without braces
    +  \scanctxt
    +  \catcode`\@=\other
    +  \catcode`\{=\other
    +  \catcode`\}=\other
    +}
    +
    +% \mbodybackslash is the definition of \ in @macro bodies.
    +% It maps \foo\ => \csname macarg.foo\endcsname => #N
    +% where N is the macro parameter number.
    +% We define \csname macarg.\endcsname to be \realbackslash, so
    +% \\ in macro replacement text gets you a backslash.
    +%
    +{\catcode`@=0 @catcode`@\=@active
    + @gdef@usembodybackslash{@let\=@mbodybackslash}
    + @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
    +}
    +\expandafter\def\csname macarg.\endcsname{\realbackslash}
    +
    +\def\margbackslash#1{\char`\#1 }
    +
    +\def\macro{\recursivefalse\parsearg\macroxxx}
    +\def\rmacro{\recursivetrue\parsearg\macroxxx}
    +
    +\def\macroxxx#1{%
    +  \getargs{#1}% now \macname is the macname and \argl the arglist
    +  \ifx\argl\empty       % no arguments
    +     \paramno=0\relax
    +  \else
    +     \expandafter\parsemargdef \argl;%
    +     \if\paramno>256\relax
    +       \ifx\eTeXversion\thisisundefined
    +         \errhelp = \EMsimple
    +         \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
    +       \fi
    +     \fi
    +  \fi
    +  \if1\csname ismacro.\the\macname\endcsname
    +     \message{Warning: redefining \the\macname}%
    +  \else
    +     \expandafter\ifx\csname \the\macname\endcsname \relax
    +     \else \errmessage{Macro name \the\macname\space already defined}\fi
    +     \global\cslet{macsave.\the\macname}{\the\macname}%
    +     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
    +     \addtomacrolist{\the\macname}%
    +  \fi
    +  \begingroup \macrobodyctxt
    +  \ifrecursive \expandafter\parsermacbody
    +  \else \expandafter\parsemacbody
    +  \fi}
    +
    +\parseargdef\unmacro{%
    +  \if1\csname ismacro.#1\endcsname
    +    \global\cslet{#1}{macsave.#1}%
    +    \global\expandafter\let \csname ismacro.#1\endcsname=0%
    +    % Remove the macro name from \macrolist:
    +    \begingroup
    +      \expandafter\let\csname#1\endcsname \relax
    +      \let\commondummyword\unmacrodo
    +      \xdef\macrolist{\macrolist}%
    +    \endgroup
    +  \else
    +    \errmessage{Macro #1 not defined}%
    +  \fi
    +}
    +
    +% Called by \do from \dounmacro on each macro.  The idea is to omit any
    +% macro definitions that have been changed to \relax.
    +%
    +\def\unmacrodo#1{%
    +  \ifx #1\relax
    +    % remove this
    +  \else
    +    \noexpand\commondummyword \noexpand#1%
    +  \fi
    +}
    +
    +% \getargs -- Parse the arguments to a @macro line.  Set \macname to
    +% the name of the macro, and \argl to the braced argument list.
    +\def\getargs#1{\getargsxxx#1{}}
    +\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
    +\def\getmacname#1 #2\relax{\macname={#1}}
    +\def\getmacargs#1{\def\argl{#1}}
    +% This made use of the feature that if the last token of a
    +%  is #, then the preceding argument is delimited by
    +% an opening brace, and that opening brace is not consumed.
    +
    +% Parse the optional {params} list to @macro or @rmacro.
    +% Set \paramno to the number of arguments,
    +% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
    +% three-param macro.)  Define \macarg.BLAH for each BLAH in the params
    +% list to some hook where the argument is to be expanded.  If there are
    +% less than 10 arguments that hook is to be replaced by ##N where N
    +% is the position in that list, that is to say the macro arguments are to be
    +% defined `a la TeX in the macro body.
    +%
    +% That gets used by \mbodybackslash (above).
    +%
    +% If there are 10 or more arguments, a different technique is used: see
    +% \parsemmanyargdef.
    +%
    +\def\parsemargdef#1;{%
    +  \paramno=0\def\paramlist{}%
    +  \let\hash\relax
    +  % \hash is redefined to `#' later to get it into definitions
    +  \let\xeatspaces\relax
    +  \parsemargdefxxx#1,;,%
    +  \ifnum\paramno<10\relax\else
    +    \paramno0\relax
    +    \parsemmanyargdef@@#1,;,% 10 or more arguments
    +  \fi
    +}
    +\def\parsemargdefxxx#1,{%
    +  \if#1;\let\next=\relax
    +  \else \let\next=\parsemargdefxxx
    +    \advance\paramno by 1
    +    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
    +        {\xeatspaces{\hash\the\paramno}}%
    +    \edef\paramlist{\paramlist\hash\the\paramno,}%
    +  \fi\next}
    +
    +% \parsemacbody, \parsermacbody
    +%
    +% Read recursive and nonrecursive macro bodies. (They're different since
    +% rec and nonrec macros end differently.)
    +%
    +% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
    +% body to be transformed.
    +% Set \macrobody to the body of the macro, and call \defmacro.
    +%
    +{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
    +\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
    +{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
    +\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
    +
    +% Make @ a letter, so that we can make private-to-Texinfo macro names.
    +\edef\texiatcatcode{\the\catcode`\@}
    +\catcode `@=11\relax
    +
    +%%%%%%%%%%%%%% Code for > 10 arguments only   %%%%%%%%%%%%%%%%%%
    +
    +% If there are 10 or more arguments, a different technique is used, where the
    +% hook remains in the body, and when macro is to be expanded the body is
    +% processed again to replace the arguments.
    +%
    +% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
    +% argument N value and then \edef the body (nothing else will expand because of
    +% the catcode regime under which the body was input).
    +%
    +% If you compile with TeX (not eTeX), and you have macros with 10 or more
    +% arguments, no macro can have more than 256 arguments (else error).
    +%
    +% In case that there are 10 or more arguments we parse again the arguments
    +% list to set new definitions for the \macarg.BLAH macros corresponding to
    +% each BLAH argument. It was anyhow needed to parse already once this list
    +% in order to count the arguments, and as macros with at most 9 arguments
    +% are by far more frequent than macro with 10 or more arguments, defining
    +% twice the \macarg.BLAH macros does not cost too much processing power.
    +\def\parsemmanyargdef@@#1,{%
    +  \if#1;\let\next=\relax
    +  \else
    +    \let\next=\parsemmanyargdef@@
    +    \edef\tempb{\eatspaces{#1}}%
    +    \expandafter\def\expandafter\tempa
    +       \expandafter{\csname macarg.\tempb\endcsname}%
    +    % Note that we need some extra \noexpand\noexpand, this is because we
    +    % don't want \the  to be expanded in the \parsermacbody  as it uses an
    +    % \xdef .
    +    \expandafter\edef\tempa
    +      {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
    +    \advance\paramno by 1\relax
    +  \fi\next}
    +
    +
    +\let\endargs@\relax
    +\let\nil@\relax
    +\def\nilm@{\nil@}%
    +\long\def\nillm@{\nil@}%
    +
    +% This macro is expanded during the Texinfo macro expansion, not during its
    +% definition.  It gets all the arguments' values and assigns them to macros
    +% macarg.ARGNAME
    +%
    +% #1 is the macro name
    +% #2 is the list of argument names
    +% #3 is the list of argument values
    +\def\getargvals@#1#2#3{%
    +  \def\macargdeflist@{}%
    +  \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
    +  \def\paramlist{#2,\nil@}%
    +  \def\macroname{#1}%
    +  \begingroup
    +  \macroargctxt
    +  \def\argvaluelist{#3,\nil@}%
    +  \def\@tempa{#3}%
    +  \ifx\@tempa\empty
    +    \setemptyargvalues@
    +  \else
    +    \getargvals@@
    +  \fi
    +}
    +\def\getargvals@@{%
    +  \ifx\paramlist\nilm@
    +      % Some sanity check needed here that \argvaluelist is also empty.
    +      \ifx\argvaluelist\nillm@
    +      \else
    +        \errhelp = \EMsimple
    +        \errmessage{Too many arguments in macro `\macroname'!}%
    +      \fi
    +      \let\next\macargexpandinbody@
    +  \else
    +    \ifx\argvaluelist\nillm@
    +       % No more arguments values passed to macro.  Set remaining named-arg
    +       % macros to empty.
    +       \let\next\setemptyargvalues@
    +    \else
    +      % pop current arg name into \@tempb
    +      \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
    +      \expandafter\@tempa\expandafter{\paramlist}%
    +       % pop current argument value into \@tempc
    +      \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
    +      \expandafter\@tempa\expandafter{\argvaluelist}%
    +       % Here \@tempb is the current arg name and \@tempc is the current arg value.
    +       % First place the new argument macro definition into \@tempd
    +       \expandafter\macname\expandafter{\@tempc}%
    +       \expandafter\let\csname macarg.\@tempb\endcsname\relax
    +       \expandafter\def\expandafter\@tempe\expandafter{%
    +         \csname macarg.\@tempb\endcsname}%
    +       \edef\@tempd{\long\def\@tempe{\the\macname}}%
    +       \push@\@tempd\macargdeflist@
    +       \let\next\getargvals@@
    +    \fi
    +  \fi
    +  \next
    +}
    +
    +\def\push@#1#2{%
    +  \expandafter\expandafter\expandafter\def
    +  \expandafter\expandafter\expandafter#2%
    +  \expandafter\expandafter\expandafter{%
    +  \expandafter#1#2}%
    +}
    +
    +% Replace arguments by their values in the macro body, and place the result
    +% in macro \@tempa.
    +%
    +\def\macvalstoargs@{%
    +  %  To do this we use the property that token registers that are \the'ed
    +  % within an \edef  expand only once. So we are going to place all argument
    +  % values into respective token registers.
    +  %
    +  % First we save the token context, and initialize argument numbering.
    +  \begingroup
    +    \paramno0\relax
    +    % Then, for each argument number #N, we place the corresponding argument
    +    % value into a new token list register \toks#N
    +    \expandafter\putargsintokens@\saveparamlist@,;,%
    +    % Then, we expand the body so that argument are replaced by their
    +    % values. The trick for values not to be expanded themselves is that they
    +    % are within tokens and that tokens expand only once in an \edef .
    +    \edef\@tempc{\csname mac.\macroname .body\endcsname}%
    +    % Now we restore the token stack pointer to free the token list registers
    +    % which we have used, but we make sure that expanded body is saved after
    +    % group.
    +    \expandafter
    +  \endgroup
    +  \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
    +  }
    +
    +% Define the named-macro outside of this group and then close this group.
    +%
    +\def\macargexpandinbody@{%
    +  \expandafter
    +  \endgroup
    +  \macargdeflist@
    +  % First the replace in body the macro arguments by their values, the result
    +  % is in \@tempa .
    +  \macvalstoargs@
    +  % Then we point at the \norecurse or \gobble (for recursive) macro value
    +  % with \@tempb .
    +  \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
    +  % Depending on whether it is recursive or not, we need some tailing
    +  % \egroup .
    +  \ifx\@tempb\gobble
    +     \let\@tempc\relax
    +  \else
    +     \let\@tempc\egroup
    +  \fi
    +  % And now we do the real job:
    +  \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
    +  \@tempd
    +}
    +
    +\def\putargsintokens@#1,{%
    +  \if#1;\let\next\relax
    +  \else
    +    \let\next\putargsintokens@
    +    % First we allocate the new token list register, and give it a temporary
    +    % alias \@tempb .
    +    \toksdef\@tempb\the\paramno
    +    % Then we place the argument value into that token list register.
    +    \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
    +    \expandafter\@tempb\expandafter{\@tempa}%
    +    \advance\paramno by 1\relax
    +  \fi
    +  \next
    +}
    +
    +% Trailing missing arguments are set to empty.
    +%
    +\def\setemptyargvalues@{%
    +  \ifx\paramlist\nilm@
    +    \let\next\macargexpandinbody@
    +  \else
    +    \expandafter\setemptyargvaluesparser@\paramlist\endargs@
    +    \let\next\setemptyargvalues@
    +  \fi
    +  \next
    +}
    +
    +\def\setemptyargvaluesparser@#1,#2\endargs@{%
    +  \expandafter\def\expandafter\@tempa\expandafter{%
    +    \expandafter\def\csname macarg.#1\endcsname{}}%
    +  \push@\@tempa\macargdeflist@
    +  \def\paramlist{#2}%
    +}
    +
    +% #1 is the element target macro
    +% #2 is the list macro
    +% #3,#4\endargs@ is the list value
    +\def\pop@#1#2#3,#4\endargs@{%
    +   \def#1{#3}%
    +   \def#2{#4}%
    +}
    +\long\def\longpop@#1#2#3,#4\endargs@{%
    +   \long\def#1{#3}%
    +   \long\def#2{#4}%
    +}
    +
    +
    +%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
    +
    +
    +% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
    +%    \macrobody has the body of the macro in it, with placeholders for
    +% its parameters, looking like "\xeatspaces{\hash 1}".
    +%    \paramno is the number of parameters
    +%    \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
    +% There are four cases: macros of zero, one, up to nine, and many arguments.
    +% \xdef is used so that macro definitions will survive the file
    +% they're defined in: @include reads the file inside a group.
    +%
    +\def\defmacro{%
    +  \let\hash=##% convert placeholders to macro parameter chars
    +  \ifnum\paramno=1
    +    \def\xeatspaces##1{##1}%
    +    % This removes the pair of braces around the argument.  We don't
    +    % use \eatspaces, because this can cause ends of lines to be lost
    +    % when the argument to \eatspaces is read, leading to line-based
    +    % commands like "@itemize" not being read correctly.
    +  \else
    +    \let\xeatspaces\relax % suppress expansion
    +  \fi
    +  \ifcase\paramno
    +  % 0
    +    \expandafter\xdef\csname\the\macname\endcsname{%
    +      \bgroup
    +        \noexpand\spaceisspace
    +        \noexpand\endlineisspace
    +        \noexpand\expandafter % skip any whitespace after the macro name.
    +        \expandafter\noexpand\csname\the\macname @@@\endcsname}%
    +    \expandafter\xdef\csname\the\macname @@@\endcsname{%
    +      \egroup
    +      \noexpand\scanmacro{\macrobody}}%
    +  \or % 1
    +    \expandafter\xdef\csname\the\macname\endcsname{%
    +       \bgroup
    +       \noexpand\braceorline
    +       \expandafter\noexpand\csname\the\macname @@@\endcsname}%
    +    \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
    +      \egroup
    +      \noexpand\scanmacro{\macrobody}%
    +      }%
    +  \else % at most 9
    +    \ifnum\paramno<10\relax
    +      % @MACNAME sets the context for reading the macro argument
    +      % @MACNAME@@ gets the argument, processes backslashes and appends a
    +      % comma.
    +      % @MACNAME@@@ removes braces surrounding the argument list.
    +      % @MACNAME@@@@ scans the macro body with arguments substituted.
    +      \expandafter\xdef\csname\the\macname\endcsname{%
    +        \bgroup
    +        \noexpand\expandafter  % This \expandafter skip any spaces after the
    +        \noexpand\macroargctxt % macro before we change the catcode of space.
    +        \noexpand\expandafter
    +        \expandafter\noexpand\csname\the\macname @@\endcsname}%
    +      \expandafter\xdef\csname\the\macname @@\endcsname##1{%
    +          \noexpand\passargtomacro
    +          \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
    +      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
    +          \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
    +      \expandafter\expandafter
    +      \expandafter\xdef
    +      \expandafter\expandafter
    +        \csname\the\macname @@@@\endcsname\paramlist{%
    +          \egroup\noexpand\scanmacro{\macrobody}}%
    +    \else % 10 or more:
    +      \expandafter\xdef\csname\the\macname\endcsname{%
    +        \noexpand\getargvals@{\the\macname}{\argl}%
    +      }%
    +      \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
    +      \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
    +    \fi
    +  \fi}
    +
    +\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
    +
    +\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
    +
    +
    +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    +%
    +{\catcode`\@=0 \catcode`\\=13  % We need to manipulate \ so use @ as escape
    +@catcode`@_=11  % private names
    +@catcode`@!=11  % used as argument separator
    +
    +% \passargtomacro#1#2 -
    +% Call #1 with a list of tokens #2, with any doubled backslashes in #2
    +% compressed to one.
    +%
    +% This implementation works by expansion, and not execution (so we cannot use
    +% \def or similar).  This reduces the risk of this failing in contexts where
    +% complete expansion is done with no execution (for example, in writing out to
    +% an auxiliary file for an index entry).
    +%
    +% State is kept in the input stream: the argument passed to
    +% @look_ahead, @gobble_and_check_finish and @add_segment is
    +%
    +% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN  (... rest of input)
    +%
    +% where:
    +% THE_MACRO - name of the macro we want to call
    +% ARG_RESULT - argument list we build to pass to that macro
    +% PENDING_BS - either a backslash or nothing
    +% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
    +
    +@gdef@passargtomacro#1#2{%
    +  @add_segment #1!{}@relax#2\@_finish\%
    +}
    +@gdef@_finish{@_finishx} @global@let@_finishx@relax
    +
    +% #1 - THE_MACRO ARG_RESULT
    +% #2 - PENDING_BS
    +% #3 - NEXT_TOKEN
    +% #4 used to look ahead
    +%
    +% If the next token is not a backslash, process the rest of the argument;
    +% otherwise, remove the next token.
    +@gdef@look_ahead#1!#2#3#4{%
    +  @ifx#4\%
    +   @expandafter@gobble_and_check_finish
    +  @else
    +   @expandafter@add_segment
    +  @fi#1!{#2}#4#4%
    +}
    +
    +% #1 - THE_MACRO ARG_RESULT
    +% #2 - PENDING_BS
    +% #3 - NEXT_TOKEN
    +% #4 should be a backslash, which is gobbled.
    +% #5 looks ahead
    +%
    +% Double backslash found.  Add a single backslash, and look ahead.
    +@gdef@gobble_and_check_finish#1!#2#3#4#5{%
    +  @add_segment#1\!{}#5#5%
    +}
    +
    +@gdef@is_fi{@fi}
    +
    +% #1 - THE_MACRO ARG_RESULT
    +% #2 - PENDING_BS
    +% #3 - NEXT_TOKEN
    +% #4 is input stream until next backslash
    +%
    +% Input stream is either at the start of the argument, or just after a
    +% backslash sequence, either a lone backslash, or a doubled backslash.
    +% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
    +% finish; otherwise, append to ARG_RESULT the segment of the argument up until
    +% the next backslash.  PENDING_BACKSLASH contains a backslash to represent
    +% a backslash just before the start of the input stream that has not been
    +% added to ARG_RESULT.
    +@gdef@add_segment#1!#2#3#4\{%
    +@ifx#3@_finish
    +  @call_the_macro#1!%
    +@else
    +  % append the pending backslash to the result, followed by the next segment
    +  @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
    +  % this @fi is discarded by @look_ahead.
    +  % we can't get rid of it with \expandafter because we don't know how
    +  % long #4 is.
    +}
    +
    +% #1 - THE_MACRO
    +% #2 - ARG_RESULT
    +% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
    +% conditional.
    +@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
    +
    +}
    +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    +
    +% \braceorline MAC is used for a one-argument macro MAC.  It checks
    +% whether the next non-whitespace character is a {.  It sets the context
    +% for reading the argument (slightly different in the two cases).  Then,
    +% to read the argument, in the whole-line case, it then calls the regular
    +% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
    +%
    +\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
    +\def\braceorlinexxx{%
    +  \ifx\nchar\bgroup
    +    \macroargctxt
    +    \expandafter\passargtomacro
    +  \else
    +    \macrolineargctxt\expandafter\parsearg
    +  \fi \macnamexxx}
    +
    +
    +% @alias.
    +% We need some trickery to remove the optional spaces around the equal
    +% sign.  Make them active and then expand them all to nothing.
    +%
    +\def\alias{\parseargusing\obeyspaces\aliasxxx}
    +\def\aliasxxx #1{\aliasyyy#1\relax}
    +\def\aliasyyy #1=#2\relax{%
    +  {%
    +    \expandafter\let\obeyedspace=\empty
    +    \addtomacrolist{#1}%
    +    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
    +  }%
    +  \next
    +}
    +
    +
    +\message{cross references,}
    +
    +\newwrite\auxfile
    +\newif\ifhavexrefs    % True if xref values are known.
    +\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
    +
    +% @inforef is relatively simple.
    +\def\inforef #1{\inforefzzz #1,,,,**}
    +\def\inforefzzz #1,#2,#3,#4**{%
    +  \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
    +  node \samp{\ignorespaces#1{}}}
    +
    +% @node's only job in TeX is to define \lastnode, which is used in
    +% cross-references.  The @node line might or might not have commas, and
    +% might or might not have spaces before the first comma, like:
    +% @node foo , bar , ...
    +% We don't want such trailing spaces in the node name.
    +%
    +\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
    +%
    +% also remove a trailing comma, in case of something like this:
    +% @node Help-Cross,  ,  , Cross-refs
    +\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
    +\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode}
    +
    +% Used so that the @top node doesn't have to be wrapped in an @ifnottex
    +% conditional.
    +% \doignore goes to more effort to skip nested conditionals but we don't need
    +% that here.
    +\def\omittopnode{%
    +   \ifx\lastnode\wordTop
    +   \expandafter\ignorenode\fi
    +}
    +\def\wordTop{Top}
    +
    +% Until the next @node or @bye command, divert output to a box that is not
    +% output.
    +\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
    +\ignorenodebye
    +}
    +
    +{\let\bye\relax
    +\gdef\ignorenodebye{\let\bye\ignorenodebyedef}
    +\gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}}
    +% The redefinition of \bye here is because it is declared \outer
    +
    +\let\lastnode=\empty
    +
    +% Write a cross-reference definition for the current node.  #1 is the
    +% type (Ynumbered, Yappendix, Ynothing).
    +%
    +\def\donoderef#1{%
    +  \ifx\lastnode\empty\else
    +    \setref{\lastnode}{#1}%
    +    \global\let\lastnode=\empty
    +  \fi
    +}
    +
    +% @anchor{NAME} -- define xref target at arbitrary point.
    +%
    +\newcount\savesfregister
    +%
    +\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
    +\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
    +\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
    +
    +% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
    +% anchor), which consists of three parts:
    +% 1) NAME-title - the current sectioning name taken from \currentsection,
    +%                 or the anchor name.
    +% 2) NAME-snt   - section number and type, passed as the SNT arg, or
    +%                 empty for anchors.
    +% 3) NAME-pg    - the page number.
    +%
    +% This is called from \donoderef, \anchor, and \dofloat.  In the case of
    +% floats, there is an additional part, which is not written here:
    +% 4) NAME-lof   - the text as it should appear in a @listoffloats.
    +%
    +\def\setref#1#2{%
    +  \pdfmkdest{#1}%
    +  \iflinks
    +    {%
    +      \requireauxfile
    +      \atdummies  % preserve commands, but don't expand them
    +      % match definition in \xrdef, \refx, \xrefX.
    +      \def\value##1{##1}%
    +      \edef\writexrdef##1##2{%
    +	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
    +	  ##1}{##2}}% these are parameters of \writexrdef
    +      }%
    +      \toks0 = \expandafter{\currentsection}%
    +      \immediate \writexrdef{title}{\the\toks0 }%
    +      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
    +      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
    +    }%
    +  \fi
    +}
    +
    +% @xrefautosectiontitle on|off says whether @section(ing) names are used
    +% automatically in xrefs, if the third arg is not explicitly specified.
    +% This was provided as a "secret" @set xref-automatic-section-title
    +% variable, now it's official.
    +%
    +\parseargdef\xrefautomaticsectiontitle{%
    +  \def\temp{#1}%
    +  \ifx\temp\onword
    +    \expandafter\let\csname SETxref-automatic-section-title\endcsname
    +      = \empty
    +  \else\ifx\temp\offword
    +    \expandafter\let\csname SETxref-automatic-section-title\endcsname
    +      = \relax
    +  \else
    +    \errhelp = \EMsimple
    +    \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
    +                must be on|off}%
    +  \fi\fi
    +}
    +
    +%
    +% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
    +% the node name, #2 the name of the Info cross-reference, #3 the printed
    +% node name, #4 the name of the Info file, #5 the name of the printed
    +% manual.  All but the node name can be omitted.
    +%
    +\def\pxref{\putwordsee{} \xrefXX}
    +\def\xref{\putwordSee{} \xrefXX}
    +\def\ref{\xrefXX}
    +
    +\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
    +\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
    +%
    +\newbox\toprefbox
    +\newbox\printedrefnamebox
    +\newbox\infofilenamebox
    +\newbox\printedmanualbox
    +%
    +\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
    +  \unsepspaces
    +  %
    +  % Get args without leading/trailing spaces.
    +  \def\printedrefname{\ignorespaces #3}%
    +  \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
    +  %
    +  \def\infofilename{\ignorespaces #4}%
    +  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
    +  %
    +  \def\printedmanual{\ignorespaces #5}%
    +  \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
    +  %
    +  % If the printed reference name (arg #3) was not explicitly given in
    +  % the @xref, figure out what we want to use.
    +  \ifdim \wd\printedrefnamebox = 0pt
    +    % No printed node name was explicitly given.
    +    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
    +      % Not auto section-title: use node name inside the square brackets.
    +      \def\printedrefname{\ignorespaces #1}%
    +    \else
    +      % Auto section-title: use chapter/section title inside
    +      % the square brackets if we have it.
    +      \ifdim \wd\printedmanualbox > 0pt
    +        % It is in another manual, so we don't have it; use node name.
    +        \def\printedrefname{\ignorespaces #1}%
    +      \else
    +        \ifhavexrefs
    +          % We (should) know the real title if we have the xref values.
    +          \def\printedrefname{\refx{#1-title}{}}%
    +        \else
    +          % Otherwise just copy the Info node name.
    +          \def\printedrefname{\ignorespaces #1}%
    +        \fi%
    +      \fi
    +    \fi
    +  \fi
    +  %
    +  % Make link in pdf output.
    +  \ifpdf
    +    % For pdfTeX and LuaTeX
    +    {\indexnofonts
    +     \makevalueexpandable
    +     \turnoffactive
    +     % This expands tokens, so do it after making catcode changes, so _
    +     % etc. don't get their TeX definitions.  This ignores all spaces in
    +     % #4, including (wrongly) those in the middle of the filename.
    +     \getfilename{#4}%
    +     %
    +     % This (wrongly) does not take account of leading or trailing
    +     % spaces in #1, which should be ignored.
    +     \setpdfdestname{#1}%
    +     %
    +     \ifx\pdfdestname\empty
    +       \def\pdfdestname{Top}% no empty targets
    +     \fi
    +     %
    +     \leavevmode
    +     \startlink attr{/Border [0 0 0]}%
    +     \ifnum\filenamelength>0
    +       goto file{\the\filename.pdf} name{\pdfdestname}%
    +     \else
    +       goto name{\pdfmkpgn{\pdfdestname}}%
    +     \fi
    +    }%
    +    \setcolor{\linkcolor}%
    +  \else
    +    \ifx\XeTeXrevision\thisisundefined
    +    \else
    +      % For XeTeX
    +      {\indexnofonts
    +       \makevalueexpandable
    +       \turnoffactive
    +       % This expands tokens, so do it after making catcode changes, so _
    +       % etc. don't get their TeX definitions.  This ignores all spaces in
    +       % #4, including (wrongly) those in the middle of the filename.
    +       \getfilename{#4}%
    +       %
    +       % This (wrongly) does not take account of leading or trailing
    +       % spaces in #1, which should be ignored.
    +       \setpdfdestname{#1}%
    +       %
    +       \ifx\pdfdestname\empty
    +         \def\pdfdestname{Top}% no empty targets
    +       \fi
    +       %
    +       \leavevmode
    +       \ifnum\filenamelength>0
    +         % With default settings,
    +         % XeTeX (xdvipdfmx) replaces link destination names with integers.
    +         % In this case, the replaced destination names of
    +         % remote PDFs are no longer known.  In order to avoid a replacement,
    +         % you can use xdvipdfmx's command line option `-C 0x0010'.
    +         % If you use XeTeX 0.99996+ (TeX Live 2016+),
    +         % this command line option is no longer necessary
    +         % because we can use the `dvipdfmx:config' special.
    +         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
    +           << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
    +       \else
    +         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
    +           << /S /GoTo /D (\pdfdestname) >> >>}%
    +       \fi
    +      }%
    +      \setcolor{\linkcolor}%
    +    \fi
    +  \fi
    +  {%
    +    % Have to otherify everything special to allow the \csname to
    +    % include an _ in the xref name, etc.
    +    \indexnofonts
    +    \turnoffactive
    +    \def\value##1{##1}%
    +    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
    +      \csname XR#1-title\endcsname
    +  }%
    +  %
    +  % Float references are printed completely differently: "Figure 1.2"
    +  % instead of "[somenode], p.3".  \iffloat distinguishes them by
    +  % \Xthisreftitle being set to a magic string.
    +  \iffloat\Xthisreftitle
    +    % If the user specified the print name (third arg) to the ref,
    +    % print it instead of our usual "Figure 1.2".
    +    \ifdim\wd\printedrefnamebox = 0pt
    +      \refx{#1-snt}{}%
    +    \else
    +      \printedrefname
    +    \fi
    +    %
    +    % If the user also gave the printed manual name (fifth arg), append
    +    % "in MANUALNAME".
    +    \ifdim \wd\printedmanualbox > 0pt
    +      \space \putwordin{} \cite{\printedmanual}%
    +    \fi
    +  \else
    +    % node/anchor (non-float) references.
    +    %
    +    % If we use \unhbox to print the node names, TeX does not insert
    +    % empty discretionaries after hyphens, which means that it will not
    +    % find a line break at a hyphen in a node names.  Since some manuals
    +    % are best written with fairly long node names, containing hyphens,
    +    % this is a loss.  Therefore, we give the text of the node name
    +    % again, so it is as if TeX is seeing it for the first time.
    +    %
    +    \ifdim \wd\printedmanualbox > 0pt
    +      % Cross-manual reference with a printed manual name.
    +      %
    +      \crossmanualxref{\cite{\printedmanual\unskip}}%
    +    %
    +    \else\ifdim \wd\infofilenamebox > 0pt
    +      % Cross-manual reference with only an info filename (arg 4), no
    +      % printed manual name (arg 5).  This is essentially the same as
    +      % the case above; we output the filename, since we have nothing else.
    +      %
    +      \crossmanualxref{\code{\infofilename\unskip}}%
    +    %
    +    \else
    +      % Reference within this manual.
    +      %
    +      % Only output a following space if the -snt ref is nonempty; for
    +      % @unnumbered and @anchor, it won't be.
    +      \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
    +      \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
    +      %
    +      % output the `[mynode]' via the macro below so it can be overridden.
    +      \xrefprintnodename\printedrefname
    +      %
    +      % But we always want a comma and a space:
    +      ,\space
    +      %
    +      % output the `page 3'.
    +      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
    +      % Add a , if xref followed by a space
    +      \if\space\noexpand\tokenafterxref ,%
    +      \else\ifx\	\tokenafterxref ,% @TAB
    +      \else\ifx\*\tokenafterxref ,%   @*
    +      \else\ifx\ \tokenafterxref ,%   @SPACE
    +      \else\ifx\
    +                \tokenafterxref ,%    @NL
    +      \else\ifx\tie\tokenafterxref ,% @tie
    +      \fi\fi\fi\fi\fi\fi
    +    \fi\fi
    +  \fi
    +  \endlink
    +\endgroup}
    +
    +% Output a cross-manual xref to #1.  Used just above (twice).
    +%
    +% Only include the text "Section ``foo'' in" if the foo is neither
    +% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
    +% "see The Foo Manual", the idea being to refer to the whole manual.
    +%
    +% But, this being TeX, we can't easily compare our node name against the
    +% string "Top" while ignoring the possible spaces before and after in
    +% the input.  By adding the arbitrary 7sp below, we make it much less
    +% likely that a real node name would have the same width as "Top" (e.g.,
    +% in a monospaced font).  Hopefully it will never happen in practice.
    +%
    +% For the same basic reason, we retypeset the "Top" at every
    +% reference, since the current font is indeterminate.
    +%
    +\def\crossmanualxref#1{%
    +  \setbox\toprefbox = \hbox{Top\kern7sp}%
    +  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
    +  \ifdim \wd2 > 7sp  % nonempty?
    +    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
    +      \putwordSection{} ``\printedrefname'' \putwordin{}\space
    +    \fi
    +  \fi
    +  #1%
    +}
    +
    +% This macro is called from \xrefX for the `[nodename]' part of xref
    +% output.  It's a separate macro only so it can be changed more easily,
    +% since square brackets don't work well in some documents.  Particularly
    +% one that Bob is working on :).
    +%
    +\def\xrefprintnodename#1{[#1]}
    +
    +% Things referred to by \setref.
    +%
    +\def\Ynothing{}
    +\def\Yomitfromtoc{}
    +\def\Ynumbered{%
    +  \ifnum\secno=0
    +    \putwordChapter@tie \the\chapno
    +  \else \ifnum\subsecno=0
    +    \putwordSection@tie \the\chapno.\the\secno
    +  \else \ifnum\subsubsecno=0
    +    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
    +  \else
    +    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
    +  \fi\fi\fi
    +}
    +\def\Yappendix{%
    +  \ifnum\secno=0
    +     \putwordAppendix@tie @char\the\appendixno{}%
    +  \else \ifnum\subsecno=0
    +     \putwordSection@tie @char\the\appendixno.\the\secno
    +  \else \ifnum\subsubsecno=0
    +    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
    +  \else
    +    \putwordSection@tie
    +      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
    +  \fi\fi\fi
    +}
    +
    +% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME.  SUFFIX
    +% is output afterwards if non-empty.
    +\def\refx#1#2{%
    +  \requireauxfile
    +  {%
    +    \indexnofonts
    +    \turnoffactive
    +    \def\value##1{##1}%
    +    \expandafter\global\expandafter\let\expandafter\thisrefX
    +      \csname XR#1\endcsname
    +  }%
    +  \ifx\thisrefX\relax
    +    % If not defined, say something at least.
    +    \angleleft un\-de\-fined\angleright
    +    \iflinks
    +      \ifhavexrefs
    +        {\toks0 = {#1}% avoid expansion of possibly-complex value
    +         \message{\linenumber Undefined cross reference `\the\toks0'.}}%
    +      \else
    +        \ifwarnedxrefs\else
    +          \global\warnedxrefstrue
    +          \message{Cross reference values unknown; you must run TeX again.}%
    +        \fi
    +      \fi
    +    \fi
    +  \else
    +    % It's defined, so just use it.
    +    \thisrefX
    +  \fi
    +  #2% Output the suffix in any case.
    +}
    +
    +% This is the macro invoked by entries in the aux file.  Define a control
    +% sequence for a cross-reference target (we prepend XR to the control sequence
    +% name to avoid collisions).  The value is the page number.  If this is a float
    +% type, we have more work to do.
    +%
    +\def\xrdef#1#2{%
    +  {% Expand the node or anchor name to remove control sequences.
    +   % \turnoffactive stops 8-bit characters being changed to commands
    +   % like @'e.  \refx does the same to retrieve the value in the definition.
    +    \indexnofonts
    +    \turnoffactive
    +    \def\value##1{##1}%
    +    \xdef\safexrefname{#1}%
    +  }%
    +  %
    +  \bgroup
    +    \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
    +  \egroup
    +  % We put the \gdef inside a group to avoid the definitions building up on
    +  % TeX's save stack, which can cause it to run out of space for aux files with
    +  % thousands of lines.  \gdef doesn't use the save stack, but \csname does
    +  % when it defines an unknown control sequence as \relax.
    +  %
    +  % Was that xref control sequence that we just defined for a float?
    +  \expandafter\iffloat\csname XR\safexrefname\endcsname
    +    % it was a float, and we have the (safe) float type in \iffloattype.
    +    \expandafter\let\expandafter\floatlist
    +      \csname floatlist\iffloattype\endcsname
    +    %
    +    % Is this the first time we've seen this float type?
    +    \expandafter\ifx\floatlist\relax
    +      \toks0 = {\do}% yes, so just \do
    +    \else
    +      % had it before, so preserve previous elements in list.
    +      \toks0 = \expandafter{\floatlist\do}%
    +    \fi
    +    %
    +    % Remember this xref in the control sequence \floatlistFLOATTYPE,
    +    % for later use in \listoffloats.
    +    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
    +      {\safexrefname}}%
    +  \fi
    +}
    +
    +% If working on a large document in chapters, it is convenient to
    +% be able to disable indexing, cross-referencing, and contents, for test runs.
    +% This is done with @novalidate at the beginning of the file.
    +%
    +\newif\iflinks \linkstrue % by default we want the aux files.
    +\let\novalidate = \linksfalse
    +
    +% Used when writing to the aux file, or when using data from it.
    +\def\requireauxfile{%
    +  \iflinks
    +    \tryauxfile
    +    % Open the new aux file.  TeX will close it automatically at exit.
    +    \immediate\openout\auxfile=\jobname.aux
    +  \fi
    +  \global\let\requireauxfile=\relax   % Only do this once.
    +}
    +
    +% Read the last existing aux file, if any.  No error if none exists.
    +%
    +\def\tryauxfile{%
    +  \openin 1 \jobname.aux
    +  \ifeof 1 \else
    +    \readdatafile{aux}%
    +    \global\havexrefstrue
    +  \fi
    +  \closein 1
    +}
    +
    +\def\setupdatafile{%
    +  \catcode`\^^@=\other
    +  \catcode`\^^A=\other
    +  \catcode`\^^B=\other
    +  \catcode`\^^C=\other
    +  \catcode`\^^D=\other
    +  \catcode`\^^E=\other
    +  \catcode`\^^F=\other
    +  \catcode`\^^G=\other
    +  \catcode`\^^H=\other
    +  \catcode`\^^K=\other
    +  \catcode`\^^L=\other
    +  \catcode`\^^N=\other
    +  \catcode`\^^P=\other
    +  \catcode`\^^Q=\other
    +  \catcode`\^^R=\other
    +  \catcode`\^^S=\other
    +  \catcode`\^^T=\other
    +  \catcode`\^^U=\other
    +  \catcode`\^^V=\other
    +  \catcode`\^^W=\other
    +  \catcode`\^^X=\other
    +  \catcode`\^^Z=\other
    +  \catcode`\^^[=\other
    +  \catcode`\^^\=\other
    +  \catcode`\^^]=\other
    +  \catcode`\^^^=\other
    +  \catcode`\^^_=\other
    +  \catcode`\^=\other
    +  %
    +  % Special characters.  Should be turned off anyway, but...
    +  \catcode`\~=\other
    +  \catcode`\[=\other
    +  \catcode`\]=\other
    +  \catcode`\"=\other
    +  \catcode`\_=\other
    +  \catcode`\|=\other
    +  \catcode`\<=\other
    +  \catcode`\>=\other
    +  \catcode`\$=\other
    +  \catcode`\#=\other
    +  \catcode`\&=\other
    +  \catcode`\%=\other
    +  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
    +  %
    +  \catcode`\\=\active
    +  %
    +  % @ is our escape character in .aux files, and we need braces.
    +  \catcode`\{=1
    +  \catcode`\}=2
    +  \catcode`\@=0
    +}
    +
    +\def\readdatafile#1{%
    +\begingroup
    +  \setupdatafile
    +  \input\jobname.#1
    +\endgroup}
    +
    +
    +\message{insertions,}
    +% including footnotes.
    +
    +\newcount \footnoteno
    +
    +% The trailing space in the following definition for supereject is
    +% vital for proper filling; pages come out unaligned when you do a
    +% pagealignmacro call if that space before the closing brace is
    +% removed. (Generally, numeric constants should always be followed by a
    +% space to prevent strange expansion errors.)
    +\def\supereject{\par\penalty -20000\footnoteno =0 }
    +
    +% @footnotestyle is meaningful for Info output only.
    +\let\footnotestyle=\comment
    +
    +{\catcode `\@=11
    +%
    +% Auto-number footnotes.  Otherwise like plain.
    +\gdef\footnote{%
    +  \global\advance\footnoteno by \@ne
    +  \edef\thisfootno{$^{\the\footnoteno}$}%
    +  %
    +  % In case the footnote comes at the end of a sentence, preserve the
    +  % extra spacing after we do the footnote number.
    +  \let\@sf\empty
    +  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
    +  %
    +  % Remove inadvertent blank space before typesetting the footnote number.
    +  \unskip
    +  \thisfootno\@sf
    +  \dofootnote
    +}%
    +
    +% Don't bother with the trickery in plain.tex to not require the
    +% footnote text as a parameter.  Our footnotes don't need to be so general.
    +%
    +% Oh yes, they do; otherwise, @ifset (and anything else that uses
    +% \parseargline) fails inside footnotes because the tokens are fixed when
    +% the footnote is read.  --karl, 16nov96.
    +%
    +\gdef\dofootnote{%
    +  \insert\footins\bgroup
    +  %
    +  % Nested footnotes are not supported in TeX, that would take a lot
    +  % more work.  (\startsavinginserts does not suffice.)
    +  \let\footnote=\errfootnotenest
    +  %
    +  % We want to typeset this text as a normal paragraph, even if the
    +  % footnote reference occurs in (for example) a display environment.
    +  % So reset some parameters.
    +  \hsize=\txipagewidth
    +  \interlinepenalty\interfootnotelinepenalty
    +  \splittopskip\ht\strutbox % top baseline for broken footnotes
    +  \splitmaxdepth\dp\strutbox
    +  \floatingpenalty\@MM
    +  \leftskip\z@skip
    +  \rightskip\z@skip
    +  \spaceskip\z@skip
    +  \xspaceskip\z@skip
    +  \parindent\defaultparindent
    +  %
    +  \smallfonts \rm
    +  %
    +  % Because we use hanging indentation in footnotes, a @noindent appears
    +  % to exdent this text, so make it be a no-op.  makeinfo does not use
    +  % hanging indentation so @noindent can still be needed within footnote
    +  % text after an @example or the like (not that this is good style).
    +  \let\noindent = \relax
    +  %
    +  % Hang the footnote text off the number.  Use \everypar in case the
    +  % footnote extends for more than one paragraph.
    +  \everypar = {\hang}%
    +  \textindent{\thisfootno}%
    +  %
    +  % Don't crash into the line above the footnote text.  Since this
    +  % expands into a box, it must come within the paragraph, lest it
    +  % provide a place where TeX can split the footnote.
    +  \footstrut
    +  %
    +  % Invoke rest of plain TeX footnote routine.
    +  \futurelet\next\fo@t
    +}
    +}%end \catcode `\@=11
    +
    +\def\errfootnotenest{%
    +  \errhelp=\EMsimple
    +  \errmessage{Nested footnotes not supported in texinfo.tex,
    +    even though they work in makeinfo; sorry}
    +}
    +
    +\def\errfootnoteheading{%
    +  \errhelp=\EMsimple
    +  \errmessage{Footnotes in chapters, sections, etc., are not supported}
    +}
    +
    +% In case a @footnote appears in a vbox, save the footnote text and create
    +% the real \insert just after the vbox finished.  Otherwise, the insertion
    +% would be lost.
    +% Similarly, if a @footnote appears inside an alignment, save the footnote
    +% text to a box and make the \insert when a row of the table is finished.
    +% And the same can be done for other insert classes.  --kasal, 16nov03.
    +%
    +% Replace the \insert primitive by a cheating macro.
    +% Deeper inside, just make sure that the saved insertions are not spilled
    +% out prematurely.
    +%
    +\def\startsavinginserts{%
    +  \ifx \insert\ptexinsert
    +    \let\insert\saveinsert
    +  \else
    +    \let\checkinserts\relax
    +  \fi
    +}
    +
    +% This \insert replacement works for both \insert\footins{foo} and
    +% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
    +%
    +\def\saveinsert#1{%
    +  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
    +  \afterassignment\next
    +  % swallow the left brace
    +  \let\temp =
    +}
    +\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
    +\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
    +
    +\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
    +
    +\def\placesaveins#1{%
    +  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
    +    {\box#1}%
    +}
    +
    +% eat @SAVE -- beware, all of them have catcode \other:
    +{
    +  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
    +  \gdef\gobblesave @SAVE{}
    +}
    +
    +% initialization:
    +\def\newsaveins #1{%
    +  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
    +  \next
    +}
    +\def\newsaveinsX #1{%
    +  \csname newbox\endcsname #1%
    +  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
    +    \checksaveins #1}%
    +}
    +
    +% initialize:
    +\let\checkinserts\empty
    +\newsaveins\footins
    +\newsaveins\margin
    +
    +
    +% @image.  We use the macros from epsf.tex to support this.
    +% If epsf.tex is not installed and @image is used, we complain.
    +%
    +% Check for and read epsf.tex up front.  If we read it only at @image
    +% time, we might be inside a group, and then its definitions would get
    +% undone and the next image would fail.
    +\openin 1 = epsf.tex
    +\ifeof 1 \else
    +  % Do not bother showing banner with epsf.tex v2.7k (available in
    +  % doc/epsf.tex and on ctan).
    +  \def\epsfannounce{\toks0 = }%
    +  \input epsf.tex
    +\fi
    +\closein 1
    +%
    +% We will only complain once about lack of epsf.tex.
    +\newif\ifwarnednoepsf
    +\newhelp\noepsfhelp{epsf.tex must be installed for images to
    +  work.  It is also included in the Texinfo distribution, or you can get
    +  it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
    +%
    +\def\image#1{%
    +  \ifx\epsfbox\thisisundefined
    +    \ifwarnednoepsf \else
    +      \errhelp = \noepsfhelp
    +      \errmessage{epsf.tex not found, images will be ignored}%
    +      \global\warnednoepsftrue
    +    \fi
    +  \else
    +    \imagexxx #1,,,,,\finish
    +  \fi
    +}
    +%
    +% Arguments to @image:
    +% #1 is (mandatory) image filename; we tack on .eps extension.
    +% #2 is (optional) width, #3 is (optional) height.
    +% #4 is (ignored optional) html alt text.
    +% #5 is (ignored optional) extension.
    +% #6 is just the usual extra ignored arg for parsing stuff.
    +\newif\ifimagevmode
    +\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
    +  \catcode`\^^M = 5     % in case we're inside an example
    +  \normalturnoffactive  % allow _ et al. in names
    +  \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
    +  % If the image is by itself, center it.
    +  \ifvmode
    +    \imagevmodetrue
    +  \else \ifx\centersub\centerV
    +    % for @center @image, we need a vbox so we can have our vertical space
    +    \imagevmodetrue
    +    \vbox\bgroup % vbox has better behavior than vtop herev
    +  \fi\fi
    +  %
    +  \ifimagevmode
    +    \nobreak\medskip
    +    % Usually we'll have text after the image which will insert
    +    % \parskip glue, so insert it here too to equalize the space
    +    % above and below.
    +    \nobreak\vskip\parskip
    +    \nobreak
    +  \fi
    +  %
    +  % Leave vertical mode so that indentation from an enclosing
    +  %  environment such as @quotation is respected.
    +  % However, if we're at the top level, we don't want the
    +  %  normal paragraph indentation.
    +  % On the other hand, if we are in the case of @center @image, we don't
    +  %  want to start a paragraph, which will create a hsize-width box and
    +  %  eradicate the centering.
    +  \ifx\centersub\centerV\else \noindent \fi
    +  %
    +  % Output the image.
    +  \ifpdf
    +    % For pdfTeX and LuaTeX <= 0.80
    +    \dopdfimage{#1}{#2}{#3}%
    +  \else
    +    \ifx\XeTeXrevision\thisisundefined
    +      % For epsf.tex
    +      % \epsfbox itself resets \epsf?size at each figure.
    +      \setbox0 = \hbox{\ignorespaces #2}%
    +        \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
    +      \setbox0 = \hbox{\ignorespaces #3}%
    +        \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
    +      \epsfbox{#1.eps}%
    +    \else
    +      % For XeTeX
    +      \doxeteximage{#1}{#2}{#3}%
    +    \fi
    +  \fi
    +  %
    +  \ifimagevmode
    +    \medskip  % space after a standalone image
    +  \fi
    +  \ifx\centersub\centerV \egroup \fi
    +\endgroup}
    +
    +
    +% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
    +% etc.  We don't actually implement floating yet, we always include the
    +% float "here".  But it seemed the best name for the future.
    +%
    +\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
    +
    +% There may be a space before second and/or third parameter; delete it.
    +\def\eatcommaspace#1, {#1,}
    +
    +% #1 is the optional FLOATTYPE, the text label for this float, typically
    +% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
    +% this float will not be numbered and cannot be referred to.
    +%
    +% #2 is the optional xref label.  Also must be present for the float to
    +% be referable.
    +%
    +% #3 is the optional positioning argument; for now, it is ignored.  It
    +% will somehow specify the positions allowed to float to (here, top, bottom).
    +%
    +% We keep a separate counter for each FLOATTYPE, which we reset at each
    +% chapter-level command.
    +\let\resetallfloatnos=\empty
    +%
    +\def\dofloat#1,#2,#3,#4\finish{%
    +  \let\thiscaption=\empty
    +  \let\thisshortcaption=\empty
    +  %
    +  % don't lose footnotes inside @float.
    +  %
    +  % BEWARE: when the floats start float, we have to issue warning whenever an
    +  % insert appears inside a float which could possibly float. --kasal, 26may04
    +  %
    +  \startsavinginserts
    +  %
    +  % We can't be used inside a paragraph.
    +  \par
    +  %
    +  \vtop\bgroup
    +    \def\floattype{#1}%
    +    \def\floatlabel{#2}%
    +    \def\floatloc{#3}% we do nothing with this yet.
    +    %
    +    \ifx\floattype\empty
    +      \let\safefloattype=\empty
    +    \else
    +      {%
    +        % the floattype might have accents or other special characters,
    +        % but we need to use it in a control sequence name.
    +        \indexnofonts
    +        \turnoffactive
    +        \xdef\safefloattype{\floattype}%
    +      }%
    +    \fi
    +    %
    +    % If label is given but no type, we handle that as the empty type.
    +    \ifx\floatlabel\empty \else
    +      % We want each FLOATTYPE to be numbered separately (Figure 1,
    +      % Table 1, Figure 2, ...).  (And if no label, no number.)
    +      %
    +      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
    +      \global\advance\floatno by 1
    +      %
    +      {%
    +        % This magic value for \currentsection is output by \setref as the
    +        % XREFLABEL-title value.  \xrefX uses it to distinguish float
    +        % labels (which have a completely different output format) from
    +        % node and anchor labels.  And \xrdef uses it to construct the
    +        % lists of floats.
    +        %
    +        \edef\currentsection{\floatmagic=\safefloattype}%
    +        \setref{\floatlabel}{Yfloat}%
    +      }%
    +    \fi
    +    %
    +    % start with \parskip glue, I guess.
    +    \vskip\parskip
    +    %
    +    % Don't suppress indentation if a float happens to start a section.
    +    \restorefirstparagraphindent
    +}
    +
    +% we have these possibilities:
    +% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
    +% @float Foo,lbl & no caption:    Foo 1.1
    +% @float Foo & @caption{Cap}:     Foo: Cap
    +% @float Foo & no caption:        Foo
    +% @float ,lbl & Caption{Cap}:     1.1: Cap
    +% @float ,lbl & no caption:       1.1
    +% @float & @caption{Cap}:         Cap
    +% @float & no caption:
    +%
    +\def\Efloat{%
    +    \let\floatident = \empty
    +    %
    +    % In all cases, if we have a float type, it comes first.
    +    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
    +    %
    +    % If we have an xref label, the number comes next.
    +    \ifx\floatlabel\empty \else
    +      \ifx\floattype\empty \else % if also had float type, need tie first.
    +        \appendtomacro\floatident{\tie}%
    +      \fi
    +      % the number.
    +      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
    +    \fi
    +    %
    +    % Start the printed caption with what we've constructed in
    +    % \floatident, but keep it separate; we need \floatident again.
    +    \let\captionline = \floatident
    +    %
    +    \ifx\thiscaption\empty \else
    +      \ifx\floatident\empty \else
    +        \appendtomacro\captionline{: }% had ident, so need a colon between
    +      \fi
    +      %
    +      % caption text.
    +      \appendtomacro\captionline{\scanexp\thiscaption}%
    +    \fi
    +    %
    +    % If we have anything to print, print it, with space before.
    +    % Eventually this needs to become an \insert.
    +    \ifx\captionline\empty \else
    +      \vskip.5\parskip
    +      \captionline
    +      %
    +      % Space below caption.
    +      \vskip\parskip
    +    \fi
    +    %
    +    % If have an xref label, write the list of floats info.  Do this
    +    % after the caption, to avoid chance of it being a breakpoint.
    +    \ifx\floatlabel\empty \else
    +      % Write the text that goes in the lof to the aux file as
    +      % \floatlabel-lof.  Besides \floatident, we include the short
    +      % caption if specified, else the full caption if specified, else nothing.
    +      {%
    +        \requireauxfile
    +        \atdummies
    +        %
    +        \ifx\thisshortcaption\empty
    +          \def\gtemp{\thiscaption}%
    +        \else
    +          \def\gtemp{\thisshortcaption}%
    +        \fi
    +        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
    +          \ifx\gtemp\empty \else : \gtemp \fi}}%
    +      }%
    +    \fi
    +  \egroup  % end of \vtop
    +  %
    +  \checkinserts
    +}
    +
    +% Append the tokens #2 to the definition of macro #1, not expanding either.
    +%
    +\def\appendtomacro#1#2{%
    +  \expandafter\def\expandafter#1\expandafter{#1#2}%
    +}
    +
    +% @caption, @shortcaption
    +%
    +\def\caption{\docaption\thiscaption}
    +\def\shortcaption{\docaption\thisshortcaption}
    +\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
    +\def\defcaption#1#2{\egroup \def#1{#2}}
    +
    +% The parameter is the control sequence identifying the counter we are
    +% going to use.  Create it if it doesn't exist and assign it to \floatno.
    +\def\getfloatno#1{%
    +  \ifx#1\relax
    +      % Haven't seen this figure type before.
    +      \csname newcount\endcsname #1%
    +      %
    +      % Remember to reset this floatno at the next chap.
    +      \expandafter\gdef\expandafter\resetallfloatnos
    +        \expandafter{\resetallfloatnos #1=0 }%
    +  \fi
    +  \let\floatno#1%
    +}
    +
    +% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
    +% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
    +% first read the @float command.
    +%
    +\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
    +
    +% Magic string used for the XREFLABEL-title value, so \xrefX can
    +% distinguish floats from other xref types.
    +\def\floatmagic{!!float!!}
    +
    +% #1 is the control sequence we are passed; we expand into a conditional
    +% which is true if #1 represents a float ref.  That is, the magic
    +% \currentsection value which we \setref above.
    +%
    +\def\iffloat#1{\expandafter\doiffloat#1==\finish}
    +%
    +% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
    +% (safe) float type for this float.  We set \iffloattype to #2.
    +%
    +\def\doiffloat#1=#2=#3\finish{%
    +  \def\temp{#1}%
    +  \def\iffloattype{#2}%
    +  \ifx\temp\floatmagic
    +}
    +
    +% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
    +%
    +\parseargdef\listoffloats{%
    +  \def\floattype{#1}% floattype
    +  {%
    +    % the floattype might have accents or other special characters,
    +    % but we need to use it in a control sequence name.
    +    \indexnofonts
    +    \turnoffactive
    +    \xdef\safefloattype{\floattype}%
    +  }%
    +  %
    +  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
    +  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
    +    \ifhavexrefs
    +      % if the user said @listoffloats foo but never @float foo.
    +      \message{\linenumber No `\safefloattype' floats to list.}%
    +    \fi
    +  \else
    +    \begingroup
    +      \leftskip=\tocindent  % indent these entries like a toc
    +      \let\do=\listoffloatsdo
    +      \csname floatlist\safefloattype\endcsname
    +    \endgroup
    +  \fi
    +}
    +
    +% This is called on each entry in a list of floats.  We're passed the
    +% xref label, in the form LABEL-title, which is how we save it in the
    +% aux file.  We strip off the -title and look up \XRLABEL-lof, which
    +% has the text we're supposed to typeset here.
    +%
    +% Figures without xref labels will not be included in the list (since
    +% they won't appear in the aux file).
    +%
    +\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
    +\def\listoffloatsdoentry#1-title\finish{{%
    +  % Can't fully expand XR#1-lof because it can contain anything.  Just
    +  % pass the control sequence.  On the other hand, XR#1-pg is just the
    +  % page number, and we want to fully expand that so we can get a link
    +  % in pdf output.
    +  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
    +  %
    +  % use the same \entry macro we use to generate the TOC and index.
    +  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
    +  \writeentry
    +}}
    +
    +
    +\message{localization,}
    +
    +% For single-language documents, @documentlanguage is usually given very
    +% early, just after @documentencoding.  Single argument is the language
    +% (de) or locale (de_DE) abbreviation.
    +%
    +{
    +  \catcode`\_ = \active
    +  \globaldefs=1
    +\parseargdef\documentlanguage{%
    +  \tex % read txi-??.tex file in plain TeX.
    +    % Read the file by the name they passed if it exists.
    +    \let_ = \normalunderscore  % normal _ character for filename test
    +    \openin 1 txi-#1.tex
    +    \ifeof 1
    +      \documentlanguagetrywithoutunderscore #1_\finish
    +    \else
    +      \globaldefs = 1  % everything in the txi-LL files needs to persist
    +      \input txi-#1.tex
    +    \fi
    +    \closein 1
    +  \endgroup % end raw TeX
    +}
    +%
    +% If they passed de_DE, and txi-de_DE.tex doesn't exist,
    +% try txi-de.tex.
    +%
    +\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
    +  \openin 1 txi-#1.tex
    +  \ifeof 1
    +    \errhelp = \nolanghelp
    +    \errmessage{Cannot read language file txi-#1.tex}%
    +  \else
    +    \globaldefs = 1  % everything in the txi-LL files needs to persist
    +    \input txi-#1.tex
    +  \fi
    +  \closein 1
    +}
    +}% end of special _ catcode
    +%
    +\newhelp\nolanghelp{The given language definition file cannot be found or
    +is empty.  Maybe you need to install it?  Putting it in the current
    +directory should work if nowhere else does.}
    +
    +% This macro is called from txi-??.tex files; the first argument is the
    +% \language name to set (without the "\lang@" prefix), the second and
    +% third args are \{left,right}hyphenmin.
    +%
    +% The language names to pass are determined when the format is built.
    +% See the etex.log file created at that time, e.g.,
    +% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
    +%
    +% With TeX Live 2008, etex now includes hyphenation patterns for all
    +% available languages.  This means we can support hyphenation in
    +% Texinfo, at least to some extent.  (This still doesn't solve the
    +% accented characters problem.)
    +%
    +\catcode`@=11
    +\def\txisetlanguage#1#2#3{%
    +  % do not set the language if the name is undefined in the current TeX.
    +  \expandafter\ifx\csname lang@#1\endcsname \relax
    +    \message{no patterns for #1}%
    +  \else
    +    \global\language = \csname lang@#1\endcsname
    +  \fi
    +  % but there is no harm in adjusting the hyphenmin values regardless.
    +  \global\lefthyphenmin = #2\relax
    +  \global\righthyphenmin = #3\relax
    +}
    +
    +% XeTeX and LuaTeX can handle Unicode natively.
    +% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
    +% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
    +%
    +\newif\iftxinativeunicodecapable
    +\newif\iftxiusebytewiseio
    +
    +\ifx\XeTeXrevision\thisisundefined
    +  \ifx\luatexversion\thisisundefined
    +    \txinativeunicodecapablefalse
    +    \txiusebytewiseiotrue
    +  \else
    +    \txinativeunicodecapabletrue
    +    \txiusebytewiseiofalse
    +  \fi
    +\else
    +  \txinativeunicodecapabletrue
    +  \txiusebytewiseiofalse
    +\fi
    +
    +% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
    +% for non-UTF-8 (byte-wise) encodings.
    +%
    +\def\setbytewiseio{%
    +  \ifx\XeTeXrevision\thisisundefined
    +  \else
    +    \XeTeXdefaultencoding "bytes"  % For subsequent files to be read
    +    \XeTeXinputencoding "bytes"  % For document root file
    +    % Unfortunately, there seems to be no corresponding XeTeX command for
    +    % output encoding.  This is a problem for auxiliary index and TOC files.
    +    % The only solution would be perhaps to write out @U{...} sequences in
    +    % place of non-ASCII characters.
    +  \fi
    +
    +  \ifx\luatexversion\thisisundefined
    +  \else
    +    \directlua{
    +    local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
    +    local function convert_char (char)
    +      return utf8_char(byte(char))
    +    end
    +
    +    local function convert_line (line)
    +      return gsub(line, ".", convert_char)
    +    end
    +
    +    callback.register("process_input_buffer", convert_line)
    +
    +    local function convert_line_out (line)
    +      local line_out = ""
    +      for c in string.utfvalues(line) do
    +         line_out = line_out .. string.char(c)
    +      end
    +      return line_out
    +    end
    +
    +    callback.register("process_output_buffer", convert_line_out)
    +    }
    +  \fi
    +
    +  \txiusebytewiseiotrue
    +}
    +
    +
    +% Helpers for encodings.
    +% Set the catcode of characters 128 through 255 to the specified number.
    +%
    +\def\setnonasciicharscatcode#1{%
    +   \count255=128
    +   \loop\ifnum\count255<256
    +      \global\catcode\count255=#1\relax
    +      \advance\count255 by 1
    +   \repeat
    +}
    +
    +\def\setnonasciicharscatcodenonglobal#1{%
    +   \count255=128
    +   \loop\ifnum\count255<256
    +      \catcode\count255=#1\relax
    +      \advance\count255 by 1
    +   \repeat
    +}
    +
    +% @documentencoding sets the definition of non-ASCII characters
    +% according to the specified encoding.
    +%
    +\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
    +\def\documentencodingzzz#1{%
    +  %
    +  % Encoding being declared for the document.
    +  \def\declaredencoding{\csname #1.enc\endcsname}%
    +  %
    +  % Supported encodings: names converted to tokens in order to be able
    +  % to compare them with \ifx.
    +  \def\ascii{\csname US-ASCII.enc\endcsname}%
    +  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
    +  \def\latone{\csname ISO-8859-1.enc\endcsname}%
    +  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
    +  \def\utfeight{\csname UTF-8.enc\endcsname}%
    +  %
    +  \ifx \declaredencoding \ascii
    +     \asciichardefs
    +  %
    +  \else \ifx \declaredencoding \lattwo
    +     \iftxinativeunicodecapable
    +       \setbytewiseio
    +     \fi
    +     \setnonasciicharscatcode\active
    +     \lattwochardefs
    +  %
    +  \else \ifx \declaredencoding \latone
    +     \iftxinativeunicodecapable
    +       \setbytewiseio
    +     \fi
    +     \setnonasciicharscatcode\active
    +     \latonechardefs
    +  %
    +  \else \ifx \declaredencoding \latnine
    +     \iftxinativeunicodecapable
    +       \setbytewiseio
    +     \fi
    +     \setnonasciicharscatcode\active
    +     \latninechardefs
    +  %
    +  \else \ifx \declaredencoding \utfeight
    +     \iftxinativeunicodecapable
    +       % For native Unicode handling (XeTeX and LuaTeX)
    +       \nativeunicodechardefs
    +     \else
    +       % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX)
    +       \setnonasciicharscatcode\active
    +       % since we already invoked \utfeightchardefs at the top level
    +       % (below), do not re-invoke it, otherwise our check for duplicated
    +       % definitions gets triggered.  Making non-ascii chars active is
    +       % sufficient.
    +     \fi
    +  %
    +  \else
    +    \message{Ignoring unknown document encoding: #1.}%
    +  %
    +  \fi % utfeight
    +  \fi % latnine
    +  \fi % latone
    +  \fi % lattwo
    +  \fi % ascii
    +  %
    +  \ifx\XeTeXrevision\thisisundefined
    +  \else
    +    \ifx \declaredencoding \utfeight
    +    \else
    +      \ifx \declaredencoding \ascii
    +      \else
    +        \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
    +        non-ASCII characters in auxiliary files.}%
    +      \fi
    +    \fi
    +  \fi
    +}
    +
    +% emacs-page
    +% A message to be logged when using a character that isn't available
    +% the default font encoding (OT1).
    +%
    +\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
    +
    +% Take account of \c (plain) vs. \, (Texinfo) difference.
    +\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
    +
    +% First, make active non-ASCII characters in order for them to be
    +% correctly categorized when TeX reads the replacement text of
    +% macros containing the character definitions.
    +\setnonasciicharscatcode\active
    +%
    +
    +\def\gdefchar#1#2{%
    +\gdef#1{%
    +   \ifpassthroughchars
    +     \string#1%
    +   \else
    +     #2%
    +   \fi
    +}}
    +
    +% Latin1 (ISO-8859-1) character definitions.
    +\def\latonechardefs{%
    +  \gdefchar^^a0{\tie}
    +  \gdefchar^^a1{\exclamdown}
    +  \gdefchar^^a2{{\tcfont \char162}} % cent
    +  \gdefchar^^a3{\pounds{}}
    +  \gdefchar^^a4{{\tcfont \char164}} % currency
    +  \gdefchar^^a5{{\tcfont \char165}} % yen
    +  \gdefchar^^a6{{\tcfont \char166}} % broken bar
    +  \gdefchar^^a7{\S}
    +  \gdefchar^^a8{\"{}}
    +  \gdefchar^^a9{\copyright{}}
    +  \gdefchar^^aa{\ordf}
    +  \gdefchar^^ab{\guillemetleft{}}
    +  \gdefchar^^ac{\ensuremath\lnot}
    +  \gdefchar^^ad{\-}
    +  \gdefchar^^ae{\registeredsymbol{}}
    +  \gdefchar^^af{\={}}
    +  %
    +  \gdefchar^^b0{\textdegree}
    +  \gdefchar^^b1{$\pm$}
    +  \gdefchar^^b2{$^2$}
    +  \gdefchar^^b3{$^3$}
    +  \gdefchar^^b4{\'{}}
    +  \gdefchar^^b5{$\mu$}
    +  \gdefchar^^b6{\P}
    +  \gdefchar^^b7{\ensuremath\cdot}
    +  \gdefchar^^b8{\cedilla\ }
    +  \gdefchar^^b9{$^1$}
    +  \gdefchar^^ba{\ordm}
    +  \gdefchar^^bb{\guillemetright{}}
    +  \gdefchar^^bc{$1\over4$}
    +  \gdefchar^^bd{$1\over2$}
    +  \gdefchar^^be{$3\over4$}
    +  \gdefchar^^bf{\questiondown}
    +  %
    +  \gdefchar^^c0{\`A}
    +  \gdefchar^^c1{\'A}
    +  \gdefchar^^c2{\^A}
    +  \gdefchar^^c3{\~A}
    +  \gdefchar^^c4{\"A}
    +  \gdefchar^^c5{\ringaccent A}
    +  \gdefchar^^c6{\AE}
    +  \gdefchar^^c7{\cedilla C}
    +  \gdefchar^^c8{\`E}
    +  \gdefchar^^c9{\'E}
    +  \gdefchar^^ca{\^E}
    +  \gdefchar^^cb{\"E}
    +  \gdefchar^^cc{\`I}
    +  \gdefchar^^cd{\'I}
    +  \gdefchar^^ce{\^I}
    +  \gdefchar^^cf{\"I}
    +  %
    +  \gdefchar^^d0{\DH}
    +  \gdefchar^^d1{\~N}
    +  \gdefchar^^d2{\`O}
    +  \gdefchar^^d3{\'O}
    +  \gdefchar^^d4{\^O}
    +  \gdefchar^^d5{\~O}
    +  \gdefchar^^d6{\"O}
    +  \gdefchar^^d7{$\times$}
    +  \gdefchar^^d8{\O}
    +  \gdefchar^^d9{\`U}
    +  \gdefchar^^da{\'U}
    +  \gdefchar^^db{\^U}
    +  \gdefchar^^dc{\"U}
    +  \gdefchar^^dd{\'Y}
    +  \gdefchar^^de{\TH}
    +  \gdefchar^^df{\ss}
    +  %
    +  \gdefchar^^e0{\`a}
    +  \gdefchar^^e1{\'a}
    +  \gdefchar^^e2{\^a}
    +  \gdefchar^^e3{\~a}
    +  \gdefchar^^e4{\"a}
    +  \gdefchar^^e5{\ringaccent a}
    +  \gdefchar^^e6{\ae}
    +  \gdefchar^^e7{\cedilla c}
    +  \gdefchar^^e8{\`e}
    +  \gdefchar^^e9{\'e}
    +  \gdefchar^^ea{\^e}
    +  \gdefchar^^eb{\"e}
    +  \gdefchar^^ec{\`{\dotless i}}
    +  \gdefchar^^ed{\'{\dotless i}}
    +  \gdefchar^^ee{\^{\dotless i}}
    +  \gdefchar^^ef{\"{\dotless i}}
    +  %
    +  \gdefchar^^f0{\dh}
    +  \gdefchar^^f1{\~n}
    +  \gdefchar^^f2{\`o}
    +  \gdefchar^^f3{\'o}
    +  \gdefchar^^f4{\^o}
    +  \gdefchar^^f5{\~o}
    +  \gdefchar^^f6{\"o}
    +  \gdefchar^^f7{$\div$}
    +  \gdefchar^^f8{\o}
    +  \gdefchar^^f9{\`u}
    +  \gdefchar^^fa{\'u}
    +  \gdefchar^^fb{\^u}
    +  \gdefchar^^fc{\"u}
    +  \gdefchar^^fd{\'y}
    +  \gdefchar^^fe{\th}
    +  \gdefchar^^ff{\"y}
    +}
    +
    +% Latin9 (ISO-8859-15) encoding character definitions.
    +\def\latninechardefs{%
    +  % Encoding is almost identical to Latin1.
    +  \latonechardefs
    +  %
    +  \gdefchar^^a4{\euro{}}
    +  \gdefchar^^a6{\v S}
    +  \gdefchar^^a8{\v s}
    +  \gdefchar^^b4{\v Z}
    +  \gdefchar^^b8{\v z}
    +  \gdefchar^^bc{\OE}
    +  \gdefchar^^bd{\oe}
    +  \gdefchar^^be{\"Y}
    +}
    +
    +% Latin2 (ISO-8859-2) character definitions.
    +\def\lattwochardefs{%
    +  \gdefchar^^a0{\tie}
    +  \gdefchar^^a1{\ogonek{A}}
    +  \gdefchar^^a2{\u{}}
    +  \gdefchar^^a3{\L}
    +  \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
    +  \gdefchar^^a5{\v L}
    +  \gdefchar^^a6{\'S}
    +  \gdefchar^^a7{\S}
    +  \gdefchar^^a8{\"{}}
    +  \gdefchar^^a9{\v S}
    +  \gdefchar^^aa{\cedilla S}
    +  \gdefchar^^ab{\v T}
    +  \gdefchar^^ac{\'Z}
    +  \gdefchar^^ad{\-}
    +  \gdefchar^^ae{\v Z}
    +  \gdefchar^^af{\dotaccent Z}
    +  %
    +  \gdefchar^^b0{\textdegree{}}
    +  \gdefchar^^b1{\ogonek{a}}
    +  \gdefchar^^b2{\ogonek{ }}
    +  \gdefchar^^b3{\l}
    +  \gdefchar^^b4{\'{}}
    +  \gdefchar^^b5{\v l}
    +  \gdefchar^^b6{\'s}
    +  \gdefchar^^b7{\v{}}
    +  \gdefchar^^b8{\cedilla\ }
    +  \gdefchar^^b9{\v s}
    +  \gdefchar^^ba{\cedilla s}
    +  \gdefchar^^bb{\v t}
    +  \gdefchar^^bc{\'z}
    +  \gdefchar^^bd{\H{}}
    +  \gdefchar^^be{\v z}
    +  \gdefchar^^bf{\dotaccent z}
    +  %
    +  \gdefchar^^c0{\'R}
    +  \gdefchar^^c1{\'A}
    +  \gdefchar^^c2{\^A}
    +  \gdefchar^^c3{\u A}
    +  \gdefchar^^c4{\"A}
    +  \gdefchar^^c5{\'L}
    +  \gdefchar^^c6{\'C}
    +  \gdefchar^^c7{\cedilla C}
    +  \gdefchar^^c8{\v C}
    +  \gdefchar^^c9{\'E}
    +  \gdefchar^^ca{\ogonek{E}}
    +  \gdefchar^^cb{\"E}
    +  \gdefchar^^cc{\v E}
    +  \gdefchar^^cd{\'I}
    +  \gdefchar^^ce{\^I}
    +  \gdefchar^^cf{\v D}
    +  %
    +  \gdefchar^^d0{\DH}
    +  \gdefchar^^d1{\'N}
    +  \gdefchar^^d2{\v N}
    +  \gdefchar^^d3{\'O}
    +  \gdefchar^^d4{\^O}
    +  \gdefchar^^d5{\H O}
    +  \gdefchar^^d6{\"O}
    +  \gdefchar^^d7{$\times$}
    +  \gdefchar^^d8{\v R}
    +  \gdefchar^^d9{\ringaccent U}
    +  \gdefchar^^da{\'U}
    +  \gdefchar^^db{\H U}
    +  \gdefchar^^dc{\"U}
    +  \gdefchar^^dd{\'Y}
    +  \gdefchar^^de{\cedilla T}
    +  \gdefchar^^df{\ss}
    +  %
    +  \gdefchar^^e0{\'r}
    +  \gdefchar^^e1{\'a}
    +  \gdefchar^^e2{\^a}
    +  \gdefchar^^e3{\u a}
    +  \gdefchar^^e4{\"a}
    +  \gdefchar^^e5{\'l}
    +  \gdefchar^^e6{\'c}
    +  \gdefchar^^e7{\cedilla c}
    +  \gdefchar^^e8{\v c}
    +  \gdefchar^^e9{\'e}
    +  \gdefchar^^ea{\ogonek{e}}
    +  \gdefchar^^eb{\"e}
    +  \gdefchar^^ec{\v e}
    +  \gdefchar^^ed{\'{\dotless{i}}}
    +  \gdefchar^^ee{\^{\dotless{i}}}
    +  \gdefchar^^ef{\v d}
    +  %
    +  \gdefchar^^f0{\dh}
    +  \gdefchar^^f1{\'n}
    +  \gdefchar^^f2{\v n}
    +  \gdefchar^^f3{\'o}
    +  \gdefchar^^f4{\^o}
    +  \gdefchar^^f5{\H o}
    +  \gdefchar^^f6{\"o}
    +  \gdefchar^^f7{$\div$}
    +  \gdefchar^^f8{\v r}
    +  \gdefchar^^f9{\ringaccent u}
    +  \gdefchar^^fa{\'u}
    +  \gdefchar^^fb{\H u}
    +  \gdefchar^^fc{\"u}
    +  \gdefchar^^fd{\'y}
    +  \gdefchar^^fe{\cedilla t}
    +  \gdefchar^^ff{\dotaccent{}}
    +}
    +
    +% UTF-8 character definitions.
    +%
    +% This code to support UTF-8 is based on LaTeX's utf8.def, with some
    +% changes for Texinfo conventions.  It is included here under the GPL by
    +% permission from Frank Mittelbach and the LaTeX team.
    +%
    +\newcount\countUTFx
    +\newcount\countUTFy
    +\newcount\countUTFz
    +
    +\gdef\UTFviiiTwoOctets#1#2{\expandafter
    +   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
    +%
    +\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
    +   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
    +%
    +\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
    +   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
    +
    +\gdef\UTFviiiDefined#1{%
    +  \ifx #1\relax
    +    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
    +  \else
    +    \expandafter #1%
    +  \fi
    +}
    +
    +% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
    +\begingroup
    +  \catcode`\~13
    +  \catcode`\$12
    +  \catcode`\"12
    +
    +  % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
    +  % substituting ~ and $ with a character token of that value.
    +  \def\UTFviiiLoop{%
    +    \global\catcode\countUTFx\active
    +    \uccode`\~\countUTFx
    +    \uccode`\$\countUTFx
    +    \uppercase\expandafter{\UTFviiiTmp}%
    +    \advance\countUTFx by 1
    +    \ifnum\countUTFx < \countUTFy
    +      \expandafter\UTFviiiLoop
    +    \fi}
    +
    +  % For bytes other than the first in a UTF-8 sequence.  Not expected to
    +  % be expanded except when writing to auxiliary files.
    +  \countUTFx = "80
    +  \countUTFy = "C2
    +  \def\UTFviiiTmp{%
    +    \gdef~{%
    +        \ifpassthroughchars $\fi}}%
    +  \UTFviiiLoop
    +
    +  \countUTFx = "C2
    +  \countUTFy = "E0
    +  \def\UTFviiiTmp{%
    +    \gdef~{%
    +        \ifpassthroughchars $%
    +        \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
    +  \UTFviiiLoop
    +
    +  \countUTFx = "E0
    +  \countUTFy = "F0
    +  \def\UTFviiiTmp{%
    +    \gdef~{%
    +        \ifpassthroughchars $%
    +        \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
    +  \UTFviiiLoop
    +
    +  \countUTFx = "F0
    +  \countUTFy = "F4
    +  \def\UTFviiiTmp{%
    +    \gdef~{%
    +        \ifpassthroughchars $%
    +        \else\expandafter\UTFviiiFourOctets\expandafter$\fi
    +        }}%
    +  \UTFviiiLoop
    +\endgroup
    +
    +\def\globallet{\global\let} % save some \expandafter's below
    +
    +% @U{xxxx} to produce U+xxxx, if we support it.
    +\def\U#1{%
    +  \expandafter\ifx\csname uni:#1\endcsname \relax
    +    \iftxinativeunicodecapable
    +      % All Unicode characters can be used if native Unicode handling is
    +      % active.  However, if the font does not have the glyph,
    +      % letters are missing.
    +      \begingroup
    +        \uccode`\.="#1\relax
    +        \uppercase{.}
    +      \endgroup
    +    \else
    +      \errhelp = \EMsimple
    +      \errmessage{Unicode character U+#1 not supported, sorry}%
    +    \fi
    +  \else
    +    \csname uni:#1\endcsname
    +  \fi
    +}
    +
    +% These macros are used here to construct the name of a control
    +% sequence to be defined.
    +\def\UTFviiiTwoOctetsName#1#2{%
    +  \csname u8:#1\string #2\endcsname}%
    +\def\UTFviiiThreeOctetsName#1#2#3{%
    +  \csname u8:#1\string #2\string #3\endcsname}%
    +\def\UTFviiiFourOctetsName#1#2#3#4{%
    +  \csname u8:#1\string #2\string #3\string #4\endcsname}%
    +
    +% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
    +% provide a definition macro to replace a Unicode character;
    +% this gets used by the @U command
    +%
    +\begingroup
    +  \catcode`\"=12
    +  \catcode`\<=12
    +  \catcode`\.=12
    +  \catcode`\,=12
    +  \catcode`\;=12
    +  \catcode`\!=12
    +  \catcode`\~=13
    +  \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
    +    \countUTFz = "#1\relax
    +    \begingroup
    +      \parseXMLCharref
    +
    +      % Give \u8:... its definition.  The sequence of seven \expandafter's
    +      % expands after the \gdef three times, e.g.
    +      %
    +      % 1.  \UTFviiTwoOctetsName B1 B2
    +      % 2.  \csname u8:B1 \string B2 \endcsname
    +      % 3.  \u8: B1 B2  (a single control sequence token)
    +      %
    +      \expandafter\expandafter
    +      \expandafter\expandafter
    +      \expandafter\expandafter
    +      \expandafter\gdef       \UTFviiiTmp{#2}%
    +      %
    +      \expandafter\ifx\csname uni:#1\endcsname \relax \else
    +       \message{Internal error, already defined: #1}%
    +      \fi
    +      %
    +      % define an additional control sequence for this code point.
    +      \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
    +    \endgroup}
    +  %
    +  % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
    +  % to the corresponding UTF-8 sequence.
    +  \gdef\parseXMLCharref{%
    +    \ifnum\countUTFz < "A0\relax
    +      \errhelp = \EMsimple
    +      \errmessage{Cannot define Unicode char value < 00A0}%
    +    \else\ifnum\countUTFz < "800\relax
    +      \parseUTFviiiA,%
    +      \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
    +    \else\ifnum\countUTFz < "10000\relax
    +      \parseUTFviiiA;%
    +      \parseUTFviiiA,%
    +      \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
    +    \else
    +      \parseUTFviiiA;%
    +      \parseUTFviiiA,%
    +      \parseUTFviiiA!%
    +      \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
    +    \fi\fi\fi
    +  }
    +
    +  % Extract a byte from the end of the UTF-8 representation of \countUTFx.
    +  % It must be a non-initial byte in the sequence.
    +  % Change \uccode of #1 for it to be used in \parseUTFviiiB as one
    +  % of the bytes.
    +  \gdef\parseUTFviiiA#1{%
    +    \countUTFx = \countUTFz
    +    \divide\countUTFz by 64
    +    \countUTFy = \countUTFz  % Save to be the future value of \countUTFz.
    +    \multiply\countUTFz by 64
    +
    +    % \countUTFz is now \countUTFx with the last 5 bits cleared.  Subtract
    +    % in order to get the last five bits.
    +    \advance\countUTFx by -\countUTFz
    +
    +    % Convert this to the byte in the UTF-8 sequence.
    +    \advance\countUTFx by 128
    +    \uccode `#1\countUTFx
    +    \countUTFz = \countUTFy}
    +
    +  % Used to put a UTF-8 byte sequence into \UTFviiiTmp
    +  % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
    +  %    sequence.
    +  % #2 is one of the \UTFviii*OctetsName macros.
    +  % #3 is always a full stop (.)
    +  % #4 is a template for the other bytes in the sequence.  The values for these
    +  %    bytes is substituted in here with \uppercase using the \uccode's.
    +  \gdef\parseUTFviiiB#1#2#3#4{%
    +    \advance\countUTFz by "#10\relax
    +    \uccode `#3\countUTFz
    +    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
    +\endgroup
    +
    +% For native Unicode handling (XeTeX and LuaTeX),
    +% provide a definition macro that sets a catcode to `other' non-globally
    +%
    +\def\DeclareUnicodeCharacterNativeOther#1#2{%
    +  \catcode"#1=\other
    +}
    +
    +% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
    +% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
    +% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
    +% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
    +% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
    +%
    +% Many of our renditions are less than wonderful, and all the missing
    +% characters are available somewhere.  Loading the necessary fonts
    +% awaits user request.  We can't truly support Unicode without
    +% reimplementing everything that's been done in LaTeX for many years,
    +% plus probably using luatex or xetex, and who knows what else.
    +% We won't be doing that here in this simple file.  But we can try to at
    +% least make most of the characters not bomb out.
    +%
    +\def\unicodechardefs{%
    +  \DeclareUnicodeCharacter{00A0}{\tie}%
    +  \DeclareUnicodeCharacter{00A1}{\exclamdown}%
    +  \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
    +  \DeclareUnicodeCharacter{00A3}{\pounds{}}%
    +  \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
    +  \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
    +  \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
    +  \DeclareUnicodeCharacter{00A7}{\S}%
    +  \DeclareUnicodeCharacter{00A8}{\"{ }}%
    +  \DeclareUnicodeCharacter{00A9}{\copyright{}}%
    +  \DeclareUnicodeCharacter{00AA}{\ordf}%
    +  \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
    +  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
    +  \DeclareUnicodeCharacter{00AD}{\-}%
    +  \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
    +  \DeclareUnicodeCharacter{00AF}{\={ }}%
    +  %
    +  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
    +  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
    +  \DeclareUnicodeCharacter{00B2}{$^2$}%
    +  \DeclareUnicodeCharacter{00B3}{$^3$}%
    +  \DeclareUnicodeCharacter{00B4}{\'{ }}%
    +  \DeclareUnicodeCharacter{00B5}{$\mu$}%
    +  \DeclareUnicodeCharacter{00B6}{\P}%
    +  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
    +  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
    +  \DeclareUnicodeCharacter{00B9}{$^1$}%
    +  \DeclareUnicodeCharacter{00BA}{\ordm}%
    +  \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
    +  \DeclareUnicodeCharacter{00BC}{$1\over4$}%
    +  \DeclareUnicodeCharacter{00BD}{$1\over2$}%
    +  \DeclareUnicodeCharacter{00BE}{$3\over4$}%
    +  \DeclareUnicodeCharacter{00BF}{\questiondown}%
    +  %
    +  \DeclareUnicodeCharacter{00C0}{\`A}%
    +  \DeclareUnicodeCharacter{00C1}{\'A}%
    +  \DeclareUnicodeCharacter{00C2}{\^A}%
    +  \DeclareUnicodeCharacter{00C3}{\~A}%
    +  \DeclareUnicodeCharacter{00C4}{\"A}%
    +  \DeclareUnicodeCharacter{00C5}{\AA}%
    +  \DeclareUnicodeCharacter{00C6}{\AE}%
    +  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
    +  \DeclareUnicodeCharacter{00C8}{\`E}%
    +  \DeclareUnicodeCharacter{00C9}{\'E}%
    +  \DeclareUnicodeCharacter{00CA}{\^E}%
    +  \DeclareUnicodeCharacter{00CB}{\"E}%
    +  \DeclareUnicodeCharacter{00CC}{\`I}%
    +  \DeclareUnicodeCharacter{00CD}{\'I}%
    +  \DeclareUnicodeCharacter{00CE}{\^I}%
    +  \DeclareUnicodeCharacter{00CF}{\"I}%
    +  %
    +  \DeclareUnicodeCharacter{00D0}{\DH}%
    +  \DeclareUnicodeCharacter{00D1}{\~N}%
    +  \DeclareUnicodeCharacter{00D2}{\`O}%
    +  \DeclareUnicodeCharacter{00D3}{\'O}%
    +  \DeclareUnicodeCharacter{00D4}{\^O}%
    +  \DeclareUnicodeCharacter{00D5}{\~O}%
    +  \DeclareUnicodeCharacter{00D6}{\"O}%
    +  \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
    +  \DeclareUnicodeCharacter{00D8}{\O}%
    +  \DeclareUnicodeCharacter{00D9}{\`U}%
    +  \DeclareUnicodeCharacter{00DA}{\'U}%
    +  \DeclareUnicodeCharacter{00DB}{\^U}%
    +  \DeclareUnicodeCharacter{00DC}{\"U}%
    +  \DeclareUnicodeCharacter{00DD}{\'Y}%
    +  \DeclareUnicodeCharacter{00DE}{\TH}%
    +  \DeclareUnicodeCharacter{00DF}{\ss}%
    +  %
    +  \DeclareUnicodeCharacter{00E0}{\`a}%
    +  \DeclareUnicodeCharacter{00E1}{\'a}%
    +  \DeclareUnicodeCharacter{00E2}{\^a}%
    +  \DeclareUnicodeCharacter{00E3}{\~a}%
    +  \DeclareUnicodeCharacter{00E4}{\"a}%
    +  \DeclareUnicodeCharacter{00E5}{\aa}%
    +  \DeclareUnicodeCharacter{00E6}{\ae}%
    +  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
    +  \DeclareUnicodeCharacter{00E8}{\`e}%
    +  \DeclareUnicodeCharacter{00E9}{\'e}%
    +  \DeclareUnicodeCharacter{00EA}{\^e}%
    +  \DeclareUnicodeCharacter{00EB}{\"e}%
    +  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
    +  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
    +  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
    +  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
    +  %
    +  \DeclareUnicodeCharacter{00F0}{\dh}%
    +  \DeclareUnicodeCharacter{00F1}{\~n}%
    +  \DeclareUnicodeCharacter{00F2}{\`o}%
    +  \DeclareUnicodeCharacter{00F3}{\'o}%
    +  \DeclareUnicodeCharacter{00F4}{\^o}%
    +  \DeclareUnicodeCharacter{00F5}{\~o}%
    +  \DeclareUnicodeCharacter{00F6}{\"o}%
    +  \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
    +  \DeclareUnicodeCharacter{00F8}{\o}%
    +  \DeclareUnicodeCharacter{00F9}{\`u}%
    +  \DeclareUnicodeCharacter{00FA}{\'u}%
    +  \DeclareUnicodeCharacter{00FB}{\^u}%
    +  \DeclareUnicodeCharacter{00FC}{\"u}%
    +  \DeclareUnicodeCharacter{00FD}{\'y}%
    +  \DeclareUnicodeCharacter{00FE}{\th}%
    +  \DeclareUnicodeCharacter{00FF}{\"y}%
    +  %
    +  \DeclareUnicodeCharacter{0100}{\=A}%
    +  \DeclareUnicodeCharacter{0101}{\=a}%
    +  \DeclareUnicodeCharacter{0102}{\u{A}}%
    +  \DeclareUnicodeCharacter{0103}{\u{a}}%
    +  \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
    +  \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
    +  \DeclareUnicodeCharacter{0106}{\'C}%
    +  \DeclareUnicodeCharacter{0107}{\'c}%
    +  \DeclareUnicodeCharacter{0108}{\^C}%
    +  \DeclareUnicodeCharacter{0109}{\^c}%
    +  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
    +  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
    +  \DeclareUnicodeCharacter{010C}{\v{C}}%
    +  \DeclareUnicodeCharacter{010D}{\v{c}}%
    +  \DeclareUnicodeCharacter{010E}{\v{D}}%
    +  \DeclareUnicodeCharacter{010F}{d'}%
    +  %
    +  \DeclareUnicodeCharacter{0110}{\DH}%
    +  \DeclareUnicodeCharacter{0111}{\dh}%
    +  \DeclareUnicodeCharacter{0112}{\=E}%
    +  \DeclareUnicodeCharacter{0113}{\=e}%
    +  \DeclareUnicodeCharacter{0114}{\u{E}}%
    +  \DeclareUnicodeCharacter{0115}{\u{e}}%
    +  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
    +  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
    +  \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
    +  \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
    +  \DeclareUnicodeCharacter{011A}{\v{E}}%
    +  \DeclareUnicodeCharacter{011B}{\v{e}}%
    +  \DeclareUnicodeCharacter{011C}{\^G}%
    +  \DeclareUnicodeCharacter{011D}{\^g}%
    +  \DeclareUnicodeCharacter{011E}{\u{G}}%
    +  \DeclareUnicodeCharacter{011F}{\u{g}}%
    +  %
    +  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
    +  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
    +  \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
    +  \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
    +  \DeclareUnicodeCharacter{0124}{\^H}%
    +  \DeclareUnicodeCharacter{0125}{\^h}%
    +  \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
    +  \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
    +  \DeclareUnicodeCharacter{0128}{\~I}%
    +  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
    +  \DeclareUnicodeCharacter{012A}{\=I}%
    +  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
    +  \DeclareUnicodeCharacter{012C}{\u{I}}%
    +  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
    +  \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
    +  \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
    +  %
    +  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
    +  \DeclareUnicodeCharacter{0131}{\dotless{i}}%
    +  \DeclareUnicodeCharacter{0132}{IJ}%
    +  \DeclareUnicodeCharacter{0133}{ij}%
    +  \DeclareUnicodeCharacter{0134}{\^J}%
    +  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
    +  \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
    +  \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
    +  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
    +  \DeclareUnicodeCharacter{0139}{\'L}%
    +  \DeclareUnicodeCharacter{013A}{\'l}%
    +  \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
    +  \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
    +  \DeclareUnicodeCharacter{013D}{L'}% should kern
    +  \DeclareUnicodeCharacter{013E}{l'}% should kern
    +  \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
    +  %
    +  \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
    +  \DeclareUnicodeCharacter{0141}{\L}%
    +  \DeclareUnicodeCharacter{0142}{\l}%
    +  \DeclareUnicodeCharacter{0143}{\'N}%
    +  \DeclareUnicodeCharacter{0144}{\'n}%
    +  \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
    +  \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
    +  \DeclareUnicodeCharacter{0147}{\v{N}}%
    +  \DeclareUnicodeCharacter{0148}{\v{n}}%
    +  \DeclareUnicodeCharacter{0149}{'n}%
    +  \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
    +  \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
    +  \DeclareUnicodeCharacter{014C}{\=O}%
    +  \DeclareUnicodeCharacter{014D}{\=o}%
    +  \DeclareUnicodeCharacter{014E}{\u{O}}%
    +  \DeclareUnicodeCharacter{014F}{\u{o}}%
    +  %
    +  \DeclareUnicodeCharacter{0150}{\H{O}}%
    +  \DeclareUnicodeCharacter{0151}{\H{o}}%
    +  \DeclareUnicodeCharacter{0152}{\OE}%
    +  \DeclareUnicodeCharacter{0153}{\oe}%
    +  \DeclareUnicodeCharacter{0154}{\'R}%
    +  \DeclareUnicodeCharacter{0155}{\'r}%
    +  \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
    +  \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
    +  \DeclareUnicodeCharacter{0158}{\v{R}}%
    +  \DeclareUnicodeCharacter{0159}{\v{r}}%
    +  \DeclareUnicodeCharacter{015A}{\'S}%
    +  \DeclareUnicodeCharacter{015B}{\'s}%
    +  \DeclareUnicodeCharacter{015C}{\^S}%
    +  \DeclareUnicodeCharacter{015D}{\^s}%
    +  \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
    +  \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
    +  %
    +  \DeclareUnicodeCharacter{0160}{\v{S}}%
    +  \DeclareUnicodeCharacter{0161}{\v{s}}%
    +  \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
    +  \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
    +  \DeclareUnicodeCharacter{0164}{\v{T}}%
    +  \DeclareUnicodeCharacter{0165}{\v{t}}%
    +  \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
    +  \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
    +  \DeclareUnicodeCharacter{0168}{\~U}%
    +  \DeclareUnicodeCharacter{0169}{\~u}%
    +  \DeclareUnicodeCharacter{016A}{\=U}%
    +  \DeclareUnicodeCharacter{016B}{\=u}%
    +  \DeclareUnicodeCharacter{016C}{\u{U}}%
    +  \DeclareUnicodeCharacter{016D}{\u{u}}%
    +  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
    +  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
    +  %
    +  \DeclareUnicodeCharacter{0170}{\H{U}}%
    +  \DeclareUnicodeCharacter{0171}{\H{u}}%
    +  \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
    +  \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
    +  \DeclareUnicodeCharacter{0174}{\^W}%
    +  \DeclareUnicodeCharacter{0175}{\^w}%
    +  \DeclareUnicodeCharacter{0176}{\^Y}%
    +  \DeclareUnicodeCharacter{0177}{\^y}%
    +  \DeclareUnicodeCharacter{0178}{\"Y}%
    +  \DeclareUnicodeCharacter{0179}{\'Z}%
    +  \DeclareUnicodeCharacter{017A}{\'z}%
    +  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
    +  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
    +  \DeclareUnicodeCharacter{017D}{\v{Z}}%
    +  \DeclareUnicodeCharacter{017E}{\v{z}}%
    +  \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
    +  %
    +  \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
    +  \DeclareUnicodeCharacter{01C5}{D\v{z}}%
    +  \DeclareUnicodeCharacter{01C6}{d\v{z}}%
    +  \DeclareUnicodeCharacter{01C7}{LJ}%
    +  \DeclareUnicodeCharacter{01C8}{Lj}%
    +  \DeclareUnicodeCharacter{01C9}{lj}%
    +  \DeclareUnicodeCharacter{01CA}{NJ}%
    +  \DeclareUnicodeCharacter{01CB}{Nj}%
    +  \DeclareUnicodeCharacter{01CC}{nj}%
    +  \DeclareUnicodeCharacter{01CD}{\v{A}}%
    +  \DeclareUnicodeCharacter{01CE}{\v{a}}%
    +  \DeclareUnicodeCharacter{01CF}{\v{I}}%
    +  %
    +  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
    +  \DeclareUnicodeCharacter{01D1}{\v{O}}%
    +  \DeclareUnicodeCharacter{01D2}{\v{o}}%
    +  \DeclareUnicodeCharacter{01D3}{\v{U}}%
    +  \DeclareUnicodeCharacter{01D4}{\v{u}}%
    +  %
    +  \DeclareUnicodeCharacter{01E2}{\={\AE}}%
    +  \DeclareUnicodeCharacter{01E3}{\={\ae}}%
    +  \DeclareUnicodeCharacter{01E6}{\v{G}}%
    +  \DeclareUnicodeCharacter{01E7}{\v{g}}%
    +  \DeclareUnicodeCharacter{01E8}{\v{K}}%
    +  \DeclareUnicodeCharacter{01E9}{\v{k}}%
    +  %
    +  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
    +  \DeclareUnicodeCharacter{01F1}{DZ}%
    +  \DeclareUnicodeCharacter{01F2}{Dz}%
    +  \DeclareUnicodeCharacter{01F3}{dz}%
    +  \DeclareUnicodeCharacter{01F4}{\'G}%
    +  \DeclareUnicodeCharacter{01F5}{\'g}%
    +  \DeclareUnicodeCharacter{01F8}{\`N}%
    +  \DeclareUnicodeCharacter{01F9}{\`n}%
    +  \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
    +  \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
    +  \DeclareUnicodeCharacter{01FE}{\'{\O}}%
    +  \DeclareUnicodeCharacter{01FF}{\'{\o}}%
    +  %
    +  \DeclareUnicodeCharacter{021E}{\v{H}}%
    +  \DeclareUnicodeCharacter{021F}{\v{h}}%
    +  %
    +  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
    +  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
    +  \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
    +  \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
    +  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
    +  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
    +  %
    +  \DeclareUnicodeCharacter{0232}{\=Y}%
    +  \DeclareUnicodeCharacter{0233}{\=y}%
    +  \DeclareUnicodeCharacter{0237}{\dotless{j}}%
    +  %
    +  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
    +  %
    +  % Greek letters upper case
    +  \DeclareUnicodeCharacter{0391}{{\it A}}%
    +  \DeclareUnicodeCharacter{0392}{{\it B}}%
    +  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
    +  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
    +  \DeclareUnicodeCharacter{0395}{{\it E}}%
    +  \DeclareUnicodeCharacter{0396}{{\it Z}}%
    +  \DeclareUnicodeCharacter{0397}{{\it H}}%
    +  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
    +  \DeclareUnicodeCharacter{0399}{{\it I}}%
    +  \DeclareUnicodeCharacter{039A}{{\it K}}%
    +  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
    +  \DeclareUnicodeCharacter{039C}{{\it M}}%
    +  \DeclareUnicodeCharacter{039D}{{\it N}}%
    +  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
    +  \DeclareUnicodeCharacter{039F}{{\it O}}%
    +  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
    +  \DeclareUnicodeCharacter{03A1}{{\it P}}%
    +  %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
    +  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
    +  \DeclareUnicodeCharacter{03A4}{{\it T}}%
    +  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
    +  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
    +  \DeclareUnicodeCharacter{03A7}{{\it X}}%
    +  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
    +  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
    +  %
    +  % Vowels with accents
    +  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
    +  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
    +  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
    +  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
    +  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
    +  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
    +  %
    +  % Standalone accent
    +  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
    +  %
    +  % Greek letters lower case
    +  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
    +  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
    +  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
    +  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
    +  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
    +  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
    +  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
    +  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
    +  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
    +  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
    +  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
    +  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
    +  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
    +  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
    +  \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
    +  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
    +  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
    +  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
    +  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
    +  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
    +  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
    +  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
    +  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
    +  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
    +  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
    +  %
    +  % More Greek vowels with accents
    +  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
    +  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
    +  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
    +  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
    +  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
    +  %
    +  % Variant Greek letters
    +  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
    +  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
    +  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
    +  %
    +  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
    +  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
    +  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
    +  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
    +  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
    +  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
    +  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
    +  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
    +  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
    +  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
    +  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
    +  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
    +  %
    +  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
    +  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
    +  %
    +  \DeclareUnicodeCharacter{1E20}{\=G}%
    +  \DeclareUnicodeCharacter{1E21}{\=g}%
    +  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
    +  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
    +  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
    +  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
    +  \DeclareUnicodeCharacter{1E26}{\"H}%
    +  \DeclareUnicodeCharacter{1E27}{\"h}%
    +  %
    +  \DeclareUnicodeCharacter{1E30}{\'K}%
    +  \DeclareUnicodeCharacter{1E31}{\'k}%
    +  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
    +  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
    +  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
    +  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
    +  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
    +  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
    +  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
    +  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
    +  \DeclareUnicodeCharacter{1E3E}{\'M}%
    +  \DeclareUnicodeCharacter{1E3F}{\'m}%
    +  %
    +  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
    +  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
    +  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
    +  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
    +  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
    +  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
    +  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
    +  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
    +  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
    +  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
    +  %
    +  \DeclareUnicodeCharacter{1E54}{\'P}%
    +  \DeclareUnicodeCharacter{1E55}{\'p}%
    +  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
    +  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
    +  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
    +  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
    +  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
    +  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
    +  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
    +  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
    +  %
    +  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
    +  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
    +  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
    +  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
    +  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
    +  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
    +  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
    +  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
    +  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
    +  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
    +  %
    +  \DeclareUnicodeCharacter{1E7C}{\~V}%
    +  \DeclareUnicodeCharacter{1E7D}{\~v}%
    +  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
    +  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
    +  %
    +  \DeclareUnicodeCharacter{1E80}{\`W}%
    +  \DeclareUnicodeCharacter{1E81}{\`w}%
    +  \DeclareUnicodeCharacter{1E82}{\'W}%
    +  \DeclareUnicodeCharacter{1E83}{\'w}%
    +  \DeclareUnicodeCharacter{1E84}{\"W}%
    +  \DeclareUnicodeCharacter{1E85}{\"w}%
    +  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
    +  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
    +  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
    +  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
    +  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
    +  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
    +  \DeclareUnicodeCharacter{1E8C}{\"X}%
    +  \DeclareUnicodeCharacter{1E8D}{\"x}%
    +  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
    +  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
    +  %
    +  \DeclareUnicodeCharacter{1E90}{\^Z}%
    +  \DeclareUnicodeCharacter{1E91}{\^z}%
    +  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
    +  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
    +  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
    +  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
    +  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
    +  \DeclareUnicodeCharacter{1E97}{\"t}%
    +  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
    +  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
    +  %
    +  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
    +  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
    +  %
    +  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
    +  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
    +  \DeclareUnicodeCharacter{1EBC}{\~E}%
    +  \DeclareUnicodeCharacter{1EBD}{\~e}%
    +  %
    +  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
    +  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
    +  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
    +  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
    +  %
    +  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
    +  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
    +  %
    +  \DeclareUnicodeCharacter{1EF2}{\`Y}%
    +  \DeclareUnicodeCharacter{1EF3}{\`y}%
    +  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
    +  %
    +  \DeclareUnicodeCharacter{1EF8}{\~Y}%
    +  \DeclareUnicodeCharacter{1EF9}{\~y}%
    +  %
    +  % Punctuation
    +  \DeclareUnicodeCharacter{2013}{--}%
    +  \DeclareUnicodeCharacter{2014}{---}%
    +  \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
    +  \DeclareUnicodeCharacter{2019}{\quoteright{}}%
    +  \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
    +  \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
    +  \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
    +  \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
    +  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
    +  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
    +  \DeclareUnicodeCharacter{2022}{\bullet{}}%
    +  \DeclareUnicodeCharacter{202F}{\thinspace}%
    +  \DeclareUnicodeCharacter{2026}{\dots{}}%
    +  \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
    +  \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
    +  %
    +  \DeclareUnicodeCharacter{20AC}{\euro{}}%
    +  %
    +  \DeclareUnicodeCharacter{2192}{\expansion{}}%
    +  \DeclareUnicodeCharacter{21D2}{\result{}}%
    +  %
    +  % Mathematical symbols
    +  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
    +  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
    +  \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
    +  \DeclareUnicodeCharacter{2212}{\minus{}}%
    +  \DeclareUnicodeCharacter{2217}{\ast}%
    +  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
    +  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
    +  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
    +  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
    +  \DeclareUnicodeCharacter{2261}{\equiv{}}%
    +  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
    +  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
    +  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
    +  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
    +  %
    +  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
    +  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
    +  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
    +  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
    +  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
    +  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
    +  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
    +  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
    +  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
    +  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
    +  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
    +  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
    +  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
    +  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
    +  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
    +  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
    +  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
    +  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
    +  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
    +  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
    +  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
    +  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
    +  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
    +  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
    +  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
    +  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
    +  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
    +  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
    +  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
    +  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
    +  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
    +  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
    +  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
    +  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
    +  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
    +  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
    +  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
    +  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
    +  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
    +  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
    +  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
    +  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
    +  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
    +  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
    +  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
    +  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
    +  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
    +  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
    +  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
    +  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
    +  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
    +  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
    +  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
    +  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
    +  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
    +  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
    +  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
    +  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
    +  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
    +  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
    +  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
    +  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
    +  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
    +  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
    +  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
    +  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
    +  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
    +  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
    +  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
    +  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
    +  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
    +  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
    +  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
    +  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
    +  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
    +  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
    +  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
    +  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
    +  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
    +  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
    +  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
    +  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
    +  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
    +  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
    +  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
    +  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
    +  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
    +  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
    +  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
    +  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
    +  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
    +  %
    +  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
    +  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
    +  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
    +  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
    +  \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
    +  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
    +  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
    +  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
    +  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
    +  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
    +  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
    +  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
    +  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
    +  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
    +  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
    +  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
    +  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
    +  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
    +  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
    +  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
    +  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
    +  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
    +  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
    +  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
    +  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
    +  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
    +  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
    +  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
    +  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
    +  %
    +  \global\mathchardef\checkmark="1370% actually the square root sign
    +  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
    +}% end of \unicodechardefs
    +
    +% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
    +% It makes the setting that replace UTF-8 byte sequence.
    +\def\utfeightchardefs{%
    +  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
    +  \unicodechardefs
    +}
    +
    +% Whether the active definitions of non-ASCII characters expand to
    +% non-active tokens with the same character code.  This is used to
    +% write characters literally, instead of using active definitions for
    +% printing the correct glyphs.
    +\newif\ifpassthroughchars
    +\passthroughcharsfalse
    +
    +% For native Unicode handling (XeTeX and LuaTeX),
    +% provide a definition macro to replace/pass-through a Unicode character
    +%
    +\def\DeclareUnicodeCharacterNative#1#2{%
    +  \catcode"#1=\active
    +  \def\dodeclareunicodecharacternative##1##2##3{%
    +    \begingroup
    +      \uccode`\~="##2\relax
    +      \uppercase{\gdef~}{%
    +        \ifpassthroughchars
    +          ##1%
    +        \else
    +          ##3%
    +        \fi
    +      }
    +    \endgroup
    +  }
    +  \begingroup
    +    \uccode`\.="#1\relax
    +    \uppercase{\def\UTFNativeTmp{.}}%
    +    \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
    +  \endgroup
    +}
    +
    +% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
    +% It activates the setting that replaces Unicode characters.
    +\def\nativeunicodechardefs{%
    +  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
    +  \unicodechardefs
    +}
    +
    +% For native Unicode handling (XeTeX and LuaTeX),
    +% make the character token expand
    +% to the sequences given in \unicodechardefs for printing.
    +\def\DeclareUnicodeCharacterNativeAtU#1#2{%
    +  \def\UTFAtUTmp{#2}
    +  \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
    +}
    +
    +% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
    +\def\nativeunicodechardefsatu{%
    +  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
    +  \unicodechardefs
    +}
    +
    +% US-ASCII character definitions.
    +\def\asciichardefs{% nothing need be done
    +   \relax
    +}
    +
    +% Define all Unicode characters we know about.  This makes UTF-8 the default
    +% input encoding and allows @U to work.
    +\iftxinativeunicodecapable
    +  \nativeunicodechardefsatu
    +\else
    +  \utfeightchardefs
    +\fi
    +
    +\message{formatting,}
    +
    +\newdimen\defaultparindent \defaultparindent = 15pt
    +
    +\chapheadingskip = 15pt plus 4pt minus 2pt
    +\secheadingskip = 12pt plus 3pt minus 2pt
    +\subsecheadingskip = 9pt plus 2pt minus 2pt
    +
    +% Prevent underfull vbox error messages.
    +\vbadness = 10000
    +
    +% Don't be very finicky about underfull hboxes, either.
    +\hbadness = 6666
    +
    +% Following George Bush, get rid of widows and orphans.
    +\widowpenalty=10000
    +\clubpenalty=10000
    +
    +% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
    +% using an old version of TeX, don't do anything.  We want the amount of
    +% stretch added to depend on the line length, hence the dependence on
    +% \hsize.  We call this whenever the paper size is set.
    +%
    +\def\setemergencystretch{%
    +  \ifx\emergencystretch\thisisundefined
    +    % Allow us to assign to \emergencystretch anyway.
    +    \def\emergencystretch{\dimen0}%
    +  \else
    +    \emergencystretch = .15\hsize
    +  \fi
    +}
    +
    +% Parameters in order: 1) textheight; 2) textwidth;
    +% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
    +% 7) physical page height; 8) physical page width.
    +%
    +% We also call \setleading{\textleading}, so the caller should define
    +% \textleading.  The caller should also set \parskip.
    +%
    +\def\internalpagesizes#1#2#3#4#5#6#7#8{%
    +  \voffset = #3\relax
    +  \topskip = #6\relax
    +  \splittopskip = \topskip
    +  %
    +  \vsize = #1\relax
    +  \advance\vsize by \topskip
    +  \outervsize = \vsize
    +  \advance\outervsize by 2\topandbottommargin
    +  \txipageheight = \vsize
    +  %
    +  \hsize = #2\relax
    +  \outerhsize = \hsize
    +  \advance\outerhsize by 0.5in
    +  \txipagewidth = \hsize
    +  %
    +  \normaloffset = #4\relax
    +  \bindingoffset = #5\relax
    +  %
    +  \ifpdf
    +    \pdfpageheight #7\relax
    +    \pdfpagewidth #8\relax
    +    % if we don't reset these, they will remain at "1 true in" of
    +    % whatever layout pdftex was dumped with.
    +    \pdfhorigin = 1 true in
    +    \pdfvorigin = 1 true in
    +  \else
    +    \ifx\XeTeXrevision\thisisundefined
    +      \special{papersize=#8,#7}%
    +    \else
    +      \pdfpageheight #7\relax
    +      \pdfpagewidth #8\relax
    +      % XeTeX does not have \pdfhorigin and \pdfvorigin.
    +    \fi
    +  \fi
    +  %
    +  \setleading{\textleading}
    +  %
    +  \parindent = \defaultparindent
    +  \setemergencystretch
    +}
    +
    +% @letterpaper (the default).
    +\def\letterpaper{{\globaldefs = 1
    +  \parskip = 3pt plus 2pt minus 1pt
    +  \textleading = 13.2pt
    +  %
    +  % If page is nothing but text, make it come out even.
    +  \internalpagesizes{607.2pt}{6in}% that's 46 lines
    +                    {\voffset}{.25in}%
    +                    {\bindingoffset}{36pt}%
    +                    {11in}{8.5in}%
    +}}
    +
    +% Use @smallbook to reset parameters for 7x9.25 trim size.
    +\def\smallbook{{\globaldefs = 1
    +  \parskip = 2pt plus 1pt
    +  \textleading = 12pt
    +  %
    +  \internalpagesizes{7.5in}{5in}%
    +                    {-.2in}{0in}%
    +                    {\bindingoffset}{16pt}%
    +                    {9.25in}{7in}%
    +  %
    +  \lispnarrowing = 0.3in
    +  \tolerance = 700
    +  \contentsrightmargin = 0pt
    +  \defbodyindent = .5cm
    +}}
    +
    +% Use @smallerbook to reset parameters for 6x9 trim size.
    +% (Just testing, parameters still in flux.)
    +\def\smallerbook{{\globaldefs = 1
    +  \parskip = 1.5pt plus 1pt
    +  \textleading = 12pt
    +  %
    +  \internalpagesizes{7.4in}{4.8in}%
    +                    {-.2in}{-.4in}%
    +                    {0pt}{14pt}%
    +                    {9in}{6in}%
    +  %
    +  \lispnarrowing = 0.25in
    +  \tolerance = 700
    +  \contentsrightmargin = 0pt
    +  \defbodyindent = .4cm
    +}}
    +
    +% Use @afourpaper to print on European A4 paper.
    +\def\afourpaper{{\globaldefs = 1
    +  \parskip = 3pt plus 2pt minus 1pt
    +  \textleading = 13.2pt
    +  %
    +  % Double-side printing via postscript on Laserjet 4050
    +  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
    +  % To change the settings for a different printer or situation, adjust
    +  % \normaloffset until the front-side and back-side texts align.  Then
    +  % do the same for \bindingoffset.  You can set these for testing in
    +  % your texinfo source file like this:
    +  % @tex
    +  % \global\normaloffset = -6mm
    +  % \global\bindingoffset = 10mm
    +  % @end tex
    +  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
    +                    {\voffset}{\hoffset}%
    +                    {\bindingoffset}{44pt}%
    +                    {297mm}{210mm}%
    +  %
    +  \tolerance = 700
    +  \contentsrightmargin = 0pt
    +  \defbodyindent = 5mm
    +}}
    +
    +% Use @afivepaper to print on European A5 paper.
    +% From romildo@urano.iceb.ufop.br, 2 July 2000.
    +% He also recommends making @example and @lisp be small.
    +\def\afivepaper{{\globaldefs = 1
    +  \parskip = 2pt plus 1pt minus 0.1pt
    +  \textleading = 12.5pt
    +  %
    +  \internalpagesizes{160mm}{120mm}%
    +                    {\voffset}{\hoffset}%
    +                    {\bindingoffset}{8pt}%
    +                    {210mm}{148mm}%
    +  %
    +  \lispnarrowing = 0.2in
    +  \tolerance = 800
    +  \contentsrightmargin = 0pt
    +  \defbodyindent = 2mm
    +  \tableindent = 12mm
    +}}
    +
    +% A specific text layout, 24x15cm overall, intended for A4 paper.
    +\def\afourlatex{{\globaldefs = 1
    +  \afourpaper
    +  \internalpagesizes{237mm}{150mm}%
    +                    {\voffset}{4.6mm}%
    +                    {\bindingoffset}{7mm}%
    +                    {297mm}{210mm}%
    +  %
    +  % Must explicitly reset to 0 because we call \afourpaper.
    +  \globaldefs = 0
    +}}
    +
    +% Use @afourwide to print on A4 paper in landscape format.
    +\def\afourwide{{\globaldefs = 1
    +  \afourpaper
    +  \internalpagesizes{241mm}{165mm}%
    +                    {\voffset}{-2.95mm}%
    +                    {\bindingoffset}{7mm}%
    +                    {297mm}{210mm}%
    +  \globaldefs = 0
    +}}
    +
    +% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
    +% Perhaps we should allow setting the margins, \topskip, \parskip,
    +% and/or leading, also. Or perhaps we should compute them somehow.
    +%
    +\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
    +\def\pagesizesyyy#1,#2,#3\finish{{%
    +  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
    +  \globaldefs = 1
    +  %
    +  \parskip = 3pt plus 2pt minus 1pt
    +  \setleading{\textleading}%
    +  %
    +  \dimen0 = #1\relax
    +  \advance\dimen0 by \voffset
    +  \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page
    +  %
    +  \dimen2 = \hsize
    +  \advance\dimen2 by \normaloffset
    +  \advance\dimen2 by 1in % reference point is 1 inch from left edge of page
    +  %
    +  \internalpagesizes{#1}{\hsize}%
    +                    {\voffset}{\normaloffset}%
    +                    {\bindingoffset}{44pt}%
    +                    {\dimen0}{\dimen2}%
    +}}
    +
    +% Set default to letter.
    +%
    +\letterpaper
    +
    +% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
    +\hfuzz = 1pt
    +
    +
    +\message{and turning on texinfo input format.}
    +
    +\def^^L{\par} % remove \outer, so ^L can appear in an @comment
    +
    +% DEL is a comment character, in case @c does not suffice.
    +\catcode`\^^? = 14
    +
    +% Define macros to output various characters with catcode for normal text.
    +\catcode`\"=\other \def\normaldoublequote{"}
    +\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
    +\catcode`\+=\other \def\normalplus{+}
    +\catcode`\<=\other \def\normalless{<}
    +\catcode`\>=\other \def\normalgreater{>}
    +\catcode`\^=\other \def\normalcaret{^}
    +\catcode`\_=\other \def\normalunderscore{_}
    +\catcode`\|=\other \def\normalverticalbar{|}
    +\catcode`\~=\other \def\normaltilde{~}
    +
    +% This macro is used to make a character print one way in \tt
    +% (where it can probably be output as-is), and another way in other fonts,
    +% where something hairier probably needs to be done.
    +%
    +% #1 is what to print if we are indeed using \tt; #2 is what to print
    +% otherwise.  Since all the Computer Modern typewriter fonts have zero
    +% interword stretch (and shrink), and it is reasonable to expect all
    +% typewriter fonts to have this, we can check that font parameter.
    +%
    +\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
    +
    +% Same as above, but check for italic font.  Actually this also catches
    +% non-italic slanted fonts since it is impossible to distinguish them from
    +% italic fonts.  But since this is only used by $ and it uses \sl anyway
    +% this is not a problem.
    +\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
    +
    +% Set catcodes for Texinfo file
    +
    +% Active characters for printing the wanted glyph.
    +% Most of these we simply print from the \tt font, but for some, we can
    +% use math or other variants that look better in normal text.
    +%
    +\catcode`\"=\active
    +\def\activedoublequote{{\tt\char34}}
    +\let"=\activedoublequote
    +\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
    +\chardef\hatchar=`\^
    +\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
    +
    +\catcode`\_=\active
    +\def_{\ifusingtt\normalunderscore\_}
    +\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
    +\let\realunder=_
    +
    +\catcode`\|=\active \def|{{\tt\char124}}
    +
    +\chardef \less=`\<
    +\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
    +\chardef \gtr=`\>
    +\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
    +\catcode`\+=\active \def+{{\tt \char 43}}
    +\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
    +\catcode`\-=\active \let-=\normaldash
    +
    +
    +% used for headline/footline in the output routine, in case the page
    +% breaks in the middle of an @tex block.
    +\def\texinfochars{%
    +  \let< = \activeless
    +  \let> = \activegtr
    +  \let~ = \activetilde
    +  \let^ = \activehat
    +  \markupsetuplqdefault \markupsetuprqdefault
    +  \let\b = \strong
    +  \let\i = \smartitalic
    +  % in principle, all other definitions in \tex have to be undone too.
    +}
    +
    +% Used sometimes to turn off (effectively) the active characters even after
    +% parsing them.
    +\def\turnoffactive{%
    +  \normalturnoffactive
    +  \otherbackslash
    +}
    +
    +\catcode`\@=0
    +
    +% \backslashcurfont outputs one backslash character in current font,
    +% as in \char`\\.
    +\global\chardef\backslashcurfont=`\\
    +
    +% \realbackslash is an actual character `\' with catcode other.
    +{\catcode`\\=\other @gdef@realbackslash{\}}
    +
    +% In Texinfo, backslash is an active character; it prints the backslash
    +% in fixed width font.
    +\catcode`\\=\active  % @ for escape char from now on.
    +
    +% Print a typewriter backslash.  For math mode, we can't simply use
    +% \backslashcurfont: the story here is that in math mode, the \char
    +% of \backslashcurfont ends up printing the roman \ from the math symbol
    +% font (because \char in math mode uses the \mathcode, and plain.tex
    +% sets \mathcode`\\="026E).  Hence we use an explicit \mathchar,
    +% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
    +% ignored family value; char position "5C).  We can't use " for the
    +% usual hex value because it has already been made active.
    +
    +@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
    +@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
    +
    +% \otherbackslash defines an active \ to be a literal `\' character with
    +% catcode other.
    +@gdef@otherbackslash{@let\=@realbackslash}
    +
    +% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
    +% the literal character `\'.
    +%
    +{@catcode`- = @active
    + @gdef@normalturnoffactive{%
    +   @passthroughcharstrue
    +   @let-=@normaldash
    +   @let"=@normaldoublequote
    +   @let$=@normaldollar %$ font-lock fix
    +   @let+=@normalplus
    +   @let<=@normalless
    +   @let>=@normalgreater
    +   @let^=@normalcaret
    +   @let_=@normalunderscore
    +   @let|=@normalverticalbar
    +   @let~=@normaltilde
    +   @let\=@ttbackslash
    +   @markupsetuplqdefault
    +   @markupsetuprqdefault
    +   @unsepspaces
    + }
    +}
    +
    +% If a .fmt file is being used, characters that might appear in a file
    +% name cannot be active until we have parsed the command line.
    +% So turn them off again, and have @fixbackslash turn them back on.
    +@catcode`+=@other @catcode`@_=@other
    +
    +% \enablebackslashhack - allow file to begin `\input texinfo'
    +%
    +% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
    +% That is what \eatinput is for; after that, the `\' should revert to printing
    +% a backslash.
    +% If the file did not have a `\input texinfo', then it is turned off after
    +% the first line; otherwise the first `\' in the file would cause an error.
    +% This is used on the very last line of this file, texinfo.tex.
    +% We also use @c to call @fixbackslash, in case ends of lines are hidden.
    +{
    +@catcode`@^=7
    +@catcode`@^^M=13@gdef@enablebackslashhack{%
    +  @global@let\ = @eatinput%
    +  @catcode`@^^M=13%
    +  @def@c{@fixbackslash@c}%
    +  % Definition for the newline at the end of this file.
    +  @def ^^M{@let^^M@secondlinenl}%
    +  % Definition for a newline in the main Texinfo file.
    +  @gdef @secondlinenl{@fixbackslash}%
    +  % In case the first line has a whole-line command on it
    +  @let@originalparsearg@parsearg
    +  @def@parsearg{@fixbackslash@originalparsearg}
    +}}
    +
    +{@catcode`@^=7 @catcode`@^^M=13%
    +@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
    +
    +% Emergency active definition of newline, in case an active newline token
    +% appears by mistake.
    +{@catcode`@^=7 @catcode13=13%
    +@gdef@enableemergencynewline{%
    +  @gdef^^M{%
    +    @par%
    +    %@par%
    +}}}
    +
    +
    +@gdef@fixbackslash{%
    +  @ifx\@eatinput @let\ = @ttbackslash @fi
    +  @catcode13=5 % regular end of line
    +  @enableemergencynewline
    +  @let@c=@comment
    +  @let@parsearg@originalparsearg
    +  % Also turn back on active characters that might appear in the input
    +  % file name, in case not using a pre-dumped format.
    +  @catcode`+=@active
    +  @catcode`@_=@active
    +  %
    +  % If texinfo.cnf is present on the system, read it.
    +  % Useful for site-wide @afourpaper, etc.  This macro, @fixbackslash, gets
    +  % called at the beginning of every Texinfo file.  Not opening texinfo.cnf
    +  % directly in this file, texinfo.tex, makes it possible to make a format
    +  % file for Texinfo.
    +  %
    +  @openin 1 texinfo.cnf
    +  @ifeof 1 @else @input texinfo.cnf @fi
    +  @closein 1
    +}
    +
    +
    +% Say @foo, not \foo, in error messages.
    +@escapechar = `@@
    +
    +% These (along with & and #) are made active for url-breaking, so need
    +% active definitions as the normal characters.
    +@def@normaldot{.}
    +@def@normalquest{?}
    +@def@normalslash{/}
    +
    +% These look ok in all fonts, so just make them not special.
    +% @hashchar{} gets its own user-level command, because of #line.
    +@catcode`@& = @other @def@normalamp{&}
    +@catcode`@# = @other @def@normalhash{#}
    +@catcode`@% = @other @def@normalpercent{%}
    +
    +@let @hashchar = @normalhash
    +
    +@c Finally, make ` and ' active, so that txicodequoteundirected and
    +@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
    +@c don't make ` and ' active, @code will not get them as active chars.
    +@c Do this last of all since we use ` in the previous @catcode assignments.
    +@catcode`@'=@active
    +@catcode`@`=@active
    +@markupsetuplqdefault
    +@markupsetuprqdefault
    +
    +@c Local variables:
    +@c eval: (add-hook 'before-save-hook 'time-stamp)
    +@c page-delimiter: "^\\\\message\\|emacs-page"
    +@c time-stamp-start: "def\\\\texinfoversion{"
    +@c time-stamp-format: "%:y-%02m-%02d.%02H"
    +@c time-stamp-end: "}"
    +@c End:
    +
    +@c vim:sw=2:
    +
    +@enablebackslashhack
    diff --git a/bash/templates/build-site.sh b/bash/templates/build-site.sh
    deleted file mode 100755
    index a35a15c..0000000
    --- a/bash/templates/build-site.sh
    +++ /dev/null
    @@ -1,83 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    -
    -OUT="${1}"
    -HTMLIZE="${2}"
    -PROJECT_UC="__PROJECT_UC__"
    -
    -sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \
    -  head -n -1                                          | \
    -  cat workflow/preamble.org - > tasks-and-bugs.org
    -
    -emacs tasks-and-bugs.org                               \
    -      -l "${HTMLIZE}"                                  \
    -      --eval '(setq org-export-allow-bind-keywords t)' \
    -      -f org-html-export-to-html                       \
    -      --batch                                          \
    -      --kill
    -
    -# Add anchor link to bug headers
    -perl -pe \
    -     's|^

    (.*)

    $|

    \2
    #\1

    |' \ - tasks-and-bugs.html > "$OUT/tasks-and-bugs.html" - -pushd docs -make html -popd - -cp docs/favicon.ico "$OUT" -mv docs/_build/html/_static/ "$OUT/_static/" - -CURRENT_LANG="$(jq -r .current_lang < metadata.json)" -LANGS="$(jq -r .langs[] < metadata.json)" -TAGS="$(git tag | cat - <(echo master))" - -for lang in ${LANGS}; do - for tag in ${TAGS}; do - mkdir -p "tmp/$lang/$tag/" - git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . - git reset . - git checkout . - - pushd "tmp/$lang/$tag/docs/" - jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - - RENAMES="$(jq ".$lang" < ../docs/i18n-pagenames.json | \ - jq -r 'to_entries[] | [.key, .value] | @csv' | \ - tr -d '\"')" - - if [[ "$lang" != "$CURRENT_LANG" ]]; then - for rename in $RENAMES; do - from="$(echo "$rename" | cut -d, -f1)" - to="$(echo "$rename" | cut -d, -f2)" - mv "${from}.rst" "${to}.rst" - sed -i "s/^ $from$/ $to/" index.rst - done - fi - - make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html - popd - - mkdir "$OUT/$lang/" - - mv "tmp/$lang/$tag/docs/_build/html/" "$OUT/$lang/$tag/" - pushd "$OUT/$lang/$tag/" - rm -rf _static/ - ln -s ../../_static . - popd - - mv "tmp/$lang/$tag/docs/_build/singlehtml/" "$OUT/$lang/$tag/single/" - pushd "$OUT/$lang/$tag/single/" - rm -rf _static/ - ln -s ../../../_static . - rm -rf _images/ - ln -s ../_images . - popd - - mv "tmp/$lang/$tag/docs/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" - done -done - -gitstats . "$OUT/gitstats/" diff --git a/bash/templates/ci-build.sh b/bash/templates/ci-build.sh deleted file mode 100755 index abc357e..0000000 --- a/bash/templates/ci-build.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -set -x - -LOGS_PREFIX="/data/static/ci-logs" -LOGS_DIR="${DOLLAR}{LOGS_PREFIX}/$PROJECT" -mkdir -p "${DOLLAR}LOGS_DIR" -LOGFILE="${DOLLAR}{LOGS_DIR}/${DOLLAR}(date -Is)-${DOLLAR}(git rev-parse master).log" -exec &> >(tee -a "${DOLLAR}{LOGFILE}") - -# -# Run tests and publish the generated site on the VPS server, -# where this hook is installed. -# - -unset GIT_DIR -CLONE="${DOLLAR}(mktemp -d)" -git clone . "${DOLLAR}CLONE" -pushd "${DOLLAR}CLONE" - -"${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh - -finish() { - printf "\n\n>>> exit status was %s\n" "${DOLLAR}?" - "${DOLLAR}{LOGS_PREFIX}"/ci-gen-index.sh -} -trap finish EXIT - -nix-build -A test -nix-build -A site -"$(nix-build -A publishScript)/bin/publish.sh" diff --git a/bash/templates/conf.py b/bash/templates/conf.py deleted file mode 100644 index 8727603..0000000 --- a/bash/templates/conf.py +++ /dev/null @@ -1,56 +0,0 @@ -import json -with open("../metadata.json", "r") as f: - metadata = json.loads(f.read()) - -import subprocess -all_versions = ["master"] + ( - subprocess - .check_output(["git", "tag"]) - .decode("ascii") - .strip() - .split() -) - -project = metadata["project_name"] -author = metadata["authors"][0] -version = metadata["version"] -release = version -epub_copyright = "CC BY-SA 4.0" -nitpicky = True - -extensions = [ - "sphinx.ext.extlinks", - "sphinx.ext.graphviz", - "sphinx.ext.todo", -] - -graphviz_output_format = "svg" - -todo_include_todos = True - -templates_path = ["_templates"] -html_theme = "sphinx_rtd_theme" -html_theme_options = { - "style_external_links": True -} - -html_show_sphinx = False -html_show_copyright = False - -extlinks = { - "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), - "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), -} - -with open("i18n-pagenames.json", "r") as f: - i18n_pagenames = json.loads(f.read()) - -html_context = { - "all_versions": all_versions, - "langs": metadata["langs"], - "current_lang": metadata["current_lang"], - "source_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs/", - "i18n_pagenames": i18n_pagenames -} - -gettext_compact = False diff --git a/bash/templates/configure.ac b/bash/templates/configure.ac new file mode 100644 index 0000000..fee2c16 --- /dev/null +++ b/bash/templates/configure.ac @@ -0,0 +1,14 @@ +AC_PREREQ([2.69]) +AC_INIT([$PROJECT], + [v0.0.0], + [~euandreh/$MAILING_LIST@lists.sr.ht], + [$PROJECT], + [https://$PROJECT.euandreh.xyz]) +AC_CONFIG_SRCDIR([FIXME]) +AC_CONFIG_AUX_DIR([build-aux]) +AC_CONFIG_MACRO_DIR([m4]) +AM_INIT_AUTOMAKE([-Wall -Werror check-news parallel-tests subdir-objects]) + +AC_CONFIG_FILES([Makefile]) + +AC_OUTPUT diff --git a/bash/templates/description b/bash/templates/description new file mode 100644 index 0000000..4c28ea5 --- /dev/null +++ b/bash/templates/description @@ -0,0 +1 @@ +FIXME \ No newline at end of file diff --git a/bash/templates/doc/Makefile b/bash/templates/doc/Makefile new file mode 100644 index 0000000..d4bb2cb --- /dev/null +++ b/bash/templates/doc/Makefile @@ -0,0 +1,20 @@ +# Minimal makefile for Sphinx documentation +# + +# You can set these variables from the command line, and also +# from the environment for the first two. +SPHINXOPTS ?= +SPHINXBUILD ?= sphinx-build +SOURCEDIR = . +BUILDDIR = _build + +# Put it first so that "make" without argument is like "make help". +help: + @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) + +.PHONY: help Makefile + +# Catch-all target: route all unknown targets to Sphinx using the new +# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). +%: Makefile + @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/bash/templates/doc/_templates/footer.html b/bash/templates/doc/_templates/footer.html new file mode 100644 index 0000000..a710a48 --- /dev/null +++ b/bash/templates/doc/_templates/footer.html @@ -0,0 +1,7 @@ +{%- extends "!footer.html" %} + +{% block extrafooter %} +
    + Documentation licensed under CC BY-SA 4.0. +
    +{% endblock %} diff --git a/bash/templates/doc/_templates/layout.html b/bash/templates/doc/_templates/layout.html new file mode 100644 index 0000000..3182c8c --- /dev/null +++ b/bash/templates/doc/_templates/layout.html @@ -0,0 +1,59 @@ +{%- extends "!layout.html" %} + +{# +Taken from: +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html +#} + +{% block footer %} +
    + + {{project}} + {{version}} | {{ current_lang }} + + +
    +
    +
    Versions
    + {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} +
    Downloads
    +
    + + PDF + +
    +
    + + EPUB + +
    +
    +
    +
    +{% endblock %} diff --git a/bash/templates/doc/conf.py.in b/bash/templates/doc/conf.py.in new file mode 100644 index 0000000..8727603 --- /dev/null +++ b/bash/templates/doc/conf.py.in @@ -0,0 +1,56 @@ +import json +with open("../metadata.json", "r") as f: + metadata = json.loads(f.read()) + +import subprocess +all_versions = ["master"] + ( + subprocess + .check_output(["git", "tag"]) + .decode("ascii") + .strip() + .split() +) + +project = metadata["project_name"] +author = metadata["authors"][0] +version = metadata["version"] +release = version +epub_copyright = "CC BY-SA 4.0" +nitpicky = True + +extensions = [ + "sphinx.ext.extlinks", + "sphinx.ext.graphviz", + "sphinx.ext.todo", +] + +graphviz_output_format = "svg" + +todo_include_todos = True + +templates_path = ["_templates"] +html_theme = "sphinx_rtd_theme" +html_theme_options = { + "style_external_links": True +} + +html_show_sphinx = False +html_show_copyright = False + +extlinks = { + "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), + "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), +} + +with open("i18n-pagenames.json", "r") as f: + i18n_pagenames = json.loads(f.read()) + +html_context = { + "all_versions": all_versions, + "langs": metadata["langs"], + "current_lang": metadata["current_lang"], + "source_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs/", + "i18n_pagenames": i18n_pagenames +} + +gettext_compact = False diff --git a/bash/templates/doc/dictionaries/en.txt b/bash/templates/doc/dictionaries/en.txt new file mode 100644 index 0000000..e69de29 diff --git a/bash/templates/doc/dictionaries/international.txt b/bash/templates/doc/dictionaries/international.txt new file mode 100644 index 0000000..e69de29 diff --git a/bash/templates/doc/favicon.ico b/bash/templates/doc/favicon.ico new file mode 100644 index 0000000..8ebd54f Binary files /dev/null and b/bash/templates/doc/favicon.ico differ diff --git a/bash/templates/doc/i18n-pagenames.json b/bash/templates/doc/i18n-pagenames.json new file mode 100644 index 0000000..6b674df --- /dev/null +++ b/bash/templates/doc/i18n-pagenames.json @@ -0,0 +1,3 @@ +{ + "en": {} +} diff --git a/bash/templates/doc/index.rst b/bash/templates/doc/index.rst new file mode 100644 index 0000000..78baef3 --- /dev/null +++ b/bash/templates/doc/index.rst @@ -0,0 +1,31 @@ +$PROJECT_UC +======== + +FIXME: description + +Useful links: +~~~~~~~~~~~~~ + +- `documentation`_ (`single page documentation`_) +- `mailing list`_ +- `source code`_ +- `tasks and bugs`_ +- `build logs`_ + +See also: + +- `repository statistics`_ + +.. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ +.. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ +.. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST +.. _`source code`: https://git.euandreh.xyz/$PROJECT/about/ +.. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html +.. _`build logs`: https://ci.euandreh.xyz/#$PROJECT +.. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ + +Introduction +~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 2 diff --git a/bash/templates/docs/Makefile b/bash/templates/docs/Makefile deleted file mode 100644 index d4bb2cb..0000000 --- a/bash/templates/docs/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/bash/templates/docs/i18n-pagenames.json b/bash/templates/docs/i18n-pagenames.json deleted file mode 100644 index 6b674df..0000000 --- a/bash/templates/docs/i18n-pagenames.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "en": {} -} diff --git a/bash/templates/docs/index.rst b/bash/templates/docs/index.rst deleted file mode 100644 index 78baef3..0000000 --- a/bash/templates/docs/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -$PROJECT_UC -======== - -FIXME: description - -Useful links: -~~~~~~~~~~~~~ - -- `documentation`_ (`single page documentation`_) -- `mailing list`_ -- `source code`_ -- `tasks and bugs`_ -- `build logs`_ - -See also: - -- `repository statistics`_ - -.. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ -.. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ -.. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST -.. _`source code`: https://git.euandreh.xyz/$PROJECT/about/ -.. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html -.. _`build logs`: https://ci.euandreh.xyz/#$PROJECT -.. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ - -Introduction -~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 2 diff --git a/bash/templates/favicon.ico b/bash/templates/favicon.ico deleted file mode 100644 index 8ebd54f..0000000 Binary files a/bash/templates/favicon.ico and /dev/null differ diff --git a/bash/templates/footer.html b/bash/templates/footer.html deleted file mode 100644 index a710a48..0000000 --- a/bash/templates/footer.html +++ /dev/null @@ -1,7 +0,0 @@ -{%- extends "!footer.html" %} - -{% block extrafooter %} -
    - Documentation licensed under CC BY-SA 4.0. -
    -{% endblock %} diff --git a/bash/templates/guix/channels.scm b/bash/templates/guix/channels.scm new file mode 100644 index 0000000..e1645f6 --- /dev/null +++ b/bash/templates/guix/channels.scm @@ -0,0 +1,11 @@ +(list + (channel + (name 'guix) + (url "https://git.savannah.gnu.org/git/guix.git") + (commit + "dc2de508a38d8e0a3f93e8d6ded225d3a7e32548") + (introduction + (make-channel-introduction + "9edb3f66fd807b096b48283debdcddccfea34bad" + (openpgp-fingerprint + "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm new file mode 100644 index 0000000..ef1ff8b --- /dev/null +++ b/bash/templates/guix/manifest.scm @@ -0,0 +1,18 @@ +(specifications->manifest + (map symbol->string + '(bash + coreutils + findutils + diffutils + grep + sed + git + autoconf + automake + pkg-config + gawk + make + texinfo + emacs + perl + shellcheck))) diff --git a/bash/templates/layout.html b/bash/templates/layout.html deleted file mode 100644 index 3182c8c..0000000 --- a/bash/templates/layout.html +++ /dev/null @@ -1,59 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} -
    - - {{project}} - {{version}} | {{ current_lang }} - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -
    Downloads
    -
    - - PDF - -
    -
    - - EPUB - -
    -
    -
    -
    -{% endblock %} diff --git a/bash/templates/m4/guile.m4 b/bash/templates/m4/guile.m4 new file mode 100644 index 0000000..6968973 --- /dev/null +++ b/bash/templates/m4/guile.m4 @@ -0,0 +1,397 @@ +## Autoconf macros for working with Guile. +## +## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public License +## as published by the Free Software Foundation; either version 3 of +## the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301 USA + +# serial 10 + +## Index +## ----- +## +## GUILE_PKG -- find Guile development files +## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +## GUILE_FLAGS -- set flags for compiling and linking with Guile +## GUILE_SITE_DIR -- find path to Guile "site" directories +## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +## GUILE_MODULE_EXPORTS -- check if a module exports a variable +## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable + +## Code +## ---- + +## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged +## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). + +# GUILE_PKG -- find Guile development files +# +# Usage: GUILE_PKG([VERSIONS]) +# +# This macro runs the @code{pkg-config} tool to find development files +# for an available version of Guile. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0), falling back to the previous stable version +# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is +# found, an error is signalled. The found version is stored in +# @var{GUILE_EFFECTIVE_VERSION}. +# +# If @code{GUILE_PROGS} was already invoked, this macro ensures that the +# development files have the same effective version as the Guile +# program. +# +# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by +# @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PKG], + [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + if test "x$PKG_CONFIG" = x; then + AC_MSG_ERROR([pkg-config is missing, please install it]) + fi + _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" + if test -n "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp="" + for v in $_guile_versions_to_search; do + if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp=$v + fi + done + if test -z "$_guile_tmp"; then + AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) + fi + _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION + fi + GUILE_EFFECTIVE_VERSION="" + _guile_errors="" + for v in $_guile_versions_to_search; do + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_NOTICE([checking for guile $v]) + PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) + fi + done + + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_ERROR([ +No Guile development packages were found. + +Please verify that you have Guile installed. If you installed Guile +from a binary distribution, please verify that you have also installed +the development packages. If you installed it yourself, you might need +to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. +]) + fi + AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + ]) + +# GUILE_FLAGS -- set flags for compiling and linking with Guile +# +# Usage: GUILE_FLAGS +# +# This macro runs the @code{pkg-config} tool to find out how to compile +# and link programs against Guile. It sets four variables: +# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and +# @var{GUILE_LTLIBS}. +# +# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that +# uses Guile header files. This is almost always just one or more @code{-I} +# flags. +# +# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program +# against Guile. This includes @code{-lguile-@var{VERSION}} for the +# Guile library itself, and may also include one or more @code{-L} flag +# to tell the compiler where to find the libraries. But it does not +# include flags that influence the program's runtime search path for +# libraries, and will therefore lead to a program that fails to start, +# unless all necessary libraries are installed in a standard location +# such as @file{/usr/lib}. +# +# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to +# libtool, respectively, to link a program against Guile. It includes flags +# that augment the program's runtime search path for libraries, so that shared +# libraries will be found at the location where they were during linking, even +# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the +# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used +# when linking the program is done through libtool. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_FLAGS], + [AC_REQUIRE([GUILE_PKG]) + PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) + + dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by + dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS + dnl to us. + + GUILE_LDFLAGS=$GUILE_LIBS + + dnl Determine the platform dependent parameters needed to use rpath. + dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs + dnl the file gnulib/build-aux/config.rpath. + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) + GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) + GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" + + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_CFLAGS]) + AC_SUBST([GUILE_LDFLAGS]) + AC_SUBST([GUILE_LIBS]) + AC_SUBST([GUILE_LTLIBS]) + ]) + +# GUILE_SITE_DIR -- find path to Guile site directories +# +# Usage: GUILE_SITE_DIR +# +# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will +# be set to Guile's "site" directory for Scheme source files (usually something +# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the +# directory for compiled Scheme files also known as @code{.go} files +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). +# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two +# are set to blank if the particular version of Guile does not support +# them. Note that this macro will run the macros @code{GUILE_PKG} and +# @code{GUILE_PROGS} if they have not already been run. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_SITE_DIR], + [AC_REQUIRE([GUILE_PKG]) + AC_REQUIRE([GUILE_PROGS]) + AC_MSG_CHECKING(for Guile site directory) + GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_SITE) + if test "$GUILE_SITE" = ""; then + AC_MSG_FAILURE(sitedir not found) + fi + AC_SUBST(GUILE_SITE) + AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) + GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` + if test "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) + GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` + if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + GUILE_SITE_CCACHE="" + AC_MSG_WARN([siteccachedir not found]) + fi + fi + AC_MSG_RESULT($GUILE_SITE_CCACHE) + AC_SUBST([GUILE_SITE_CCACHE]) + AC_MSG_CHECKING(for Guile extensions directory) + GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_EXTENSION) + if test "$GUILE_EXTENSION" = ""; then + GUILE_EXTENSION="" + AC_MSG_WARN(extensiondir not found) + fi + AC_SUBST(GUILE_EXTENSION) + ]) + +# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +# +# Usage: GUILE_PROGS([VERSION]) +# +# This macro looks for programs @code{guile} and @code{guild}, setting +# variables @var{GUILE} and @var{GUILD} to their paths, respectively. +# The macro will attempt to find @code{guile} with the suffix of +# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and +# then fall back to looking for @code{guile} with no suffix. If +# @code{guile} is still not found, signal an error. The suffix, if any, +# that was required to find @code{guile} will be used for @code{guild} +# as well. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older +# version is found, the macro will signal an error. +# +# The effective version of the found @code{guile} is set to +# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective +# version is compatible with the result of a previous invocation of +# @code{GUILE_FLAGS}, if any. +# +# As a legacy interface, it also looks for @code{guile-config} and +# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PROGS], + [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" + if test -z "$_guile_required_version"; then + _guile_required_version=3.0 + fi + + _guile_candidates=guile + _tmp= + for v in `echo "$_guile_required_version" | tr . ' '`; do + if test -n "$_tmp"; then _tmp=$_tmp.; fi + _tmp=$_tmp$v + _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" + done + + AC_PATH_PROGS(GUILE,[$_guile_candidates]) + if test -z "$GUILE"; then + AC_MSG_ERROR([guile required but not found]) + fi + + _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` + _guile_effective_version=`$GUILE -c "(display (effective-version))"` + if test -z "$GUILE_EFFECTIVE_VERSION"; then + GUILE_EFFECTIVE_VERSION=$_guile_effective_version + elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then + AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) + fi + + _guile_major_version=`$GUILE -c "(display (major-version))"` + _guile_minor_version=`$GUILE -c "(display (minor-version))"` + _guile_micro_version=`$GUILE -c "(display (micro-version))"` + _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" + + AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) + _major_version=`echo $_guile_required_version | cut -d . -f 1` + _minor_version=`echo $_guile_required_version | cut -d . -f 2` + _micro_version=`echo $_guile_required_version | cut -d . -f 3` + if test "$_guile_major_version" -gt "$_major_version"; then + true + elif test "$_guile_major_version" -eq "$_major_version"; then + if test "$_guile_minor_version" -gt "$_minor_version"; then + true + elif test "$_guile_minor_version" -eq "$_minor_version"; then + if test -n "$_micro_version"; then + if test "$_guile_micro_version" -lt "$_micro_version"; then + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + AC_MSG_RESULT([$_guile_prog_version]) + + AC_PATH_PROG(GUILD,[guild$_guile_suffix]) + AC_SUBST(GUILD) + + AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) + AC_SUBST(GUILE_CONFIG) + if test -n "$GUILD"; then + GUILE_TOOLS=$GUILD + else + AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) + fi + AC_SUBST(GUILE_TOOLS) + ]) + +# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +# +# Usage: GUILE_CHECK_RETVAL(var,check) +# +# @var{var} is a shell variable name to be set to the return value. +# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and +# returning either 0 or non-#f to indicate the check passed. +# Non-0 number or #f indicates failure. +# Avoid using the character "#" since that confuses autoconf. +# +AC_DEFUN([GUILE_CHECK], + [AC_REQUIRE([GUILE_PROGS]) + $GUILE -c "$2" > /dev/null 2>&1 + $1=$? + ]) + +# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +# +# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. +# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). +# +AC_DEFUN([GUILE_MODULE_CHECK], + [AC_MSG_CHECKING([if $2 $4]) + GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) + if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi + AC_MSG_RESULT($$1) + ]) + +# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +# +# Usage: GUILE_MODULE_AVAILABLE(var,module) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# +AC_DEFUN([GUILE_MODULE_AVAILABLE], + [GUILE_MODULE_CHECK($1,$2,0,is available) + ]) + +# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +# +# Usage: GUILE_MODULE_REQUIRED(symlist) +# +# @var{symlist} is a list of symbols, WITHOUT surrounding parens, +# like: ice-9 common-list. +# +AC_DEFUN([GUILE_MODULE_REQUIRED], + [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) + if test "$ac_guile_module_required" = "no" ; then + AC_MSG_ERROR([required guile module not found: ($1)]) + fi + ]) + +# GUILE_MODULE_EXPORTS -- check if a module exports a variable +# +# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) +# +# @var{var} is a shell variable to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_EXPORTS], + [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') + ]) + +# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable +# +# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) +# +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], + [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) + if test "$guile_module_required_export" = "no" ; then + AC_MSG_ERROR([module $1 does not export $2; required]) + fi + ]) + +## guile.m4 ends here diff --git a/bash/templates/pre-push-hook.sh b/bash/templates/pre-push-hook.sh deleted file mode 100755 index d56c40d..0000000 --- a/bash/templates/pre-push-hook.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -set -x - -scp ./scripts/ci-build.sh euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive -jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' diff --git a/bash/templates/preamble.org b/bash/templates/preamble.org deleted file mode 100644 index 1da69e7..0000000 --- a/bash/templates/preamble.org +++ /dev/null @@ -1,25 +0,0 @@ -#+TITLE: Tasks and bug listing for $PROJECT_UC -#+AUTHOR: EuAndreh -#+BIND: org-html-validation-link nil -#+BIND: org-html-scripts nil -#+BIND: org-html-postamble nil -#+BIND: org-export-html-headline-anchor-format nil -#+BIND: org-html-doctype "html5" -#+OPTIONS: toc:nil html-style:nil num:nil -#+HTML_HEAD: -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] -#+MACRO: bug bug\nbsp{}[[#$1][#$1]] -#+MACRO: task task\nbsp{}[[#$1][#$1]] -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) - -Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. - -Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. - -/Você também pode escrever em português./ - -/Vous pouvez aussi écrire en français./ - -#+TOC: headlines 2 diff --git a/bash/templates/rename/empty-texinfo.texi b/bash/templates/rename/empty-texinfo.texi new file mode 100644 index 0000000..adf8221 --- /dev/null +++ b/bash/templates/rename/empty-texinfo.texi @@ -0,0 +1,5 @@ +\input texinfo +@settitle $PROJECT Documentation +@documentencoding UTF-8 + +@bye diff --git a/bash/templates/scripts/assert-docs-spelling.sh b/bash/templates/scripts/assert-docs-spelling.sh new file mode 100755 index 0000000..6720bc5 --- /dev/null +++ b/bash/templates/scripts/assert-docs-spelling.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../doc/ + +export LANG=C.UTF-8 + +for DICT in dictionaries/*.txt; do + diff <(sort "$DICT") "$DICT" || { + echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 + echo " LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2 + exit 1 + } +done + +OUT="$(mktemp)" +LANGS="$(jq -r .langs[] < ../metadata.json)" + +for l in ${LANGS}; do + make SPHINXOPTS="-D language=$l" html + hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT" +done + +if [[ -s "$OUT" ]]; then + printf "\nvvv Mispelled words detected by hunspell.\n\n" + sort < "$OUT" | uniq + printf "\n^^^\n" >&2 + exit 1 +else + echo "No spelling errors detected" + exit 0 +fi diff --git a/bash/templates/scripts/assert-shellcheck.sh b/bash/templates/scripts/assert-shellcheck.sh new file mode 100755 index 0000000..e24c29c --- /dev/null +++ b/bash/templates/scripts/assert-shellcheck.sh @@ -0,0 +1,6 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +git ls-files | grep '\.sh$' | xargs shellcheck diff --git a/bash/templates/scripts/assert-todos.sh b/bash/templates/scripts/assert-todos.sh new file mode 100755 index 0000000..c3139d1 --- /dev/null +++ b/bash/templates/scripts/assert-todos.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +# shellcheck disable=2046 +if grep -R FIXME $(git ls-files) | grep -v '^TODOs.org' | grep -v '^.git/' | grep -v '^scripts/assert-todos.sh'; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.org." + exit 1 +fi + +contains-element() { + local e match="$1" + shift + for e; do [[ "$e" == "$match" ]] && return 0; done + return 1 +} + +KNOWN_IDS=() +has_error=0 +# shellcheck disable=2013 +for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do + if grep -E '^\*\* (CANCELLED|DONE)' <(sed "${todo}q;d" TODOs.org) > /dev/null; then + ID_OFFSET=3 + else + ID_OFFSET=2 + fi + ID="$(sed "$((todo+ID_OFFSET))q;d" TODOs.org)" + if grep '^:CUSTOM_ID: .*$' <(echo "$ID") > /dev/null; then + if contains-element "$ID" "${KNOWN_IDS[@]}"; then + echo "Duplicated ID: $ID" + has_error=1 + else + KNOWN_IDS+=("$ID") + fi + else + echo "Missing ID for TODO in line $todo" + has_error=1 + fi +done + +exit "$has_error" diff --git a/bash/templates/scripts/build-sphinx.sh b/bash/templates/scripts/build-sphinx.sh new file mode 100755 index 0000000..658a705 --- /dev/null +++ b/bash/templates/scripts/build-sphinx.sh @@ -0,0 +1,66 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +OUT='public' +PROJECT_UC="__PROJECT_UC__" + +pushd doc +make html +popd + +cp doc/favicon.ico "$OUT" +mv doc/_build/html/_static/ "$OUT/_static/" + +CURRENT_LANG="$(jq -r .current_lang < metadata.json)" +LANGS="$(jq -r .langs[] < metadata.json)" +TAGS="$(git tag | cat - <(echo master))" + +for lang in ${LANGS}; do + for tag in ${TAGS}; do + mkdir -p "tmp/$lang/$tag/" + git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . + git reset . + git checkout . + + pushd "tmp/$lang/$tag/doc/" + jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json + + RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json | \ + jq -r 'to_entries[] | [.key, .value] | @csv' | \ + tr -d '\"')" + + if [[ "$lang" != "$CURRENT_LANG" ]]; then + for rename in $RENAMES; do + from="$(echo "$rename" | cut -d, -f1)" + to="$(echo "$rename" | cut -d, -f2)" + mv "${from}.rst" "${to}.rst" + sed -i "s/^ $from$/ $to/" index.rst + done + fi + + make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html + popd + + mkdir "$OUT/$lang/" + + mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/" + pushd "$OUT/$lang/$tag/" + rm -rf _static/ + ln -s ../../_static . + popd + + mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/" + pushd "$OUT/$lang/$tag/single/" + rm -rf _static/ + ln -s ../../../_static . + rm -rf _images/ + ln -s ../_images . + popd + + mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" + done +done + +gitstats . "$OUT/gitstats/" diff --git a/bash/templates/scripts/ci-build.sh b/bash/templates/scripts/ci-build.sh new file mode 100755 index 0000000..0e2b4b1 --- /dev/null +++ b/bash/templates/scripts/ci-build.sh @@ -0,0 +1,40 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +set -x + +PREFIX='/srv/ci/$PROJECT' +mkdir -p "${DOLLAR}PREFIX" +read -r _ SHA _ # oldrev newrev refname +FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log" +LOGFILE="${DOLLAR}PREFIX/${DOLLAR}FILENAME" +exec &> >(tee -a "${DOLLAR}LOGFILE") + +echo "Starting CI job at: ${DOLLAR}(date -Is)" + +finish() { + STATUS="${DOLLAR}?" + printf "\n\n>>> exit status was %s\n" "${DOLLAR}STATUS" + echo "Finishing CI job at: ${DOLLAR}(date -Is)" + popd + NOTE=$(cat <>> CI logs added as Git note." +} +trap finish EXIT + +unset GIT_DIR +CLONE="${DOLLAR}(mktemp -d)" +git clone . "${DOLLAR}CLONE" +pushd "${DOLLAR}CLONE" +git config --global user.email git@euandre.org +git config --global user.name 'EuAndreh CI' + +./scripts/with-container.sh '${AUTOTOOLS_SETUP}make clean check public' +rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/ diff --git a/bash/templates/scripts/generate-tasks-and-bugs.sh b/bash/templates/scripts/generate-tasks-and-bugs.sh new file mode 100755 index 0000000..cbbce29 --- /dev/null +++ b/bash/templates/scripts/generate-tasks-and-bugs.sh @@ -0,0 +1,24 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +mkdir -p public + +cat workflow/vendor/org.css workflow/workflow.css > public/styles.css + +sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ + head -n -1 | \ + cat workflow/preamble.org - > tasks-and-bugs.org + +emacs tasks-and-bugs.org \ + -l workflow/vendor/htmlize.el \ + --eval '(setq org-export-allow-bind-keywords t)' \ + -f org-html-export-to-html \ + --batch \ + --kill + +# Add anchor link to bug headers +perl -pe \ + 's|^

    (.*)

    $|

    \2
    #\1

    |' \ + tasks-and-bugs.html > public/tasks-and-bugs.html diff --git a/bash/templates/scripts/with-container.sh b/bash/templates/scripts/with-container.sh new file mode 100755 index 0000000..1261022 --- /dev/null +++ b/bash/templates/scripts/with-container.sh @@ -0,0 +1,3 @@ +#!/usr/bin/env bash + +guix time-machine -C guix/channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" diff --git a/bash/templates/shell.nix b/bash/templates/shell.nix deleted file mode 100644 index af299aa..0000000 --- a/bash/templates/shell.nix +++ /dev/null @@ -1 +0,0 @@ -(import ./default.nix).shell diff --git a/bash/templates/simple-pre-push-hook.sh b/bash/templates/simple-pre-push-hook.sh deleted file mode 100755 index b67b13d..0000000 --- a/bash/templates/simple-pre-push-hook.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -set -x - -jq -r .description < metadata.json | ssh euandreh.xyz 'cat > /data/git/$PROJECT.git/description' diff --git a/bash/templates/tests.sh b/bash/templates/tests.sh deleted file mode 100755 index 466c1f0..0000000 --- a/bash/templates/tests.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -set -x - -echo "Project-wide tests" -./scripts/assert-nixfmt.sh -./scripts/assert-shellcheck.sh -./scripts/assert-todos.sh -./scripts/assert-docs-spelling.sh diff --git a/bash/templates/utils-i18n.nix b/bash/templates/utils-i18n.nix deleted file mode 100644 index 5253e78..0000000 --- a/bash/templates/utils-i18n.nix +++ /dev/null @@ -1,57 +0,0 @@ -{ pkgs }: rec { - sphinx-intl = with pkgs.python3.pkgs; - buildPythonPackage rec { - pname = "sphinx-intl"; - version = "2.0.1"; - src = fetchPypi { - inherit pname version; - sha256 = "1d1q0sanjp4nkfvhsxi75zf3xjyyi8nzxvl3v7l0jy9ld70nwnmj"; - }; - propagatedBuildInputs = with pkgs.python3Packages; [ Babel click sphinx ]; - }; - dicts = rec { - mkDict = let - prefix = - "https://raw.githubusercontent.com/wooorm/dictionaries/61016e00e276f9bf5e52cbc6c02a45f2e49b2c7e/dictionaries"; - in { lang, dicSHA256, affSHA256 }: - let - dic = builtins.fetchurl { - url = "${DOLLAR}{prefix}/${DOLLAR}{lang}/index.dic"; - sha256 = dicSHA256; - }; - aff = builtins.fetchurl { - url = "${DOLLAR}{prefix}/${DOLLAR}{lang}/index.aff"; - sha256 = affSHA256; - }; - in pkgs.stdenv.mkDerivation { - name = "$PROJECT-dict-${DOLLAR}{lang}"; - builder = builtins.toFile "builder.sh" '' - source ${DOLLAR}stdenv/setup - install -dm755 ${DOLLAR}out/share/hunspell - install -m644 ${DOLLAR}{dic} ${DOLLAR}out/share/hunspell/${DOLLAR}{lang}.dic - install -m644 ${DOLLAR}{aff} ${DOLLAR}out/share/hunspell/${DOLLAR}{lang}.aff - runHook postInstall - ''; - }; - en = mkDict { - lang = "en"; - dicSHA256 = "1k4660ccwwpwac0rc7b8ih3vd24kxgvljkrakv2l1f72yfpw3bp2"; - affSHA256 = "0yvc2fhc03y0y1gwjyb20ifcrxnzm3ama1fri9r5gna092fz3qca"; - }; - pt = mkDict { - lang = "pt"; - dicSHA256 = "1z0kfxv8m361xhp4zwdlsn2ib8q3rnljj0b2s4482alyxpd00h9x"; - affSHA256 = "1ssj1g7qwh0lv3ajzvchwsfr7cgzrlqms28m1j3gm1y2avi50qhw"; - }; - fr = mkDict { - lang = "fr"; - dicSHA256 = "10p6jlk9j117mjd1z3dp3vfszcvxqha11kfvksqhvrq4ld9xwzbn"; - affSHA256 = "0d6k608h7gm1za3vdq1fhlwqzz2zxg1z0bx1bfvi0spg4a2mn09p"; - }; - eo = mkDict { - lang = "eo"; - dicSHA256 = "1hbs8f67kq953llcx8pm0rwi2ln2y693pva952fb9mjc4l99ic3m"; - affSHA256 = "198jaiab98xks5srizi3ww7sg5biqhjl7acjhrsrmcycp8jvns56"; - }; - }; -} diff --git a/bash/templates/utils.nix b/bash/templates/utils.nix deleted file mode 100644 index 82ecf67..0000000 --- a/bash/templates/utils.nix +++ /dev/null @@ -1,65 +0,0 @@ -{ pkgs, src, projectBuildInputs, preTestPhaseSetup ? "" }: rec { - test = pkgs.stdenv.mkDerivation { - inherit src; - name = "$PROJECT-test"; - buildInputs = projectBuildInputs; - phases = "unpackPhase buildPhase"; - buildPhase = '' - patchShebangs . - ${DOLLAR}{preTestPhaseSetup} - ./tests.sh - touch ${DOLLAR}out - ''; - }; - site = let - orgcss = builtins.fetchurl { - url = "https://gongzhitaao.org/orgcss/org.css"; - sha256 = "1ym7askpqaa704bp72pjzz61p18q3dfjyfgqd6h206j6klvx0zfy"; - }; - htmlize = builtins.fetchurl { - url = - "https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el"; - sha256 = "0p9bzvvwhpbkgx3p8m1f9yjx6abaly44jp24lkr77r1zii4nzgdd"; - }; - in pkgs.stdenv.mkDerivation { - inherit src; - name = "$PROJECT-site"; - buildInputs = projectBuildInputs; - phases = "unpackPhase buildPhase"; - buildPhase = '' - patchShebangs . - mkdir ${DOLLAR}out - cat ${DOLLAR}{orgcss} workflow/workflow.css > ${DOLLAR}out/styles.css - ./scripts/build-site.sh ${DOLLAR}out ${DOLLAR}{htmlize} - ''; - }; - publishScript = pkgs.writeShellScriptBin "publish.sh" '' - set -Eeuo pipefail - - OUT_PATH=/data/static/$PROJECT/ - mkdir -p ${DOLLAR}OUT_PATH - chmod -R +w ${DOLLAR}OUT_PATH # assert the previous dir is writable - rm -rf ${DOLLAR}OUT_PATH - cp -R ${DOLLAR}{site} ${DOLLAR}OUT_PATH - chmod -R +w ${DOLLAR}OUT_PATH # make the new one writable too - ''; - remotePublishScript = pkgs.writeShellScriptBin "publish.sh" '' - set -euo pipefail - SERVER_URL='euandreh.xyz' - REMOTE_PATH=/data/static/$PROJECT/ - ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" mkdir -p "${DOLLAR}REMOTE_PATH" - ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" chmod -R +w "${DOLLAR}REMOTE_PATH" - ${DOLLAR}{pkgs.openssh}/bin/ssh -o StrictHostKeyChecking=no "${DOLLAR}SERVER_URL" rm -rf "${DOLLAR}REMOTE_PATH/*" - ${DOLLAR}{pkgs.rsync}/bin/rsync -avzP \ - --rsh="ssh -o StrictHostKeyChecking=no" \ - "${DOLLAR}{site}/" \ - "${DOLLAR}SERVER_URL:${DOLLAR}REMOTE_PATH" - ''; - shell = pkgs.mkShell { - name = "$PROJECT-development-environment-shell"; - buildInputs = projectBuildInputs; - shellHook = '' - direnv allow - ''; - }; -} diff --git a/bash/templates/workflow.css b/bash/templates/workflow.css deleted file mode 100644 index 0e4f851..0000000 --- a/bash/templates/workflow.css +++ /dev/null @@ -1,49 +0,0 @@ -/* EuAndreh's additions */ - -#tasks, #bugs { - border-bottom: 5px; -} - -a.header-anchor { - font-size: 0.5em; - opacity: 0.5; -} - -.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO { - color: #fff; - padding: .1em .3em; - border-radius: 3px; - background-clip: padding-box; - font-size: 80%; - font-family: Lucida Console,monospace; - line-height: 1 -} - -/* - Replicate colors from: - https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866 -*/ - -.TODO { - background-color: brown; -} - -.DOING { - background-color: yellowgreen; -} - -.WAITING, .MEETING { - background-color: gray; -} - -.INACTIVE { - background-color: orange; -} - -.NEXT { - background-color: red; -} - -.CANCELLED, .DONE { - background-color: green; -} diff --git a/bash/templates/workflow/preamble.org b/bash/templates/workflow/preamble.org new file mode 100644 index 0000000..1da69e7 --- /dev/null +++ b/bash/templates/workflow/preamble.org @@ -0,0 +1,25 @@ +#+TITLE: Tasks and bug listing for $PROJECT_UC +#+AUTHOR: EuAndreh +#+BIND: org-html-validation-link nil +#+BIND: org-html-scripts nil +#+BIND: org-html-postamble nil +#+BIND: org-export-html-headline-anchor-format nil +#+BIND: org-html-doctype "html5" +#+OPTIONS: toc:nil html-style:nil num:nil +#+HTML_HEAD: +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] +#+MACRO: bug bug\nbsp{}[[#$1][#$1]] +#+MACRO: task task\nbsp{}[[#$1][#$1]] +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) + +Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. + +Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. + +/Você também pode escrever em português./ + +/Vous pouvez aussi écrire en français./ + +#+TOC: headlines 2 diff --git a/bash/templates/workflow/vendor/htmlize.el b/bash/templates/workflow/vendor/htmlize.el new file mode 100644 index 0000000..02f251a --- /dev/null +++ b/bash/templates/workflow/vendor/htmlize.el @@ -0,0 +1,1884 @@ +;;;; Taken from: +;;;; https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el + +;;; htmlize.el --- Convert buffer text and decorations to HTML. -*- lexical-binding: t -*- + +;; Copyright (C) 1997-2003,2005,2006,2009,2011,2012,2014,2017,2018 Hrvoje Niksic + +;; Author: Hrvoje Niksic +;; Keywords: hypermedia, extensions +;; Version: 1.55 + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; This package converts the buffer text and the associated +;; decorations to HTML. Mail to to discuss +;; features and additions. All suggestions are more than welcome. + +;; To use it, just switch to the buffer you want HTML-ized and type +;; `M-x htmlize-buffer'. You will be switched to a new buffer that +;; contains the resulting HTML code. You can edit and inspect this +;; buffer, or you can just save it with C-x C-w. `M-x htmlize-file' +;; will find a file, fontify it, and save the HTML version in +;; FILE.html, without any additional intervention. `M-x +;; htmlize-many-files' allows you to htmlize any number of files in +;; the same manner. `M-x htmlize-many-files-dired' does the same for +;; files marked in a dired buffer. + +;; htmlize supports three types of HTML output, selected by setting +;; `htmlize-output-type': `css', `inline-css', and `font'. In `css' +;; mode, htmlize uses cascading style sheets to specify colors; it +;; generates classes that correspond to Emacs faces and uses ... to color parts of text. In this mode, the +;; produced HTML is valid under the 4.01 strict DTD, as confirmed by +;; the W3C validator. `inline-css' is like `css', except the CSS is +;; put directly in the STYLE attribute of the SPAN element, making it +;; possible to paste the generated HTML into existing HTML documents. +;; In `font' mode, htmlize uses ... to +;; colorize HTML, which is not standard-compliant, but works better in +;; older browsers. `css' mode is the default. + +;; You can also use htmlize from your Emacs Lisp code. When called +;; non-interactively, `htmlize-buffer' and `htmlize-region' will +;; return the resulting HTML buffer, but will not change current +;; buffer or move the point. htmlize will do its best to work on +;; non-windowing Emacs sessions but the result will be limited to +;; colors supported by the terminal. + +;; htmlize aims for compatibility with older Emacs versions. Please +;; let me know if it doesn't work on the version of GNU Emacs that you +;; are using. The package relies on the presence of CL extensions; +;; please don't try to remove that dependency. I see no practical +;; problems with using the full power of the CL extensions, except +;; that one might learn to like them too much. + +;; The latest version is available at: +;; +;; +;; +;; + +;; Thanks go to the many people who have sent reports and contributed +;; comments, suggestions, and fixes. They include Ron Gut, Bob +;; Weiner, Toni Drabik, Peter Breton, Ville Skytta, Thomas Vogels, +;; Juri Linkov, Maciek Pasternacki, and many others. + +;; User quotes: "You sir, are a sick, sick, _sick_ person. :)" +;; -- Bill Perry, author of Emacs/W3 + + +;;; Code: + +(require 'cl) +(eval-when-compile + (defvar font-lock-auto-fontify) + (defvar font-lock-support-mode) + (defvar global-font-lock-mode)) + +(defconst htmlize-version "1.55") + +(defgroup htmlize nil + "Convert buffer text and faces to HTML." + :group 'hypermedia) + +(defcustom htmlize-head-tags "" + "Additional tags to insert within HEAD of the generated document." + :type 'string + :group 'htmlize) + +(defcustom htmlize-output-type 'css + "Output type of generated HTML, one of `css', `inline-css', or `font'. +When set to `css' (the default), htmlize will generate a style sheet +with description of faces, and use it in the HTML document, specifying +the faces in the actual text with . + +When set to `inline-css', the style will be generated as above, but +placed directly in the STYLE attribute of the span ELEMENT: . This makes it easier to paste the resulting HTML to +other documents. + +When set to `font', the properties will be set using layout tags +, , , , and . + +`css' output is normally preferred, but `font' is still useful for +supporting old, pre-CSS browsers, and both `inline-css' and `font' for +easier embedding of colorized text in foreign HTML documents (no style +sheet to carry around)." + :type '(choice (const css) (const inline-css) (const font)) + :group 'htmlize) + +(defcustom htmlize-use-images t + "Whether htmlize generates `img' for images attached to buffer contents." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-force-inline-images nil + "Non-nil means generate all images inline using data URLs. +Normally htmlize converts image descriptors with :file properties to +relative URIs, and those with :data properties to data URIs. With this +flag set, the images specified as a file name are loaded into memory and +embedded in the HTML as data URIs." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-max-alt-text 100 + "Maximum size of text to use as ALT text in images. + +Normally when htmlize encounters text covered by the `display' property +that specifies an image, it generates an `alt' attribute containing the +original text. If the text is larger than `htmlize-max-alt-text' characters, +this will not be done." + :type 'integer + :group 'htmlize) + +(defcustom htmlize-transform-image 'htmlize-default-transform-image + "Function called to modify the image descriptor. + +The function is called with the image descriptor found in the buffer and +the text the image is supposed to replace. It should return a (possibly +different) image descriptor property list or a replacement string to use +instead of of the original buffer text. + +Returning nil is the same as returning the original text." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-generate-hyperlinks t + "Non-nil means auto-generate the links from URLs and mail addresses in buffer. + +This is on by default; set it to nil if you don't want htmlize to +autogenerate such links. Note that this option only turns off automatic +search for contents that looks like URLs and converting them to links. +It has no effect on whether htmlize respects the `htmlize-link' property." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-hyperlink-style " + a { + color: inherit; + background-color: inherit; + font: inherit; + text-decoration: inherit; + } + a:hover { + text-decoration: underline; + } +" + "The CSS style used for hyperlinks when in CSS mode." + :type 'string + :group 'htmlize) + +(defcustom htmlize-replace-form-feeds t + "Non-nil means replace form feeds in source code with HTML separators. +Form feeds are the ^L characters at line beginnings that are sometimes +used to separate sections of source code. If this variable is set to +`t', form feed characters are replaced with the
    separator. If this +is a string, it specifies the replacement to use. Note that
     is
    +temporarily closed before the separator is inserted, so the default
    +replacement is effectively \"

    \".  If you specify
    +another replacement, don't forget to close and reopen the 
     if you
    +want the output to remain valid HTML.
    +
    +If you need more elaborate processing, set this to nil and use
    +htmlize-after-hook."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defcustom htmlize-html-charset nil
    +  "The charset declared by the resulting HTML documents.
    +When non-nil, causes htmlize to insert the following in the HEAD section
    +of the generated HTML:
    +
    +  
    +
    +where CHARSET is the value you've set for htmlize-html-charset.  Valid
    +charsets are defined by MIME and include strings like \"iso-8859-1\",
    +\"iso-8859-15\", \"utf-8\", etc.
    +
    +If you are using non-Latin-1 charsets, you might need to set this for
    +your documents to render correctly.  Also, the W3C validator requires
    +submitted HTML documents to declare a charset.  So if you care about
    +validation, you can use this to prevent the validator from bitching.
    +
    +Needless to say, if you set this, you should actually make sure that
    +the buffer is in the encoding you're claiming it is in.  (This is
    +normally achieved by using the correct file coding system for the
    +buffer.)  If you don't understand what that means, you should probably
    +leave this option in its default setting."
    +  :type '(choice (const :tag "Unset" nil)
    +		 string)
    +  :group 'htmlize)
    +
    +(defcustom htmlize-convert-nonascii-to-entities t
    +  "Whether non-ASCII characters should be converted to HTML entities.
    +
    +When this is non-nil, characters with codes in the 128-255 range will be
    +considered Latin 1 and rewritten as \"&#CODE;\".  Characters with codes
    +above 255 will be converted to \"&#UCS;\", where UCS denotes the Unicode
    +code point of the character.  If the code point cannot be determined,
    +the character will be copied unchanged, as would be the case if the
    +option were nil.
    +
    +When the option is nil, the non-ASCII characters are copied to HTML
    +without modification.  In that case, the web server and/or the browser
    +must be set to understand the encoding that was used when saving the
    +buffer.  (You might also want to specify it by setting
    +`htmlize-html-charset'.)
    +
    +Note that in an HTML entity \"&#CODE;\", CODE is always a UCS code point,
    +which has nothing to do with the charset the page is in.  For example,
    +\"©\" *always* refers to the copyright symbol, regardless of charset
    +specified by the META tag or the charset sent by the HTTP server.  In
    +other words, \"©\" is exactly equivalent to \"©\".
    +
    +For most people htmlize will work fine with this option left at the
    +default setting; don't change it unless you know what you're doing."
    +  :type 'sexp
    +  :group 'htmlize)
    +
    +(defcustom htmlize-ignore-face-size 'absolute
    +  "Whether face size should be ignored when generating HTML.
    +If this is nil, face sizes are used.  If set to t, sizes are ignored
    +If set to `absolute', only absolute size specifications are ignored.
    +Please note that font sizes only work with CSS-based output types."
    +  :type '(choice (const :tag "Don't ignore" nil)
    +		 (const :tag "Ignore all" t)
    +		 (const :tag "Ignore absolute" absolute))
    +  :group 'htmlize)
    +
    +(defcustom htmlize-css-name-prefix ""
    +  "The prefix used for CSS names.
    +The CSS names that htmlize generates from face names are often too
    +generic for CSS files; for example, `font-lock-type-face' is transformed
    +to `type'.  Use this variable to add a prefix to the generated names.
    +The string \"htmlize-\" is an example of a reasonable prefix."
    +  :type 'string
    +  :group 'htmlize)
    +
    +(defcustom htmlize-use-rgb-txt t
    +  "Whether `rgb.txt' should be used to convert color names to RGB.
    +
    +This conversion means determining, for instance, that the color
    +\"IndianRed\" corresponds to the (205, 92, 92) RGB triple.  `rgb.txt'
    +is the X color database that maps hundreds of color names to such RGB
    +triples.  When this variable is non-nil, `htmlize' uses `rgb.txt' to
    +look up color names.
    +
    +If this variable is nil, htmlize queries Emacs for RGB components of
    +colors using `color-instance-rgb-components' and `color-values'.
    +This can yield incorrect results on non-true-color displays.
    +
    +If the `rgb.txt' file is not found (which will be the case if you're
    +running Emacs on non-X11 systems), this option is ignored."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defvar htmlize-face-overrides nil
    +  "Overrides for face definitions.
    +
    +Normally face definitions are taken from Emacs settings for fonts
    +in the current frame.  For faces present in this plist, the
    +definitions will be used instead.  Keys in the plist are symbols
    +naming the face and values are the overriding definitions.  For
    +example:
    +
    +  (setq htmlize-face-overrides
    +        '(font-lock-warning-face \"black\"
    +          font-lock-function-name-face \"red\"
    +          font-lock-comment-face \"blue\"
    +          default (:foreground \"dark-green\" :background \"yellow\")))
    +
    +This variable can be also be `let' bound when running `htmlize-buffer'.")
    +
    +(defcustom htmlize-untabify t
    +  "Non-nil means untabify buffer contents during htmlization."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defcustom htmlize-html-major-mode nil
    +  "The mode the newly created HTML buffer will be put in.
    +Set this to nil if you prefer the default (fundamental) mode."
    +  :type '(radio (const :tag "No mode (fundamental)" nil)
    +		 (function-item html-mode)
    +		 (function :tag "User-defined major mode"))
    +  :group 'htmlize)
    +
    +(defcustom htmlize-pre-style nil
    +  "When non-nil, `
    ' tags will be decorated with style
    +information in `font' and `inline-css' modes. This allows a
    +consistent background for captures of regions."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defvar htmlize-before-hook nil
    +  "Hook run before htmlizing a buffer.
    +The hook functions are run in the source buffer (not the resulting HTML
    +buffer).")
    +
    +(defvar htmlize-after-hook nil
    +  "Hook run after htmlizing a buffer.
    +Unlike `htmlize-before-hook', these functions are run in the generated
    +HTML buffer.  You may use them to modify the outlook of the final HTML
    +output.")
    +
    +(defvar htmlize-file-hook nil
    +  "Hook run by `htmlize-file' after htmlizing a file, but before saving it.")
    +
    +(defvar htmlize-buffer-places)
    +
    +;;; Some cross-Emacs compatibility.
    +
    +;; We need a function that efficiently finds the next change of a
    +;; property regardless of whether the change occurred because of a
    +;; text property or an extent/overlay.
    +(defun htmlize-next-change (pos prop &optional limit)
    +  (if prop
    +      (next-single-char-property-change pos prop nil limit)
    +    (next-char-property-change pos limit)))
    +
    +(defun htmlize-overlay-faces-at (pos)
    +  (delq nil (mapcar (lambda (o) (overlay-get o 'face)) (overlays-at pos))))
    +
    +(defun htmlize-next-face-change (pos &optional limit)
    +  ;; (htmlize-next-change pos 'face limit) would skip over entire
    +  ;; overlays that specify the `face' property, even when they
    +  ;; contain smaller text properties that also specify `face'.
    +  ;; Emacs display engine merges those faces, and so must we.
    +  (or limit
    +      (setq limit (point-max)))
    +  (let ((next-prop (next-single-property-change pos 'face nil limit))
    +        (overlay-faces (htmlize-overlay-faces-at pos)))
    +    (while (progn
    +             (setq pos (next-overlay-change pos))
    +             (and (< pos next-prop)
    +                  (equal overlay-faces (htmlize-overlay-faces-at pos)))))
    +    (setq pos (min pos next-prop))
    +    ;; Additionally, we include the entire region that specifies the
    +    ;; `display' property.
    +    (when (get-char-property pos 'display)
    +      (setq pos (next-single-char-property-change pos 'display nil limit)))
    +    pos))
    +
    +(defmacro htmlize-lexlet (&rest letforms)
    +  (declare (indent 1) (debug let))
    +  (if (and (boundp 'lexical-binding)
    +           lexical-binding)
    +      `(let ,@letforms)
    +    ;; cl extensions have a macro implementing lexical let
    +    `(lexical-let ,@letforms)))
    +
    +
    +;;; Transformation of buffer text: HTML escapes, untabification, etc.
    +
    +(defvar htmlize-basic-character-table
    +  ;; Map characters in the 0-127 range to either one-character strings
    +  ;; or to numeric entities.
    +  (let ((table (make-vector 128 ?\0)))
    +    ;; Map characters in the 32-126 range to themselves, others to
    +    ;; &#CODE entities;
    +    (dotimes (i 128)
    +      (setf (aref table i) (if (and (>= i 32) (<= i 126))
    +			       (char-to-string i)
    +			     (format "&#%d;" i))))
    +    ;; Set exceptions manually.
    +    (setf
    +     ;; Don't escape newline, carriage return, and TAB.
    +     (aref table ?\n) "\n"
    +     (aref table ?\r) "\r"
    +     (aref table ?\t) "\t"
    +     ;; Escape &, <, and >.
    +     (aref table ?&) "&"
    +     (aref table ?<) "<"
    +     (aref table ?>) ">"
    +     ;; Not escaping '"' buys us a measurable speedup.  It's only
    +     ;; necessary to quote it for strings used in attribute values,
    +     ;; which htmlize doesn't typically do.
    +     ;(aref table ?\") """
    +     )
    +    table))
    +
    +;; A cache of HTML representation of non-ASCII characters.  Depending
    +;; on the setting of `htmlize-convert-nonascii-to-entities', this maps
    +;; non-ASCII characters to either "&#;" or "" (mapconcat's
    +;; mapper must always return strings).  It's only filled as characters
    +;; are encountered, so that in a buffer with e.g. French text, it will
    +;; only ever contain French accented characters as keys.  It's cleared
    +;; on each entry to htmlize-buffer-1 to allow modifications of
    +;; `htmlize-convert-nonascii-to-entities' to take effect.
    +(defvar htmlize-extended-character-cache (make-hash-table :test 'eq))
    +
    +(defun htmlize-protect-string (string)
    +  "HTML-protect string, escaping HTML metacharacters and I18N chars."
    +  ;; Only protecting strings that actually contain unsafe or non-ASCII
    +  ;; chars removes a lot of unnecessary funcalls and consing.
    +  (if (not (string-match "[^\r\n\t -%'-;=?-~]" string))
    +      string
    +    (mapconcat (lambda (char)
    +		 (cond
    +		  ((< char 128)
    +		   ;; ASCII: use htmlize-basic-character-table.
    +		   (aref htmlize-basic-character-table char))
    +		  ((gethash char htmlize-extended-character-cache)
    +		   ;; We've already seen this char; return the cached
    +		   ;; string.
    +		   )
    +		  ((not htmlize-convert-nonascii-to-entities)
    +		   ;; If conversion to entities is not desired, always
    +		   ;; copy the char literally.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (char-to-string char)))
    +		  ((< char 256)
    +		   ;; Latin 1: no need to call encode-char.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (format "&#%d;" char)))
    +		  ((encode-char char 'ucs)
    +                   ;; Must check if encode-char works for CHAR;
    +                   ;; it fails for Arabic and possibly elsewhere.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (format "&#%d;" (encode-char char 'ucs))))
    +		  (t
    +		   ;; encode-char doesn't work for this char.  Copy it
    +		   ;; unchanged and hope for the best.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (char-to-string char)))))
    +	       string "")))
    +
    +(defun htmlize-attr-escape (string)
    +  ;; Like htmlize-protect-string, but also escapes double-quoted
    +  ;; strings to make it usable in attribute values.
    +  (setq string (htmlize-protect-string string))
    +  (if (not (string-match "\"" string))
    +      string
    +    (mapconcat (lambda (char)
    +                 (if (eql char ?\")
    +                     """
    +                   (char-to-string char)))
    +               string "")))
    +
    +(defsubst htmlize-concat (list)
    +  (if (and (consp list) (null (cdr list)))
    +      ;; Don't create a new string in the common case where the list only
    +      ;; consists of one element.
    +      (car list)
    +    (apply #'concat list)))
    +
    +(defun htmlize-format-link (linkprops text)
    +  (let ((uri (if (stringp linkprops)
    +                 linkprops
    +               (plist-get linkprops :uri)))
    +        (escaped-text (htmlize-protect-string text)))
    +    (if uri
    +        (format "%s" (htmlize-attr-escape uri) escaped-text)
    +      escaped-text)))
    +
    +(defun htmlize-escape-or-link (string)
    +  ;; Escape STRING and/or add hyperlinks.  STRING comes from a
    +  ;; `display' property.
    +  (let ((pos 0) (end (length string)) outlist)
    +    (while (< pos end)
    +      (let* ((link (get-char-property pos 'htmlize-link string))
    +             (next-link-change (next-single-property-change
    +                                pos 'htmlize-link string end))
    +             (chunk (substring string pos next-link-change)))
    +        (push
    +         (cond (link
    +                (htmlize-format-link link chunk))
    +               ((get-char-property 0 'htmlize-literal chunk)
    +                chunk)
    +               (t
    +                (htmlize-protect-string chunk)))
    +         outlist)
    +        (setq pos next-link-change)))
    +    (htmlize-concat (nreverse outlist))))
    +
    +(defun htmlize-display-prop-to-html (display text)
    +  (let (desc)
    +    (cond ((stringp display)
    +           ;; Emacs ignores recursive display properties.
    +           (htmlize-escape-or-link display))
    +          ((not (eq (car-safe display) 'image))
    +           (htmlize-protect-string text))
    +          ((null (setq desc (funcall htmlize-transform-image
    +                                     (cdr display) text)))
    +           (htmlize-escape-or-link text))
    +          ((stringp desc)
    +           (htmlize-escape-or-link desc))
    +          (t
    +           (htmlize-generate-image desc text)))))
    +
    +(defun htmlize-string-to-html (string)
    +  ;; Convert the string to HTML, including images attached as
    +  ;; `display' property and links as `htmlize-link' property.  In a
    +  ;; string without images or links, this is equivalent to
    +  ;; `htmlize-protect-string'.
    +  (let ((pos 0) (end (length string)) outlist)
    +    (while (< pos end)
    +      (let* ((display (get-char-property pos 'display string))
    +             (next-display-change (next-single-property-change
    +                                   pos 'display string end))
    +             (chunk (substring string pos next-display-change)))
    +        (push
    +         (if display
    +             (htmlize-display-prop-to-html display chunk)
    +           (htmlize-escape-or-link chunk))
    +         outlist)
    +        (setq pos next-display-change)))
    +    (htmlize-concat (nreverse outlist))))
    +
    +(defun htmlize-default-transform-image (imgprops _text)
    +  "Default transformation of image descriptor to something usable in HTML.
    +
    +If `htmlize-use-images' is nil, the function always returns nil, meaning
    +use original text.  Otherwise, it tries to find the image for images that
    +specify a file name.  If `htmlize-force-inline-images' is non-nil, it also
    +converts the :file attribute to :data and returns the modified property
    +list."
    +  (when htmlize-use-images
    +    (when (plist-get imgprops :file)
    +      (let ((location (plist-get (cdr (find-image (list imgprops))) :file)))
    +        (when location
    +          (setq imgprops (plist-put (copy-list imgprops) :file location)))))
    +    (if htmlize-force-inline-images
    +        (let ((location (plist-get imgprops :file))
    +              data)
    +          (when location
    +            (with-temp-buffer
    +              (condition-case nil
    +                  (progn
    +                    (insert-file-contents-literally location)
    +                    (setq data (buffer-string)))
    +                (error nil))))
    +          ;; if successful, return the new plist, otherwise return
    +          ;; nil, which will use the original text
    +          (and data
    +               (plist-put (plist-put imgprops :file nil)
    +                          :data data)))
    +      imgprops)))
    +
    +(defun htmlize-alt-text (_imgprops origtext)
    +  (and (/= (length origtext) 0)
    +       (<= (length origtext) htmlize-max-alt-text)
    +       (not (string-match "[\0-\x1f]" origtext))
    +       origtext))
    +
    +(defun htmlize-generate-image (imgprops origtext)
    +  (let* ((alt-text (htmlize-alt-text imgprops origtext))
    +         (alt-attr (if alt-text
    +                       (format " alt=\"%s\"" (htmlize-attr-escape alt-text))
    +                     "")))
    +    (cond ((plist-get imgprops :file)
    +           ;; Try to find the image in image-load-path
    +           (let* ((found-props (cdr (find-image (list imgprops))))
    +                  (file (or (plist-get found-props :file)
    +                            (plist-get imgprops :file))))
    +             (format ""
    +                     (htmlize-attr-escape (file-relative-name file))
    +                     alt-attr)))
    +          ((plist-get imgprops :data)
    +           (format ""
    +                   (or (plist-get imgprops :type) "")
    +                   (base64-encode-string (plist-get imgprops :data))
    +                   alt-attr)))))
    +
    +(defconst htmlize-ellipsis "...")
    +(put-text-property 0 (length htmlize-ellipsis) 'htmlize-ellipsis t htmlize-ellipsis)
    +
    +(defun htmlize-match-inv-spec (inv)
    +  (member* inv buffer-invisibility-spec
    +           :key (lambda (i)
    +                  (if (symbolp i) i (car i)))))
    +
    +(defun htmlize-decode-invisibility-spec (invisible)
    +  ;; Return t, nil, or `ellipsis', depending on how invisible text should be inserted.
    +
    +  (if (not (listp buffer-invisibility-spec))
    +      ;; If buffer-invisibility-spec is not a list, then all
    +      ;; characters with non-nil `invisible' property are visible.
    +      (not invisible)
    +
    +    ;; Otherwise, the value of a non-nil `invisible' property can be:
    +    ;; 1. a symbol -- make the text invisible if it matches
    +    ;;    buffer-invisibility-spec.
    +    ;; 2. a list of symbols -- make the text invisible if
    +    ;;    any symbol in the list matches
    +    ;;    buffer-invisibility-spec.
    +    ;; If the match of buffer-invisibility-spec has a non-nil
    +    ;; CDR, replace the invisible text with an ellipsis.
    +    (let ((match (if (symbolp invisible)
    +                     (htmlize-match-inv-spec invisible)
    +                   (some #'htmlize-match-inv-spec invisible))))
    +      (cond ((null match) t)
    +            ((cdr-safe (car match)) 'ellipsis)
    +            (t nil)))))
    +
    +(defun htmlize-add-before-after-strings (beg end text)
    +  ;; Find overlays specifying before-string and after-string in [beg,
    +  ;; pos).  If any are found, splice them into TEXT and return the new
    +  ;; text.
    +  (let (additions)
    +    (dolist (overlay (overlays-in beg end))
    +      (let ((before (overlay-get overlay 'before-string))
    +            (after (overlay-get overlay 'after-string)))
    +        (when after
    +          (push (cons (- (overlay-end overlay) beg)
    +                      after)
    +                additions))
    +        (when before
    +          (push (cons (- (overlay-start overlay) beg)
    +                      before)
    +                additions))))
    +    (if additions
    +        (let ((textlist nil)
    +              (strpos 0))
    +          (dolist (add (stable-sort additions #'< :key #'car))
    +            (let ((addpos (car add))
    +                  (addtext (cdr add)))
    +              (push (substring text strpos addpos) textlist)
    +              (push addtext textlist)
    +              (setq strpos addpos)))
    +          (push (substring text strpos) textlist)
    +          (apply #'concat (nreverse textlist)))
    +      text)))
    +
    +(defun htmlize-copy-prop (prop beg end string)
    +  ;; Copy the specified property from the specified region of the
    +  ;; buffer to the target string.  We cannot rely on Emacs to copy the
    +  ;; property because we want to handle properties coming from both
    +  ;; text properties and overlays.
    +  (let ((pos beg))
    +    (while (< pos end)
    +      (let ((value (get-char-property pos prop))
    +            (next-change (htmlize-next-change pos prop end)))
    +        (when value
    +          (put-text-property (- pos beg) (- next-change beg)
    +                             prop value string))
    +        (setq pos next-change)))))
    +
    +(defun htmlize-get-text-with-display (beg end)
    +  ;; Like buffer-substring-no-properties, except it copies the
    +  ;; `display' property from the buffer, if found.
    +  (let ((text (buffer-substring-no-properties beg end)))
    +    (htmlize-copy-prop 'display beg end text)
    +    (htmlize-copy-prop 'htmlize-link beg end text)
    +    (setq text (htmlize-add-before-after-strings beg end text))
    +    text))
    +
    +(defun htmlize-buffer-substring-no-invisible (beg end)
    +  ;; Like buffer-substring-no-properties, but don't copy invisible
    +  ;; parts of the region.  Where buffer-substring-no-properties
    +  ;; mandates an ellipsis to be shown, htmlize-ellipsis is inserted.
    +  (let ((pos beg)
    +	visible-list invisible show last-show next-change)
    +    ;; Iterate over the changes in the `invisible' property and filter
    +    ;; out the portions where it's non-nil, i.e. where the text is
    +    ;; invisible.
    +    (while (< pos end)
    +      (setq invisible (get-char-property pos 'invisible)
    +	    next-change (htmlize-next-change pos 'invisible end)
    +            show (htmlize-decode-invisibility-spec invisible))
    +      (cond ((eq show t)
    +	     (push (htmlize-get-text-with-display pos next-change)
    +                   visible-list))
    +            ((and (eq show 'ellipsis)
    +                  (not (eq last-show 'ellipsis))
    +                  ;; Conflate successive ellipses.
    +                  (push htmlize-ellipsis visible-list))))
    +      (setq pos next-change last-show show))
    +    (htmlize-concat (nreverse visible-list))))
    +
    +(defun htmlize-trim-ellipsis (text)
    +  ;; Remove htmlize-ellipses ("...") from the beginning of TEXT if it
    +  ;; starts with it.  It checks for the special property of the
    +  ;; ellipsis so it doesn't work on ordinary text that begins with
    +  ;; "...".
    +  (if (get-text-property 0 'htmlize-ellipsis text)
    +      (substring text (length htmlize-ellipsis))
    +    text))
    +
    +(defconst htmlize-tab-spaces
    +  ;; A table of strings with spaces.  (aref htmlize-tab-spaces 5) is
    +  ;; like (make-string 5 ?\ ), except it doesn't cons.
    +  (let ((v (make-vector 32 nil)))
    +    (dotimes (i (length v))
    +      (setf (aref v i) (make-string i ?\ )))
    +    v))
    +
    +(defun htmlize-untabify-string (text start-column)
    +  "Untabify TEXT, assuming it starts at START-COLUMN."
    +  (let ((column start-column)
    +	(last-match 0)
    +	(chunk-start 0)
    +	chunks match-pos tab-size)
    +    (while (string-match "[\t\n]" text last-match)
    +      (setq match-pos (match-beginning 0))
    +      (cond ((eq (aref text match-pos) ?\t)
    +	     ;; Encountered a tab: create a chunk of text followed by
    +	     ;; the expanded tab.
    +	     (push (substring text chunk-start match-pos) chunks)
    +	     ;; Increase COLUMN by the length of the text we've
    +	     ;; skipped since last tab or newline.  (Encountering
    +	     ;; newline resets it.)
    +	     (incf column (- match-pos last-match))
    +	     ;; Calculate tab size based on tab-width and COLUMN.
    +	     (setq tab-size (- tab-width (% column tab-width)))
    +	     ;; Expand the tab, carefully recreating the `display'
    +	     ;; property if one was on the TAB.
    +             (let ((display (get-text-property match-pos 'display text))
    +                   (expanded-tab (aref htmlize-tab-spaces tab-size)))
    +               (when display
    +                 (put-text-property 0 tab-size 'display display expanded-tab))
    +               (push expanded-tab chunks))
    +	     (incf column tab-size)
    +	     (setq chunk-start (1+ match-pos)))
    +	    (t
    +	     ;; Reset COLUMN at beginning of line.
    +	     (setq column 0)))
    +      (setq last-match (1+ match-pos)))
    +    ;; If no chunks have been allocated, it means there have been no
    +    ;; tabs to expand.  Return TEXT unmodified.
    +    (if (null chunks)
    +	text
    +      (when (< chunk-start (length text))
    +	;; Push the remaining chunk.
    +	(push (substring text chunk-start) chunks))
    +      ;; Generate the output from the available chunks.
    +      (htmlize-concat (nreverse chunks)))))
    +
    +(defun htmlize-extract-text (beg end trailing-ellipsis)
    +  ;; Extract buffer text, sans the invisible parts.  Then
    +  ;; untabify it and escape the HTML metacharacters.
    +  (let ((text (htmlize-buffer-substring-no-invisible beg end)))
    +    (when trailing-ellipsis
    +      (setq text (htmlize-trim-ellipsis text)))
    +    ;; If TEXT ends up empty, don't change trailing-ellipsis.
    +    (when (> (length text) 0)
    +      (setq trailing-ellipsis
    +            (get-text-property (1- (length text))
    +                               'htmlize-ellipsis text)))
    +    (when htmlize-untabify
    +      (setq text (htmlize-untabify-string text (current-column))))
    +    (setq text (htmlize-string-to-html text))
    +    (values text trailing-ellipsis)))
    +
    +(defun htmlize-despam-address (string)
    +  "Replace every occurrence of '@' in STRING with %40.
    +This is used to protect mailto links without modifying their meaning."
    +  ;; Suggested by Ville Skytta.
    +  (while (string-match "@" string)
    +    (setq string (replace-match "%40" nil t string)))
    +  string)
    +
    +(defun htmlize-make-tmp-overlay (beg end props)
    +  (let ((overlay (make-overlay beg end)))
    +    (overlay-put overlay 'htmlize-tmp-overlay t)
    +    (while props
    +      (overlay-put overlay (pop props) (pop props)))
    +    overlay))
    +
    +(defun htmlize-delete-tmp-overlays ()
    +  (dolist (overlay (overlays-in (point-min) (point-max)))
    +    (when (overlay-get overlay 'htmlize-tmp-overlay)
    +      (delete-overlay overlay))))
    +
    +(defun htmlize-make-link-overlay (beg end uri)
    +  (htmlize-make-tmp-overlay beg end `(htmlize-link (:uri ,uri))))
    +
    +(defun htmlize-create-auto-links ()
    +  "Add `htmlize-link' property to all mailto links in the buffer."
    +  (save-excursion
    +    (goto-char (point-min))
    +    (while (re-search-forward
    +            "<\\(\\(mailto:\\)?\\([-=+_.a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\\)\\)>"
    +            nil t)
    +      (let* ((address (match-string 3))
    +             (beg (match-beginning 0)) (end (match-end 0))
    +             (uri (concat "mailto:" (htmlize-despam-address address))))
    +        (htmlize-make-link-overlay beg end uri)))
    +    (goto-char (point-min))
    +    (while (re-search-forward "<\\(\\(URL:\\)?\\([a-zA-Z]+://[^;]+\\)\\)>"
    +                              nil t)
    +      (htmlize-make-link-overlay
    +       (match-beginning 0) (match-end 0) (match-string 3)))))
    +
    +;; Tests for htmlize-create-auto-links:
    +
    +;; 
    +;; 
    +;; 
    +;; 
    +;; 
    +;; 
    +
    +(defun htmlize-shadow-form-feeds ()
    +  (let ((s "\n
    ")) + (put-text-property 0 (length s) 'htmlize-literal t s) + (let ((disp `(display ,s))) + (while (re-search-forward "\n\^L" nil t) + (let* ((beg (match-beginning 0)) + (end (match-end 0)) + (form-feed-pos (1+ beg)) + ;; don't process ^L if invisible or covered by `display' + (show (and (htmlize-decode-invisibility-spec + (get-char-property form-feed-pos 'invisible)) + (not (get-char-property form-feed-pos 'display))))) + (when show + (htmlize-make-tmp-overlay beg end disp))))))) + +(defun htmlize-defang-local-variables () + ;; Juri Linkov reports that an HTML-ized "Local variables" can lead + ;; visiting the HTML to fail with "Local variables list is not + ;; properly terminated". He suggested changing the phrase to + ;; syntactically equivalent HTML that Emacs doesn't recognize. + (goto-char (point-min)) + (while (search-forward "Local Variables:" nil t) + (replace-match "Local Variables:" nil t))) + + +;;; Color handling. + +(defvar htmlize-x-library-search-path + `(,data-directory + "/etc/X11/rgb.txt" + "/usr/share/X11/rgb.txt" + ;; the remainder of this list really belongs in a museum + "/usr/X11R6/lib/X11/" + "/usr/X11R5/lib/X11/" + "/usr/lib/X11R6/X11/" + "/usr/lib/X11R5/X11/" + "/usr/local/X11R6/lib/X11/" + "/usr/local/X11R5/lib/X11/" + "/usr/local/lib/X11R6/X11/" + "/usr/local/lib/X11R5/X11/" + "/usr/X11/lib/X11/" + "/usr/lib/X11/" + "/usr/local/lib/X11/" + "/usr/X386/lib/X11/" + "/usr/x386/lib/X11/" + "/usr/XFree86/lib/X11/" + "/usr/unsupported/lib/X11/" + "/usr/athena/lib/X11/" + "/usr/local/x11r5/lib/X11/" + "/usr/lpp/Xamples/lib/X11/" + "/usr/openwin/lib/X11/" + "/usr/openwin/share/lib/X11/")) + +(defun htmlize-get-color-rgb-hash (&optional rgb-file) + "Return a hash table mapping X color names to RGB values. +The keys in the hash table are X11 color names, and the values are the +#rrggbb RGB specifications, extracted from `rgb.txt'. + +If RGB-FILE is nil, the function will try hard to find a suitable file +in the system directories. + +If no rgb.txt file is found, return nil." + (let ((rgb-file (or rgb-file (locate-file + "rgb.txt" + htmlize-x-library-search-path))) + (hash nil)) + (when rgb-file + (with-temp-buffer + (insert-file-contents rgb-file) + (setq hash (make-hash-table :test 'equal)) + (while (not (eobp)) + (cond ((looking-at "^\\s-*\\([!#]\\|$\\)") + ;; Skip comments and empty lines. + ) + ((looking-at + "[ \t]*\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\(.*\\)") + (setf (gethash (downcase (match-string 4)) hash) + (format "#%02x%02x%02x" + (string-to-number (match-string 1)) + (string-to-number (match-string 2)) + (string-to-number (match-string 3))))) + (t + (error + "Unrecognized line in %s: %s" + rgb-file + (buffer-substring (point) (progn (end-of-line) (point)))))) + (forward-line 1)))) + hash)) + +;; Compile the RGB map when loaded. On systems where rgb.txt is +;; missing, the value of the variable will be nil, and rgb.txt will +;; not be used. +(defvar htmlize-color-rgb-hash (htmlize-get-color-rgb-hash)) + +;;; Face handling. + +(defun htmlize-face-color-internal (face fg) + ;; Used only under GNU Emacs. Return the color of FACE, but don't + ;; return "unspecified-fg" or "unspecified-bg". If the face is + ;; `default' and the color is unspecified, look up the color in + ;; frame parameters. + (let* ((function (if fg #'face-foreground #'face-background)) + (color (funcall function face nil t))) + (when (and (eq face 'default) (null color)) + (setq color (cdr (assq (if fg 'foreground-color 'background-color) + (frame-parameters))))) + (when (or (eq color 'unspecified) + (equal color "unspecified-fg") + (equal color "unspecified-bg")) + (setq color nil)) + (when (and (eq face 'default) + (null color)) + ;; Assuming black on white doesn't seem right, but I can't think + ;; of anything better to do. + (setq color (if fg "black" "white"))) + color)) + +(defun htmlize-face-foreground (face) + ;; Return the name of the foreground color of FACE. If FACE does + ;; not specify a foreground color, return nil. + (htmlize-face-color-internal face t)) + +(defun htmlize-face-background (face) + ;; Return the name of the background color of FACE. If FACE does + ;; not specify a background color, return nil. + ;; GNU Emacs. + (htmlize-face-color-internal face nil)) + +;; Convert COLOR to the #RRGGBB string. If COLOR is already in that +;; format, it's left unchanged. + +(defun htmlize-color-to-rgb (color) + (let ((rgb-string nil)) + (cond ((null color) + ;; Ignore nil COLOR because it means that the face is not + ;; specifying any color. Hence (htmlize-color-to-rgb nil) + ;; returns nil. + ) + ((string-match "\\`#" color) + ;; The color is already in #rrggbb format. + (setq rgb-string color)) + ((and htmlize-use-rgb-txt + htmlize-color-rgb-hash) + ;; Use of rgb.txt is requested, and it's available on the + ;; system. Use it. + (setq rgb-string (gethash (downcase color) htmlize-color-rgb-hash))) + (t + ;; We're getting the RGB components from Emacs. + (let ((rgb (mapcar (lambda (arg) + (/ arg 256)) + (color-values color)))) + (when rgb + (setq rgb-string (apply #'format "#%02x%02x%02x" rgb)))))) + ;; If RGB-STRING is still nil, it means the color cannot be found, + ;; for whatever reason. In that case just punt and return COLOR. + ;; Most browsers support a decent set of color names anyway. + (or rgb-string color))) + +;; We store the face properties we care about into an +;; `htmlize-fstruct' type. That way we only have to analyze face +;; properties, which can be time consuming, once per each face. The +;; mapping between Emacs faces and htmlize-fstructs is established by +;; htmlize-make-face-map. The name "fstruct" refers to variables of +;; type `htmlize-fstruct', while the term "face" is reserved for Emacs +;; faces. + +(defstruct htmlize-fstruct + foreground ; foreground color, #rrggbb + background ; background color, #rrggbb + size ; size + boldp ; whether face is bold + italicp ; whether face is italic + underlinep ; whether face is underlined + overlinep ; whether face is overlined + strikep ; whether face is struck through + css-name ; CSS name of face + ) + +(defun htmlize-face-set-from-keyword-attr (fstruct attr value) + ;; For ATTR and VALUE, set the equivalent value in FSTRUCT. + (case attr + (:foreground + (setf (htmlize-fstruct-foreground fstruct) (htmlize-color-to-rgb value))) + (:background + (setf (htmlize-fstruct-background fstruct) (htmlize-color-to-rgb value))) + (:height + (setf (htmlize-fstruct-size fstruct) value)) + (:weight + (when (string-match (symbol-name value) "bold") + (setf (htmlize-fstruct-boldp fstruct) t))) + (:slant + (setf (htmlize-fstruct-italicp fstruct) (or (eq value 'italic) + (eq value 'oblique)))) + (:bold + (setf (htmlize-fstruct-boldp fstruct) value)) + (:italic + (setf (htmlize-fstruct-italicp fstruct) value)) + (:underline + (setf (htmlize-fstruct-underlinep fstruct) value)) + (:overline + (setf (htmlize-fstruct-overlinep fstruct) value)) + (:strike-through + (setf (htmlize-fstruct-strikep fstruct) value)))) + +(defun htmlize-face-size (face) + ;; The size (height) of FACE, taking inheritance into account. + ;; Only works in Emacs 21 and later. + (let* ((face-list (list face)) + (head face-list) + (tail face-list)) + (while head + (let ((inherit (face-attribute (car head) :inherit))) + (cond ((listp inherit) + (setcdr tail (copy-list inherit)) + (setq tail (last tail))) + ((eq inherit 'unspecified)) + (t + (setcdr tail (list inherit)) + (setq tail (cdr tail))))) + (pop head)) + (let ((size-list + (loop + for f in face-list + for h = (face-attribute f :height) + collect (if (eq h 'unspecified) nil h)))) + (reduce 'htmlize-merge-size (cons nil size-list))))) + +(defun htmlize-face-css-name (face) + ;; Generate the css-name property for the given face. Emacs places + ;; no restrictions on the names of symbols that represent faces -- + ;; any characters may be in the name, even control chars. We try + ;; hard to beat the face name into shape, both esthetically and + ;; according to CSS1 specs. + (let ((name (downcase (symbol-name face)))) + (when (string-match "\\`font-lock-" name) + ;; font-lock-FOO-face -> FOO. + (setq name (replace-match "" t t name))) + (when (string-match "-face\\'" name) + ;; Drop the redundant "-face" suffix. + (setq name (replace-match "" t t name))) + (while (string-match "[^-a-zA-Z0-9]" name) + ;; Drop the non-alphanumerics. + (setq name (replace-match "X" t t name))) + (when (string-match "\\`[-0-9]" name) + ;; CSS identifiers may not start with a digit. + (setq name (concat "X" name))) + ;; After these transformations, the face could come out empty. + (when (equal name "") + (setq name "face")) + ;; Apply the prefix. + (concat htmlize-css-name-prefix name))) + +(defun htmlize-face-to-fstruct-1 (face) + "Convert Emacs face FACE to fstruct, internal." + (let ((fstruct (make-htmlize-fstruct + :foreground (htmlize-color-to-rgb + (htmlize-face-foreground face)) + :background (htmlize-color-to-rgb + (htmlize-face-background face))))) + ;; GNU Emacs + (dolist (attr '(:weight :slant :underline :overline :strike-through)) + (let ((value (face-attribute face attr nil t))) + (when (and value (not (eq value 'unspecified))) + (htmlize-face-set-from-keyword-attr fstruct attr value)))) + (let ((size (htmlize-face-size face))) + (unless (eql size 1.0) ; ignore non-spec + (setf (htmlize-fstruct-size fstruct) size))) + (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face)) + fstruct)) + +(defun htmlize-face-to-fstruct (face) + (let* ((face-list (or (and (symbolp face) + (cdr (assq face face-remapping-alist))) + (list face))) + (fstruct (htmlize-merge-faces + (mapcar (lambda (face) + (if (symbolp face) + (or (htmlize-get-override-fstruct face) + (htmlize-face-to-fstruct-1 face)) + (htmlize-attrlist-to-fstruct face))) + (nreverse face-list))))) + (when (symbolp face) + (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face))) + fstruct)) + +(defmacro htmlize-copy-attr-if-set (attr-list dest source) + ;; Generate code with the following pattern: + ;; (progn + ;; (when (htmlize-fstruct-ATTR source) + ;; (setf (htmlize-fstruct-ATTR dest) (htmlize-fstruct-ATTR source))) + ;; ...) + ;; for the given list of boolean attributes. + (cons 'progn + (loop for attr in attr-list + for attr-sym = (intern (format "htmlize-fstruct-%s" attr)) + collect `(when (,attr-sym ,source) + (setf (,attr-sym ,dest) (,attr-sym ,source)))))) + +(defun htmlize-merge-size (merged next) + ;; Calculate the size of the merge of MERGED and NEXT. + (cond ((null merged) next) + ((integerp next) next) + ((null next) merged) + ((floatp merged) (* merged next)) + ((integerp merged) (round (* merged next))))) + +(defun htmlize-merge-two-faces (merged next) + (htmlize-copy-attr-if-set + (foreground background boldp italicp underlinep overlinep strikep) + merged next) + (setf (htmlize-fstruct-size merged) + (htmlize-merge-size (htmlize-fstruct-size merged) + (htmlize-fstruct-size next))) + merged) + +(defun htmlize-merge-faces (fstruct-list) + (cond ((null fstruct-list) + ;; Nothing to do, return a dummy face. + (make-htmlize-fstruct)) + ((null (cdr fstruct-list)) + ;; Optimize for the common case of a single face, simply + ;; return it. + (car fstruct-list)) + (t + (reduce #'htmlize-merge-two-faces + (cons (make-htmlize-fstruct) fstruct-list))))) + +;; GNU Emacs 20+ supports attribute lists in `face' properties. For +;; example, you can use `(:foreground "red" :weight bold)' as an +;; overlay's "face", or you can even use a list of such lists, etc. +;; We call those "attrlists". +;; +;; htmlize supports attrlist by converting them to fstructs, the same +;; as with regular faces. + +(defun htmlize-attrlist-to-fstruct (attrlist &optional name) + ;; Like htmlize-face-to-fstruct, but accepts an ATTRLIST as input. + (let ((fstruct (make-htmlize-fstruct))) + (cond ((eq (car attrlist) 'foreground-color) + ;; ATTRLIST is (foreground-color . COLOR) + (setf (htmlize-fstruct-foreground fstruct) + (htmlize-color-to-rgb (cdr attrlist)))) + ((eq (car attrlist) 'background-color) + ;; ATTRLIST is (background-color . COLOR) + (setf (htmlize-fstruct-background fstruct) + (htmlize-color-to-rgb (cdr attrlist)))) + (t + ;; ATTRLIST is a plist. + (while attrlist + (let ((attr (pop attrlist)) + (value (pop attrlist))) + (when (and value (not (eq value 'unspecified))) + (htmlize-face-set-from-keyword-attr fstruct attr value)))))) + (setf (htmlize-fstruct-css-name fstruct) (or name "custom")) + fstruct)) + +(defun htmlize-decode-face-prop (prop) + "Turn face property PROP into a list of face-like objects." + ;; PROP can be a symbol naming a face, a string naming such a + ;; symbol, a cons (foreground-color . COLOR) or (background-color + ;; COLOR), a property list (:attr1 val1 :attr2 val2 ...), or a list + ;; of any of those. + ;; + ;; (htmlize-decode-face-prop 'face) -> (face) + ;; (htmlize-decode-face-prop '(face1 face2)) -> (face1 face2) + ;; (htmlize-decode-face-prop '(:attr "val")) -> ((:attr "val")) + ;; (htmlize-decode-face-prop '((:attr "val") face (foreground-color "red"))) + ;; -> ((:attr "val") face (foreground-color "red")) + ;; + ;; Unrecognized atoms or non-face symbols/strings are silently + ;; stripped away. + (cond ((null prop) + nil) + ((symbolp prop) + (and (facep prop) + (list prop))) + ((stringp prop) + (and (facep (intern-soft prop)) + (list prop))) + ((atom prop) + nil) + ((and (symbolp (car prop)) + (eq ?: (aref (symbol-name (car prop)) 0))) + (list prop)) + ((or (eq (car prop) 'foreground-color) + (eq (car prop) 'background-color)) + (list prop)) + (t + (apply #'nconc (mapcar #'htmlize-decode-face-prop prop))))) + +(defun htmlize-get-override-fstruct (face) + (let* ((raw-def (plist-get htmlize-face-overrides face)) + (def (cond ((stringp raw-def) (list :foreground raw-def)) + ((listp raw-def) raw-def) + (t + (error (format (concat "face override must be an " + "attribute list or string, got %s") + raw-def)))))) + (and def + (htmlize-attrlist-to-fstruct def (symbol-name face))))) + +(defun htmlize-make-face-map (faces) + ;; Return a hash table mapping Emacs faces to htmlize's fstructs. + ;; The keys are either face symbols or attrlists, so the test + ;; function must be `equal'. + (let ((face-map (make-hash-table :test 'equal)) + css-names) + (dolist (face faces) + (unless (gethash face face-map) + ;; Haven't seen FACE yet; convert it to an fstruct and cache + ;; it. + (let ((fstruct (htmlize-face-to-fstruct face))) + (setf (gethash face face-map) fstruct) + (let* ((css-name (htmlize-fstruct-css-name fstruct)) + (new-name css-name) + (i 0)) + ;; Uniquify the face's css-name by using NAME-1, NAME-2, + ;; etc. + (while (member new-name css-names) + (setq new-name (format "%s-%s" css-name (incf i)))) + (unless (equal new-name css-name) + (setf (htmlize-fstruct-css-name fstruct) new-name)) + (push new-name css-names))))) + face-map)) + +(defun htmlize-unstringify-face (face) + "If FACE is a string, return it interned, otherwise return it unchanged." + (if (stringp face) + (intern face) + face)) + +(defun htmlize-faces-in-buffer () + "Return a list of faces used in the current buffer. +This is the set of faces specified by the `face' text property and by buffer +overlays that specify `face'." + (let (faces) + ;; Faces used by text properties. + (let ((pos (point-min)) face-prop next) + (while (< pos (point-max)) + (setq face-prop (get-text-property pos 'face) + next (or (next-single-property-change pos 'face) (point-max))) + (setq faces (nunion (htmlize-decode-face-prop face-prop) + faces :test 'equal)) + (setq pos next))) + ;; Faces used by overlays. + (dolist (overlay (overlays-in (point-min) (point-max))) + (let ((face-prop (overlay-get overlay 'face))) + (setq faces (nunion (htmlize-decode-face-prop face-prop) + faces :test 'equal)))) + faces)) + +(if (>= emacs-major-version 25) + (defun htmlize-sorted-overlays-at (pos) + (overlays-at pos t)) + + (defun htmlize-sorted-overlays-at (pos) + ;; Like OVERLAYS-AT with the SORTED argument, for older Emacsen. + (let ((overlays (overlays-at pos))) + (setq overlays (sort* overlays #'< + :key (lambda (o) + (- (overlay-end o) (overlay-start o))))) + (setq overlays + (stable-sort overlays #'< + :key (lambda (o) + (let ((prio (overlay-get o 'priority))) + (if (numberp prio) prio 0))))) + (nreverse overlays)))) + + +;; htmlize-faces-at-point returns the faces in use at point. The +;; faces are sorted by increasing priority, i.e. the last face takes +;; precedence. +;; +;; This returns all the faces in the `face' property and all the faces +;; in the overlays at point. + +(defun htmlize-faces-at-point () + (let (all-faces) + ;; Faces from text properties. + (let ((face-prop (get-text-property (point) 'face))) + ;; we need to reverse the `face' prop because we want + ;; more specific faces to come later + (setq all-faces (nreverse (htmlize-decode-face-prop face-prop)))) + ;; Faces from overlays. + (let ((overlays + ;; Collect overlays at point that specify `face'. + (delete-if-not (lambda (o) + (overlay-get o 'face)) + (nreverse (htmlize-sorted-overlays-at (point))))) + list face-prop) + (dolist (overlay overlays) + (setq face-prop (overlay-get overlay 'face) + list (nconc (htmlize-decode-face-prop face-prop) list))) + ;; Under "Merging Faces" the manual explicitly states + ;; that faces specified by overlays take precedence over + ;; faces specified by text properties. + (setq all-faces (nconc all-faces list))) + all-faces)) + +;; htmlize supports generating HTML in several flavors, some of which +;; use CSS, and others the element. We take an OO approach and +;; define "methods" that indirect to the functions that depend on +;; `htmlize-output-type'. The currently used methods are `doctype', +;; `insert-head', `body-tag', `pre-tag', and `text-markup'. Not all +;; output types define all methods. +;; +;; Methods are called either with (htmlize-method METHOD ARGS...) +;; special form, or by accessing the function with +;; (htmlize-method-function 'METHOD) and calling (funcall FUNCTION). +;; The latter form is useful in tight loops because `htmlize-method' +;; conses. + +(defmacro htmlize-method (method &rest args) + ;; Expand to (htmlize-TYPE-METHOD ...ARGS...). TYPE is the value of + ;; `htmlize-output-type' at run time. + `(funcall (htmlize-method-function ',method) ,@args)) + +(defun htmlize-method-function (method) + ;; Return METHOD's function definition for the current output type. + ;; The returned object can be safely funcalled. + (let ((sym (intern (format "htmlize-%s-%s" htmlize-output-type method)))) + (indirect-function (if (fboundp sym) + sym + (let ((default (intern (concat "htmlize-default-" + (symbol-name method))))) + (if (fboundp default) + default + 'ignore)))))) + +(defvar htmlize-memoization-table (make-hash-table :test 'equal)) + +(defmacro htmlize-memoize (key generator) + "Return the value of GENERATOR, memoized as KEY. +That means that GENERATOR will be evaluated and returned the first time +it's called with the same value of KEY. All other times, the cached +\(memoized) value will be returned." + (let ((value (gensym))) + `(let ((,value (gethash ,key htmlize-memoization-table))) + (unless ,value + (setq ,value ,generator) + (setf (gethash ,key htmlize-memoization-table) ,value)) + ,value))) + +;;; Default methods. + +(defun htmlize-default-doctype () + nil ; no doc-string + ;; Note that the `font' output is technically invalid under this DTD + ;; because the DTD doesn't allow embedding in
    .
    +  ""
    +  )
    +
    +(defun htmlize-default-body-tag (face-map)
    +  nil					; no doc-string
    +  face-map ; shut up the byte-compiler
    +  "")
    +
    +(defun htmlize-default-pre-tag (face-map)
    +  nil					; no doc-string
    +  face-map ; shut up the byte-compiler
    +  "
    ")
    +
    +
    +;;; CSS based output support.
    +
    +;; Internal function; not a method.
    +(defun htmlize-css-specs (fstruct)
    +  (let (result)
    +    (when (htmlize-fstruct-foreground fstruct)
    +      (push (format "color: %s;" (htmlize-fstruct-foreground fstruct))
    +	    result))
    +    (when (htmlize-fstruct-background fstruct)
    +      (push (format "background-color: %s;"
    +		    (htmlize-fstruct-background fstruct))
    +	    result))
    +    (let ((size (htmlize-fstruct-size fstruct)))
    +      (when (and size (not (eq htmlize-ignore-face-size t)))
    +	(cond ((floatp size)
    +	       (push (format "font-size: %d%%;" (* 100 size)) result))
    +	      ((not (eq htmlize-ignore-face-size 'absolute))
    +	       (push (format "font-size: %spt;" (/ size 10.0)) result)))))
    +    (when (htmlize-fstruct-boldp fstruct)
    +      (push "font-weight: bold;" result))
    +    (when (htmlize-fstruct-italicp fstruct)
    +      (push "font-style: italic;" result))
    +    (when (htmlize-fstruct-underlinep fstruct)
    +      (push "text-decoration: underline;" result))
    +    (when (htmlize-fstruct-overlinep fstruct)
    +      (push "text-decoration: overline;" result))
    +    (when (htmlize-fstruct-strikep fstruct)
    +      (push "text-decoration: line-through;" result))
    +    (nreverse result)))
    +
    +(defun htmlize-css-insert-head (buffer-faces face-map)
    +  (insert "    \n"))
    +
    +(defun htmlize-css-text-markup (fstruct-list buffer)
    +  ;; Open the markup needed to insert text colored with FACES into
    +  ;; BUFFER.  Return the function that closes the markup.
    +
    +  ;; In CSS mode, this is easy: just nest the text in one  tag for each face in FSTRUCT-LIST.
    +  (dolist (fstruct fstruct-list)
    +    (princ "" buffer))
    +  (htmlize-lexlet ((fstruct-list fstruct-list) (buffer buffer))
    +    (lambda ()
    +      (dolist (fstruct fstruct-list)
    +        (ignore fstruct)                ; shut up the byte-compiler
    +        (princ "" buffer)))))
    +
    +;; `inline-css' output support.
    +
    +(defun htmlize-inline-css-body-tag (face-map)
    +  (format ""
    +	  (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    +		     " ")))
    +
    +(defun htmlize-inline-css-pre-tag (face-map)
    +  (if htmlize-pre-style
    +      (format "
    "
    +              (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    +                         " "))
    +    (format "
    ")))
    +
    +(defun htmlize-inline-css-text-markup (fstruct-list buffer)
    +  (let* ((merged (htmlize-merge-faces fstruct-list))
    +	 (style (htmlize-memoize
    +		 merged
    +		 (let ((specs (htmlize-css-specs merged)))
    +		   (and specs
    +			(mapconcat #'identity (htmlize-css-specs merged) " "))))))
    +    (when style
    +      (princ "" buffer))
    +    (htmlize-lexlet ((style style) (buffer buffer))
    +      (lambda ()
    +        (when style
    +          (princ "" buffer))))))
    +
    +;;; `font' tag based output support.
    +
    +(defun htmlize-font-body-tag (face-map)
    +  (let ((fstruct (gethash 'default face-map)))
    +    (format ""
    +	    (htmlize-fstruct-foreground fstruct)
    +	    (htmlize-fstruct-background fstruct))))
    +
    +(defun htmlize-font-pre-tag (face-map)
    +  (if htmlize-pre-style
    +      (let ((fstruct (gethash 'default face-map)))
    +        (format "
    "
    +                (htmlize-fstruct-foreground fstruct)
    +                (htmlize-fstruct-background fstruct)))
    +    (format "
    ")))
    +       
    +(defun htmlize-font-text-markup (fstruct-list buffer)
    +  ;; In `font' mode, we use the traditional HTML means of altering
    +  ;; presentation:  tag for colors,  for bold,  for
    +  ;; underline, and  for strike-through.
    +  (let* ((merged (htmlize-merge-faces fstruct-list))
    +	 (markup (htmlize-memoize
    +		  merged
    +		  (cons (concat
    +			 (and (htmlize-fstruct-foreground merged)
    +			      (format "" (htmlize-fstruct-foreground merged)))
    +			 (and (htmlize-fstruct-boldp merged)      "")
    +			 (and (htmlize-fstruct-italicp merged)    "")
    +			 (and (htmlize-fstruct-underlinep merged) "")
    +			 (and (htmlize-fstruct-strikep merged)    ""))
    +			(concat
    +			 (and (htmlize-fstruct-strikep merged)    "")
    +			 (and (htmlize-fstruct-underlinep merged) "")
    +			 (and (htmlize-fstruct-italicp merged)    "")
    +			 (and (htmlize-fstruct-boldp merged)      "")
    +			 (and (htmlize-fstruct-foreground merged) ""))))))
    +    (princ (car markup) buffer)
    +    (htmlize-lexlet ((markup markup) (buffer buffer))
    +      (lambda ()
    +        (princ (cdr markup) buffer)))))
    +
    +(defun htmlize-buffer-1 ()
    +  ;; Internal function; don't call it from outside this file.  Htmlize
    +  ;; current buffer, writing the resulting HTML to a new buffer, and
    +  ;; return it.  Unlike htmlize-buffer, this doesn't change current
    +  ;; buffer or use switch-to-buffer.
    +  (save-excursion
    +    ;; Protect against the hook changing the current buffer.
    +    (save-excursion
    +      (run-hooks 'htmlize-before-hook))
    +    ;; Convince font-lock support modes to fontify the entire buffer
    +    ;; in advance.
    +    (htmlize-ensure-fontified)
    +    (clrhash htmlize-extended-character-cache)
    +    (clrhash htmlize-memoization-table)
    +    ;; It's important that the new buffer inherits default-directory
    +    ;; from the current buffer.
    +    (let ((htmlbuf (generate-new-buffer (if (buffer-file-name)
    +                                            (htmlize-make-file-name
    +                                             (file-name-nondirectory
    +                                              (buffer-file-name)))
    +                                          "*html*")))
    +          (completed nil))
    +      (unwind-protect
    +          (let* ((buffer-faces (htmlize-faces-in-buffer))
    +                 (face-map (htmlize-make-face-map (adjoin 'default buffer-faces)))
    +                 (places (gensym))
    +                 (title (if (buffer-file-name)
    +                            (file-name-nondirectory (buffer-file-name))
    +                          (buffer-name))))
    +            (when htmlize-generate-hyperlinks
    +              (htmlize-create-auto-links))
    +            (when htmlize-replace-form-feeds
    +              (htmlize-shadow-form-feeds))
    +
    +            ;; Initialize HTMLBUF and insert the HTML prolog.
    +            (with-current-buffer htmlbuf
    +              (buffer-disable-undo)
    +              (insert (htmlize-method doctype) ?\n
    +                      (format "\n"
    +                              htmlize-version htmlize-output-type)
    +                      "\n  ")
    +              (put places 'head-start (point-marker))
    +              (insert "\n"
    +                      "    " (htmlize-protect-string title) "\n"
    +                      (if htmlize-html-charset
    +                          (format (concat "    \n")
    +                                  htmlize-html-charset)
    +                        "")
    +                      htmlize-head-tags)
    +              (htmlize-method insert-head buffer-faces face-map)
    +              (insert "  ")
    +              (put places 'head-end (point-marker))
    +              (insert "\n  ")
    +              (put places 'body-start (point-marker))
    +              (insert (htmlize-method body-tag face-map)
    +                      "\n    ")
    +              (put places 'content-start (point-marker))
    +              (insert (htmlize-method pre-tag face-map) "\n"))
    +            (let ((text-markup
    +                   ;; Get the inserter method, so we can funcall it inside
    +                   ;; the loop.  Not calling `htmlize-method' in the loop
    +                   ;; body yields a measurable speed increase.
    +                   (htmlize-method-function 'text-markup))
    +                  ;; Declare variables used in loop body outside the loop
    +                  ;; because it's faster to establish `let' bindings only
    +                  ;; once.
    +                  next-change text face-list trailing-ellipsis
    +                  fstruct-list last-fstruct-list
    +                  (close-markup (lambda ())))
    +              ;; This loop traverses and reads the source buffer, appending
    +              ;; the resulting HTML to HTMLBUF.  This method is fast
    +              ;; because: 1) it doesn't require examining the text
    +              ;; properties char by char (htmlize-next-face-change is used
    +              ;; to move between runs with the same face), and 2) it doesn't
    +              ;; require frequent buffer switches, which are slow because
    +              ;; they rebind all buffer-local vars.
    +              (goto-char (point-min))
    +              (while (not (eobp))
    +                (setq next-change (htmlize-next-face-change (point)))
    +                ;; Get faces in use between (point) and NEXT-CHANGE, and
    +                ;; convert them to fstructs.
    +                (setq face-list (htmlize-faces-at-point)
    +                      fstruct-list (delq nil (mapcar (lambda (f)
    +                                                       (gethash f face-map))
    +                                                     face-list)))
    +                (multiple-value-setq (text trailing-ellipsis)
    +                  (htmlize-extract-text (point) next-change trailing-ellipsis))
    +                ;; Don't bother writing anything if there's no text (this
    +                ;; happens in invisible regions).
    +                (when (> (length text) 0)
    +                  ;; Open the new markup if necessary and insert the text.
    +                  (when (not (equalp fstruct-list last-fstruct-list))
    +                    (funcall close-markup)
    +                    (setq last-fstruct-list fstruct-list
    +                          close-markup (funcall text-markup fstruct-list htmlbuf)))
    +                  (princ text htmlbuf))
    +                (goto-char next-change))
    +
    +              ;; We've gone through the buffer; close the markup from
    +              ;; the last run, if any.
    +              (funcall close-markup))
    +
    +            ;; Insert the epilog and post-process the buffer.
    +            (with-current-buffer htmlbuf
    +              (insert "
    ") + (put places 'content-end (point-marker)) + (insert "\n ") + (put places 'body-end (point-marker)) + (insert "\n\n") + (htmlize-defang-local-variables) + (goto-char (point-min)) + (when htmlize-html-major-mode + ;; What sucks about this is that the minor modes, most notably + ;; font-lock-mode, won't be initialized. Oh well. + (funcall htmlize-html-major-mode)) + (set (make-local-variable 'htmlize-buffer-places) + (symbol-plist places)) + (run-hooks 'htmlize-after-hook) + (buffer-enable-undo)) + (setq completed t) + htmlbuf) + + (when (not completed) + (kill-buffer htmlbuf)) + (htmlize-delete-tmp-overlays))))) + +;; Utility functions. + +(defmacro htmlize-with-fontify-message (&rest body) + ;; When forcing fontification of large buffers in + ;; htmlize-ensure-fontified, inform the user that he is waiting for + ;; font-lock, not for htmlize to finish. + `(progn + (if (> (buffer-size) 65536) + (message "Forcing fontification of %s..." + (buffer-name (current-buffer)))) + ,@body + (if (> (buffer-size) 65536) + (message "Forcing fontification of %s...done" + (buffer-name (current-buffer)))))) + +(defun htmlize-ensure-fontified () + ;; If font-lock is being used, ensure that the "support" modes + ;; actually fontify the buffer. If font-lock is not in use, we + ;; don't care because, except in htmlize-file, we don't force + ;; font-lock on the user. + (when font-lock-mode + ;; In part taken from ps-print-ensure-fontified in GNU Emacs 21. + (when (and (boundp 'jit-lock-mode) + (symbol-value 'jit-lock-mode)) + (htmlize-with-fontify-message + (jit-lock-fontify-now (point-min) (point-max)))) + + (if (fboundp 'font-lock-ensure) + (font-lock-ensure) + ;; Emacs prior to 25.1 + (with-no-warnings + (font-lock-mode 1) + (font-lock-fontify-buffer))))) + + +;;;###autoload +(defun htmlize-buffer (&optional buffer) + "Convert BUFFER to HTML, preserving colors and decorations. + +The generated HTML is available in a new buffer, which is returned. +When invoked interactively, the new buffer is selected in the current +window. The title of the generated document will be set to the buffer's +file name or, if that's not available, to the buffer's name. + +Note that htmlize doesn't fontify your buffers, it only uses the +decorations that are already present. If you don't set up font-lock or +something else to fontify your buffers, the resulting HTML will be +plain. Likewise, if you don't like the choice of colors, fix the mode +that created them, or simply alter the faces it uses." + (interactive) + (let ((htmlbuf (with-current-buffer (or buffer (current-buffer)) + (htmlize-buffer-1)))) + (when (interactive-p) + (switch-to-buffer htmlbuf)) + htmlbuf)) + +;;;###autoload +(defun htmlize-region (beg end) + "Convert the region to HTML, preserving colors and decorations. +See `htmlize-buffer' for details." + (interactive "r") + ;; Don't let zmacs region highlighting end up in HTML. + (when (fboundp 'zmacs-deactivate-region) + (zmacs-deactivate-region)) + (let ((htmlbuf (save-restriction + (narrow-to-region beg end) + (htmlize-buffer-1)))) + (when (interactive-p) + (switch-to-buffer htmlbuf)) + htmlbuf)) + +(defun htmlize-region-for-paste (beg end) + "Htmlize the region and return just the HTML as a string. +This forces the `inline-css' style and only returns the HTML body, +but without the BODY tag. This should make it useful for inserting +the text to another HTML buffer." + (let* ((htmlize-output-type 'inline-css) + (htmlbuf (htmlize-region beg end))) + (unwind-protect + (with-current-buffer htmlbuf + (buffer-substring (plist-get htmlize-buffer-places 'content-start) + (plist-get htmlize-buffer-places 'content-end))) + (kill-buffer htmlbuf)))) + +(defun htmlize-region-save-screenshot (beg end) + "Save the htmlized (see `htmlize-region-for-paste') region in +the kill ring. Uses `inline-css', with style information in +`
    ' tags, so that the rendering of the marked up text
    +approximates the buffer as closely as possible."
    +  (interactive "r")
    +  (let ((htmlize-pre-style t))
    +    (kill-new (htmlize-region-for-paste beg end)))
    +  (deactivate-mark))
    +
    +(defun htmlize-make-file-name (file)
    +  "Make an HTML file name from FILE.
    +
    +In its default implementation, this simply appends `.html' to FILE.
    +This function is called by htmlize to create the buffer file name, and
    +by `htmlize-file' to create the target file name.
    +
    +More elaborate transformations are conceivable, such as changing FILE's
    +extension to `.html' (\"file.c\" -> \"file.html\").  If you want them,
    +overload this function to do it and htmlize will comply."
    +  (concat file ".html"))
    +
    +;; Older implementation of htmlize-make-file-name that changes FILE's
    +;; extension to ".html".
    +;(defun htmlize-make-file-name (file)
    +;  (let ((extension (file-name-extension file))
    +;	(sans-extension (file-name-sans-extension file)))
    +;    (if (or (equal extension "html")
    +;	    (equal extension "htm")
    +;	    (equal sans-extension ""))
    +;	(concat file ".html")
    +;      (concat sans-extension ".html"))))
    +
    +;;;###autoload
    +(defun htmlize-file (file &optional target)
    +  "Load FILE, fontify it, convert it to HTML, and save the result.
    +
    +Contents of FILE are inserted into a temporary buffer, whose major mode
    +is set with `normal-mode' as appropriate for the file type.  The buffer
    +is subsequently fontified with `font-lock' and converted to HTML.  Note
    +that, unlike `htmlize-buffer', this function explicitly turns on
    +font-lock.  If a form of highlighting other than font-lock is desired,
    +please use `htmlize-buffer' directly on buffers so highlighted.
    +
    +Buffers currently visiting FILE are unaffected by this function.  The
    +function does not change current buffer or move the point.
    +
    +If TARGET is specified and names a directory, the resulting file will be
    +saved there instead of to FILE's directory.  If TARGET is specified and
    +does not name a directory, it will be used as output file name."
    +  (interactive (list (read-file-name
    +		      "HTML-ize file: "
    +		      nil nil nil (and (buffer-file-name)
    +				       (file-name-nondirectory
    +					(buffer-file-name))))))
    +  (let ((output-file (if (and target (not (file-directory-p target)))
    +			 target
    +		       (expand-file-name
    +			(htmlize-make-file-name (file-name-nondirectory file))
    +			(or target (file-name-directory file)))))
    +	;; Try to prevent `find-file-noselect' from triggering
    +	;; font-lock because we'll fontify explicitly below.
    +	(font-lock-mode nil)
    +	(font-lock-auto-fontify nil)
    +	(global-font-lock-mode nil)
    +	;; Ignore the size limit for the purposes of htmlization.
    +	(font-lock-maximum-size nil))
    +    (with-temp-buffer
    +      ;; Insert FILE into the temporary buffer.
    +      (insert-file-contents file)
    +      ;; Set the file name so normal-mode and htmlize-buffer-1 pick it
    +      ;; up.  Restore it afterwards so with-temp-buffer's kill-buffer
    +      ;; doesn't complain about killing a modified buffer.
    +      (let ((buffer-file-name file))
    +	;; Set the major mode for the sake of font-lock.
    +	(normal-mode)
    +	;; htmlize the buffer and save the HTML.
    +	(with-current-buffer (htmlize-buffer-1)
    +	  (unwind-protect
    +	      (progn
    +		(run-hooks 'htmlize-file-hook)
    +		(write-region (point-min) (point-max) output-file))
    +	    (kill-buffer (current-buffer)))))))
    +  ;; I haven't decided on a useful return value yet, so just return
    +  ;; nil.
    +  nil)
    +
    +;;;###autoload
    +(defun htmlize-many-files (files &optional target-directory)
    +  "Convert FILES to HTML and save the corresponding HTML versions.
    +
    +FILES should be a list of file names to convert.  This function calls
    +`htmlize-file' on each file; see that function for details.  When
    +invoked interactively, you are prompted for a list of files to convert,
    +terminated with RET.
    +
    +If TARGET-DIRECTORY is specified, the HTML files will be saved to that
    +directory.  Normally, each HTML file is saved to the directory of the
    +corresponding source file."
    +  (interactive
    +   (list
    +    (let (list file)
    +      ;; Use empty string as DEFAULT because setting DEFAULT to nil
    +      ;; defaults to the directory name, which is not what we want.
    +      (while (not (equal (setq file (read-file-name
    +				     "HTML-ize file (RET to finish): "
    +				     (and list (file-name-directory
    +						(car list)))
    +				     "" t))
    +			 ""))
    +	(push file list))
    +      (nreverse list))))
    +  ;; Verify that TARGET-DIRECTORY is indeed a directory.  If it's a
    +  ;; file, htmlize-file will use it as target, and that doesn't make
    +  ;; sense.
    +  (and target-directory
    +       (not (file-directory-p target-directory))
    +       (error "target-directory must name a directory: %s" target-directory))
    +  (dolist (file files)
    +    (htmlize-file file target-directory)))
    +
    +;;;###autoload
    +(defun htmlize-many-files-dired (arg &optional target-directory)
    +  "HTMLize dired-marked files."
    +  (interactive "P")
    +  (htmlize-many-files (dired-get-marked-files nil arg) target-directory))
    +
    +(provide 'htmlize)
    +
    +;; Local Variables:
    +;; byte-compile-warnings: (not cl-functions unresolved obsolete)
    +;; End:
    +
    +;;; htmlize.el ends here
    diff --git a/bash/templates/workflow/vendor/org.css b/bash/templates/workflow/vendor/org.css
    new file mode 100644
    index 0000000..138cdba
    --- /dev/null
    +++ b/bash/templates/workflow/vendor/org.css
    @@ -0,0 +1,5 @@
    +/*
    +Taken from:
    +https://gongzhitaao.org/orgcss/org.css
    +*/
    +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body{color:#000;background-color:#fff}.org-alert-high{color:#ff8c00;font-weight:700}.org-alert-low{color:#00008b}.org-alert-moderate{color:gold;font-weight:700}.org-alert-saved-fringe{background-color:#f2f2f2}.org-alert-trivial{color:Dark purple}.org-alert-urgent{color:red;font-weight:700}.org-anzu-match-1{color:#000;background-color:#7fffd4}.org-anzu-match-2{color:#000;background-color:#00ff7f}.org-anzu-match-3{color:#000;background-color:#ff0}.org-anzu-mode-line,.org-anzu-mode-line-no-match{color:#008b00;font-weight:700}.org-anzu-replace-highlight{color:#b0e2ff;background-color:#cd00cd}.org-anzu-replace-to{color:red}.org-bbdb-field-name{color:sienna}.org-bbdb-name{color:#00f}.org-bbdb-organization{color:#b22222}.org-beacon-fallback-background{background-color:#000}.org-biblio-results-header{color:#483d8b;font-size:150%;font-weight:700}.org-bold{font-weight:700}.org-bold-italic{font-weight:700;font-style:italic}.org-bookmark-menu-bookmark{font-weight:700}.org-bookmark-menu-heading{color:#228b22}.org-buffer-menu-buffer{font-weight:700}.org-builtin{color:#483d8b}.org-button{color:#3a5fcd;text-decoration:underline}.org-c-annotation{color:#008b8b}.org-cal-china-x-general-holiday{background-color:#228b22}.org-cal-china-x-important-holiday{background-color:#8b0000}.org-calendar-iso-week{color:pink;font-weight:700}.org-calendar-iso-week-header{color:#0ff}.org-calendar-month-header{color:#00f}.org-calendar-today{text-decoration:underline}.org-calendar-weekday-header{color:#008b8b}.org-calendar-weekend-header{color:#b22222}.org-comint-highlight-input{font-weight:700}.org-comint-highlight-prompt{color:#0000cd}.org-comment,.org-comment-delimiter{color:#b22222}.org-compilation-column-number{color:#8b2252}.org-compilation-error{color:red;font-weight:700}.org-compilation-info{color:#228b22;font-weight:700}.org-compilation-line-number{color:#a020f0}.org-compilation-mode-line-exit{color:#228b22;font-weight:700}.org-compilation-mode-line-fail{color:red;font-weight:700}.org-compilation-mode-line-run,.org-compilation-warning{color:#ff8c00;font-weight:700}.org-completions-annotations{font-style:italic}.org-completions-first-difference{font-weight:700}.org-constant{color:#008b8b}.org-cursor{background-color:#eead0e}.org-custom-button{color:#000;background-color:#d3d3d3}.org-custom-button-mouse{color:#000;background-color:#e5e5e5}.org-custom-button-pressed{color:#000;background-color:#d3d3d3}.org-custom-button-pressed-unraised{color:#8b008b;text-decoration:underline}.org-custom-button-unraised{text-decoration:underline}.org-custom-changed{color:#fff;background-color:#00f}.org-custom-comment{background-color:#d9d9d9}.org-custom-comment-tag{color:#00008b}.org-custom-face-tag{color:#00f;font-weight:700}.org-custom-group-subtitle{font-weight:700}.org-custom-group-tag{color:#00f;font-size:120%;font-weight:700}.org-custom-group-tag-1{color:red;font-size:120%;font-weight:700}.org-custom-invalid{color:#ff0;background-color:red}.org-custom-link{color:#3a5fcd;text-decoration:underline}.org-custom-modified{color:#fff;background-color:#00f}.org-custom-rogue{color:pink;background-color:#000}.org-custom-saved{text-decoration:underline}.org-custom-set{color:#00f;background-color:#fff}.org-custom-state{color:#006400}.org-custom-themed{color:#fff;background-color:#00f}.org-custom-variable-button{font-weight:700;text-decoration:underline}.org-custom-variable-tag{color:#00f;font-weight:700}.org-custom-visibility{color:#3a5fcd;font-size:80%;text-decoration:underline}.org-diary{color:red}.org-diary-anniversary{color:#a020f0}.org-diary-time{color:sienna}.org-dired-async-failures{color:red}.org-dired-async-message{color:#ff0}.org-dired-async-mode-message{color:gold}.org-dired-directory{color:#00f}.org-dired-flagged{color:red;font-weight:700}.org-dired-header{color:#228b22}.org-dired-ignored{color:#7f7f7f}.org-dired-mark{color:#008b8b}.org-dired-marked{color:#ff8c00;font-weight:700}.org-dired-perm-write{color:#b22222}.org-dired-symlink{color:#a020f0}.org-dired-warning{color:red;font-weight:700}.org-doc{color:#8b2252}.org-eldoc-highlight-function-argument{font-weight:700}.org-epa-field-body{font-style:italic}.org-epa-field-name,.org-epa-mark{font-weight:700}.org-epa-mark{color:red}.org-epa-string{color:#00008b}.org-epa-validity-disabled{font-style:italic}.org-epa-validity-high{font-weight:700}.org-epa-validity-low,.org-epa-validity-medium{font-style:italic}.org-error{color:red;font-weight:700}.org-escape-glyph{color:brown}.org-evil-ex-commands{font-style:italic;text-decoration:underline}.org-evil-ex-info{color:red;font-style:italic}.org-evil-ex-lazy-highlight{background-color:#afeeee}.org-evil-ex-search{color:#b0e2ff;background-color:#cd00cd}.org-evil-ex-substitute-matches{background-color:#afeeee}.org-evil-ex-substitute-replacement{color:red;text-decoration:underline}.org-ffap{background-color:#b4eeb4}.org-file-name-shadow{color:#7f7f7f}.org-flycheck-error{text-decoration:underline}.org-flycheck-error-list-checker-name{color:#00f}.org-flycheck-error-list-column-number{color:#008b8b}.org-flycheck-error-list-error{color:red;font-weight:700}.org-flycheck-error-list-filename{color:sienna}.org-flycheck-error-list-highlight{background-color:#b4eeb4}.org-flycheck-error-list-id,.org-flycheck-error-list-id-with-explainer{color:#228b22}.org-flycheck-error-list-info{color:#228b22;font-weight:700}.org-flycheck-error-list-line-number{color:#008b8b}.org-flycheck-error-list-warning{color:#ff8c00;font-weight:700}.org-flycheck-fringe-error{color:red;font-weight:700}.org-flycheck-fringe-info{color:#228b22;font-weight:700}.org-flycheck-fringe-warning{color:#ff8c00;font-weight:700}.org-flycheck-info,.org-flycheck-warning,.org-flyspell-duplicate,.org-flyspell-incorrect{text-decoration:underline}.org-fringe{background-color:#f2f2f2}.org-function-name{color:#00f}.org-glyphless-char{font-size:60%}.org-golden-ratio-scroll-highlight-line{color:#fff;background-color:#53868b;font-weight:700}.org-header-line{color:#333;background-color:#e5e5e5}.org-helm-action{text-decoration:underline}.org-helm-bookmark-addressbook{color:tomato}.org-helm-bookmark-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-bookmark-file{color:#00b2ee}.org-helm-bookmark-file-not-found{color:#6c7b8b}.org-helm-bookmark-gnus{color:#f0f}.org-helm-bookmark-info{color:#0f0}.org-helm-bookmark-man{color:#8b5a00}.org-helm-bookmark-w3m{color:#ff0}.org-helm-buffer-archive{color:gold}.org-helm-buffer-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-buffer-file{color:#483d8b}.org-helm-buffer-modified{color:#b22222}.org-helm-buffer-not-saved{color:#ee6363}.org-helm-buffer-process{color:#cd6839}.org-helm-buffer-saved-out{color:red;background-color:#000}.org-helm-buffer-size{color:#708090}.org-helm-candidate-number,.org-helm-candidate-number-suspended{color:#000;background-color:#faffb5}.org-helm-delete-async-message{color:#ff0}.org-helm-etags-file{color:#8b814c;text-decoration:underline}.org-helm-ff-denied{color:red;background-color:#000}.org-helm-ff-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-ff-dirs{color:#00f}.org-helm-ff-dotted-directory{color:#000;background-color:#696969}.org-helm-ff-dotted-symlink-directory{color:#ff8c00;background-color:#696969}.org-helm-ff-executable{color:#0f0}.org-helm-ff-file{color:#483d8b}.org-helm-ff-invalid-symlink{color:#000;background-color:red}.org-helm-ff-pipe{color:#ff0;background-color:#000}.org-helm-ff-prefix{color:#000;background-color:#ff0}.org-helm-ff-socket{color:#ff1493}.org-helm-ff-suid{color:#fff;background-color:red}.org-helm-ff-symlink{color:#b22222}.org-helm-ff-truename{color:#8b2252}.org-helm-grep-cmd-line{color:#228b22}.org-helm-grep-file{color:#8a2be2;text-decoration:underline}.org-helm-grep-finish{color:#0f0}.org-helm-grep-lineno{color:#ff7f00}.org-helm-grep-match{color:#b00000}.org-helm-header{color:#333;background-color:#e5e5e5}.org-helm-header-line-left-margin{color:#000;background-color:#ff0}.org-helm-helper{color:#333;background-color:#e5e5e5}.org-helm-history-deleted{color:#000;background-color:red}.org-helm-history-remote{color:#ff6a6a}.org-helm-lisp-completion-info{color:red}.org-helm-lisp-show-completion{background-color:#2f4f4f}.org-helm-locate-finish{color:#0f0}.org-helm-m-x-key{color:orange;text-decoration:underline}.org-helm-match{color:#b00000}.org-helm-match-item{color:#b0e2ff;background-color:#cd00cd}.org-helm-minibuffer-prompt{color:#0000cd}.org-helm-moccur-buffer{color:#00ced1;text-decoration:underline}.org-helm-non-file-buffer{font-style:italic}.org-helm-prefarg{color:red}.org-helm-resume-need-update{background-color:red}.org-helm-selection{background-color:#097209}.org-helm-selection-line{background-color:#b4eeb4}.org-helm-separator{color:#ffbfb5}.org-helm-source-header{color:#000;background-color:#abd7f0;font-size:130%;font-weight:700}.org-helm-visible-mark{background-color:#d1f5ea}.org-help-argument-name{font-style:italic}.org-highlight{background-color:#b4eeb4}.org-highlight-indent-guides-character{color:#e6e6e6}.org-highlight-indent-guides-even{background-color:#e6e6e6}.org-highlight-indent-guides-odd{background-color:#f3f3f3}.org-highlight-indent-guides-stack-character{color:#ccc}.org-highlight-indent-guides-stack-even{background-color:#ccc}.org-highlight-indent-guides-stack-odd{background-color:#d9d9d9}.org-highlight-indent-guides-top-character{color:#b3b3b3}.org-highlight-indent-guides-top-even{background-color:#b3b3b3}.org-highlight-indent-guides-top-odd{background-color:silver}.org-highlight-numbers-number{color:#008b8b}.org-hl-line{background-color:#b4eeb4}.org-holiday{background-color:pink}.org-hydra-face-amaranth{color:#e52b50;font-weight:700}.org-hydra-face-blue{color:#00f;font-weight:700}.org-hydra-face-pink{color:#ff6eb4;font-weight:700}.org-hydra-face-red{color:red;font-weight:700}.org-hydra-face-teal{color:#367588;font-weight:700}.org-ido-first-match{font-weight:700}.org-ido-incomplete-regexp{color:red;font-weight:700}.org-ido-indicator{color:#ff0;background-color:red}.org-ido-only-match{color:#228b22}.org-ido-subdir{color:red}.org-ido-virtual{color:#483d8b}.org-info-header-node{color:brown;font-weight:700;font-style:italic}.org-info-header-xref{color:#3a5fcd;text-decoration:underline}.org-info-index-match{background-color:#ff0}.org-info-menu-header{font-weight:700}.org-info-menu-star{color:red}.org-info-node{color:brown;font-weight:700;font-style:italic}.org-info-title-1{font-size:172%;font-weight:700}.org-info-title-2{font-size:144%;font-weight:700}.org-info-title-3{font-size:120%;font-weight:700}.org-info-title-4{font-weight:700}.org-info-xref{color:#3a5fcd;text-decoration:underline}.org-isearch{color:#b0e2ff;background-color:#cd00cd}.org-isearch-fail{background-color:#ffc1c1}.org-italic{font-style:italic}.org-keyword{color:#a020f0}.org-lazy-highlight{background-color:#afeeee}.org-link{color:#3a5fcd;text-decoration:underline}.org-link-visited{color:#8b008b;text-decoration:underline}.org-lv-separator{background-color:#ccc}.org-match{background-color:#ff0}.org-mcXcursor-bar{background-color:#000}.org-mcXregion{background-color:gtk_selection_bg_color}.org-me-dired-dim-0{color:#b3b3b3}.org-me-dired-dim-1{color:#7f7f7f}.org-me-dired-executable{color:#0f0}.org-message-cited-text{color:red}.org-message-header-cc{color:#191970}.org-message-header-name{color:#6495ed}.org-message-header-newsgroups{color:#00008b;font-weight:700;font-style:italic}.org-message-header-other{color:#4682b4}.org-message-header-subject{color:navy;font-weight:700}.org-message-header-to{color:#191970;font-weight:700}.org-message-header-xheader{color:#00f}.org-message-mml{color:#228b22}.org-message-separator{color:brown}.org-minibuffer-prompt{color:#0000cd}.org-mm-command-output{color:#cd0000}.org-mode-line{color:#000;background-color:#bfbfbf}.org-mode-line-buffer-id,.org-mode-line-buffer-id-inactive,.org-mode-line-emphasis{font-weight:700}.org-mode-line-inactive{color:#333;background-color:#e5e5e5}.org-mu4e-attach-number{color:sienna;font-weight:700}.org-mu4e-cited-1{color:#483d8b;font-style:italic}.org-mu4e-cited-2{color:#5cacee;font-style:italic}.org-mu4e-cited-3{color:sienna;font-style:italic}.org-mu4e-cited-4{color:#a020f0;font-style:italic}.org-mu4e-cited-5,.org-mu4e-cited-6{color:#b22222;font-style:italic}.org-mu4e-cited-7{color:#228b22;font-style:italic}.org-mu4e-compose-header,.org-mu4e-compose-separator{color:brown;font-style:italic}.org-mu4e-contact{color:sienna}.org-mu4e-context{color:#006400;font-weight:700}.org-mu4e-draft{color:#8b2252}.org-mu4e-flagged{color:#008b8b;font-weight:700}.org-mu4e-footer{color:#b22222}.org-mu4e-forwarded{color:#483d8b}.org-mu4e-header{color:#000;background-color:#fff}.org-mu4e-header-highlight{background-color:#000;font-weight:700;text-decoration:underline}.org-mu4e-header-key{color:#6495ed;font-weight:700}.org-mu4e-header-marks{color:#483d8b}.org-mu4e-header-title,.org-mu4e-header-value{color:#228b22}.org-mu4e-highlight{background-color:#b4eeb4}.org-mu4e-link{color:#3a5fcd;text-decoration:underline}.org-mu4e-modeline{color:#8b4500;font-weight:700}.org-mu4e-moved{color:#b22222;font-style:italic}.org-mu4e-ok{color:#b22222;font-weight:700}.org-mu4e-region-code{background-color:#2f4f4f}.org-mu4e-replied,.org-mu4e-special-header-value{color:#483d8b}.org-mu4e-system{color:#b22222;font-style:italic}.org-mu4e-title{color:#228b22;font-weight:700}.org-mu4e-trashed{color:#b22222;text-decoration:line-through}.org-mu4e-unread{color:#a020f0;font-weight:700}.org-mu4e-url-number{color:#008b8b;font-weight:700}.org-mu4e-view-body{color:#000;background-color:#fff}.org-mu4e-warning{color:red;font-weight:700}.org-next-error{background-color:gtk_selection_bg_color}.org-nobreak-space{color:brown;text-decoration:underline}.org-org-agenda-calendar-event,.org-org-agenda-calendar-sexp{color:#000;background-color:#fff}.org-org-agenda-clocking{background-color:#ff0}.org-org-agenda-column-dateline{background-color:#e5e5e5}.org-org-agenda-current-time{color:#b8860b}.org-org-agenda-date{color:#00f}.org-org-agenda-date-today{color:#00f;font-weight:700;font-style:italic}.org-org-agenda-date-weekend{color:#00f;font-weight:700}.org-org-agenda-diary{color:#000;background-color:#fff}.org-org-agenda-dimmed-todo{color:#7f7f7f}.org-org-agenda-done{color:#228b22}.org-org-agenda-filter-category,.org-org-agenda-filter-effort,.org-org-agenda-filter-regexp,.org-org-agenda-filter-tags{color:#000;background-color:#bfbfbf}.org-org-agenda-restriction-lock{background-color:#eee}.org-org-agenda-structure{color:#00f}.org-org-archived{color:#7f7f7f}.org-org-block{color:#7f7f7f}.org-org-block-begin-line,.org-org-block-end-line{color:#b22222}.org-org-checkbox{font-weight:700}.org-org-checkbox-statistics-done{color:#228b22;font-weight:700}.org-org-checkbox-statistics-todo{color:red;font-weight:700}.org-org-clock-overlay{color:#000;background-color:#d3d3d3}.org-org-code{color:#7f7f7f}.org-org-column,.org-org-column-title{background-color:#e5e5e5}.org-org-column-title{font-weight:700;text-decoration:underline}.org-org-date{color:#bfaf87;text-decoration:underline}.org-org-date-selected{color:red}.org-org-default{color:#000;background-color:#fff}.org-org-document-info{color:#191970}.org-org-document-info-keyword{color:#7f7f7f}.org-org-document-title{color:#191970;font-weight:700}.org-org-done{color:#228b22;font-weight:700}.org-org-drawer{color:#00f}.org-org-ellipsis{color:#b8860b;text-decoration:underline}.org-org-footnote{color:#96b4cd;text-decoration:underline}.org-org-formula{color:#b22222}.org-org-habit-alert{background-color:#f5f946}.org-org-habit-alert-future{background-color:#fafca9}.org-org-habit-clear{background-color:#8270f9}.org-org-habit-clear-future{background-color:#d6e4fc}.org-org-habit-overdue{background-color:#f9372d}.org-org-habit-overdue-future{background-color:#fc9590}.org-org-habit-ready{background-color:#4df946}.org-org-habit-ready-future{background-color:#acfca9}.org-org-headline-done{color:#bc8f8f}.org-org-hide{color:#fff}.org-org-latex-and-related{color:#8b4513}.org-org-level-1{color:#edd1c5}.org-org-level-2{color:#ebebb7}.org-org-level-3{color:#cce8cc}.org-org-level-4{color:#c9deec}.org-org-level-5{color:#dce3e8}.org-org-level-6{color:#dde6dd}.org-org-level-7{color:#e8e8ce}.org-org-level-8{color:#e8dedb}.org-org-link{color:#c5d2dc;text-decoration:underline}.org-org-list-dt{font-weight:700}.org-org-macro{color:#8b4513}.org-org-meta-line{color:#b22222}.org-org-mode-line-clock{color:#000;background-color:#bfbfbf}.org-org-mode-line-clock-overrun{color:#000;background-color:red}.org-org-priority{color:#a020f0}.org-org-quote{color:#7f7f7f}.org-org-ref-acronym{color:#ee7600;text-decoration:underline}.org-org-ref-cite{color:#c3d5c3;text-decoration:underline}.org-org-ref-glossary{color:#8968cd;text-decoration:underline}.org-org-ref-label{color:#8b008b;text-decoration:underline}.org-org-ref-ref{color:#e1cc96;text-decoration:underline}.org-org-scheduled{color:#006400}.org-org-scheduled-previously{color:#b22222}.org-org-scheduled-today{color:#006400}.org-org-sexp-date{color:#a020f0}.org-org-special-keyword{color:#88949f}.org-org-table{color:#00f}.org-org-tag,.org-org-tag-group{font-weight:700}.org-org-target{text-decoration:underline}.org-org-time-grid{color:#b8860b}.org-org-todo{color:red;font-weight:700}.org-org-upcoming-deadline{color:#b22222}.org-org-verbatim,.org-org-verse{color:#7f7f7f}.org-org-warning{color:red;font-weight:700}.org-outline-1{color:#00f}.org-outline-2{color:sienna}.org-outline-3{color:#a020f0}.org-outline-4{color:#b22222}.org-outline-5{color:#228b22}.org-outline-6{color:#008b8b}.org-outline-7{color:#483d8b}.org-outline-8{color:#8b2252}.org-package-description{color:#000;background-color:#fff}.org-package-name{color:#3a5fcd;text-decoration:underline}.org-package-status-avail-obso{color:#b22222}.org-package-status-available{color:#000;background-color:#fff}.org-package-status-built-in{color:#483d8b}.org-package-status-dependency{color:#b22222}.org-package-status-disabled{color:red;font-weight:700}.org-package-status-external{color:#483d8b}.org-package-status-held{color:#008b8b}.org-package-status-incompat,.org-package-status-installed{color:#b22222}.org-package-status-unsigned{color:red;font-weight:700}.org-pdf-isearch-batch{background-color:#ff0}.org-pdf-isearch-lazy{background-color:#afeeee}.org-pdf-isearch-match{color:#b0e2ff;background-color:#cd00cd}.org-pdf-occur-document{color:#8b2252}.org-pdf-occur-page{color:#228b22}.org-pdf-view-rectangle{background-color:#b4eeb4}.org-pdf-view-region{background-color:gtk_selection_bg_color}.org-powerline-active0{color:#000;background-color:#bfbfbf}.org-powerline-active1{color:#fff;background-color:#2b2b2b}.org-powerline-active2{color:#fff;background-color:#666}.org-powerline-inactive0{color:#333;background-color:#e5e5e5}.org-powerline-inactive1{color:#333;background-color:#1c1c1c}.org-powerline-inactive2{color:#333;background-color:#333}.org-preprocessor{color:#483d8b}.org-query-replace{color:#b0e2ff;background-color:#cd00cd}.org-rainbow-delimiters-depth-1{color:#ffdead}.org-rainbow-delimiters-depth-2{color:#00bfff}.org-rainbow-delimiters-depth-3{color:#ffdead}.org-rainbow-delimiters-depth-4{color:#00bfff}.org-rainbow-delimiters-depth-5{color:#ffdead}.org-rainbow-delimiters-depth-6{color:#00bfff}.org-rainbow-delimiters-depth-7{color:#ffdead}.org-rainbow-delimiters-depth-8{color:#00bfff}.org-rainbow-delimiters-depth-9{color:#ffdead}.org-rainbow-delimiters-unmatched{color:#88090b}.org-reb-match-0{background-color:#add8e6}.org-reb-match-1{background-color:#7fffd4}.org-reb-match-2{background-color:#00ff7f}.org-reb-match-3{background-color:#ff0}.org-rectangle-preview{background-color:gtk_selection_bg_color}.org-regexp-grouping-backslash,.org-regexp-grouping-construct{font-weight:700}.org-region{background-color:gtk_selection_bg_color}.org-secondary-selection{background-color:#ff0}.org-semantic-highlight-edits,.org-semantic-highlight-func-current-tag{background-color:#e5e5e5}.org-semantic-unmatched-syntax{text-decoration:underline}.org-sgml-namespace{color:#483d8b}.org-sh-escaped-newline{color:#8b2252}.org-sh-heredoc{color:#ee0}.org-sh-quoted-exec{color:#f0f}.org-shadow{color:#7f7f7f}.org-show-paren-match{background-color:#40e0d0}.org-show-paren-mismatch{color:#fff;background-color:#a020f0}.org-sp-pair-overlay,.org-sp-show-pair-enclosing{background-color:#b4eeb4}.org-sp-show-pair-match{background-color:#40e0d0}.org-sp-show-pair-mismatch{color:#fff;background-color:#a020f0}.org-sp-wrap-overlay{background-color:#b4eeb4}.org-sp-wrap-overlay-closing-pair{color:red;background-color:#b4eeb4}.org-sp-wrap-overlay-opening-pair{color:#0f0;background-color:#b4eeb4}.org-sp-wrap-tag-overlay{background-color:#b4eeb4}.org-spaceline-flycheck-error{color:#fc5c94;background-color:#333}.org-spaceline-flycheck-info{color:#8de6f7;background-color:#333}.org-spaceline-flycheck-warning{color:#f3ea98;background-color:#333}.org-spaceline-python-venv{color:#fbf}.org-speedbar-button{color:#008b00}.org-speedbar-directory{color:#00008b}.org-speedbar-file{color:#008b8b}.org-speedbar-highlight{background-color:#0f0}.org-speedbar-selected{color:red;text-decoration:underline}.org-speedbar-separator{color:#fff;background-color:#00f;text-decoration:overline}.org-speedbar-tag{color:brown}.org-string{color:#8b2252}.org-success{color:#228b22;font-weight:700}.org-table-cell{color:#e5e5e5;background-color:#00f}.org-tex-math{color:#8b2252}.org-tool-bar{color:#000;background-color:#bfbfbf}.org-tooltip{color:#000;background-color:#ffffe0}.org-trailing-whitespace{background-color:red}.org-tty-menu-disabled{color:#d3d3d3;background-color:#00f}.org-tty-menu-enabled{color:#ff0;background-color:#00f;font-weight:700}.org-tty-menu-selected{background-color:red}.org-type{color:#228b22}.org-underline{text-decoration:underline}.org-undo-tree-visualizer-active-branch{color:#000;font-weight:700}.org-undo-tree-visualizer-current{color:red}.org-undo-tree-visualizer-default{color:#bebebe}.org-undo-tree-visualizer-register{color:#ff0}.org-undo-tree-visualizer-unmodified{color:#0ff}.org-variable-name{color:sienna}.org-vhlXdefault{background-color:#ff0}.org-warning{color:#ff8c00;font-weight:700}.org-warning-1{color:red;font-weight:700}.org-wgrep{color:#fff;background-color:#228b22}.org-wgrep-delete{color:pink;background-color:#228b22}.org-wgrep-done{color:#00f}.org-wgrep-file{color:#fff;background-color:#228b22}.org-wgrep-reject{color:red;font-weight:700}.org-which-key-command-description{color:#00f}.org-which-key-docstring{color:#b22222}.org-which-key-group-description{color:#a020f0}.org-which-key-highlighted-command{color:#00f;text-decoration:underline}.org-which-key-key{color:#008b8b}.org-which-key-local-map-description{color:#00f}.org-which-key-note,.org-which-key-separator{color:#b22222}.org-which-key-special-key{color:#008b8b;font-weight:700}.org-whitespace-big-indent{color:#b22222;background-color:red}.org-whitespace-empty{color:#b22222;background-color:#ff0}.org-whitespace-hspace{color:#d3d3d3;background-color:#cdc9a5}.org-whitespace-indentation{color:#b22222;background-color:#ff0}.org-whitespace-line{color:violet;background-color:#333}.org-whitespace-newline{color:#d3d3d3}.org-whitespace-space{color:#d3d3d3;background-color:#ffffe0}.org-whitespace-space-after-tab{color:#b22222;background-color:#ff0}.org-whitespace-space-before-tab{color:#b22222;background-color:#ff8c00}.org-whitespace-tab{color:#d3d3d3;background-color:beige}.org-whitespace-trailing{color:#ff0;background-color:red;font-weight:700}.org-widget-button{font-weight:700}.org-widget-button-pressed{color:red}.org-widget-documentation{color:#006400}.org-widget-field{background-color:#d9d9d9}.org-widget-inactive{color:#7f7f7f}.org-widget-single-line-field{background-color:#d9d9d9}.org-window-divider{color:#999}.org-window-divider-first-pixel{color:#ccc}.org-window-divider-last-pixel{color:#666}a{color:inherit;background-color:inherit;font:inherit;text-decoration:inherit}a:hover{text-decoration:underline}body{width:95%;margin:2% auto;font-size:14px;line-height:1.4em;font-family:Georgia,serif;color:#333}@media screen and (min-width:600px){body{font-size:18px}}@media screen and (min-width:910px){body{width:900px}}::-moz-selection{background:#d6edff}::selection{background:#d6edff}p{margin:1em auto}dl,ol,ul{margin:0 auto}.title{margin:.8em auto;color:#000}.subtitle,.title{text-align:center}.subtitle{font-size:1.1em;line-height:1.4;font-weight:700;margin:1em auto}.abstract{margin:auto;width:80%;font-style:italic}.abstract p:last-of-type:before{content:"    ";white-space:pre}.status{font-size:90%;margin:2em auto}[class^=section-number-]{margin-right:.5em}[id^=orgheadline]{clear:both}#footnotes{font-size:90%}.footpara{display:inline;margin:.2em auto}.footdef{margin-bottom:1em}.footdef sup{padding-right:.5em}a{color:#527d9a;text-decoration:none}a:hover{color:#035;border-bottom:1px dotted}figure{padding:0;margin:1em auto;text-align:center}img{max-width:100%;vertical-align:middle}.MathJax_Display{margin:0!important;width:90%!important}h1,h2,h3,h4,h5,h6{color:#a5573e;line-height:1em;font-family:Helvetica,sans-serif}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1em}@media screen and (min-width:600px){h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.3em}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1.1em}}dt{font-weight:700}table{margin:1em auto;border-top:2px solid;border-collapse:collapse}table,thead{border-bottom:2px solid}table td+td,table th+th{border-left:1px solid grey}table tr{border-top:1px solid #d3d3d3}td,th{padding:.3em .6em;vertical-align:middle}caption.t-above{caption-side:top}caption.t-bottom{caption-side:bottom}caption{margin-bottom:.3em}figcaption{margin-top:.3em}th.org-center,th.org-left,th.org-right{text-align:center}td.org-right{text-align:right}td.org-left{text-align:left}td.org-center{text-align:center}blockquote{margin:1em 2em;padding-left:1em;border-left:3px solid #ccc}kbd{background-color:#f7f7f7;font-size:80%;margin:0 .1em;padding:.1em .6em}.todo{background-color:red}.done,.todo{color:#fff;padding:.1em .3em;border-radius:3px;background-clip:padding-box;font-size:80%;font-family:Lucida Console,monospace;line-height:1}.done{background-color:green}.priority{color:orange;font-family:Lucida Console,monospace}#table-of-contents li{clear:both}.tag{font-family:Lucida Console,monospace;font-size:.7em;font-weight:400}.tag span{padding:.3em;float:right;margin-right:.5em;border:1px solid #bbb;border-radius:3px;background-clip:padding-box;color:#333;background-color:#eee;line-height:1}.timestamp{color:#bebebe;font-size:90%}.timestamp-kwd{color:#5f9ea0}.org-right{margin-left:auto;margin-right:0;text-align:right}.org-left{margin-left:0;margin-right:auto;text-align:left}.org-center{margin-left:auto;margin-right:auto;text-align:center}.underline{text-decoration:underline}#postamble p,#preamble p{font-size:90%;margin:.2em}p.verse{margin-left:3%}:not(pre)>code{padding:2px 5px;margin:auto 1px;border:1px solid #ddd;border-radius:3px;background-clip:padding-box;color:#333;font-size:80%}.org-src-container{border:1px solid #ccc;box-shadow:3px 3px 3px #eee;font-family:Lucida Console,monospace;font-size:80%;margin:1em auto;padding:.1em .5em;position:relative}.org-src-container>pre{overflow:auto}.org-src-container>pre:before{display:block;position:absolute;background-color:#b3b3b3;top:0;right:0;padding:0 .5em;border-bottom-left-radius:8px;border:0;color:#fff;font-size:80%}.org-src-container>pre.src-sh:before{content:"sh"}.org-src-container>pre.src-bash:before{content:"bash"}.org-src-container>pre.src-emacs-lisp:before{content:"Emacs Lisp"}.org-src-container>pre.src-R:before{content:"R"}.org-src-container>pre.src-cpp:before{content:"C++"}.org-src-container>pre.src-c:before{content:"C"}.org-src-container>pre.src-html:before{content:"HTML"}.org-src-container>pre.src-javascript:before,.org-src-container>pre.src-js:before{content:"Javascript"}// More languages 0% http://orgmode.org/worg/org-contrib/babel/languages.html .org-src-container>pre.src-abc:before{content:"ABC"}.org-src-container>pre.src-asymptote:before{content:"Asymptote"}.org-src-container>pre.src-awk:before{content:"Awk"}.org-src-container>pre.src-C:before{content:"C"}.org-src-container>pre.src-calc:before{content:"Calc"}.org-src-container>pre.src-clojure:before{content:"Clojure"}.org-src-container>pre.src-comint:before{content:"comint"}.org-src-container>pre.src-css:before{content:"CSS"}.org-src-container>pre.src-D:before{content:"D"}.org-src-container>pre.src-ditaa:before{content:"Ditaa"}.org-src-container>pre.src-dot:before{content:"Dot"}.org-src-container>pre.src-ebnf:before{content:"ebnf"}.org-src-container>pre.src-forth:before{content:"Forth"}.org-src-container>pre.src-F90:before{content:"Fortran"}.org-src-container>pre.src-gnuplot:before{content:"Gnuplot"}.org-src-container>pre.src-haskell:before{content:"Haskell"}.org-src-container>pre.src-io:before{content:"Io"}.org-src-container>pre.src-java:before{content:"Java"}.org-src-container>pre.src-latex:before{content:"LaTeX"}.org-src-container>pre.src-ledger:before{content:"Ledger"}.org-src-container>pre.src-ly:before{content:"Lilypond"}.org-src-container>pre.src-lisp:before{content:"Lisp"}.org-src-container>pre.src-makefile:before{content:"Make"}.org-src-container>pre.src-matlab:before{content:"Matlab"}.org-src-container>pre.src-max:before{content:"Maxima"}.org-src-container>pre.src-mscgen:before{content:"Mscgen"}.org-src-container>pre.src-Caml:before{content:"Objective"}.org-src-container>pre.src-octave:before{content:"Octave"}.org-src-container>pre.src-org:before{content:"Org"}.org-src-container>pre.src-perl:before{content:"Perl"}.org-src-container>pre.src-picolisp:before{content:"Picolisp"}.org-src-container>pre.src-plantuml:before{content:"PlantUML"}.org-src-container>pre.src-python:before{content:"Python"}.org-src-container>pre.src-ruby:before{content:"Ruby"}.org-src-container>pre.src-sass:before{content:"Sass"}.org-src-container>pre.src-scala:before{content:"Scala"}.org-src-container>pre.src-scheme:before{content:"Scheme"}.org-src-container>pre.src-screen:before{content:"Screen"}.org-src-container>pre.src-sed:before{content:"Sed"}.org-src-container>pre.src-shell:before{content:"shell"}.org-src-container>pre.src-shen:before{content:"Shen"}.org-src-container>pre.src-sql:before{content:"SQL"}.org-src-container>pre.src-sqlite:before{content:"SQLite"}.org-src-container>pre.src-stan:before{content:"Stan"}.org-src-container>pre.src-vala:before{content:"Vala"}.org-src-container>pre.src-axiom:before{content:"Axiom"}.org-src-container>pre.src-browser:before{content:"HTML"}.org-src-container>pre.src-cypher:before{content:"Neo4j"}.org-src-container>pre.src-elixir:before{content:"Elixir"}.org-src-container>pre.src-request:before{content:"http"}.org-src-container>pre.src-ipython:before{content:"iPython"}.org-src-container>pre.src-kotlin:before{content:"Kotlin"}.org-src-container>pre.src-Flavored Erlang lfe:before{content:"Lisp"}.org-src-container>pre.src-mongo:before{content:"MongoDB"}.org-src-container>pre.src-prolog:before{content:"Prolog"}.org-src-container>pre.src-rec:before{content:"rec"}.org-src-container>pre.src-ML sml:before{content:"Standard"}.org-src-container>pre.src-Translate translate:before{content:"Google"}.org-src-container>pre.src-typescript:before{content:"Typescript"}.org-src-container>pre.src-rust:before{content:"Rust"}.inlinetask{background:#ffc;border:2px solid grey;margin:10px;padding:10px}#org-div-home-and-up{font-size:70%;text-align:right;white-space:nowrap}.linenr{font-size:90%}.code-highlighted{background-color:#ff0}#bibliography{font-size:90%}#bibliography table{width:100%}.creator{display:block}@media screen and (min-width:600px){.creator{display:inline;float:right}}
    diff --git a/bash/templates/workflow/workflow.css b/bash/templates/workflow/workflow.css
    new file mode 100644
    index 0000000..0e4f851
    --- /dev/null
    +++ b/bash/templates/workflow/workflow.css
    @@ -0,0 +1,49 @@
    +/* EuAndreh's additions */
    +
    +#tasks, #bugs {
    +  border-bottom: 5px;
    +}
    +
    +a.header-anchor {
    +  font-size: 0.5em;
    +  opacity: 0.5;
    +}
    +
    +.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO {
    +	color: #fff;
    +	padding: .1em .3em;
    +	border-radius: 3px;
    +	background-clip: padding-box;
    +	font-size: 80%;
    +	font-family: Lucida Console,monospace;
    +	line-height: 1
    +}
    +
    +/*
    +  Replicate colors from:
    +  https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866
    +*/
    +
    +.TODO {
    +	background-color: brown;
    +}
    +
    +.DOING {
    +	background-color: yellowgreen;
    +}
    +
    +.WAITING, .MEETING {
    +	background-color: gray;
    +}
    +
    +.INACTIVE {
    +	background-color: orange;
    +}
    +
    +.NEXT {
    +	background-color: red;
    +}
    +
    +.CANCELLED, .DONE {
    +	background-color: green;
    +}
    -- 
    cgit v1.2.3
    
    
    From c72589bd5ae4da7f672493ea51a9c955e486f29f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 14:36:52 -0300
    Subject: mailing-list-import-mbox.sh: Replace mail.sh with vanilla GNU
     Mailutils
    
    ---
     scripts/ad-hoc/mailing-list-import-mbox.sh | 4 +++-
     1 file changed, 3 insertions(+), 1 deletion(-)
    
    diff --git a/scripts/ad-hoc/mailing-list-import-mbox.sh b/scripts/ad-hoc/mailing-list-import-mbox.sh
    index 2fe14aa..a7e8fcb 100755
    --- a/scripts/ad-hoc/mailing-list-import-mbox.sh
    +++ b/scripts/ad-hoc/mailing-list-import-mbox.sh
    @@ -36,7 +36,9 @@ gnu_mailing_list_import() {
       # Subscribe to the mailing list
       local -r recipient="${MAILING_LIST_NAME}-join@gnu.org"
       local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list"
    -  mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org'
    +  mail "$recipient"  \
    +       -s "$subject" \
    +       -aFrom:mailing-list@euandre.org <<<''
     
       # Download existing archive as MBOX files
       wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/"
    -- 
    cgit v1.2.3
    
    
    From 0d54938a7b9b06c8d89a7580aafca35176b00316 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 14:37:30 -0300
    Subject: mailing-list-import-mbox.sh: Fix USAGE args order
    
    ---
     scripts/ad-hoc/mailing-list-import-mbox.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/scripts/ad-hoc/mailing-list-import-mbox.sh b/scripts/ad-hoc/mailing-list-import-mbox.sh
    index a7e8fcb..d69c42f 100755
    --- a/scripts/ad-hoc/mailing-list-import-mbox.sh
    +++ b/scripts/ad-hoc/mailing-list-import-mbox.sh
    @@ -11,7 +11,7 @@ TMP_DIR="$HOME/tmp/mbox-import"
     usage() {
       cat < 
    +    $0  
     
           Arguments
             MAILING_LIST_NAME      The name of the mailing list, e.g.: info-guix.
    -- 
    cgit v1.2.3
    
    
    From 2cfaeb50244ff45489f03d392f6f9072dc9afdcf Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 14:49:50 -0300
    Subject: spacemacs.el: Add M-´ and fix M-ç paths
    MIME-Version: 1.0
    Content-Type: text/plain; charset=UTF-8
    Content-Transfer-Encoding: 8bit
    
    ---
     spacemacs.el | 5 +++--
     1 file changed, 3 insertions(+), 2 deletions(-)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index 47825b5..f705ff8 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -612,6 +612,7 @@ dump."
                             scheme-mode))
     
     (setq custom-keybindings '(("M-ç"   . euandreh/find-bookmarked-files)
    +                           ("M-´"   . (lambda () (interactive) (find-file "~/annex/txt/Dump.org")))
                                ("M-SPC" . (lambda () (interactive) (just-one-space -1)))))
     
     (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el"
    @@ -780,8 +781,8 @@ through `notmuch-message-attach-regex'."
                             ;; "annex/txt/archive/Things.old.org"
                             "annex/bin/misc/git/mrconfig.ini"
                             "annex/bin/misc/erc.el"
    -                        "bin/misc/mail/notmuch-post.sh"
    -                        "bin/misc/mail/notmuch.el"
    +                        "annex/bin/misc/mail/notmuch-post.sh"
    +                        "annex/bin/misc/mail/notmuch.el"
                             "tmp/scratch.org"
                             "tmp/playlist.txt"
                             "annex/txt/Meeting Notes.org"
    -- 
    cgit v1.2.3
    
    
    From e35d818c4055c707ada603353c6e7e28e6a178f3 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 16:43:34 -0300
    Subject: fake-symlinks.sh: Fix path of empty-texinfo.texi
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 1222b7a..6864cd6 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -155,7 +155,7 @@ ln-dicts() {
     
     ln-texinfo() {
       envsubst-all HACKING
    -  envsubst-if-not empty-texinfo.texi
    +  envsubst-if-not rename/empty-texinfo.texi
       cp-all build-aux/texinfo.tex
       chmod +w "$PREFIX/build-aux/texinfo.tex" ||:
       ln-dicts
    -- 
    cgit v1.2.3
    
    
    From c54e8b75986bb861ec34d0e041364148c3340083 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 17:00:08 -0300
    Subject: fake-symlinks: Prefix Git files with extra periods to prevent
     confusion Git
    
    ---
     bash/fake-symlinks.sh               | 32 +++++++++++++++----------
     bash/templates/..git/hooks/pre-push |  6 +++++
     bash/templates/..gitignore          | 48 +++++++++++++++++++++++++++++++++++++
     bash/templates/.gitignore           | 48 -------------------------------------
     4 files changed, 74 insertions(+), 60 deletions(-)
     create mode 100755 bash/templates/..git/hooks/pre-push
     create mode 100644 bash/templates/..gitignore
     delete mode 100644 bash/templates/.gitignore
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 6864cd6..9225e6c 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -26,10 +26,18 @@ for job in pacheco; do
       chmod +x "$HOME/annex/bin/cron/${job}-job.sh"
     done
     
    +normalize-name() {
    +  if [[ "$1" = ..* ]]; then
    +    echo "${1:1}"
    +  else
    +    echo "$1"
    +  fi
    +}
    +
     cp-all() {
       for f in "$@"; do
         mkdir -p "$(dirname "$PREFIX/$f")"
    -    cp "$f" "$PREFIX/$f"
    +    cp "$f" "$PREFIX/$(normalize-name "$f")"
       done
     }
     
    @@ -37,7 +45,7 @@ cp-if-not() {
       for f in "$@"; do
         if [[ ! -f "$PREFIX/$f" ]]; then
           mkdir -p "$(dirname "$PREFIX/$f")"
    -      cp "$f" "$PREFIX/$f"
    +      cp "$f" "$PREFIX/$(normalize-name "$f")"
         fi
       done
     }
    @@ -45,7 +53,7 @@ cp-if-not() {
     envsubst-all() {
       for f in "$@"; do
         mkdir -p "$(dirname "$PREFIX/$f")"
    -    envsubst < "$f" > "$PREFIX/$f"
    +    envsubst < "$f" > "$PREFIX/$(normalize-name "$f")"
       done
     }
     
    @@ -53,7 +61,7 @@ envsubst-if-not() {
       for f in "$@"; do
         if [[ ! -f "$PREFIX/$f" ]]; then
           mkdir -p "$(dirname "$PREFIX/$f")"
    -      envsubst < "$f" > "$PREFIX/$f"
    +      envsubst < "$f" > "$PREFIX/$(normalize-name "$f")"
         fi
       done
     }
    @@ -61,7 +69,7 @@ envsubst-if-not() {
     sed-all() {
       for f in "$@"; do
         mkdir -p "$(dirname "$PREFIX/$f")"
    -    sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$f"
    +    sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$(normalize-name "$f")"
       done
     }
     
    @@ -69,14 +77,14 @@ sed-if-not() {
       for f in "$@"; do
         if [[ ! -f "$PREFIX/$f" ]]; then
           mkdir -p "$(dirname "$PREFIX/$f")"
    -      sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$f"
    +      sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$(normalize-name "$f")"
         fi
       done
     }
     
     chmod+x-all() {
       for f in "$@"; do
    -    chmod +x "$PREFIX/$f"
    +    chmod +x "$PREFIX/$(normalize-name "$f")"
       done
     }
     
    @@ -105,7 +113,7 @@ ln-autotools() {
       # - ln-worflow for .gitignore
       # - ln-git-notes-release for Makefile.am
       # - ln-guix-container for Makefile.am
    -  envsubst-all .gitignore configure.ac Makefile.am README
    +  envsubst-all ..gitignore configure.ac Makefile.am README
     }
     
     ln-workflow() {
    @@ -140,8 +148,8 @@ ln-ci() {
       else
         export AUTOTOOLS_SETUP=''
       fi
    -  envsubst-all scripts/ci-build.sh .git/hooks/pre-push
    -  chmod+x-all  scripts/ci-build.sh .git/hooks/pre-push
    +  envsubst-all scripts/ci-build.sh ..git/hooks/pre-push
    +  chmod+x-all  scripts/ci-build.sh ..git/hooks/pre-push
     }
     
     ln-git-notes-release() {
    @@ -242,8 +250,8 @@ ln-bare-project() {
       else
         export DISABLE_CI='# '
       fi
    -  envsubst-all .git/hooks/pre-push
    -  chmod+x-all  .git/hooks/pre-push
    +  envsubst-all ..git/hooks/pre-push
    +  chmod+x-all  ..git/hooks/pre-push
     }
     
     declare -A PROJECT_NAMES=(
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    new file mode 100755
    index 0000000..7d8e7dd
    --- /dev/null
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -0,0 +1,6 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +set -x
    +
    +scp description         arrobaponto.org:/srv/git/$PROJECT.git/description
    +${DISABLE_CI}scp scripts/ci-build.sh arrobaponto.org:/srv/git/$PROJECT.git/hooks/post-receive
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    new file mode 100644
    index 0000000..3614924
    --- /dev/null
    +++ b/bash/templates/..gitignore
    @@ -0,0 +1,48 @@
    +# GNU Autotools
    +/Makefile.in
    +/pre-inst-env
    +
    +autom4te.cache
    +/autoscan.log
    +/autoscan-*.log
    +/aclocal.m4
    +/compile
    +/config.guess
    +/config.h.in
    +/config.log
    +/config.status
    +/config.sub
    +/configure
    +/configure.scan
    +/depcomp
    +/install-sh
    +/missing
    +/stamp-h1
    +
    +/.deps/
    +/Makefile
    +/config.h
    +
    +/build-aux/compile
    +/build-aux/depcomp
    +/build-aux/install-sh
    +/build-aux/missing
    +/build-aux/test-driver
    +
    +/$PROJECT-*.tar.gz
    +/$PROJECT-*.tar.gz.asc
    +/$PROJECT-*/
    +
    +/doc/$PROJECT.info
    +
    +# TODOs.org
    +/tasks-and-bugs.org
    +/tasks-and-bugs.html
    +/tasks-and-bugs.html~
    +/public/
    +
    +# Guile
    +*.go
    +/*.log
    +/tests/*.log
    +/tests/*.trs
    \ No newline at end of file
    diff --git a/bash/templates/.gitignore b/bash/templates/.gitignore
    deleted file mode 100644
    index 3614924..0000000
    --- a/bash/templates/.gitignore
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -# GNU Autotools
    -/Makefile.in
    -/pre-inst-env
    -
    -autom4te.cache
    -/autoscan.log
    -/autoscan-*.log
    -/aclocal.m4
    -/compile
    -/config.guess
    -/config.h.in
    -/config.log
    -/config.status
    -/config.sub
    -/configure
    -/configure.scan
    -/depcomp
    -/install-sh
    -/missing
    -/stamp-h1
    -
    -/.deps/
    -/Makefile
    -/config.h
    -
    -/build-aux/compile
    -/build-aux/depcomp
    -/build-aux/install-sh
    -/build-aux/missing
    -/build-aux/test-driver
    -
    -/$PROJECT-*.tar.gz
    -/$PROJECT-*.tar.gz.asc
    -/$PROJECT-*/
    -
    -/doc/$PROJECT.info
    -
    -# TODOs.org
    -/tasks-and-bugs.org
    -/tasks-and-bugs.html
    -/tasks-and-bugs.html~
    -/public/
    -
    -# Guile
    -*.go
    -/*.log
    -/tests/*.log
    -/tests/*.trs
    \ No newline at end of file
    -- 
    cgit v1.2.3
    
    
    From 46044d1489f42795e277bb64aca61bf68be55db2 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 3 Dec 2020 18:03:50 -0300
    Subject: Add count of unread emails to xmobar, run email jobs every hour
    
    ---
     nixos/common.nix                 |  2 +-
     nixos/configuration.nix          |  1 +
     scripts/ad-hoc/xmobar-notmuch.sh | 11 +++++++++++
     xmonad/xmobar.hs                 |  3 ++-
     4 files changed, 15 insertions(+), 2 deletions(-)
     create mode 100755 scripts/ad-hoc/xmobar-notmuch.sh
    
    diff --git a/nixos/common.nix b/nixos/common.nix
    index 67fa7a2..e7446b8 100644
    --- a/nixos/common.nix
    +++ b/nixos/common.nix
    @@ -3,7 +3,7 @@ let
       cron-for-name = prefix: name: cron:
         "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}";
       daily-at-12h30min = "30 12 * * *";
    -  every-x-hours = "0 */6 * * *";
    +  every-x-hours = "0 * * * *";
       pub-crons = {
         sync-mail = every-x-hours;
         deliver-queued-mail = every-x-hours;
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 6a51c61..55e524f 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -193,6 +193,7 @@ in {
         weechat
         aerc
         newsboat
    +    acpi
     
         ## Mail
     
    diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh
    new file mode 100755
    index 0000000..08e7305
    --- /dev/null
    +++ b/scripts/ad-hoc/xmobar-notmuch.sh
    @@ -0,0 +1,11 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +
    +while true; do
    +  echo "mail: $(notmuch count tag:unread AND \(NOT tag:ml OR thread:{tag:track}\))"
    +  if grep off-line <(acpi -a); then
    +    sleep $((60 * 15))
    +  else
    +    sleep $((60 * 1))
    +  fi
    +done
    diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs
    index 667f33b..bbbeffa 100644
    --- a/xmonad/xmobar.hs
    +++ b/xmonad/xmobar.hs
    @@ -19,6 +19,7 @@ Config {
               "-l", "red"]
               10
           , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris"
    +      , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-notmuch.sh" "notmuch"
         ]
    -  , template = " %date% | %default:Master%| %mpris% } { | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% "
    +  , template = " %date% | %default:Master%| %mpris% } { | %notmuch% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% "
     }
    -- 
    cgit v1.2.3
    
    
    From 244c53d009c82238b2ba5d4fb386e28515c25db2 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 09:32:01 -0300
    Subject: fake-symlinks.sh: Fix normalization of names
    
    ---
     bash/fake-symlinks.sh | 24 +++++++++++++++---------
     1 file changed, 15 insertions(+), 9 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 9225e6c..d0c377d 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -43,7 +43,7 @@ cp-all() {
     
     cp-if-not() {
       for f in "$@"; do
    -    if [[ ! -f "$PREFIX/$f" ]]; then
    +    if [[ ! -f "$PREFIX/$(normalize-name "$f")" ]]; then
           mkdir -p "$(dirname "$PREFIX/$f")"
           cp "$f" "$PREFIX/$(normalize-name "$f")"
         fi
    @@ -59,9 +59,14 @@ envsubst-all() {
     
     envsubst-if-not() {
       for f in "$@"; do
    -    if [[ ! -f "$PREFIX/$f" ]]; then
    -      mkdir -p "$(dirname "$PREFIX/$f")"
    -      envsubst < "$f" > "$PREFIX/$(normalize-name "$f")"
    +    if [[ -n "$RENAME_TO" ]]; then
    +      OUT_FILE="$PREFIX/$RENAME_TO"
    +    else
    +      OUT_FILE="$PREFIX/$(normalize-name "$f")"
    +    fi
    +    if [[ ! -f "$OUT_FILE" ]]; then
    +      mkdir -p "$(dirname "$OUT_FILE")"
    +      envsubst < "$f" > "$OUT_FILE"
         fi
       done
     }
    @@ -75,7 +80,7 @@ sed-all() {
     
     sed-if-not() {
       for f in "$@"; do
    -    if [[ ! -f "$PREFIX/$f" ]]; then
    +    if [[ ! -f "$PREFIX/$(normalize-name "$f")" ]]; then
           mkdir -p "$(dirname "$PREFIX/$f")"
           sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$(normalize-name "$f")"
         fi
    @@ -113,7 +118,7 @@ ln-autotools() {
       # - ln-worflow for .gitignore
       # - ln-git-notes-release for Makefile.am
       # - ln-guix-container for Makefile.am
    -  envsubst-all ..gitignore configure.ac Makefile.am README
    +  envsubst-if-not ..gitignore configure.ac Makefile.am README
     }
     
     ln-workflow() {
    @@ -163,7 +168,7 @@ ln-dicts() {
     
     ln-texinfo() {
       envsubst-all HACKING
    -  envsubst-if-not rename/empty-texinfo.texi
    +  RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
       cp-all build-aux/texinfo.tex
       chmod +w "$PREFIX/build-aux/texinfo.tex" ||:
       ln-dicts
    @@ -222,7 +227,7 @@ ln-antora-autotools-guix-project() {
     }
     
     ln-simple-makefile() {
    -  cp-all Makefile
    +  envsubst-if-not Makefile
     }
     
     ln-generated-readme() {
    @@ -238,6 +243,7 @@ ln-makefile-only-guix-project() {
       ln-workflow
       ln-guix-container
       ln-ci
    +  ln-simple-makefile
     }
     
     ln-bare-project() {
    @@ -277,6 +283,6 @@ ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
     ln-all ln-scribble-autotools-guix-project songbooks
     ln-all ln-antora-autotools-guix-project   byopds
     ln-all ln-makefile-only-guix-project      vps parsecc
    -ln-all ln-bare-project                    parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo x-bindgen website
    +ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website
     
     popd > /dev/null || exit 1
    -- 
    cgit v1.2.3
    
    
    From 1c34b5f6e478dbaa954f9dfd586899e74cacea3c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 09:32:22 -0300
    Subject: fake-symlinks.sh: Copy Guile files conditionally, add simple Makefile
    
    ---
     bash/fake-symlinks.sh   | 12 +++++++-----
     bash/templates/Makefile | 13 +++++++++++++
     2 files changed, 20 insertions(+), 5 deletions(-)
     create mode 100644 bash/templates/Makefile
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index d0c377d..5defce3 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -141,10 +141,6 @@ ln-guix-container() {
       cp-if-not guix/channels.scm guix/manifest.scm
     }
     
    -ln-guile-files() {
    -  cp-all build-aux/guile.am build-aux/pre-inst-env.in m4/guile.m4
    -}
    -
     ln-ci() {
       cp-all scripts/assert-shellcheck.sh
     
    @@ -202,13 +198,19 @@ ln-base-autotools-guix-project() {
       ln-autotools
     
       ln-agpl
    -  ln-guile-files
       ln-ci
     }
     
    +ln-guile-files() {
    +  if [[ "$PROJECT" = guile* ]]; then
    +    cp-all build-aux/guile.am build-aux/pre-inst-env.in m4/guile.m4
    +  fi
    +}
    +
     ln-texinfo-autotools-guix-project() {
       ln-base-autotools-guix-project "$1"
       ln-texinfo
    +  ln-guile-files
     }
     
     ln-sphinx-autotools-guix-project() {
    diff --git a/bash/templates/Makefile b/bash/templates/Makefile
    new file mode 100644
    index 0000000..7a2d30e
    --- /dev/null
    +++ b/bash/templates/Makefile
    @@ -0,0 +1,13 @@
    +.PHONY: check
    +check:
    +	bash scripts/assert-shellcheck.sh
    +	bash scripts/assert-todos.sh
    +
    +.PHONY: clean
    +clean:
    +	rm -rf public/
    +
    +.PHONY: public
    +public:
    +	bash ./scripts/generate-tasks-and-bugs.sh
    +	pandoc -s --metadata title='$PROJECT_UC - EuAndreh' -c styles.css -o public/index.html README.md
    -- 
    cgit v1.2.3
    
    
    From a1136b908c22d00cf62851b2617ece6ab58583a3 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 09:54:52 -0300
    Subject: fake-symlinks.sh: Always make INSTALL writable
    
    ---
     bash/fake-symlinks.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 5defce3..eb01b64 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -111,6 +111,7 @@ ln-init() {
     }
     
     ln-autotools() {
    +  chmod +w "$PREFIX/INSTALL"
       cp-all AUTHORS bootstrap ChangeLog INSTALL
       cp-if-not description
     
    -- 
    cgit v1.2.3
    
    
    From 6f058b8621cd093fc1e28db8483d194e569f8578 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 12:37:47 -0300
    Subject: fake-symlinks: Remove Guile-specific from ..gitignore
    
    ---
     bash/templates/..gitignore | 10 +++-------
     1 file changed, 3 insertions(+), 7 deletions(-)
    
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    index 3614924..872d6e1 100644
    --- a/bash/templates/..gitignore
    +++ b/bash/templates/..gitignore
    @@ -23,6 +23,8 @@ autom4te.cache
     /Makefile
     /config.h
     
    +/test-suite.log
    +
     /build-aux/compile
     /build-aux/depcomp
     /build-aux/install-sh
    @@ -39,10 +41,4 @@ autom4te.cache
     /tasks-and-bugs.org
     /tasks-and-bugs.html
     /tasks-and-bugs.html~
    -/public/
    -
    -# Guile
    -*.go
    -/*.log
    -/tests/*.log
    -/tests/*.trs
    \ No newline at end of file
    +/public/
    \ No newline at end of file
    -- 
    cgit v1.2.3
    
    
    From 9a6249771ae97d5725b11ada8a8423feec7222f6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 12:38:13 -0300
    Subject: xmobar-notmuch.sh: Show inbox count too
    
    ---
     scripts/ad-hoc/xmobar-notmuch.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh
    index 08e7305..f758f46 100755
    --- a/scripts/ad-hoc/xmobar-notmuch.sh
    +++ b/scripts/ad-hoc/xmobar-notmuch.sh
    @@ -2,7 +2,7 @@
     set -Eeuo pipefail
     
     while true; do
    -  echo "mail: $(notmuch count tag:unread AND \(NOT tag:ml OR thread:{tag:track}\))"
    +  echo "mail: $(notmuch count tag:unread AND \(NOT tag:ml OR thread:{tag:track}\))/$(notmuch count tag:inbox)"
       if grep off-line <(acpi -a); then
         sleep $((60 * 15))
       else
    -- 
    cgit v1.2.3
    
    
    From b9a8d7bacbfbce42d90c67c460800c78fbd51e2c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 13:45:08 -0300
    Subject: fake-symlinks.sh: Fix chmod +w of files
    
    ---
     bash/fake-symlinks.sh | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index eb01b64..f6928da 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -111,7 +111,7 @@ ln-init() {
     }
     
     ln-autotools() {
    -  chmod +w "$PREFIX/INSTALL"
    +  chmod +w "$PREFIX/INSTALL" ||:
       cp-all AUTHORS bootstrap ChangeLog INSTALL
       cp-if-not description
     
    @@ -166,8 +166,8 @@ ln-dicts() {
     ln-texinfo() {
       envsubst-all HACKING
       RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    -  cp-all build-aux/texinfo.tex
       chmod +w "$PREFIX/build-aux/texinfo.tex" ||:
    +  cp-all build-aux/texinfo.tex
       ln-dicts
     }
     
    -- 
    cgit v1.2.3
    
    
    From 382bee5e4431304c0e9a95915550ef0aa82589a9 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 13:56:18 -0300
    Subject: ps1.sh: Fix environment language for git status output
    
    ---
     bash/ps1.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/ps1.sh b/bash/ps1.sh
    index ba43cde..183eb31 100644
    --- a/bash/ps1.sh
    +++ b/bash/ps1.sh
    @@ -17,7 +17,7 @@ path() {
     repo-status() {
       branch="$(git branch --show-current 2> /dev/null)"
       if [ "$branch" != '' ]; then
    -    OUT="$(env LANG=en_US.UTF-8 git status)"
    +    OUT="$(env LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 git status)"
         if ! git diff --quiet &> /dev/null || ! git diff --staged --quiet &> /dev/null; then
           redb "{$branch}" | tr -d '\n'
         elif grep 'to publish your local commits' <(echo "$OUT") > /dev/null; then
    -- 
    cgit v1.2.3
    
    
    From c483f15712ab3aafe3010385276b5c7d331cb9ec Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 14:10:43 -0300
    Subject: pastebin.sh: Allow content to come from a file or STDIN
    
    ---
     scripts/ad-hoc/pastebin.sh | 15 +++++++++++++--
     1 file changed, 13 insertions(+), 2 deletions(-)
    
    diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh
    index a3ecb3a..c0f59b5 100755
    --- a/scripts/ad-hoc/pastebin.sh
    +++ b/scripts/ad-hoc/pastebin.sh
    @@ -5,13 +5,18 @@ usage() {
       red "Missing argument <${1}>.\n"
       cat <
    +    pastebin.sh  [-|FILE]
    +
    +    Reads contents from [FILE], from stdin if '-' is given, and opens the
    +    editor on the content.
     
         Arguments:
           FULL_TITLE       Full title of the pastebin
     
     Examples:
         pastebin.sh 'My example pastebin title'
    +    pastebin.sh 'My example pastebin title' - < file
    +    cat file | pastebin.sh 'My example pastebin title' -
     EOF
     }
     
    @@ -36,6 +41,12 @@ slugify() {
     SLUG_TITLE="$(slugify "${FULL_TITLE}")"
     PASTE_DATE="$(date -I)"
     OUT="_pastebins/${PASTE_DATE}-${SLUG_TITLE}.md"
    +if [[ -n "${2:-}" ]]; then
    +  shift
    +  CONTENT=$(cat "$@")
    +else
    +  CONTENT='FIXMEe'
    +fi
     
     pushd ~/dev/libre/website > /dev/null
     
    @@ -53,7 +64,7 @@ lang: en
     ---
     
     \`\`\`FIXME
    -FIXME
    +$CONTENT
     \`\`\`
     EOF
     
    -- 
    cgit v1.2.3
    
    
    From cc371462a1e545cc66f4123967895c32e9b4fe57 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 14:11:04 -0300
    Subject: publish.sh: Publish directly before doing a git push
    
    ---
     scripts/ad-hoc/pastebin.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh
    index c0f59b5..04ab594 100755
    --- a/scripts/ad-hoc/pastebin.sh
    +++ b/scripts/ad-hoc/pastebin.sh
    @@ -71,5 +71,6 @@ EOF
     git reset .
     git add "${OUT}"
     git commit -m "$0: Auto-add ${OUT}"
    +"$(nix-build -A remotePublishScript)/bin/publish.sh"
     git push
     popd > /dev/null
    -- 
    cgit v1.2.3
    
    
    From e619655e1368f47be13aeb8f5529258aecec2278 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 14:13:14 -0300
    Subject: pastebin.sh: Remove unnecessary curly brace for variables
    
    ---
     scripts/ad-hoc/pastebin.sh | 20 ++++++++++----------
     1 file changed, 10 insertions(+), 10 deletions(-)
    
    diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh
    index 04ab594..db8f60a 100755
    --- a/scripts/ad-hoc/pastebin.sh
    +++ b/scripts/ad-hoc/pastebin.sh
    @@ -21,7 +21,7 @@ EOF
     }
     
     FULL_TITLE="${1:-}"
    -[[ -z "${FULL_TITLE}" ]] && {
    +[[ -z "$FULL_TITLE" ]] && {
       usage 'FULL_TITLE'
       exit 2
     }
    @@ -29,7 +29,7 @@ FULL_TITLE="${1:-}"
     # Derived from:
     # https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519
     slugify() {
    -  echo "${1}"                   | \
    +  echo "$1"                     | \
         tr '[:upper:]' '[:lower:]'  | \
         perl -ne 'tr/\000-\177//cd;
                   s/[^\w\s-]//g;
    @@ -38,24 +38,24 @@ slugify() {
                   print;'
     }
     
    -SLUG_TITLE="$(slugify "${FULL_TITLE}")"
    +SLUG_TITLE="$(slugify "$FULL_TITLE")"
     PASTE_DATE="$(date -I)"
    -OUT="_pastebins/${PASTE_DATE}-${SLUG_TITLE}.md"
    +OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md"
     if [[ -n "${2:-}" ]]; then
       shift
       CONTENT=$(cat "$@")
     else
    -  CONTENT='FIXMEe'
    +  CONTENT='FIXME'
     fi
     
     pushd ~/dev/libre/website > /dev/null
     
    -[[ -f "${OUT}" ]] && {
    -  red "Pastebin named ${OUT} already exists."
    +[[ -f "$OUT" ]] && {
    +  red "Pastebin named $OUT already exists."
       exit 1
     }
     
    -cat < "${OUT}"
    +cat < "$OUT"
     ---
     title: ${FULL_TITLE}
     date: ${PASTE_DATE}
    @@ -69,8 +69,8 @@ $CONTENT
     EOF
     
     git reset .
    -git add "${OUT}"
    -git commit -m "$0: Auto-add ${OUT}"
    +git add "$OUT"
    +git commit -m "$0: Auto-add $OUT"
     "$(nix-build -A remotePublishScript)/bin/publish.sh"
     git push
     popd > /dev/null
    -- 
    cgit v1.2.3
    
    
    From 6fe175f846724193fe138a6ce36b1d7ccdbf4c4b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 14:22:37 -0300
    Subject: Use open script over alias
    
    ---
     bash/aliases.sh     |  1 -
     scripts/ad-hoc/open | 11 +++++++++++
     2 files changed, 11 insertions(+), 1 deletion(-)
     create mode 100755 scripts/ad-hoc/open
    
    diff --git a/bash/aliases.sh b/bash/aliases.sh
    index 1a66e40..9f7061e 100644
    --- a/bash/aliases.sh
    +++ b/bash/aliases.sh
    @@ -3,7 +3,6 @@
     
     unalias -a
     
    -alias open="xdg-open"
     alias l="ls -lahp --color"
     alias copy="tr -d '\\n' | xclip -sel clip"
     alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn"
    diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open
    new file mode 100755
    index 0000000..e6fa5a1
    --- /dev/null
    +++ b/scripts/ad-hoc/open
    @@ -0,0 +1,11 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +
    +case "$1" in
    +  http*)
    +    firefox "$1"
    +    ;;
    +  *)
    +    /run/current-system/sw/bin/xdg-open "$1"
    +    ;;
    +esac
    -- 
    cgit v1.2.3
    
    
    From 3b8972f34ecb46c9bd7c2a93c464f9a1b9ae712e Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 14:24:04 -0300
    Subject: pastebin.sh: Open on browser after publishing
    
    ---
     scripts/ad-hoc/pastebin.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh
    index db8f60a..2d09dd8 100755
    --- a/scripts/ad-hoc/pastebin.sh
    +++ b/scripts/ad-hoc/pastebin.sh
    @@ -72,5 +72,6 @@ git reset .
     git add "$OUT"
     git commit -m "$0: Auto-add $OUT"
     "$(nix-build -A remotePublishScript)/bin/publish.sh"
    +open "https://euandre.org/pastebin/$(tr '-' '/' <<< "$PASTE_DATE")/$SLUG_TITLE.html"
     git push
     popd > /dev/null
    -- 
    cgit v1.2.3
    
    
    From 9506ffde37299b02fecdafa30f20ded475d09042 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 15:32:41 -0300
    Subject: Add xdg-open as alias to open
    
    ---
     scripts/ad-hoc/xdg-open | 1 +
     1 file changed, 1 insertion(+)
     create mode 120000 scripts/ad-hoc/xdg-open
    
    diff --git a/scripts/ad-hoc/xdg-open b/scripts/ad-hoc/xdg-open
    new file mode 120000
    index 0000000..ce4a72b
    --- /dev/null
    +++ b/scripts/ad-hoc/xdg-open
    @@ -0,0 +1 @@
    +open
    \ No newline at end of file
    -- 
    cgit v1.2.3
    
    
    From 1943df79f88ac934826a7e2301904ebc4225e97b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 4 Dec 2020 16:45:28 -0300
    Subject: spacemacs.el: Add #'euandreh/notmuch-copy-git-send-email-command
    
    ---
     spacemacs.el | 23 +++++++++++++++++++++++
     1 file changed, 23 insertions(+)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index f705ff8..268795d 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -680,6 +680,28 @@ dump."
         (kill-new cmd)
         (message cmd)))
     
    +(defun comp (&rest fns)
    +  (lexical-let ((fns fns))
    +    (lambda (arg)
    +      (if fns
    +          (funcall (car fns) (funcall (apply #'comp (cdr fns)) arg))
    +        arg))))
    +
    +(defun euandreh/notmuch-copy-git-send-email-command ()
    +  "View the the current message as a patch."
    +  (interactive)
    +  (let* ((id (notmuch-show-get-message-id t))
    +         (from (car (notmuch-clean-address (notmuch-show-get-from))))
    +         (ccs (reduce #'concat
    +                      (mapcar (comp (apply-partially #'concat " --cc=")
    +                                    #'string-trim
    +                                    #'car
    +                                    #'notmuch-clean-address)
    +                              (split-string (notmuch-show-get-cc) ","))))
    +         (cmd (format "git send-email --in-reply-to=%s --to=%s%s HEAD^" id from ccs)))
    +    (kill-new cmd)
    +    (message cmd)))
    +
     (defun euandreh/copy-url (ml)
       (let* ((ml (if (string= ml "help-guix")
                      "guix-user"
    @@ -812,6 +834,7 @@ This is the place where most of your configurations should be done. Unless it is
       (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch)
       (define-key 'notmuch-show-part-map "y" 'euandreh/notmuch-copy-git-am-command)
       (define-key 'notmuch-show-part-map "b" 'euandreh/notmuch-copy-archive-url)
    +  (define-key 'notmuch-show-part-map "r" 'euandreh/notmuch-copy-git-send-email-command)
       (define-key 'notmuch-search-mode-map "e" 'euandreh/notmuch-extend-current-query-with-tag)
       (define-key 'notmuch-search-mode-map "E" 'euandreh/notmuch-extend-current-query)
       (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach)
    -- 
    cgit v1.2.3
    
    
    From 1f025c851e549b51f91be3525ff4e39d499481ee Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 5 Dec 2020 09:02:28 -0300
    Subject: spacemacs.el: Fix leftover garbage
    
    ---
     spacemacs.el | 5 +----
     1 file changed, 1 insertion(+), 4 deletions(-)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index 268795d..a0063d4 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -812,9 +812,6 @@ through `notmuch-message-attach-regex'."
               :action '(("Find file" . (lambda (f)
                                          (find-file (concat "~/" f))))))))
     
    -(concat "oijoiJ" "Oioij")
    -(apply 'append "oiJ" "Oioj" "oijoij")
    -
     (defun euandreh/elfeed-batch-update ()
       (message "Starting (elfeed-update).")
       (elfeed-org)
    @@ -986,7 +983,7 @@ This is the place where most of your configurations should be done. Unless it is
     
                                      ("CANCELLED" . (:foreground "green"  :weight bold))
                                      ("DONE"      . (:foreground "green"  :weight bold)))
    -        org-agenda-files (list todos)
    +        org-agenda-files (list "~/annex/txt/Agenda.org")
             org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA"
     
             org-capture-templates '(("c" "Dump"          entry (file          "~/annex/txt/Dump.org")          " ")
    -- 
    cgit v1.2.3
    
    
    From d243f6063b32daae789838448746c89382d1002d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 5 Dec 2020 09:03:35 -0300
    Subject: Move metadata.json to description
    
    ---
     description   | 1 +
     metadata.json | 1 -
     2 files changed, 1 insertion(+), 1 deletion(-)
     create mode 100644 description
     delete mode 100644 metadata.json
    
    diff --git a/description b/description
    new file mode 100644
    index 0000000..e5ca504
    --- /dev/null
    +++ b/description
    @@ -0,0 +1 @@
    +Personal OS configuration files.
    diff --git a/metadata.json b/metadata.json
    deleted file mode 100644
    index 354ed37..0000000
    --- a/metadata.json
    +++ /dev/null
    @@ -1 +0,0 @@
    -{"description":"Personal OS configuration files."}
    -- 
    cgit v1.2.3
    
    
    From 948d5e154b6a6624de15375e356c0e6b0ad41b12 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 5 Dec 2020 18:17:08 -0300
    Subject: env.sh: Point $GUIX_PROFILE to ~/.config/guix/current directly
    
    ---
     bash/env.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/env.sh b/bash/env.sh
    index a1d424a..960d5db 100644
    --- a/bash/env.sh
    +++ b/bash/env.sh
    @@ -10,7 +10,7 @@ export LANGUAGE=fr_FR.UTF-8
     # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287
     export NIX_BUILD_CORES=0
     
    -export GUIX_PROFILE="$HOME/.guix-profile"
    +export GUIX_PROFILE="$HOME/.config/guix/current"
     
     for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do
       PATH="$PATH:$p/ad-hoc:$p/cron"
    -- 
    cgit v1.2.3
    
    
    From 0e87b331b123ab208ef4793811b8f5e1dcc1661d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 5 Dec 2020 18:18:34 -0300
    Subject: os.scm: Add packages and sort them
    
    ---
     guix/os.scm | 41 +++++++++++++++++++++--------------------
     1 file changed, 21 insertions(+), 20 deletions(-)
    
    diff --git a/guix/os.scm b/guix/os.scm
    index 1dddd32..93e460c 100644
    --- a/guix/os.scm
    +++ b/guix/os.scm
    @@ -18,20 +18,21 @@
       (packages
        (append
         (map (compose list specification->package+output symbol->string)
    +         '(;; Fonts
    +           font-adobe-source-code-pro
    +
                ;; Base
    -         '(nss-certs ;; suggested by Guix
    +           nss-certs ;; suggested by Guix
                help2man  ;; used in Guix development
                strace
     
    -           ;; Fonts
    -           font-adobe-source-code-pro
    -
                ;; Emacs
                emacs
    -           emacs-spacemacs-theme
    -           emacs-spaceline
    -           emacs-evil
    -           emacs-evil-collection
    +
    +           ;; emacs-spacemacs-theme
    +           ;; emacs-spaceline
    +           ;; emacs-evil
    +           ;; emacs-evil-collection
     
                ;; CLI tools
                vim
    @@ -59,7 +60,7 @@
                bash-completion
                vlc
                youtube-dl
    -           sox ;; play
    +           sox ;; SoX - Sound eXchange
                jq
                calibre
                notmuch
    @@ -78,15 +79,17 @@
                gnupg
                nvi
                tmux
    +           pinentry-tty ;; pinentry?
                direnv
    -           pinentry-tty
    -           ;; pinentry
    -           keepassxc
                recutils
    -           st
                htop
    -           bind
    +           bind:utils
                openssl
    +           zbar
    +           trash-cli
    +           entr
    +           mailutils
    +           ledger
     
                ;; Programming
                clojure
    @@ -95,6 +98,10 @@
                mutt
                weechat
                newsboat
    +           keepassxc
    +           gpodder
    +           newsboat
    +           st
     
                zathura
                zathura-ps
    @@ -103,12 +110,6 @@
                zathura-cb
                ;; zathura-pdf-mupdf
     
    -
    -
    -           zbar
    -           gpodder
    -           newsboat
    -
                ;; xmonad
                ghc
                ghc-xmonad-contrib
    -- 
    cgit v1.2.3
    
    
    From ac94a61d60ec27f9240ec6d087d5b816acd17bc1 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 16:15:21 -0300
    Subject: symlinks.sh: pimutils
    
    ---
     bash/symlinks.sh | 5 +++++
     1 file changed, 5 insertions(+)
    
    diff --git a/bash/symlinks.sh b/bash/symlinks.sh
    index b7441dd..12a1cdc 100644
    --- a/bash/symlinks.sh
    +++ b/bash/symlinks.sh
    @@ -63,3 +63,8 @@ ln -fs "$HOME/annex/bin/misc/nurc.sh"           ~/.nurc
     
     ## Guix
     ln -fs "$DOTFILES/guix/channels.scm"            ~/.config/guix/channels.scm
    +
    +## pimutils
    +mkdir -p ~/.config/vdirsyncer/ ~/.config/khal
    +ln -fs "$HOME/annex/bin/misc/pimutils/vdirsyncer.conf" ~/.config/vdirsyncer/config
    +ln -fs "$HOME/annex/bin/misc/pimutils/khal.conf"       ~/.config/khal/config
    -- 
    cgit v1.2.3
    
    
    From 28a16bbab48bb4b4fff9e41d22e48aa2e7d21e2f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 16:21:59 -0300
    Subject: Separate ArchiveBox from hd.sh
    
    ---
     scripts/ad-hoc/hd.sh | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh
    index 9ca105d..91b84d9 100755
    --- a/scripts/ad-hoc/hd.sh
    +++ b/scripts/ad-hoc/hd.sh
    @@ -7,7 +7,6 @@ annex.sh
     rsync -avzP --delete "$R:vps-borg/"     ~/UTCLOUD/backups/vps-borg/
     rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/
     rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/
    -archive-box.sh
     
     cd ~/dev/
     mr -s -j4 hd
    -- 
    cgit v1.2.3
    
    
    From 3514d45d7688d2c2d8315bab8e75a23fc21aaf22 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 16:31:01 -0300
    Subject: fake-symlinks: Point pre-push to git.euandreh.xyz again
    
    ---
     bash/templates/..git/hooks/pre-push | 7 +++++--
     1 file changed, 5 insertions(+), 2 deletions(-)
    
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    index 7d8e7dd..45079d6 100755
    --- a/bash/templates/..git/hooks/pre-push
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -2,5 +2,8 @@
     set -Eeuo pipefail
     set -x
     
    -scp description         arrobaponto.org:/srv/git/$PROJECT.git/description
    -${DISABLE_CI}scp scripts/ci-build.sh arrobaponto.org:/srv/git/$PROJECT.git/hooks/post-receive
    +scp description         git.euandreh.xyz:/data/git/$PROJECT.git/description
    +${DISABLE_CI}scp scripts/ci-build.sh git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    +
    +# scp description         arrobaponto.org:/srv/git/$PROJECT.git/description
    +# ${DISABLE_CI}scp scripts/ci-build.sh arrobaponto.org:/srv/git/$PROJECT.git/hooks/post-receive
    -- 
    cgit v1.2.3
    
    
    From 1eb0764e1807248e25cf6a2f64e6477a911c13a1 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 16:51:01 -0300
    Subject: fake-symlinks.sh: Supress missing file message
    
    ---
     bash/fake-symlinks.sh | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index f6928da..f9ab972 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -111,7 +111,7 @@ ln-init() {
     }
     
     ln-autotools() {
    -  chmod +w "$PREFIX/INSTALL" ||:
    +  chmod +w "$PREFIX/INSTALL" 2> /dev/null ||:
       cp-all AUTHORS bootstrap ChangeLog INSTALL
       cp-if-not description
     
    @@ -166,7 +166,7 @@ ln-dicts() {
     ln-texinfo() {
       envsubst-all HACKING
       RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    -  chmod +w "$PREFIX/build-aux/texinfo.tex" ||:
    +  chmod +w "$PREFIX/build-aux/texinfo.tex" 2> /dev/null ||:
       cp-all build-aux/texinfo.tex
       ln-dicts
     }
    -- 
    cgit v1.2.3
    
    
    From 5949fc83f3e2713a29af590ff9dbf7e31b45b9bc Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:16:47 -0300
    Subject: fake-symlinks.sh: Fix envsubst-all
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index f9ab972..e69002d 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -52,7 +52,7 @@ cp-if-not() {
     
     envsubst-all() {
       for f in "$@"; do
    -    mkdir -p "$(dirname "$PREFIX/$f")"
    +    mkdir -p "$(dirname "$PREFIX/$(normalize-name "$f")")"
         envsubst < "$f" > "$PREFIX/$(normalize-name "$f")"
       done
     }
    -- 
    cgit v1.2.3
    
    
    From 2edfe006cdcaddc91a09c1f9fa7a9f59e6076755 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:17:02 -0300
    Subject: fake-symlinks: Remove metadata.json
    
    ---
     bash/templates/metadata.json | 8 --------
     1 file changed, 8 deletions(-)
     delete mode 100644 bash/templates/metadata.json
    
    diff --git a/bash/templates/metadata.json b/bash/templates/metadata.json
    deleted file mode 100644
    index fc749ed..0000000
    --- a/bash/templates/metadata.json
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -{
    -  "version": "master",
    -  "project_name": "FIXME",
    -  "description": "FIXME",
    -  "authors": ["EuAndreh "],
    -  "langs": ["en"],
    -  "current_lang": "en"
    -}
    -- 
    cgit v1.2.3
    
    
    From 6de751865e001970f1a1b87f835c3328faa01072 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:17:16 -0300
    Subject: fake-symlinks: Use $PROJECT_UC in README
    
    ---
     bash/templates/README | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/templates/README b/bash/templates/README
    index 813d609..f39ca70 100644
    --- a/bash/templates/README
    +++ b/bash/templates/README
    @@ -1,4 +1,4 @@
    -$PROJECT
    +$PROJECT_UC
     
     FIXME
     
    -- 
    cgit v1.2.3
    
    
    From c3474ec853a17695c921e39ff3f13a13cb5aa694 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:17:33 -0300
    Subject: fake-symlinks.sh: Enrich renaming mapping
    
    ---
     bash/fake-symlinks.sh | 3 +++
     1 file changed, 3 insertions(+)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index e69002d..d62bea9 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -267,10 +267,13 @@ declare -A PROJECT_NAMES=(
       [vps]=VPS
       [cement]=Cement
       [parsecc]=ParsecC
    +  [songbooks]=Songbooks
     )
     
     declare -A ML_FOR_PROJECT=(
       [cement]=byopds
    +  [x-bindgen]=mediator
    +  [songbooks]=songbooks
     )
     
     ln-all() {
    -- 
    cgit v1.2.3
    
    
    From dd909bed3822e3084385dc449d26e733f3b7aa9c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:27:16 -0300
    Subject: fake-symlinks.sh: Fix ln-generated-readme
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index d62bea9..684f85b 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -235,7 +235,7 @@ ln-simple-makefile() {
     
     ln-generated-readme() {
       cat <(printf "%s\n\n" "$PROJECT_UC")                        \
    -      description                                             \
    +      <(fold < "$PREFIX/description")                         \
           <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \
           > "$PREFIX/README"
     }
    -- 
    cgit v1.2.3
    
    
    From a5fa8bb58d025eb9683809e4aa7c06ccbd471eb9 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:27:38 -0300
    Subject: fake-symlinks.sh: Make songbooks a Texinfo project
    
    ---
     bash/fake-symlinks.sh | 7 ++++---
     1 file changed, 4 insertions(+), 3 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 684f85b..5c60d81 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -197,6 +197,7 @@ ln-base-autotools-guix-project() {
       ln-guix-container
       ln-git-notes-release
       ln-autotools
    +  ln-generated-readme
     
       ln-agpl
       ln-ci
    @@ -284,11 +285,11 @@ ln-all() {
       done
     }
     
    -ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds cement
    +ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds cement songbooks
     ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
    -ln-all ln-scribble-autotools-guix-project songbooks
    +ln-all ln-scribble-autotools-guix-project parsecc
     ln-all ln-antora-autotools-guix-project   byopds
    -ln-all ln-makefile-only-guix-project      vps parsecc
    +ln-all ln-makefile-only-guix-project      vps
     ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website
     
     popd > /dev/null || exit 1
    -- 
    cgit v1.2.3
    
    
    From 2d3a159c0960963075255a4192a78020b709a5b1 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:29:05 -0300
    Subject: Add Makefile
    
    ---
     Makefile | 13 +++++++++++++
     1 file changed, 13 insertions(+)
     create mode 100644 Makefile
    
    diff --git a/Makefile b/Makefile
    new file mode 100644
    index 0000000..170d46c
    --- /dev/null
    +++ b/Makefile
    @@ -0,0 +1,13 @@
    +.PHONY: check
    +check:
    +	bash scripts/assert-shellcheck.sh
    +	bash scripts/assert-todos.sh
    +
    +.PHONY: clean
    +clean:
    +	rm -rf public/
    +
    +.PHONY: public
    +public:
    +	bash ./scripts/generate-tasks-and-bugs.sh
    +	pandoc -s --metadata title='dotfiles - EuAndreh' -c styles.css -o public/index.html README.md
    -- 
    cgit v1.2.3
    
    
    From fb8a2a8e9ffc3c7f621679a0358006fffc514984 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:32:13 -0300
    Subject: fake-symlinks.sh: Fix ln-bare-project
    
    ---
     bash/fake-symlinks.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 5c60d81..4576d28 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -251,6 +251,7 @@ ln-makefile-only-guix-project() {
     }
     
     ln-bare-project() {
    +  ln-env "$1"
       ln-agpl
     
       if [[ -f "$PREFIX/Makefile" ]]; then
    -- 
    cgit v1.2.3
    
    
    From 256993e4eed2839e85f986f8a48cc39e8767653d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 19:32:24 -0300
    Subject: Add ci-build.sh
    
    ---
     scripts/ci-build.sh | 40 ++++++++++++++++++++++++++++++++++++++++
     1 file changed, 40 insertions(+)
     create mode 100755 scripts/ci-build.sh
    
    diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh
    new file mode 100755
    index 0000000..9ff4ff4
    --- /dev/null
    +++ b/scripts/ci-build.sh
    @@ -0,0 +1,40 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +set -x
    +
    +PREFIX='/srv/ci/dotfiles'
    +mkdir -p "$PREFIX"
    +read -r _ SHA _ # oldrev newrev refname
    +FILENAME="$(date -Is)-$SHA.log"
    +LOGFILE="$PREFIX/$FILENAME"
    +exec &> >(tee -a "$LOGFILE")
    +
    +echo "Starting CI job at: $(date -Is)"
    +
    +finish() {
    +  STATUS="$?"
    +  printf "\n\n>>> exit status was %s\n" "$STATUS"
    +  echo "Finishing CI job at: $(date -Is)"
    +  popd
    +  NOTE=$(cat <>> CI logs added as Git note."
    +}
    +trap finish EXIT
    +
    +unset GIT_DIR
    +CLONE="$(mktemp -d)"
    +git clone . "$CLONE"
    +pushd "$CLONE"
    +git config --global user.email git@euandre.org
    +git config --global user.name 'EuAndreh CI'
    +
    +./scripts/with-container.sh 'make clean check public'
    +rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/
    -- 
    cgit v1.2.3
    
    
    From fc4867cad784de90560d6c81b34bb657665e430d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 20:09:23 -0300
    Subject: fake-symlinks.sh: Add more name mappings
    
    ---
     bash/fake-symlinks.sh | 6 ++++++
     1 file changed, 6 insertions(+)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 4576d28..feb571b 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -270,11 +270,17 @@ declare -A PROJECT_NAMES=(
       [cement]=Cement
       [parsecc]=ParsecC
       [songbooks]=Songbooks
    +  [mediator]=Mediator
    +  [byopds]=BYOPDS
     )
     
     declare -A ML_FOR_PROJECT=(
       [cement]=byopds
    +  [byopds]=byopds
       [x-bindgen]=mediator
    +  [mediator]=mediator
    +  [libedn]=mediator
    +  [eq]=mediator
       [songbooks]=songbooks
     )
     
    -- 
    cgit v1.2.3
    
    
    From 10a86bb9139b969cfc9505955c6e41abcbf939f6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 20:19:45 -0300
    Subject: fake-symlinks: Allow pre-push to look at git config for description
    
    ---
     bash/templates/..git/hooks/pre-push | 7 ++++++-
     1 file changed, 6 insertions(+), 1 deletion(-)
    
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    index 45079d6..23901c4 100755
    --- a/bash/templates/..git/hooks/pre-push
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -2,7 +2,12 @@
     set -Eeuo pipefail
     set -x
     
    -scp description         git.euandreh.xyz:/data/git/$PROJECT.git/description
    +if [[ -f description ]]; then
    +  scp description         git.euandreh.xyz:/data/git/$PROJECT.git/description
    +else
    +  git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/$PROJECT.git/description'
    +fi
    +
     ${DISABLE_CI}scp scripts/ci-build.sh git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
     
     # scp description         arrobaponto.org:/srv/git/$PROJECT.git/description
    -- 
    cgit v1.2.3
    
    
    From 7bc66ef37fbc195884e189a584064ca61edc63b9 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 20:20:06 -0300
    Subject: fake-symlinks.sh: Add Pires as a ln-makefile-only-guix-project
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index feb571b..c2627e2 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -296,7 +296,7 @@ ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds cement song
     ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
     ln-all ln-scribble-autotools-guix-project parsecc
     ln-all ln-antora-autotools-guix-project   byopds
    -ln-all ln-makefile-only-guix-project      vps
    +ln-all ln-makefile-only-guix-project      vps pires
     ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website
     
     popd > /dev/null || exit 1
    -- 
    cgit v1.2.3
    
    
    From eb6f52dd62dbdef7b48f30a2cea0d15cf1f6f848 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 20:29:24 -0300
    Subject: fake-symlinks.sh: Add ${PREFIX_FOR_PROJECT[@]} map, add Guix repo
    
    ---
     bash/fake-symlinks.sh | 8 ++++++--
     1 file changed, 6 insertions(+), 2 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index c2627e2..db8a404 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -95,7 +95,7 @@ chmod+x-all() {
     
     ln-env() {
       export PROJECT="$1"
    -  export PREFIX="$HOME/dev/libre/$PROJECT"
    +  export PREFIX="${PREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}"
       export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}"
       export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}"
     }
    @@ -284,6 +284,10 @@ declare -A ML_FOR_PROJECT=(
       [songbooks]=songbooks
     )
     
    +declare -A PREFIX_FOR_PROJECT=(
    +  [guix]="$HOME/dev/guix/guix"
    +)
    +
     ln-all() {
       LN_FN="$1"
       shift
    @@ -297,6 +301,6 @@ ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
     ln-all ln-scribble-autotools-guix-project parsecc
     ln-all ln-antora-autotools-guix-project   byopds
     ln-all ln-makefile-only-guix-project      vps pires
    -ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website
    +ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website guix
     
     popd > /dev/null || exit 1
    -- 
    cgit v1.2.3
    
    
    From b8bbcb93601d462641f21b18970c59e8e06c8420 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 20:36:02 -0300
    Subject: fake-symlinks.sh: Move $DISABLE_CI to ln-env
    
    ---
     bash/fake-symlinks.sh | 38 ++++++++++++++++++++++++++++----------
     1 file changed, 28 insertions(+), 10 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index db8a404..00288d5 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -98,6 +98,12 @@ ln-env() {
       export PREFIX="${PREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}"
       export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}"
       export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}"
    +
    +  if [[ -f "$PREFIX/Makefile" ]]; then
    +    export DISABLE_CI=''
    +  else
    +    export DISABLE_CI='# '
    +  fi
     }
     
     ln-init() {
    @@ -241,6 +247,20 @@ ln-generated-readme() {
           > "$PREFIX/README"
     }
     
    +ln-maybe-pre-push() {
    +  envsubst-all ..git/hooks/pre-push
    +  chmod+x-all  ..git/hooks/pre-push
    +}
    +
    +ln-maybe-ci-build() {
    +  if [[ -f "$PREFIX/Makefile" ]]; then
    +    envsubst-all scripts/ci-build.sh
    +    chmod+x-all  scripts/ci-build.sh
    +  fi
    +  envsubst-all ..git/hooks/pre-push
    +  chmod+x-all  ..git/hooks/pre-push
    +}
    +
     ln-makefile-only-guix-project() {
       ln-env "$1"
       ln-agpl
    @@ -253,16 +273,13 @@ ln-makefile-only-guix-project() {
     ln-bare-project() {
       ln-env "$1"
       ln-agpl
    +  ln-maybe-pre-push
    +  ln-maybe-ci-build
    +}
     
    -  if [[ -f "$PREFIX/Makefile" ]]; then
    -    export DISABLE_CI=''
    -    envsubst-all scripts/ci-build.sh
    -    chmod+x-all  scripts/ci-build.sh
    -  else
    -    export DISABLE_CI='# '
    -  fi
    -  envsubst-all ..git/hooks/pre-push
    -  chmod+x-all  ..git/hooks/pre-push
    +ln-description-foreign-project() {
    +  ln-env "$1"
    +  ln-maybe-pre-push
     }
     
     declare -A PROJECT_NAMES=(
    @@ -301,6 +318,7 @@ ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
     ln-all ln-scribble-autotools-guix-project parsecc
     ln-all ln-antora-autotools-guix-project   byopds
     ln-all ln-makefile-only-guix-project      vps pires
    -ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website guix
    +ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website
    +ln-all ln-description-foreign-project     guix
     
     popd > /dev/null || exit 1
    -- 
    cgit v1.2.3
    
    
    From f0ae2022ef78db81bd5ba6875f81648950199724 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 20:49:41 -0300
    Subject: fake-symlinks.sh: $DISABLE_CI for ln-description-foreign-project
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 00288d5..f71d9f1 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -279,7 +279,7 @@ ln-bare-project() {
     
     ln-description-foreign-project() {
       ln-env "$1"
    -  ln-maybe-pre-push
    +  DISABLE_CI='# ' ln-maybe-pre-push
     }
     
     declare -A PROJECT_NAMES=(
    -- 
    cgit v1.2.3
    
    
    From 1acdf4b77e76eb497361b5b4095a8a9722dc6f62 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 22:30:50 -0300
    Subject: env.sh: Point $GUIX_PROFILE to ~/.guix-profile
    
    As instructed by 'guix install xxx'.
    ---
     bash/env.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/env.sh b/bash/env.sh
    index 960d5db..a1d424a 100644
    --- a/bash/env.sh
    +++ b/bash/env.sh
    @@ -10,7 +10,7 @@ export LANGUAGE=fr_FR.UTF-8
     # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287
     export NIX_BUILD_CORES=0
     
    -export GUIX_PROFILE="$HOME/.config/guix/current"
    +export GUIX_PROFILE="$HOME/.guix-profile"
     
     for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do
       PATH="$PATH:$p/ad-hoc:$p/cron"
    -- 
    cgit v1.2.3
    
    
    From ff10819e7a7057bddfbd36500f22829b402e187a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 23:34:57 -0300
    Subject: fake-symlinks: assert-todos.sh: Allow it to work on files with spaces
     on the name
    
    ---
     bash/templates/scripts/assert-todos.sh | 3 +--
     1 file changed, 1 insertion(+), 2 deletions(-)
    
    diff --git a/bash/templates/scripts/assert-todos.sh b/bash/templates/scripts/assert-todos.sh
    index c3139d1..a9c5ef9 100755
    --- a/bash/templates/scripts/assert-todos.sh
    +++ b/bash/templates/scripts/assert-todos.sh
    @@ -3,8 +3,7 @@ set -Eeuo pipefail
     cd "$(dirname "${BASH_SOURCE[0]}")"
     cd ../
     
    -# shellcheck disable=2046
    -if grep -R FIXME $(git ls-files) | grep -v '^TODOs.org' | grep -v '^.git/' | grep -v '^scripts/assert-todos.sh'; then
    +if git grep FIXME | grep -v '^TODOs.org' | grep -v '^scripts/assert-todos.sh'; then
       echo "Found dangling FIXME markers on the project."
       echo "You should write them down properly on TODOs.org."
       exit 1
    -- 
    cgit v1.2.3
    
    
    From b4eb5398605d00a4ea0b82373e915cfb034a7ab0 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 9 Dec 2020 23:35:08 -0300
    Subject: ps1.sh: Use __git_ps1 over "git branch"
    
    ---
     bash/ps1.sh | 12 ++++++------
     1 file changed, 6 insertions(+), 6 deletions(-)
    
    diff --git a/bash/ps1.sh b/bash/ps1.sh
    index 183eb31..8e74655 100644
    --- a/bash/ps1.sh
    +++ b/bash/ps1.sh
    @@ -15,17 +15,17 @@ path() {
     }
     
     repo-status() {
    -  branch="$(git branch --show-current 2> /dev/null)"
    -  if [ "$branch" != '' ]; then
    +  inner="$(__git_ps1 "%s")"
    +  if [[ -n "$inner" ]]; then
         OUT="$(env LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 git status)"
         if ! git diff --quiet &> /dev/null || ! git diff --staged --quiet &> /dev/null; then
    -      redb "{$branch}" | tr -d '\n'
    +      redb "{$inner}" | tr -d '\n'
         elif grep 'to publish your local commits' <(echo "$OUT") > /dev/null; then
    -      bluei "[^${branch}^]" | tr -d '\n'
    +      bluei "[^${inner}^]" | tr -d '\n'
         elif grep 'to update your local branch' <(echo "$OUT") > /dev/null; then
    -      bluei "[v${branch}v]" | tr -d '\n'
    +      bluei "[v${inner}v]" | tr -d '\n'
         else
    -      green "(${branch})" | tr -d '\n'
    +      green "(${inner})" | tr -d '\n'
         fi
         printf ' - '
         blacki "$(git rev-parse HEAD | head -c 7)" | tr -d '\n'
    -- 
    cgit v1.2.3
    
    
    From 4f3839ca8f684398373b99ee3b569cb22b1a8739 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 02:37:05 -0300
    Subject: fake-symlinks.sh: Add $GUILE_PROJECTS variable
    
    ---
     bash/fake-symlinks.sh | 8 +++++++-
     1 file changed, 7 insertions(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index f71d9f1..b511dce 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -210,7 +210,7 @@ ln-base-autotools-guix-project() {
     }
     
     ln-guile-files() {
    -  if [[ "$PROJECT" = guile* ]]; then
    +  if [[ -n "${GUILE_PROJECTS[$PROJECT]}" ]]; then
         cp-all build-aux/guile.am build-aux/pre-inst-env.in m4/guile.m4
       fi
     }
    @@ -305,6 +305,12 @@ declare -A PREFIX_FOR_PROJECT=(
       [guix]="$HOME/dev/guix/guix"
     )
     
    +declare -A GUILE_PROJECTS=(
    +  [guile-quickcheck]=1
    +  [guile-pds]=1
    +  [songbooks]=1
    +)
    +
     ln-all() {
       LN_FN="$1"
       shift
    -- 
    cgit v1.2.3
    
    
    From fe66cf5a680701228f19d968faba376ec0d2e6d2 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 02:37:50 -0300
    Subject: fake-symlinks.sh: ln-generated-readme only when README.md doesn't
     exist
    
    ---
     bash/fake-symlinks.sh | 10 ++++++----
     1 file changed, 6 insertions(+), 4 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index b511dce..2f388db 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -241,10 +241,12 @@ ln-simple-makefile() {
     }
     
     ln-generated-readme() {
    -  cat <(printf "%s\n\n" "$PROJECT_UC")                        \
    -      <(fold < "$PREFIX/description")                         \
    -      <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \
    -      > "$PREFIX/README"
    +  if [[ ! -f "$PREFIX/README.md" ]]; then
    +    cat <(printf "%s\n\n" "$PROJECT_UC")                        \
    +        <(fold < "$PREFIX/description")                         \
    +        <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \
    +        > "$PREFIX/README"
    +  fi
     }
     
     ln-maybe-pre-push() {
    -- 
    cgit v1.2.3
    
    
    From 4d6388a8b56753a6a2ad3e76e37ee9362ec99c84 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 02:39:25 -0300
    Subject: fake-symlinks.sh: Break ln-bare-project list into multiple lines
    
    ---
     bash/fake-symlinks.sh | 14 +++++++++++++-
     1 file changed, 13 insertions(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 2f388db..7c7cb6e 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -326,7 +326,19 @@ ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
     ln-all ln-scribble-autotools-guix-project parsecc
     ln-all ln-antora-autotools-guix-project   byopds
     ln-all ln-makefile-only-guix-project      vps pires
    -ln-all ln-bare-project parseclj boneco brinquedoteca casa-do-caminho dotfiles euandreh-guix-channel music pdfs-da-d-maria swift2nix swift2nix-demo cargo2nix cargo2nix-demo website
     ln-all ln-description-foreign-project     guix
    +ln-all ln-bare-project                    parseclj              \
    +                                          boneco                \
    +                                          brinquedoteca         \
    +                                          casa-do-caminho       \
    +                                          dotfiles              \
    +                                          euandreh-guix-channel \
    +                                          music                 \
    +                                          pdfs-da-d-maria       \
    +                                          swift2nix             \
    +                                          swift2nix-demo        \
    +                                          cargo2nix             \
    +                                          cargo2nix-demo        \
    +                                          website
     
     popd > /dev/null || exit 1
    -- 
    cgit v1.2.3
    
    
    From 208ff7d2d360f7fc895c874013c440cc787bd630 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 10:17:40 -0300
    Subject: spacemacs.el: Update generated config
    
    ---
     spacemacs.el | 6 +++++-
     1 file changed, 5 insertions(+), 1 deletion(-)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index a0063d4..ef99f13 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -1049,7 +1049,11 @@ This function is called at the very end of Spacemacs initialization."
      '(package-selected-packages
        '(po-mode lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell))
      '(safe-local-variable-values
    -   '((eval let
    +   '((eval add-hook 'before-save-hook 'time-stamp)
    +     (javascript-backend . tide)
    +     (go-backend . go-mode)
    +     (go-backend . lsp)
    +     (eval let
                ((root-dir-unexpanded
                  (locate-dominating-file default-directory ".dir-locals.el")))
                (when root-dir-unexpanded
    -- 
    cgit v1.2.3
    
    
    From eb1eb5d22e13adaa2d70362347446bca45a41dc3 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 11:56:16 -0300
    Subject: fake-symlinks: Add src/ suffix to abs_top_srcdir and abs_top_builddir
     in pre-inst-env.in
    
    ---
     bash/templates/build-aux/pre-inst-env.in | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/bash/templates/build-aux/pre-inst-env.in b/bash/templates/build-aux/pre-inst-env.in
    index ebf1a05..dc2cdd6 100644
    --- a/bash/templates/build-aux/pre-inst-env.in
    +++ b/bash/templates/build-aux/pre-inst-env.in
    @@ -1,7 +1,7 @@
     #!/bin/sh
     
    -abs_top_srcdir="`cd "@abs_top_srcdir@" > /dev/null; pwd`"
    -abs_top_builddir="`cd "@abs_top_builddir@" > /dev/null; pwd`"
    +abs_top_srcdir="`cd "@abs_top_srcdir@/src" > /dev/null; pwd`"
    +abs_top_builddir="`cd "@abs_top_builddir@/src" > /dev/null; pwd`"
     
     GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
     GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
    -- 
    cgit v1.2.3
    
    
    From 7bf772de13a4bcf18e5a43e723894c81e7bbd780 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 13:36:38 -0300
    Subject: fake-symlinks.sh: pre-inst-env.in: Stop exporting $abs_top_builddir
     to $PATH
    
    ---
     bash/templates/build-aux/pre-inst-env.in | 3 ---
     1 file changed, 3 deletions(-)
    
    diff --git a/bash/templates/build-aux/pre-inst-env.in b/bash/templates/build-aux/pre-inst-env.in
    index dc2cdd6..4cc7b96 100644
    --- a/bash/templates/build-aux/pre-inst-env.in
    +++ b/bash/templates/build-aux/pre-inst-env.in
    @@ -7,7 +7,4 @@ GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_
     GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
     export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH
     
    -PATH="$abs_top_builddir:$PATH"
    -export PATH
    -
     exec "$@"
    -- 
    cgit v1.2.3
    
    
    From 1ba200f0f24e047f5b2062cbb79cc889cefb99a5 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 14:00:31 -0300
    Subject: channels.scm: Add songbooks channel
    
    ---
     guix/channels.scm | 9 +++++++++
     1 file changed, 9 insertions(+)
    
    diff --git a/guix/channels.scm b/guix/channels.scm
    index b437c93..7490985 100644
    --- a/guix/channels.scm
    +++ b/guix/channels.scm
    @@ -7,6 +7,15 @@
        (introduction
         (make-channel-introduction
          "641f9388002cd874040938ab1c6da7ac9d0e54ca"
    +     (openpgp-fingerprint
    +      "5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060"))))
    +  (channel
    +   (name 'songbooks)
    +   (url "https://git.sr.ht/~euandreh/songbooks")
    +   (branch "master")
    +   (introduction
    +    (make-channel-introduction
    +     "34ba04025e2bf1a66ba85c295f3dda3e6577874e"
          (openpgp-fingerprint
           "5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060")))))
      %default-channels)
    -- 
    cgit v1.2.3
    
    
    From c413944ead502027e420552477af2dc5bc45e670 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 14:01:18 -0300
    Subject: fake-symlinks.sh: Don't overwrite existing README file
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 7c7cb6e..c737493 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -241,7 +241,7 @@ ln-simple-makefile() {
     }
     
     ln-generated-readme() {
    -  if [[ ! -f "$PREFIX/README.md" ]]; then
    +  if [[ ! -f "$PREFIX/README" ]]; then
         cat <(printf "%s\n\n" "$PROJECT_UC")                        \
             <(fold < "$PREFIX/description")                         \
             <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \
    -- 
    cgit v1.2.3
    
    
    From 4945cd5c6aa91cc2b8e878016ae2e4031c213482 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 15:18:39 -0300
    Subject: ci-build.sh: Get  from environment
    
    ---
     scripts/ci-build.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh
    index 9ff4ff4..3fb0470 100755
    --- a/scripts/ci-build.sh
    +++ b/scripts/ci-build.sh
    @@ -2,7 +2,7 @@
     set -Eeuo pipefail
     set -x
     
    -PREFIX='/srv/ci/dotfiles'
    +PREFIX='$LOGS_PREFIX/dotfiles'
     mkdir -p "$PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="$(date -Is)-$SHA.log"
    -- 
    cgit v1.2.3
    
    
    From 897e266595e8a54424ce57802eaf0670da1496d6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 15:22:23 -0300
    Subject: open PDFs with zathura
    
    ---
     nixos/configuration.nix | 1 +
     scripts/ad-hoc/open     | 3 +++
     2 files changed, 4 insertions(+)
    
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 55e524f..942b46a 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -184,6 +184,7 @@ in {
         libressl
         help2man
         ripgrep-all
    +    zathura
     
         gnome3.libgnome-keyring
         gnome3.gnome-keyring
    diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open
    index e6fa5a1..e75f076 100755
    --- a/scripts/ad-hoc/open
    +++ b/scripts/ad-hoc/open
    @@ -5,6 +5,9 @@ case "$1" in
       http*)
         firefox "$1"
         ;;
    +  *.pdf)
    +    zathura "$1"
    +    ;;
       *)
         /run/current-system/sw/bin/xdg-open "$1"
         ;;
    -- 
    cgit v1.2.3
    
    
    From db90b03993b8f4fd32589a834b0b57ba6ebfa1c8 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 15:22:51 -0300
    Subject: fake-symlinks: Get $PREFIX from environment in ci-build.sh
    
    ---
     bash/templates/scripts/ci-build.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/templates/scripts/ci-build.sh b/bash/templates/scripts/ci-build.sh
    index 0e2b4b1..fa0bfd5 100755
    --- a/bash/templates/scripts/ci-build.sh
    +++ b/bash/templates/scripts/ci-build.sh
    @@ -2,7 +2,7 @@
     set -Eeuo pipefail
     set -x
     
    -PREFIX='/srv/ci/$PROJECT'
    +PREFIX='${DOLLAR}LOGS_PREFIX/$PROJECT'
     mkdir -p "${DOLLAR}PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log"
    -- 
    cgit v1.2.3
    
    
    From 368ddf73813ca3d359a7f6538b8ef4a28c2fe72e Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 10 Dec 2020 15:59:44 -0300
    Subject: ci-build.sh: Use double quotes for
    
    ---
     bash/templates/scripts/ci-build.sh | 2 +-
     scripts/ci-build.sh                | 2 +-
     2 files changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/bash/templates/scripts/ci-build.sh b/bash/templates/scripts/ci-build.sh
    index fa0bfd5..3d934f3 100755
    --- a/bash/templates/scripts/ci-build.sh
    +++ b/bash/templates/scripts/ci-build.sh
    @@ -2,7 +2,7 @@
     set -Eeuo pipefail
     set -x
     
    -PREFIX='${DOLLAR}LOGS_PREFIX/$PROJECT'
    +PREFIX="${DOLLAR}LOGS_PREFIX/$PROJECT"
     mkdir -p "${DOLLAR}PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log"
    diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh
    index 3fb0470..9c931e1 100755
    --- a/scripts/ci-build.sh
    +++ b/scripts/ci-build.sh
    @@ -2,7 +2,7 @@
     set -Eeuo pipefail
     set -x
     
    -PREFIX='$LOGS_PREFIX/dotfiles'
    +PREFIX="$LOGS_PREFIX/dotfiles"
     mkdir -p "$PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="$(date -Is)-$SHA.log"
    -- 
    cgit v1.2.3
    
    
    From e5826f6d25bedcb2d2a5fd1f312daa606184ca5f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 11 Dec 2020 10:59:48 -0300
    Subject: fake-symlinks: Add files with ~ suffix to ..gitignore
    
    ---
     bash/templates/..gitignore | 2 ++
     1 file changed, 2 insertions(+)
    
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    index 872d6e1..4abd77d 100644
    --- a/bash/templates/..gitignore
    +++ b/bash/templates/..gitignore
    @@ -13,6 +13,7 @@ autom4te.cache
     /config.status
     /config.sub
     /configure
    +/configure~
     /configure.scan
     /depcomp
     /install-sh
    @@ -28,6 +29,7 @@ autom4te.cache
     /build-aux/compile
     /build-aux/depcomp
     /build-aux/install-sh
    +/build-aux/install-sh~
     /build-aux/missing
     /build-aux/test-driver
     
    -- 
    cgit v1.2.3
    
    
    From 3c57e1ca9d8bf4613353999c6e34c600bd011923 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 11 Dec 2020 11:00:07 -0300
    Subject: fake-symlinks.sh: Set mailing list address to guile-pds
    
    ---
     bash/fake-symlinks.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index c737493..d19e88a 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -296,6 +296,7 @@ declare -A PROJECT_NAMES=(
     declare -A ML_FOR_PROJECT=(
       [cement]=byopds
       [byopds]=byopds
    +  [guile-pds]=byopds
       [x-bindgen]=mediator
       [mediator]=mediator
       [libedn]=mediator
    -- 
    cgit v1.2.3
    
    
    From 65d81e06ae4db3ee4f720b7ff8684b851b13c894 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 11 Dec 2020 13:08:11 -0300
    Subject: xmobar-notmuch.sh: Fix output display
    
    The grep match was being printed to xmobar, and the notmuch line existed only on
    the following line. This made xmobar show only "Adapter: off-line" and not show
    the mail line.
    ---
     scripts/ad-hoc/xmobar-notmuch.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh
    index f758f46..8bceab0 100755
    --- a/scripts/ad-hoc/xmobar-notmuch.sh
    +++ b/scripts/ad-hoc/xmobar-notmuch.sh
    @@ -3,7 +3,7 @@ set -Eeuo pipefail
     
     while true; do
       echo "mail: $(notmuch count tag:unread AND \(NOT tag:ml OR thread:{tag:track}\))/$(notmuch count tag:inbox)"
    -  if grep off-line <(acpi -a); then
    +  if grep off-line <(acpi -a) > /dev/null; then
         sleep $((60 * 15))
       else
         sleep $((60 * 1))
    -- 
    cgit v1.2.3
    
    
    From a3b3ccf6bd6a417b50f732b1cf89331def870620 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 11 Dec 2020 16:47:45 -0300
    Subject: fake-symlinks: Add compile-readme.sh
    
    ---
     bash/fake-symlinks.sh                    |  6 ++++++
     bash/templates/scripts/compile-readme.sh | 11 +++++++++++
     2 files changed, 17 insertions(+)
     create mode 100755 bash/templates/scripts/compile-readme.sh
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index d19e88a..ce4e877 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -169,6 +169,11 @@ ln-dicts() {
       cp-all doc/dictionaries/international.txt doc/dictionaries/en.txt
     }
     
    +ln-pandoc-index() {
    +  envsubst-all scripts/compile-readme.sh
    +  chmod+x-all  scripts/compile-readme.sh
    +}
    +
     ln-texinfo() {
       envsubst-all HACKING
       RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    @@ -204,6 +209,7 @@ ln-base-autotools-guix-project() {
       ln-git-notes-release
       ln-autotools
       ln-generated-readme
    +  ln-pandoc-index
     
       ln-agpl
       ln-ci
    diff --git a/bash/templates/scripts/compile-readme.sh b/bash/templates/scripts/compile-readme.sh
    new file mode 100755
    index 0000000..0c1d4b4
    --- /dev/null
    +++ b/bash/templates/scripts/compile-readme.sh
    @@ -0,0 +1,11 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +cd "$(dirname "${BASH_SOURCE[0]}")"
    +cd ../
    +
    +pandoc -s \
    +       --metadata title='$PROJECT_UC - EuAndreh' \
    +       -c styles.css \
    +       -o public/index.html \
    +       -r markdown \
    +       README
    -- 
    cgit v1.2.3
    
    
    From f255760e45af85e077e9ba3e1b73b0343349ad3c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 12 Dec 2020 15:27:06 -0300
    Subject: env.sh: Add $HOME/tmp/bin to $PATH
    
    ---
     bash/env.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/bash/env.sh b/bash/env.sh
    index a1d424a..191184f 100644
    --- a/bash/env.sh
    +++ b/bash/env.sh
    @@ -11,6 +11,7 @@ export LANGUAGE=fr_FR.UTF-8
     export NIX_BUILD_CORES=0
     
     export GUIX_PROFILE="$HOME/.guix-profile"
    +PATH="$PATH:$HOME/tmp/bin"
     
     for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do
       PATH="$PATH:$p/ad-hoc:$p/cron"
    -- 
    cgit v1.2.3
    
    
    From f8ed685b490e66e2a2b422af9b48f6005e3faf3c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 12 Dec 2020 16:04:35 -0300
    Subject: ps1.sh: Refactor repo-status using "git -bs --porcelain"
    
    * show untracked files;
    * show full length of SHA;
    ---
     bash/colors.sh |  2 ++
     bash/ps1.sh    | 53 ++++++++++++++++++++++++++++++++++++++++++++---------
     2 files changed, 46 insertions(+), 9 deletions(-)
    
    diff --git a/bash/colors.sh b/bash/colors.sh
    index 8ec71b5..1730969 100644
    --- a/bash/colors.sh
    +++ b/bash/colors.sh
    @@ -129,4 +129,6 @@ function colors {
       purpleb "purpleb"
       lightblue "lightblue"
       lightblueb "lightblueb"
    +  blacki "blacki"
    +  bluei "bluei"
     }
    diff --git a/bash/ps1.sh b/bash/ps1.sh
    index 8e74655..dae553a 100644
    --- a/bash/ps1.sh
    +++ b/bash/ps1.sh
    @@ -17,18 +17,53 @@ path() {
     repo-status() {
       inner="$(__git_ps1 "%s")"
       if [[ -n "$inner" ]]; then
    -    OUT="$(env LANGUAGE=en_US.UTF-8 LANG=en_US.UTF-8 git status)"
    -    if ! git diff --quiet &> /dev/null || ! git diff --staged --quiet &> /dev/null; then
    -      redb "{$inner}" | tr -d '\n'
    -    elif grep 'to publish your local commits' <(echo "$OUT") > /dev/null; then
    -      bluei "[^${inner}^]" | tr -d '\n'
    -    elif grep 'to update your local branch' <(echo "$OUT") > /dev/null; then
    -      bluei "[v${inner}v]" | tr -d '\n'
    +    OUT="$(git status --short --branch --porcelain 2>/dev/null)"
    +    BRANCH_LINE="$(head -n 1 <<< "$OUT")"
    +    DIFF_LINES="$(tail -n +2 <<< "$OUT")"
    +
    +    if grep 'ahead' <<< "$BRANCH_LINE" > /dev/null; then
    +      IS_AHEAD=1
    +    fi
    +    if grep 'behind' <<< "$BRANCH_LINE" > /dev/null; then
    +      IS_BEHIND=1
    +    fi
    +
    +    if [[ -n "$IS_AHEAD" ]] && [[ -n "$IS_BEHIND" ]]; then
    +      BRANCH_MARKER="^^^ $inner vvv"
    +    elif [[ -n "$IS_AHEAD" ]]; then
    +      BRANCH_MARKER="^ $inner ^"
    +    elif [[ -n "$IS_BEHIND" ]]; then
    +      BRANCH_MARKER="v $inner v"
         else
    -      green "(${inner})" | tr -d '\n'
    +      BRANCH_MARKER="$inner"
         fi
    +
    +    if grep '^ [M|D]' <<< "$DIFF_LINES" > /dev/null; then
    +      HAS_DIFF=1
    +    fi
    +
    +    if grep '^[?][?]' <<< "$DIFF_LINES" > /dev/null; then
    +      HAS_UNTRACKED=1
    +    fi
    +
    +    if [[ -n "$HAS_DIFF" ]]; then
    +      COLOR_FN=redb
    +      LINE="{$BRANCH_MARKER}"
    +    elif [[ -n "$IS_AHEAD" ]] || [[ -n "$IS_BEHIND" ]]; then
    +      COLOR_FN=bluei
    +      LINE="[$BRANCH_MARKER]"
    +    elif [[ -n "$HAS_UNTRACKED" ]]; then
    +      COLOR_FN=lightblue
    +      LINE="($BRANCH_MARKER)"
    +    else
    +      COLOR_FN=green
    +      LINE="($BRANCH_MARKER)"
    +    fi
    +
    +    "$COLOR_FN" "$LINE" | tr -d '\n'
    +
         printf ' - '
    -    blacki "$(git rev-parse HEAD | head -c 7)" | tr -d '\n'
    +    blacki "$(git rev-parse HEAD)" | tr -d '\n'
       fi
     }
     
    -- 
    cgit v1.2.3
    
    
    From 86b4e435101b90bbc849d46ca4d84bd8a0f92661 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 12 Dec 2020 16:30:04 -0300
    Subject: spacemacs.el: Move playlist.txt to ~/Sync
    
    ---
     spacemacs.el | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index ef99f13..829cdb3 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -806,7 +806,7 @@ through `notmuch-message-attach-regex'."
                             "annex/bin/misc/mail/notmuch-post.sh"
                             "annex/bin/misc/mail/notmuch.el"
                             "tmp/scratch.org"
    -                        "tmp/playlist.txt"
    +                        "Sync/playlist.txt"
                             "annex/txt/Meeting Notes.org"
                             "dev/libre/others/dinheiros/money.ledger")
               :action '(("Find file" . (lambda (f)
    -- 
    cgit v1.2.3
    
    
    From 4d04bcd142fb9a12252a7252969f2e39e8e31d41 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 02:57:11 -0300
    Subject: fake-symlinks: Move guix/channels.scm -> guix/pinned-channels.scm
    
    ---
     bash/fake-symlinks.sh                    |  2 +-
     bash/templates/Makefile.am               |  2 +-
     bash/templates/guix/channels.scm         | 11 -----------
     bash/templates/guix/pinned-channels.scm  | 11 +++++++++++
     bash/templates/scripts/with-container.sh |  2 +-
     5 files changed, 14 insertions(+), 14 deletions(-)
     delete mode 100644 bash/templates/guix/channels.scm
     create mode 100644 bash/templates/guix/pinned-channels.scm
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index ce4e877..27b3d6f 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -145,7 +145,7 @@ ln-agpl() {
     
     ln-guix-container() {
       cp-all scripts/with-container.sh scripts/assert-shellcheck.sh
    -  cp-if-not guix/channels.scm guix/manifest.scm
    +  cp-if-not guix/pinned-channels.scm guix/manifest.scm
     }
     
     ln-ci() {
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index 42e7c83..ec00efb 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -6,7 +6,7 @@ TESTS =
     
     EXTRA_DIST =                \
       guix/manifest.scm         \
    -  guix/channels.scm         \
    +  guix/pinned-channels.scm  \
       scripts/with-container.sh \
       $(TESTS)
     
    diff --git a/bash/templates/guix/channels.scm b/bash/templates/guix/channels.scm
    deleted file mode 100644
    index e1645f6..0000000
    --- a/bash/templates/guix/channels.scm
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -(list
    - (channel
    -  (name 'guix)
    -  (url "https://git.savannah.gnu.org/git/guix.git")
    -  (commit
    -   "dc2de508a38d8e0a3f93e8d6ded225d3a7e32548")
    -  (introduction
    -   (make-channel-introduction
    -    "9edb3f66fd807b096b48283debdcddccfea34bad"
    -    (openpgp-fingerprint
    -     "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA")))))
    diff --git a/bash/templates/guix/pinned-channels.scm b/bash/templates/guix/pinned-channels.scm
    new file mode 100644
    index 0000000..e1645f6
    --- /dev/null
    +++ b/bash/templates/guix/pinned-channels.scm
    @@ -0,0 +1,11 @@
    +(list
    + (channel
    +  (name 'guix)
    +  (url "https://git.savannah.gnu.org/git/guix.git")
    +  (commit
    +   "dc2de508a38d8e0a3f93e8d6ded225d3a7e32548")
    +  (introduction
    +   (make-channel-introduction
    +    "9edb3f66fd807b096b48283debdcddccfea34bad"
    +    (openpgp-fingerprint
    +     "BBB0 2DDF 2CEA F6A8 0D1D  E643 A2A0 6DF2 A33A 54FA")))))
    diff --git a/bash/templates/scripts/with-container.sh b/bash/templates/scripts/with-container.sh
    index 1261022..b7ff96d 100755
    --- a/bash/templates/scripts/with-container.sh
    +++ b/bash/templates/scripts/with-container.sh
    @@ -1,3 +1,3 @@
     #!/usr/bin/env bash
     
    -guix time-machine -C guix/channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@"
    +guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@"
    -- 
    cgit v1.2.3
    
    
    From 2c4b50b895dedcbdaccbb2659ed5726ef80e99fd Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 02:57:34 -0300
    Subject: fake-symlinks: Guard check-local tests in Makefile.am for dist tests
    
    ---
     bash/templates/Makefile.am | 11 ++++++++---
     1 file changed, 8 insertions(+), 3 deletions(-)
    
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index ec00efb..8a46dc1 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -12,9 +12,14 @@ EXTRA_DIST =                \
     
     info_TEXINFOS = doc/$PROJECT.texi
     
    -check:
    -	bash scripts/assert-shellcheck.sh
    -	bash scripts/assert-todos.sh
    +check-local:
    +	if [ -f scripts/assert-shellcheck.sh ]; then \
    +    echo "Running non-dist checks";            \
    +    bash scripts/assert-shellcheck.sh;         \
    +    bash scripts/assert-todos.sh;              \
    +  else                                         \
    +    echo "Skipping non-dist checks.";          \
    +  fi
     
     clean-local:
     	rm -rf public/
    -- 
    cgit v1.2.3
    
    
    From 67b01145d4c0b9c1d0844f0e0b7a3f3061c71931 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 02:58:14 -0300
    Subject: env.sh: Add dinheiros to $PATH
    
    ---
     bash/env.sh | 2 ++
     1 file changed, 2 insertions(+)
    
    diff --git a/bash/env.sh b/bash/env.sh
    index 191184f..51e6ddc 100644
    --- a/bash/env.sh
    +++ b/bash/env.sh
    @@ -11,7 +11,9 @@ export LANGUAGE=fr_FR.UTF-8
     export NIX_BUILD_CORES=0
     
     export GUIX_PROFILE="$HOME/.guix-profile"
    +
     PATH="$PATH:$HOME/tmp/bin"
    +PATH="$PATH:$HOME/dev/libre/others/dinheiros"
     
     for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do
       PATH="$PATH:$p/ad-hoc:$p/cron"
    -- 
    cgit v1.2.3
    
    
    From 111d809d20dbbadbaa6f239e2bc30bb40aaa774a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 02:58:28 -0300
    Subject: ps1.sh: Make $HAS_DIFF more capable
    
    ---
     bash/ps1.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/ps1.sh b/bash/ps1.sh
    index dae553a..076ad63 100644
    --- a/bash/ps1.sh
    +++ b/bash/ps1.sh
    @@ -38,7 +38,7 @@ repo-status() {
           BRANCH_MARKER="$inner"
         fi
     
    -    if grep '^ [M|D]' <<< "$DIFF_LINES" > /dev/null; then
    +    if grep '^[A| ][M|D]' <<< "$DIFF_LINES" > /dev/null; then
           HAS_DIFF=1
         fi
     
    -- 
    cgit v1.2.3
    
    
    From f1d702818a5938f4afc6cbc38d07ed9855460f3f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 03:00:45 -0300
    Subject: fake-symlinks: Include call to compile-readme.sh in Makefile.am
    
    ---
     bash/templates/Makefile.am       | 1 +
     bash/templates/guix/manifest.scm | 3 ++-
     2 files changed, 3 insertions(+), 1 deletion(-)
    
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index 8a46dc1..d301c91 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -26,3 +26,4 @@ clean-local:
     
     public:
     	bash scripts/generate-tasks-and-bugs.sh
    +	bash scripts/compile-readme.sh
    diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm
    index ef1ff8b..57b557f 100644
    --- a/bash/templates/guix/manifest.scm
    +++ b/bash/templates/guix/manifest.scm
    @@ -15,4 +15,5 @@
             texinfo
             emacs
             perl
    -        shellcheck)))
    +        shellcheck
    +        pandoc)))
    -- 
    cgit v1.2.3
    
    
    From 2b036403bce091fe668716a07d081f6318f15e0b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 03:01:22 -0300
    Subject: fake-symlinks: Automate updating Guix channel after release.
    
    ---
     bash/templates/build-aux/git-notes-release.am | 13 ++++++++++---
     1 file changed, 10 insertions(+), 3 deletions(-)
    
    diff --git a/bash/templates/build-aux/git-notes-release.am b/bash/templates/build-aux/git-notes-release.am
    index 1f41001..12bdbe6 100644
    --- a/bash/templates/build-aux/git-notes-release.am
    +++ b/bash/templates/build-aux/git-notes-release.am
    @@ -1,10 +1,11 @@
     upgrade-news:
     	sed -i "s/^\* Unreleased$$/* $(VERSION) - $$(date -I)/" NEWS
     	printf '* Unreleased\n** Added\n** Changed\n** Deprecated\n** Removed\n** Fixed\n** Security\n' | cat - NEWS | sponge NEWS
    -	git diff
    +	vi NEWS
    +	git diff NEWS
     	read -p "Is the above NEWS diff acceptable? Press CTRL+c to cancel."
     	git add NEWS
    -	git commit -m 'Update NEWS.'
    +	git commit -m 'Update NEWS: release version $(VERSION).'
     
     release: upgrade-news check distcheck dist
     	gpg --sign --armor --yes $(DIST_ARCHIVES)
    @@ -14,4 +15,10 @@ release: upgrade-news check distcheck dist
     	git notes --ref=refs/notes/tarballs   add -f -C $$SHA_TAR $(VERSION);     \
     	git notes --ref=refs/notes/signatures add -f -C $$SHA_SIG $(VERSION);     \
     	git notes append -m "$$(printf "Get this release with:\n  git cat-file -p $$SHA_TAR > $(DIST_ARCHIVES)\n  git cat-file -p $$SHA_SIG > $(DIST_ARCHIVES).asc")"
    -	git push --all
    +	sed -i -e "s/(base32 \".*\")/(base32 \"$$(guix download $(DIST_ARCHIVES) | tail -n 1)\")/" guix/channel/xyz/euandreh/songbooks/channel.scm.in
    +	./configure
    +	git add guix/channel/xyz/euandreh/songbooks/channel.scm guix/channel/xyz/euandreh/songbooks/channel.scm.in
    +	git commit -m 'Update released version $(VERSION) in channel.scm.in file.'
    +	echo git push --all
    +	echo git push origin refs/notes/tarballs
    +	echo git push origin refs/notes/signatures
    -- 
    cgit v1.2.3
    
    
    From 202665f924744edf6c403e41e898be894e65f296 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 03:01:52 -0300
    Subject: configuration.nix: Add gnuplot package
    
    ---
     nixos/configuration.nix | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 942b46a..34ad31d 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -185,6 +185,7 @@ in {
         help2man
         ripgrep-all
         zathura
    +    gnuplot
     
         gnome3.libgnome-keyring
         gnome3.gnome-keyring
    -- 
    cgit v1.2.3
    
    
    From 5f575e8231e0b844d66c94f5c286002ffd9cf9cf Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 19:21:41 -0300
    Subject: fake-symlinks: Run 'make distcheck' in ci-build.sh
    
    ---
     bash/templates/guix/manifest.scm   | 3 +++
     bash/templates/scripts/ci-build.sh | 2 +-
     scripts/ci-build.sh                | 2 +-
     3 files changed, 5 insertions(+), 2 deletions(-)
    
    diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm
    index 57b557f..62424f3 100644
    --- a/bash/templates/guix/manifest.scm
    +++ b/bash/templates/guix/manifest.scm
    @@ -7,6 +7,9 @@
             grep
             sed
             git
    +        tar
    +        gzip
    +        texlive-bin
             autoconf
             automake
             pkg-config
    diff --git a/bash/templates/scripts/ci-build.sh b/bash/templates/scripts/ci-build.sh
    index 3d934f3..c966319 100755
    --- a/bash/templates/scripts/ci-build.sh
    +++ b/bash/templates/scripts/ci-build.sh
    @@ -36,5 +36,5 @@ pushd "${DOLLAR}CLONE"
     git config --global user.email git@euandre.org
     git config --global user.name 'EuAndreh CI'
     
    -./scripts/with-container.sh '${AUTOTOOLS_SETUP}make clean check public'
    +./scripts/with-container.sh '${AUTOTOOLS_SETUP}make clean check distcheck public'
     rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/
    diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh
    index 9c931e1..8b900d5 100755
    --- a/scripts/ci-build.sh
    +++ b/scripts/ci-build.sh
    @@ -36,5 +36,5 @@ pushd "$CLONE"
     git config --global user.email git@euandre.org
     git config --global user.name 'EuAndreh CI'
     
    -./scripts/with-container.sh 'make clean check public'
    +./scripts/with-container.sh 'make clean check distcheck public'
     rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/
    -- 
    cgit v1.2.3
    
    
    From 3c8c745725a5c41bf35594c8cf3178477e959707 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 19:22:25 -0300
    Subject: configuration.nix: Add vagrant package
    
    ---
     nixos/configuration.nix | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 34ad31d..dd43090 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -186,6 +186,7 @@ in {
         ripgrep-all
         zathura
         gnuplot
    +    vagrant
     
         gnome3.libgnome-keyring
         gnome3.gnome-keyring
    -- 
    cgit v1.2.3
    
    
    From 871869ec709c0250d059ebe09ea2e40ebc394cfd Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 19:23:18 -0300
    Subject: fake-symlinks: Use single quotes in Makefile.am
    
    ---
     bash/templates/Makefile.am | 4 ++--
     1 file changed, 2 insertions(+), 2 deletions(-)
    
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index d301c91..f592a39 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -14,11 +14,11 @@ info_TEXINFOS = doc/$PROJECT.texi
     
     check-local:
     	if [ -f scripts/assert-shellcheck.sh ]; then \
    -    echo "Running non-dist checks";            \
    +    echo 'Running non-dist checks';            \
         bash scripts/assert-shellcheck.sh;         \
         bash scripts/assert-todos.sh;              \
       else                                         \
    -    echo "Skipping non-dist checks.";          \
    +    echo 'Skipping non-dist checks.';          \
       fi
     
     clean-local:
    -- 
    cgit v1.2.3
    
    
    From 534f67dff32bca93c8d32c6da25fe95861a263bd Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 19:23:43 -0300
    Subject: aliases.sh: Add guile and guix rlwrap aliases
    
    ---
     bash/aliases.sh | 7 +++++--
     1 file changed, 5 insertions(+), 2 deletions(-)
    
    diff --git a/bash/aliases.sh b/bash/aliases.sh
    index 9f7061e..2b62dda 100644
    --- a/bash/aliases.sh
    +++ b/bash/aliases.sh
    @@ -3,17 +3,20 @@
     
     unalias -a
     
    +alias sbcl='rlwrap sbcl'
    +alias sqlite='rlwrap sqlite3'
    +alias guile='rlwrap guile'
    +alias guix='rlwrap guix'
    +
     alias l="ls -lahp --color"
     alias copy="tr -d '\\n' | xclip -sel clip"
     alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn"
     # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329
     alias watch="watch --color "
     alias mr="mr -s"
    -alias sbcl="rlwrap sbcl"
     alias ncdu="ncdu --color dark"
     alias mm="sync-mail.sh"
     alias m="sync-mail.sh --fast"
    -alias sqlite="rlwrap sqlite3"
     alias p='ping euandre.org -c 3'
     alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\""
     alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null"
    -- 
    cgit v1.2.3
    
    
    From 5cb0283cb6776f8c4a38656e76756f72af8f142f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 13 Dec 2020 19:25:55 -0300
    Subject: fake-symlinks: Sed Guix channel file in git-notes-release.am
    
    ---
     bash/fake-symlinks.sh                         |  4 ++--
     bash/templates/build-aux/git-notes-release.am | 12 +++++++-----
     2 files changed, 9 insertions(+), 7 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 27b3d6f..97d8752 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -74,7 +74,7 @@ envsubst-if-not() {
     sed-all() {
       for f in "$@"; do
         mkdir -p "$(dirname "$PREFIX/$f")"
    -    sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$(normalize-name "$f")"
    +    sed "s/__PROJECT_UC__/$PROJECT_UC/g" "$f" | sed "s/__PROJECT__/$PROJECT/g" > "$PREFIX/$(normalize-name "$f")"
       done
     }
     
    @@ -161,7 +161,7 @@ ln-ci() {
     }
     
     ln-git-notes-release() {
    -  cp-all build-aux/git-notes-release.am
    +  sed-all build-aux/git-notes-release.am
       cp-if-not NEWS
     }
     
    diff --git a/bash/templates/build-aux/git-notes-release.am b/bash/templates/build-aux/git-notes-release.am
    index 12bdbe6..67a4de5 100644
    --- a/bash/templates/build-aux/git-notes-release.am
    +++ b/bash/templates/build-aux/git-notes-release.am
    @@ -15,10 +15,12 @@ release: upgrade-news check distcheck dist
     	git notes --ref=refs/notes/tarballs   add -f -C $$SHA_TAR $(VERSION);     \
     	git notes --ref=refs/notes/signatures add -f -C $$SHA_SIG $(VERSION);     \
     	git notes append -m "$$(printf "Get this release with:\n  git cat-file -p $$SHA_TAR > $(DIST_ARCHIVES)\n  git cat-file -p $$SHA_SIG > $(DIST_ARCHIVES).asc")"
    -	sed -i -e "s/(base32 \".*\")/(base32 \"$$(guix download $(DIST_ARCHIVES) | tail -n 1)\")/" guix/channel/xyz/euandreh/songbooks/channel.scm.in
    +	sed -i -e "s/blob?id=.*\"/blob?id=$$(git notes --ref=refs/notes/tarballs list $(VERSION))\"/" guix/channel/xyz/euandreh/__PROJECT__/channel.scm.in
    +	sed -i -e "s/(base32 \".*\")/(base32 \"$$(guix download $(DIST_ARCHIVES) | tail -n 1)\")/"   guix/channel/xyz/euandreh/__PROJECT__/channel.scm.in
     	./configure
    -	git add guix/channel/xyz/euandreh/songbooks/channel.scm guix/channel/xyz/euandreh/songbooks/channel.scm.in
    +	git add guix/channel/xyz/euandreh/__PROJECT__/channel.scm guix/channel/xyz/euandreh/__PROJECT__/channel.scm.in
     	git commit -m 'Update released version $(VERSION) in channel.scm.in file.'
    -	echo git push --all
    -	echo git push origin refs/notes/tarballs
    -	echo git push origin refs/notes/signatures
    +	git push --tags
    +	git push origin refs/notes/tarballs
    +	git push origin refs/notes/signatures
    +	git push
    -- 
    cgit v1.2.3
    
    
    From cfa2dc6fbe4edf4169e9e179912cb9e22d89e9e6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:27:57 -0300
    Subject: configuration.nix: Add mrsh package and mark qutebrowser as broken
    
    ---
     nixos/configuration.nix | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index dd43090..d0f01aa 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -187,12 +187,13 @@ in {
         zathura
         gnuplot
         vagrant
    +    mrsh
     
         gnome3.libgnome-keyring
         gnome3.gnome-keyring
         st
         pavucontrol
    -    qutebrowser
    +    # qutebrowser broken
         weechat
         aerc
         newsboat
    -- 
    cgit v1.2.3
    
    
    From e01a8cf7f882150d4f6d7435b48abe421dc6ec26 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:29:47 -0300
    Subject: spacemacs.el: Add rules for Scheme code indentation
    
    ---
     spacemacs.el | 4 ++++
     1 file changed, 4 insertions(+)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index 829cdb3..e6bdae5 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -1026,6 +1026,10 @@ This is the place where most of your configurations should be done. Unless it is
       (put 't:test-assert 'scheme-indent-function 1)
       (put 'srfi-9:define-record-type 'scheme-indent-function 1)
       (put 'srfi-9-gnu:set-record-type-printer! 'scheme-indent-function 1)
    +  (put 'with-claps 'scheme-indent-function 2)
    +  (put 'when-let 'scheme-indent-function 1)
    +  (put 'if-let 'scheme-indent-function 1)
    +  (put 'if 'scheme-indent-function 1)
     
       (with-eval-after-load 'info-lookup-mode
         (turn-off-evil-mode))
    -- 
    cgit v1.2.3
    
    
    From 9d93fb612e813c54cf62a4a902971ddae830fbca Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:37:04 -0300
    Subject: spacemacs.el: Add C-M-y global keybinding to #'helm-show-kill-ring
    
    ---
     spacemacs.el | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/spacemacs.el b/spacemacs.el
    index e6bdae5..aa0b647 100644
    --- a/spacemacs.el
    +++ b/spacemacs.el
    @@ -612,6 +612,7 @@ dump."
                             scheme-mode))
     
     (setq custom-keybindings '(("M-ç"   . euandreh/find-bookmarked-files)
    +                           ("C-M-y" . helm-show-kill-ring)
                                ("M-´"   . (lambda () (interactive) (find-file "~/annex/txt/Dump.org")))
                                ("M-SPC" . (lambda () (interactive) (just-one-space -1)))))
     
    -- 
    cgit v1.2.3
    
    
    From f0f1701afd490f63b3b14d5178c4fb893a00980e Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:38:23 -0300
    Subject: Add post.sh akin to pastebin.sh
    
    ---
     scripts/ad-hoc/pastebin.sh |   6 +++
     scripts/ad-hoc/post.sh     | 118 +++++++++++++++++++++++++++++++++++++++++++++
     2 files changed, 124 insertions(+)
     create mode 100755 scripts/ad-hoc/post.sh
    
    diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh
    index 2d09dd8..00de6fd 100755
    --- a/scripts/ad-hoc/pastebin.sh
    +++ b/scripts/ad-hoc/pastebin.sh
    @@ -57,10 +57,15 @@ pushd ~/dev/libre/website > /dev/null
     
     cat < "$OUT"
     ---
    +
     title: ${FULL_TITLE}
    +
     date: ${PASTE_DATE}
    +
     layout: pastebin
    +
     lang: en
    +
     ---
     
     \`\`\`FIXME
    @@ -74,4 +79,5 @@ git commit -m "$0: Auto-add $OUT"
     "$(nix-build -A remotePublishScript)/bin/publish.sh"
     open "https://euandre.org/pastebin/$(tr '-' '/' <<< "$PASTE_DATE")/$SLUG_TITLE.html"
     git push
    +git push srht
     popd > /dev/null
    diff --git a/scripts/ad-hoc/post.sh b/scripts/ad-hoc/post.sh
    new file mode 100755
    index 0000000..a4ed75e
    --- /dev/null
    +++ b/scripts/ad-hoc/post.sh
    @@ -0,0 +1,118 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +
    +missing() {
    +  red "Missing argument <${1}>.\n"
    +}
    +
    +usage() {
    +  cat < 
    +
    +    Arguments:
    +      FULL_TITLE       Full title of the pastebin
    +      TYPE             The type of the article: article, til, slides
    +
    +Examples:
    +    $0 til 'I just learned this'
    +    $0 article 'My example article title'
    +EOF
    +}
    +
    +TYPE="${1:-}"
    +[[ -z "$TYPE" ]] && {
    +  missing 'TYPE'
    +  usage
    +  exit 2
    +}
    +
    +case "$TYPE" in
    +  article | til)
    +    LAYOUT=post
    +    DIR="_${TYPE}s"
    +    ;;
    +  slides)
    +    LAYOUT=slides
    +    DIR=_slides
    +    ;;
    +  *)
    +    red "Invalid type '$TYPE'"
    +    usage
    +    exit 2
    +    ;;
    +esac
    +
    +FULL_TITLE="${2:-}"
    +[[ -z "$FULL_TITLE" ]] && {
    +  missing 'FULL_TITLE'
    +  usage
    +  exit 2
    +}
    +
    +# Derived from:
    +# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519
    +slugify() {
    +  echo "$1"                     | \
    +    tr '[:upper:]' '[:lower:]'  | \
    +    perl -ne 'tr/\000-\177//cd;
    +              s/[^\w\s-]//g;
    +              s/^\s+|\s+$//g;
    +              s/[-\s]+/-/g;
    +              print;'
    +}
    +
    +SLUG_TITLE="$(slugify "$FULL_TITLE")"
    +PASTE_DATE="$(date -I)"
    +OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md"
    +
    +pushd ~/dev/libre/website > /dev/null
    +
    +[[ -f "$OUT" ]] && {
    +  red "Pastebin named $OUT already exists."
    +  exit 1
    +}
    +
    +if [[ "$LAYOUT" == 'slides' ]]; then
    +  cat< "$OUT"
    +---
    +
    +title: $FULL_TITLE
    +
    +date: $PASTE_DATE
    +
    +layout: $LAYOUT
    +
    +lang: en
    +
    +ref: $SLUG_TITLE
    +
    +---
    +
    +---
    +
    +## Thank you!
    +
    +References:
    +
    +1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %})
    +2. [prose version of this presentation]({% link _articles/$PASTE_DATE-$SLUG_TITLE.md %})
    +EOF
    +  "$0" article "$FULL_TITLE"
    +  else
    +  cat < "$OUT"
    +---
    +
    +title: $FULL_TITLE
    +
    +date: $PASTE_DATE
    +
    +layout: $LAYOUT
    +
    +lang: en
    +
    +ref: $SLUG_TITLE
    +
    +---
    +EOF
    +fi
    -- 
    cgit v1.2.3
    
    
    From 80ade3f63ea7d5713ff4c1350a5e2812ae0791e1 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:39:09 -0300
    Subject: fake-symlinks: Make scripts rely on POSIX sh instead of Bash
    
    ---
     bash/templates/scripts/assert-shellcheck.sh       |  9 ++--
     bash/templates/scripts/assert-todos.sh            | 27 ++++--------
     bash/templates/scripts/ci-build.sh                | 53 ++++++++++++-----------
     bash/templates/scripts/compile-readme.sh          |  5 +--
     bash/templates/scripts/generate-tasks-and-bugs.sh |  5 +--
     bash/templates/scripts/with-container.sh          |  2 +-
     scripts/ci-build.sh                               | 53 ++++++++++++-----------
     7 files changed, 70 insertions(+), 84 deletions(-)
    
    diff --git a/bash/templates/scripts/assert-shellcheck.sh b/bash/templates/scripts/assert-shellcheck.sh
    index e24c29c..d07815b 100755
    --- a/bash/templates/scripts/assert-shellcheck.sh
    +++ b/bash/templates/scripts/assert-shellcheck.sh
    @@ -1,6 +1,5 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    +#!/bin/sh -eux
     
    -git ls-files | grep '\.sh$' | xargs shellcheck
    +git ls-files -z | \
    +  xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \
    +  xargs shellcheck
    diff --git a/bash/templates/scripts/assert-todos.sh b/bash/templates/scripts/assert-todos.sh
    index a9c5ef9..99e6f00 100755
    --- a/bash/templates/scripts/assert-todos.sh
    +++ b/bash/templates/scripts/assert-todos.sh
    @@ -1,7 +1,4 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    +#!/bin/sh -eux
     
     if git grep FIXME | grep -v '^TODOs.org' | grep -v '^scripts/assert-todos.sh'; then
       echo "Found dangling FIXME markers on the project."
    @@ -9,32 +6,26 @@ if git grep FIXME | grep -v '^TODOs.org' | grep -v '^scripts/assert-todos.sh'; t
       exit 1
     fi
     
    -contains-element() {
    -  local e match="$1"
    -  shift
    -  for e; do [[ "$e" == "$match" ]] && return 0; done
    -  return 1
    -}
    -
    -KNOWN_IDS=()
    +KNOWN_IDS=''
     has_error=0
     # shellcheck disable=2013
     for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do
    -  if grep -E '^\*\* (CANCELLED|DONE)' <(sed "${todo}q;d" TODOs.org) > /dev/null; then
    +  if sed "${todo}q;d" TODOs.org | grep -E '^\*\* (CANCELLED|DONE)' > /dev/null; then
         ID_OFFSET=3
       else
         ID_OFFSET=2
       fi
    -  ID="$(sed "$((todo+ID_OFFSET))q;d" TODOs.org)"
    -  if grep '^:CUSTOM_ID: .*$' <(echo "$ID") > /dev/null; then
    -    if contains-element "$ID" "${KNOWN_IDS[@]}"; then
    +  line_n="$((todo+ID_OFFSET))"
    +  ID="$(sed "${line_n}q;d" TODOs.org)"
    +  if echo "$ID" | grep '^:CUSTOM_ID: .*$' > /dev/null; then
    +    if echo "$KNOWN_IDS" | grep "$ID" > /dev/null; then
           echo "Duplicated ID: $ID"
           has_error=1
         else
    -      KNOWN_IDS+=("$ID")
    +      KNOWN_IDS="$KNOWN_IDS $(echo "$ID" | awk '{print $2}')"
         fi
       else
    -    echo "Missing ID for TODO in line $todo"
    +    echo "Missing ID for TODO in line $line_n"
         has_error=1
       fi
     done
    diff --git a/bash/templates/scripts/ci-build.sh b/bash/templates/scripts/ci-build.sh
    index c966319..8509c59 100755
    --- a/bash/templates/scripts/ci-build.sh
    +++ b/bash/templates/scripts/ci-build.sh
    @@ -1,40 +1,41 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -set -x
    +#!/bin/sh -eux
     
     PREFIX="${DOLLAR}LOGS_PREFIX/$PROJECT"
     mkdir -p "${DOLLAR}PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log"
     LOGFILE="${DOLLAR}PREFIX/${DOLLAR}FILENAME"
    -exec &> >(tee -a "${DOLLAR}LOGFILE")
    +{
     
    -echo "Starting CI job at: ${DOLLAR}(date -Is)"
    +  # exec 2>&1 >(tee -a "${DOLLAR}LOGFILE")
     
    -finish() {
    -  STATUS="${DOLLAR}?"
    -  printf "\n\n>>> exit status was %s\n" "${DOLLAR}STATUS"
    -  echo "Finishing CI job at: ${DOLLAR}(date -Is)"
    -  popd
    -  NOTE=$(cat <>> exit status was %s\n" "${DOLLAR}STATUS"
    +    echo "Finishing CI job at: ${DOLLAR}(date -Is)"
    +    cd -
    +    NOTE=$(cat <>> CI logs added as Git note."
    -}
    -trap finish EXIT
    +        )
    +    git notes --ref=refs/notes/ci-data add -f -m "${DOLLAR}STATUS ${DOLLAR}FILENAME"
    +    git notes --ref=refs/notes/ci-logs add -f -F "${DOLLAR}LOGFILE"
    +    git notes append -m "${DOLLAR}NOTE"
    +    printf "\n\n>>> CI logs added as Git note."
    +  }
    +  trap finish EXIT
     
    -unset GIT_DIR
    -CLONE="${DOLLAR}(mktemp -d)"
    -git clone . "${DOLLAR}CLONE"
    -pushd "${DOLLAR}CLONE"
    -git config --global user.email git@euandre.org
    -git config --global user.name 'EuAndreh CI'
    +  unset GIT_DIR
    +  CLONE="${DOLLAR}(mktemp -d)"
    +  git clone . "${DOLLAR}CLONE"
    +  cd "${DOLLAR}CLONE"
    +  git config --global user.email git@euandre.org
    +  git config --global user.name 'EuAndreh CI'
     
    -./scripts/with-container.sh '${AUTOTOOLS_SETUP}make clean check distcheck public'
    -rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/
    +  ./scripts/with-container.sh '${AUTOTOOLS_SETUP}make clean check distcheck public'
    +  rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/
    +} | tee "${DOLLAR}LOGFILE" 2>&1
    diff --git a/bash/templates/scripts/compile-readme.sh b/bash/templates/scripts/compile-readme.sh
    index 0c1d4b4..0a53b49 100755
    --- a/bash/templates/scripts/compile-readme.sh
    +++ b/bash/templates/scripts/compile-readme.sh
    @@ -1,7 +1,4 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    +#!/bin/sh -eux
     
     pandoc -s \
            --metadata title='$PROJECT_UC - EuAndreh' \
    diff --git a/bash/templates/scripts/generate-tasks-and-bugs.sh b/bash/templates/scripts/generate-tasks-and-bugs.sh
    index cbbce29..0596190 100755
    --- a/bash/templates/scripts/generate-tasks-and-bugs.sh
    +++ b/bash/templates/scripts/generate-tasks-and-bugs.sh
    @@ -1,7 +1,4 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    +#!/bin/sh -eux
     
     mkdir -p public
     
    diff --git a/bash/templates/scripts/with-container.sh b/bash/templates/scripts/with-container.sh
    index b7ff96d..cff282f 100755
    --- a/bash/templates/scripts/with-container.sh
    +++ b/bash/templates/scripts/with-container.sh
    @@ -1,3 +1,3 @@
    -#!/usr/bin/env bash
    +#!/bin/sh -eux
     
     guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@"
    diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh
    index 8b900d5..1ab3869 100755
    --- a/scripts/ci-build.sh
    +++ b/scripts/ci-build.sh
    @@ -1,40 +1,41 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -set -x
    +#!/bin/sh -eux
     
     PREFIX="$LOGS_PREFIX/dotfiles"
     mkdir -p "$PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="$(date -Is)-$SHA.log"
     LOGFILE="$PREFIX/$FILENAME"
    -exec &> >(tee -a "$LOGFILE")
    +{
     
    -echo "Starting CI job at: $(date -Is)"
    +  # exec 2>&1 >(tee -a "$LOGFILE")
     
    -finish() {
    -  STATUS="$?"
    -  printf "\n\n>>> exit status was %s\n" "$STATUS"
    -  echo "Finishing CI job at: $(date -Is)"
    -  popd
    -  NOTE=$(cat <>> exit status was %s\n" "$STATUS"
    +    echo "Finishing CI job at: $(date -Is)"
    +    cd -
    +    NOTE=$(cat <>> CI logs added as Git note."
    -}
    -trap finish EXIT
    +        )
    +    git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME"
    +    git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE"
    +    git notes append -m "$NOTE"
    +    printf "\n\n>>> CI logs added as Git note."
    +  }
    +  trap finish EXIT
     
    -unset GIT_DIR
    -CLONE="$(mktemp -d)"
    -git clone . "$CLONE"
    -pushd "$CLONE"
    -git config --global user.email git@euandre.org
    -git config --global user.name 'EuAndreh CI'
    +  unset GIT_DIR
    +  CLONE="$(mktemp -d)"
    +  git clone . "$CLONE"
    +  cd "$CLONE"
    +  git config --global user.email git@euandre.org
    +  git config --global user.name 'EuAndreh CI'
     
    -./scripts/with-container.sh 'make clean check distcheck public'
    -rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/
    +  ./scripts/with-container.sh 'make clean check distcheck public'
    +  rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/
    +} | tee "$LOGFILE" 2>&1
    -- 
    cgit v1.2.3
    
    
    From 0b72c02bb9ea6f521f6b6b3909691e3790c2555b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:40:33 -0300
    Subject: fake-symlinks: pre-inst-env -> with-guile-env
    
    ---
     bash/templates/..gitignore                 |  2 +-
     bash/templates/build-aux/guile.am          |  4 ++--
     bash/templates/build-aux/pre-inst-env.in   | 10 ----------
     bash/templates/build-aux/with-guile-env.in | 10 ++++++++++
     4 files changed, 13 insertions(+), 13 deletions(-)
     delete mode 100644 bash/templates/build-aux/pre-inst-env.in
     create mode 100644 bash/templates/build-aux/with-guile-env.in
    
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    index 4abd77d..b9a342f 100644
    --- a/bash/templates/..gitignore
    +++ b/bash/templates/..gitignore
    @@ -1,6 +1,6 @@
     # GNU Autotools
     /Makefile.in
    -/pre-inst-env
    +/with-guile-env
     
     autom4te.cache
     /autoscan.log
    diff --git a/bash/templates/build-aux/guile.am b/bash/templates/build-aux/guile.am
    index c5cfcf6..bd31ade 100644
    --- a/bash/templates/build-aux/guile.am
    +++ b/bash/templates/build-aux/guile.am
    @@ -18,8 +18,8 @@ CLEANFILES = $(GOBJECTS) $(TESTS:tests/%.scm=%.log)
     GUILE_WARNING = -Wunbound-variable -Warity-mismatch -Wformat
     SUFFIXES = .scm .go
     .scm.go:
    -	$(AM_V_GEN)$(top_builddir)/pre-inst-env $(GUILD) compile $(GUILE_WARNING) -o "$@" "$<"
    +	$(AM_V_GEN)$(top_builddir)/with-guile-env $(GUILD) compile $(GUILE_WARNING) -o "$@" "$<"
     
     TEST_EXTENSIONS = .scm
     AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)/src"
    -SCM_LOG_COMPILER = $(top_builddir)/pre-inst-env $(GUILE)
    +SCM_LOG_COMPILER = $(top_builddir)/with-guile-env $(GUILE)
    diff --git a/bash/templates/build-aux/pre-inst-env.in b/bash/templates/build-aux/pre-inst-env.in
    deleted file mode 100644
    index 4cc7b96..0000000
    --- a/bash/templates/build-aux/pre-inst-env.in
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -#!/bin/sh
    -
    -abs_top_srcdir="`cd "@abs_top_srcdir@/src" > /dev/null; pwd`"
    -abs_top_builddir="`cd "@abs_top_builddir@/src" > /dev/null; pwd`"
    -
    -GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
    -GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
    -export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH
    -
    -exec "$@"
    diff --git a/bash/templates/build-aux/with-guile-env.in b/bash/templates/build-aux/with-guile-env.in
    new file mode 100644
    index 0000000..9dcdebb
    --- /dev/null
    +++ b/bash/templates/build-aux/with-guile-env.in
    @@ -0,0 +1,10 @@
    +#!/bin/sh
    +
    +abs_top_srcdir="$(cd "@abs_top_srcdir@/src" > /dev/null || exit; pwd)"
    +abs_top_builddir="$(cd "@abs_top_builddir@/src" > /dev/null || exit; pwd)"
    +
    +GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH"
    +GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH"
    +export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH
    +
    +exec "$@"
    -- 
    cgit v1.2.3
    
    
    From 68ec2ab66e147d7af60e2356334cf6c8a33e277f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:41:06 -0300
    Subject: fake-symlinks: Remove bash from manifest.scm
    
    ---
     bash/templates/guix/manifest.scm | 3 +--
     1 file changed, 1 insertion(+), 2 deletions(-)
    
    diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm
    index 62424f3..030a498 100644
    --- a/bash/templates/guix/manifest.scm
    +++ b/bash/templates/guix/manifest.scm
    @@ -1,7 +1,6 @@
     (specifications->manifest
      (map symbol->string
    -      '(bash
    -        coreutils
    +      '(coreutils
             findutils
             diffutils
             grep
    -- 
    cgit v1.2.3
    
    
    From 4f93b200d5c918a772486e780d4c395b68f05fcc Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:42:49 -0300
    Subject: fake-symlinks: Remove build-aux/texinfo.tex
    
    ---
     bash/fake-symlinks.sh                |     2 -
     bash/templates/..gitignore           |     1 +
     bash/templates/build-aux/texinfo.tex | 11614 ---------------------------------
     3 files changed, 1 insertion(+), 11616 deletions(-)
     delete mode 100644 bash/templates/build-aux/texinfo.tex
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 97d8752..6b3b88f 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -177,8 +177,6 @@ ln-pandoc-index() {
     ln-texinfo() {
       envsubst-all HACKING
       RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    -  chmod +w "$PREFIX/build-aux/texinfo.tex" 2> /dev/null ||:
    -  cp-all build-aux/texinfo.tex
       ln-dicts
     }
     
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    index b9a342f..89e1a5d 100644
    --- a/bash/templates/..gitignore
    +++ b/bash/templates/..gitignore
    @@ -32,6 +32,7 @@ autom4te.cache
     /build-aux/install-sh~
     /build-aux/missing
     /build-aux/test-driver
    +/build-aux/texinfo.tex
     
     /$PROJECT-*.tar.gz
     /$PROJECT-*.tar.gz.asc
    diff --git a/bash/templates/build-aux/texinfo.tex b/bash/templates/build-aux/texinfo.tex
    deleted file mode 100644
    index deca599..0000000
    --- a/bash/templates/build-aux/texinfo.tex
    +++ /dev/null
    @@ -1,11614 +0,0 @@
    -% texinfo.tex -- TeX macros to handle Texinfo files.
    -%
    -% Load plain if necessary, i.e., if running under initex.
    -\expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi
    -%
    -\def\texinfoversion{2020-02-11.09}
    -%
    -% Copyright 1985, 1986, 1988, 1990-2019 Free Software Foundation, Inc.
    -%
    -% This texinfo.tex file is free software: you can redistribute it and/or
    -% modify it under the terms of the GNU General Public License as
    -% published by the Free Software Foundation, either version 3 of the
    -% License, or (at your option) any later version.
    -%
    -% This texinfo.tex file is distributed in the hope that it will be
    -% useful, but WITHOUT ANY WARRANTY; without even the implied warranty
    -% of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
    -% General Public License for more details.
    -%
    -% You should have received a copy of the GNU General Public License
    -% along with this program.  If not, see .
    -%
    -% As a special exception, when this file is read by TeX when processing
    -% a Texinfo source document, you may use the result without
    -% restriction. This Exception is an additional permission under section 7
    -% of the GNU General Public License, version 3 ("GPLv3").
    -%
    -% Please try the latest version of texinfo.tex before submitting bug
    -% reports; you can get the latest version from:
    -%   https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or
    -%   https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or
    -%   https://www.gnu.org/software/texinfo/ (the Texinfo home page)
    -% The texinfo.tex in any given distribution could well be out
    -% of date, so if that's what you're using, please check.
    -%
    -% Send bug reports to bug-texinfo@gnu.org.  Please include including a
    -% complete document in each bug report with which we can reproduce the
    -% problem.  Patches are, of course, greatly appreciated.
    -%
    -% To process a Texinfo manual with TeX, it's most reliable to use the
    -% texi2dvi shell script that comes with the distribution.  For a simple
    -% manual foo.texi, however, you can get away with this:
    -%   tex foo.texi
    -%   texindex foo.??
    -%   tex foo.texi
    -%   tex foo.texi
    -%   dvips foo.dvi -o  # or whatever; this makes foo.ps.
    -% The extra TeX runs get the cross-reference information correct.
    -% Sometimes one run after texindex suffices, and sometimes you need more
    -% than two; texi2dvi does it as many times as necessary.
    -%
    -% It is possible to adapt texinfo.tex for other languages, to some
    -% extent.  You can get the existing language-specific files from the
    -% full Texinfo distribution.
    -%
    -% The GNU Texinfo home page is https://www.gnu.org/software/texinfo.
    -
    -
    -\message{Loading texinfo [version \texinfoversion]:}
    -
    -% If in a .fmt file, print the version number
    -% and turn on active characters that we couldn't do earlier because
    -% they might have appeared in the input file name.
    -\everyjob{\message{[Texinfo version \texinfoversion]}%
    -  \catcode`+=\active \catcode`\_=\active}
    -
    -% LaTeX's \typeout.  This ensures that the messages it is used for
    -% are identical in format to the corresponding ones from latex/pdflatex.
    -\def\typeout{\immediate\write17}%
    -
    -\chardef\other=12
    -
    -% We never want plain's \outer definition of \+ in Texinfo.
    -% For @tex, we can use \tabalign.
    -\let\+ = \relax
    -
    -% Save some plain tex macros whose names we will redefine.
    -\let\ptexb=\b
    -\let\ptexbullet=\bullet
    -\let\ptexc=\c
    -\let\ptexcomma=\,
    -\let\ptexdot=\.
    -\let\ptexdots=\dots
    -\let\ptexend=\end
    -\let\ptexequiv=\equiv
    -\let\ptexexclam=\!
    -\let\ptexfootnote=\footnote
    -\let\ptexgtr=>
    -\let\ptexhat=^
    -\let\ptexi=\i
    -\let\ptexindent=\indent
    -\let\ptexinsert=\insert
    -\let\ptexlbrace=\{
    -\let\ptexless=<
    -\let\ptexnewwrite\newwrite
    -\let\ptexnoindent=\noindent
    -\let\ptexplus=+
    -\let\ptexraggedright=\raggedright
    -\let\ptexrbrace=\}
    -\let\ptexslash=\/
    -\let\ptexsp=\sp
    -\let\ptexstar=\*
    -\let\ptexsup=\sup
    -\let\ptext=\t
    -\let\ptextop=\top
    -{\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode
    -
    -% If this character appears in an error message or help string, it
    -% starts a new line in the output.
    -\newlinechar = `^^J
    -
    -% Use TeX 3.0's \inputlineno to get the line number, for better error
    -% messages, but if we're using an old version of TeX, don't do anything.
    -%
    -\ifx\inputlineno\thisisundefined
    -  \let\linenumber = \empty % Pre-3.0.
    -\else
    -  \def\linenumber{l.\the\inputlineno:\space}
    -\fi
    -
    -% Set up fixed words for English if not already set.
    -\ifx\putwordAppendix\undefined  \gdef\putwordAppendix{Appendix}\fi
    -\ifx\putwordChapter\undefined   \gdef\putwordChapter{Chapter}\fi
    -\ifx\putworderror\undefined     \gdef\putworderror{error}\fi
    -\ifx\putwordfile\undefined      \gdef\putwordfile{file}\fi
    -\ifx\putwordin\undefined        \gdef\putwordin{in}\fi
    -\ifx\putwordIndexIsEmpty\undefined       \gdef\putwordIndexIsEmpty{(Index is empty)}\fi
    -\ifx\putwordIndexNonexistent\undefined   \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi
    -\ifx\putwordInfo\undefined      \gdef\putwordInfo{Info}\fi
    -\ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi
    -\ifx\putwordMethodon\undefined  \gdef\putwordMethodon{Method on}\fi
    -\ifx\putwordNoTitle\undefined   \gdef\putwordNoTitle{No Title}\fi
    -\ifx\putwordof\undefined        \gdef\putwordof{of}\fi
    -\ifx\putwordon\undefined        \gdef\putwordon{on}\fi
    -\ifx\putwordpage\undefined      \gdef\putwordpage{page}\fi
    -\ifx\putwordsection\undefined   \gdef\putwordsection{section}\fi
    -\ifx\putwordSection\undefined   \gdef\putwordSection{Section}\fi
    -\ifx\putwordsee\undefined       \gdef\putwordsee{see}\fi
    -\ifx\putwordSee\undefined       \gdef\putwordSee{See}\fi
    -\ifx\putwordShortTOC\undefined  \gdef\putwordShortTOC{Short Contents}\fi
    -\ifx\putwordTOC\undefined       \gdef\putwordTOC{Table of Contents}\fi
    -%
    -\ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi
    -\ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi
    -\ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi
    -\ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi
    -\ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi
    -\ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi
    -\ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi
    -\ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi
    -\ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi
    -\ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi
    -\ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi
    -\ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi
    -%
    -\ifx\putwordDefmac\undefined    \gdef\putwordDefmac{Macro}\fi
    -\ifx\putwordDefspec\undefined   \gdef\putwordDefspec{Special Form}\fi
    -\ifx\putwordDefvar\undefined    \gdef\putwordDefvar{Variable}\fi
    -\ifx\putwordDefopt\undefined    \gdef\putwordDefopt{User Option}\fi
    -\ifx\putwordDeffunc\undefined   \gdef\putwordDeffunc{Function}\fi
    -
    -% Give the space character the catcode for a space.
    -\def\spaceisspace{\catcode`\ =10\relax}
    -
    -% Likewise for ^^M, the end of line character.
    -\def\endlineisspace{\catcode13=10\relax}
    -
    -\chardef\dashChar  = `\-
    -\chardef\slashChar = `\/
    -\chardef\underChar = `\_
    -
    -% Ignore a token.
    -%
    -\def\gobble#1{}
    -
    -% The following is used inside several \edef's.
    -\def\makecsname#1{\expandafter\noexpand\csname#1\endcsname}
    -
    -% Hyphenation fixes.
    -\hyphenation{
    -  Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script
    -  ap-pen-dix bit-map bit-maps
    -  data-base data-bases eshell fall-ing half-way long-est man-u-script
    -  man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm
    -  par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces
    -  spell-ing spell-ings
    -  stand-alone strong-est time-stamp time-stamps which-ever white-space
    -  wide-spread wrap-around
    -}
    -
    -% Sometimes it is convenient to have everything in the transcript file
    -% and nothing on the terminal.  We don't just call \tracingall here,
    -% since that produces some useless output on the terminal.  We also make
    -% some effort to order the tracing commands to reduce output in the log
    -% file; cf. trace.sty in LaTeX.
    -%
    -\def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}%
    -\def\loggingall{%
    -  \tracingstats2
    -  \tracingpages1
    -  \tracinglostchars2  % 2 gives us more in etex
    -  \tracingparagraphs1
    -  \tracingoutput1
    -  \tracingmacros2
    -  \tracingrestores1
    -  \showboxbreadth\maxdimen \showboxdepth\maxdimen
    -  \ifx\eTeXversion\thisisundefined\else % etex gives us more logging
    -    \tracingscantokens1
    -    \tracingifs1
    -    \tracinggroups1
    -    \tracingnesting2
    -    \tracingassigns1
    -  \fi
    -  \tracingcommands3  % 3 gives us more in etex
    -  \errorcontextlines16
    -}%
    -
    -% @errormsg{MSG}.  Do the index-like expansions on MSG, but if things
    -% aren't perfect, it's not the end of the world, being an error message,
    -% after all.
    -%
    -\def\errormsg{\begingroup \indexnofonts \doerrormsg}
    -\def\doerrormsg#1{\errmessage{#1}}
    -
    -% add check for \lastpenalty to plain's definitions.  If the last thing
    -% we did was a \nobreak, we don't want to insert more space.
    -%
    -\def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount
    -  \removelastskip\penalty-50\smallskip\fi\fi}
    -\def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount
    -  \removelastskip\penalty-100\medskip\fi\fi}
    -\def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount
    -  \removelastskip\penalty-200\bigskip\fi\fi}
    -
    -% Output routine
    -%
    -
    -% For a final copy, take out the rectangles
    -% that mark overfull boxes (in case you have decided
    -% that the text looks ok even though it passes the margin).
    -%
    -\def\finalout{\overfullrule=0pt }
    -
    -\newdimen\outerhsize \newdimen\outervsize % set by the paper size routines
    -\newdimen\topandbottommargin \topandbottommargin=.75in
    -
    -% Output a mark which sets \thischapter, \thissection and \thiscolor.
    -% We dump everything together because we only have one kind of mark.
    -% This works because we only use \botmark / \topmark, not \firstmark.
    -%
    -% A mark contains a subexpression of the \ifcase ... \fi construct.
    -% \get*marks macros below extract the needed part using \ifcase.
    -%
    -% Another complication is to let the user choose whether \thischapter
    -% (\thissection) refers to the chapter (section) in effect at the top
    -% of a page, or that at the bottom of a page.
    -
    -% \domark is called twice inside \chapmacro, to add one
    -% mark before the section break, and one after.
    -%   In the second call \prevchapterdefs is the same as \currentchapterdefs,
    -% and \prevsectiondefs is the same as \currentsectiondefs.
    -%   Then if the page is not broken at the mark, some of the previous
    -% section appears on the page, and we can get the name of this section
    -% from \firstmark for @everyheadingmarks top.
    -%   @everyheadingmarks bottom uses \botmark.
    -%
    -% See page 260 of The TeXbook.
    -\def\domark{%
    -  \toks0=\expandafter{\currentchapterdefs}%
    -  \toks2=\expandafter{\currentsectiondefs}%
    -  \toks4=\expandafter{\prevchapterdefs}%
    -  \toks6=\expandafter{\prevsectiondefs}%
    -  \toks8=\expandafter{\currentcolordefs}%
    -  \mark{%
    -                   \the\toks0 \the\toks2  % 0: marks for @everyheadingmarks top
    -      \noexpand\or \the\toks4 \the\toks6  % 1: for @everyheadingmarks bottom
    -    \noexpand\else \the\toks8             % 2: color marks
    -  }%
    -}
    -
    -% \gettopheadingmarks, \getbottomheadingmarks,
    -% \getcolormarks - extract needed part of mark.
    -%
    -% \topmark doesn't work for the very first chapter (after the title
    -% page or the contents), so we use \firstmark there -- this gets us
    -% the mark with the chapter defs, unless the user sneaks in, e.g.,
    -% @setcolor (or @url, or @link, etc.) between @contents and the very
    -% first @chapter.
    -\def\gettopheadingmarks{%
    -  \ifcase0\the\savedtopmark\fi
    -  \ifx\thischapter\empty \ifcase0\firstmark\fi \fi
    -}
    -\def\getbottomheadingmarks{\ifcase1\botmark\fi}
    -\def\getcolormarks{\ifcase2\the\savedtopmark\fi}
    -
    -% Avoid "undefined control sequence" errors.
    -\def\currentchapterdefs{}
    -\def\currentsectiondefs{}
    -\def\currentsection{}
    -\def\prevchapterdefs{}
    -\def\prevsectiondefs{}
    -\def\currentcolordefs{}
    -
    -% Margin to add to right of even pages, to left of odd pages.
    -\newdimen\bindingoffset
    -\newdimen\normaloffset
    -\newdimen\txipagewidth \newdimen\txipageheight
    -
    -% Main output routine.
    -%
    -\chardef\PAGE = 255
    -\newtoks\defaultoutput
    -\defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}}
    -\output=\expandafter{\the\defaultoutput}
    -
    -\newbox\headlinebox
    -\newbox\footlinebox
    -
    -% When outputting the double column layout for indices, an output routine
    -% is run several times, which hides the original value of \topmark.  This
    -% can lead to a page heading being output and duplicating the chapter heading
    -% of the index.  Hence, save the contents of \topmark at the beginning of
    -% the output routine.  The saved contents are valid until we actually
    -% \shipout a page.
    -%
    -% (We used to run a short output routine to actually set \topmark and
    -% \firstmark to the right values, but if this was called with an empty page
    -% containing whatsits for writing index entries, the whatsits would be thrown
    -% away and the index auxiliary file would remain empty.)
    -%
    -\newtoks\savedtopmark
    -\newif\iftopmarksaved
    -\topmarksavedtrue
    -\def\savetopmark{%
    -  \iftopmarksaved\else
    -    \global\savedtopmark=\expandafter{\topmark}%
    -    \global\topmarksavedtrue
    -  \fi
    -}
    -
    -% \onepageout takes a vbox as an argument.
    -% \shipout a vbox for a single page, adding an optional header, footer
    -% and footnote.  This also causes index entries for this page to be written
    -% to the auxiliary files.
    -%
    -\def\onepageout#1{%
    -  \hoffset=\normaloffset
    -  %
    -  \ifodd\pageno  \advance\hoffset by \bindingoffset
    -  \else \advance\hoffset by -\bindingoffset\fi
    -  %
    -  % Retrieve the information for the headings from the marks in the page,
    -  % and call Plain TeX's \makeheadline and \makefootline, which use the
    -  % values in \headline and \footline.
    -  %
    -  % This is used to check if we are on the first page of a chapter.
    -  \ifcase1\the\savedtopmark\fi
    -  \let\prevchaptername\thischaptername
    -  \ifcase0\firstmark\fi
    -  \let\curchaptername\thischaptername
    -  %
    -  \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi
    -  %
    -  \ifx\curchaptername\prevchaptername
    -    \let\thischapterheading\thischapter
    -  \else
    -    % \thischapterheading is the same as \thischapter except it is blank
    -    % for the first page of a chapter.  This is to prevent the chapter name
    -    % being shown twice.
    -    \def\thischapterheading{}%
    -  \fi
    -  %
    -  % Common context changes for both heading and footing.
    -  % Do this outside of the \shipout so @code etc. will be expanded in
    -  % the headline as they should be, not taken literally (outputting ''code).
    -  \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars}
    -  %
    -  \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}%
    -  %
    -  \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi
    -  \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}%
    -  %
    -  {%
    -    % Set context for writing to auxiliary files like index files.
    -    % Have to do this stuff outside the \shipout because we want it to
    -    % take effect in \write's, yet the group defined by the \vbox ends
    -    % before the \shipout runs.
    -    %
    -    \atdummies         % don't expand commands in the output.
    -    \turnoffactive
    -    \shipout\vbox{%
    -      % Do this early so pdf references go to the beginning of the page.
    -      \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi
    -      %
    -      \unvbox\headlinebox
    -      \pagebody{#1}%
    -      \ifdim\ht\footlinebox > 0pt
    -        % Only leave this space if the footline is nonempty.
    -        % (We lessened \vsize for it in \oddfootingyyy.)
    -        % The \baselineskip=24pt in plain's \makefootline has no effect.
    -        \vskip 24pt
    -        \unvbox\footlinebox
    -      \fi
    -      %
    -    }%
    -  }%
    -  \global\topmarksavedfalse
    -  \advancepageno
    -  \ifnum\outputpenalty>-20000 \else\dosupereject\fi
    -}
    -
    -\newinsert\margin \dimen\margin=\maxdimen
    -
    -% Main part of page, including any footnotes
    -\def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}}
    -{\catcode`\@ =11
    -\gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi
    -% marginal hacks, juha@viisa.uucp (Juha Takala)
    -\ifvoid\margin\else % marginal info is present
    -  \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi
    -\dimen@=\dp#1\relax \unvbox#1\relax
    -\ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi
    -\ifr@ggedbottom \kern-\dimen@ \vfil \fi}
    -}
    -
    -
    -% Argument parsing
    -
    -% Parse an argument, then pass it to #1.  The argument is the rest of
    -% the input line (except we remove a trailing comment).  #1 should be a
    -% macro which expects an ordinary undelimited TeX argument.
    -% For example, \def\foo{\parsearg\fooxxx}.
    -%
    -\def\parsearg{\parseargusing{}}
    -\def\parseargusing#1#2{%
    -  \def\argtorun{#2}%
    -  \begingroup
    -    \obeylines
    -    \spaceisspace
    -    #1%
    -    \parseargline\empty% Insert the \empty token, see \finishparsearg below.
    -}
    -
    -{\obeylines %
    -  \gdef\parseargline#1^^M{%
    -    \endgroup % End of the group started in \parsearg.
    -    \argremovecomment #1\comment\ArgTerm%
    -  }%
    -}
    -
    -% First remove any @comment, then any @c comment.  Pass the result on to
    -% \argcheckspaces.
    -\def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm}
    -\def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm}
    -
    -% Each occurrence of `\^^M' or `\^^M' is replaced by a single space.
    -%
    -% \argremovec might leave us with trailing space, e.g.,
    -%    @end itemize  @c foo
    -% This space token undergoes the same procedure and is eventually removed
    -% by \finishparsearg.
    -%
    -\def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M}
    -\def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M}
    -\def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{%
    -  \def\temp{#3}%
    -  \ifx\temp\empty
    -    % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp:
    -    \let\temp\finishparsearg
    -  \else
    -    \let\temp\argcheckspaces
    -  \fi
    -  % Put the space token in:
    -  \temp#1 #3\ArgTerm
    -}
    -
    -% If a _delimited_ argument is enclosed in braces, they get stripped; so
    -% to get _exactly_ the rest of the line, we had to prevent such situation.
    -% We prepended an \empty token at the very beginning and we expand it now,
    -% just before passing the control to \argtorun.
    -% (Similarly, we have to think about #3 of \argcheckspacesY above: it is
    -% either the null string, or it ends with \^^M---thus there is no danger
    -% that a pair of braces would be stripped.
    -%
    -% But first, we have to remove the trailing space token.
    -%
    -\def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}}
    -
    -
    -% \parseargdef - define a command taking an argument on the line
    -%
    -% \parseargdef\foo{...}
    -%	is roughly equivalent to
    -% \def\foo{\parsearg\Xfoo}
    -% \def\Xfoo#1{...}
    -\def\parseargdef#1{%
    -  \expandafter \doparseargdef \csname\string#1\endcsname #1%
    -}
    -\def\doparseargdef#1#2{%
    -  \def#2{\parsearg#1}%
    -  \def#1##1%
    -}
    -
    -% Several utility definitions with active space:
    -{
    -  \obeyspaces
    -  \gdef\obeyedspace{ }
    -
    -  % Make each space character in the input produce a normal interword
    -  % space in the output.  Don't allow a line break at this space, as this
    -  % is used only in environments like @example, where each line of input
    -  % should produce a line of output anyway.
    -  %
    -  \gdef\sepspaces{\obeyspaces\let =\tie}
    -
    -  % If an index command is used in an @example environment, any spaces
    -  % therein should become regular spaces in the raw index file, not the
    -  % expansion of \tie (\leavevmode \penalty \@M \ ).
    -  \gdef\unsepspaces{\let =\space}
    -}
    -
    -
    -\def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next}
    -
    -% Define the framework for environments in texinfo.tex.  It's used like this:
    -%
    -%   \envdef\foo{...}
    -%   \def\Efoo{...}
    -%
    -% It's the responsibility of \envdef to insert \begingroup before the
    -% actual body; @end closes the group after calling \Efoo.  \envdef also
    -% defines \thisenv, so the current environment is known; @end checks
    -% whether the environment name matches.  The \checkenv macro can also be
    -% used to check whether the current environment is the one expected.
    -%
    -% Non-false conditionals (@iftex, @ifset) don't fit into this, so they
    -% are not treated as environments; they don't open a group.  (The
    -% implementation of @end takes care not to call \endgroup in this
    -% special case.)
    -
    -
    -% At run-time, environments start with this:
    -\def\startenvironment#1{\begingroup\def\thisenv{#1}}
    -% initialize
    -\let\thisenv\empty
    -
    -% ... but they get defined via ``\envdef\foo{...}'':
    -\long\def\envdef#1#2{\def#1{\startenvironment#1#2}}
    -\def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}}
    -
    -% Check whether we're in the right environment:
    -\def\checkenv#1{%
    -  \def\temp{#1}%
    -  \ifx\thisenv\temp
    -  \else
    -    \badenverr
    -  \fi
    -}
    -
    -% Environment mismatch, #1 expected:
    -\def\badenverr{%
    -  \errhelp = \EMsimple
    -  \errmessage{This command can appear only \inenvironment\temp,
    -    not \inenvironment\thisenv}%
    -}
    -\def\inenvironment#1{%
    -  \ifx#1\empty
    -    outside of any environment%
    -  \else
    -    in environment \expandafter\string#1%
    -  \fi
    -}
    -
    -% @end foo executes the definition of \Efoo.
    -% But first, it executes a specialized version of \checkenv
    -%
    -\parseargdef\end{%
    -  \if 1\csname iscond.#1\endcsname
    -  \else
    -    % The general wording of \badenverr may not be ideal.
    -    \expandafter\checkenv\csname#1\endcsname
    -    \csname E#1\endcsname
    -    \endgroup
    -  \fi
    -}
    -
    -\newhelp\EMsimple{Press RETURN to continue.}
    -
    -
    -% Be sure we're in horizontal mode when doing a tie, since we make space
    -% equivalent to this in @example-like environments. Otherwise, a space
    -% at the beginning of a line will start with \penalty -- and
    -% since \penalty is valid in vertical mode, we'd end up putting the
    -% penalty on the vertical list instead of in the new paragraph.
    -{\catcode`@ = 11
    - % Avoid using \@M directly, because that causes trouble
    - % if the definition is written into an index file.
    - \global\let\tiepenalty = \@M
    - \gdef\tie{\leavevmode\penalty\tiepenalty\ }
    -}
    -
    -% @: forces normal size whitespace following.
    -\def\:{\spacefactor=1000 }
    -
    -% @* forces a line break.
    -\def\*{\unskip\hfil\break\hbox{}\ignorespaces}
    -
    -% @/ allows a line break.
    -\let\/=\allowbreak
    -
    -% @. is an end-of-sentence period.
    -\def\.{.\spacefactor=\endofsentencespacefactor\space}
    -
    -% @! is an end-of-sentence bang.
    -\def\!{!\spacefactor=\endofsentencespacefactor\space}
    -
    -% @? is an end-of-sentence query.
    -\def\?{?\spacefactor=\endofsentencespacefactor\space}
    -
    -% @frenchspacing on|off  says whether to put extra space after punctuation.
    -%
    -\def\onword{on}
    -\def\offword{off}
    -%
    -\parseargdef\frenchspacing{%
    -  \def\temp{#1}%
    -  \ifx\temp\onword \plainfrenchspacing
    -  \else\ifx\temp\offword \plainnonfrenchspacing
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @frenchspacing option `\temp', must be on|off}%
    -  \fi\fi
    -}
    -
    -% @w prevents a word break.  Without the \leavevmode, @w at the
    -% beginning of a paragraph, when TeX is still in vertical mode, would
    -% produce a whole line of output instead of starting the paragraph.
    -\def\w#1{\leavevmode\hbox{#1}}
    -
    -% @group ... @end group forces ... to be all on one page, by enclosing
    -% it in a TeX vbox.  We use \vtop instead of \vbox to construct the box
    -% to keep its height that of a normal line.  According to the rules for
    -% \topskip (p.114 of the TeXbook), the glue inserted is
    -% max (\topskip - \ht (first item), 0).  If that height is large,
    -% therefore, no glue is inserted, and the space between the headline and
    -% the text is small, which looks bad.
    -%
    -% Another complication is that the group might be very large.  This can
    -% cause the glue on the previous page to be unduly stretched, because it
    -% does not have much material.  In this case, it's better to add an
    -% explicit \vfill so that the extra space is at the bottom.  The
    -% threshold for doing this is if the group is more than \vfilllimit
    -% percent of a page (\vfilllimit can be changed inside of @tex).
    -%
    -\newbox\groupbox
    -\def\vfilllimit{0.7}
    -%
    -\envdef\group{%
    -  \ifnum\catcode`\^^M=\active \else
    -    \errhelp = \groupinvalidhelp
    -    \errmessage{@group invalid in context where filling is enabled}%
    -  \fi
    -  \startsavinginserts
    -  %
    -  \setbox\groupbox = \vtop\bgroup
    -    % Do @comment since we are called inside an environment such as
    -    % @example, where each end-of-line in the input causes an
    -    % end-of-line in the output.  We don't want the end-of-line after
    -    % the `@group' to put extra space in the output.  Since @group
    -    % should appear on a line by itself (according to the Texinfo
    -    % manual), we don't worry about eating any user text.
    -    \comment
    -}
    -%
    -% The \vtop produces a box with normal height and large depth; thus, TeX puts
    -% \baselineskip glue before it, and (when the next line of text is done)
    -% \lineskip glue after it.  Thus, space below is not quite equal to space
    -% above.  But it's pretty close.
    -\def\Egroup{%
    -    % To get correct interline space between the last line of the group
    -    % and the first line afterwards, we have to propagate \prevdepth.
    -    \endgraf % Not \par, as it may have been set to \lisppar.
    -    \global\dimen1 = \prevdepth
    -  \egroup           % End the \vtop.
    -  \addgroupbox
    -  \prevdepth = \dimen1
    -  \checkinserts
    -}
    -
    -\def\addgroupbox{
    -  % \dimen0 is the vertical size of the group's box.
    -  \dimen0 = \ht\groupbox  \advance\dimen0 by \dp\groupbox
    -  % \dimen2 is how much space is left on the page (more or less).
    -  \dimen2 = \txipageheight   \advance\dimen2 by -\pagetotal
    -  % if the group doesn't fit on the current page, and it's a big big
    -  % group, force a page break.
    -  \ifdim \dimen0 > \dimen2
    -    \ifdim \pagetotal < \vfilllimit\txipageheight
    -      \page
    -    \fi
    -  \fi
    -  \box\groupbox
    -}
    -
    -%
    -% TeX puts in an \escapechar (i.e., `@') at the beginning of the help
    -% message, so this ends up printing `@group can only ...'.
    -%
    -\newhelp\groupinvalidhelp{%
    -group can only be used in environments such as @example,^^J%
    -where each line of input produces a line of output.}
    -
    -% @need space-in-mils
    -% forces a page break if there is not space-in-mils remaining.
    -
    -\newdimen\mil  \mil=0.001in
    -
    -\parseargdef\need{%
    -  % Ensure vertical mode, so we don't make a big box in the middle of a
    -  % paragraph.
    -  \par
    -  %
    -  % If the @need value is less than one line space, it's useless.
    -  \dimen0 = #1\mil
    -  \dimen2 = \ht\strutbox
    -  \advance\dimen2 by \dp\strutbox
    -  \ifdim\dimen0 > \dimen2
    -    %
    -    % Do a \strut just to make the height of this box be normal, so the
    -    % normal leading is inserted relative to the preceding line.
    -    % And a page break here is fine.
    -    \vtop to #1\mil{\strut\vfil}%
    -    %
    -    % TeX does not even consider page breaks if a penalty added to the
    -    % main vertical list is 10000 or more.  But in order to see if the
    -    % empty box we just added fits on the page, we must make it consider
    -    % page breaks.  On the other hand, we don't want to actually break the
    -    % page after the empty box.  So we use a penalty of 9999.
    -    %
    -    % There is an extremely small chance that TeX will actually break the
    -    % page at this \penalty, if there are no other feasible breakpoints in
    -    % sight.  (If the user is using lots of big @group commands, which
    -    % almost-but-not-quite fill up a page, TeX will have a hard time doing
    -    % good page breaking, for example.)  However, I could not construct an
    -    % example where a page broke at this \penalty; if it happens in a real
    -    % document, then we can reconsider our strategy.
    -    \penalty9999
    -    %
    -    % Back up by the size of the box, whether we did a page break or not.
    -    \kern -#1\mil
    -    %
    -    % Do not allow a page break right after this kern.
    -    \nobreak
    -  \fi
    -}
    -
    -% @br   forces paragraph break (and is undocumented).
    -
    -\let\br = \par
    -
    -% @page forces the start of a new page.
    -%
    -\def\page{\par\vfill\supereject}
    -
    -% @exdent text....
    -% outputs text on separate line in roman font, starting at standard page margin
    -
    -% This records the amount of indent in the innermost environment.
    -% That's how much \exdent should take out.
    -\newskip\exdentamount
    -
    -% This defn is used inside fill environments such as @defun.
    -\parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break}
    -
    -% This defn is used inside nofill environments such as @example.
    -\parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount
    -  \leftline{\hskip\leftskip{\rm#1}}}}
    -
    -% @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current
    -% paragraph.  For more general purposes, use the \margin insertion
    -% class.  WHICH is `l' or `r'.  Not documented, written for gawk manual.
    -%
    -\newskip\inmarginspacing \inmarginspacing=1cm
    -\def\strutdepth{\dp\strutbox}
    -%
    -\def\doinmargin#1#2{\strut\vadjust{%
    -  \nobreak
    -  \kern-\strutdepth
    -  \vtop to \strutdepth{%
    -    \baselineskip=\strutdepth
    -    \vss
    -    % if you have multiple lines of stuff to put here, you'll need to
    -    % make the vbox yourself of the appropriate size.
    -    \ifx#1l%
    -      \llap{\ignorespaces #2\hskip\inmarginspacing}%
    -    \else
    -      \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}%
    -    \fi
    -    \null
    -  }%
    -}}
    -\def\inleftmargin{\doinmargin l}
    -\def\inrightmargin{\doinmargin r}
    -%
    -% @inmargin{TEXT [, RIGHT-TEXT]}
    -% (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right;
    -% else use TEXT for both).
    -%
    -\def\inmargin#1{\parseinmargin #1,,\finish}
    -\def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing.
    -  \setbox0 = \hbox{\ignorespaces #2}%
    -  \ifdim\wd0 > 0pt
    -    \def\lefttext{#1}%  have both texts
    -    \def\righttext{#2}%
    -  \else
    -    \def\lefttext{#1}%  have only one text
    -    \def\righttext{#1}%
    -  \fi
    -  %
    -  \ifodd\pageno
    -    \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin
    -  \else
    -    \def\temp{\inleftmargin\lefttext}%
    -  \fi
    -  \temp
    -}
    -
    -% @include FILE -- \input text of FILE.
    -%
    -\def\include{\parseargusing\filenamecatcodes\includezzz}
    -\def\includezzz#1{%
    -  \pushthisfilestack
    -  \def\thisfile{#1}%
    -  {%
    -    \makevalueexpandable  % we want to expand any @value in FILE.
    -    \turnoffactive        % and allow special characters in the expansion
    -    \indexnofonts         % Allow `@@' and other weird things in file names.
    -    \wlog{texinfo.tex: doing @include of #1^^J}%
    -    \edef\temp{\noexpand\input #1 }%
    -    %
    -    % This trickery is to read FILE outside of a group, in case it makes
    -    % definitions, etc.
    -    \expandafter
    -  }\temp
    -  \popthisfilestack
    -}
    -\def\filenamecatcodes{%
    -  \catcode`\\=\other
    -  \catcode`~=\other
    -  \catcode`^=\other
    -  \catcode`_=\other
    -  \catcode`|=\other
    -  \catcode`<=\other
    -  \catcode`>=\other
    -  \catcode`+=\other
    -  \catcode`-=\other
    -  \catcode`\`=\other
    -  \catcode`\'=\other
    -}
    -
    -\def\pushthisfilestack{%
    -  \expandafter\pushthisfilestackX\popthisfilestack\StackTerm
    -}
    -\def\pushthisfilestackX{%
    -  \expandafter\pushthisfilestackY\thisfile\StackTerm
    -}
    -\def\pushthisfilestackY #1\StackTerm #2\StackTerm {%
    -  \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}%
    -}
    -
    -\def\popthisfilestack{\errthisfilestackempty}
    -\def\errthisfilestackempty{\errmessage{Internal error:
    -  the stack of filenames is empty.}}
    -%
    -\def\thisfile{}
    -
    -% @center line
    -% outputs that line, centered.
    -%
    -\parseargdef\center{%
    -  \ifhmode
    -    \let\centersub\centerH
    -  \else
    -    \let\centersub\centerV
    -  \fi
    -  \centersub{\hfil \ignorespaces#1\unskip \hfil}%
    -  \let\centersub\relax % don't let the definition persist, just in case
    -}
    -\def\centerH#1{{%
    -  \hfil\break
    -  \advance\hsize by -\leftskip
    -  \advance\hsize by -\rightskip
    -  \line{#1}%
    -  \break
    -}}
    -%
    -\newcount\centerpenalty
    -\def\centerV#1{%
    -  % The idea here is the same as in \startdefun, \cartouche, etc.: if
    -  % @center is the first thing after a section heading, we need to wipe
    -  % out the negative parskip inserted by \sectionheading, but still
    -  % prevent a page break here.
    -  \centerpenalty = \lastpenalty
    -  \ifnum\centerpenalty>10000 \vskip\parskip \fi
    -  \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi
    -  \line{\kern\leftskip #1\kern\rightskip}%
    -}
    -
    -% @sp n   outputs n lines of vertical space
    -%
    -\parseargdef\sp{\vskip #1\baselineskip}
    -
    -% @comment ...line which is ignored...
    -% @c is the same as @comment
    -% @ignore ... @end ignore  is another way to write a comment
    -
    -
    -\def\c{\begingroup \catcode`\^^M=\active%
    -\catcode`\@=\other \catcode`\{=\other \catcode`\}=\other%
    -\cxxx}
    -{\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}}
    -%
    -\let\comment\c
    -
    -% @paragraphindent NCHARS
    -% We'll use ems for NCHARS, close enough.
    -% NCHARS can also be the word `asis' or `none'.
    -% We cannot feasibly implement @paragraphindent asis, though.
    -%
    -\def\asisword{asis} % no translation, these are keywords
    -\def\noneword{none}
    -%
    -\parseargdef\paragraphindent{%
    -  \def\temp{#1}%
    -  \ifx\temp\asisword
    -  \else
    -    \ifx\temp\noneword
    -      \defaultparindent = 0pt
    -    \else
    -      \defaultparindent = #1em
    -    \fi
    -  \fi
    -  \parindent = \defaultparindent
    -}
    -
    -% @exampleindent NCHARS
    -% We'll use ems for NCHARS like @paragraphindent.
    -% It seems @exampleindent asis isn't necessary, but
    -% I preserve it to make it similar to @paragraphindent.
    -\parseargdef\exampleindent{%
    -  \def\temp{#1}%
    -  \ifx\temp\asisword
    -  \else
    -    \ifx\temp\noneword
    -      \lispnarrowing = 0pt
    -    \else
    -      \lispnarrowing = #1em
    -    \fi
    -  \fi
    -}
    -
    -% @firstparagraphindent WORD
    -% If WORD is `none', then suppress indentation of the first paragraph
    -% after a section heading.  If WORD is `insert', then do indent at such
    -% paragraphs.
    -%
    -% The paragraph indentation is suppressed or not by calling
    -% \suppressfirstparagraphindent, which the sectioning commands do.
    -% We switch the definition of this back and forth according to WORD.
    -% By default, we suppress indentation.
    -%
    -\def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent}
    -\def\insertword{insert}
    -%
    -\parseargdef\firstparagraphindent{%
    -  \def\temp{#1}%
    -  \ifx\temp\noneword
    -    \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent
    -  \else\ifx\temp\insertword
    -    \let\suppressfirstparagraphindent = \relax
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @firstparagraphindent option `\temp'}%
    -  \fi\fi
    -}
    -
    -% Here is how we actually suppress indentation.  Redefine \everypar to
    -% \kern backwards by \parindent, and then reset itself to empty.
    -%
    -% We also make \indent itself not actually do anything until the next
    -% paragraph.
    -%
    -\gdef\dosuppressfirstparagraphindent{%
    -  \gdef\indent  {\restorefirstparagraphindent \indent}%
    -  \gdef\noindent{\restorefirstparagraphindent \noindent}%
    -  \global\everypar = {\kern -\parindent \restorefirstparagraphindent}%
    -}
    -%
    -\gdef\restorefirstparagraphindent{%
    -  \global\let\indent = \ptexindent
    -  \global\let\noindent = \ptexnoindent
    -  \global\everypar = {}%
    -}
    -
    -
    -% @refill is a no-op.
    -\let\refill=\relax
    -
    -% @setfilename INFO-FILENAME - ignored
    -\let\setfilename=\comment
    -
    -% @bye.
    -\outer\def\bye{\pagealignmacro\tracingstats=1\ptexend}
    -
    -
    -\message{pdf,}
    -% adobe `portable' document format
    -\newcount\tempnum
    -\newcount\lnkcount
    -\newtoks\filename
    -\newcount\filenamelength
    -\newcount\pgn
    -\newtoks\toksA
    -\newtoks\toksB
    -\newtoks\toksC
    -\newtoks\toksD
    -\newbox\boxA
    -\newbox\boxB
    -\newcount\countA
    -\newif\ifpdf
    -\newif\ifpdfmakepagedest
    -
    -%
    -% For LuaTeX
    -%
    -
    -\newif\iftxiuseunicodedestname
    -\txiuseunicodedestnamefalse % For pdfTeX etc.
    -
    -\ifx\luatexversion\thisisundefined
    -\else
    -  % Use Unicode destination names
    -  \txiuseunicodedestnametrue
    -  % Escape PDF strings with converting UTF-16 from UTF-8
    -  \begingroup
    -    \catcode`\%=12
    -    \directlua{
    -      function UTF16oct(str)
    -        tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377')
    -        for c in string.utfvalues(str) do
    -          if c < 0x10000 then
    -            tex.sprint(
    -              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
    -                            string.char(0x5c) .. string.char(0x25) .. '03o',
    -                            math.floor(c / 256), math.floor(c % 256)))
    -          else
    -            c = c - 0x10000
    -            local c_hi = c / 1024 + 0xd800
    -            local c_lo = c % 1024 + 0xdc00
    -            tex.sprint(
    -              string.format(string.char(0x5c) .. string.char(0x25) .. '03o' ..
    -                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
    -                            string.char(0x5c) .. string.char(0x25) .. '03o' ..
    -                            string.char(0x5c) .. string.char(0x25) .. '03o',
    -                            math.floor(c_hi / 256), math.floor(c_hi % 256),
    -                            math.floor(c_lo / 256), math.floor(c_lo % 256)))
    -          end
    -        end
    -      end
    -    }
    -  \endgroup
    -  \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}}
    -  % Escape PDF strings without converting
    -  \begingroup
    -    \directlua{
    -      function PDFescstr(str)
    -        for c in string.bytes(str) do
    -          if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then
    -            tex.sprint(-2,
    -              string.format(string.char(0x5c) .. string.char(0x25) .. '03o',
    -                            c))
    -          else
    -            tex.sprint(-2, string.char(c))
    -          end
    -        end
    -      end
    -    }
    -    % The -2 in the arguments here gives all the input to TeX catcode 12
    -    % (other) or 10 (space), preventing undefined control sequence errors. See
    -    % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html
    -    %
    -  \endgroup
    -  \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}}
    -  \ifnum\luatexversion>84
    -    % For LuaTeX >= 0.85
    -    \def\pdfdest{\pdfextension dest}
    -    \let\pdfoutput\outputmode
    -    \def\pdfliteral{\pdfextension literal}
    -    \def\pdfcatalog{\pdfextension catalog}
    -    \def\pdftexversion{\numexpr\pdffeedback version\relax}
    -    \let\pdfximage\saveimageresource
    -    \let\pdfrefximage\useimageresource
    -    \let\pdflastximage\lastsavedimageresourceindex
    -    \def\pdfendlink{\pdfextension endlink\relax}
    -    \def\pdfoutline{\pdfextension outline}
    -    \def\pdfstartlink{\pdfextension startlink}
    -    \def\pdffontattr{\pdfextension fontattr}
    -    \def\pdfobj{\pdfextension obj}
    -    \def\pdflastobj{\numexpr\pdffeedback lastobj\relax}
    -    \let\pdfpagewidth\pagewidth
    -    \let\pdfpageheight\pageheight
    -    \edef\pdfhorigin{\pdfvariable horigin}
    -    \edef\pdfvorigin{\pdfvariable vorigin}
    -  \fi
    -\fi
    -
    -% when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1
    -% can be set).  So we test for \relax and 0 as well as being undefined.
    -\ifx\pdfoutput\thisisundefined
    -\else
    -  \ifx\pdfoutput\relax
    -  \else
    -    \ifcase\pdfoutput
    -    \else
    -      \pdftrue
    -    \fi
    -  \fi
    -\fi
    -
    -\newif\ifpdforxetex
    -\pdforxetexfalse
    -\ifpdf
    -  \pdforxetextrue
    -\fi
    -\ifx\XeTeXrevision\thisisundefined\else
    -  \pdforxetextrue
    -\fi
    -
    -
    -% PDF uses PostScript string constants for the names of xref targets,
    -% for display in the outlines, and in other places.  Thus, we have to
    -% double any backslashes.  Otherwise, a name like "\node" will be
    -% interpreted as a newline (\n), followed by o, d, e.  Not good.
    -%
    -% See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and
    -% related messages.  The final outcome is that it is up to the TeX user
    -% to double the backslashes and otherwise make the string valid, so
    -% that's what we do.  pdftex 1.30.0 (ca.2005) introduced a primitive to
    -% do this reliably, so we use it.
    -
    -% #1 is a control sequence in which to do the replacements,
    -% which we \xdef.
    -\def\txiescapepdf#1{%
    -  \ifx\pdfescapestring\thisisundefined
    -    % No primitive available; should we give a warning or log?
    -    % Many times it won't matter.
    -    \xdef#1{#1}%
    -  \else
    -    % The expandable \pdfescapestring primitive escapes parentheses,
    -    % backslashes, and other special chars.
    -    \xdef#1{\pdfescapestring{#1}}%
    -  \fi
    -}
    -\def\txiescapepdfutfsixteen#1{%
    -  \ifx\pdfescapestrutfsixteen\thisisundefined
    -    % No UTF-16 converting macro available.
    -    \txiescapepdf{#1}%
    -  \else
    -    \xdef#1{\pdfescapestrutfsixteen{#1}}%
    -  \fi
    -}
    -
    -\newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images
    -with PDF output, and none of those formats could be found.  (.eps cannot
    -be supported due to the design of the PDF format; use regular TeX (DVI
    -output) for that.)}
    -
    -\ifpdf
    -  %
    -  % Color manipulation macros using ideas from pdfcolor.tex,
    -  % except using rgb instead of cmyk; the latter is said to render as a
    -  % very dark gray on-screen and a very dark halftone in print, instead
    -  % of actual black. The dark red here is dark enough to print on paper as
    -  % nearly black, but still distinguishable for online viewing.  We use
    -  % black by default, though.
    -  \def\rgbDarkRed{0.50 0.09 0.12}
    -  \def\rgbBlack{0 0 0}
    -  %
    -  % rg sets the color for filling (usual text, etc.);
    -  % RG sets the color for stroking (thin rules, e.g., normal _'s).
    -  \def\pdfsetcolor#1{\pdfliteral{#1 rg  #1 RG}}
    -  %
    -  % Set color, and create a mark which defines \thiscolor accordingly,
    -  % so that \makeheadline knows which color to restore.
    -  \def\setcolor#1{%
    -    \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
    -    \domark
    -    \pdfsetcolor{#1}%
    -  }
    -  %
    -  \def\maincolor{\rgbBlack}
    -  \pdfsetcolor{\maincolor}
    -  \edef\thiscolor{\maincolor}
    -  \def\currentcolordefs{}
    -  %
    -  \def\makefootline{%
    -    \baselineskip24pt
    -    \line{\pdfsetcolor{\maincolor}\the\footline}%
    -  }
    -  %
    -  \def\makeheadline{%
    -    \vbox to 0pt{%
    -      \vskip-22.5pt
    -      \line{%
    -        \vbox to8.5pt{}%
    -        % Extract \thiscolor definition from the marks.
    -        \getcolormarks
    -        % Typeset the headline with \maincolor, then restore the color.
    -        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
    -      }%
    -      \vss
    -    }%
    -    \nointerlineskip
    -  }
    -  %
    -  %
    -  \pdfcatalog{/PageMode /UseOutlines}
    -  %
    -  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
    -  \def\dopdfimage#1#2#3{%
    -    \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
    -    \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
    -    %
    -    % pdftex (and the PDF format) support .pdf, .png, .jpg (among
    -    % others).  Let's try in that order, PDF first since if
    -    % someone has a scalable image, presumably better to use that than a
    -    % bitmap.
    -    \let\pdfimgext=\empty
    -    \begingroup
    -      \openin 1 #1.pdf \ifeof 1
    -        \openin 1 #1.PDF \ifeof 1
    -          \openin 1 #1.png \ifeof 1
    -            \openin 1 #1.jpg \ifeof 1
    -              \openin 1 #1.jpeg \ifeof 1
    -                \openin 1 #1.JPG \ifeof 1
    -                  \errhelp = \nopdfimagehelp
    -                  \errmessage{Could not find image file #1 for pdf}%
    -                \else \gdef\pdfimgext{JPG}%
    -                \fi
    -              \else \gdef\pdfimgext{jpeg}%
    -              \fi
    -            \else \gdef\pdfimgext{jpg}%
    -            \fi
    -          \else \gdef\pdfimgext{png}%
    -          \fi
    -        \else \gdef\pdfimgext{PDF}%
    -        \fi
    -      \else \gdef\pdfimgext{pdf}%
    -      \fi
    -      \closein 1
    -    \endgroup
    -    %
    -    % without \immediate, ancient pdftex seg faults when the same image is
    -    % included twice.  (Version 3.14159-pre-1.0-unofficial-20010704.)
    -    \ifnum\pdftexversion < 14
    -      \immediate\pdfimage
    -    \else
    -      \immediate\pdfximage
    -    \fi
    -      \ifdim \wd0 >0pt width \pdfimagewidth \fi
    -      \ifdim \wd2 >0pt height \pdfimageheight \fi
    -      \ifnum\pdftexversion<13
    -         #1.\pdfimgext
    -       \else
    -         {#1.\pdfimgext}%
    -       \fi
    -    \ifnum\pdftexversion < 14 \else
    -      \pdfrefximage \pdflastximage
    -    \fi}
    -  %
    -  \def\setpdfdestname#1{{%
    -    % We have to set dummies so commands such as @code, and characters
    -    % such as \, aren't expanded when present in a section title.
    -    \indexnofonts
    -    \makevalueexpandable
    -    \turnoffactive
    -    \iftxiuseunicodedestname
    -      \ifx \declaredencoding \latone
    -        % Pass through Latin-1 characters.
    -        % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode.
    -      \else
    -        \ifx \declaredencoding \utfeight
    -          % Pass through Unicode characters.
    -        \else
    -          % Use ASCII approximations in destination names.
    -          \passthroughcharsfalse
    -        \fi
    -      \fi
    -    \else
    -      % Use ASCII approximations in destination names.
    -      \passthroughcharsfalse
    -    \fi
    -    \def\pdfdestname{#1}%
    -    \txiescapepdf\pdfdestname
    -  }}
    -  %
    -  \def\setpdfoutlinetext#1{{%
    -    \indexnofonts
    -    \makevalueexpandable
    -    \turnoffactive
    -    \ifx \declaredencoding \latone
    -      % The PDF format can use an extended form of Latin-1 in bookmark
    -      % strings.  See Appendix D of the PDF Reference, Sixth Edition, for
    -      % the "PDFDocEncoding".
    -      \passthroughcharstrue
    -      % Pass through Latin-1 characters.
    -      %   LuaTeX: Convert to Unicode
    -      %   pdfTeX: Use Latin-1 as PDFDocEncoding
    -      \def\pdfoutlinetext{#1}%
    -    \else
    -      \ifx \declaredencoding \utfeight
    -        \ifx\luatexversion\thisisundefined
    -          % For pdfTeX  with UTF-8.
    -          % TODO: the PDF format can use UTF-16 in bookmark strings,
    -          % but the code for this isn't done yet.
    -          % Use ASCII approximations.
    -          \passthroughcharsfalse
    -          \def\pdfoutlinetext{#1}%
    -        \else
    -          % For LuaTeX with UTF-8.
    -          % Pass through Unicode characters for title texts.
    -          \passthroughcharstrue
    -          \def\pdfoutlinetext{#1}%
    -        \fi
    -      \else
    -        % For non-Latin-1 or non-UTF-8 encodings.
    -        % Use ASCII approximations.
    -        \passthroughcharsfalse
    -        \def\pdfoutlinetext{#1}%
    -      \fi
    -    \fi
    -    % LuaTeX: Convert to UTF-16
    -    % pdfTeX: Use Latin-1 as PDFDocEncoding
    -    \txiescapepdfutfsixteen\pdfoutlinetext
    -  }}
    -  %
    -  \def\pdfmkdest#1{%
    -    \setpdfdestname{#1}%
    -    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
    -  }
    -  %
    -  % used to mark target names; must be expandable.
    -  \def\pdfmkpgn#1{#1}
    -  %
    -  % by default, use black for everything.
    -  \def\urlcolor{\rgbBlack}
    -  \def\linkcolor{\rgbBlack}
    -  \def\endlink{\setcolor{\maincolor}\pdfendlink}
    -  %
    -  % Adding outlines to PDF; macros for calculating structure of outlines
    -  % come from Petr Olsak
    -  \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0%
    -    \else \csname#1\endcsname \fi}
    -  \def\advancenumber#1{\tempnum=\expnumber{#1}\relax
    -    \advance\tempnum by 1
    -    \expandafter\xdef\csname#1\endcsname{\the\tempnum}}
    -  %
    -  % #1 is the section text, which is what will be displayed in the
    -  % outline by the pdf viewer.  #2 is the pdf expression for the number
    -  % of subentries (or empty, for subsubsections).  #3 is the node text,
    -  % which might be empty if this toc entry had no corresponding node.
    -  % #4 is the page number
    -  %
    -  \def\dopdfoutline#1#2#3#4{%
    -    % Generate a link to the node text if that exists; else, use the
    -    % page number.  We could generate a destination for the section
    -    % text in the case where a section has no node, but it doesn't
    -    % seem worth the trouble, since most documents are normally structured.
    -    \setpdfoutlinetext{#1}
    -    \setpdfdestname{#3}
    -    \ifx\pdfdestname\empty
    -      \def\pdfdestname{#4}%
    -    \fi
    -    %
    -    \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}%
    -  }
    -  %
    -  \def\pdfmakeoutlines{%
    -    \begingroup
    -      % Read toc silently, to get counts of subentries for \pdfoutline.
    -      \def\partentry##1##2##3##4{}% ignore parts in the outlines
    -      \def\numchapentry##1##2##3##4{%
    -	\def\thischapnum{##2}%
    -	\def\thissecnum{0}%
    -	\def\thissubsecnum{0}%
    -      }%
    -      \def\numsecentry##1##2##3##4{%
    -	\advancenumber{chap\thischapnum}%
    -	\def\thissecnum{##2}%
    -	\def\thissubsecnum{0}%
    -      }%
    -      \def\numsubsecentry##1##2##3##4{%
    -	\advancenumber{sec\thissecnum}%
    -	\def\thissubsecnum{##2}%
    -      }%
    -      \def\numsubsubsecentry##1##2##3##4{%
    -	\advancenumber{subsec\thissubsecnum}%
    -      }%
    -      \def\thischapnum{0}%
    -      \def\thissecnum{0}%
    -      \def\thissubsecnum{0}%
    -      %
    -      % use \def rather than \let here because we redefine \chapentry et
    -      % al. a second time, below.
    -      \def\appentry{\numchapentry}%
    -      \def\appsecentry{\numsecentry}%
    -      \def\appsubsecentry{\numsubsecentry}%
    -      \def\appsubsubsecentry{\numsubsubsecentry}%
    -      \def\unnchapentry{\numchapentry}%
    -      \def\unnsecentry{\numsecentry}%
    -      \def\unnsubsecentry{\numsubsecentry}%
    -      \def\unnsubsubsecentry{\numsubsubsecentry}%
    -      \readdatafile{toc}%
    -      %
    -      % Read toc second time, this time actually producing the outlines.
    -      % The `-' means take the \expnumber as the absolute number of
    -      % subentries, which we calculated on our first read of the .toc above.
    -      %
    -      % We use the node names as the destinations.
    -      \def\numchapentry##1##2##3##4{%
    -        \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}%
    -      \def\numsecentry##1##2##3##4{%
    -        \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}%
    -      \def\numsubsecentry##1##2##3##4{%
    -        \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}%
    -      \def\numsubsubsecentry##1##2##3##4{% count is always zero
    -        \dopdfoutline{##1}{}{##3}{##4}}%
    -      %
    -      % PDF outlines are displayed using system fonts, instead of
    -      % document fonts.  Therefore we cannot use special characters,
    -      % since the encoding is unknown.  For example, the eogonek from
    -      % Latin 2 (0xea) gets translated to a | character.  Info from
    -      % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100.
    -      %
    -      % TODO this right, we have to translate 8-bit characters to
    -      % their "best" equivalent, based on the @documentencoding.  Too
    -      % much work for too little return.  Just use the ASCII equivalents
    -      % we use for the index sort strings.
    -      %
    -      \indexnofonts
    -      \setupdatafile
    -      % We can have normal brace characters in the PDF outlines, unlike
    -      % Texinfo index files.  So set that up.
    -      \def\{{\lbracecharliteral}%
    -      \def\}{\rbracecharliteral}%
    -      \catcode`\\=\active \otherbackslash
    -      \input \tocreadfilename
    -    \endgroup
    -  }
    -  {\catcode`[=1 \catcode`]=2
    -   \catcode`{=\other \catcode`}=\other
    -   \gdef\lbracecharliteral[{]%
    -   \gdef\rbracecharliteral[}]%
    -  ]
    -  %
    -  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
    -    \ifx\PP\D\let\nextsp\relax
    -    \else\let\nextsp\skipspaces
    -      \addtokens{\filename}{\PP}%
    -      \advance\filenamelength by 1
    -    \fi
    -    \nextsp}
    -  \def\getfilename#1{%
    -    \filenamelength=0
    -    % If we don't expand the argument now, \skipspaces will get
    -    % snagged on things like "@value{foo}".
    -    \edef\temp{#1}%
    -    \expandafter\skipspaces\temp|\relax
    -  }
    -  \ifnum\pdftexversion < 14
    -    \let \startlink \pdfannotlink
    -  \else
    -    \let \startlink \pdfstartlink
    -  \fi
    -  % make a live url in pdf output.
    -  \def\pdfurl#1{%
    -    \begingroup
    -      % it seems we really need yet another set of dummies; have not
    -      % tried to figure out what each command should do in the context
    -      % of @url.  for now, just make @/ a no-op, that's the only one
    -      % people have actually reported a problem with.
    -      %
    -      \normalturnoffactive
    -      \def\@{@}%
    -      \let\/=\empty
    -      \makevalueexpandable
    -      % do we want to go so far as to use \indexnofonts instead of just
    -      % special-casing \var here?
    -      \def\var##1{##1}%
    -      %
    -      \leavevmode\setcolor{\urlcolor}%
    -      \startlink attr{/Border [0 0 0]}%
    -        user{/Subtype /Link /A << /S /URI /URI (#1) >>}%
    -    \endgroup}
    -  % \pdfgettoks - Surround page numbers in #1 with @pdflink.  #1 may
    -  % be a simple number, or a list of numbers in the case of an index
    -  % entry.
    -  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
    -  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
    -  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
    -  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
    -  \def\maketoks{%
    -    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
    -    \ifx\first0\adn0
    -    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
    -    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
    -    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
    -    \else
    -      \ifnum0=\countA\else\makelink\fi
    -      \ifx\first.\let\next=\done\else
    -        \let\next=\maketoks
    -        \addtokens{\toksB}{\the\toksD}
    -        \ifx\first,\addtokens{\toksB}{\space}\fi
    -      \fi
    -    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    -    \next}
    -  \def\makelink{\addtokens{\toksB}%
    -    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
    -  \def\pdflink#1{%
    -    \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}}
    -    \setcolor{\linkcolor}#1\endlink}
    -  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
    -\else
    -  % non-pdf mode
    -  \let\pdfmkdest = \gobble
    -  \let\pdfurl = \gobble
    -  \let\endlink = \relax
    -  \let\setcolor = \gobble
    -  \let\pdfsetcolor = \gobble
    -  \let\pdfmakeoutlines = \relax
    -\fi  % \ifx\pdfoutput
    -
    -%
    -% For XeTeX
    -%
    -\ifx\XeTeXrevision\thisisundefined
    -\else
    -  %
    -  % XeTeX version check
    -  %
    -  \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1
    -    % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307.
    -    % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941).
    -    % For avoiding PDF destination name replacement, we use this special
    -    % instead of xdvipdfmx's command line option `-C 0x0010'.
    -    \special{dvipdfmx:config C 0x0010}
    -    % XeTeX 0.99995+ comes with xdvipdfmx 20160307+.
    -    % It can handle Unicode destination names for PDF.
    -    \txiuseunicodedestnametrue
    -  \else
    -    % XeTeX < 0.99996 (TeX Live < 2016) cannot use the
    -    % `dvipdfmx:config' special.
    -    % So for avoiding PDF destination name replacement,
    -    % xdvipdfmx's command line option `-C 0x0010' is necessary.
    -    %
    -    % XeTeX < 0.99995 can not handle Unicode destination names for PDF
    -    % because xdvipdfmx 20150315 has a UTF-16 conversion issue.
    -    % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
    -    \txiuseunicodedestnamefalse
    -  \fi
    -  %
    -  % Color support
    -  %
    -  \def\rgbDarkRed{0.50 0.09 0.12}
    -  \def\rgbBlack{0 0 0}
    -  %
    -  \def\pdfsetcolor#1{\special{pdf:scolor [#1]}}
    -  %
    -  % Set color, and create a mark which defines \thiscolor accordingly,
    -  % so that \makeheadline knows which color to restore.
    -  \def\setcolor#1{%
    -    \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}%
    -    \domark
    -    \pdfsetcolor{#1}%
    -  }
    -  %
    -  \def\maincolor{\rgbBlack}
    -  \pdfsetcolor{\maincolor}
    -  \edef\thiscolor{\maincolor}
    -  \def\currentcolordefs{}
    -  %
    -  \def\makefootline{%
    -    \baselineskip24pt
    -    \line{\pdfsetcolor{\maincolor}\the\footline}%
    -  }
    -  %
    -  \def\makeheadline{%
    -    \vbox to 0pt{%
    -      \vskip-22.5pt
    -      \line{%
    -        \vbox to8.5pt{}%
    -        % Extract \thiscolor definition from the marks.
    -        \getcolormarks
    -        % Typeset the headline with \maincolor, then restore the color.
    -        \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}%
    -      }%
    -      \vss
    -    }%
    -    \nointerlineskip
    -  }
    -  %
    -  % PDF outline support
    -  %
    -  % Emulate pdfTeX primitive
    -  \def\pdfdest name#1 xyz{%
    -    \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}%
    -  }
    -  %
    -  \def\setpdfdestname#1{{%
    -    % We have to set dummies so commands such as @code, and characters
    -    % such as \, aren't expanded when present in a section title.
    -    \indexnofonts
    -    \makevalueexpandable
    -    \turnoffactive
    -    \iftxiuseunicodedestname
    -      % Pass through Unicode characters.
    -    \else
    -      % Use ASCII approximations in destination names.
    -      \passthroughcharsfalse
    -    \fi
    -    \def\pdfdestname{#1}%
    -    \txiescapepdf\pdfdestname
    -  }}
    -  %
    -  \def\setpdfoutlinetext#1{{%
    -    \turnoffactive
    -    % Always use Unicode characters in title texts.
    -    \def\pdfoutlinetext{#1}%
    -    % For XeTeX, xdvipdfmx converts to UTF-16.
    -    % So we do not convert.
    -    \txiescapepdf\pdfoutlinetext
    -  }}
    -  %
    -  \def\pdfmkdest#1{%
    -    \setpdfdestname{#1}%
    -    \safewhatsit{\pdfdest name{\pdfdestname} xyz}%
    -  }
    -  %
    -  % by default, use black for everything.
    -  \def\urlcolor{\rgbBlack}
    -  \def\linkcolor{\rgbBlack}
    -  \def\endlink{\setcolor{\maincolor}\pdfendlink}
    -  %
    -  \def\dopdfoutline#1#2#3#4{%
    -    \setpdfoutlinetext{#1}
    -    \setpdfdestname{#3}
    -    \ifx\pdfdestname\empty
    -      \def\pdfdestname{#4}%
    -    \fi
    -    %
    -    \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A
    -      << /S /GoTo /D (\pdfdestname) >> >> }%
    -  }
    -  %
    -  \def\pdfmakeoutlines{%
    -    \begingroup
    -      %
    -      % For XeTeX, counts of subentries are not necessary.
    -      % Therefore, we read toc only once.
    -      %
    -      % We use node names as destinations.
    -      \def\partentry##1##2##3##4{}% ignore parts in the outlines
    -      \def\numchapentry##1##2##3##4{%
    -        \dopdfoutline{##1}{1}{##3}{##4}}%
    -      \def\numsecentry##1##2##3##4{%
    -        \dopdfoutline{##1}{2}{##3}{##4}}%
    -      \def\numsubsecentry##1##2##3##4{%
    -        \dopdfoutline{##1}{3}{##3}{##4}}%
    -      \def\numsubsubsecentry##1##2##3##4{%
    -        \dopdfoutline{##1}{4}{##3}{##4}}%
    -      %
    -      \let\appentry\numchapentry%
    -      \let\appsecentry\numsecentry%
    -      \let\appsubsecentry\numsubsecentry%
    -      \let\appsubsubsecentry\numsubsubsecentry%
    -      \let\unnchapentry\numchapentry%
    -      \let\unnsecentry\numsecentry%
    -      \let\unnsubsecentry\numsubsecentry%
    -      \let\unnsubsubsecentry\numsubsubsecentry%
    -      %
    -      % For XeTeX, xdvipdfmx converts strings to UTF-16.
    -      % Therefore, the encoding and the language may not be considered.
    -      %
    -      \indexnofonts
    -      \setupdatafile
    -      % We can have normal brace characters in the PDF outlines, unlike
    -      % Texinfo index files.  So set that up.
    -      \def\{{\lbracecharliteral}%
    -      \def\}{\rbracecharliteral}%
    -      \catcode`\\=\active \otherbackslash
    -      \input \tocreadfilename
    -    \endgroup
    -  }
    -  {\catcode`[=1 \catcode`]=2
    -   \catcode`{=\other \catcode`}=\other
    -   \gdef\lbracecharliteral[{]%
    -   \gdef\rbracecharliteral[}]%
    -  ]
    -
    -  \special{pdf:docview << /PageMode /UseOutlines >> }
    -  % ``\special{pdf:tounicode ...}'' is not necessary
    -  % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it.
    -  % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315,
    -  % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings.
    -  % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753).
    -%
    -  \def\skipspaces#1{\def\PP{#1}\def\D{|}%
    -    \ifx\PP\D\let\nextsp\relax
    -    \else\let\nextsp\skipspaces
    -      \addtokens{\filename}{\PP}%
    -      \advance\filenamelength by 1
    -    \fi
    -    \nextsp}
    -  \def\getfilename#1{%
    -    \filenamelength=0
    -    % If we don't expand the argument now, \skipspaces will get
    -    % snagged on things like "@value{foo}".
    -    \edef\temp{#1}%
    -    \expandafter\skipspaces\temp|\relax
    -  }
    -  % make a live url in pdf output.
    -  \def\pdfurl#1{%
    -    \begingroup
    -      % it seems we really need yet another set of dummies; have not
    -      % tried to figure out what each command should do in the context
    -      % of @url.  for now, just make @/ a no-op, that's the only one
    -      % people have actually reported a problem with.
    -      %
    -      \normalturnoffactive
    -      \def\@{@}%
    -      \let\/=\empty
    -      \makevalueexpandable
    -      % do we want to go so far as to use \indexnofonts instead of just
    -      % special-casing \var here?
    -      \def\var##1{##1}%
    -      %
    -      \leavevmode\setcolor{\urlcolor}%
    -      \special{pdf:bann << /Border [0 0 0]
    -        /Subtype /Link /A << /S /URI /URI (#1) >> >>}%
    -    \endgroup}
    -  \def\endlink{\setcolor{\maincolor}\special{pdf:eann}}
    -  \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}}
    -  \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks}
    -  \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks}
    -  \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}}
    -  \def\maketoks{%
    -    \expandafter\poptoks\the\toksA|ENDTOKS|\relax
    -    \ifx\first0\adn0
    -    \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3
    -    \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6
    -    \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9
    -    \else
    -      \ifnum0=\countA\else\makelink\fi
    -      \ifx\first.\let\next=\done\else
    -        \let\next=\maketoks
    -        \addtokens{\toksB}{\the\toksD}
    -        \ifx\first,\addtokens{\toksB}{\space}\fi
    -      \fi
    -    \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    -    \next}
    -  \def\makelink{\addtokens{\toksB}%
    -    {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0}
    -  \def\pdflink#1{%
    -    \special{pdf:bann << /Border [0 0 0]
    -      /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}%
    -    \setcolor{\linkcolor}#1\endlink}
    -  \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st}
    -%
    -  %
    -  % @image support
    -  %
    -  % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto).
    -  \def\doxeteximage#1#2#3{%
    -    \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}%
    -    \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}%
    -    %
    -    % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among
    -    % others).  Let's try in that order, PDF first since if
    -    % someone has a scalable image, presumably better to use that than a
    -    % bitmap.
    -    \let\xeteximgext=\empty
    -    \begingroup
    -      \openin 1 #1.pdf \ifeof 1
    -        \openin 1 #1.PDF \ifeof 1
    -          \openin 1 #1.png \ifeof 1
    -            \openin 1 #1.jpg \ifeof 1
    -              \openin 1 #1.jpeg \ifeof 1
    -                \openin 1 #1.JPG \ifeof 1
    -                  \errmessage{Could not find image file #1 for XeTeX}%
    -                \else \gdef\xeteximgext{JPG}%
    -                \fi
    -              \else \gdef\xeteximgext{jpeg}%
    -              \fi
    -            \else \gdef\xeteximgext{jpg}%
    -            \fi
    -          \else \gdef\xeteximgext{png}%
    -          \fi
    -        \else \gdef\xeteximgext{PDF}%
    -        \fi
    -      \else \gdef\xeteximgext{pdf}%
    -      \fi
    -      \closein 1
    -    \endgroup
    -    %
    -    \def\xetexpdfext{pdf}%
    -    \ifx\xeteximgext\xetexpdfext
    -      \XeTeXpdffile "#1".\xeteximgext ""
    -    \else
    -      \def\xetexpdfext{PDF}%
    -      \ifx\xeteximgext\xetexpdfext
    -        \XeTeXpdffile "#1".\xeteximgext ""
    -      \else
    -        \XeTeXpicfile "#1".\xeteximgext ""
    -      \fi
    -    \fi
    -    \ifdim \wd0 >0pt width \xeteximagewidth \fi
    -    \ifdim \wd2 >0pt height \xeteximageheight \fi \relax
    -  }
    -\fi
    -
    -
    -%
    -\message{fonts,}
    -
    -% Set the baselineskip to #1, and the lineskip and strut size
    -% correspondingly.  There is no deep meaning behind these magic numbers
    -% used as factors; they just match (closely enough) what Knuth defined.
    -%
    -\def\lineskipfactor{.08333}
    -\def\strutheightpercent{.70833}
    -\def\strutdepthpercent {.29167}
    -%
    -% can get a sort of poor man's double spacing by redefining this.
    -\def\baselinefactor{1}
    -%
    -\newdimen\textleading
    -\def\setleading#1{%
    -  \dimen0 = #1\relax
    -  \normalbaselineskip = \baselinefactor\dimen0
    -  \normallineskip = \lineskipfactor\normalbaselineskip
    -  \normalbaselines
    -  \setbox\strutbox =\hbox{%
    -    \vrule width0pt height\strutheightpercent\baselineskip
    -                    depth \strutdepthpercent \baselineskip
    -  }%
    -}
    -
    -% PDF CMaps.  See also LaTeX's t1.cmap.
    -%
    -% do nothing with this by default.
    -\expandafter\let\csname cmapOT1\endcsname\gobble
    -\expandafter\let\csname cmapOT1IT\endcsname\gobble
    -\expandafter\let\csname cmapOT1TT\endcsname\gobble
    -
    -% if we are producing pdf, and we have \pdffontattr, then define cmaps.
    -% (\pdffontattr was introduced many years ago, but people still run
    -% older pdftex's; it's easy to conditionalize, so we do.)
    -\ifpdf \ifx\pdffontattr\thisisundefined \else
    -  \begingroup
    -    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    -    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
    -%%DocumentNeededResources: ProcSet (CIDInit)
    -%%IncludeResource: ProcSet (CIDInit)
    -%%BeginResource: CMap (TeX-OT1-0)
    -%%Title: (TeX-OT1-0 TeX OT1 0)
    -%%Version: 1.000
    -%%EndComments
    -/CIDInit /ProcSet findresource begin
    -12 dict begin
    -begincmap
    -/CIDSystemInfo
    -<< /Registry (TeX)
    -/Ordering (OT1)
    -/Supplement 0
    ->> def
    -/CMapName /TeX-OT1-0 def
    -/CMapType 2 def
    -1 begincodespacerange
    -<00> <7F>
    -endcodespacerange
    -8 beginbfrange
    -<00> <01> <0393>
    -<09> <0A> <03A8>
    -<23> <26> <0023>
    -<28> <3B> <0028>
    -<3F> <5B> <003F>
    -<5D> <5E> <005D>
    -<61> <7A> <0061>
    -<7B> <7C> <2013>
    -endbfrange
    -40 beginbfchar
    -<02> <0398>
    -<03> <039B>
    -<04> <039E>
    -<05> <03A0>
    -<06> <03A3>
    -<07> <03D2>
    -<08> <03A6>
    -<0B> <00660066>
    -<0C> <00660069>
    -<0D> <0066006C>
    -<0E> <006600660069>
    -<0F> <00660066006C>
    -<10> <0131>
    -<11> <0237>
    -<12> <0060>
    -<13> <00B4>
    -<14> <02C7>
    -<15> <02D8>
    -<16> <00AF>
    -<17> <02DA>
    -<18> <00B8>
    -<19> <00DF>
    -<1A> <00E6>
    -<1B> <0153>
    -<1C> <00F8>
    -<1D> <00C6>
    -<1E> <0152>
    -<1F> <00D8>
    -<21> <0021>
    -<22> <201D>
    -<27> <2019>
    -<3C> <00A1>
    -<3D> <003D>
    -<3E> <00BF>
    -<5C> <201C>
    -<5F> <02D9>
    -<60> <2018>
    -<7D> <02DD>
    -<7E> <007E>
    -<7F> <00A8>
    -endbfchar
    -endcmap
    -CMapName currentdict /CMap defineresource pop
    -end
    -end
    -%%EndResource
    -%%EOF
    -    }\endgroup
    -  \expandafter\edef\csname cmapOT1\endcsname#1{%
    -    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
    -  }%
    -%
    -% \cmapOT1IT
    -  \begingroup
    -    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    -    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
    -%%DocumentNeededResources: ProcSet (CIDInit)
    -%%IncludeResource: ProcSet (CIDInit)
    -%%BeginResource: CMap (TeX-OT1IT-0)
    -%%Title: (TeX-OT1IT-0 TeX OT1IT 0)
    -%%Version: 1.000
    -%%EndComments
    -/CIDInit /ProcSet findresource begin
    -12 dict begin
    -begincmap
    -/CIDSystemInfo
    -<< /Registry (TeX)
    -/Ordering (OT1IT)
    -/Supplement 0
    ->> def
    -/CMapName /TeX-OT1IT-0 def
    -/CMapType 2 def
    -1 begincodespacerange
    -<00> <7F>
    -endcodespacerange
    -8 beginbfrange
    -<00> <01> <0393>
    -<09> <0A> <03A8>
    -<25> <26> <0025>
    -<28> <3B> <0028>
    -<3F> <5B> <003F>
    -<5D> <5E> <005D>
    -<61> <7A> <0061>
    -<7B> <7C> <2013>
    -endbfrange
    -42 beginbfchar
    -<02> <0398>
    -<03> <039B>
    -<04> <039E>
    -<05> <03A0>
    -<06> <03A3>
    -<07> <03D2>
    -<08> <03A6>
    -<0B> <00660066>
    -<0C> <00660069>
    -<0D> <0066006C>
    -<0E> <006600660069>
    -<0F> <00660066006C>
    -<10> <0131>
    -<11> <0237>
    -<12> <0060>
    -<13> <00B4>
    -<14> <02C7>
    -<15> <02D8>
    -<16> <00AF>
    -<17> <02DA>
    -<18> <00B8>
    -<19> <00DF>
    -<1A> <00E6>
    -<1B> <0153>
    -<1C> <00F8>
    -<1D> <00C6>
    -<1E> <0152>
    -<1F> <00D8>
    -<21> <0021>
    -<22> <201D>
    -<23> <0023>
    -<24> <00A3>
    -<27> <2019>
    -<3C> <00A1>
    -<3D> <003D>
    -<3E> <00BF>
    -<5C> <201C>
    -<5F> <02D9>
    -<60> <2018>
    -<7D> <02DD>
    -<7E> <007E>
    -<7F> <00A8>
    -endbfchar
    -endcmap
    -CMapName currentdict /CMap defineresource pop
    -end
    -end
    -%%EndResource
    -%%EOF
    -    }\endgroup
    -  \expandafter\edef\csname cmapOT1IT\endcsname#1{%
    -    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
    -  }%
    -%
    -% \cmapOT1TT
    -  \begingroup
    -    \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char.
    -    \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap
    -%%DocumentNeededResources: ProcSet (CIDInit)
    -%%IncludeResource: ProcSet (CIDInit)
    -%%BeginResource: CMap (TeX-OT1TT-0)
    -%%Title: (TeX-OT1TT-0 TeX OT1TT 0)
    -%%Version: 1.000
    -%%EndComments
    -/CIDInit /ProcSet findresource begin
    -12 dict begin
    -begincmap
    -/CIDSystemInfo
    -<< /Registry (TeX)
    -/Ordering (OT1TT)
    -/Supplement 0
    ->> def
    -/CMapName /TeX-OT1TT-0 def
    -/CMapType 2 def
    -1 begincodespacerange
    -<00> <7F>
    -endcodespacerange
    -5 beginbfrange
    -<00> <01> <0393>
    -<09> <0A> <03A8>
    -<21> <26> <0021>
    -<28> <5F> <0028>
    -<61> <7E> <0061>
    -endbfrange
    -32 beginbfchar
    -<02> <0398>
    -<03> <039B>
    -<04> <039E>
    -<05> <03A0>
    -<06> <03A3>
    -<07> <03D2>
    -<08> <03A6>
    -<0B> <2191>
    -<0C> <2193>
    -<0D> <0027>
    -<0E> <00A1>
    -<0F> <00BF>
    -<10> <0131>
    -<11> <0237>
    -<12> <0060>
    -<13> <00B4>
    -<14> <02C7>
    -<15> <02D8>
    -<16> <00AF>
    -<17> <02DA>
    -<18> <00B8>
    -<19> <00DF>
    -<1A> <00E6>
    -<1B> <0153>
    -<1C> <00F8>
    -<1D> <00C6>
    -<1E> <0152>
    -<1F> <00D8>
    -<20> <2423>
    -<27> <2019>
    -<60> <2018>
    -<7F> <00A8>
    -endbfchar
    -endcmap
    -CMapName currentdict /CMap defineresource pop
    -end
    -end
    -%%EndResource
    -%%EOF
    -    }\endgroup
    -  \expandafter\edef\csname cmapOT1TT\endcsname#1{%
    -    \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}%
    -  }%
    -\fi\fi
    -
    -
    -% Set the font macro #1 to the font named \fontprefix#2.
    -% #3 is the font's design size, #4 is a scale factor, #5 is the CMap
    -% encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit).
    -% Example:
    -% #1 = \textrm
    -% #2 = \rmshape
    -% #3 = 10
    -% #4 = \mainmagstep
    -% #5 = OT1
    -%
    -\def\setfont#1#2#3#4#5{%
    -  \font#1=\fontprefix#2#3 scaled #4
    -  \csname cmap#5\endcsname#1%
    -}
    -% This is what gets called when #5 of \setfont is empty.
    -\let\cmap\gobble
    -%
    -% (end of cmaps)
    -
    -% Use cm as the default font prefix.
    -% To specify the font prefix, you must define \fontprefix
    -% before you read in texinfo.tex.
    -\ifx\fontprefix\thisisundefined
    -\def\fontprefix{cm}
    -\fi
    -% Support font families that don't use the same naming scheme as CM.
    -\def\rmshape{r}
    -\def\rmbshape{bx}               % where the normal face is bold
    -\def\bfshape{b}
    -\def\bxshape{bx}
    -\def\ttshape{tt}
    -\def\ttbshape{tt}
    -\def\ttslshape{sltt}
    -\def\itshape{ti}
    -\def\itbshape{bxti}
    -\def\slshape{sl}
    -\def\slbshape{bxsl}
    -\def\sfshape{ss}
    -\def\sfbshape{ss}
    -\def\scshape{csc}
    -\def\scbshape{csc}
    -
    -% Definitions for a main text size of 11pt.  (The default in Texinfo.)
    -%
    -\def\definetextfontsizexi{%
    -% Text fonts (11.2pt, magstep1).
    -\def\textnominalsize{11pt}
    -\edef\mainmagstep{\magstephalf}
    -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
    -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
    -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
    -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
    -\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
    -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
    -\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
    -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
    -\font\texti=cmmi10 scaled \mainmagstep
    -\font\textsy=cmsy10 scaled \mainmagstep
    -\def\textecsize{1095}
    -
    -% A few fonts for @defun names and args.
    -\setfont\defbf\bfshape{10}{\magstep1}{OT1}
    -\setfont\deftt\ttshape{10}{\magstep1}{OT1TT}
    -\setfont\defsl\slshape{10}{\magstep1}{OT1}
    -\setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT}
    -\def\df{\let\ttfont=\deftt \let\bffont = \defbf
    -\let\ttslfont=\defttsl \let\slfont=\defsl \bf}
    -
    -% Fonts for indices, footnotes, small examples (9pt).
    -\def\smallnominalsize{9pt}
    -\setfont\smallrm\rmshape{9}{1000}{OT1}
    -\setfont\smalltt\ttshape{9}{1000}{OT1TT}
    -\setfont\smallbf\bfshape{10}{900}{OT1}
    -\setfont\smallit\itshape{9}{1000}{OT1IT}
    -\setfont\smallsl\slshape{9}{1000}{OT1}
    -\setfont\smallsf\sfshape{9}{1000}{OT1}
    -\setfont\smallsc\scshape{10}{900}{OT1}
    -\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
    -\font\smalli=cmmi9
    -\font\smallsy=cmsy9
    -\def\smallecsize{0900}
    -
    -% Fonts for small examples (8pt).
    -\def\smallernominalsize{8pt}
    -\setfont\smallerrm\rmshape{8}{1000}{OT1}
    -\setfont\smallertt\ttshape{8}{1000}{OT1TT}
    -\setfont\smallerbf\bfshape{10}{800}{OT1}
    -\setfont\smallerit\itshape{8}{1000}{OT1IT}
    -\setfont\smallersl\slshape{8}{1000}{OT1}
    -\setfont\smallersf\sfshape{8}{1000}{OT1}
    -\setfont\smallersc\scshape{10}{800}{OT1}
    -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
    -\font\smalleri=cmmi8
    -\font\smallersy=cmsy8
    -\def\smallerecsize{0800}
    -
    -% Fonts for math mode superscripts (7pt).
    -\def\sevennominalsize{7pt}
    -\setfont\sevenrm\rmshape{7}{1000}{OT1}
    -\setfont\seventt\ttshape{10}{700}{OT1TT}
    -\setfont\sevenbf\bfshape{10}{700}{OT1}
    -\setfont\sevenit\itshape{7}{1000}{OT1IT}
    -\setfont\sevensl\slshape{10}{700}{OT1}
    -\setfont\sevensf\sfshape{10}{700}{OT1}
    -\setfont\sevensc\scshape{10}{700}{OT1}
    -\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
    -\font\seveni=cmmi7
    -\font\sevensy=cmsy7
    -\def\sevenecsize{0700}
    -
    -% Fonts for title page (20.4pt):
    -\def\titlenominalsize{20pt}
    -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
    -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
    -\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
    -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
    -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
    -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
    -\let\titlebf=\titlerm
    -\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
    -\font\titlei=cmmi12 scaled \magstep3
    -\font\titlesy=cmsy10 scaled \magstep4
    -\def\titleecsize{2074}
    -
    -% Chapter (and unnumbered) fonts (17.28pt).
    -\def\chapnominalsize{17pt}
    -\setfont\chaprm\rmbshape{12}{\magstep2}{OT1}
    -\setfont\chapit\itbshape{10}{\magstep3}{OT1IT}
    -\setfont\chapsl\slbshape{10}{\magstep3}{OT1}
    -\setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT}
    -\setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT}
    -\setfont\chapsf\sfbshape{17}{1000}{OT1}
    -\let\chapbf=\chaprm
    -\setfont\chapsc\scbshape{10}{\magstep3}{OT1}
    -\font\chapi=cmmi12 scaled \magstep2
    -\font\chapsy=cmsy10 scaled \magstep3
    -\def\chapecsize{1728}
    -
    -% Section fonts (14.4pt).
    -\def\secnominalsize{14pt}
    -\setfont\secrm\rmbshape{12}{\magstep1}{OT1}
    -\setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1}
    -\setfont\secit\itbshape{10}{\magstep2}{OT1IT}
    -\setfont\secsl\slbshape{10}{\magstep2}{OT1}
    -\setfont\sectt\ttbshape{12}{\magstep1}{OT1TT}
    -\setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT}
    -\setfont\secsf\sfbshape{12}{\magstep1}{OT1}
    -\let\secbf\secrm
    -\setfont\secsc\scbshape{10}{\magstep2}{OT1}
    -\font\seci=cmmi12 scaled \magstep1
    -\font\secsy=cmsy10 scaled \magstep2
    -\def\sececsize{1440}
    -
    -% Subsection fonts (13.15pt).
    -\def\ssecnominalsize{13pt}
    -\setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1}
    -\setfont\ssecit\itbshape{10}{1315}{OT1IT}
    -\setfont\ssecsl\slbshape{10}{1315}{OT1}
    -\setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT}
    -\setfont\ssecttsl\ttslshape{10}{1315}{OT1TT}
    -\setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1}
    -\let\ssecbf\ssecrm
    -\setfont\ssecsc\scbshape{10}{1315}{OT1}
    -\font\sseci=cmmi12 scaled \magstephalf
    -\font\ssecsy=cmsy10 scaled 1315
    -\def\ssececsize{1200}
    -
    -% Reduced fonts for @acronym in text (10pt).
    -\def\reducednominalsize{10pt}
    -\setfont\reducedrm\rmshape{10}{1000}{OT1}
    -\setfont\reducedtt\ttshape{10}{1000}{OT1TT}
    -\setfont\reducedbf\bfshape{10}{1000}{OT1}
    -\setfont\reducedit\itshape{10}{1000}{OT1IT}
    -\setfont\reducedsl\slshape{10}{1000}{OT1}
    -\setfont\reducedsf\sfshape{10}{1000}{OT1}
    -\setfont\reducedsc\scshape{10}{1000}{OT1}
    -\setfont\reducedttsl\ttslshape{10}{1000}{OT1TT}
    -\font\reducedi=cmmi10
    -\font\reducedsy=cmsy10
    -\def\reducedecsize{1000}
    -
    -\textleading = 13.2pt % line spacing for 11pt CM
    -\textfonts            % reset the current fonts
    -\rm
    -} % end of 11pt text font size definitions, \definetextfontsizexi
    -
    -
    -% Definitions to make the main text be 10pt Computer Modern, with
    -% section, chapter, etc., sizes following suit.  This is for the GNU
    -% Press printing of the Emacs 22 manual.  Maybe other manuals in the
    -% future.  Used with @smallbook, which sets the leading to 12pt.
    -%
    -\def\definetextfontsizex{%
    -% Text fonts (10pt).
    -\def\textnominalsize{10pt}
    -\edef\mainmagstep{1000}
    -\setfont\textrm\rmshape{10}{\mainmagstep}{OT1}
    -\setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT}
    -\setfont\textbf\bfshape{10}{\mainmagstep}{OT1}
    -\setfont\textit\itshape{10}{\mainmagstep}{OT1IT}
    -\setfont\textsl\slshape{10}{\mainmagstep}{OT1}
    -\setfont\textsf\sfshape{10}{\mainmagstep}{OT1}
    -\setfont\textsc\scshape{10}{\mainmagstep}{OT1}
    -\setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT}
    -\font\texti=cmmi10 scaled \mainmagstep
    -\font\textsy=cmsy10 scaled \mainmagstep
    -\def\textecsize{1000}
    -
    -% A few fonts for @defun names and args.
    -\setfont\defbf\bfshape{10}{\magstephalf}{OT1}
    -\setfont\deftt\ttshape{10}{\magstephalf}{OT1TT}
    -\setfont\defsl\slshape{10}{\magstephalf}{OT1}
    -\setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT}
    -\def\df{\let\ttfont=\deftt \let\bffont = \defbf
    -\let\slfont=\defsl \let\ttslfont=\defttsl \bf}
    -
    -% Fonts for indices, footnotes, small examples (9pt).
    -\def\smallnominalsize{9pt}
    -\setfont\smallrm\rmshape{9}{1000}{OT1}
    -\setfont\smalltt\ttshape{9}{1000}{OT1TT}
    -\setfont\smallbf\bfshape{10}{900}{OT1}
    -\setfont\smallit\itshape{9}{1000}{OT1IT}
    -\setfont\smallsl\slshape{9}{1000}{OT1}
    -\setfont\smallsf\sfshape{9}{1000}{OT1}
    -\setfont\smallsc\scshape{10}{900}{OT1}
    -\setfont\smallttsl\ttslshape{10}{900}{OT1TT}
    -\font\smalli=cmmi9
    -\font\smallsy=cmsy9
    -\def\smallecsize{0900}
    -
    -% Fonts for small examples (8pt).
    -\def\smallernominalsize{8pt}
    -\setfont\smallerrm\rmshape{8}{1000}{OT1}
    -\setfont\smallertt\ttshape{8}{1000}{OT1TT}
    -\setfont\smallerbf\bfshape{10}{800}{OT1}
    -\setfont\smallerit\itshape{8}{1000}{OT1IT}
    -\setfont\smallersl\slshape{8}{1000}{OT1}
    -\setfont\smallersf\sfshape{8}{1000}{OT1}
    -\setfont\smallersc\scshape{10}{800}{OT1}
    -\setfont\smallerttsl\ttslshape{10}{800}{OT1TT}
    -\font\smalleri=cmmi8
    -\font\smallersy=cmsy8
    -\def\smallerecsize{0800}
    -
    -% Fonts for math mode superscripts (7pt).
    -\def\sevennominalsize{7pt}
    -\setfont\sevenrm\rmshape{7}{1000}{OT1}
    -\setfont\seventt\ttshape{10}{700}{OT1TT}
    -\setfont\sevenbf\bfshape{10}{700}{OT1}
    -\setfont\sevenit\itshape{7}{1000}{OT1IT}
    -\setfont\sevensl\slshape{10}{700}{OT1}
    -\setfont\sevensf\sfshape{10}{700}{OT1}
    -\setfont\sevensc\scshape{10}{700}{OT1}
    -\setfont\seventtsl\ttslshape{10}{700}{OT1TT}
    -\font\seveni=cmmi7
    -\font\sevensy=cmsy7
    -\def\sevenecsize{0700}
    -
    -% Fonts for title page (20.4pt):
    -\def\titlenominalsize{20pt}
    -\setfont\titlerm\rmbshape{12}{\magstep3}{OT1}
    -\setfont\titleit\itbshape{10}{\magstep4}{OT1IT}
    -\setfont\titlesl\slbshape{10}{\magstep4}{OT1}
    -\setfont\titlett\ttbshape{12}{\magstep3}{OT1TT}
    -\setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT}
    -\setfont\titlesf\sfbshape{17}{\magstep1}{OT1}
    -\let\titlebf=\titlerm
    -\setfont\titlesc\scbshape{10}{\magstep4}{OT1}
    -\font\titlei=cmmi12 scaled \magstep3
    -\font\titlesy=cmsy10 scaled \magstep4
    -\def\titleecsize{2074}
    -
    -% Chapter fonts (14.4pt).
    -\def\chapnominalsize{14pt}
    -\setfont\chaprm\rmbshape{12}{\magstep1}{OT1}
    -\setfont\chapit\itbshape{10}{\magstep2}{OT1IT}
    -\setfont\chapsl\slbshape{10}{\magstep2}{OT1}
    -\setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT}
    -\setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT}
    -\setfont\chapsf\sfbshape{12}{\magstep1}{OT1}
    -\let\chapbf\chaprm
    -\setfont\chapsc\scbshape{10}{\magstep2}{OT1}
    -\font\chapi=cmmi12 scaled \magstep1
    -\font\chapsy=cmsy10 scaled \magstep2
    -\def\chapecsize{1440}
    -
    -% Section fonts (12pt).
    -\def\secnominalsize{12pt}
    -\setfont\secrm\rmbshape{12}{1000}{OT1}
    -\setfont\secit\itbshape{10}{\magstep1}{OT1IT}
    -\setfont\secsl\slbshape{10}{\magstep1}{OT1}
    -\setfont\sectt\ttbshape{12}{1000}{OT1TT}
    -\setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT}
    -\setfont\secsf\sfbshape{12}{1000}{OT1}
    -\let\secbf\secrm
    -\setfont\secsc\scbshape{10}{\magstep1}{OT1}
    -\font\seci=cmmi12
    -\font\secsy=cmsy10 scaled \magstep1
    -\def\sececsize{1200}
    -
    -% Subsection fonts (10pt).
    -\def\ssecnominalsize{10pt}
    -\setfont\ssecrm\rmbshape{10}{1000}{OT1}
    -\setfont\ssecit\itbshape{10}{1000}{OT1IT}
    -\setfont\ssecsl\slbshape{10}{1000}{OT1}
    -\setfont\ssectt\ttbshape{10}{1000}{OT1TT}
    -\setfont\ssecttsl\ttslshape{10}{1000}{OT1TT}
    -\setfont\ssecsf\sfbshape{10}{1000}{OT1}
    -\let\ssecbf\ssecrm
    -\setfont\ssecsc\scbshape{10}{1000}{OT1}
    -\font\sseci=cmmi10
    -\font\ssecsy=cmsy10
    -\def\ssececsize{1000}
    -
    -% Reduced fonts for @acronym in text (9pt).
    -\def\reducednominalsize{9pt}
    -\setfont\reducedrm\rmshape{9}{1000}{OT1}
    -\setfont\reducedtt\ttshape{9}{1000}{OT1TT}
    -\setfont\reducedbf\bfshape{10}{900}{OT1}
    -\setfont\reducedit\itshape{9}{1000}{OT1IT}
    -\setfont\reducedsl\slshape{9}{1000}{OT1}
    -\setfont\reducedsf\sfshape{9}{1000}{OT1}
    -\setfont\reducedsc\scshape{10}{900}{OT1}
    -\setfont\reducedttsl\ttslshape{10}{900}{OT1TT}
    -\font\reducedi=cmmi9
    -\font\reducedsy=cmsy9
    -\def\reducedecsize{0900}
    -
    -\divide\parskip by 2  % reduce space between paragraphs
    -\textleading = 12pt   % line spacing for 10pt CM
    -\textfonts            % reset the current fonts
    -\rm
    -} % end of 10pt text font size definitions, \definetextfontsizex
    -
    -% Fonts for short table of contents.
    -\setfont\shortcontrm\rmshape{12}{1000}{OT1}
    -\setfont\shortcontbf\bfshape{10}{\magstep1}{OT1}  % no cmb12
    -\setfont\shortcontsl\slshape{12}{1000}{OT1}
    -\setfont\shortconttt\ttshape{12}{1000}{OT1TT}
    -
    -
    -% We provide the user-level command
    -%   @fonttextsize 10
    -% (or 11) to redefine the text font size.  pt is assumed.
    -%
    -\def\xiword{11}
    -\def\xword{10}
    -\def\xwordpt{10pt}
    -%
    -\parseargdef\fonttextsize{%
    -  \def\textsizearg{#1}%
    -  %\wlog{doing @fonttextsize \textsizearg}%
    -  %
    -  % Set \globaldefs so that documents can use this inside @tex, since
    -  % makeinfo 4.8 does not support it, but we need it nonetheless.
    -  %
    - \begingroup \globaldefs=1
    -  \ifx\textsizearg\xword \definetextfontsizex
    -  \else \ifx\textsizearg\xiword \definetextfontsizexi
    -  \else
    -    \errhelp=\EMsimple
    -    \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'}
    -  \fi\fi
    - \endgroup
    -}
    -
    -%
    -% Change the current font style to #1, remembering it in \curfontstyle.
    -% For now, we do not accumulate font styles: @b{@i{foo}} prints foo in
    -% italics, not bold italics.
    -%
    -\def\setfontstyle#1{%
    -  \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd.
    -  \csname #1font\endcsname  % change the current font
    -}
    -
    -\def\rm{\fam=0 \setfontstyle{rm}}
    -\def\it{\fam=\itfam \setfontstyle{it}}
    -\def\sl{\fam=\slfam \setfontstyle{sl}}
    -\def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf}
    -\def\tt{\fam=\ttfam \setfontstyle{tt}}
    -
    -% Texinfo sort of supports the sans serif font style, which plain TeX does not.
    -% So we set up a \sf.
    -\newfam\sffam
    -\def\sf{\fam=\sffam \setfontstyle{sf}}
    -
    -% We don't need math for this font style.
    -\def\ttsl{\setfontstyle{ttsl}}
    -
    -
    -% In order for the font changes to affect most math symbols and letters,
    -% we have to define the \textfont of the standard families.
    -% We don't bother to reset \scriptscriptfont; awaiting user need.
    -%
    -\def\resetmathfonts{%
    -  \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont
    -  \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont
    -  \textfont\ttfam=\ttfont \textfont\sffam=\sffont
    -  %
    -  % Fonts for superscript.  Note that the 7pt fonts are used regardless
    -  % of the current font size.
    -  \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy
    -  \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl
    -  \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt
    -  \scriptfont\sffam=\sevensf
    -}
    -
    -%
    -
    -% The font-changing commands (all called \...fonts) redefine the meanings
    -% of \STYLEfont, instead of just \STYLE.  We do this because \STYLE needs
    -% to also set the current \fam for math mode.  Our \STYLE (e.g., \rm)
    -% commands hardwire \STYLEfont to set the current font.
    -%
    -% The fonts used for \ifont are for "math italics"  (\itfont is for italics
    -% in regular text).  \syfont is also used in math mode only.
    -%
    -% Each font-changing command also sets the names \lsize (one size lower)
    -% and \lllsize (three sizes lower).  These relative commands are used
    -% in, e.g., the LaTeX logo and acronyms.
    -%
    -% This all needs generalizing, badly.
    -%
    -
    -\def\assignfonts#1{%
    -  \expandafter\let\expandafter\rmfont\csname #1rm\endcsname
    -  \expandafter\let\expandafter\itfont\csname #1it\endcsname
    -  \expandafter\let\expandafter\slfont\csname #1sl\endcsname
    -  \expandafter\let\expandafter\bffont\csname #1bf\endcsname
    -  \expandafter\let\expandafter\ttfont\csname #1tt\endcsname
    -  \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname
    -  \expandafter\let\expandafter\sffont  \csname #1sf\endcsname
    -  \expandafter\let\expandafter\ifont   \csname #1i\endcsname
    -  \expandafter\let\expandafter\syfont  \csname #1sy\endcsname
    -  \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname
    -}
    -
    -\newif\ifrmisbold
    -
    -% Select smaller font size with the current style.  Used to change font size
    -% in, e.g., the LaTeX logo and acronyms.  If we are using bold fonts for
    -% normal roman text, also use bold fonts for roman text in the smaller size.
    -\def\switchtolllsize{%
    -   \expandafter\assignfonts\expandafter{\lllsize}%
    -   \ifrmisbold
    -     \let\rmfont\bffont
    -   \fi
    -   \csname\curfontstyle\endcsname
    -}%
    -
    -\def\switchtolsize{%
    -   \expandafter\assignfonts\expandafter{\lsize}%
    -   \ifrmisbold
    -     \let\rmfont\bffont
    -   \fi
    -   \csname\curfontstyle\endcsname
    -}%
    -
    -\def\definefontsetatsize#1#2#3#4#5{%
    -\expandafter\def\csname #1fonts\endcsname{%
    -  \def\curfontsize{#1}%
    -  \def\lsize{#2}\def\lllsize{#3}%
    -  \csname rmisbold#5\endcsname
    -  \assignfonts{#1}%
    -  \resetmathfonts
    -  \setleading{#4}%
    -}}
    -
    -\definefontsetatsize{text}   {reduced}{smaller}{\textleading}{false}
    -\definefontsetatsize{title}  {chap}   {subsec} {27pt}  {true}
    -\definefontsetatsize{chap}   {sec}    {text}   {19pt}  {true}
    -\definefontsetatsize{sec}    {subsec} {reduced}{17pt}  {true}
    -\definefontsetatsize{ssec}   {text}   {small}  {15pt}  {true}
    -\definefontsetatsize{reduced}{small}  {smaller}{10.5pt}{false}
    -\definefontsetatsize{small}  {smaller}{smaller}{10.5pt}{false}
    -\definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false}
    -
    -\def\titlefont#1{{\titlefonts\rm #1}}
    -\let\subsecfonts = \ssecfonts
    -\let\subsubsecfonts = \ssecfonts
    -
    -% Define these just so they can be easily changed for other fonts.
    -\def\angleleft{$\langle$}
    -\def\angleright{$\rangle$}
    -
    -% Set the fonts to use with the @small... environments.
    -\let\smallexamplefonts = \smallfonts
    -
    -% About \smallexamplefonts.  If we use \smallfonts (9pt), @smallexample
    -% can fit this many characters:
    -%   8.5x11=86   smallbook=72  a4=90  a5=69
    -% If we use \scriptfonts (8pt), then we can fit this many characters:
    -%   8.5x11=90+  smallbook=80  a4=90+  a5=77
    -% For me, subjectively, the few extra characters that fit aren't worth
    -% the additional smallness of 8pt.  So I'm making the default 9pt.
    -%
    -% By the way, for comparison, here's what fits with @example (10pt):
    -%   8.5x11=71  smallbook=60  a4=75  a5=58
    -% --karl, 24jan03.
    -
    -% Set up the default fonts, so we can use them for creating boxes.
    -%
    -\definetextfontsizexi
    -
    -
    -\message{markup,}
    -
    -% Check if we are currently using a typewriter font.  Since all the
    -% Computer Modern typewriter fonts have zero interword stretch (and
    -% shrink), and it is reasonable to expect all typewriter fonts to have
    -% this property, we can check that font parameter.
    -%
    -\def\ifmonospace{\ifdim\fontdimen3\font=0pt }
    -
    -% Markup style infrastructure.  \defmarkupstylesetup\INITMACRO will
    -% define and register \INITMACRO to be called on markup style changes.
    -% \INITMACRO can check \currentmarkupstyle for the innermost
    -% style.
    -
    -\let\currentmarkupstyle\empty
    -
    -\def\setupmarkupstyle#1{%
    -  \def\currentmarkupstyle{#1}%
    -  \markupstylesetup
    -}
    -
    -\let\markupstylesetup\empty
    -
    -\def\defmarkupstylesetup#1{%
    -  \expandafter\def\expandafter\markupstylesetup
    -    \expandafter{\markupstylesetup #1}%
    -  \def#1%
    -}
    -
    -% Markup style setup for left and right quotes.
    -\defmarkupstylesetup\markupsetuplq{%
    -  \expandafter\let\expandafter \temp
    -    \csname markupsetuplq\currentmarkupstyle\endcsname
    -  \ifx\temp\relax \markupsetuplqdefault \else \temp \fi
    -}
    -
    -\defmarkupstylesetup\markupsetuprq{%
    -  \expandafter\let\expandafter \temp
    -    \csname markupsetuprq\currentmarkupstyle\endcsname
    -  \ifx\temp\relax \markupsetuprqdefault \else \temp \fi
    -}
    -
    -{
    -\catcode`\'=\active
    -\catcode`\`=\active
    -
    -\gdef\markupsetuplqdefault{\let`\lq}
    -\gdef\markupsetuprqdefault{\let'\rq}
    -
    -\gdef\markupsetcodequoteleft{\let`\codequoteleft}
    -\gdef\markupsetcodequoteright{\let'\codequoteright}
    -}
    -
    -\let\markupsetuplqcode \markupsetcodequoteleft
    -\let\markupsetuprqcode \markupsetcodequoteright
    -%
    -\let\markupsetuplqexample \markupsetcodequoteleft
    -\let\markupsetuprqexample \markupsetcodequoteright
    -%
    -\let\markupsetuplqkbd     \markupsetcodequoteleft
    -\let\markupsetuprqkbd     \markupsetcodequoteright
    -%
    -\let\markupsetuplqsamp \markupsetcodequoteleft
    -\let\markupsetuprqsamp \markupsetcodequoteright
    -%
    -\let\markupsetuplqverb \markupsetcodequoteleft
    -\let\markupsetuprqverb \markupsetcodequoteright
    -%
    -\let\markupsetuplqverbatim \markupsetcodequoteleft
    -\let\markupsetuprqverbatim \markupsetcodequoteright
    -
    -% Allow an option to not use regular directed right quote/apostrophe
    -% (char 0x27), but instead the undirected quote from cmtt (char 0x0d).
    -% The undirected quote is ugly, so don't make it the default, but it
    -% works for pasting with more pdf viewers (at least evince), the
    -% lilypond developers report.  xpdf does work with the regular 0x27.
    -%
    -\def\codequoteright{%
    -  \ifmonospace
    -    \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax
    -      \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax
    -        '%
    -      \else \char'15 \fi
    -    \else \char'15 \fi
    -   \else
    -     '%
    -   \fi
    -}
    -%
    -% and a similar option for the left quote char vs. a grave accent.
    -% Modern fonts display ASCII 0x60 as a grave accent, so some people like
    -% the code environments to do likewise.
    -%
    -\def\codequoteleft{%
    -  \ifmonospace
    -    \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax
    -      \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax
    -        % [Knuth] pp. 380,381,391
    -        % \relax disables Spanish ligatures ?` and !` of \tt font.
    -        \relax`%
    -      \else \char'22 \fi
    -    \else \char'22 \fi
    -   \else
    -     \relax`%
    -   \fi
    -}
    -
    -% Commands to set the quote options.
    -%
    -\parseargdef\codequoteundirected{%
    -  \def\temp{#1}%
    -  \ifx\temp\onword
    -    \expandafter\let\csname SETtxicodequoteundirected\endcsname
    -      = t%
    -  \else\ifx\temp\offword
    -    \expandafter\let\csname SETtxicodequoteundirected\endcsname
    -      = \relax
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}%
    -  \fi\fi
    -}
    -%
    -\parseargdef\codequotebacktick{%
    -  \def\temp{#1}%
    -  \ifx\temp\onword
    -    \expandafter\let\csname SETtxicodequotebacktick\endcsname
    -      = t%
    -  \else\ifx\temp\offword
    -    \expandafter\let\csname SETtxicodequotebacktick\endcsname
    -      = \relax
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}%
    -  \fi\fi
    -}
    -
    -% [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font.
    -\def\noligaturesquoteleft{\relax\lq}
    -
    -% Count depth in font-changes, for error checks
    -\newcount\fontdepth \fontdepth=0
    -
    -% Font commands.
    -
    -% #1 is the font command (\sl or \it), #2 is the text to slant.
    -% If we are in a monospaced environment, however, 1) always use \ttsl,
    -% and 2) do not add an italic correction.
    -\def\dosmartslant#1#2{%
    -  \ifusingtt
    -    {{\ttsl #2}\let\next=\relax}%
    -    {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}%
    -  \next
    -}
    -\def\smartslanted{\dosmartslant\sl}
    -\def\smartitalic{\dosmartslant\it}
    -
    -% Output an italic correction unless \next (presumed to be the following
    -% character) is such as not to need one.
    -\def\smartitaliccorrection{%
    -  \ifx\next,%
    -  \else\ifx\next-%
    -  \else\ifx\next.%
    -  \else\ifx\next\.%
    -  \else\ifx\next\comma%
    -  \else\ptexslash
    -  \fi\fi\fi\fi\fi
    -  \aftersmartic
    -}
    -
    -% Unconditional use \ttsl, and no ic.  @var is set to this for defuns.
    -\def\ttslanted#1{{\ttsl #1}}
    -
    -% @cite is like \smartslanted except unconditionally use \sl.  We never want
    -% ttsl for book titles, do we?
    -\def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection}
    -
    -\def\aftersmartic{}
    -\def\var#1{%
    -  \let\saveaftersmartic = \aftersmartic
    -  \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}%
    -  \smartslanted{#1}%
    -}
    -
    -\let\i=\smartitalic
    -\let\slanted=\smartslanted
    -\let\dfn=\smartslanted
    -\let\emph=\smartitalic
    -
    -% Explicit font changes: @r, @sc, undocumented @ii.
    -\def\r#1{{\rm #1}}              % roman font
    -\def\sc#1{{\smallcaps#1}}       % smallcaps font
    -\def\ii#1{{\it #1}}             % italic font
    -
    -% @b, explicit bold.  Also @strong.
    -\def\b#1{{\bf #1}}
    -\let\strong=\b
    -
    -% @sansserif, explicit sans.
    -\def\sansserif#1{{\sf #1}}
    -
    -% We can't just use \exhyphenpenalty, because that only has effect at
    -% the end of a paragraph.  Restore normal hyphenation at the end of the
    -% group within which \nohyphenation is presumably called.
    -%
    -\def\nohyphenation{\hyphenchar\font = -1  \aftergroup\restorehyphenation}
    -\def\restorehyphenation{\hyphenchar\font = `- }
    -
    -% Set sfcode to normal for the chars that usually have another value.
    -% Can't use plain's \frenchspacing because it uses the `\x notation, and
    -% sometimes \x has an active definition that messes things up.
    -%
    -\catcode`@=11
    -  \def\plainfrenchspacing{%
    -    \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m
    -    \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m
    -    \def\endofsentencespacefactor{1000}% for @. and friends
    -  }
    -  \def\plainnonfrenchspacing{%
    -    \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000
    -    \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250
    -    \def\endofsentencespacefactor{3000}% for @. and friends
    -  }
    -\catcode`@=\other
    -\def\endofsentencespacefactor{3000}% default
    -
    -% @t, explicit typewriter.
    -\def\t#1{%
    -  {\tt \plainfrenchspacing #1}%
    -  \null
    -}
    -
    -% @samp.
    -\def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}}
    -
    -% @indicateurl is \samp, that is, with quotes.
    -\let\indicateurl=\samp
    -
    -% @code (and similar) prints in typewriter, but with spaces the same
    -% size as normal in the surrounding text, without hyphenation, etc.
    -% This is a subroutine for that.
    -\def\tclose#1{%
    -  {%
    -    % Change normal interword space to be same as for the current font.
    -    \spaceskip = \fontdimen2\font
    -    %
    -    % Switch to typewriter.
    -    \tt
    -    %
    -    % But `\ ' produces the large typewriter interword space.
    -    \def\ {{\spaceskip = 0pt{} }}%
    -    %
    -    % Turn off hyphenation.
    -    \nohyphenation
    -    %
    -    \plainfrenchspacing
    -    #1%
    -  }%
    -  \null % reset spacefactor to 1000
    -}
    -
    -% We *must* turn on hyphenation at `-' and `_' in @code.
    -% (But see \codedashfinish below.)
    -% Otherwise, it is too hard to avoid overfull hboxes
    -% in the Emacs manual, the Library manual, etc.
    -%
    -% Unfortunately, TeX uses one parameter (\hyphenchar) to control
    -% both hyphenation at - and hyphenation within words.
    -% We must therefore turn them both off (\tclose does that)
    -% and arrange explicitly to hyphenate at a dash. -- rms.
    -{
    -  \catcode`\-=\active \catcode`\_=\active
    -  \catcode`\'=\active \catcode`\`=\active
    -  \global\let'=\rq \global\let`=\lq  % default definitions
    -  %
    -  \global\def\code{\begingroup
    -    \setupmarkupstyle{code}%
    -    % The following should really be moved into \setupmarkupstyle handlers.
    -    \catcode\dashChar=\active  \catcode\underChar=\active
    -    \ifallowcodebreaks
    -     \let-\codedash
    -     \let_\codeunder
    -    \else
    -     \let-\normaldash
    -     \let_\realunder
    -    \fi
    -    % Given -foo (with a single dash), we do not want to allow a break
    -    % after the hyphen.
    -    \global\let\codedashprev=\codedash
    -    %
    -    \codex
    -  }
    -  %
    -  \gdef\codedash{\futurelet\next\codedashfinish}
    -  \gdef\codedashfinish{%
    -    \normaldash % always output the dash character itself.
    -    %
    -    % Now, output a discretionary to allow a line break, unless
    -    % (a) the next character is a -, or
    -    % (b) the preceding character is a -.
    -    % E.g., given --posix, we do not want to allow a break after either -.
    -    % Given --foo-bar, we do want to allow a break between the - and the b.
    -    \ifx\next\codedash \else
    -      \ifx\codedashprev\codedash
    -      \else \discretionary{}{}{}\fi
    -    \fi
    -    % we need the space after the = for the case when \next itself is a
    -    % space token; it would get swallowed otherwise.  As in @code{- a}.
    -    \global\let\codedashprev= \next
    -  }
    -}
    -\def\normaldash{-}
    -%
    -\def\codex #1{\tclose{#1}\endgroup}
    -
    -\def\codeunder{%
    -  % this is all so @math{@code{var_name}+1} can work.  In math mode, _
    -  % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.)
    -  % will therefore expand the active definition of _, which is us
    -  % (inside @code that is), therefore an endless loop.
    -  \ifusingtt{\ifmmode
    -               \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_.
    -             \else\normalunderscore \fi
    -             \discretionary{}{}{}}%
    -            {\_}%
    -}
    -
    -% An additional complication: the above will allow breaks after, e.g.,
    -% each of the four underscores in __typeof__.  This is bad.
    -% @allowcodebreaks provides a document-level way to turn breaking at -
    -% and _ on and off.
    -%
    -\newif\ifallowcodebreaks  \allowcodebreakstrue
    -
    -\def\keywordtrue{true}
    -\def\keywordfalse{false}
    -
    -\parseargdef\allowcodebreaks{%
    -  \def\txiarg{#1}%
    -  \ifx\txiarg\keywordtrue
    -    \allowcodebreakstrue
    -  \else\ifx\txiarg\keywordfalse
    -    \allowcodebreaksfalse
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}%
    -  \fi\fi
    -}
    -
    -% For @command, @env, @file, @option quotes seem unnecessary,
    -% so use \code rather than \samp.
    -\let\command=\code
    -\let\env=\code
    -\let\file=\code
    -\let\option=\code
    -
    -% @uref (abbreviation for `urlref') aka @url takes an optional
    -% (comma-separated) second argument specifying the text to display and
    -% an optional third arg as text to display instead of (rather than in
    -% addition to) the url itself.  First (mandatory) arg is the url.
    -
    -% TeX-only option to allow changing PDF output to show only the second
    -% arg (if given), and not the url (which is then just the link target).
    -\newif\ifurefurlonlylink
    -
    -% The main macro is \urefbreak, which allows breaking at expected
    -% places within the url.  (There used to be another version, which
    -% didn't support automatic breaking.)
    -\def\urefbreak{\begingroup \urefcatcodes \dourefbreak}
    -\let\uref=\urefbreak
    -%
    -\def\dourefbreak#1{\urefbreakfinish #1,,,\finish}
    -\def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example
    -  \unsepspaces
    -  \pdfurl{#1}%
    -  \setbox0 = \hbox{\ignorespaces #3}%
    -  \ifdim\wd0 > 0pt
    -    \unhbox0 % third arg given, show only that
    -  \else
    -    \setbox0 = \hbox{\ignorespaces #2}% look for second arg
    -    \ifdim\wd0 > 0pt
    -      \ifpdf
    -        % For pdfTeX and LuaTeX
    -        \ifurefurlonlylink
    -          % PDF plus option to not display url, show just arg
    -          \unhbox0
    -        \else
    -          % PDF, normally display both arg and url for consistency,
    -          % visibility, if the pdf is eventually used to print, etc.
    -          \unhbox0\ (\urefcode{#1})%
    -        \fi
    -      \else
    -        \ifx\XeTeXrevision\thisisundefined
    -          \unhbox0\ (\urefcode{#1})% DVI, always show arg and url
    -        \else
    -          % For XeTeX
    -          \ifurefurlonlylink
    -            % PDF plus option to not display url, show just arg
    -            \unhbox0
    -          \else
    -            % PDF, normally display both arg and url for consistency,
    -            % visibility, if the pdf is eventually used to print, etc.
    -            \unhbox0\ (\urefcode{#1})%
    -          \fi
    -        \fi
    -      \fi
    -    \else
    -      \urefcode{#1}% only url given, so show it
    -    \fi
    -  \fi
    -  \endlink
    -\endgroup}
    -
    -% Allow line breaks around only a few characters (only).
    -\def\urefcatcodes{%
    -  \catcode`\&=\active \catcode`\.=\active
    -  \catcode`\#=\active \catcode`\?=\active
    -  \catcode`\/=\active
    -}
    -{
    -  \urefcatcodes
    -  %
    -  \global\def\urefcode{\begingroup
    -    \setupmarkupstyle{code}%
    -    \urefcatcodes
    -    \let&\urefcodeamp
    -    \let.\urefcodedot
    -    \let#\urefcodehash
    -    \let?\urefcodequest
    -    \let/\urefcodeslash
    -    \codex
    -  }
    -  %
    -  % By default, they are just regular characters.
    -  \global\def&{\normalamp}
    -  \global\def.{\normaldot}
    -  \global\def#{\normalhash}
    -  \global\def?{\normalquest}
    -  \global\def/{\normalslash}
    -}
    -
    -\def\urefcodeamp{\urefprebreak \&\urefpostbreak}
    -\def\urefcodedot{\urefprebreak .\urefpostbreak}
    -\def\urefcodehash{\urefprebreak \#\urefpostbreak}
    -\def\urefcodequest{\urefprebreak ?\urefpostbreak}
    -\def\urefcodeslash{\futurelet\next\urefcodeslashfinish}
    -{
    -  \catcode`\/=\active
    -  \global\def\urefcodeslashfinish{%
    -    \urefprebreak \slashChar
    -    % Allow line break only after the final / in a sequence of
    -    % slashes, to avoid line break between the slashes in http://.
    -    \ifx\next/\else \urefpostbreak \fi
    -  }
    -}
    -
    -% By default we'll break after the special characters, but some people like to
    -% break before the special chars, so allow that.  Also allow no breaking at
    -% all, for manual control.
    -%
    -\parseargdef\urefbreakstyle{%
    -  \def\txiarg{#1}%
    -  \ifx\txiarg\wordnone
    -    \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak}
    -  \else\ifx\txiarg\wordbefore
    -    \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak}
    -  \else\ifx\txiarg\wordafter
    -    \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak}
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @urefbreakstyle setting `\txiarg'}%
    -  \fi\fi\fi
    -}
    -\def\wordafter{after}
    -\def\wordbefore{before}
    -\def\wordnone{none}
    -
    -% Allow a ragged right output to aid breaking long URL's.  There can
    -% be a break at the \allowbreak with no extra glue (if the existing stretch in
    -% the line is sufficent), a break at the \penalty100 with extra glue added
    -% at the end of the line, or no break at all here.
    -%   Changing the value of the penalty and/or the amount of stretch affects how
    -% preferrable one choice is over the other.
    -\def\urefallowbreak{%
    -  \allowbreak
    -  \hskip 0pt plus 2 em\relax
    -  \penalty300
    -  \hskip 0pt plus -2 em\relax
    -}
    -
    -\urefbreakstyle after
    -
    -% @url synonym for @uref, since that's how everyone uses it.
    -%
    -\let\url=\uref
    -
    -% rms does not like angle brackets --karl, 17may97.
    -% So now @email is just like @uref, unless we are pdf.
    -%
    -%\def\email#1{\angleleft{\tt #1}\angleright}
    -\ifpdforxetex
    -  \def\email#1{\doemail#1,,\finish}
    -  \def\doemail#1,#2,#3\finish{\begingroup
    -    \unsepspaces
    -    \pdfurl{mailto:#1}%
    -    \setbox0 = \hbox{\ignorespaces #2}%
    -    \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi
    -    \endlink
    -  \endgroup}
    -\else
    -  \let\email=\uref
    -\fi
    -
    -% @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always),
    -%   `example' (@kbd uses ttsl only inside of @example and friends),
    -%   or `code' (@kbd uses normal tty font always).
    -\parseargdef\kbdinputstyle{%
    -  \def\txiarg{#1}%
    -  \ifx\txiarg\worddistinct
    -    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}%
    -  \else\ifx\txiarg\wordexample
    -    \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}%
    -  \else\ifx\txiarg\wordcode
    -    \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}%
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @kbdinputstyle setting `\txiarg'}%
    -  \fi\fi\fi
    -}
    -\def\worddistinct{distinct}
    -\def\wordexample{example}
    -\def\wordcode{code}
    -
    -% Default is `distinct'.
    -\kbdinputstyle distinct
    -
    -% @kbd is like @code, except that if the argument is just one @key command,
    -% then @kbd has no effect.
    -\def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}}
    -
    -\def\xkey{\key}
    -\def\kbdsub#1#2#3\par{%
    -  \def\one{#1}\def\three{#3}\def\threex{??}%
    -  \ifx\one\xkey\ifx\threex\three \key{#2}%
    -  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
    -  \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi
    -}
    -
    -% definition of @key that produces a lozenge.  Doesn't adjust to text size.
    -%\setfont\keyrm\rmshape{8}{1000}{OT1}
    -%\font\keysy=cmsy9
    -%\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{%
    -%  \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{%
    -%    \vbox{\hrule\kern-0.4pt
    -%     \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}%
    -%    \kern-0.4pt\hrule}%
    -%  \kern-.06em\raise0.4pt\hbox{\angleright}}}}
    -
    -% definition of @key with no lozenge.  If the current font is already
    -% monospace, don't change it; that way, we respect @kbdinputstyle.  But
    -% if it isn't monospace, then use \tt.
    -%
    -\def\key#1{{\setupmarkupstyle{key}%
    -  \nohyphenation
    -  \ifmonospace\else\tt\fi
    -  #1}\null}
    -
    -% @clicksequence{File @click{} Open ...}
    -\def\clicksequence#1{\begingroup #1\endgroup}
    -
    -% @clickstyle @arrow   (by default)
    -\parseargdef\clickstyle{\def\click{#1}}
    -\def\click{\arrow}
    -
    -% Typeset a dimension, e.g., `in' or `pt'.  The only reason for the
    -% argument is to make the input look right: @dmn{pt} instead of @dmn{}pt.
    -%
    -\def\dmn#1{\thinspace #1}
    -
    -% @acronym for "FBI", "NATO", and the like.
    -% We print this one point size smaller, since it's intended for
    -% all-uppercase.
    -%
    -\def\acronym#1{\doacronym #1,,\finish}
    -\def\doacronym#1,#2,#3\finish{%
    -  {\switchtolsize #1}%
    -  \def\temp{#2}%
    -  \ifx\temp\empty \else
    -    \space ({\unsepspaces \ignorespaces \temp \unskip})%
    -  \fi
    -  \null % reset \spacefactor=1000
    -}
    -
    -% @abbr for "Comput. J." and the like.
    -% No font change, but don't do end-of-sentence spacing.
    -%
    -\def\abbr#1{\doabbr #1,,\finish}
    -\def\doabbr#1,#2,#3\finish{%
    -  {\plainfrenchspacing #1}%
    -  \def\temp{#2}%
    -  \ifx\temp\empty \else
    -    \space ({\unsepspaces \ignorespaces \temp \unskip})%
    -  \fi
    -  \null % reset \spacefactor=1000
    -}
    -
    -% @asis just yields its argument.  Used with @table, for example.
    -%
    -\def\asis#1{#1}
    -
    -% @math outputs its argument in math mode.
    -%
    -% One complication: _ usually means subscripts, but it could also mean
    -% an actual _ character, as in @math{@var{some_variable} + 1}.  So make
    -% _ active, and distinguish by seeing if the current family is \slfam,
    -% which is what @var uses.
    -{
    -  \catcode`\_ = \active
    -  \gdef\mathunderscore{%
    -    \catcode`\_=\active
    -    \def_{\ifnum\fam=\slfam \_\else\sb\fi}%
    -  }
    -}
    -% Another complication: we want \\ (and @\) to output a math (or tt) \.
    -% FYI, plain.tex uses \\ as a temporary control sequence (for no
    -% particular reason), but this is not advertised and we don't care.
    -%
    -% The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\.
    -\def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi}
    -%
    -\def\math{%
    -  \ifmmode\else % only go into math if not in math mode already
    -    \tex
    -    \mathunderscore
    -    \let\\ = \mathbackslash
    -    \mathactive
    -    % make the texinfo accent commands work in math mode
    -    \let\"=\ddot
    -    \let\'=\acute
    -    \let\==\bar
    -    \let\^=\hat
    -    \let\`=\grave
    -    \let\u=\breve
    -    \let\v=\check
    -    \let\~=\tilde
    -    \let\dotaccent=\dot
    -    % have to provide another name for sup operator
    -    \let\mathopsup=\sup
    -  $\expandafter\finishmath\fi
    -}
    -\def\finishmath#1{#1$\endgroup}  % Close the group opened by \tex.
    -
    -% Some active characters (such as <) are spaced differently in math.
    -% We have to reset their definitions in case the @math was an argument
    -% to a command which sets the catcodes (such as @item or @section).
    -%
    -{
    -  \catcode`^ = \active
    -  \catcode`< = \active
    -  \catcode`> = \active
    -  \catcode`+ = \active
    -  \catcode`' = \active
    -  \gdef\mathactive{%
    -    \let^ = \ptexhat
    -    \let< = \ptexless
    -    \let> = \ptexgtr
    -    \let+ = \ptexplus
    -    \let' = \ptexquoteright
    -  }
    -}
    -
    -% for @sub and @sup, if in math mode, just do a normal sub/superscript.
    -% If in text, use math to place as sub/superscript, but switch
    -% into text mode, with smaller fonts.  This is a different font than the
    -% one used for real math sub/superscripts (8pt vs. 7pt), but let's not
    -% fix it (significant additions to font machinery) until someone notices.
    -%
    -\def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi}
    -\def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}%
    -%
    -\def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi}
    -\def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}%
    -
    -% @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}.
    -% Ignore unless FMTNAME == tex; then it is like @iftex and @tex,
    -% except specified as a normal braced arg, so no newlines to worry about.
    -%
    -\def\outfmtnametex{tex}
    -%
    -\long\def\inlinefmt#1{\doinlinefmt #1,\finish}
    -\long\def\doinlinefmt#1,#2,\finish{%
    -  \def\inlinefmtname{#1}%
    -  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi
    -}
    -%
    -% @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if
    -% FMTNAME is tex, else ELSE-TEXT.
    -\long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish}
    -\long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{%
    -  \def\inlinefmtname{#1}%
    -  \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi
    -}
    -%
    -% For raw, must switch into @tex before parsing the argument, to avoid
    -% setting catcodes prematurely.  Doing it this way means that, for
    -% example, @inlineraw{html, foo{bar} gets a parse error instead of being
    -% ignored.  But this isn't important because if people want a literal
    -% *right* brace they would have to use a command anyway, so they may as
    -% well use a command to get a left brace too.  We could re-use the
    -% delimiter character idea from \verb, but it seems like overkill.
    -%
    -\long\def\inlineraw{\tex \doinlineraw}
    -\long\def\doinlineraw#1{\doinlinerawtwo #1,\finish}
    -\def\doinlinerawtwo#1,#2,\finish{%
    -  \def\inlinerawname{#1}%
    -  \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi
    -  \endgroup % close group opened by \tex.
    -}
    -
    -% @inlineifset{VAR, TEXT} expands TEXT if VAR is @set.
    -%
    -\long\def\inlineifset#1{\doinlineifset #1,\finish}
    -\long\def\doinlineifset#1,#2,\finish{%
    -  \def\inlinevarname{#1}%
    -  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax
    -  \else\ignorespaces#2\fi
    -}
    -
    -% @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set.
    -%
    -\long\def\inlineifclear#1{\doinlineifclear #1,\finish}
    -\long\def\doinlineifclear#1,#2,\finish{%
    -  \def\inlinevarname{#1}%
    -  \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi
    -}
    -
    -
    -\message{glyphs,}
    -% and logos.
    -
    -% @@ prints an @, as does @atchar{}.
    -\def\@{\char64 }
    -\let\atchar=\@
    -
    -% @{ @} @lbracechar{} @rbracechar{} all generate brace characters.
    -\def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}}
    -\def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}}
    -\let\{=\lbracechar
    -\let\}=\rbracechar
    -
    -% @comma{} to avoid , parsing problems.
    -\let\comma = ,
    -
    -% Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent
    -% Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H.
    -\let\, = \ptexc
    -\let\dotaccent = \ptexdot
    -\def\ringaccent#1{{\accent23 #1}}
    -\let\tieaccent = \ptext
    -\let\ubaraccent = \ptexb
    -\let\udotaccent = \d
    -
    -% Other special characters: @questiondown @exclamdown @ordf @ordm
    -% Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss.
    -\def\questiondown{?`}
    -\def\exclamdown{!`}
    -\def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}}
    -\def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}}
    -
    -% Dotless i and dotless j, used for accents.
    -\def\imacro{i}
    -\def\jmacro{j}
    -\def\dotless#1{%
    -  \def\temp{#1}%
    -  \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi
    -  \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi
    -  \else \errmessage{@dotless can be used only with i or j}%
    -  \fi\fi
    -}
    -
    -% The \TeX{} logo, as in plain, but resetting the spacing so that a
    -% period following counts as ending a sentence.  (Idea found in latex.)
    -%
    -\edef\TeX{\TeX \spacefactor=1000 }
    -
    -% @LaTeX{} logo.  Not quite the same results as the definition in
    -% latex.ltx, since we use a different font for the raised A; it's most
    -% convenient for us to use an explicitly smaller font, rather than using
    -% the \scriptstyle font (since we don't reset \scriptstyle and
    -% \scriptscriptstyle).
    -%
    -\def\LaTeX{%
    -  L\kern-.36em
    -  {\setbox0=\hbox{T}%
    -   \vbox to \ht0{\hbox{%
    -     \ifx\textnominalsize\xwordpt
    -       % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX.
    -       % Revert to plain's \scriptsize, which is 7pt.
    -       \count255=\the\fam $\fam\count255 \scriptstyle A$%
    -     \else
    -       % For 11pt, we can use our lllsize.
    -       \switchtolllsize A%
    -     \fi
    -     }%
    -     \vss
    -  }}%
    -  \kern-.15em
    -  \TeX
    -}
    -
    -% Some math mode symbols.  Define \ensuremath to switch into math mode
    -% unless we are already there.  Expansion tricks may not be needed here,
    -% but safer, and can't hurt.
    -\def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi}
    -\def\ensuredmath#1{$\relax#1$}
    -%
    -\def\bullet{\ensuremath\ptexbullet}
    -\def\geq{\ensuremath\ge}
    -\def\leq{\ensuremath\le}
    -\def\minus{\ensuremath-}
    -
    -% @dots{} outputs an ellipsis using the current font.
    -% We do .5em per period so that it has the same spacing in the cm
    -% typewriter fonts as three actual period characters; on the other hand,
    -% in other typewriter fonts three periods are wider than 1.5em.  So do
    -% whichever is larger.
    -%
    -\def\dots{%
    -  \leavevmode
    -  \setbox0=\hbox{...}% get width of three periods
    -  \ifdim\wd0 > 1.5em
    -    \dimen0 = \wd0
    -  \else
    -    \dimen0 = 1.5em
    -  \fi
    -  \hbox to \dimen0{%
    -    \hskip 0pt plus.25fil
    -    .\hskip 0pt plus1fil
    -    .\hskip 0pt plus1fil
    -    .\hskip 0pt plus.5fil
    -  }%
    -}
    -
    -% @enddots{} is an end-of-sentence ellipsis.
    -%
    -\def\enddots{%
    -  \dots
    -  \spacefactor=\endofsentencespacefactor
    -}
    -
    -% @point{}, @result{}, @expansion{}, @print{}, @equiv{}.
    -%
    -% Since these characters are used in examples, they should be an even number of
    -% \tt widths. Each \tt character is 1en, so two makes it 1em.
    -%
    -\def\point{$\star$}
    -\def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}}
    -\def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}}
    -\def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}}
    -\def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}}
    -\def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}}
    -
    -% The @error{} command.
    -% Adapted from the TeXbook's \boxit.
    -%
    -\newbox\errorbox
    -%
    -{\ttfont \global\dimen0 = 3em}% Width of the box.
    -\dimen2 = .55pt % Thickness of rules
    -% The text. (`r' is open on the right, `e' somewhat less so on the left.)
    -\setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt}
    -%
    -\setbox\errorbox=\hbox to \dimen0{\hfil
    -   \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right.
    -   \advance\hsize by -2\dimen2 % Rules.
    -   \vbox{%
    -      \hrule height\dimen2
    -      \hbox{\vrule width\dimen2 \kern3pt          % Space to left of text.
    -         \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below.
    -         \kern3pt\vrule width\dimen2}% Space to right.
    -      \hrule height\dimen2}
    -    \hfil}
    -%
    -\def\error{\leavevmode\lower.7ex\copy\errorbox}
    -
    -% @pounds{} is a sterling sign, which Knuth put in the CM italic font.
    -%
    -\def\pounds{{\it\$}}
    -
    -% @euro{} comes from a separate font, depending on the current style.
    -% We use the free feym* fonts from the eurosym package by Henrik
    -% Theiling, which support regular, slanted, bold and bold slanted (and
    -% "outlined" (blackboard board, sort of) versions, which we don't need).
    -% It is available from http://www.ctan.org/tex-archive/fonts/eurosym.
    -%
    -% Although only regular is the truly official Euro symbol, we ignore
    -% that.  The Euro is designed to be slightly taller than the regular
    -% font height.
    -%
    -% feymr - regular
    -% feymo - slanted
    -% feybr - bold
    -% feybo - bold slanted
    -%
    -% There is no good (free) typewriter version, to my knowledge.
    -% A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide.
    -% Hmm.
    -%
    -% Also doesn't work in math.  Do we need to do math with euro symbols?
    -% Hope not.
    -%
    -%
    -\def\euro{{\eurofont e}}
    -\def\eurofont{%
    -  % We set the font at each command, rather than predefining it in
    -  % \textfonts and the other font-switching commands, so that
    -  % installations which never need the symbol don't have to have the
    -  % font installed.
    -  %
    -  % There is only one designed size (nominal 10pt), so we always scale
    -  % that to the current nominal size.
    -  %
    -  % By the way, simply using "at 1em" works for cmr10 and the like, but
    -  % does not work for cmbx10 and other extended/shrunken fonts.
    -  %
    -  \def\eurosize{\csname\curfontsize nominalsize\endcsname}%
    -  %
    -  \ifx\curfontstyle\bfstylename
    -    % bold:
    -    \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize
    -  \else
    -    % regular:
    -    \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize
    -  \fi
    -  \thiseurofont
    -}
    -
    -% Glyphs from the EC fonts.  We don't use \let for the aliases, because
    -% sometimes we redefine the original macro, and the alias should reflect
    -% the redefinition.
    -%
    -% Use LaTeX names for the Icelandic letters.
    -\def\DH{{\ecfont \char"D0}} % Eth
    -\def\dh{{\ecfont \char"F0}} % eth
    -\def\TH{{\ecfont \char"DE}} % Thorn
    -\def\th{{\ecfont \char"FE}} % thorn
    -%
    -\def\guillemetleft{{\ecfont \char"13}}
    -\def\guillemotleft{\guillemetleft}
    -\def\guillemetright{{\ecfont \char"14}}
    -\def\guillemotright{\guillemetright}
    -\def\guilsinglleft{{\ecfont \char"0E}}
    -\def\guilsinglright{{\ecfont \char"0F}}
    -\def\quotedblbase{{\ecfont \char"12}}
    -\def\quotesinglbase{{\ecfont \char"0D}}
    -%
    -% This positioning is not perfect (see the ogonek LaTeX package), but
    -% we have the precomposed glyphs for the most common cases.  We put the
    -% tests to use those glyphs in the single \ogonek macro so we have fewer
    -% dummy definitions to worry about for index entries, etc.
    -%
    -% ogonek is also used with other letters in Lithuanian (IOU), but using
    -% the precomposed glyphs for those is not so easy since they aren't in
    -% the same EC font.
    -\def\ogonek#1{{%
    -  \def\temp{#1}%
    -  \ifx\temp\macrocharA\Aogonek
    -  \else\ifx\temp\macrochara\aogonek
    -  \else\ifx\temp\macrocharE\Eogonek
    -  \else\ifx\temp\macrochare\eogonek
    -  \else
    -    \ecfont \setbox0=\hbox{#1}%
    -    \ifdim\ht0=1ex\accent"0C #1%
    -    \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}%
    -    \fi
    -  \fi\fi\fi\fi
    -  }%
    -}
    -\def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A}
    -\def\aogonek{{\ecfont \char"A1}}\def\macrochara{a}
    -\def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E}
    -\def\eogonek{{\ecfont \char"A6}}\def\macrochare{e}
    -%
    -% Use the European Computer Modern fonts (cm-super in outline format)
    -% for non-CM glyphs.  That is ec* for regular text and tc* for the text
    -% companion symbols (LaTeX TS1 encoding).  Both are part of the ec
    -% package and follow the same conventions.
    -%
    -\def\ecfont{\etcfont{e}}
    -\def\tcfont{\etcfont{t}}
    -%
    -\def\etcfont#1{%
    -  % We can't distinguish serif/sans and italic/slanted, but this
    -  % is used for crude hacks anyway (like adding French and German
    -  % quotes to documents typeset with CM, where we lose kerning), so
    -  % hopefully nobody will notice/care.
    -  \edef\ecsize{\csname\curfontsize ecsize\endcsname}%
    -  \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}%
    -  \ifmonospace
    -    % typewriter:
    -    \font\thisecfont = #1ctt\ecsize \space at \nominalsize
    -  \else
    -    \ifx\curfontstyle\bfstylename
    -      % bold:
    -      \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize
    -    \else
    -      % regular:
    -      \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize
    -    \fi
    -  \fi
    -  \thisecfont
    -}
    -
    -% @registeredsymbol - R in a circle.  The font for the R should really
    -% be smaller yet, but lllsize is the best we can do for now.
    -% Adapted from the plain.tex definition of \copyright.
    -%
    -\def\registeredsymbol{%
    -  $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}%
    -               \hfil\crcr\Orb}}%
    -    }$%
    -}
    -
    -% @textdegree - the normal degrees sign.
    -%
    -\def\textdegree{$^\circ$}
    -
    -% Laurent Siebenmann reports \Orb undefined with:
    -%  Textures 1.7.7 (preloaded format=plain 93.10.14)  (68K)  16 APR 2004 02:38
    -% so we'll define it if necessary.
    -%
    -\ifx\Orb\thisisundefined
    -\def\Orb{\mathhexbox20D}
    -\fi
    -
    -% Quotes.
    -\chardef\quotedblleft="5C
    -\chardef\quotedblright=`\"
    -\chardef\quoteleft=`\`
    -\chardef\quoteright=`\'
    -
    -
    -\message{page headings,}
    -
    -\newskip\titlepagetopglue \titlepagetopglue = 1.5in
    -\newskip\titlepagebottomglue \titlepagebottomglue = 2pc
    -
    -% First the title page.  Must do @settitle before @titlepage.
    -\newif\ifseenauthor
    -\newif\iffinishedtitlepage
    -
    -% @setcontentsaftertitlepage used to do an implicit @contents or
    -% @shortcontents after @end titlepage, but it is now obsolete.
    -\def\setcontentsaftertitlepage{%
    -  \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo
    -              command; move your @contents command if you want the contents
    -              after the title page.}}%
    -\def\setshortcontentsaftertitlepage{%
    -  \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo
    -              command; move your @shortcontents and @contents commands if you
    -              want the contents after the title page.}}%
    -
    -\parseargdef\shorttitlepage{%
    -  \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}%
    -  \endgroup\page\hbox{}\page}
    -
    -\envdef\titlepage{%
    -  % Open one extra group, as we want to close it in the middle of \Etitlepage.
    -  \begingroup
    -    \parindent=0pt \textfonts
    -    % Leave some space at the very top of the page.
    -    \vglue\titlepagetopglue
    -    % No rule at page bottom unless we print one at the top with @title.
    -    \finishedtitlepagetrue
    -    %
    -    % Most title ``pages'' are actually two pages long, with space
    -    % at the top of the second.  We don't want the ragged left on the second.
    -    \let\oldpage = \page
    -    \def\page{%
    -      \iffinishedtitlepage\else
    -	 \finishtitlepage
    -      \fi
    -      \let\page = \oldpage
    -      \page
    -      \null
    -    }%
    -}
    -
    -\def\Etitlepage{%
    -    \iffinishedtitlepage\else
    -	\finishtitlepage
    -    \fi
    -    % It is important to do the page break before ending the group,
    -    % because the headline and footline are only empty inside the group.
    -    % If we use the new definition of \page, we always get a blank page
    -    % after the title page, which we certainly don't want.
    -    \oldpage
    -  \endgroup
    -  %
    -  % Need this before the \...aftertitlepage checks so that if they are
    -  % in effect the toc pages will come out with page numbers.
    -  \HEADINGSon
    -}
    -
    -\def\finishtitlepage{%
    -  \vskip4pt \hrule height 2pt width \hsize
    -  \vskip\titlepagebottomglue
    -  \finishedtitlepagetrue
    -}
    -
    -% Settings used for typesetting titles: no hyphenation, no indentation,
    -% don't worry much about spacing, ragged right.  This should be used
    -% inside a \vbox, and fonts need to be set appropriately first. \par should
    -% be specified before the end of the \vbox, since a vbox is a group.
    -%
    -\def\raggedtitlesettings{%
    -  \rm
    -  \hyphenpenalty=10000
    -  \parindent=0pt
    -  \tolerance=5000
    -  \ptexraggedright
    -}
    -
    -% Macros to be used within @titlepage:
    -
    -\let\subtitlerm=\rmfont
    -\def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines}
    -
    -\parseargdef\title{%
    -  \checkenv\titlepage
    -  \vbox{\titlefonts \raggedtitlesettings #1\par}%
    -  % print a rule at the page bottom also.
    -  \finishedtitlepagefalse
    -  \vskip4pt \hrule height 4pt width \hsize \vskip4pt
    -}
    -
    -\parseargdef\subtitle{%
    -  \checkenv\titlepage
    -  {\subtitlefont \rightline{#1}}%
    -}
    -
    -% @author should come last, but may come many times.
    -% It can also be used inside @quotation.
    -%
    -\parseargdef\author{%
    -  \def\temp{\quotation}%
    -  \ifx\thisenv\temp
    -    \def\quotationauthor{#1}% printed in \Equotation.
    -  \else
    -    \checkenv\titlepage
    -    \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi
    -    {\secfonts\rm \leftline{#1}}%
    -  \fi
    -}
    -
    -
    -% Set up page headings and footings.
    -
    -\let\thispage=\folio
    -
    -\newtoks\evenheadline    % headline on even pages
    -\newtoks\oddheadline     % headline on odd pages
    -\newtoks\evenfootline    % footline on even pages
    -\newtoks\oddfootline     % footline on odd pages
    -
    -% Now make \makeheadline and \makefootline in Plain TeX use those variables
    -\headline={{\textfonts\rm \ifodd\pageno \the\oddheadline
    -                            \else \the\evenheadline \fi}}
    -\footline={{\textfonts\rm \ifodd\pageno \the\oddfootline
    -                            \else \the\evenfootline \fi}\HEADINGShook}
    -\let\HEADINGShook=\relax
    -
    -% Commands to set those variables.
    -% For example, this is what  @headings on  does
    -% @evenheading @thistitle|@thispage|@thischapter
    -% @oddheading @thischapter|@thispage|@thistitle
    -% @evenfooting @thisfile||
    -% @oddfooting ||@thisfile
    -
    -
    -\def\evenheading{\parsearg\evenheadingxxx}
    -\def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish}
    -\def\evenheadingyyy #1\|#2\|#3\|#4\finish{%
    -\global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
    -
    -\def\oddheading{\parsearg\oddheadingxxx}
    -\def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish}
    -\def\oddheadingyyy #1\|#2\|#3\|#4\finish{%
    -\global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
    -
    -\parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}%
    -
    -\def\evenfooting{\parsearg\evenfootingxxx}
    -\def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish}
    -\def\evenfootingyyy #1\|#2\|#3\|#4\finish{%
    -\global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}}
    -
    -\def\oddfooting{\parsearg\oddfootingxxx}
    -\def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish}
    -\def\oddfootingyyy #1\|#2\|#3\|#4\finish{%
    -  \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}%
    -  %
    -  % Leave some space for the footline.  Hopefully ok to assume
    -  % @evenfooting will not be used by itself.
    -  \global\advance\txipageheight by -12pt
    -  \global\advance\vsize by -12pt
    -}
    -
    -\parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}}
    -
    -% @evenheadingmarks top     \thischapter <- chapter at the top of a page
    -% @evenheadingmarks bottom  \thischapter <- chapter at the bottom of a page
    -%
    -% The same set of arguments for:
    -%
    -% @oddheadingmarks
    -% @evenfootingmarks
    -% @oddfootingmarks
    -% @everyheadingmarks
    -% @everyfootingmarks
    -
    -% These define \getoddheadingmarks, \getevenheadingmarks,
    -% \getoddfootingmarks, and \getevenfootingmarks, each to one of
    -% \gettopheadingmarks, \getbottomheadingmarks.
    -%
    -\def\evenheadingmarks{\headingmarks{even}{heading}}
    -\def\oddheadingmarks{\headingmarks{odd}{heading}}
    -\def\evenfootingmarks{\headingmarks{even}{footing}}
    -\def\oddfootingmarks{\headingmarks{odd}{footing}}
    -\parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1}
    -                          \headingmarks{odd}{heading}{#1} }
    -\parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1}
    -                          \headingmarks{odd}{footing}{#1} }
    -% #1 = even/odd, #2 = heading/footing, #3 = top/bottom.
    -\def\headingmarks#1#2#3 {%
    -  \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname
    -  \global\expandafter\let\csname get#1#2marks\endcsname \temp
    -}
    -
    -\everyheadingmarks bottom
    -\everyfootingmarks bottom
    -
    -% @headings double      turns headings on for double-sided printing.
    -% @headings single      turns headings on for single-sided printing.
    -% @headings off         turns them off.
    -% @headings on          same as @headings double, retained for compatibility.
    -% @headings after       turns on double-sided headings after this page.
    -% @headings doubleafter turns on double-sided headings after this page.
    -% @headings singleafter turns on single-sided headings after this page.
    -% By default, they are off at the start of a document,
    -% and turned `on' after @end titlepage.
    -
    -\parseargdef\headings{\csname HEADINGS#1\endcsname}
    -
    -\def\headingsoff{% non-global headings elimination
    -  \evenheadline={\hfil}\evenfootline={\hfil}%
    -   \oddheadline={\hfil}\oddfootline={\hfil}%
    -}
    -
    -\def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting
    -\HEADINGSoff  % it's the default
    -
    -% When we turn headings on, set the page number to 1.
    -% For double-sided printing, put current file name in lower left corner,
    -% chapter name on inside top of right hand pages, document
    -% title on inside top of left hand pages, and page numbers on outside top
    -% edge of all pages.
    -\def\HEADINGSdouble{%
    -\global\pageno=1
    -\global\evenfootline={\hfil}
    -\global\oddfootline={\hfil}
    -\global\evenheadline={\line{\folio\hfil\thistitle}}
    -\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    -\global\let\contentsalignmacro = \chapoddpage
    -}
    -\let\contentsalignmacro = \chappager
    -
    -% For single-sided printing, chapter title goes across top left of page,
    -% page number on top right.
    -\def\HEADINGSsingle{%
    -\global\pageno=1
    -\global\evenfootline={\hfil}
    -\global\oddfootline={\hfil}
    -\global\evenheadline={\line{\thischapterheading\hfil\folio}}
    -\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    -\global\let\contentsalignmacro = \chappager
    -}
    -\def\HEADINGSon{\HEADINGSdouble}
    -
    -\def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex}
    -\let\HEADINGSdoubleafter=\HEADINGSafter
    -\def\HEADINGSdoublex{%
    -\global\evenfootline={\hfil}
    -\global\oddfootline={\hfil}
    -\global\evenheadline={\line{\folio\hfil\thistitle}}
    -\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    -\global\let\contentsalignmacro = \chapoddpage
    -}
    -
    -\def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex}
    -\def\HEADINGSsinglex{%
    -\global\evenfootline={\hfil}
    -\global\oddfootline={\hfil}
    -\global\evenheadline={\line{\thischapterheading\hfil\folio}}
    -\global\oddheadline={\line{\thischapterheading\hfil\folio}}
    -\global\let\contentsalignmacro = \chappager
    -}
    -
    -% Subroutines used in generating headings
    -% This produces Day Month Year style of output.
    -% Only define if not already defined, in case a txi-??.tex file has set
    -% up a different format (e.g., txi-cs.tex does this).
    -\ifx\today\thisisundefined
    -\def\today{%
    -  \number\day\space
    -  \ifcase\month
    -  \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr
    -  \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug
    -  \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec
    -  \fi
    -  \space\number\year}
    -\fi
    -
    -% @settitle line...  specifies the title of the document, for headings.
    -% It generates no output of its own.
    -\def\thistitle{\putwordNoTitle}
    -\def\settitle{\parsearg{\gdef\thistitle}}
    -
    -
    -\message{tables,}
    -% Tables -- @table, @ftable, @vtable, @item(x).
    -
    -% default indentation of table text
    -\newdimen\tableindent \tableindent=.8in
    -% default indentation of @itemize and @enumerate text
    -\newdimen\itemindent  \itemindent=.3in
    -% margin between end of table item and start of table text.
    -\newdimen\itemmargin  \itemmargin=.1in
    -
    -% used internally for \itemindent minus \itemmargin
    -\newdimen\itemmax
    -
    -% Note @table, @ftable, and @vtable define @item, @itemx, etc., with
    -% these defs.
    -% They also define \itemindex
    -% to index the item name in whatever manner is desired (perhaps none).
    -
    -\newif\ifitemxneedsnegativevskip
    -
    -\def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi}
    -
    -\def\internalBitem{\smallbreak \parsearg\itemzzz}
    -\def\internalBitemx{\itemxpar \parsearg\itemzzz}
    -
    -\def\itemzzz #1{\begingroup %
    -  \advance\hsize by -\rightskip
    -  \advance\hsize by -\tableindent
    -  \setbox0=\hbox{\itemindicate{#1}}%
    -  \itemindex{#1}%
    -  \nobreak % This prevents a break before @itemx.
    -  %
    -  % If the item text does not fit in the space we have, put it on a line
    -  % by itself, and do not allow a page break either before or after that
    -  % line.  We do not start a paragraph here because then if the next
    -  % command is, e.g., @kindex, the whatsit would get put into the
    -  % horizontal list on a line by itself, resulting in extra blank space.
    -  \ifdim \wd0>\itemmax
    -    %
    -    % Make this a paragraph so we get the \parskip glue and wrapping,
    -    % but leave it ragged-right.
    -    \begingroup
    -      \advance\leftskip by-\tableindent
    -      \advance\hsize by\tableindent
    -      \advance\rightskip by0pt plus1fil\relax
    -      \leavevmode\unhbox0\par
    -    \endgroup
    -    %
    -    % We're going to be starting a paragraph, but we don't want the
    -    % \parskip glue -- logically it's part of the @item we just started.
    -    \nobreak \vskip-\parskip
    -    %
    -    % Stop a page break at the \parskip glue coming up.  However, if
    -    % what follows is an environment such as @example, there will be no
    -    % \parskip glue; then the negative vskip we just inserted would
    -    % cause the example and the item to crash together.  So we use this
    -    % bizarre value of 10001 as a signal to \aboveenvbreak to insert
    -    % \parskip glue after all.  Section titles are handled this way also.
    -    %
    -    \penalty 10001
    -    \endgroup
    -    \itemxneedsnegativevskipfalse
    -  \else
    -    % The item text fits into the space.  Start a paragraph, so that the
    -    % following text (if any) will end up on the same line.
    -    \noindent
    -    % Do this with kerns and \unhbox so that if there is a footnote in
    -    % the item text, it can migrate to the main vertical list and
    -    % eventually be printed.
    -    \nobreak\kern-\tableindent
    -    \dimen0 = \itemmax  \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0
    -    \unhbox0
    -    \nobreak\kern\dimen0
    -    \endgroup
    -    \itemxneedsnegativevskiptrue
    -  \fi
    -}
    -
    -\def\item{\errmessage{@item while not in a list environment}}
    -\def\itemx{\errmessage{@itemx while not in a list environment}}
    -
    -% @table, @ftable, @vtable.
    -\envdef\table{%
    -  \let\itemindex\gobble
    -  \tablecheck{table}%
    -}
    -\envdef\ftable{%
    -  \def\itemindex ##1{\doind {fn}{\code{##1}}}%
    -  \tablecheck{ftable}%
    -}
    -\envdef\vtable{%
    -  \def\itemindex ##1{\doind {vr}{\code{##1}}}%
    -  \tablecheck{vtable}%
    -}
    -\def\tablecheck#1{%
    -  \ifnum \the\catcode`\^^M=\active
    -    \endgroup
    -    \errmessage{This command won't work in this context; perhaps the problem is
    -      that we are \inenvironment\thisenv}%
    -    \def\next{\doignore{#1}}%
    -  \else
    -    \let\next\tablex
    -  \fi
    -  \next
    -}
    -\def\tablex#1{%
    -  \def\itemindicate{#1}%
    -  \parsearg\tabley
    -}
    -\def\tabley#1{%
    -  {%
    -    \makevalueexpandable
    -    \edef\temp{\noexpand\tablez #1\space\space\space}%
    -    \expandafter
    -  }\temp \endtablez
    -}
    -\def\tablez #1 #2 #3 #4\endtablez{%
    -  \aboveenvbreak
    -  \ifnum 0#1>0 \advance \leftskip by #1\mil \fi
    -  \ifnum 0#2>0 \tableindent=#2\mil \fi
    -  \ifnum 0#3>0 \advance \rightskip by #3\mil \fi
    -  \itemmax=\tableindent
    -  \advance \itemmax by -\itemmargin
    -  \advance \leftskip by \tableindent
    -  \exdentamount=\tableindent
    -  \parindent = 0pt
    -  \parskip = \smallskipamount
    -  \ifdim \parskip=0pt \parskip=2pt \fi
    -  \let\item = \internalBitem
    -  \let\itemx = \internalBitemx
    -}
    -\def\Etable{\endgraf\afterenvbreak}
    -\let\Eftable\Etable
    -\let\Evtable\Etable
    -\let\Eitemize\Etable
    -\let\Eenumerate\Etable
    -
    -% This is the counter used by @enumerate, which is really @itemize
    -
    -\newcount \itemno
    -
    -\envdef\itemize{\parsearg\doitemize}
    -
    -\def\doitemize#1{%
    -  \aboveenvbreak
    -  \itemmax=\itemindent
    -  \advance\itemmax by -\itemmargin
    -  \advance\leftskip by \itemindent
    -  \exdentamount=\itemindent
    -  \parindent=0pt
    -  \parskip=\smallskipamount
    -  \ifdim\parskip=0pt \parskip=2pt \fi
    -  %
    -  % Try typesetting the item mark so that if the document erroneously says
    -  % something like @itemize @samp (intending @table), there's an error
    -  % right away at the @itemize.  It's not the best error message in the
    -  % world, but it's better than leaving it to the @item.  This means if
    -  % the user wants an empty mark, they have to say @w{} not just @w.
    -  \def\itemcontents{#1}%
    -  \setbox0 = \hbox{\itemcontents}%
    -  %
    -  % @itemize with no arg is equivalent to @itemize @bullet.
    -  \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi
    -  %
    -  \let\item=\itemizeitem
    -}
    -
    -% Definition of @item while inside @itemize and @enumerate.
    -%
    -\def\itemizeitem{%
    -  \advance\itemno by 1  % for enumerations
    -  {\let\par=\endgraf \smallbreak}% reasonable place to break
    -  {%
    -   % If the document has an @itemize directly after a section title, a
    -   % \nobreak will be last on the list, and \sectionheading will have
    -   % done a \vskip-\parskip.  In that case, we don't want to zero
    -   % parskip, or the item text will crash with the heading.  On the
    -   % other hand, when there is normal text preceding the item (as there
    -   % usually is), we do want to zero parskip, or there would be too much
    -   % space.  In that case, we won't have a \nobreak before.  At least
    -   % that's the theory.
    -   \ifnum\lastpenalty<10000 \parskip=0in \fi
    -   \noindent
    -   \hbox to 0pt{\hss \itemcontents \kern\itemmargin}%
    -   %
    -   \ifinner\else
    -     \vadjust{\penalty 1200}% not good to break after first line of item.
    -   \fi
    -   % We can be in inner vertical mode in a footnote, although an
    -   % @itemize looks awful there.
    -  }%
    -  \flushcr
    -}
    -
    -% \splitoff TOKENS\endmark defines \first to be the first token in
    -% TOKENS, and \rest to be the remainder.
    -%
    -\def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}%
    -
    -% Allow an optional argument of an uppercase letter, lowercase letter,
    -% or number, to specify the first label in the enumerated list.  No
    -% argument is the same as `1'.
    -%
    -\envparseargdef\enumerate{\enumeratey #1  \endenumeratey}
    -\def\enumeratey #1 #2\endenumeratey{%
    -  % If we were given no argument, pretend we were given `1'.
    -  \def\thearg{#1}%
    -  \ifx\thearg\empty \def\thearg{1}\fi
    -  %
    -  % Detect if the argument is a single token.  If so, it might be a
    -  % letter.  Otherwise, the only valid thing it can be is a number.
    -  % (We will always have one token, because of the test we just made.
    -  % This is a good thing, since \splitoff doesn't work given nothing at
    -  % all -- the first parameter is undelimited.)
    -  \expandafter\splitoff\thearg\endmark
    -  \ifx\rest\empty
    -    % Only one token in the argument.  It could still be anything.
    -    % A ``lowercase letter'' is one whose \lccode is nonzero.
    -    % An ``uppercase letter'' is one whose \lccode is both nonzero, and
    -    %   not equal to itself.
    -    % Otherwise, we assume it's a number.
    -    %
    -    % We need the \relax at the end of the \ifnum lines to stop TeX from
    -    % continuing to look for a .
    -    %
    -    \ifnum\lccode\expandafter`\thearg=0\relax
    -      \numericenumerate % a number (we hope)
    -    \else
    -      % It's a letter.
    -      \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax
    -        \lowercaseenumerate % lowercase letter
    -      \else
    -        \uppercaseenumerate % uppercase letter
    -      \fi
    -    \fi
    -  \else
    -    % Multiple tokens in the argument.  We hope it's a number.
    -    \numericenumerate
    -  \fi
    -}
    -
    -% An @enumerate whose labels are integers.  The starting integer is
    -% given in \thearg.
    -%
    -\def\numericenumerate{%
    -  \itemno = \thearg
    -  \startenumeration{\the\itemno}%
    -}
    -
    -% The starting (lowercase) letter is in \thearg.
    -\def\lowercaseenumerate{%
    -  \itemno = \expandafter`\thearg
    -  \startenumeration{%
    -    % Be sure we're not beyond the end of the alphabet.
    -    \ifnum\itemno=0
    -      \errmessage{No more lowercase letters in @enumerate; get a bigger
    -                  alphabet}%
    -    \fi
    -    \char\lccode\itemno
    -  }%
    -}
    -
    -% The starting (uppercase) letter is in \thearg.
    -\def\uppercaseenumerate{%
    -  \itemno = \expandafter`\thearg
    -  \startenumeration{%
    -    % Be sure we're not beyond the end of the alphabet.
    -    \ifnum\itemno=0
    -      \errmessage{No more uppercase letters in @enumerate; get a bigger
    -                  alphabet}
    -    \fi
    -    \char\uccode\itemno
    -  }%
    -}
    -
    -% Call \doitemize, adding a period to the first argument and supplying the
    -% common last two arguments.  Also subtract one from the initial value in
    -% \itemno, since @item increments \itemno.
    -%
    -\def\startenumeration#1{%
    -  \advance\itemno by -1
    -  \doitemize{#1.}\flushcr
    -}
    -
    -% @alphaenumerate and @capsenumerate are abbreviations for giving an arg
    -% to @enumerate.
    -%
    -\def\alphaenumerate{\enumerate{a}}
    -\def\capsenumerate{\enumerate{A}}
    -\def\Ealphaenumerate{\Eenumerate}
    -\def\Ecapsenumerate{\Eenumerate}
    -
    -
    -% @multitable macros
    -% Amy Hendrickson, 8/18/94, 3/6/96
    -%
    -% @multitable ... @end multitable will make as many columns as desired.
    -% Contents of each column will wrap at width given in preamble.  Width
    -% can be specified either with sample text given in a template line,
    -% or in percent of \hsize, the current width of text on page.
    -
    -% Table can continue over pages but will only break between lines.
    -
    -% To make preamble:
    -%
    -% Either define widths of columns in terms of percent of \hsize:
    -%   @multitable @columnfractions .25 .3 .45
    -%   @item ...
    -%
    -%   Numbers following @columnfractions are the percent of the total
    -%   current hsize to be used for each column. You may use as many
    -%   columns as desired.
    -
    -
    -% Or use a template:
    -%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
    -%   @item ...
    -%   using the widest term desired in each column.
    -
    -% Each new table line starts with @item, each subsequent new column
    -% starts with @tab. Empty columns may be produced by supplying @tab's
    -% with nothing between them for as many times as empty columns are needed,
    -% ie, @tab@tab@tab will produce two empty columns.
    -
    -% @item, @tab do not need to be on their own lines, but it will not hurt
    -% if they are.
    -
    -% Sample multitable:
    -
    -%   @multitable {Column 1 template} {Column 2 template} {Column 3 template}
    -%   @item first col stuff @tab second col stuff @tab third col
    -%   @item
    -%   first col stuff
    -%   @tab
    -%   second col stuff
    -%   @tab
    -%   third col
    -%   @item first col stuff @tab second col stuff
    -%   @tab Many paragraphs of text may be used in any column.
    -%
    -%         They will wrap at the width determined by the template.
    -%   @item@tab@tab This will be in third column.
    -%   @end multitable
    -
    -% Default dimensions may be reset by user.
    -% @multitableparskip is vertical space between paragraphs in table.
    -% @multitableparindent is paragraph indent in table.
    -% @multitablecolmargin is horizontal space to be left between columns.
    -% @multitablelinespace is space to leave between table items, baseline
    -%                                                            to baseline.
    -%   0pt means it depends on current normal line spacing.
    -%
    -\newskip\multitableparskip
    -\newskip\multitableparindent
    -\newdimen\multitablecolspace
    -\newskip\multitablelinespace
    -\multitableparskip=0pt
    -\multitableparindent=6pt
    -\multitablecolspace=12pt
    -\multitablelinespace=0pt
    -
    -% Macros used to set up halign preamble:
    -%
    -\let\endsetuptable\relax
    -\def\xendsetuptable{\endsetuptable}
    -\let\columnfractions\relax
    -\def\xcolumnfractions{\columnfractions}
    -\newif\ifsetpercent
    -
    -% #1 is the @columnfraction, usually a decimal number like .5, but might
    -% be just 1.  We just use it, whatever it is.
    -%
    -\def\pickupwholefraction#1 {%
    -  \global\advance\colcount by 1
    -  \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}%
    -  \setuptable
    -}
    -
    -\newcount\colcount
    -\def\setuptable#1{%
    -  \def\firstarg{#1}%
    -  \ifx\firstarg\xendsetuptable
    -    \let\go = \relax
    -  \else
    -    \ifx\firstarg\xcolumnfractions
    -      \global\setpercenttrue
    -    \else
    -      \ifsetpercent
    -         \let\go\pickupwholefraction
    -      \else
    -         \global\advance\colcount by 1
    -         \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a
    -                   % separator; typically that is always in the input, anyway.
    -         \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}%
    -      \fi
    -    \fi
    -    \ifx\go\pickupwholefraction
    -      % Put the argument back for the \pickupwholefraction call, so
    -      % we'll always have a period there to be parsed.
    -      \def\go{\pickupwholefraction#1}%
    -    \else
    -      \let\go = \setuptable
    -    \fi%
    -  \fi
    -  \go
    -}
    -
    -% multitable-only commands.
    -%
    -% @headitem starts a heading row, which we typeset in bold.  Assignments
    -% have to be global since we are inside the implicit group of an
    -% alignment entry.  \everycr below resets \everytab so we don't have to
    -% undo it ourselves.
    -\def\headitemfont{\b}% for people to use in the template row; not changeable
    -\def\headitem{%
    -  \checkenv\multitable
    -  \crcr
    -  \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings
    -  \global\everytab={\bf}% can't use \headitemfont since the parsing differs
    -  \the\everytab % for the first item
    -}%
    -%
    -% default for tables with no headings.
    -\let\headitemcrhook=\relax
    -%
    -% A \tab used to include \hskip1sp.  But then the space in a template
    -% line is not enough.  That is bad.  So let's go back to just `&' until
    -% we again encounter the problem the 1sp was intended to solve.
    -%					--karl, nathan@acm.org, 20apr99.
    -\def\tab{\checkenv\multitable &\the\everytab}%
    -
    -% @multitable ... @end multitable definitions:
    -%
    -\newtoks\everytab  % insert after every tab.
    -%
    -\envdef\multitable{%
    -  \vskip\parskip
    -  \startsavinginserts
    -  %
    -  % @item within a multitable starts a normal row.
    -  % We use \def instead of \let so that if one of the multitable entries
    -  % contains an @itemize, we don't choke on the \item (seen as \crcr aka
    -  % \endtemplate) expanding \doitemize.
    -  \def\item{\crcr}%
    -  %
    -  \tolerance=9500
    -  \hbadness=9500
    -  \setmultitablespacing
    -  \parskip=\multitableparskip
    -  \parindent=\multitableparindent
    -  \overfullrule=0pt
    -  \global\colcount=0
    -  %
    -  \everycr = {%
    -    \noalign{%
    -      \global\everytab={}% Reset from possible headitem.
    -      \global\colcount=0 % Reset the column counter.
    -      %
    -      % Check for saved footnotes, etc.:
    -      \checkinserts
    -      %
    -      % Perhaps a \nobreak, then reset:
    -      \headitemcrhook
    -      \global\let\headitemcrhook=\relax
    -    }%
    -  }%
    -  %
    -  \parsearg\domultitable
    -}
    -\def\domultitable#1{%
    -  % To parse everything between @multitable and @item:
    -  \setuptable#1 \endsetuptable
    -  %
    -  % This preamble sets up a generic column definition, which will
    -  % be used as many times as user calls for columns.
    -  % \vtop will set a single line and will also let text wrap and
    -  % continue for many paragraphs if desired.
    -  \halign\bgroup &%
    -    \global\advance\colcount by 1
    -    \multistrut
    -    \vtop{%
    -      % Use the current \colcount to find the correct column width:
    -      \hsize=\expandafter\csname col\the\colcount\endcsname
    -      %
    -      % In order to keep entries from bumping into each other
    -      % we will add a \leftskip of \multitablecolspace to all columns after
    -      % the first one.
    -      %
    -      % If a template has been used, we will add \multitablecolspace
    -      % to the width of each template entry.
    -      %
    -      % If the user has set preamble in terms of percent of \hsize we will
    -      % use that dimension as the width of the column, and the \leftskip
    -      % will keep entries from bumping into each other.  Table will start at
    -      % left margin and final column will justify at right margin.
    -      %
    -      % Make sure we don't inherit \rightskip from the outer environment.
    -      \rightskip=0pt
    -      \ifnum\colcount=1
    -	% The first column will be indented with the surrounding text.
    -	\advance\hsize by\leftskip
    -      \else
    -	\ifsetpercent \else
    -	  % If user has not set preamble in terms of percent of \hsize
    -	  % we will advance \hsize by \multitablecolspace.
    -	  \advance\hsize by \multitablecolspace
    -	\fi
    -       % In either case we will make \leftskip=\multitablecolspace:
    -      \leftskip=\multitablecolspace
    -      \fi
    -      % Ignoring space at the beginning and end avoids an occasional spurious
    -      % blank line, when TeX decides to break the line at the space before the
    -      % box from the multistrut, so the strut ends up on a line by itself.
    -      % For example:
    -      % @multitable @columnfractions .11 .89
    -      % @item @code{#}
    -      % @tab Legal holiday which is valid in major parts of the whole country.
    -      % Is automatically provided with highlighting sequences respectively
    -      % marking characters.
    -      \noindent\ignorespaces##\unskip\multistrut
    -    }\cr
    -}
    -\def\Emultitable{%
    -  \crcr
    -  \egroup % end the \halign
    -  \global\setpercentfalse
    -}
    -
    -\def\setmultitablespacing{%
    -  \def\multistrut{\strut}% just use the standard line spacing
    -  %
    -  % Compute \multitablelinespace (if not defined by user) for use in
    -  % \multitableparskip calculation.  We used define \multistrut based on
    -  % this, but (ironically) that caused the spacing to be off.
    -  % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100.
    -\ifdim\multitablelinespace=0pt
    -\setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip
    -\global\advance\multitablelinespace by-\ht0
    -\fi
    -% Test to see if parskip is larger than space between lines of
    -% table. If not, do nothing.
    -%        If so, set to same dimension as multitablelinespace.
    -\ifdim\multitableparskip>\multitablelinespace
    -\global\multitableparskip=\multitablelinespace
    -\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
    -                                      % than skip between lines in the table.
    -\fi%
    -\ifdim\multitableparskip=0pt
    -\global\multitableparskip=\multitablelinespace
    -\global\advance\multitableparskip-7pt % to keep parskip somewhat smaller
    -                                      % than skip between lines in the table.
    -\fi}
    -
    -
    -\message{conditionals,}
    -
    -% @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext,
    -% @ifnotxml always succeed.  They currently do nothing; we don't
    -% attempt to check whether the conditionals are properly nested.  But we
    -% have to remember that they are conditionals, so that @end doesn't
    -% attempt to close an environment group.
    -%
    -\def\makecond#1{%
    -  \expandafter\let\csname #1\endcsname = \relax
    -  \expandafter\let\csname iscond.#1\endcsname = 1
    -}
    -\makecond{iftex}
    -\makecond{ifnotdocbook}
    -\makecond{ifnothtml}
    -\makecond{ifnotinfo}
    -\makecond{ifnotplaintext}
    -\makecond{ifnotxml}
    -
    -% Ignore @ignore, @ifhtml, @ifinfo, and the like.
    -%
    -\def\direntry{\doignore{direntry}}
    -\def\documentdescription{\doignore{documentdescription}}
    -\def\docbook{\doignore{docbook}}
    -\def\html{\doignore{html}}
    -\def\ifdocbook{\doignore{ifdocbook}}
    -\def\ifhtml{\doignore{ifhtml}}
    -\def\ifinfo{\doignore{ifinfo}}
    -\def\ifnottex{\doignore{ifnottex}}
    -\def\ifplaintext{\doignore{ifplaintext}}
    -\def\ifxml{\doignore{ifxml}}
    -\def\ignore{\doignore{ignore}}
    -\def\menu{\doignore{menu}}
    -\def\xml{\doignore{xml}}
    -
    -% Ignore text until a line `@end #1', keeping track of nested conditionals.
    -%
    -% A count to remember the depth of nesting.
    -\newcount\doignorecount
    -
    -\def\doignore#1{\begingroup
    -  % Scan in ``verbatim'' mode:
    -  \obeylines
    -  \catcode`\@ = \other
    -  \catcode`\{ = \other
    -  \catcode`\} = \other
    -  %
    -  % Make sure that spaces turn into tokens that match what \doignoretext wants.
    -  \spaceisspace
    -  %
    -  % Count number of #1's that we've seen.
    -  \doignorecount = 0
    -  %
    -  % Swallow text until we reach the matching `@end #1'.
    -  \dodoignore{#1}%
    -}
    -
    -{ \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source.
    -  \obeylines %
    -  %
    -  \gdef\dodoignore#1{%
    -    % #1 contains the command name as a string, e.g., `ifinfo'.
    -    %
    -    % Define a command to find the next `@end #1'.
    -    \long\def\doignoretext##1^^M@end #1{%
    -      \doignoretextyyy##1^^M@#1\_STOP_}%
    -    %
    -    % And this command to find another #1 command, at the beginning of a
    -    % line.  (Otherwise, we would consider a line `@c @ifset', for
    -    % example, to count as an @ifset for nesting.)
    -    \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}%
    -    %
    -    % And now expand that command.
    -    \doignoretext ^^M%
    -  }%
    -}
    -
    -\def\doignoreyyy#1{%
    -  \def\temp{#1}%
    -  \ifx\temp\empty			% Nothing found.
    -    \let\next\doignoretextzzz
    -  \else					% Found a nested condition, ...
    -    \advance\doignorecount by 1
    -    \let\next\doignoretextyyy		% ..., look for another.
    -    % If we're here, #1 ends with ^^M\ifinfo (for example).
    -  \fi
    -  \next #1% the token \_STOP_ is present just after this macro.
    -}
    -
    -% We have to swallow the remaining "\_STOP_".
    -%
    -\def\doignoretextzzz#1{%
    -  \ifnum\doignorecount = 0	% We have just found the outermost @end.
    -    \let\next\enddoignore
    -  \else				% Still inside a nested condition.
    -    \advance\doignorecount by -1
    -    \let\next\doignoretext      % Look for the next @end.
    -  \fi
    -  \next
    -}
    -
    -% Finish off ignored text.
    -{ \obeylines%
    -  % Ignore anything after the last `@end #1'; this matters in verbatim
    -  % environments, where otherwise the newline after an ignored conditional
    -  % would result in a blank line in the output.
    -  \gdef\enddoignore#1^^M{\endgroup\ignorespaces}%
    -}
    -
    -
    -% @set VAR sets the variable VAR to an empty value.
    -% @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE.
    -%
    -% Since we want to separate VAR from REST-OF-LINE (which might be
    -% empty), we can't just use \parsearg; we have to insert a space of our
    -% own to delimit the rest of the line, and then take it out again if we
    -% didn't need it.
    -% We rely on the fact that \parsearg sets \catcode`\ =10.
    -%
    -\parseargdef\set{\setyyy#1 \endsetyyy}
    -\def\setyyy#1 #2\endsetyyy{%
    -  {%
    -    \makevalueexpandable
    -    \def\temp{#2}%
    -    \edef\next{\gdef\makecsname{SET#1}}%
    -    \ifx\temp\empty
    -      \next{}%
    -    \else
    -      \setzzz#2\endsetzzz
    -    \fi
    -  }%
    -}
    -% Remove the trailing space \setxxx inserted.
    -\def\setzzz#1 \endsetzzz{\next{#1}}
    -
    -% @clear VAR clears (i.e., unsets) the variable VAR.
    -%
    -\parseargdef\clear{%
    -  {%
    -    \makevalueexpandable
    -    \global\expandafter\let\csname SET#1\endcsname=\relax
    -  }%
    -}
    -
    -% @value{foo} gets the text saved in variable foo.
    -\def\value{\begingroup\makevalueexpandable\valuexxx}
    -\def\valuexxx#1{\expandablevalue{#1}\endgroup}
    -{
    -  \catcode`\-=\active \catcode`\_=\active
    -  %
    -  \gdef\makevalueexpandable{%
    -    \let\value = \expandablevalue
    -    % We don't want these characters active, ...
    -    \catcode`\-=\other \catcode`\_=\other
    -    % ..., but we might end up with active ones in the argument if
    -    % we're called from @code, as @code{@value{foo-bar_}}, though.
    -    % So \let them to their normal equivalents.
    -    \let-\normaldash \let_\normalunderscore
    -  }
    -}
    -
    -\def\expandablevalue#1{%
    -  \expandafter\ifx\csname SET#1\endcsname\relax
    -    {[No value for ``#1'']}%
    -    \message{Variable `#1', used in @value, is not set.}%
    -  \else
    -    \csname SET#1\endcsname
    -  \fi
    -}
    -
    -% Like \expandablevalue, but completely expandable (the \message in the
    -% definition above operates at the execution level of TeX).  Used when
    -% writing to auxiliary files, due to the expansion that \write does.
    -% If flag is undefined, pass through an unexpanded @value command: maybe it
    -% will be set by the time it is read back in.
    -%
    -% NB flag names containing - or _ may not work here.
    -\def\dummyvalue#1{%
    -  \expandafter\ifx\csname SET#1\endcsname\relax
    -    \string\value{#1}%
    -  \else
    -    \csname SET#1\endcsname
    -  \fi
    -}
    -
    -% Used for @value's in index entries to form the sort key: expand the @value
    -% if possible, otherwise sort late.
    -\def\indexnofontsvalue#1{%
    -  \expandafter\ifx\csname SET#1\endcsname\relax
    -    ZZZZZZZ%
    -  \else
    -    \csname SET#1\endcsname
    -  \fi
    -}
    -
    -% @ifset VAR ... @end ifset reads the `...' iff VAR has been defined
    -% with @set.
    -%
    -% To get the special treatment we need for `@end ifset,' we call
    -% \makecond and then redefine.
    -%
    -\makecond{ifset}
    -\def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}}
    -\def\doifset#1#2{%
    -  {%
    -    \makevalueexpandable
    -    \let\next=\empty
    -    \expandafter\ifx\csname SET#2\endcsname\relax
    -      #1% If not set, redefine \next.
    -    \fi
    -    \expandafter
    -  }\next
    -}
    -\def\ifsetfail{\doignore{ifset}}
    -
    -% @ifclear VAR ... @end executes the `...' iff VAR has never been
    -% defined with @set, or has been undefined with @clear.
    -%
    -% The `\else' inside the `\doifset' parameter is a trick to reuse the
    -% above code: if the variable is not set, do nothing, if it is set,
    -% then redefine \next to \ifclearfail.
    -%
    -\makecond{ifclear}
    -\def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}}
    -\def\ifclearfail{\doignore{ifclear}}
    -
    -% @ifcommandisdefined CMD ... @end executes the `...' if CMD (written
    -% without the @) is in fact defined.  We can only feasibly check at the
    -% TeX level, so something like `mathcode' is going to considered
    -% defined even though it is not a Texinfo command.
    -%
    -\makecond{ifcommanddefined}
    -\def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}}
    -%
    -\def\doifcmddefined#1#2{{%
    -    \makevalueexpandable
    -    \let\next=\empty
    -    \expandafter\ifx\csname #2\endcsname\relax
    -      #1% If not defined, \let\next as above.
    -    \fi
    -    \expandafter
    -  }\next
    -}
    -\def\ifcmddefinedfail{\doignore{ifcommanddefined}}
    -
    -% @ifcommandnotdefined CMD ... handled similar to @ifclear above.
    -\makecond{ifcommandnotdefined}
    -\def\ifcommandnotdefined{%
    -  \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}}
    -\def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}}
    -
    -% Set the `txicommandconditionals' variable, so documents have a way to
    -% test if the @ifcommand...defined conditionals are available.
    -\set txicommandconditionals
    -
    -% @dircategory CATEGORY  -- specify a category of the dir file
    -% which this file should belong to.  Ignore this in TeX.
    -\let\dircategory=\comment
    -
    -% @defininfoenclose.
    -\let\definfoenclose=\comment
    -
    -
    -\message{indexing,}
    -% Index generation facilities
    -
    -% Define \newwrite to be identical to plain tex's \newwrite
    -% except not \outer, so it can be used within macros and \if's.
    -\edef\newwrite{\makecsname{ptexnewwrite}}
    -
    -% \newindex {foo} defines an index named IX.
    -% It automatically defines \IXindex such that
    -% \IXindex ...rest of line... puts an entry in the index IX.
    -% It also defines \IXindfile to be the number of the output channel for
    -% the file that accumulates this index.  The file's extension is IX.
    -% The name of an index should be no more than 2 characters long
    -% for the sake of vms.
    -%
    -\def\newindex#1{%
    -  \expandafter\chardef\csname#1indfile\endcsname=0
    -  \expandafter\xdef\csname#1index\endcsname{%     % Define @#1index
    -    \noexpand\doindex{#1}}
    -}
    -
    -% @defindex foo  ==  \newindex{foo}
    -%
    -\def\defindex{\parsearg\newindex}
    -
    -% Define @defcodeindex, like @defindex except put all entries in @code.
    -%
    -\def\defcodeindex{\parsearg\newcodeindex}
    -%
    -\def\newcodeindex#1{%
    -  \expandafter\chardef\csname#1indfile\endcsname=0
    -  \expandafter\xdef\csname#1index\endcsname{%
    -    \noexpand\docodeindex{#1}}%
    -}
    -
    -% The default indices:
    -\newindex{cp}%      concepts,
    -\newcodeindex{fn}%  functions,
    -\newcodeindex{vr}%  variables,
    -\newcodeindex{tp}%  types,
    -\newcodeindex{ky}%  keys
    -\newcodeindex{pg}%  and programs.
    -
    -
    -% @synindex foo bar    makes index foo feed into index bar.
    -% Do this instead of @defindex foo if you don't want it as a separate index.
    -%
    -% @syncodeindex foo bar   similar, but put all entries made for index foo
    -% inside @code.
    -%
    -\def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}}
    -\def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}}
    -
    -% #1 is \doindex or \docodeindex, #2 the index getting redefined (foo),
    -% #3 the target index (bar).
    -\def\dosynindex#1#2#3{%
    -  \requireopenindexfile{#3}%
    -  % redefine \fooindfile:
    -  \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname
    -  \expandafter\let\csname#2indfile\endcsname=\temp
    -  % redefine \fooindex:
    -  \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}%
    -}
    -
    -% Define \doindex, the driver for all index macros.
    -% Argument #1 is generated by the calling \fooindex macro,
    -% and it is the two-letter name of the index.
    -
    -\def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx}
    -\def\doindexxxx #1{\doind{\indexname}{#1}}
    -
    -% like the previous two, but they put @code around the argument.
    -\def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx}
    -\def\docodeindexxxx #1{\doind{\indexname}{\code{#1}}}
    -
    -
    -% Used for the aux, toc and index files to prevent expansion of Texinfo
    -% commands.
    -%
    -\def\atdummies{%
    -  \definedummyletter\@%
    -  \definedummyletter\ %
    -  \definedummyletter\{%
    -  \definedummyletter\}%
    -  \definedummyletter\&%
    -  %
    -  % Do the redefinitions.
    -  \definedummies
    -  \otherbackslash
    -}
    -
    -% \definedummyword defines \#1 as \string\#1\space, thus effectively
    -% preventing its expansion.  This is used only for control words,
    -% not control letters, because the \space would be incorrect for
    -% control characters, but is needed to separate the control word
    -% from whatever follows.
    -%
    -% These can be used both for control words that take an argument and
    -% those that do not.  If it is followed by {arg} in the input, then
    -% that will dutifully get written to the index (or wherever).
    -%
    -% For control letters, we have \definedummyletter, which omits the
    -% space.
    -%
    -\def\definedummyword  #1{\def#1{\string#1\space}}%
    -\def\definedummyletter#1{\def#1{\string#1}}%
    -\let\definedummyaccent\definedummyletter
    -
    -% Called from \atdummies to prevent the expansion of commands.
    -%
    -\def\definedummies{%
    -  %
    -  \let\commondummyword\definedummyword
    -  \let\commondummyletter\definedummyletter
    -  \let\commondummyaccent\definedummyaccent
    -  \commondummiesnofonts
    -  %
    -  \definedummyletter\_%
    -  \definedummyletter\-%
    -  %
    -  % Non-English letters.
    -  \definedummyword\AA
    -  \definedummyword\AE
    -  \definedummyword\DH
    -  \definedummyword\L
    -  \definedummyword\O
    -  \definedummyword\OE
    -  \definedummyword\TH
    -  \definedummyword\aa
    -  \definedummyword\ae
    -  \definedummyword\dh
    -  \definedummyword\exclamdown
    -  \definedummyword\l
    -  \definedummyword\o
    -  \definedummyword\oe
    -  \definedummyword\ordf
    -  \definedummyword\ordm
    -  \definedummyword\questiondown
    -  \definedummyword\ss
    -  \definedummyword\th
    -  %
    -  % Although these internal commands shouldn't show up, sometimes they do.
    -  \definedummyword\bf
    -  \definedummyword\gtr
    -  \definedummyword\hat
    -  \definedummyword\less
    -  \definedummyword\sf
    -  \definedummyword\sl
    -  \definedummyword\tclose
    -  \definedummyword\tt
    -  %
    -  \definedummyword\LaTeX
    -  \definedummyword\TeX
    -  %
    -  % Assorted special characters.
    -  \definedummyword\ampchar
    -  \definedummyword\atchar
    -  \definedummyword\arrow
    -  \definedummyword\backslashchar
    -  \definedummyword\bullet
    -  \definedummyword\comma
    -  \definedummyword\copyright
    -  \definedummyword\registeredsymbol
    -  \definedummyword\dots
    -  \definedummyword\enddots
    -  \definedummyword\entrybreak
    -  \definedummyword\equiv
    -  \definedummyword\error
    -  \definedummyword\euro
    -  \definedummyword\expansion
    -  \definedummyword\geq
    -  \definedummyword\guillemetleft
    -  \definedummyword\guillemetright
    -  \definedummyword\guilsinglleft
    -  \definedummyword\guilsinglright
    -  \definedummyword\lbracechar
    -  \definedummyword\leq
    -  \definedummyword\mathopsup
    -  \definedummyword\minus
    -  \definedummyword\ogonek
    -  \definedummyword\pounds
    -  \definedummyword\point
    -  \definedummyword\print
    -  \definedummyword\quotedblbase
    -  \definedummyword\quotedblleft
    -  \definedummyword\quotedblright
    -  \definedummyword\quoteleft
    -  \definedummyword\quoteright
    -  \definedummyword\quotesinglbase
    -  \definedummyword\rbracechar
    -  \definedummyword\result
    -  \definedummyword\sub
    -  \definedummyword\sup
    -  \definedummyword\textdegree
    -  %
    -  \definedummyword\subentry
    -  %
    -  % We want to disable all macros so that they are not expanded by \write.
    -  \macrolist
    -  \let\value\dummyvalue
    -  %
    -  \normalturnoffactive
    -}
    -
    -% \commondummiesnofonts: common to \definedummies and \indexnofonts.
    -% Define \commondummyletter, \commondummyaccent and \commondummyword before
    -% using.  Used for accents, font commands, and various control letters.
    -%
    -\def\commondummiesnofonts{%
    -  % Control letters and accents.
    -  \commondummyletter\!%
    -  \commondummyaccent\"%
    -  \commondummyaccent\'%
    -  \commondummyletter\*%
    -  \commondummyaccent\,%
    -  \commondummyletter\.%
    -  \commondummyletter\/%
    -  \commondummyletter\:%
    -  \commondummyaccent\=%
    -  \commondummyletter\?%
    -  \commondummyaccent\^%
    -  \commondummyaccent\`%
    -  \commondummyaccent\~%
    -  \commondummyword\u
    -  \commondummyword\v
    -  \commondummyword\H
    -  \commondummyword\dotaccent
    -  \commondummyword\ogonek
    -  \commondummyword\ringaccent
    -  \commondummyword\tieaccent
    -  \commondummyword\ubaraccent
    -  \commondummyword\udotaccent
    -  \commondummyword\dotless
    -  %
    -  % Texinfo font commands.
    -  \commondummyword\b
    -  \commondummyword\i
    -  \commondummyword\r
    -  \commondummyword\sansserif
    -  \commondummyword\sc
    -  \commondummyword\slanted
    -  \commondummyword\t
    -  %
    -  % Commands that take arguments.
    -  \commondummyword\abbr
    -  \commondummyword\acronym
    -  \commondummyword\anchor
    -  \commondummyword\cite
    -  \commondummyword\code
    -  \commondummyword\command
    -  \commondummyword\dfn
    -  \commondummyword\dmn
    -  \commondummyword\email
    -  \commondummyword\emph
    -  \commondummyword\env
    -  \commondummyword\file
    -  \commondummyword\image
    -  \commondummyword\indicateurl
    -  \commondummyword\inforef
    -  \commondummyword\kbd
    -  \commondummyword\key
    -  \commondummyword\math
    -  \commondummyword\option
    -  \commondummyword\pxref
    -  \commondummyword\ref
    -  \commondummyword\samp
    -  \commondummyword\strong
    -  \commondummyword\tie
    -  \commondummyword\U
    -  \commondummyword\uref
    -  \commondummyword\url
    -  \commondummyword\var
    -  \commondummyword\verb
    -  \commondummyword\w
    -  \commondummyword\xref
    -}
    -
    -\let\indexlbrace\relax
    -\let\indexrbrace\relax
    -\let\indexatchar\relax
    -\let\indexbackslash\relax
    -
    -{\catcode`\@=0
    -\catcode`\\=13
    -  @gdef@backslashdisappear{@def\{}}
    -}
    -
    -{
    -\catcode`\<=13
    -\catcode`\-=13
    -\catcode`\`=13
    -  \gdef\indexnonalnumdisappear{%
    -    \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else
    -      % @set txiindexlquoteignore makes us ignore left quotes in the sort term.
    -      % (Introduced for FSFS 2nd ed.)
    -      \let`=\empty
    -    \fi
    -    %
    -    \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else
    -      \backslashdisappear
    -    \fi
    -    %
    -    \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else
    -      \def-{}%
    -    \fi
    -    \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else
    -      \def<{}%
    -    \fi
    -    \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else
    -      \def\@{}%
    -    \fi
    -  }
    -
    -  \gdef\indexnonalnumreappear{%
    -    \let-\normaldash
    -    \let<\normalless
    -  }
    -}
    -
    -
    -% \indexnofonts is used when outputting the strings to sort the index
    -% by, and when constructing control sequence names.  It eliminates all
    -% control sequences and just writes whatever the best ASCII sort string
    -% would be for a given command (usually its argument).
    -%
    -\def\indexnofonts{%
    -  % Accent commands should become @asis.
    -  \def\commondummyaccent##1{\let##1\asis}%
    -  % We can just ignore other control letters.
    -  \def\commondummyletter##1{\let##1\empty}%
    -  % All control words become @asis by default; overrides below.
    -  \let\commondummyword\commondummyaccent
    -  \commondummiesnofonts
    -  %
    -  % Don't no-op \tt, since it isn't a user-level command
    -  % and is used in the definitions of the active chars like <, >, |, etc.
    -  % Likewise with the other plain tex font commands.
    -  %\let\tt=\asis
    -  %
    -  \def\ { }%
    -  \def\@{@}%
    -  \def\_{\normalunderscore}%
    -  \def\-{}% @- shouldn't affect sorting
    -  %
    -  \uccode`\1=`\{ \uppercase{\def\{{1}}%
    -  \uccode`\1=`\} \uppercase{\def\}{1}}%
    -  \let\lbracechar\{%
    -  \let\rbracechar\}%
    -  %
    -  % Non-English letters.
    -  \def\AA{AA}%
    -  \def\AE{AE}%
    -  \def\DH{DZZ}%
    -  \def\L{L}%
    -  \def\OE{OE}%
    -  \def\O{O}%
    -  \def\TH{TH}%
    -  \def\aa{aa}%
    -  \def\ae{ae}%
    -  \def\dh{dzz}%
    -  \def\exclamdown{!}%
    -  \def\l{l}%
    -  \def\oe{oe}%
    -  \def\ordf{a}%
    -  \def\ordm{o}%
    -  \def\o{o}%
    -  \def\questiondown{?}%
    -  \def\ss{ss}%
    -  \def\th{th}%
    -  %
    -  \def\LaTeX{LaTeX}%
    -  \def\TeX{TeX}%
    -  %
    -  % Assorted special characters.  \defglyph gives the control sequence a
    -  % definition that removes the {} that follows its use.
    -  \defglyph\atchar{@}%
    -  \defglyph\arrow{->}%
    -  \defglyph\bullet{bullet}%
    -  \defglyph\comma{,}%
    -  \defglyph\copyright{copyright}%
    -  \defglyph\dots{...}%
    -  \defglyph\enddots{...}%
    -  \defglyph\equiv{==}%
    -  \defglyph\error{error}%
    -  \defglyph\euro{euro}%
    -  \defglyph\expansion{==>}%
    -  \defglyph\geq{>=}%
    -  \defglyph\guillemetleft{<<}%
    -  \defglyph\guillemetright{>>}%
    -  \defglyph\guilsinglleft{<}%
    -  \defglyph\guilsinglright{>}%
    -  \defglyph\leq{<=}%
    -  \defglyph\lbracechar{\{}%
    -  \defglyph\minus{-}%
    -  \defglyph\point{.}%
    -  \defglyph\pounds{pounds}%
    -  \defglyph\print{-|}%
    -  \defglyph\quotedblbase{"}%
    -  \defglyph\quotedblleft{"}%
    -  \defglyph\quotedblright{"}%
    -  \defglyph\quoteleft{`}%
    -  \defglyph\quoteright{'}%
    -  \defglyph\quotesinglbase{,}%
    -  \defglyph\rbracechar{\}}%
    -  \defglyph\registeredsymbol{R}%
    -  \defglyph\result{=>}%
    -  \defglyph\textdegree{o}%
    -  %
    -  % We need to get rid of all macros, leaving only the arguments (if present).
    -  % Of course this is not nearly correct, but it is the best we can do for now.
    -  % makeinfo does not expand macros in the argument to @deffn, which ends up
    -  % writing an index entry, and texindex isn't prepared for an index sort entry
    -  % that starts with \.
    -  %
    -  % Since macro invocations are followed by braces, we can just redefine them
    -  % to take a single TeX argument.  The case of a macro invocation that
    -  % goes to end-of-line is not handled.
    -  %
    -  \macrolist
    -  \let\value\indexnofontsvalue
    -}
    -\def\defglyph#1#2{\def#1##1{#2}} % see above
    -
    -
    -
    -
    -% #1 is the index name, #2 is the entry text.
    -\def\doind#1#2{%
    -  \iflinks
    -  {%
    -    %
    -    \requireopenindexfile{#1}%
    -    \edef\writeto{\csname#1indfile\endcsname}%
    -    %
    -    \def\indextext{#2}%
    -    \safewhatsit\doindwrite
    -  }%
    -  \fi
    -}
    -
    -% Check if an index file has been opened, and if not, open it.
    -\def\requireopenindexfile#1{%
    -\ifnum\csname #1indfile\endcsname=0
    -  \expandafter\newwrite \csname#1indfile\endcsname
    -  \edef\suffix{#1}%
    -  % A .fls suffix would conflict with the file extension for the output
    -  % of -recorder, so use .f1s instead.
    -  \ifx\suffix\indexisfl\def\suffix{f1}\fi
    -  % Open the file
    -  \immediate\openout\csname#1indfile\endcsname \jobname.\suffix
    -  % Using \immediate above here prevents an object entering into the current
    -  % box, which could confound checks such as those in \safewhatsit for
    -  % preceding skips.
    -  \typeout{Writing index file \jobname.\suffix}%
    -\fi}
    -\def\indexisfl{fl}
    -
    -% Definition for writing index entry sort key.
    -{
    -\catcode`\-=13
    -\gdef\indexwritesortas{%
    -  \begingroup
    -  \indexnonalnumreappear
    -  \indexwritesortasxxx}
    -\gdef\indexwritesortasxxx#1{%
    -  \xdef\indexsortkey{#1}\endgroup}
    -}
    -
    -\def\indexwriteseealso#1{
    -  \gdef\pagenumbertext{\string\seealso{#1}}%
    -}
    -\def\indexwriteseeentry#1{
    -  \gdef\pagenumbertext{\string\seeentry{#1}}%
    -}
    -
    -% The default definitions
    -\def\sortas#1{}%
    -\def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only
    -\def\putwordSeeAlso{See also}
    -\def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only
    -
    -
    -% Given index entry text like "aaa @subentry bbb @sortas{ZZZ}":
    -%   * Set \bracedtext to "{aaa}{bbb}"
    -%   * Set \fullindexsortkey to "aaa @subentry ZZZ"
    -%   * If @seealso occurs, set \pagenumbertext
    -%
    -\def\splitindexentry#1{%
    -  \gdef\fullindexsortkey{}%
    -  \xdef\bracedtext{}%
    -  \def\sep{}%
    -  \def\seealso##1{}%
    -  \def\seeentry##1{}%
    -  \expandafter\doindexsegment#1\subentry\finish\subentry
    -}
    -
    -% append the results from the next segment
    -\def\doindexsegment#1\subentry{%
    -  \def\segment{#1}%
    -  \ifx\segment\isfinish
    -  \else
    -    %
    -    % Fully expand the segment, throwing away any @sortas directives, and
    -    % trim spaces.
    -    \edef\trimmed{\segment}%
    -    \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
    -    %
    -    \xdef\bracedtext{\bracedtext{\trimmed}}%
    -    %
    -    % Get the string to sort by.  Process the segment with all
    -    % font commands turned off.
    -    \bgroup
    -      \let\sortas\indexwritesortas
    -      \let\seealso\indexwriteseealso
    -      \let\seeentry\indexwriteseeentry
    -      \indexnofonts
    -      % The braces around the commands are recognized by texindex.
    -      \def\lbracechar{{\string\indexlbrace}}%
    -      \def\rbracechar{{\string\indexrbrace}}%
    -      \let\{=\lbracechar
    -      \let\}=\rbracechar
    -      \def\@{{\string\indexatchar}}%
    -      \def\atchar##1{\@}%
    -      \def\backslashchar{{\string\indexbackslash}}%
    -      \uccode`\~=`\\ \uppercase{\let~\backslashchar}%
    -      %
    -      \let\indexsortkey\empty
    -      \global\let\pagenumbertext\empty
    -      % Execute the segment and throw away the typeset output.  This executes
    -      % any @sortas or @seealso commands in this segment.
    -      \setbox\dummybox = \hbox{\segment}%
    -      \ifx\indexsortkey\empty{%
    -        \indexnonalnumdisappear
    -        \xdef\trimmed{\segment}%
    -        \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}%
    -        \xdef\indexsortkey{\trimmed}%
    -        \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi
    -      }\fi
    -      %
    -      % Append to \fullindexsortkey.
    -      \edef\tmp{\gdef\noexpand\fullindexsortkey{%
    -                  \fullindexsortkey\sep\indexsortkey}}%
    -      \tmp
    -    \egroup
    -    \def\sep{\subentry}%
    -    %
    -    \expandafter\doindexsegment
    -  \fi
    -}
    -\def\isfinish{\finish}%
    -\newbox\dummybox % used above
    -
    -\let\subentry\relax
    -
    -% Use \ instead of @ in index files.  To support old texi2dvi and texindex.
    -% This works without changing the escape character used in the toc or aux
    -% files because the index entries are fully expanded here, and \string uses
    -% the current value of \escapechar.
    -\def\escapeisbackslash{\escapechar=`\\}
    -
    -% Use \ in index files by default.  texi2dvi didn't support @ as the escape
    -% character (as it checked for "\entry" in the files, and not "@entry").  When
    -% the new version of texi2dvi has had a chance to become more prevalent, then
    -% the escape character can change back to @ again.  This should be an easy
    -% change to make now because both @ and \ are only used as escape characters in
    -% index files, never standing for themselves.
    -%
    -\set txiindexescapeisbackslash
    -
    -% Write the entry in \indextext to the index file.
    -%
    -\def\doindwrite{%
    -  \maybemarginindex
    -  %
    -  \atdummies
    -  %
    -  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else
    -    \escapeisbackslash
    -  \fi
    -  %
    -  % For texindex which always views { and } as separators.
    -  \def\{{\lbracechar{}}%
    -  \def\}{\rbracechar{}}%
    -  \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}%
    -  %
    -  % Split the entry into primary entry and any subentries, and get the index
    -  % sort key.
    -  \splitindexentry\indextext
    -  %
    -  % Set up the complete index entry, with both the sort key and
    -  % the original text, including any font commands.  We write
    -  % three arguments to \entry to the .?? file (four in the
    -  % subentry case), texindex reduces to two when writing the .??s
    -  % sorted result.
    -  %
    -  \edef\temp{%
    -    \write\writeto{%
    -      \string\entry{\fullindexsortkey}%
    -        {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}%
    -        \bracedtext}%
    -  }%
    -  \temp
    -}
    -
    -% Put the index entry in the margin if desired (undocumented).
    -\def\maybemarginindex{%
    -  \ifx\SETmarginindex\relax\else
    -    \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}%
    -  \fi
    -}
    -\let\SETmarginindex=\relax
    -
    -
    -% Take care of unwanted page breaks/skips around a whatsit:
    -%
    -% If a skip is the last thing on the list now, preserve it
    -% by backing up by \lastskip, doing the \write, then inserting
    -% the skip again.  Otherwise, the whatsit generated by the
    -% \write or \pdfdest will make \lastskip zero.  The result is that
    -% sequences like this:
    -% @end defun
    -% @tindex whatever
    -% @defun ...
    -% will have extra space inserted, because the \medbreak in the
    -% start of the @defun won't see the skip inserted by the @end of
    -% the previous defun.
    -%
    -% But don't do any of this if we're not in vertical mode.  We
    -% don't want to do a \vskip and prematurely end a paragraph.
    -%
    -% Avoid page breaks due to these extra skips, too.
    -%
    -% But wait, there is a catch there:
    -% We'll have to check whether \lastskip is zero skip.  \ifdim is not
    -% sufficient for this purpose, as it ignores stretch and shrink parts
    -% of the skip.  The only way seems to be to check the textual
    -% representation of the skip.
    -%
    -% The following is almost like \def\zeroskipmacro{0.0pt} except that
    -% the ``p'' and ``t'' characters have catcode \other, not 11 (letter).
    -%
    -\edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname}
    -%
    -\newskip\whatsitskip
    -\newcount\whatsitpenalty
    -%
    -% ..., ready, GO:
    -%
    -\def\safewhatsit#1{\ifhmode
    -  #1%
    - \else
    -  % \lastskip and \lastpenalty cannot both be nonzero simultaneously.
    -  \whatsitskip = \lastskip
    -  \edef\lastskipmacro{\the\lastskip}%
    -  \whatsitpenalty = \lastpenalty
    -  %
    -  % If \lastskip is nonzero, that means the last item was a
    -  % skip.  And since a skip is discardable, that means this
    -  % -\whatsitskip glue we're inserting is preceded by a
    -  % non-discardable item, therefore it is not a potential
    -  % breakpoint, therefore no \nobreak needed.
    -  \ifx\lastskipmacro\zeroskipmacro
    -  \else
    -    \vskip-\whatsitskip
    -  \fi
    -  %
    -  #1%
    -  %
    -  \ifx\lastskipmacro\zeroskipmacro
    -    % If \lastskip was zero, perhaps the last item was a penalty, and
    -    % perhaps it was >=10000, e.g., a \nobreak.  In that case, we want
    -    % to re-insert the same penalty (values >10000 are used for various
    -    % signals); since we just inserted a non-discardable item, any
    -    % following glue (such as a \parskip) would be a breakpoint.  For example:
    -    %   @deffn deffn-whatever
    -    %   @vindex index-whatever
    -    %   Description.
    -    % would allow a break between the index-whatever whatsit
    -    % and the "Description." paragraph.
    -    \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi
    -  \else
    -    % On the other hand, if we had a nonzero \lastskip,
    -    % this make-up glue would be preceded by a non-discardable item
    -    % (the whatsit from the \write), so we must insert a \nobreak.
    -    \nobreak\vskip\whatsitskip
    -  \fi
    -\fi}
    -
    -% The index entry written in the file actually looks like
    -%  \entry {sortstring}{page}{topic}
    -% or
    -%  \entry {sortstring}{page}{topic}{subtopic}
    -% The texindex program reads in these files and writes files
    -% containing these kinds of lines:
    -%  \initial {c}
    -%     before the first topic whose initial is c
    -%  \entry {topic}{pagelist}
    -%     for a topic that is used without subtopics
    -%  \primary {topic}
    -%  \entry {topic}{}
    -%     for the beginning of a topic that is used with subtopics
    -%  \secondary {subtopic}{pagelist}
    -%     for each subtopic.
    -%  \secondary {subtopic}{}
    -%     for a subtopic with sub-subtopics
    -%  \tertiary {subtopic}{subsubtopic}{pagelist}
    -%     for each sub-subtopic.
    -
    -% Define the user-accessible indexing commands
    -% @findex, @vindex, @kindex, @cindex.
    -
    -\def\findex {\fnindex}
    -\def\kindex {\kyindex}
    -\def\cindex {\cpindex}
    -\def\vindex {\vrindex}
    -\def\tindex {\tpindex}
    -\def\pindex {\pgindex}
    -
    -% Define the macros used in formatting output of the sorted index material.
    -
    -% @printindex causes a particular index (the ??s file) to get printed.
    -% It does not print any chapter heading (usually an @unnumbered).
    -%
    -\parseargdef\printindex{\begingroup
    -  \dobreak \chapheadingskip{10000}%
    -  %
    -  \smallfonts \rm
    -  \tolerance = 9500
    -  \plainfrenchspacing
    -  \everypar = {}% don't want the \kern\-parindent from indentation suppression.
    -  %
    -  % See comment in \requireopenindexfile.
    -  \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi
    -  %
    -  % See if the index file exists and is nonempty.
    -  \openin 1 \jobname.\indexname s
    -  \ifeof 1
    -    % \enddoublecolumns gets confused if there is no text in the index,
    -    % and it loses the chapter title and the aux file entries for the
    -    % index.  The easiest way to prevent this problem is to make sure
    -    % there is some text.
    -    \putwordIndexNonexistent
    -    \typeout{No file \jobname.\indexname s.}%
    -  \else
    -    % If the index file exists but is empty, then \openin leaves \ifeof
    -    % false.  We have to make TeX try to read something from the file, so
    -    % it can discover if there is anything in it.
    -    \read 1 to \thisline
    -    \ifeof 1
    -      \putwordIndexIsEmpty
    -    \else
    -      \expandafter\printindexzz\thisline\relax\relax\finish%
    -    \fi
    -  \fi
    -  \closein 1
    -\endgroup}
    -
    -% If the index file starts with a backslash, forgo reading the index
    -% file altogether.  If somebody upgrades texinfo.tex they may still have
    -% old index files using \ as the escape character.  Reading this would
    -% at best lead to typesetting garbage, at worst a TeX syntax error.
    -\def\printindexzz#1#2\finish{%
    -  \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax
    -    \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1
    -      \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax
    -\errmessage{%
    -ERROR: A sorted index file in an obsolete format was skipped.
    -To fix this problem, please upgrade your version of 'texi2dvi'
    -or 'texi2pdf' to that at .
    -If you are using an old version of 'texindex' (part of the Texinfo
    -distribution), you may also need to upgrade to a newer version (at least 6.0).
    -You may be able to typeset the index if you run
    -'texindex \jobname.\indexname' yourself.
    -You could also try setting the 'txiindexescapeisbackslash' flag by
    -running a command like
    -'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'.  If you do
    -this, Texinfo will try to use index files in the old format.
    -If you continue to have problems, deleting the index files and starting again
    -might help (with 'rm \jobname.?? \jobname.??s')%
    -}%
    -      \else
    -        (Skipped sorted index file in obsolete format)
    -      \fi
    -    \else
    -      \begindoublecolumns
    -      \input \jobname.\indexname s
    -      \enddoublecolumns
    -    \fi
    -  \else
    -    \begindoublecolumns
    -    \catcode`\\=0\relax
    -    \catcode`\@=12\relax
    -    \input \jobname.\indexname s
    -    \enddoublecolumns
    -  \fi
    -}
    -
    -% These macros are used by the sorted index file itself.
    -% Change them to control the appearance of the index.
    -
    -{\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13
    -\catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13
    -\catcode`\$=3
    -\gdef\initialglyphs{%
    -  % special control sequences used in the index sort key
    -  \let\indexlbrace\{%
    -  \let\indexrbrace\}%
    -  \let\indexatchar\@%
    -  \def\indexbackslash{\math{\backslash}}%
    -  %
    -  % Some changes for non-alphabetic characters.  Using the glyphs from the
    -  % math fonts looks more consistent than the typewriter font used elsewhere
    -  % for these characters.
    -  \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}}
    -  %
    -  % In case @\ is used for backslash
    -  \uppercase{\let\\=~}
    -  % Can't get bold backslash so don't use bold forward slash
    -  \catcode`\/=13
    -  \def/{{\secrmnotbold \normalslash}}%
    -  \def-{{\normaldash\normaldash}}% en dash `--'
    -  \def^{{\chapbf \normalcaret}}%
    -  \def~{{\chapbf \normaltilde}}%
    -  \def\_{%
    -     \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }%
    -  \def|{$\vert$}%
    -  \def<{$\less$}%
    -  \def>{$\gtr$}%
    -  \def+{$\normalplus$}%
    -}}
    -
    -\def\initial{%
    -  \bgroup
    -  \initialglyphs
    -  \initialx
    -}
    -
    -\def\initialx#1{%
    -  % Remove any glue we may have, we'll be inserting our own.
    -  \removelastskip
    -  %
    -  % We like breaks before the index initials, so insert a bonus.
    -  % The glue before the bonus allows a little bit of space at the
    -  % bottom of a column to reduce an increase in inter-line spacing.
    -  \nobreak
    -  \vskip 0pt plus 5\baselineskip
    -  \penalty -300
    -  \vskip 0pt plus -5\baselineskip
    -  %
    -  % Typeset the initial.  Making this add up to a whole number of
    -  % baselineskips increases the chance of the dots lining up from column
    -  % to column.  It still won't often be perfect, because of the stretch
    -  % we need before each entry, but it's better.
    -  %
    -  % No shrink because it confuses \balancecolumns.
    -  \vskip 1.67\baselineskip plus 1\baselineskip
    -  \leftline{\secfonts \kern-0.05em \secbf #1}%
    -  % \secfonts is inside the argument of \leftline so that the change of
    -  % \baselineskip will not affect any glue inserted before the vbox that
    -  % \leftline creates.
    -  % Do our best not to break after the initial.
    -  \nobreak
    -  \vskip .33\baselineskip plus .1\baselineskip
    -  \egroup % \initialglyphs
    -}
    -
    -\newdimen\entryrightmargin
    -\entryrightmargin=0pt
    -
    -% \entry typesets a paragraph consisting of the text (#1), dot leaders, and
    -% then page number (#2) flushed to the right margin.  It is used for index
    -% and table of contents entries.  The paragraph is indented by \leftskip.
    -%
    -\def\entry{%
    -  \begingroup
    -    %
    -    % Start a new paragraph if necessary, so our assignments below can't
    -    % affect previous text.
    -    \par
    -    %
    -    % No extra space above this paragraph.
    -    \parskip = 0in
    -    %
    -    % When reading the text of entry, convert explicit line breaks
    -    % from @* into spaces.  The user might give these in long section
    -    % titles, for instance.
    -    \def\*{\unskip\space\ignorespaces}%
    -    \def\entrybreak{\hfil\break}% An undocumented command
    -    %
    -    % Swallow the left brace of the text (first parameter):
    -    \afterassignment\doentry
    -    \let\temp =
    -}
    -\def\entrybreak{\unskip\space\ignorespaces}%
    -\def\doentry{%
    -    % Save the text of the entry
    -    \global\setbox\boxA=\hbox\bgroup
    -    \bgroup % Instead of the swallowed brace.
    -      \noindent
    -      \aftergroup\finishentry
    -      % And now comes the text of the entry.
    -      % Not absorbing as a macro argument reduces the chance of problems
    -      % with catcodes occurring.
    -}
    -{\catcode`\@=11
    -\gdef\finishentry#1{%
    -    \egroup % end box A
    -    \dimen@ = \wd\boxA % Length of text of entry
    -    \global\setbox\boxA=\hbox\bgroup
    -      \unhbox\boxA
    -      % #1 is the page number.
    -      %
    -      % Get the width of the page numbers, and only use
    -      % leaders if they are present.
    -      \global\setbox\boxB = \hbox{#1}%
    -      \ifdim\wd\boxB = 0pt
    -        \null\nobreak\hfill\ %
    -      \else
    -        %
    -        \null\nobreak\indexdotfill % Have leaders before the page number.
    -        %
    -        \ifpdforxetex
    -          \pdfgettoks#1.%
    -          \hskip\skip\thinshrinkable\the\toksA
    -        \else
    -          \hskip\skip\thinshrinkable #1%
    -        \fi
    -      \fi
    -    \egroup % end \boxA
    -    \ifdim\wd\boxB = 0pt
    -      \noindent\unhbox\boxA\par
    -      \nobreak
    -    \else\bgroup
    -      % We want the text of the entries to be aligned to the left, and the
    -      % page numbers to be aligned to the right.
    -      %
    -      \parindent = 0pt
    -      \advance\leftskip by 0pt plus 1fil
    -      \advance\leftskip by 0pt plus -1fill
    -      \rightskip = 0pt plus -1fil
    -      \advance\rightskip by 0pt plus 1fill
    -      % Cause last line, which could consist of page numbers on their own
    -      % if the list of page numbers is long, to be aligned to the right.
    -      \parfillskip=0pt plus -1fill
    -      %
    -      \advance\rightskip by \entryrightmargin
    -      % Determine how far we can stretch into the margin.
    -      % This allows, e.g., "Appendix H  GNU Free Documentation License" to
    -      % fit on one line in @letterpaper format.
    -      \ifdim\entryrightmargin>2.1em
    -        \dimen@i=2.1em
    -      \else
    -        \dimen@i=0em
    -      \fi
    -      \advance \parfillskip by 0pt minus 1\dimen@i
    -      %
    -      \dimen@ii = \hsize
    -      \advance\dimen@ii by -1\leftskip
    -      \advance\dimen@ii by -1\entryrightmargin
    -      \advance\dimen@ii by 1\dimen@i
    -      \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line
    -      \ifdim\dimen@ > 0.8\dimen@ii   % due to long index text
    -        % Try to split the text roughly evenly.  \dimen@ will be the length of
    -        % the first line.
    -        \dimen@ = 0.7\dimen@
    -        \dimen@ii = \hsize
    -        \ifnum\dimen@>\dimen@ii
    -          % If the entry is too long (for example, if it needs more than
    -          % two lines), use all the space in the first line.
    -          \dimen@ = \dimen@ii
    -        \fi
    -        \advance\leftskip by 0pt plus 1fill % ragged right
    -        \advance \dimen@ by 1\rightskip
    -        \parshape = 2 0pt \dimen@ 0em \dimen@ii
    -        % Ideally we'd add a finite glue at the end of the first line only,
    -        % instead of using \parshape with explicit line lengths, but TeX
    -        % doesn't seem to provide a way to do such a thing.
    -        %
    -        % Indent all lines but the first one.
    -        \advance\leftskip by 1em
    -        \advance\parindent by -1em
    -      \fi\fi
    -      \indent % start paragraph
    -      \unhbox\boxA
    -      %
    -      % Do not prefer a separate line ending with a hyphen to fewer lines.
    -      \finalhyphendemerits = 0
    -      %
    -      % Word spacing - no stretch
    -      \spaceskip=\fontdimen2\font minus \fontdimen4\font
    -      %
    -      \linepenalty=1000  % Discourage line breaks.
    -      \hyphenpenalty=5000  % Discourage hyphenation.
    -      %
    -      \par % format the paragraph
    -    \egroup % The \vbox
    -    \fi
    -  \endgroup
    -}}
    -
    -\newskip\thinshrinkable
    -\skip\thinshrinkable=.15em minus .15em
    -
    -% Like plain.tex's \dotfill, except uses up at least 1 em.
    -% The filll stretch here overpowers both the fil and fill stretch to push
    -% the page number to the right.
    -\def\indexdotfill{\cleaders
    -  \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll}
    -
    -
    -\def\primary #1{\line{#1\hfil}}
    -
    -\def\secondary{\indententry{0.5cm}}
    -\def\tertiary{\indententry{1cm}}
    -
    -\def\indententry#1#2#3{%
    -  \bgroup
    -  \leftskip=#1
    -  \entry{#2}{#3}%
    -  \egroup
    -}
    -
    -% Define two-column mode, which we use to typeset indexes.
    -% Adapted from the TeXbook, page 416, which is to say,
    -% the manmac.tex format used to print the TeXbook itself.
    -\catcode`\@=11  % private names
    -
    -\newbox\partialpage
    -\newdimen\doublecolumnhsize
    -
    -\def\begindoublecolumns{\begingroup % ended by \enddoublecolumns
    -  % If not much space left on page, start a new page.
    -  \ifdim\pagetotal>0.8\vsize\vfill\eject\fi
    -  %
    -  % Grab any single-column material above us.
    -  \output = {%
    -    \savetopmark
    -    %
    -    \global\setbox\partialpage = \vbox{%
    -      % Unvbox the main output page.
    -      \unvbox\PAGE
    -      \kern-\topskip \kern\baselineskip
    -    }%
    -  }%
    -  \eject % run that output routine to set \partialpage
    -  %
    -  % Use the double-column output routine for subsequent pages.
    -  \output = {\doublecolumnout}%
    -  %
    -  % Change the page size parameters.  We could do this once outside this
    -  % routine, in each of @smallbook, @afourpaper, and the default 8.5x11
    -  % format, but then we repeat the same computation.  Repeating a couple
    -  % of assignments once per index is clearly meaningless for the
    -  % execution time, so we may as well do it in one place.
    -  %
    -  % First we halve the line length, less a little for the gutter between
    -  % the columns.  We compute the gutter based on the line length, so it
    -  % changes automatically with the paper format.  The magic constant
    -  % below is chosen so that the gutter has the same value (well, +-<1pt)
    -  % as it did when we hard-coded it.
    -  %
    -  % We put the result in a separate register, \doublecolumhsize, so we
    -  % can restore it in \pagesofar, after \hsize itself has (potentially)
    -  % been clobbered.
    -  %
    -  \doublecolumnhsize = \hsize
    -    \advance\doublecolumnhsize by -.04154\hsize
    -    \divide\doublecolumnhsize by 2
    -  \hsize = \doublecolumnhsize
    -  %
    -  % Get the available space for the double columns -- the normal
    -  % (undoubled) page height minus any material left over from the
    -  % previous page.
    -  \advance\vsize by -\ht\partialpage
    -  \vsize = 2\vsize
    -  %
    -  % For the benefit of balancing columns
    -  \advance\baselineskip by 0pt plus 0.5pt
    -}
    -
    -% The double-column output routine for all double-column pages except
    -% the last, which is done by \balancecolumns.
    -%
    -\def\doublecolumnout{%
    -  %
    -  \savetopmark
    -  \splittopskip=\topskip \splitmaxdepth=\maxdepth
    -  \dimen@ = \vsize
    -  \divide\dimen@ by 2
    -  %
    -  % box0 will be the left-hand column, box2 the right.
    -  \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@
    -  \global\advance\vsize by 2\ht\partialpage
    -  \onepageout\pagesofar % empty except for the first time we are called
    -  \unvbox\PAGE
    -  \penalty\outputpenalty
    -}
    -%
    -% Re-output the contents of the output page -- any previous material,
    -% followed by the two boxes we just split, in box0 and box2.
    -\def\pagesofar{%
    -  \unvbox\partialpage
    -  %
    -  \hsize = \doublecolumnhsize
    -  \wd0=\hsize \wd2=\hsize
    -  \hbox to\txipagewidth{\box0\hfil\box2}%
    -}
    -
    -
    -% Finished with double columns.
    -\def\enddoublecolumns{%
    -  % The following penalty ensures that the page builder is exercised
    -  % _before_ we change the output routine.  This is necessary in the
    -  % following situation:
    -  %
    -  % The last section of the index consists only of a single entry.
    -  % Before this section, \pagetotal is less than \pagegoal, so no
    -  % break occurs before the last section starts.  However, the last
    -  % section, consisting of \initial and the single \entry, does not
    -  % fit on the page and has to be broken off.  Without the following
    -  % penalty the page builder will not be exercised until \eject
    -  % below, and by that time we'll already have changed the output
    -  % routine to the \balancecolumns version, so the next-to-last
    -  % double-column page will be processed with \balancecolumns, which
    -  % is wrong:  The two columns will go to the main vertical list, with
    -  % the broken-off section in the recent contributions.  As soon as
    -  % the output routine finishes, TeX starts reconsidering the page
    -  % break.  The two columns and the broken-off section both fit on the
    -  % page, because the two columns now take up only half of the page
    -  % goal.  When TeX sees \eject from below which follows the final
    -  % section, it invokes the new output routine that we've set after
    -  % \balancecolumns below; \onepageout will try to fit the two columns
    -  % and the final section into the vbox of \txipageheight (see
    -  % \pagebody), causing an overfull box.
    -  %
    -  % Note that glue won't work here, because glue does not exercise the
    -  % page builder, unlike penalties (see The TeXbook, pp. 280-281).
    -  \penalty0
    -  %
    -  \output = {%
    -    % Split the last of the double-column material.
    -    \savetopmark
    -    \balancecolumns
    -  }%
    -  \eject % call the \output just set
    -  \ifdim\pagetotal=0pt
    -    % Having called \balancecolumns once, we do not
    -    % want to call it again.  Therefore, reset \output to its normal
    -    % definition right away.
    -    \global\output=\expandafter{\the\defaultoutput}
    -    %
    -    \endgroup % started in \begindoublecolumns
    -    % Leave the double-column material on the current page, no automatic
    -    % page break.
    -    \box\balancedcolumns
    -    %
    -    % \pagegoal was set to the doubled \vsize above, since we restarted
    -    % the current page.  We're now back to normal single-column
    -    % typesetting, so reset \pagegoal to the normal \vsize.
    -    \global\vsize = \txipageheight %
    -    \pagegoal = \txipageheight %
    -  \else
    -    % We had some left-over material.  This might happen when \doublecolumnout
    -    % is called in \balancecolumns.  Try again.
    -    \expandafter\enddoublecolumns
    -  \fi
    -}
    -\newbox\balancedcolumns
    -\setbox\balancedcolumns=\vbox{shouldnt see this}%
    -%
    -% Only called for the last of the double column material.  \doublecolumnout
    -% does the others.
    -\def\balancecolumns{%
    -  \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120.
    -  \dimen@ = \ht0
    -  \ifdim\dimen@<7\baselineskip
    -    % Don't split a short final column in two.
    -    \setbox2=\vbox{}%
    -    \global\setbox\balancedcolumns=\vbox{\pagesofar}%
    -  \else
    -    % double the leading vertical space
    -    \advance\dimen@ by \topskip
    -    \advance\dimen@ by-\baselineskip
    -    \divide\dimen@ by 2 % target to split to
    -    \dimen@ii = \dimen@
    -    \splittopskip = \topskip
    -    % Loop until left column is at least as high as the right column.
    -    {%
    -      \vbadness = 10000
    -      \loop
    -        \global\setbox3 = \copy0
    -        \global\setbox1 = \vsplit3 to \dimen@
    -      \ifdim\ht1<\ht3
    -        \global\advance\dimen@ by 1pt
    -      \repeat
    -    }%
    -    % Now the left column is in box 1, and the right column in box 3.
    -    %
    -    % Check whether the left column has come out higher than the page itself.
    -    % (Note that we have doubled \vsize for the double columns, so
    -    % the actual height of the page is 0.5\vsize).
    -    \ifdim2\ht1>\vsize
    -      % It appears that we have been called upon to balance too much material.
    -      % Output some of it with \doublecolumnout, leaving the rest on the page.
    -      \setbox\PAGE=\box0
    -      \doublecolumnout
    -    \else
    -      % Compare the heights of the two columns.
    -      \ifdim4\ht1>5\ht3
    -        % Column heights are too different, so don't make their bottoms
    -        % flush with each other.
    -        \setbox2=\vbox to \ht1 {\unvbox3\vfill}%
    -        \setbox0=\vbox to \ht1 {\unvbox1\vfill}%
    -      \else
    -        % Make column bottoms flush with each other.
    -        \setbox2=\vbox to\ht1{\unvbox3\unskip}%
    -        \setbox0=\vbox to\ht1{\unvbox1\unskip}%
    -      \fi
    -      \global\setbox\balancedcolumns=\vbox{\pagesofar}%
    -    \fi
    -  \fi
    -  %
    -}
    -\catcode`\@ = \other
    -
    -
    -\message{sectioning,}
    -% Chapters, sections, etc.
    -
    -% Let's start with @part.
    -\outer\parseargdef\part{\partzzz{#1}}
    -\def\partzzz#1{%
    -  \chapoddpage
    -  \null
    -  \vskip.3\vsize  % move it down on the page a bit
    -  \begingroup
    -    \noindent \titlefonts\rm #1\par % the text
    -    \let\lastnode=\empty      % no node to associate with
    -    \writetocentry{part}{#1}{}% but put it in the toc
    -    \headingsoff              % no headline or footline on the part page
    -    % This outputs a mark at the end of the page that clears \thischapter
    -    % and \thissection, as is done in \startcontents.
    -    \let\pchapsepmacro\relax
    -    \chapmacro{}{Yomitfromtoc}{}%
    -    \chapoddpage
    -  \endgroup
    -}
    -
    -% \unnumberedno is an oxymoron.  But we count the unnumbered
    -% sections so that we can refer to them unambiguously in the pdf
    -% outlines by their "section number".  We avoid collisions with chapter
    -% numbers by starting them at 10000.  (If a document ever has 10000
    -% chapters, we're in trouble anyway, I'm sure.)
    -\newcount\unnumberedno \unnumberedno = 10000
    -\newcount\chapno
    -\newcount\secno        \secno=0
    -\newcount\subsecno     \subsecno=0
    -\newcount\subsubsecno  \subsubsecno=0
    -
    -% This counter is funny since it counts through charcodes of letters A, B, ...
    -\newcount\appendixno  \appendixno = `\@
    -%
    -% \def\appendixletter{\char\the\appendixno}
    -% We do the following ugly conditional instead of the above simple
    -% construct for the sake of pdftex, which needs the actual
    -% letter in the expansion, not just typeset.
    -%
    -\def\appendixletter{%
    -  \ifnum\appendixno=`A A%
    -  \else\ifnum\appendixno=`B B%
    -  \else\ifnum\appendixno=`C C%
    -  \else\ifnum\appendixno=`D D%
    -  \else\ifnum\appendixno=`E E%
    -  \else\ifnum\appendixno=`F F%
    -  \else\ifnum\appendixno=`G G%
    -  \else\ifnum\appendixno=`H H%
    -  \else\ifnum\appendixno=`I I%
    -  \else\ifnum\appendixno=`J J%
    -  \else\ifnum\appendixno=`K K%
    -  \else\ifnum\appendixno=`L L%
    -  \else\ifnum\appendixno=`M M%
    -  \else\ifnum\appendixno=`N N%
    -  \else\ifnum\appendixno=`O O%
    -  \else\ifnum\appendixno=`P P%
    -  \else\ifnum\appendixno=`Q Q%
    -  \else\ifnum\appendixno=`R R%
    -  \else\ifnum\appendixno=`S S%
    -  \else\ifnum\appendixno=`T T%
    -  \else\ifnum\appendixno=`U U%
    -  \else\ifnum\appendixno=`V V%
    -  \else\ifnum\appendixno=`W W%
    -  \else\ifnum\appendixno=`X X%
    -  \else\ifnum\appendixno=`Y Y%
    -  \else\ifnum\appendixno=`Z Z%
    -  % The \the is necessary, despite appearances, because \appendixletter is
    -  % expanded while writing the .toc file.  \char\appendixno is not
    -  % expandable, thus it is written literally, thus all appendixes come out
    -  % with the same letter (or @) in the toc without it.
    -  \else\char\the\appendixno
    -  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi
    -  \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi}
    -
    -% Each @chapter defines these (using marks) as the number+name, number
    -% and name of the chapter.  Page headings and footings can use
    -% these.  @section does likewise.
    -\def\thischapter{}
    -\def\thischapternum{}
    -\def\thischaptername{}
    -\def\thissection{}
    -\def\thissectionnum{}
    -\def\thissectionname{}
    -
    -\newcount\absseclevel % used to calculate proper heading level
    -\newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count
    -
    -% @raisesections: treat @section as chapter, @subsection as section, etc.
    -\def\raisesections{\global\advance\secbase by -1}
    -
    -% @lowersections: treat @chapter as section, @section as subsection, etc.
    -\def\lowersections{\global\advance\secbase by 1}
    -
    -% we only have subsub.
    -\chardef\maxseclevel = 3
    -%
    -% A numbered section within an unnumbered changes to unnumbered too.
    -% To achieve this, remember the "biggest" unnum. sec. we are currently in:
    -\chardef\unnlevel = \maxseclevel
    -%
    -% Trace whether the current chapter is an appendix or not:
    -% \chapheadtype is "N" or "A", unnumbered chapters are ignored.
    -\def\chapheadtype{N}
    -
    -% Choose a heading macro
    -% #1 is heading type
    -% #2 is heading level
    -% #3 is text for heading
    -\def\genhead#1#2#3{%
    -  % Compute the abs. sec. level:
    -  \absseclevel=#2
    -  \advance\absseclevel by \secbase
    -  % Make sure \absseclevel doesn't fall outside the range:
    -  \ifnum \absseclevel < 0
    -    \absseclevel = 0
    -  \else
    -    \ifnum \absseclevel > 3
    -      \absseclevel = 3
    -    \fi
    -  \fi
    -  % The heading type:
    -  \def\headtype{#1}%
    -  \if \headtype U%
    -    \ifnum \absseclevel < \unnlevel
    -      \chardef\unnlevel = \absseclevel
    -    \fi
    -  \else
    -    % Check for appendix sections:
    -    \ifnum \absseclevel = 0
    -      \edef\chapheadtype{\headtype}%
    -    \else
    -      \if \headtype A\if \chapheadtype N%
    -	\errmessage{@appendix... within a non-appendix chapter}%
    -      \fi\fi
    -    \fi
    -    % Check for numbered within unnumbered:
    -    \ifnum \absseclevel > \unnlevel
    -      \def\headtype{U}%
    -    \else
    -      \chardef\unnlevel = 3
    -    \fi
    -  \fi
    -  % Now print the heading:
    -  \if \headtype U%
    -    \ifcase\absseclevel
    -	\unnumberedzzz{#3}%
    -    \or \unnumberedseczzz{#3}%
    -    \or \unnumberedsubseczzz{#3}%
    -    \or \unnumberedsubsubseczzz{#3}%
    -    \fi
    -  \else
    -    \if \headtype A%
    -      \ifcase\absseclevel
    -	  \appendixzzz{#3}%
    -      \or \appendixsectionzzz{#3}%
    -      \or \appendixsubseczzz{#3}%
    -      \or \appendixsubsubseczzz{#3}%
    -      \fi
    -    \else
    -      \ifcase\absseclevel
    -	  \chapterzzz{#3}%
    -      \or \seczzz{#3}%
    -      \or \numberedsubseczzz{#3}%
    -      \or \numberedsubsubseczzz{#3}%
    -      \fi
    -    \fi
    -  \fi
    -  \suppressfirstparagraphindent
    -}
    -
    -% an interface:
    -\def\numhead{\genhead N}
    -\def\apphead{\genhead A}
    -\def\unnmhead{\genhead U}
    -
    -% @chapter, @appendix, @unnumbered.  Increment top-level counter, reset
    -% all lower-level sectioning counters to zero.
    -%
    -% Also set \chaplevelprefix, which we prepend to @float sequence numbers
    -% (e.g., figures), q.v.  By default (before any chapter), that is empty.
    -\let\chaplevelprefix = \empty
    -%
    -\outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz
    -\def\chapterzzz#1{%
    -  % section resetting is \global in case the chapter is in a group, such
    -  % as an @include file.
    -  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    -    \global\advance\chapno by 1
    -  %
    -  % Used for \float.
    -  \gdef\chaplevelprefix{\the\chapno.}%
    -  \resetallfloatnos
    -  %
    -  % \putwordChapter can contain complex things in translations.
    -  \toks0=\expandafter{\putwordChapter}%
    -  \message{\the\toks0 \space \the\chapno}%
    -  %
    -  % Write the actual heading.
    -  \chapmacro{#1}{Ynumbered}{\the\chapno}%
    -  %
    -  % So @section and the like are numbered underneath this chapter.
    -  \global\let\section = \numberedsec
    -  \global\let\subsection = \numberedsubsec
    -  \global\let\subsubsection = \numberedsubsubsec
    -}
    -
    -\outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz
    -%
    -\def\appendixzzz#1{%
    -  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    -    \global\advance\appendixno by 1
    -  \gdef\chaplevelprefix{\appendixletter.}%
    -  \resetallfloatnos
    -  %
    -  % \putwordAppendix can contain complex things in translations.
    -  \toks0=\expandafter{\putwordAppendix}%
    -  \message{\the\toks0 \space \appendixletter}%
    -  %
    -  \chapmacro{#1}{Yappendix}{\appendixletter}%
    -  %
    -  \global\let\section = \appendixsec
    -  \global\let\subsection = \appendixsubsec
    -  \global\let\subsubsection = \appendixsubsubsec
    -}
    -
    -% normally unnmhead0 calls unnumberedzzz:
    -\outer\parseargdef\unnumbered{\unnmhead0{#1}}
    -\def\unnumberedzzz#1{%
    -  \global\secno=0 \global\subsecno=0 \global\subsubsecno=0
    -    \global\advance\unnumberedno by 1
    -  %
    -  % Since an unnumbered has no number, no prefix for figures.
    -  \global\let\chaplevelprefix = \empty
    -  \resetallfloatnos
    -  %
    -  % This used to be simply \message{#1}, but TeX fully expands the
    -  % argument to \message.  Therefore, if #1 contained @-commands, TeX
    -  % expanded them.  For example, in `@unnumbered The @cite{Book}', TeX
    -  % expanded @cite (which turns out to cause errors because \cite is meant
    -  % to be executed, not expanded).
    -  %
    -  % Anyway, we don't want the fully-expanded definition of @cite to appear
    -  % as a result of the \message, we just want `@cite' itself.  We use
    -  % \the to achieve this: TeX expands \the only once,
    -  % simply yielding the contents of .  (We also do this for
    -  % the toc entries.)
    -  \toks0 = {#1}%
    -  \message{(\the\toks0)}%
    -  %
    -  \chapmacro{#1}{Ynothing}{\the\unnumberedno}%
    -  %
    -  \global\let\section = \unnumberedsec
    -  \global\let\subsection = \unnumberedsubsec
    -  \global\let\subsubsection = \unnumberedsubsubsec
    -}
    -
    -% @centerchap is like @unnumbered, but the heading is centered.
    -\outer\parseargdef\centerchap{%
    -  \let\centerparametersmaybe = \centerparameters
    -  \unnmhead0{#1}%
    -  \let\centerparametersmaybe = \relax
    -}
    -
    -% @top is like @unnumbered.
    -\let\top\unnumbered
    -
    -% Sections.
    -%
    -\outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz
    -\def\seczzz#1{%
    -  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
    -  \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}%
    -}
    -
    -% normally calls appendixsectionzzz:
    -\outer\parseargdef\appendixsection{\apphead1{#1}}
    -\def\appendixsectionzzz#1{%
    -  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
    -  \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}%
    -}
    -\let\appendixsec\appendixsection
    -
    -% normally calls unnumberedseczzz:
    -\outer\parseargdef\unnumberedsec{\unnmhead1{#1}}
    -\def\unnumberedseczzz#1{%
    -  \global\subsecno=0 \global\subsubsecno=0  \global\advance\secno by 1
    -  \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}%
    -}
    -
    -% Subsections.
    -%
    -% normally calls numberedsubseczzz:
    -\outer\parseargdef\numberedsubsec{\numhead2{#1}}
    -\def\numberedsubseczzz#1{%
    -  \global\subsubsecno=0  \global\advance\subsecno by 1
    -  \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}%
    -}
    -
    -% normally calls appendixsubseczzz:
    -\outer\parseargdef\appendixsubsec{\apphead2{#1}}
    -\def\appendixsubseczzz#1{%
    -  \global\subsubsecno=0  \global\advance\subsecno by 1
    -  \sectionheading{#1}{subsec}{Yappendix}%
    -                 {\appendixletter.\the\secno.\the\subsecno}%
    -}
    -
    -% normally calls unnumberedsubseczzz:
    -\outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}}
    -\def\unnumberedsubseczzz#1{%
    -  \global\subsubsecno=0  \global\advance\subsecno by 1
    -  \sectionheading{#1}{subsec}{Ynothing}%
    -                 {\the\unnumberedno.\the\secno.\the\subsecno}%
    -}
    -
    -% Subsubsections.
    -%
    -% normally numberedsubsubseczzz:
    -\outer\parseargdef\numberedsubsubsec{\numhead3{#1}}
    -\def\numberedsubsubseczzz#1{%
    -  \global\advance\subsubsecno by 1
    -  \sectionheading{#1}{subsubsec}{Ynumbered}%
    -                 {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}%
    -}
    -
    -% normally appendixsubsubseczzz:
    -\outer\parseargdef\appendixsubsubsec{\apphead3{#1}}
    -\def\appendixsubsubseczzz#1{%
    -  \global\advance\subsubsecno by 1
    -  \sectionheading{#1}{subsubsec}{Yappendix}%
    -                 {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}%
    -}
    -
    -% normally unnumberedsubsubseczzz:
    -\outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}}
    -\def\unnumberedsubsubseczzz#1{%
    -  \global\advance\subsubsecno by 1
    -  \sectionheading{#1}{subsubsec}{Ynothing}%
    -                 {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}%
    -}
    -
    -% These macros control what the section commands do, according
    -% to what kind of chapter we are in (ordinary, appendix, or unnumbered).
    -% Define them by default for a numbered chapter.
    -\let\section = \numberedsec
    -\let\subsection = \numberedsubsec
    -\let\subsubsection = \numberedsubsubsec
    -
    -% Define @majorheading, @heading and @subheading
    -
    -\def\majorheading{%
    -  {\advance\chapheadingskip by 10pt \chapbreak }%
    -  \parsearg\chapheadingzzz
    -}
    -
    -\def\chapheading{\chapbreak \parsearg\chapheadingzzz}
    -\def\chapheadingzzz#1{%
    -  \vbox{\chapfonts \raggedtitlesettings #1\par}%
    -  \nobreak\bigskip \nobreak
    -  \suppressfirstparagraphindent
    -}
    -
    -% @heading, @subheading, @subsubheading.
    -\parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{}
    -  \suppressfirstparagraphindent}
    -\parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{}
    -  \suppressfirstparagraphindent}
    -\parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{}
    -  \suppressfirstparagraphindent}
    -
    -% These macros generate a chapter, section, etc. heading only
    -% (including whitespace, linebreaking, etc. around it),
    -% given all the information in convenient, parsed form.
    -
    -% Args are the skip and penalty (usually negative)
    -\def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi}
    -
    -% Parameter controlling skip before chapter headings (if needed)
    -\newskip\chapheadingskip
    -
    -% Define plain chapter starts, and page on/off switching for it.
    -\def\chapbreak{\dobreak \chapheadingskip {-4000}}
    -
    -% Start a new page
    -\def\chappager{\par\vfill\supereject}
    -
    -% \chapoddpage - start on an odd page for a new chapter
    -% Because \domark is called before \chapoddpage, the filler page will
    -% get the headings for the next chapter, which is wrong.  But we don't
    -% care -- we just disable all headings on the filler page.
    -\def\chapoddpage{%
    -  \chappager
    -  \ifodd\pageno \else
    -    \begingroup
    -      \headingsoff
    -      \null
    -      \chappager
    -    \endgroup
    -  \fi
    -}
    -
    -\parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname}
    -
    -\def\CHAPPAGoff{%
    -\global\let\contentsalignmacro = \chappager
    -\global\let\pchapsepmacro=\chapbreak
    -\global\let\pagealignmacro=\chappager}
    -
    -\def\CHAPPAGon{%
    -\global\let\contentsalignmacro = \chappager
    -\global\let\pchapsepmacro=\chappager
    -\global\let\pagealignmacro=\chappager
    -\global\def\HEADINGSon{\HEADINGSsingle}}
    -
    -\def\CHAPPAGodd{%
    -\global\let\contentsalignmacro = \chapoddpage
    -\global\let\pchapsepmacro=\chapoddpage
    -\global\let\pagealignmacro=\chapoddpage
    -\global\def\HEADINGSon{\HEADINGSdouble}}
    -
    -\CHAPPAGon
    -
    -% \chapmacro - Chapter opening.
    -%
    -% #1 is the text, #2 is the section type (Ynumbered, Ynothing,
    -% Yappendix, Yomitfromtoc), #3 the chapter number.
    -% Not used for @heading series.
    -%
    -% To test against our argument.
    -\def\Ynothingkeyword{Ynothing}
    -\def\Yappendixkeyword{Yappendix}
    -\def\Yomitfromtockeyword{Yomitfromtoc}
    -%
    -\def\chapmacro#1#2#3{%
    -  \expandafter\ifx\thisenv\titlepage\else
    -    \checkenv{}% chapters, etc., should not start inside an environment.
    -  \fi
    -  % Insert the first mark before the heading break (see notes for \domark).
    -  \let\prevchapterdefs=\currentchapterdefs
    -  \let\prevsectiondefs=\currentsectiondefs
    -  \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}%
    -                        \gdef\thissection{}}%
    -  %
    -  \def\temptype{#2}%
    -  \ifx\temptype\Ynothingkeyword
    -    \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
    -                          \gdef\thischapter{\thischaptername}}%
    -  \else\ifx\temptype\Yomitfromtockeyword
    -    \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}%
    -                          \gdef\thischapter{}}%
    -  \else\ifx\temptype\Yappendixkeyword
    -    \toks0={#1}%
    -    \xdef\currentchapterdefs{%
    -      \gdef\noexpand\thischaptername{\the\toks0}%
    -      \gdef\noexpand\thischapternum{\appendixletter}%
    -      % \noexpand\putwordAppendix avoids expanding indigestible
    -      % commands in some of the translations.
    -      \gdef\noexpand\thischapter{\noexpand\putwordAppendix{}
    -                                 \noexpand\thischapternum:
    -                                 \noexpand\thischaptername}%
    -    }%
    -  \else
    -    \toks0={#1}%
    -    \xdef\currentchapterdefs{%
    -      \gdef\noexpand\thischaptername{\the\toks0}%
    -      \gdef\noexpand\thischapternum{\the\chapno}%
    -      % \noexpand\putwordChapter avoids expanding indigestible
    -      % commands in some of the translations.
    -      \gdef\noexpand\thischapter{\noexpand\putwordChapter{}
    -                                 \noexpand\thischapternum:
    -                                 \noexpand\thischaptername}%
    -    }%
    -  \fi\fi\fi
    -  %
    -  % Output the mark.  Pass it through \safewhatsit, to take care of
    -  % the preceding space.
    -  \safewhatsit\domark
    -  %
    -  % Insert the chapter heading break.
    -  \pchapsepmacro
    -  %
    -  % Now the second mark, after the heading break.  No break points
    -  % between here and the heading.
    -  \let\prevchapterdefs=\currentchapterdefs
    -  \let\prevsectiondefs=\currentsectiondefs
    -  \domark
    -  %
    -  {%
    -    \chapfonts \rm
    -    \let\footnote=\errfootnoteheading % give better error message
    -    %
    -    % Have to define \currentsection before calling \donoderef, because the
    -    % xref code eventually uses it.  On the other hand, it has to be called
    -    % after \pchapsepmacro, or the headline will change too soon.
    -    \gdef\currentsection{#1}%
    -    %
    -    % Only insert the separating space if we have a chapter/appendix
    -    % number, and don't print the unnumbered ``number''.
    -    \ifx\temptype\Ynothingkeyword
    -      \setbox0 = \hbox{}%
    -      \def\toctype{unnchap}%
    -    \else\ifx\temptype\Yomitfromtockeyword
    -      \setbox0 = \hbox{}% contents like unnumbered, but no toc entry
    -      \def\toctype{omit}%
    -    \else\ifx\temptype\Yappendixkeyword
    -      \setbox0 = \hbox{\putwordAppendix{} #3\enspace}%
    -      \def\toctype{app}%
    -    \else
    -      \setbox0 = \hbox{#3\enspace}%
    -      \def\toctype{numchap}%
    -    \fi\fi\fi
    -    %
    -    % Write the toc entry for this chapter.  Must come before the
    -    % \donoderef, because we include the current node name in the toc
    -    % entry, and \donoderef resets it to empty.
    -    \writetocentry{\toctype}{#1}{#3}%
    -    %
    -    % For pdftex, we have to write out the node definition (aka, make
    -    % the pdfdest) after any page break, but before the actual text has
    -    % been typeset.  If the destination for the pdf outline is after the
    -    % text, then jumping from the outline may wind up with the text not
    -    % being visible, for instance under high magnification.
    -    \donoderef{#2}%
    -    %
    -    % Typeset the actual heading.
    -    \nobreak % Avoid page breaks at the interline glue.
    -    \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe
    -          \unhbox0 #1\par}%
    -  }%
    -  \nobreak\bigskip % no page break after a chapter title
    -  \nobreak
    -}
    -
    -% @centerchap -- centered and unnumbered.
    -\let\centerparametersmaybe = \relax
    -\def\centerparameters{%
    -  \advance\rightskip by 3\rightskip
    -  \leftskip = \rightskip
    -  \parfillskip = 0pt
    -}
    -
    -
    -% Section titles.  These macros combine the section number parts and
    -% call the generic \sectionheading to do the printing.
    -%
    -\newskip\secheadingskip
    -\def\secheadingbreak{\dobreak \secheadingskip{-1000}}
    -
    -% Subsection titles.
    -\newskip\subsecheadingskip
    -\def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}}
    -
    -% Subsubsection titles.
    -\def\subsubsecheadingskip{\subsecheadingskip}
    -\def\subsubsecheadingbreak{\subsecheadingbreak}
    -
    -
    -% Print any size, any type, section title.
    -%
    -% #1 is the text of the title,
    -% #2 is the section level (sec/subsec/subsubsec),
    -% #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc),
    -% #4 is the section number.
    -%
    -\def\seckeyword{sec}
    -%
    -\def\sectionheading#1#2#3#4{%
    -  {%
    -    \def\sectionlevel{#2}%
    -    \def\temptype{#3}%
    -    %
    -    % It is ok for the @heading series commands to appear inside an
    -    % environment (it's been historically allowed, though the logic is
    -    % dubious), but not the others.
    -    \ifx\temptype\Yomitfromtockeyword\else
    -      \checkenv{}% non-@*heading should not be in an environment.
    -    \fi
    -    \let\footnote=\errfootnoteheading
    -    %
    -    % Switch to the right set of fonts.
    -    \csname #2fonts\endcsname \rm
    -    %
    -    % Insert first mark before the heading break (see notes for \domark).
    -    \let\prevsectiondefs=\currentsectiondefs
    -    \ifx\temptype\Ynothingkeyword
    -      \ifx\sectionlevel\seckeyword
    -        \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}%
    -                              \gdef\thissection{\thissectionname}}%
    -      \fi
    -    \else\ifx\temptype\Yomitfromtockeyword
    -      % Don't redefine \thissection.
    -    \else\ifx\temptype\Yappendixkeyword
    -      \ifx\sectionlevel\seckeyword
    -        \toks0={#1}%
    -        \xdef\currentsectiondefs{%
    -          \gdef\noexpand\thissectionname{\the\toks0}%
    -          \gdef\noexpand\thissectionnum{#4}%
    -          % \noexpand\putwordSection avoids expanding indigestible
    -          % commands in some of the translations.
    -          \gdef\noexpand\thissection{\noexpand\putwordSection{}
    -                                     \noexpand\thissectionnum:
    -                                     \noexpand\thissectionname}%
    -        }%
    -      \fi
    -    \else
    -      \ifx\sectionlevel\seckeyword
    -        \toks0={#1}%
    -        \xdef\currentsectiondefs{%
    -          \gdef\noexpand\thissectionname{\the\toks0}%
    -          \gdef\noexpand\thissectionnum{#4}%
    -          % \noexpand\putwordSection avoids expanding indigestible
    -          % commands in some of the translations.
    -          \gdef\noexpand\thissection{\noexpand\putwordSection{}
    -                                     \noexpand\thissectionnum:
    -                                     \noexpand\thissectionname}%
    -        }%
    -      \fi
    -    \fi\fi\fi
    -    %
    -    % Go into vertical mode.  Usually we'll already be there, but we
    -    % don't want the following whatsit to end up in a preceding paragraph
    -    % if the document didn't happen to have a blank line.
    -    \par
    -    %
    -    % Output the mark.  Pass it through \safewhatsit, to take care of
    -    % the preceding space.
    -    \safewhatsit\domark
    -    %
    -    % Insert space above the heading.
    -    \csname #2headingbreak\endcsname
    -    %
    -    % Now the second mark, after the heading break.  No break points
    -    % between here and the heading.
    -    \global\let\prevsectiondefs=\currentsectiondefs
    -    \domark
    -    %
    -    % Only insert the space after the number if we have a section number.
    -    \ifx\temptype\Ynothingkeyword
    -      \setbox0 = \hbox{}%
    -      \def\toctype{unn}%
    -      \gdef\currentsection{#1}%
    -    \else\ifx\temptype\Yomitfromtockeyword
    -      % for @headings -- no section number, don't include in toc,
    -      % and don't redefine \currentsection.
    -      \setbox0 = \hbox{}%
    -      \def\toctype{omit}%
    -      \let\sectionlevel=\empty
    -    \else\ifx\temptype\Yappendixkeyword
    -      \setbox0 = \hbox{#4\enspace}%
    -      \def\toctype{app}%
    -      \gdef\currentsection{#1}%
    -    \else
    -      \setbox0 = \hbox{#4\enspace}%
    -      \def\toctype{num}%
    -      \gdef\currentsection{#1}%
    -    \fi\fi\fi
    -    %
    -    % Write the toc entry (before \donoderef).  See comments in \chapmacro.
    -    \writetocentry{\toctype\sectionlevel}{#1}{#4}%
    -    %
    -    % Write the node reference (= pdf destination for pdftex).
    -    % Again, see comments in \chapmacro.
    -    \donoderef{#3}%
    -    %
    -    % Interline glue will be inserted when the vbox is completed.
    -    % That glue will be a valid breakpoint for the page, since it'll be
    -    % preceded by a whatsit (usually from the \donoderef, or from the
    -    % \writetocentry if there was no node).  We don't want to allow that
    -    % break, since then the whatsits could end up on page n while the
    -    % section is on page n+1, thus toc/etc. are wrong.  Debian bug 276000.
    -    \nobreak
    -    %
    -    % Output the actual section heading.
    -    \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright
    -          \hangindent=\wd0  % zero if no section number
    -          \unhbox0 #1}%
    -  }%
    -  % Add extra space after the heading -- half of whatever came above it.
    -  % Don't allow stretch, though.
    -  \kern .5 \csname #2headingskip\endcsname
    -  %
    -  % Do not let the kern be a potential breakpoint, as it would be if it
    -  % was followed by glue.
    -  \nobreak
    -  %
    -  % We'll almost certainly start a paragraph next, so don't let that
    -  % glue accumulate.  (Not a breakpoint because it's preceded by a
    -  % discardable item.)  However, when a paragraph is not started next
    -  % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out
    -  % or the negative glue will cause weirdly wrong output, typically
    -  % obscuring the section heading with something else.
    -  \vskip-\parskip
    -  %
    -  % This is so the last item on the main vertical list is a known
    -  % \penalty > 10000, so \startdefun, etc., can recognize the situation
    -  % and do the needful.
    -  \penalty 10001
    -}
    -
    -
    -\message{toc,}
    -% Table of contents.
    -\newwrite\tocfile
    -
    -% Write an entry to the toc file, opening it if necessary.
    -% Called from @chapter, etc.
    -%
    -% Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno}
    -% We append the current node name (if any) and page number as additional
    -% arguments for the \{chap,sec,...}entry macros which will eventually
    -% read this.  The node name is used in the pdf outlines as the
    -% destination to jump to.
    -%
    -% We open the .toc file for writing here instead of at @setfilename (or
    -% any other fixed time) so that @contents can be anywhere in the document.
    -% But if #1 is `omit', then we don't do anything.  This is used for the
    -% table of contents chapter openings themselves.
    -%
    -\newif\iftocfileopened
    -\def\omitkeyword{omit}%
    -%
    -\def\writetocentry#1#2#3{%
    -  \edef\writetoctype{#1}%
    -  \ifx\writetoctype\omitkeyword \else
    -    \iftocfileopened\else
    -      \immediate\openout\tocfile = \jobname.toc
    -      \global\tocfileopenedtrue
    -    \fi
    -    %
    -    \iflinks
    -      {\atdummies
    -       \edef\temp{%
    -         \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}%
    -       \temp
    -      }%
    -    \fi
    -  \fi
    -  %
    -  % Tell \shipout to create a pdf destination on each page, if we're
    -  % writing pdf.  These are used in the table of contents.  We can't
    -  % just write one on every page because the title pages are numbered
    -  % 1 and 2 (the page numbers aren't printed), and so are the first
    -  % two pages of the document.  Thus, we'd have two destinations named
    -  % `1', and two named `2'.
    -  \ifpdforxetex
    -    \global\pdfmakepagedesttrue
    -  \fi
    -}
    -
    -
    -% These characters do not print properly in the Computer Modern roman
    -% fonts, so we must take special care.  This is more or less redundant
    -% with the Texinfo input format setup at the end of this file.
    -%
    -\def\activecatcodes{%
    -  \catcode`\"=\active
    -  \catcode`\$=\active
    -  \catcode`\<=\active
    -  \catcode`\>=\active
    -  \catcode`\\=\active
    -  \catcode`\^=\active
    -  \catcode`\_=\active
    -  \catcode`\|=\active
    -  \catcode`\~=\active
    -}
    -
    -
    -% Read the toc file, which is essentially Texinfo input.
    -\def\readtocfile{%
    -  \setupdatafile
    -  \activecatcodes
    -  \input \tocreadfilename
    -}
    -
    -\newskip\contentsrightmargin \contentsrightmargin=1in
    -\newcount\savepageno
    -\newcount\lastnegativepageno \lastnegativepageno = -1
    -
    -% Prepare to read what we've written to \tocfile.
    -%
    -\def\startcontents#1{%
    -  % If @setchapternewpage on, and @headings double, the contents should
    -  % start on an odd page, unlike chapters.  Thus, we maintain
    -  % \contentsalignmacro in parallel with \pagealignmacro.
    -  % From: Torbjorn Granlund 
    -  \contentsalignmacro
    -  \immediate\closeout\tocfile
    -  %
    -  % Don't need to put `Contents' or `Short Contents' in the headline.
    -  % It is abundantly clear what they are.
    -  \chapmacro{#1}{Yomitfromtoc}{}%
    -  %
    -  \savepageno = \pageno
    -  \begingroup                  % Set up to handle contents files properly.
    -    \raggedbottom              % Worry more about breakpoints than the bottom.
    -    \entryrightmargin=\contentsrightmargin % Don't use the full line length.
    -    %
    -    % Roman numerals for page numbers.
    -    \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi
    -}
    -
    -% redefined for the two-volume lispref.  We always output on
    -% \jobname.toc even if this is redefined.
    -%
    -\def\tocreadfilename{\jobname.toc}
    -
    -% Normal (long) toc.
    -%
    -\def\contents{%
    -  \startcontents{\putwordTOC}%
    -    \openin 1 \tocreadfilename\space
    -    \ifeof 1 \else
    -      \readtocfile
    -    \fi
    -    \vfill \eject
    -    \contentsalignmacro % in case @setchapternewpage odd is in effect
    -    \ifeof 1 \else
    -      \pdfmakeoutlines
    -    \fi
    -    \closein 1
    -  \endgroup
    -  \lastnegativepageno = \pageno
    -  \global\pageno = \savepageno
    -}
    -
    -% And just the chapters.
    -\def\summarycontents{%
    -  \startcontents{\putwordShortTOC}%
    -    %
    -    \let\partentry = \shortpartentry
    -    \let\numchapentry = \shortchapentry
    -    \let\appentry = \shortchapentry
    -    \let\unnchapentry = \shortunnchapentry
    -    % We want a true roman here for the page numbers.
    -    \secfonts
    -    \let\rm=\shortcontrm \let\bf=\shortcontbf
    -    \let\sl=\shortcontsl \let\tt=\shortconttt
    -    \rm
    -    \hyphenpenalty = 10000
    -    \advance\baselineskip by 1pt % Open it up a little.
    -    \def\numsecentry##1##2##3##4{}
    -    \let\appsecentry = \numsecentry
    -    \let\unnsecentry = \numsecentry
    -    \let\numsubsecentry = \numsecentry
    -    \let\appsubsecentry = \numsecentry
    -    \let\unnsubsecentry = \numsecentry
    -    \let\numsubsubsecentry = \numsecentry
    -    \let\appsubsubsecentry = \numsecentry
    -    \let\unnsubsubsecentry = \numsecentry
    -    \openin 1 \tocreadfilename\space
    -    \ifeof 1 \else
    -      \readtocfile
    -    \fi
    -    \closein 1
    -    \vfill \eject
    -    \contentsalignmacro % in case @setchapternewpage odd is in effect
    -  \endgroup
    -  \lastnegativepageno = \pageno
    -  \global\pageno = \savepageno
    -}
    -\let\shortcontents = \summarycontents
    -
    -% Typeset the label for a chapter or appendix for the short contents.
    -% The arg is, e.g., `A' for an appendix, or `3' for a chapter.
    -%
    -\def\shortchaplabel#1{%
    -  % This space should be enough, since a single number is .5em, and the
    -  % widest letter (M) is 1em, at least in the Computer Modern fonts.
    -  % But use \hss just in case.
    -  % (This space doesn't include the extra space that gets added after
    -  % the label; that gets put in by \shortchapentry above.)
    -  %
    -  % We'd like to right-justify chapter numbers, but that looks strange
    -  % with appendix letters.  And right-justifying numbers and
    -  % left-justifying letters looks strange when there is less than 10
    -  % chapters.  Have to read the whole toc once to know how many chapters
    -  % there are before deciding ...
    -  \hbox to 1em{#1\hss}%
    -}
    -
    -% These macros generate individual entries in the table of contents.
    -% The first argument is the chapter or section name.
    -% The last argument is the page number.
    -% The arguments in between are the chapter number, section number, ...
    -
    -% Parts, in the main contents.  Replace the part number, which doesn't
    -% exist, with an empty box.  Let's hope all the numbers have the same width.
    -% Also ignore the page number, which is conventionally not printed.
    -\def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}}
    -\def\partentry#1#2#3#4{%
    -  % Add stretch and a bonus for breaking the page before the part heading.
    -  % This reduces the chance of the page being broken immediately after the
    -  % part heading, before a following chapter heading.
    -  \vskip 0pt plus 5\baselineskip
    -  \penalty-300
    -  \vskip 0pt plus -5\baselineskip
    -  \dochapentry{\numeralbox\labelspace#1}{}%
    -}
    -%
    -% Parts, in the short toc.
    -\def\shortpartentry#1#2#3#4{%
    -  \penalty-300
    -  \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip
    -  \shortchapentry{{\bf #1}}{\numeralbox}{}{}%
    -}
    -
    -% Chapters, in the main contents.
    -\def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}}
    -
    -% Chapters, in the short toc.
    -% See comments in \dochapentry re vbox and related settings.
    -\def\shortchapentry#1#2#3#4{%
    -  \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}%
    -}
    -
    -% Appendices, in the main contents.
    -% Need the word Appendix, and a fixed-size box.
    -%
    -\def\appendixbox#1{%
    -  % We use M since it's probably the widest letter.
    -  \setbox0 = \hbox{\putwordAppendix{} M}%
    -  \hbox to \wd0{\putwordAppendix{} #1\hss}}
    -%
    -\def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}}
    -
    -% Unnumbered chapters.
    -\def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}}
    -\def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}}
    -
    -% Sections.
    -\def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}}
    -\let\appsecentry=\numsecentry
    -\def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}}
    -
    -% Subsections.
    -\def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}}
    -\let\appsubsecentry=\numsubsecentry
    -\def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}}
    -
    -% And subsubsections.
    -\def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}}
    -\let\appsubsubsecentry=\numsubsubsecentry
    -\def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}}
    -
    -% This parameter controls the indentation of the various levels.
    -% Same as \defaultparindent.
    -\newdimen\tocindent \tocindent = 15pt
    -
    -% Now for the actual typesetting. In all these, #1 is the text and #2 is the
    -% page number.
    -%
    -% If the toc has to be broken over pages, we want it to be at chapters
    -% if at all possible; hence the \penalty.
    -\def\dochapentry#1#2{%
    -   \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip
    -   \begingroup
    -     % Move the page numbers slightly to the right
    -     \advance\entryrightmargin by -0.05em
    -     \chapentryfonts
    -     \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    -   \endgroup
    -   \nobreak\vskip .25\baselineskip plus.1\baselineskip
    -}
    -
    -\def\dosecentry#1#2{\begingroup
    -  \secentryfonts \leftskip=\tocindent
    -  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    -\endgroup}
    -
    -\def\dosubsecentry#1#2{\begingroup
    -  \subsecentryfonts \leftskip=2\tocindent
    -  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    -\endgroup}
    -
    -\def\dosubsubsecentry#1#2{\begingroup
    -  \subsubsecentryfonts \leftskip=3\tocindent
    -  \tocentry{#1}{\dopageno\bgroup#2\egroup}%
    -\endgroup}
    -
    -% We use the same \entry macro as for the index entries.
    -\let\tocentry = \entry
    -
    -% Space between chapter (or whatever) number and the title.
    -\def\labelspace{\hskip1em \relax}
    -
    -\def\dopageno#1{{\rm #1}}
    -\def\doshortpageno#1{{\rm #1}}
    -
    -\def\chapentryfonts{\secfonts \rm}
    -\def\secentryfonts{\textfonts}
    -\def\subsecentryfonts{\textfonts}
    -\def\subsubsecentryfonts{\textfonts}
    -
    -
    -\message{environments,}
    -% @foo ... @end foo.
    -
    -% @tex ... @end tex    escapes into raw TeX temporarily.
    -% One exception: @ is still an escape character, so that @end tex works.
    -% But \@ or @@ will get a plain @ character.
    -
    -\envdef\tex{%
    -  \setupmarkupstyle{tex}%
    -  \catcode `\\=0 \catcode `\{=1 \catcode `\}=2
    -  \catcode `\$=3 \catcode `\&=4 \catcode `\#=6
    -  \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie
    -  \catcode `\%=14
    -  \catcode `\+=\other
    -  \catcode `\"=\other
    -  \catcode `\|=\other
    -  \catcode `\<=\other
    -  \catcode `\>=\other
    -  \catcode `\`=\other
    -  \catcode `\'=\other
    -  %
    -  % ' is active in math mode (mathcode"8000).  So reset it, and all our
    -  % other math active characters (just in case), to plain's definitions.
    -  \mathactive
    -  %
    -  % Inverse of the list at the beginning of the file.
    -  \let\b=\ptexb
    -  \let\bullet=\ptexbullet
    -  \let\c=\ptexc
    -  \let\,=\ptexcomma
    -  \let\.=\ptexdot
    -  \let\dots=\ptexdots
    -  \let\equiv=\ptexequiv
    -  \let\!=\ptexexclam
    -  \let\i=\ptexi
    -  \let\indent=\ptexindent
    -  \let\noindent=\ptexnoindent
    -  \let\{=\ptexlbrace
    -  \let\+=\tabalign
    -  \let\}=\ptexrbrace
    -  \let\/=\ptexslash
    -  \let\sp=\ptexsp
    -  \let\*=\ptexstar
    -  %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode
    -  \let\t=\ptext
    -  \expandafter \let\csname top\endcsname=\ptextop  % we've made it outer
    -  \let\frenchspacing=\plainfrenchspacing
    -  %
    -  \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}%
    -  \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}%
    -  \def\@{@}%
    -}
    -% There is no need to define \Etex.
    -
    -% Define @lisp ... @end lisp.
    -% @lisp environment forms a group so it can rebind things,
    -% including the definition of @end lisp (which normally is erroneous).
    -
    -% Amount to narrow the margins by for @lisp.
    -\newskip\lispnarrowing \lispnarrowing=0.4in
    -
    -% This is the definition that ^^M gets inside @lisp, @example, and other
    -% such environments.  \null is better than a space, since it doesn't
    -% have any width.
    -\def\lisppar{\null\endgraf}
    -
    -% This space is always present above and below environments.
    -\newskip\envskipamount \envskipamount = 0pt
    -
    -% Make spacing and below environment symmetrical.  We use \parskip here
    -% to help in doing that, since in @example-like environments \parskip
    -% is reset to zero; thus the \afterenvbreak inserts no space -- but the
    -% start of the next paragraph will insert \parskip.
    -%
    -\def\aboveenvbreak{{%
    -  % =10000 instead of <10000 because of a special case in \itemzzz and
    -  % \sectionheading, q.v.
    -  \ifnum \lastpenalty=10000 \else
    -    \advance\envskipamount by \parskip
    -    \endgraf
    -    \ifdim\lastskip<\envskipamount
    -      \removelastskip
    -      \ifnum\lastpenalty<10000
    -        % Penalize breaking before the environment, because preceding text
    -        % often leads into it.
    -        \penalty100
    -      \fi
    -      \vskip\envskipamount
    -    \fi
    -  \fi
    -}}
    -
    -\def\afterenvbreak{{%
    -  % =10000 instead of <10000 because of a special case in \itemzzz and
    -  % \sectionheading, q.v.
    -  \ifnum \lastpenalty=10000 \else
    -    \advance\envskipamount by \parskip
    -    \endgraf
    -    \ifdim\lastskip<\envskipamount
    -      \removelastskip
    -      % it's not a good place to break if the last penalty was \nobreak
    -      % or better ...
    -      \ifnum\lastpenalty<10000 \penalty-50 \fi
    -      \vskip\envskipamount
    -    \fi
    -  \fi
    -}}
    -
    -% \nonarrowing is a flag.  If "set", @lisp etc don't narrow margins; it will
    -% also clear it, so that its embedded environments do the narrowing again.
    -\let\nonarrowing=\relax
    -
    -% @cartouche ... @end cartouche: draw rectangle w/rounded corners around
    -% environment contents.
    -
    -%
    -\def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth
    -\def\ctr{{\hskip 6pt\circle\char'010}}
    -\def\cbl{{\circle\char'012\hskip -6pt}}
    -\def\cbr{{\hskip 6pt\circle\char'011}}
    -\def\carttop{\hbox to \cartouter{\hskip\lskip
    -        \ctl\leaders\hrule height\circthick\hfil\ctr
    -        \hskip\rskip}}
    -\def\cartbot{\hbox to \cartouter{\hskip\lskip
    -        \cbl\leaders\hrule height\circthick\hfil\cbr
    -        \hskip\rskip}}
    -%
    -\newskip\lskip\newskip\rskip
    -
    -% only require the font if @cartouche is actually used
    -\def\cartouchefontdefs{%
    -  \font\circle=lcircle10\relax
    -  \circthick=\fontdimen8\circle
    -}
    -\newdimen\circthick
    -\newdimen\cartouter\newdimen\cartinner
    -\newskip\normbskip\newskip\normpskip\newskip\normlskip
    -
    -
    -\envdef\cartouche{%
    -  \cartouchefontdefs
    -  \ifhmode\par\fi  % can't be in the midst of a paragraph.
    -  \startsavinginserts
    -  \lskip=\leftskip \rskip=\rightskip
    -  \leftskip=0pt\rightskip=0pt % we want these *outside*.
    -  \cartinner=\hsize \advance\cartinner by-\lskip
    -  \advance\cartinner by-\rskip
    -  \cartouter=\hsize
    -  \advance\cartouter by 18.4pt	% allow for 3pt kerns on either
    -				% side, and for 6pt waste from
    -				% each corner char, and rule thickness
    -  \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip
    -  %
    -  % If this cartouche directly follows a sectioning command, we need the
    -  % \parskip glue (backspaced over by default) or the cartouche can
    -  % collide with the section heading.
    -  \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi
    -  %
    -  \setbox\groupbox=\vbox\bgroup
    -      \baselineskip=0pt\parskip=0pt\lineskip=0pt
    -      \carttop
    -      \hbox\bgroup
    -	  \hskip\lskip
    -	  \vrule\kern3pt
    -	  \vbox\bgroup
    -	      \kern3pt
    -	      \hsize=\cartinner
    -	      \baselineskip=\normbskip
    -	      \lineskip=\normlskip
    -	      \parskip=\normpskip
    -	      \vskip -\parskip
    -	      \comment % For explanation, see the end of def\group.
    -}
    -\def\Ecartouche{%
    -              \ifhmode\par\fi
    -	      \kern3pt
    -	  \egroup
    -	  \kern3pt\vrule
    -	  \hskip\rskip
    -      \egroup
    -      \cartbot
    -  \egroup
    -  \addgroupbox
    -  \checkinserts
    -}
    -
    -
    -% This macro is called at the beginning of all the @example variants,
    -% inside a group.
    -\newdimen\nonfillparindent
    -\def\nonfillstart{%
    -  \aboveenvbreak
    -  \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy
    -  \sepspaces % Make spaces be word-separators rather than space tokens.
    -  \let\par = \lisppar % don't ignore blank lines
    -  \obeylines % each line of input is a line of output
    -  \parskip = 0pt
    -  % Turn off paragraph indentation but redefine \indent to emulate
    -  % the normal \indent.
    -  \nonfillparindent=\parindent
    -  \parindent = 0pt
    -  \let\indent\nonfillindent
    -  %
    -  \emergencystretch = 0pt % don't try to avoid overfull boxes
    -  \ifx\nonarrowing\relax
    -    \advance \leftskip by \lispnarrowing
    -    \exdentamount=\lispnarrowing
    -  \else
    -    \let\nonarrowing = \relax
    -  \fi
    -  \let\exdent=\nofillexdent
    -}
    -
    -\begingroup
    -\obeyspaces
    -% We want to swallow spaces (but not other tokens) after the fake
    -% @indent in our nonfill-environments, where spaces are normally
    -% active and set to @tie, resulting in them not being ignored after
    -% @indent.
    -\gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}%
    -\gdef\nonfillindentcheck{%
    -\ifx\temp %
    -\expandafter\nonfillindentgobble%
    -\else%
    -\leavevmode\nonfillindentbox%
    -\fi%
    -}%
    -\endgroup
    -\def\nonfillindentgobble#1{\nonfillindent}
    -\def\nonfillindentbox{\hbox to \nonfillparindent{\hss}}
    -
    -% If you want all examples etc. small: @set dispenvsize small.
    -% If you want even small examples the full size: @set dispenvsize nosmall.
    -% This affects the following displayed environments:
    -%    @example, @display, @format, @lisp
    -%
    -\def\smallword{small}
    -\def\nosmallword{nosmall}
    -\let\SETdispenvsize\relax
    -\def\setnormaldispenv{%
    -  \ifx\SETdispenvsize\smallword
    -    % end paragraph for sake of leading, in case document has no blank
    -    % line.  This is redundant with what happens in \aboveenvbreak, but
    -    % we need to do it before changing the fonts, and it's inconvenient
    -    % to change the fonts afterward.
    -    \ifnum \lastpenalty=10000 \else \endgraf \fi
    -    \smallexamplefonts \rm
    -  \fi
    -}
    -\def\setsmalldispenv{%
    -  \ifx\SETdispenvsize\nosmallword
    -  \else
    -    \ifnum \lastpenalty=10000 \else \endgraf \fi
    -    \smallexamplefonts \rm
    -  \fi
    -}
    -
    -% We often define two environments, @foo and @smallfoo.
    -% Let's do it in one command.  #1 is the env name, #2 the definition.
    -\def\makedispenvdef#1#2{%
    -  \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}%
    -  \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}%
    -  \expandafter\let\csname E#1\endcsname \afterenvbreak
    -  \expandafter\let\csname Esmall#1\endcsname \afterenvbreak
    -}
    -
    -% Define two environment synonyms (#1 and #2) for an environment.
    -\def\maketwodispenvdef#1#2#3{%
    -  \makedispenvdef{#1}{#3}%
    -  \makedispenvdef{#2}{#3}%
    -}
    -%
    -% @lisp: indented, narrowed, typewriter font;
    -% @example: same as @lisp.
    -%
    -% @smallexample and @smalllisp: use smaller fonts.
    -% Originally contributed by Pavel@xerox.
    -%
    -\maketwodispenvdef{lisp}{example}{%
    -  \nonfillstart
    -  \tt\setupmarkupstyle{example}%
    -  \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special.
    -  \gobble % eat return
    -}
    -% @display/@smalldisplay: same as @lisp except keep current font.
    -%
    -\makedispenvdef{display}{%
    -  \nonfillstart
    -  \gobble
    -}
    -
    -% @format/@smallformat: same as @display except don't narrow margins.
    -%
    -\makedispenvdef{format}{%
    -  \let\nonarrowing = t%
    -  \nonfillstart
    -  \gobble
    -}
    -
    -% @flushleft: same as @format, but doesn't obey \SETdispenvsize.
    -\envdef\flushleft{%
    -  \let\nonarrowing = t%
    -  \nonfillstart
    -  \gobble
    -}
    -\let\Eflushleft = \afterenvbreak
    -
    -% @flushright.
    -%
    -\envdef\flushright{%
    -  \let\nonarrowing = t%
    -  \nonfillstart
    -  \advance\leftskip by 0pt plus 1fill\relax
    -  \gobble
    -}
    -\let\Eflushright = \afterenvbreak
    -
    -
    -% @raggedright does more-or-less normal line breaking but no right
    -% justification.  From plain.tex.
    -\envdef\raggedright{%
    -  \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax
    -}
    -\let\Eraggedright\par
    -
    -\envdef\raggedleft{%
    -  \parindent=0pt \leftskip0pt plus2em
    -  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
    -  \hbadness=10000 % Last line will usually be underfull, so turn off
    -                  % badness reporting.
    -}
    -\let\Eraggedleft\par
    -
    -\envdef\raggedcenter{%
    -  \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em
    -  \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt
    -  \hbadness=10000 % Last line will usually be underfull, so turn off
    -                  % badness reporting.
    -}
    -\let\Eraggedcenter\par
    -
    -
    -% @quotation does normal linebreaking (hence we can't use \nonfillstart)
    -% and narrows the margins.  We keep \parskip nonzero in general, since
    -% we're doing normal filling.  So, when using \aboveenvbreak and
    -% \afterenvbreak, temporarily make \parskip 0.
    -%
    -\makedispenvdef{quotation}{\quotationstart}
    -%
    -\def\quotationstart{%
    -  \indentedblockstart % same as \indentedblock, but increase right margin too.
    -  \ifx\nonarrowing\relax
    -    \advance\rightskip by \lispnarrowing
    -  \fi
    -  \parsearg\quotationlabel
    -}
    -
    -% We have retained a nonzero parskip for the environment, since we're
    -% doing normal filling.
    -%
    -\def\Equotation{%
    -  \par
    -  \ifx\quotationauthor\thisisundefined\else
    -    % indent a bit.
    -    \leftline{\kern 2\leftskip \sl ---\quotationauthor}%
    -  \fi
    -  {\parskip=0pt \afterenvbreak}%
    -}
    -\def\Esmallquotation{\Equotation}
    -
    -% If we're given an argument, typeset it in bold with a colon after.
    -\def\quotationlabel#1{%
    -  \def\temp{#1}%
    -  \ifx\temp\empty \else
    -    {\bf #1: }%
    -  \fi
    -}
    -
    -% @indentedblock is like @quotation, but indents only on the left and
    -% has no optional argument.
    -%
    -\makedispenvdef{indentedblock}{\indentedblockstart}
    -%
    -\def\indentedblockstart{%
    -  {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip
    -  \parindent=0pt
    -  %
    -  % @cartouche defines \nonarrowing to inhibit narrowing at next level down.
    -  \ifx\nonarrowing\relax
    -    \advance\leftskip by \lispnarrowing
    -    \exdentamount = \lispnarrowing
    -  \else
    -    \let\nonarrowing = \relax
    -  \fi
    -}
    -
    -% Keep a nonzero parskip for the environment, since we're doing normal filling.
    -%
    -\def\Eindentedblock{%
    -  \par
    -  {\parskip=0pt \afterenvbreak}%
    -}
    -\def\Esmallindentedblock{\Eindentedblock}
    -
    -
    -% LaTeX-like @verbatim...@end verbatim and @verb{...}
    -% If we want to allow any  as delimiter,
    -% we need the curly braces so that makeinfo sees the @verb command, eg:
    -% `@verbx...x' would look like the '@verbx' command.  --janneke@gnu.org
    -%
    -% [Knuth]: Donald Ervin Knuth, 1996.  The TeXbook.
    -%
    -% [Knuth] p.344; only we need to do the other characters Texinfo sets
    -% active too.  Otherwise, they get lost as the first character on a
    -% verbatim line.
    -\def\dospecials{%
    -  \do\ \do\\\do\{\do\}\do\$\do\&%
    -  \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~%
    -  \do\<\do\>\do\|\do\@\do+\do\"%
    -  % Don't do the quotes -- if we do, @set txicodequoteundirected and
    -  % @set txicodequotebacktick will not have effect on @verb and
    -  % @verbatim, and ?` and !` ligatures won't get disabled.
    -  %\do\`\do\'%
    -}
    -%
    -% [Knuth] p. 380
    -\def\uncatcodespecials{%
    -  \def\do##1{\catcode`##1=\other}\dospecials}
    -%
    -% Setup for the @verb command.
    -%
    -% Eight spaces for a tab
    -\begingroup
    -  \catcode`\^^I=\active
    -  \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }}
    -\endgroup
    -%
    -\def\setupverb{%
    -  \tt  % easiest (and conventionally used) font for verbatim
    -  \def\par{\leavevmode\endgraf}%
    -  \setupmarkupstyle{verb}%
    -  \tabeightspaces
    -  % Respect line breaks,
    -  % print special symbols as themselves, and
    -  % make each space count
    -  % must do in this order:
    -  \obeylines \uncatcodespecials \sepspaces
    -}
    -
    -% Setup for the @verbatim environment
    -%
    -% Real tab expansion.
    -\newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount
    -%
    -% We typeset each line of the verbatim in an \hbox, so we can handle
    -% tabs.  The \global is in case the verbatim line starts with an accent,
    -% or some other command that starts with a begin-group.  Otherwise, the
    -% entire \verbbox would disappear at the corresponding end-group, before
    -% it is typeset.  Meanwhile, we can't have nested verbatim commands
    -% (can we?), so the \global won't be overwriting itself.
    -\newbox\verbbox
    -\def\starttabbox{\global\setbox\verbbox=\hbox\bgroup}
    -%
    -\begingroup
    -  \catcode`\^^I=\active
    -  \gdef\tabexpand{%
    -    \catcode`\^^I=\active
    -    \def^^I{\leavevmode\egroup
    -      \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab
    -      \divide\dimen\verbbox by\tabw
    -      \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw
    -      \advance\dimen\verbbox by\tabw  % advance to next multiple of \tabw
    -      \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox
    -    }%
    -  }
    -\endgroup
    -
    -% start the verbatim environment.
    -\def\setupverbatim{%
    -  \let\nonarrowing = t%
    -  \nonfillstart
    -  \tt % easiest (and conventionally used) font for verbatim
    -  % The \leavevmode here is for blank lines.  Otherwise, we would
    -  % never \starttabbox and the \egroup would end verbatim mode.
    -  \def\par{\leavevmode\egroup\box\verbbox\endgraf}%
    -  \tabexpand
    -  \setupmarkupstyle{verbatim}%
    -  % Respect line breaks,
    -  % print special symbols as themselves, and
    -  % make each space count.
    -  % Must do in this order:
    -  \obeylines \uncatcodespecials \sepspaces
    -  \everypar{\starttabbox}%
    -}
    -
    -% Do the @verb magic: verbatim text is quoted by unique
    -% delimiter characters.  Before first delimiter expect a
    -% right brace, after last delimiter expect closing brace:
    -%
    -%    \def\doverb'{'#1'}'{#1}
    -%
    -% [Knuth] p. 382; only eat outer {}
    -\begingroup
    -  \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other
    -  \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next]
    -\endgroup
    -%
    -\def\verb{\begingroup\setupverb\doverb}
    -%
    -%
    -% Do the @verbatim magic: define the macro \doverbatim so that
    -% the (first) argument ends when '@end verbatim' is reached, ie:
    -%
    -%     \def\doverbatim#1@end verbatim{#1}
    -%
    -% For Texinfo it's a lot easier than for LaTeX,
    -% because texinfo's \verbatim doesn't stop at '\end{verbatim}':
    -% we need not redefine '\', '{' and '}'.
    -%
    -% Inspired by LaTeX's verbatim command set [latex.ltx]
    -%
    -\begingroup
    -  \catcode`\ =\active
    -  \obeylines %
    -  % ignore everything up to the first ^^M, that's the newline at the end
    -  % of the @verbatim input line itself.  Otherwise we get an extra blank
    -  % line in the output.
    -  \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}%
    -  % We really want {...\end verbatim} in the body of the macro, but
    -  % without the active space; thus we have to use \xdef and \gobble.
    -\endgroup
    -%
    -\envdef\verbatim{%
    -    \setupverbatim\doverbatim
    -}
    -\let\Everbatim = \afterenvbreak
    -
    -
    -% @verbatiminclude FILE - insert text of file in verbatim environment.
    -%
    -\def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude}
    -%
    -\def\doverbatiminclude#1{%
    -  {%
    -    \makevalueexpandable
    -    \setupverbatim
    -    {%
    -      \indexnofonts       % Allow `@@' and other weird things in file names.
    -      \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}%
    -      \edef\tmp{\noexpand\input #1 }
    -      \expandafter
    -    }\tmp
    -    \afterenvbreak
    -  }%
    -}
    -
    -% @copying ... @end copying.
    -% Save the text away for @insertcopying later.
    -%
    -% We save the uninterpreted tokens, rather than creating a box.
    -% Saving the text in a box would be much easier, but then all the
    -% typesetting commands (@smallbook, font changes, etc.) have to be done
    -% beforehand -- and a) we want @copying to be done first in the source
    -% file; b) letting users define the frontmatter in as flexible order as
    -% possible is desirable.
    -%
    -\def\copying{\checkenv{}\begingroup\scanargctxt\docopying}
    -\def\docopying#1@end copying{\endgroup\def\copyingtext{#1}}
    -%
    -\def\insertcopying{%
    -  \begingroup
    -    \parindent = 0pt  % paragraph indentation looks wrong on title page
    -    \scanexp\copyingtext
    -  \endgroup
    -}
    -
    -
    -\message{defuns,}
    -% @defun etc.
    -
    -\newskip\defbodyindent \defbodyindent=.4in
    -\newskip\defargsindent \defargsindent=50pt
    -\newskip\deflastargmargin \deflastargmargin=18pt
    -\newcount\defunpenalty
    -
    -% Start the processing of @deffn:
    -\def\startdefun{%
    -  \ifnum\lastpenalty<10000
    -    \medbreak
    -    \defunpenalty=10003 % Will keep this @deffn together with the
    -                        % following @def command, see below.
    -  \else
    -    % If there are two @def commands in a row, we'll have a \nobreak,
    -    % which is there to keep the function description together with its
    -    % header.  But if there's nothing but headers, we need to allow a
    -    % break somewhere.  Check specifically for penalty 10002, inserted
    -    % by \printdefunline, instead of 10000, since the sectioning
    -    % commands also insert a nobreak penalty, and we don't want to allow
    -    % a break between a section heading and a defun.
    -    %
    -    % As a further refinement, we avoid "club" headers by signalling
    -    % with penalty of 10003 after the very first @deffn in the
    -    % sequence (see above), and penalty of 10002 after any following
    -    % @def command.
    -    \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi
    -    %
    -    % Similarly, after a section heading, do not allow a break.
    -    % But do insert the glue.
    -    \medskip  % preceded by discardable penalty, so not a breakpoint
    -  \fi
    -  %
    -  \parindent=0in
    -  \advance\leftskip by \defbodyindent
    -  \exdentamount=\defbodyindent
    -}
    -
    -\def\dodefunx#1{%
    -  % First, check whether we are in the right environment:
    -  \checkenv#1%
    -  %
    -  % As above, allow line break if we have multiple x headers in a row.
    -  % It's not a great place, though.
    -  \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi
    -  %
    -  % And now, it's time to reuse the body of the original defun:
    -  \expandafter\gobbledefun#1%
    -}
    -\def\gobbledefun#1\startdefun{}
    -
    -% \printdefunline \deffnheader{text}
    -%
    -\def\printdefunline#1#2{%
    -  \begingroup
    -    % call \deffnheader:
    -    #1#2 \endheader
    -    % common ending:
    -    \interlinepenalty = 10000
    -    \advance\rightskip by 0pt plus 1fil\relax
    -    \endgraf
    -    \nobreak\vskip -\parskip
    -    \penalty\defunpenalty  % signal to \startdefun and \dodefunx
    -    % Some of the @defun-type tags do not enable magic parentheses,
    -    % rendering the following check redundant.  But we don't optimize.
    -    \checkparencounts
    -  \endgroup
    -}
    -
    -\def\Edefun{\endgraf\medbreak}
    -
    -% \makedefun{deffn} creates \deffn, \deffnx and \Edeffn;
    -% the only thing remaining is to define \deffnheader.
    -%
    -\def\makedefun#1{%
    -  \expandafter\let\csname E#1\endcsname = \Edefun
    -  \edef\temp{\noexpand\domakedefun
    -    \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}%
    -  \temp
    -}
    -
    -% \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) }
    -%
    -% Define \deffn and \deffnx, without parameters.
    -% \deffnheader has to be defined explicitly.
    -%
    -\def\domakedefun#1#2#3{%
    -  \envdef#1{%
    -    \startdefun
    -    \doingtypefnfalse    % distinguish typed functions from all else
    -    \parseargusing\activeparens{\printdefunline#3}%
    -  }%
    -  \def#2{\dodefunx#1}%
    -  \def#3%
    -}
    -
    -\newif\ifdoingtypefn       % doing typed function?
    -\newif\ifrettypeownline    % typeset return type on its own line?
    -
    -% @deftypefnnewline on|off says whether the return type of typed functions
    -% are printed on their own line.  This affects @deftypefn, @deftypefun,
    -% @deftypeop, and @deftypemethod.
    -%
    -\parseargdef\deftypefnnewline{%
    -  \def\temp{#1}%
    -  \ifx\temp\onword
    -    \expandafter\let\csname SETtxideftypefnnl\endcsname
    -      = \empty
    -  \else\ifx\temp\offword
    -    \expandafter\let\csname SETtxideftypefnnl\endcsname
    -      = \relax
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @txideftypefnnl value `\temp',
    -                must be on|off}%
    -  \fi\fi
    -}
    -
    -% \dosubind {index}{topic}{subtopic}
    -%
    -% If SUBTOPIC is present, precede it with a space, and call \doind.
    -% (At some time during the 20th century, this made a two-level entry in an
    -% index such as the operation index.  Nobody seemed to notice the change in
    -% behaviour though.)
    -\def\dosubind#1#2#3{%
    -  \def\thirdarg{#3}%
    -  \ifx\thirdarg\empty
    -    \doind{#1}{#2}%
    -  \else
    -    \doind{#1}{#2\space#3}%
    -  \fi
    -}
    -
    -% Untyped functions:
    -
    -% @deffn category name args
    -\makedefun{deffn}{\deffngeneral{}}
    -
    -% @deffn category class name args
    -\makedefun{defop}#1 {\defopon{#1\ \putwordon}}
    -
    -% \defopon {category on}class name args
    -\def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
    -
    -% \deffngeneral {subind}category name args
    -%
    -\def\deffngeneral#1#2 #3 #4\endheader{%
    -  \dosubind{fn}{\code{#3}}{#1}%
    -  \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}%
    -}
    -
    -% Typed functions:
    -
    -% @deftypefn category type name args
    -\makedefun{deftypefn}{\deftypefngeneral{}}
    -
    -% @deftypeop category class type name args
    -\makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}}
    -
    -% \deftypeopon {category on}class type name args
    -\def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} }
    -
    -% \deftypefngeneral {subind}category type name args
    -%
    -\def\deftypefngeneral#1#2 #3 #4 #5\endheader{%
    -  \dosubind{fn}{\code{#4}}{#1}%
    -  \doingtypefntrue
    -  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
    -}
    -
    -% Typed variables:
    -
    -% @deftypevr category type var args
    -\makedefun{deftypevr}{\deftypecvgeneral{}}
    -
    -% @deftypecv category class type var args
    -\makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}}
    -
    -% \deftypecvof {category of}class type var args
    -\def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} }
    -
    -% \deftypecvgeneral {subind}category type var args
    -%
    -\def\deftypecvgeneral#1#2 #3 #4 #5\endheader{%
    -  \dosubind{vr}{\code{#4}}{#1}%
    -  \defname{#2}{#3}{#4}\defunargs{#5\unskip}%
    -}
    -
    -% Untyped variables:
    -
    -% @defvr category var args
    -\makedefun{defvr}#1 {\deftypevrheader{#1} {} }
    -
    -% @defcv category class var args
    -\makedefun{defcv}#1 {\defcvof{#1\ \putwordof}}
    -
    -% \defcvof {category of}class var args
    -\def\defcvof#1#2 {\deftypecvof{#1}#2 {} }
    -
    -% Types:
    -
    -% @deftp category name args
    -\makedefun{deftp}#1 #2 #3\endheader{%
    -  \doind{tp}{\code{#2}}%
    -  \defname{#1}{}{#2}\defunargs{#3\unskip}%
    -}
    -
    -% Remaining @defun-like shortcuts:
    -\makedefun{defun}{\deffnheader{\putwordDeffunc} }
    -\makedefun{defmac}{\deffnheader{\putwordDefmac} }
    -\makedefun{defspec}{\deffnheader{\putwordDefspec} }
    -\makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} }
    -\makedefun{defvar}{\defvrheader{\putwordDefvar} }
    -\makedefun{defopt}{\defvrheader{\putwordDefopt} }
    -\makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} }
    -\makedefun{defmethod}{\defopon\putwordMethodon}
    -\makedefun{deftypemethod}{\deftypeopon\putwordMethodon}
    -\makedefun{defivar}{\defcvof\putwordInstanceVariableof}
    -\makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof}
    -
    -% \defname, which formats the name of the @def (not the args).
    -% #1 is the category, such as "Function".
    -% #2 is the return type, if any.
    -% #3 is the function name.
    -%
    -% We are followed by (but not passed) the arguments, if any.
    -%
    -\def\defname#1#2#3{%
    -  \par
    -  % Get the values of \leftskip and \rightskip as they were outside the @def...
    -  \advance\leftskip by -\defbodyindent
    -  %
    -  % Determine if we are typesetting the return type of a typed function
    -  % on a line by itself.
    -  \rettypeownlinefalse
    -  \ifdoingtypefn  % doing a typed function specifically?
    -    % then check user option for putting return type on its own line:
    -    \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else
    -      \rettypeownlinetrue
    -    \fi
    -  \fi
    -  %
    -  % How we'll format the category name.  Putting it in brackets helps
    -  % distinguish it from the body text that may end up on the next line
    -  % just below it.
    -  \def\temp{#1}%
    -  \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi}
    -  %
    -  % Figure out line sizes for the paragraph shape.  We'll always have at
    -  % least two.
    -  \tempnum = 2
    -  %
    -  % The first line needs space for \box0; but if \rightskip is nonzero,
    -  % we need only space for the part of \box0 which exceeds it:
    -  \dimen0=\hsize  \advance\dimen0 by -\wd0  \advance\dimen0 by \rightskip
    -  %
    -  % If doing a return type on its own line, we'll have another line.
    -  \ifrettypeownline
    -    \advance\tempnum by 1
    -    \def\maybeshapeline{0in \hsize}%
    -  \else
    -    \def\maybeshapeline{}%
    -  \fi
    -  %
    -  % The continuations:
    -  \dimen2=\hsize  \advance\dimen2 by -\defargsindent
    -  %
    -  % The final paragraph shape:
    -  \parshape \tempnum  0in \dimen0  \maybeshapeline  \defargsindent \dimen2
    -  %
    -  % Put the category name at the right margin.
    -  \noindent
    -  \hbox to 0pt{%
    -    \hfil\box0 \kern-\hsize
    -    % \hsize has to be shortened this way:
    -    \kern\leftskip
    -    % Intentionally do not respect \rightskip, since we need the space.
    -  }%
    -  %
    -  % Allow all lines to be underfull without complaint:
    -  \tolerance=10000 \hbadness=10000
    -  \exdentamount=\defbodyindent
    -  {%
    -    % defun fonts. We use typewriter by default (used to be bold) because:
    -    % . we're printing identifiers, they should be in tt in principle.
    -    % . in languages with many accents, such as Czech or French, it's
    -    %   common to leave accents off identifiers.  The result looks ok in
    -    %   tt, but exceedingly strange in rm.
    -    % . we don't want -- and --- to be treated as ligatures.
    -    % . this still does not fix the ?` and !` ligatures, but so far no
    -    %   one has made identifiers using them :).
    -    \df \tt
    -    \def\temp{#2}% text of the return type
    -    \ifx\temp\empty\else
    -      \tclose{\temp}% typeset the return type
    -      \ifrettypeownline
    -        % put return type on its own line; prohibit line break following:
    -        \hfil\vadjust{\nobreak}\break
    -      \else
    -        \space  % type on same line, so just followed by a space
    -      \fi
    -    \fi           % no return type
    -    #3% output function name
    -  }%
    -  {\rm\enskip}% hskip 0.5 em of \rmfont
    -  %
    -  \boldbrax
    -  % arguments will be output next, if any.
    -}
    -
    -% Print arguments in slanted roman (not ttsl), inconsistently with using
    -% tt for the name.  This is because literal text is sometimes needed in
    -% the argument list (groff manual), and ttsl and tt are not very
    -% distinguishable.  Prevent hyphenation at `-' chars.
    -%
    -\def\defunargs#1{%
    -  % use sl by default (not ttsl),
    -  % tt for the names.
    -  \df \sl \hyphenchar\font=0
    -  %
    -  % On the other hand, if an argument has two dashes (for instance), we
    -  % want a way to get ttsl.  We used to recommend @var for that, so
    -  % leave the code in, but it's strange for @var to lead to typewriter.
    -  % Nowadays we recommend @code, since the difference between a ttsl hyphen
    -  % and a tt hyphen is pretty tiny.  @code also disables ?` !`.
    -  \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}%
    -  #1%
    -  \sl\hyphenchar\font=45
    -}
    -
    -% We want ()&[] to print specially on the defun line.
    -%
    -\def\activeparens{%
    -  \catcode`\(=\active \catcode`\)=\active
    -  \catcode`\[=\active \catcode`\]=\active
    -  \catcode`\&=\active
    -}
    -
    -% Make control sequences which act like normal parenthesis chars.
    -\let\lparen = ( \let\rparen = )
    -
    -% Be sure that we always have a definition for `(', etc.  For example,
    -% if the fn name has parens in it, \boldbrax will not be in effect yet,
    -% so TeX would otherwise complain about undefined control sequence.
    -{
    -  \activeparens
    -  \global\let(=\lparen \global\let)=\rparen
    -  \global\let[=\lbrack \global\let]=\rbrack
    -  \global\let& = \&
    -
    -  \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb}
    -  \gdef\magicamp{\let&=\amprm}
    -}
    -\let\ampchar\&
    -
    -\newcount\parencount
    -
    -% If we encounter &foo, then turn on ()-hacking afterwards
    -\newif\ifampseen
    -\def\amprm#1 {\ampseentrue{\bf\ }}
    -
    -\def\parenfont{%
    -  \ifampseen
    -    % At the first level, print parens in roman,
    -    % otherwise use the default font.
    -    \ifnum \parencount=1 \rm \fi
    -  \else
    -    % The \sf parens (in \boldbrax) actually are a little bolder than
    -    % the contained text.  This is especially needed for [ and ] .
    -    \sf
    -  \fi
    -}
    -\def\infirstlevel#1{%
    -  \ifampseen
    -    \ifnum\parencount=1
    -      #1%
    -    \fi
    -  \fi
    -}
    -\def\bfafterword#1 {#1 \bf}
    -
    -\def\opnr{%
    -  \global\advance\parencount by 1
    -  {\parenfont(}%
    -  \infirstlevel \bfafterword
    -}
    -\def\clnr{%
    -  {\parenfont)}%
    -  \infirstlevel \sl
    -  \global\advance\parencount by -1
    -}
    -
    -\newcount\brackcount
    -\def\lbrb{%
    -  \global\advance\brackcount by 1
    -  {\bf[}%
    -}
    -\def\rbrb{%
    -  {\bf]}%
    -  \global\advance\brackcount by -1
    -}
    -
    -\def\checkparencounts{%
    -  \ifnum\parencount=0 \else \badparencount \fi
    -  \ifnum\brackcount=0 \else \badbrackcount \fi
    -}
    -% these should not use \errmessage; the glibc manual, at least, actually
    -% has such constructs (when documenting function pointers).
    -\def\badparencount{%
    -  \message{Warning: unbalanced parentheses in @def...}%
    -  \global\parencount=0
    -}
    -\def\badbrackcount{%
    -  \message{Warning: unbalanced square brackets in @def...}%
    -  \global\brackcount=0
    -}
    -
    -
    -\message{macros,}
    -% @macro.
    -
    -% To do this right we need a feature of e-TeX, \scantokens,
    -% which we arrange to emulate with a temporary file in ordinary TeX.
    -\ifx\eTeXversion\thisisundefined
    -  \newwrite\macscribble
    -  \def\scantokens#1{%
    -    \toks0={#1}%
    -    \immediate\openout\macscribble=\jobname.tmp
    -    \immediate\write\macscribble{\the\toks0}%
    -    \immediate\closeout\macscribble
    -    \input \jobname.tmp
    -  }
    -\fi
    -
    -% Used at the time of macro expansion.
    -% Argument is macro body with arguments substituted
    -\def\scanmacro#1{%
    -  \newlinechar`\^^M
    -  \def\xeatspaces{\eatspaces}%
    -  %
    -  % Process the macro body under the current catcode regime.
    -  \scantokens{#1@comment}%
    -  %
    -  % The \comment is to remove the \newlinechar added by \scantokens, and
    -  % can be noticed by \parsearg.  Note \c isn't used because this means cedilla
    -  % in math mode.
    -}
    -
    -% Used for copying and captions
    -\def\scanexp#1{%
    -  \expandafter\scanmacro\expandafter{#1}%
    -}
    -
    -\newcount\paramno   % Count of parameters
    -\newtoks\macname    % Macro name
    -\newif\ifrecursive  % Is it recursive?
    -
    -% List of all defined macros in the form
    -%    \commondummyword\macro1\commondummyword\macro2...
    -% Currently is also contains all @aliases; the list can be split
    -% if there is a need.
    -\def\macrolist{}
    -
    -% Add the macro to \macrolist
    -\def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname}
    -\def\addtomacrolistxxx#1{%
    -     \toks0 = \expandafter{\macrolist\commondummyword#1}%
    -     \xdef\macrolist{\the\toks0}%
    -}
    -
    -% Utility routines.
    -% This does \let #1 = #2, with \csnames; that is,
    -%   \let \csname#1\endcsname = \csname#2\endcsname
    -% (except of course we have to play expansion games).
    -%
    -\def\cslet#1#2{%
    -  \expandafter\let
    -  \csname#1\expandafter\endcsname
    -  \csname#2\endcsname
    -}
    -
    -% Trim leading and trailing spaces off a string.
    -% Concepts from aro-bend problem 15 (see CTAN).
    -{\catcode`\@=11
    -\gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }}
    -\gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@}
    -\gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @}
    -\def\unbrace#1{#1}
    -\unbrace{\gdef\trim@@@ #1 } #2@{#1}
    -}
    -
    -% Trim a single trailing ^^M off a string.
    -{\catcode`\^^M=\other \catcode`\Q=3%
    -\gdef\eatcr #1{\eatcra #1Q^^MQ}%
    -\gdef\eatcra#1^^MQ{\eatcrb#1Q}%
    -\gdef\eatcrb#1Q#2Q{#1}%
    -}
    -
    -% Macro bodies are absorbed as an argument in a context where
    -% all characters are catcode 10, 11 or 12, except \ which is active
    -% (as in normal texinfo). It is necessary to change the definition of \
    -% to recognize macro arguments; this is the job of \mbodybackslash.
    -%
    -% Non-ASCII encodings make 8-bit characters active, so un-activate
    -% them to avoid their expansion.  Must do this non-globally, to
    -% confine the change to the current group.
    -%
    -% It's necessary to have hard CRs when the macro is executed. This is
    -% done by making ^^M (\endlinechar) catcode 12 when reading the macro
    -% body, and then making it the \newlinechar in \scanmacro.
    -%
    -\def\scanctxt{% used as subroutine
    -  \catcode`\"=\other
    -  \catcode`\+=\other
    -  \catcode`\<=\other
    -  \catcode`\>=\other
    -  \catcode`\^=\other
    -  \catcode`\_=\other
    -  \catcode`\|=\other
    -  \catcode`\~=\other
    -  \passthroughcharstrue
    -}
    -
    -\def\scanargctxt{% used for copying and captions, not macros.
    -  \scanctxt
    -  \catcode`\@=\other
    -  \catcode`\\=\other
    -  \catcode`\^^M=\other
    -}
    -
    -\def\macrobodyctxt{% used for @macro definitions
    -  \scanctxt
    -  \catcode`\ =\other
    -  \catcode`\@=\other
    -  \catcode`\{=\other
    -  \catcode`\}=\other
    -  \catcode`\^^M=\other
    -  \usembodybackslash
    -}
    -
    -% Used when scanning braced macro arguments.  Note, however, that catcode
    -% changes here are ineffectual if the macro invocation was nested inside
    -% an argument to another Texinfo command.
    -\def\macroargctxt{%
    -  \scanctxt
    -  \catcode`\ =\active
    -  \catcode`\@=\other
    -  \catcode`\^^M=\other
    -  \catcode`\\=\active
    -}
    -
    -\def\macrolineargctxt{% used for whole-line arguments without braces
    -  \scanctxt
    -  \catcode`\@=\other
    -  \catcode`\{=\other
    -  \catcode`\}=\other
    -}
    -
    -% \mbodybackslash is the definition of \ in @macro bodies.
    -% It maps \foo\ => \csname macarg.foo\endcsname => #N
    -% where N is the macro parameter number.
    -% We define \csname macarg.\endcsname to be \realbackslash, so
    -% \\ in macro replacement text gets you a backslash.
    -%
    -{\catcode`@=0 @catcode`@\=@active
    - @gdef@usembodybackslash{@let\=@mbodybackslash}
    - @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname}
    -}
    -\expandafter\def\csname macarg.\endcsname{\realbackslash}
    -
    -\def\margbackslash#1{\char`\#1 }
    -
    -\def\macro{\recursivefalse\parsearg\macroxxx}
    -\def\rmacro{\recursivetrue\parsearg\macroxxx}
    -
    -\def\macroxxx#1{%
    -  \getargs{#1}% now \macname is the macname and \argl the arglist
    -  \ifx\argl\empty       % no arguments
    -     \paramno=0\relax
    -  \else
    -     \expandafter\parsemargdef \argl;%
    -     \if\paramno>256\relax
    -       \ifx\eTeXversion\thisisundefined
    -         \errhelp = \EMsimple
    -         \errmessage{You need eTeX to compile a file with macros with more than 256 arguments}
    -       \fi
    -     \fi
    -  \fi
    -  \if1\csname ismacro.\the\macname\endcsname
    -     \message{Warning: redefining \the\macname}%
    -  \else
    -     \expandafter\ifx\csname \the\macname\endcsname \relax
    -     \else \errmessage{Macro name \the\macname\space already defined}\fi
    -     \global\cslet{macsave.\the\macname}{\the\macname}%
    -     \global\expandafter\let\csname ismacro.\the\macname\endcsname=1%
    -     \addtomacrolist{\the\macname}%
    -  \fi
    -  \begingroup \macrobodyctxt
    -  \ifrecursive \expandafter\parsermacbody
    -  \else \expandafter\parsemacbody
    -  \fi}
    -
    -\parseargdef\unmacro{%
    -  \if1\csname ismacro.#1\endcsname
    -    \global\cslet{#1}{macsave.#1}%
    -    \global\expandafter\let \csname ismacro.#1\endcsname=0%
    -    % Remove the macro name from \macrolist:
    -    \begingroup
    -      \expandafter\let\csname#1\endcsname \relax
    -      \let\commondummyword\unmacrodo
    -      \xdef\macrolist{\macrolist}%
    -    \endgroup
    -  \else
    -    \errmessage{Macro #1 not defined}%
    -  \fi
    -}
    -
    -% Called by \do from \dounmacro on each macro.  The idea is to omit any
    -% macro definitions that have been changed to \relax.
    -%
    -\def\unmacrodo#1{%
    -  \ifx #1\relax
    -    % remove this
    -  \else
    -    \noexpand\commondummyword \noexpand#1%
    -  \fi
    -}
    -
    -% \getargs -- Parse the arguments to a @macro line.  Set \macname to
    -% the name of the macro, and \argl to the braced argument list.
    -\def\getargs#1{\getargsxxx#1{}}
    -\def\getargsxxx#1#{\getmacname #1 \relax\getmacargs}
    -\def\getmacname#1 #2\relax{\macname={#1}}
    -\def\getmacargs#1{\def\argl{#1}}
    -% This made use of the feature that if the last token of a
    -%  is #, then the preceding argument is delimited by
    -% an opening brace, and that opening brace is not consumed.
    -
    -% Parse the optional {params} list to @macro or @rmacro.
    -% Set \paramno to the number of arguments,
    -% and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a
    -% three-param macro.)  Define \macarg.BLAH for each BLAH in the params
    -% list to some hook where the argument is to be expanded.  If there are
    -% less than 10 arguments that hook is to be replaced by ##N where N
    -% is the position in that list, that is to say the macro arguments are to be
    -% defined `a la TeX in the macro body.
    -%
    -% That gets used by \mbodybackslash (above).
    -%
    -% If there are 10 or more arguments, a different technique is used: see
    -% \parsemmanyargdef.
    -%
    -\def\parsemargdef#1;{%
    -  \paramno=0\def\paramlist{}%
    -  \let\hash\relax
    -  % \hash is redefined to `#' later to get it into definitions
    -  \let\xeatspaces\relax
    -  \parsemargdefxxx#1,;,%
    -  \ifnum\paramno<10\relax\else
    -    \paramno0\relax
    -    \parsemmanyargdef@@#1,;,% 10 or more arguments
    -  \fi
    -}
    -\def\parsemargdefxxx#1,{%
    -  \if#1;\let\next=\relax
    -  \else \let\next=\parsemargdefxxx
    -    \advance\paramno by 1
    -    \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname
    -        {\xeatspaces{\hash\the\paramno}}%
    -    \edef\paramlist{\paramlist\hash\the\paramno,}%
    -  \fi\next}
    -
    -% \parsemacbody, \parsermacbody
    -%
    -% Read recursive and nonrecursive macro bodies. (They're different since
    -% rec and nonrec macros end differently.)
    -%
    -% We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro
    -% body to be transformed.
    -% Set \macrobody to the body of the macro, and call \defmacro.
    -%
    -{\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{%
    -\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
    -{\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{%
    -\xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}%
    -
    -% Make @ a letter, so that we can make private-to-Texinfo macro names.
    -\edef\texiatcatcode{\the\catcode`\@}
    -\catcode `@=11\relax
    -
    -%%%%%%%%%%%%%% Code for > 10 arguments only   %%%%%%%%%%%%%%%%%%
    -
    -% If there are 10 or more arguments, a different technique is used, where the
    -% hook remains in the body, and when macro is to be expanded the body is
    -% processed again to replace the arguments.
    -%
    -% In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the
    -% argument N value and then \edef the body (nothing else will expand because of
    -% the catcode regime under which the body was input).
    -%
    -% If you compile with TeX (not eTeX), and you have macros with 10 or more
    -% arguments, no macro can have more than 256 arguments (else error).
    -%
    -% In case that there are 10 or more arguments we parse again the arguments
    -% list to set new definitions for the \macarg.BLAH macros corresponding to
    -% each BLAH argument. It was anyhow needed to parse already once this list
    -% in order to count the arguments, and as macros with at most 9 arguments
    -% are by far more frequent than macro with 10 or more arguments, defining
    -% twice the \macarg.BLAH macros does not cost too much processing power.
    -\def\parsemmanyargdef@@#1,{%
    -  \if#1;\let\next=\relax
    -  \else
    -    \let\next=\parsemmanyargdef@@
    -    \edef\tempb{\eatspaces{#1}}%
    -    \expandafter\def\expandafter\tempa
    -       \expandafter{\csname macarg.\tempb\endcsname}%
    -    % Note that we need some extra \noexpand\noexpand, this is because we
    -    % don't want \the  to be expanded in the \parsermacbody  as it uses an
    -    % \xdef .
    -    \expandafter\edef\tempa
    -      {\noexpand\noexpand\noexpand\the\toks\the\paramno}%
    -    \advance\paramno by 1\relax
    -  \fi\next}
    -
    -
    -\let\endargs@\relax
    -\let\nil@\relax
    -\def\nilm@{\nil@}%
    -\long\def\nillm@{\nil@}%
    -
    -% This macro is expanded during the Texinfo macro expansion, not during its
    -% definition.  It gets all the arguments' values and assigns them to macros
    -% macarg.ARGNAME
    -%
    -% #1 is the macro name
    -% #2 is the list of argument names
    -% #3 is the list of argument values
    -\def\getargvals@#1#2#3{%
    -  \def\macargdeflist@{}%
    -  \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion.
    -  \def\paramlist{#2,\nil@}%
    -  \def\macroname{#1}%
    -  \begingroup
    -  \macroargctxt
    -  \def\argvaluelist{#3,\nil@}%
    -  \def\@tempa{#3}%
    -  \ifx\@tempa\empty
    -    \setemptyargvalues@
    -  \else
    -    \getargvals@@
    -  \fi
    -}
    -\def\getargvals@@{%
    -  \ifx\paramlist\nilm@
    -      % Some sanity check needed here that \argvaluelist is also empty.
    -      \ifx\argvaluelist\nillm@
    -      \else
    -        \errhelp = \EMsimple
    -        \errmessage{Too many arguments in macro `\macroname'!}%
    -      \fi
    -      \let\next\macargexpandinbody@
    -  \else
    -    \ifx\argvaluelist\nillm@
    -       % No more arguments values passed to macro.  Set remaining named-arg
    -       % macros to empty.
    -       \let\next\setemptyargvalues@
    -    \else
    -      % pop current arg name into \@tempb
    -      \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}%
    -      \expandafter\@tempa\expandafter{\paramlist}%
    -       % pop current argument value into \@tempc
    -      \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}%
    -      \expandafter\@tempa\expandafter{\argvaluelist}%
    -       % Here \@tempb is the current arg name and \@tempc is the current arg value.
    -       % First place the new argument macro definition into \@tempd
    -       \expandafter\macname\expandafter{\@tempc}%
    -       \expandafter\let\csname macarg.\@tempb\endcsname\relax
    -       \expandafter\def\expandafter\@tempe\expandafter{%
    -         \csname macarg.\@tempb\endcsname}%
    -       \edef\@tempd{\long\def\@tempe{\the\macname}}%
    -       \push@\@tempd\macargdeflist@
    -       \let\next\getargvals@@
    -    \fi
    -  \fi
    -  \next
    -}
    -
    -\def\push@#1#2{%
    -  \expandafter\expandafter\expandafter\def
    -  \expandafter\expandafter\expandafter#2%
    -  \expandafter\expandafter\expandafter{%
    -  \expandafter#1#2}%
    -}
    -
    -% Replace arguments by their values in the macro body, and place the result
    -% in macro \@tempa.
    -%
    -\def\macvalstoargs@{%
    -  %  To do this we use the property that token registers that are \the'ed
    -  % within an \edef  expand only once. So we are going to place all argument
    -  % values into respective token registers.
    -  %
    -  % First we save the token context, and initialize argument numbering.
    -  \begingroup
    -    \paramno0\relax
    -    % Then, for each argument number #N, we place the corresponding argument
    -    % value into a new token list register \toks#N
    -    \expandafter\putargsintokens@\saveparamlist@,;,%
    -    % Then, we expand the body so that argument are replaced by their
    -    % values. The trick for values not to be expanded themselves is that they
    -    % are within tokens and that tokens expand only once in an \edef .
    -    \edef\@tempc{\csname mac.\macroname .body\endcsname}%
    -    % Now we restore the token stack pointer to free the token list registers
    -    % which we have used, but we make sure that expanded body is saved after
    -    % group.
    -    \expandafter
    -  \endgroup
    -  \expandafter\def\expandafter\@tempa\expandafter{\@tempc}%
    -  }
    -
    -% Define the named-macro outside of this group and then close this group.
    -%
    -\def\macargexpandinbody@{%
    -  \expandafter
    -  \endgroup
    -  \macargdeflist@
    -  % First the replace in body the macro arguments by their values, the result
    -  % is in \@tempa .
    -  \macvalstoargs@
    -  % Then we point at the \norecurse or \gobble (for recursive) macro value
    -  % with \@tempb .
    -  \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname
    -  % Depending on whether it is recursive or not, we need some tailing
    -  % \egroup .
    -  \ifx\@tempb\gobble
    -     \let\@tempc\relax
    -  \else
    -     \let\@tempc\egroup
    -  \fi
    -  % And now we do the real job:
    -  \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}%
    -  \@tempd
    -}
    -
    -\def\putargsintokens@#1,{%
    -  \if#1;\let\next\relax
    -  \else
    -    \let\next\putargsintokens@
    -    % First we allocate the new token list register, and give it a temporary
    -    % alias \@tempb .
    -    \toksdef\@tempb\the\paramno
    -    % Then we place the argument value into that token list register.
    -    \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname
    -    \expandafter\@tempb\expandafter{\@tempa}%
    -    \advance\paramno by 1\relax
    -  \fi
    -  \next
    -}
    -
    -% Trailing missing arguments are set to empty.
    -%
    -\def\setemptyargvalues@{%
    -  \ifx\paramlist\nilm@
    -    \let\next\macargexpandinbody@
    -  \else
    -    \expandafter\setemptyargvaluesparser@\paramlist\endargs@
    -    \let\next\setemptyargvalues@
    -  \fi
    -  \next
    -}
    -
    -\def\setemptyargvaluesparser@#1,#2\endargs@{%
    -  \expandafter\def\expandafter\@tempa\expandafter{%
    -    \expandafter\def\csname macarg.#1\endcsname{}}%
    -  \push@\@tempa\macargdeflist@
    -  \def\paramlist{#2}%
    -}
    -
    -% #1 is the element target macro
    -% #2 is the list macro
    -% #3,#4\endargs@ is the list value
    -\def\pop@#1#2#3,#4\endargs@{%
    -   \def#1{#3}%
    -   \def#2{#4}%
    -}
    -\long\def\longpop@#1#2#3,#4\endargs@{%
    -   \long\def#1{#3}%
    -   \long\def#2{#4}%
    -}
    -
    -
    -%%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%%
    -
    -
    -% This defines a Texinfo @macro or @rmacro, called by \parsemacbody.
    -%    \macrobody has the body of the macro in it, with placeholders for
    -% its parameters, looking like "\xeatspaces{\hash 1}".
    -%    \paramno is the number of parameters
    -%    \paramlist is a TeX parameter text, e.g. "#1,#2,#3,"
    -% There are four cases: macros of zero, one, up to nine, and many arguments.
    -% \xdef is used so that macro definitions will survive the file
    -% they're defined in: @include reads the file inside a group.
    -%
    -\def\defmacro{%
    -  \let\hash=##% convert placeholders to macro parameter chars
    -  \ifnum\paramno=1
    -    \def\xeatspaces##1{##1}%
    -    % This removes the pair of braces around the argument.  We don't
    -    % use \eatspaces, because this can cause ends of lines to be lost
    -    % when the argument to \eatspaces is read, leading to line-based
    -    % commands like "@itemize" not being read correctly.
    -  \else
    -    \let\xeatspaces\relax % suppress expansion
    -  \fi
    -  \ifcase\paramno
    -  % 0
    -    \expandafter\xdef\csname\the\macname\endcsname{%
    -      \bgroup
    -        \noexpand\spaceisspace
    -        \noexpand\endlineisspace
    -        \noexpand\expandafter % skip any whitespace after the macro name.
    -        \expandafter\noexpand\csname\the\macname @@@\endcsname}%
    -    \expandafter\xdef\csname\the\macname @@@\endcsname{%
    -      \egroup
    -      \noexpand\scanmacro{\macrobody}}%
    -  \or % 1
    -    \expandafter\xdef\csname\the\macname\endcsname{%
    -       \bgroup
    -       \noexpand\braceorline
    -       \expandafter\noexpand\csname\the\macname @@@\endcsname}%
    -    \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
    -      \egroup
    -      \noexpand\scanmacro{\macrobody}%
    -      }%
    -  \else % at most 9
    -    \ifnum\paramno<10\relax
    -      % @MACNAME sets the context for reading the macro argument
    -      % @MACNAME@@ gets the argument, processes backslashes and appends a
    -      % comma.
    -      % @MACNAME@@@ removes braces surrounding the argument list.
    -      % @MACNAME@@@@ scans the macro body with arguments substituted.
    -      \expandafter\xdef\csname\the\macname\endcsname{%
    -        \bgroup
    -        \noexpand\expandafter  % This \expandafter skip any spaces after the
    -        \noexpand\macroargctxt % macro before we change the catcode of space.
    -        \noexpand\expandafter
    -        \expandafter\noexpand\csname\the\macname @@\endcsname}%
    -      \expandafter\xdef\csname\the\macname @@\endcsname##1{%
    -          \noexpand\passargtomacro
    -          \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}%
    -      \expandafter\xdef\csname\the\macname @@@\endcsname##1{%
    -          \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}%
    -      \expandafter\expandafter
    -      \expandafter\xdef
    -      \expandafter\expandafter
    -        \csname\the\macname @@@@\endcsname\paramlist{%
    -          \egroup\noexpand\scanmacro{\macrobody}}%
    -    \else % 10 or more:
    -      \expandafter\xdef\csname\the\macname\endcsname{%
    -        \noexpand\getargvals@{\the\macname}{\argl}%
    -      }%
    -      \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody
    -      \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble
    -    \fi
    -  \fi}
    -
    -\catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes
    -
    -\def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}}
    -
    -
    -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    -%
    -{\catcode`\@=0 \catcode`\\=13  % We need to manipulate \ so use @ as escape
    -@catcode`@_=11  % private names
    -@catcode`@!=11  % used as argument separator
    -
    -% \passargtomacro#1#2 -
    -% Call #1 with a list of tokens #2, with any doubled backslashes in #2
    -% compressed to one.
    -%
    -% This implementation works by expansion, and not execution (so we cannot use
    -% \def or similar).  This reduces the risk of this failing in contexts where
    -% complete expansion is done with no execution (for example, in writing out to
    -% an auxiliary file for an index entry).
    -%
    -% State is kept in the input stream: the argument passed to
    -% @look_ahead, @gobble_and_check_finish and @add_segment is
    -%
    -% THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN  (... rest of input)
    -%
    -% where:
    -% THE_MACRO - name of the macro we want to call
    -% ARG_RESULT - argument list we build to pass to that macro
    -% PENDING_BS - either a backslash or nothing
    -% NEXT_TOKEN - used to look ahead in the input stream to see what's coming next
    -
    -@gdef@passargtomacro#1#2{%
    -  @add_segment #1!{}@relax#2\@_finish\%
    -}
    -@gdef@_finish{@_finishx} @global@let@_finishx@relax
    -
    -% #1 - THE_MACRO ARG_RESULT
    -% #2 - PENDING_BS
    -% #3 - NEXT_TOKEN
    -% #4 used to look ahead
    -%
    -% If the next token is not a backslash, process the rest of the argument;
    -% otherwise, remove the next token.
    -@gdef@look_ahead#1!#2#3#4{%
    -  @ifx#4\%
    -   @expandafter@gobble_and_check_finish
    -  @else
    -   @expandafter@add_segment
    -  @fi#1!{#2}#4#4%
    -}
    -
    -% #1 - THE_MACRO ARG_RESULT
    -% #2 - PENDING_BS
    -% #3 - NEXT_TOKEN
    -% #4 should be a backslash, which is gobbled.
    -% #5 looks ahead
    -%
    -% Double backslash found.  Add a single backslash, and look ahead.
    -@gdef@gobble_and_check_finish#1!#2#3#4#5{%
    -  @add_segment#1\!{}#5#5%
    -}
    -
    -@gdef@is_fi{@fi}
    -
    -% #1 - THE_MACRO ARG_RESULT
    -% #2 - PENDING_BS
    -% #3 - NEXT_TOKEN
    -% #4 is input stream until next backslash
    -%
    -% Input stream is either at the start of the argument, or just after a
    -% backslash sequence, either a lone backslash, or a doubled backslash.
    -% NEXT_TOKEN contains the first token in the input stream: if it is \finish,
    -% finish; otherwise, append to ARG_RESULT the segment of the argument up until
    -% the next backslash.  PENDING_BACKSLASH contains a backslash to represent
    -% a backslash just before the start of the input stream that has not been
    -% added to ARG_RESULT.
    -@gdef@add_segment#1!#2#3#4\{%
    -@ifx#3@_finish
    -  @call_the_macro#1!%
    -@else
    -  % append the pending backslash to the result, followed by the next segment
    -  @expandafter@is_fi@look_ahead#1#2#4!{\}@fi
    -  % this @fi is discarded by @look_ahead.
    -  % we can't get rid of it with \expandafter because we don't know how
    -  % long #4 is.
    -}
    -
    -% #1 - THE_MACRO
    -% #2 - ARG_RESULT
    -% #3 discards the res of the conditional in @add_segment, and @is_fi ends the
    -% conditional.
    -@gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}}
    -
    -}
    -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
    -
    -% \braceorline MAC is used for a one-argument macro MAC.  It checks
    -% whether the next non-whitespace character is a {.  It sets the context
    -% for reading the argument (slightly different in the two cases).  Then,
    -% to read the argument, in the whole-line case, it then calls the regular
    -% \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC.
    -%
    -\def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx}
    -\def\braceorlinexxx{%
    -  \ifx\nchar\bgroup
    -    \macroargctxt
    -    \expandafter\passargtomacro
    -  \else
    -    \macrolineargctxt\expandafter\parsearg
    -  \fi \macnamexxx}
    -
    -
    -% @alias.
    -% We need some trickery to remove the optional spaces around the equal
    -% sign.  Make them active and then expand them all to nothing.
    -%
    -\def\alias{\parseargusing\obeyspaces\aliasxxx}
    -\def\aliasxxx #1{\aliasyyy#1\relax}
    -\def\aliasyyy #1=#2\relax{%
    -  {%
    -    \expandafter\let\obeyedspace=\empty
    -    \addtomacrolist{#1}%
    -    \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}%
    -  }%
    -  \next
    -}
    -
    -
    -\message{cross references,}
    -
    -\newwrite\auxfile
    -\newif\ifhavexrefs    % True if xref values are known.
    -\newif\ifwarnedxrefs  % True if we warned once that they aren't known.
    -
    -% @inforef is relatively simple.
    -\def\inforef #1{\inforefzzz #1,,,,**}
    -\def\inforefzzz #1,#2,#3,#4**{%
    -  \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}},
    -  node \samp{\ignorespaces#1{}}}
    -
    -% @node's only job in TeX is to define \lastnode, which is used in
    -% cross-references.  The @node line might or might not have commas, and
    -% might or might not have spaces before the first comma, like:
    -% @node foo , bar , ...
    -% We don't want such trailing spaces in the node name.
    -%
    -\parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse}
    -%
    -% also remove a trailing comma, in case of something like this:
    -% @node Help-Cross,  ,  , Cross-refs
    -\def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse}
    -\def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode}
    -
    -% Used so that the @top node doesn't have to be wrapped in an @ifnottex
    -% conditional.
    -% \doignore goes to more effort to skip nested conditionals but we don't need
    -% that here.
    -\def\omittopnode{%
    -   \ifx\lastnode\wordTop
    -   \expandafter\ignorenode\fi
    -}
    -\def\wordTop{Top}
    -
    -% Until the next @node or @bye command, divert output to a box that is not
    -% output.
    -\def\ignorenode{\setbox\dummybox\vbox\bgroup\def\node{\egroup\node}%
    -\ignorenodebye
    -}
    -
    -{\let\bye\relax
    -\gdef\ignorenodebye{\let\bye\ignorenodebyedef}
    -\gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}}
    -% The redefinition of \bye here is because it is declared \outer
    -
    -\let\lastnode=\empty
    -
    -% Write a cross-reference definition for the current node.  #1 is the
    -% type (Ynumbered, Yappendix, Ynothing).
    -%
    -\def\donoderef#1{%
    -  \ifx\lastnode\empty\else
    -    \setref{\lastnode}{#1}%
    -    \global\let\lastnode=\empty
    -  \fi
    -}
    -
    -% @anchor{NAME} -- define xref target at arbitrary point.
    -%
    -\newcount\savesfregister
    -%
    -\def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi}
    -\def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi}
    -\def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces}
    -
    -% \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an
    -% anchor), which consists of three parts:
    -% 1) NAME-title - the current sectioning name taken from \currentsection,
    -%                 or the anchor name.
    -% 2) NAME-snt   - section number and type, passed as the SNT arg, or
    -%                 empty for anchors.
    -% 3) NAME-pg    - the page number.
    -%
    -% This is called from \donoderef, \anchor, and \dofloat.  In the case of
    -% floats, there is an additional part, which is not written here:
    -% 4) NAME-lof   - the text as it should appear in a @listoffloats.
    -%
    -\def\setref#1#2{%
    -  \pdfmkdest{#1}%
    -  \iflinks
    -    {%
    -      \requireauxfile
    -      \atdummies  % preserve commands, but don't expand them
    -      % match definition in \xrdef, \refx, \xrefX.
    -      \def\value##1{##1}%
    -      \edef\writexrdef##1##2{%
    -	\write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef
    -	  ##1}{##2}}% these are parameters of \writexrdef
    -      }%
    -      \toks0 = \expandafter{\currentsection}%
    -      \immediate \writexrdef{title}{\the\toks0 }%
    -      \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc.
    -      \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout
    -    }%
    -  \fi
    -}
    -
    -% @xrefautosectiontitle on|off says whether @section(ing) names are used
    -% automatically in xrefs, if the third arg is not explicitly specified.
    -% This was provided as a "secret" @set xref-automatic-section-title
    -% variable, now it's official.
    -%
    -\parseargdef\xrefautomaticsectiontitle{%
    -  \def\temp{#1}%
    -  \ifx\temp\onword
    -    \expandafter\let\csname SETxref-automatic-section-title\endcsname
    -      = \empty
    -  \else\ifx\temp\offword
    -    \expandafter\let\csname SETxref-automatic-section-title\endcsname
    -      = \relax
    -  \else
    -    \errhelp = \EMsimple
    -    \errmessage{Unknown @xrefautomaticsectiontitle value `\temp',
    -                must be on|off}%
    -  \fi\fi
    -}
    -
    -%
    -% @xref, @pxref, and @ref generate cross-references.  For \xrefX, #1 is
    -% the node name, #2 the name of the Info cross-reference, #3 the printed
    -% node name, #4 the name of the Info file, #5 the name of the printed
    -% manual.  All but the node name can be omitted.
    -%
    -\def\pxref{\putwordsee{} \xrefXX}
    -\def\xref{\putwordSee{} \xrefXX}
    -\def\ref{\xrefXX}
    -
    -\def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX}
    -\def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]}
    -%
    -\newbox\toprefbox
    -\newbox\printedrefnamebox
    -\newbox\infofilenamebox
    -\newbox\printedmanualbox
    -%
    -\def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup
    -  \unsepspaces
    -  %
    -  % Get args without leading/trailing spaces.
    -  \def\printedrefname{\ignorespaces #3}%
    -  \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}%
    -  %
    -  \def\infofilename{\ignorespaces #4}%
    -  \setbox\infofilenamebox = \hbox{\infofilename\unskip}%
    -  %
    -  \def\printedmanual{\ignorespaces #5}%
    -  \setbox\printedmanualbox  = \hbox{\printedmanual\unskip}%
    -  %
    -  % If the printed reference name (arg #3) was not explicitly given in
    -  % the @xref, figure out what we want to use.
    -  \ifdim \wd\printedrefnamebox = 0pt
    -    % No printed node name was explicitly given.
    -    \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax
    -      % Not auto section-title: use node name inside the square brackets.
    -      \def\printedrefname{\ignorespaces #1}%
    -    \else
    -      % Auto section-title: use chapter/section title inside
    -      % the square brackets if we have it.
    -      \ifdim \wd\printedmanualbox > 0pt
    -        % It is in another manual, so we don't have it; use node name.
    -        \def\printedrefname{\ignorespaces #1}%
    -      \else
    -        \ifhavexrefs
    -          % We (should) know the real title if we have the xref values.
    -          \def\printedrefname{\refx{#1-title}{}}%
    -        \else
    -          % Otherwise just copy the Info node name.
    -          \def\printedrefname{\ignorespaces #1}%
    -        \fi%
    -      \fi
    -    \fi
    -  \fi
    -  %
    -  % Make link in pdf output.
    -  \ifpdf
    -    % For pdfTeX and LuaTeX
    -    {\indexnofonts
    -     \makevalueexpandable
    -     \turnoffactive
    -     % This expands tokens, so do it after making catcode changes, so _
    -     % etc. don't get their TeX definitions.  This ignores all spaces in
    -     % #4, including (wrongly) those in the middle of the filename.
    -     \getfilename{#4}%
    -     %
    -     % This (wrongly) does not take account of leading or trailing
    -     % spaces in #1, which should be ignored.
    -     \setpdfdestname{#1}%
    -     %
    -     \ifx\pdfdestname\empty
    -       \def\pdfdestname{Top}% no empty targets
    -     \fi
    -     %
    -     \leavevmode
    -     \startlink attr{/Border [0 0 0]}%
    -     \ifnum\filenamelength>0
    -       goto file{\the\filename.pdf} name{\pdfdestname}%
    -     \else
    -       goto name{\pdfmkpgn{\pdfdestname}}%
    -     \fi
    -    }%
    -    \setcolor{\linkcolor}%
    -  \else
    -    \ifx\XeTeXrevision\thisisundefined
    -    \else
    -      % For XeTeX
    -      {\indexnofonts
    -       \makevalueexpandable
    -       \turnoffactive
    -       % This expands tokens, so do it after making catcode changes, so _
    -       % etc. don't get their TeX definitions.  This ignores all spaces in
    -       % #4, including (wrongly) those in the middle of the filename.
    -       \getfilename{#4}%
    -       %
    -       % This (wrongly) does not take account of leading or trailing
    -       % spaces in #1, which should be ignored.
    -       \setpdfdestname{#1}%
    -       %
    -       \ifx\pdfdestname\empty
    -         \def\pdfdestname{Top}% no empty targets
    -       \fi
    -       %
    -       \leavevmode
    -       \ifnum\filenamelength>0
    -         % With default settings,
    -         % XeTeX (xdvipdfmx) replaces link destination names with integers.
    -         % In this case, the replaced destination names of
    -         % remote PDFs are no longer known.  In order to avoid a replacement,
    -         % you can use xdvipdfmx's command line option `-C 0x0010'.
    -         % If you use XeTeX 0.99996+ (TeX Live 2016+),
    -         % this command line option is no longer necessary
    -         % because we can use the `dvipdfmx:config' special.
    -         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
    -           << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}%
    -       \else
    -         \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A
    -           << /S /GoTo /D (\pdfdestname) >> >>}%
    -       \fi
    -      }%
    -      \setcolor{\linkcolor}%
    -    \fi
    -  \fi
    -  {%
    -    % Have to otherify everything special to allow the \csname to
    -    % include an _ in the xref name, etc.
    -    \indexnofonts
    -    \turnoffactive
    -    \def\value##1{##1}%
    -    \expandafter\global\expandafter\let\expandafter\Xthisreftitle
    -      \csname XR#1-title\endcsname
    -  }%
    -  %
    -  % Float references are printed completely differently: "Figure 1.2"
    -  % instead of "[somenode], p.3".  \iffloat distinguishes them by
    -  % \Xthisreftitle being set to a magic string.
    -  \iffloat\Xthisreftitle
    -    % If the user specified the print name (third arg) to the ref,
    -    % print it instead of our usual "Figure 1.2".
    -    \ifdim\wd\printedrefnamebox = 0pt
    -      \refx{#1-snt}{}%
    -    \else
    -      \printedrefname
    -    \fi
    -    %
    -    % If the user also gave the printed manual name (fifth arg), append
    -    % "in MANUALNAME".
    -    \ifdim \wd\printedmanualbox > 0pt
    -      \space \putwordin{} \cite{\printedmanual}%
    -    \fi
    -  \else
    -    % node/anchor (non-float) references.
    -    %
    -    % If we use \unhbox to print the node names, TeX does not insert
    -    % empty discretionaries after hyphens, which means that it will not
    -    % find a line break at a hyphen in a node names.  Since some manuals
    -    % are best written with fairly long node names, containing hyphens,
    -    % this is a loss.  Therefore, we give the text of the node name
    -    % again, so it is as if TeX is seeing it for the first time.
    -    %
    -    \ifdim \wd\printedmanualbox > 0pt
    -      % Cross-manual reference with a printed manual name.
    -      %
    -      \crossmanualxref{\cite{\printedmanual\unskip}}%
    -    %
    -    \else\ifdim \wd\infofilenamebox > 0pt
    -      % Cross-manual reference with only an info filename (arg 4), no
    -      % printed manual name (arg 5).  This is essentially the same as
    -      % the case above; we output the filename, since we have nothing else.
    -      %
    -      \crossmanualxref{\code{\infofilename\unskip}}%
    -    %
    -    \else
    -      % Reference within this manual.
    -      %
    -      % Only output a following space if the -snt ref is nonempty; for
    -      % @unnumbered and @anchor, it won't be.
    -      \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}%
    -      \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi
    -      %
    -      % output the `[mynode]' via the macro below so it can be overridden.
    -      \xrefprintnodename\printedrefname
    -      %
    -      % But we always want a comma and a space:
    -      ,\space
    -      %
    -      % output the `page 3'.
    -      \turnoffactive \putwordpage\tie\refx{#1-pg}{}%
    -      % Add a , if xref followed by a space
    -      \if\space\noexpand\tokenafterxref ,%
    -      \else\ifx\	\tokenafterxref ,% @TAB
    -      \else\ifx\*\tokenafterxref ,%   @*
    -      \else\ifx\ \tokenafterxref ,%   @SPACE
    -      \else\ifx\
    -                \tokenafterxref ,%    @NL
    -      \else\ifx\tie\tokenafterxref ,% @tie
    -      \fi\fi\fi\fi\fi\fi
    -    \fi\fi
    -  \fi
    -  \endlink
    -\endgroup}
    -
    -% Output a cross-manual xref to #1.  Used just above (twice).
    -%
    -% Only include the text "Section ``foo'' in" if the foo is neither
    -% missing or Top.  Thus, @xref{,,,foo,The Foo Manual} outputs simply
    -% "see The Foo Manual", the idea being to refer to the whole manual.
    -%
    -% But, this being TeX, we can't easily compare our node name against the
    -% string "Top" while ignoring the possible spaces before and after in
    -% the input.  By adding the arbitrary 7sp below, we make it much less
    -% likely that a real node name would have the same width as "Top" (e.g.,
    -% in a monospaced font).  Hopefully it will never happen in practice.
    -%
    -% For the same basic reason, we retypeset the "Top" at every
    -% reference, since the current font is indeterminate.
    -%
    -\def\crossmanualxref#1{%
    -  \setbox\toprefbox = \hbox{Top\kern7sp}%
    -  \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}%
    -  \ifdim \wd2 > 7sp  % nonempty?
    -    \ifdim \wd2 = \wd\toprefbox \else  % same as Top?
    -      \putwordSection{} ``\printedrefname'' \putwordin{}\space
    -    \fi
    -  \fi
    -  #1%
    -}
    -
    -% This macro is called from \xrefX for the `[nodename]' part of xref
    -% output.  It's a separate macro only so it can be changed more easily,
    -% since square brackets don't work well in some documents.  Particularly
    -% one that Bob is working on :).
    -%
    -\def\xrefprintnodename#1{[#1]}
    -
    -% Things referred to by \setref.
    -%
    -\def\Ynothing{}
    -\def\Yomitfromtoc{}
    -\def\Ynumbered{%
    -  \ifnum\secno=0
    -    \putwordChapter@tie \the\chapno
    -  \else \ifnum\subsecno=0
    -    \putwordSection@tie \the\chapno.\the\secno
    -  \else \ifnum\subsubsecno=0
    -    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno
    -  \else
    -    \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno
    -  \fi\fi\fi
    -}
    -\def\Yappendix{%
    -  \ifnum\secno=0
    -     \putwordAppendix@tie @char\the\appendixno{}%
    -  \else \ifnum\subsecno=0
    -     \putwordSection@tie @char\the\appendixno.\the\secno
    -  \else \ifnum\subsubsecno=0
    -    \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno
    -  \else
    -    \putwordSection@tie
    -      @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno
    -  \fi\fi\fi
    -}
    -
    -% \refx{NAME}{SUFFIX} - reference a cross-reference string named NAME.  SUFFIX
    -% is output afterwards if non-empty.
    -\def\refx#1#2{%
    -  \requireauxfile
    -  {%
    -    \indexnofonts
    -    \turnoffactive
    -    \def\value##1{##1}%
    -    \expandafter\global\expandafter\let\expandafter\thisrefX
    -      \csname XR#1\endcsname
    -  }%
    -  \ifx\thisrefX\relax
    -    % If not defined, say something at least.
    -    \angleleft un\-de\-fined\angleright
    -    \iflinks
    -      \ifhavexrefs
    -        {\toks0 = {#1}% avoid expansion of possibly-complex value
    -         \message{\linenumber Undefined cross reference `\the\toks0'.}}%
    -      \else
    -        \ifwarnedxrefs\else
    -          \global\warnedxrefstrue
    -          \message{Cross reference values unknown; you must run TeX again.}%
    -        \fi
    -      \fi
    -    \fi
    -  \else
    -    % It's defined, so just use it.
    -    \thisrefX
    -  \fi
    -  #2% Output the suffix in any case.
    -}
    -
    -% This is the macro invoked by entries in the aux file.  Define a control
    -% sequence for a cross-reference target (we prepend XR to the control sequence
    -% name to avoid collisions).  The value is the page number.  If this is a float
    -% type, we have more work to do.
    -%
    -\def\xrdef#1#2{%
    -  {% Expand the node or anchor name to remove control sequences.
    -   % \turnoffactive stops 8-bit characters being changed to commands
    -   % like @'e.  \refx does the same to retrieve the value in the definition.
    -    \indexnofonts
    -    \turnoffactive
    -    \def\value##1{##1}%
    -    \xdef\safexrefname{#1}%
    -  }%
    -  %
    -  \bgroup
    -    \expandafter\gdef\csname XR\safexrefname\endcsname{#2}%
    -  \egroup
    -  % We put the \gdef inside a group to avoid the definitions building up on
    -  % TeX's save stack, which can cause it to run out of space for aux files with
    -  % thousands of lines.  \gdef doesn't use the save stack, but \csname does
    -  % when it defines an unknown control sequence as \relax.
    -  %
    -  % Was that xref control sequence that we just defined for a float?
    -  \expandafter\iffloat\csname XR\safexrefname\endcsname
    -    % it was a float, and we have the (safe) float type in \iffloattype.
    -    \expandafter\let\expandafter\floatlist
    -      \csname floatlist\iffloattype\endcsname
    -    %
    -    % Is this the first time we've seen this float type?
    -    \expandafter\ifx\floatlist\relax
    -      \toks0 = {\do}% yes, so just \do
    -    \else
    -      % had it before, so preserve previous elements in list.
    -      \toks0 = \expandafter{\floatlist\do}%
    -    \fi
    -    %
    -    % Remember this xref in the control sequence \floatlistFLOATTYPE,
    -    % for later use in \listoffloats.
    -    \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0
    -      {\safexrefname}}%
    -  \fi
    -}
    -
    -% If working on a large document in chapters, it is convenient to
    -% be able to disable indexing, cross-referencing, and contents, for test runs.
    -% This is done with @novalidate at the beginning of the file.
    -%
    -\newif\iflinks \linkstrue % by default we want the aux files.
    -\let\novalidate = \linksfalse
    -
    -% Used when writing to the aux file, or when using data from it.
    -\def\requireauxfile{%
    -  \iflinks
    -    \tryauxfile
    -    % Open the new aux file.  TeX will close it automatically at exit.
    -    \immediate\openout\auxfile=\jobname.aux
    -  \fi
    -  \global\let\requireauxfile=\relax   % Only do this once.
    -}
    -
    -% Read the last existing aux file, if any.  No error if none exists.
    -%
    -\def\tryauxfile{%
    -  \openin 1 \jobname.aux
    -  \ifeof 1 \else
    -    \readdatafile{aux}%
    -    \global\havexrefstrue
    -  \fi
    -  \closein 1
    -}
    -
    -\def\setupdatafile{%
    -  \catcode`\^^@=\other
    -  \catcode`\^^A=\other
    -  \catcode`\^^B=\other
    -  \catcode`\^^C=\other
    -  \catcode`\^^D=\other
    -  \catcode`\^^E=\other
    -  \catcode`\^^F=\other
    -  \catcode`\^^G=\other
    -  \catcode`\^^H=\other
    -  \catcode`\^^K=\other
    -  \catcode`\^^L=\other
    -  \catcode`\^^N=\other
    -  \catcode`\^^P=\other
    -  \catcode`\^^Q=\other
    -  \catcode`\^^R=\other
    -  \catcode`\^^S=\other
    -  \catcode`\^^T=\other
    -  \catcode`\^^U=\other
    -  \catcode`\^^V=\other
    -  \catcode`\^^W=\other
    -  \catcode`\^^X=\other
    -  \catcode`\^^Z=\other
    -  \catcode`\^^[=\other
    -  \catcode`\^^\=\other
    -  \catcode`\^^]=\other
    -  \catcode`\^^^=\other
    -  \catcode`\^^_=\other
    -  \catcode`\^=\other
    -  %
    -  % Special characters.  Should be turned off anyway, but...
    -  \catcode`\~=\other
    -  \catcode`\[=\other
    -  \catcode`\]=\other
    -  \catcode`\"=\other
    -  \catcode`\_=\other
    -  \catcode`\|=\other
    -  \catcode`\<=\other
    -  \catcode`\>=\other
    -  \catcode`\$=\other
    -  \catcode`\#=\other
    -  \catcode`\&=\other
    -  \catcode`\%=\other
    -  \catcode`+=\other % avoid \+ for paranoia even though we've turned it off
    -  %
    -  \catcode`\\=\active
    -  %
    -  % @ is our escape character in .aux files, and we need braces.
    -  \catcode`\{=1
    -  \catcode`\}=2
    -  \catcode`\@=0
    -}
    -
    -\def\readdatafile#1{%
    -\begingroup
    -  \setupdatafile
    -  \input\jobname.#1
    -\endgroup}
    -
    -
    -\message{insertions,}
    -% including footnotes.
    -
    -\newcount \footnoteno
    -
    -% The trailing space in the following definition for supereject is
    -% vital for proper filling; pages come out unaligned when you do a
    -% pagealignmacro call if that space before the closing brace is
    -% removed. (Generally, numeric constants should always be followed by a
    -% space to prevent strange expansion errors.)
    -\def\supereject{\par\penalty -20000\footnoteno =0 }
    -
    -% @footnotestyle is meaningful for Info output only.
    -\let\footnotestyle=\comment
    -
    -{\catcode `\@=11
    -%
    -% Auto-number footnotes.  Otherwise like plain.
    -\gdef\footnote{%
    -  \global\advance\footnoteno by \@ne
    -  \edef\thisfootno{$^{\the\footnoteno}$}%
    -  %
    -  % In case the footnote comes at the end of a sentence, preserve the
    -  % extra spacing after we do the footnote number.
    -  \let\@sf\empty
    -  \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi
    -  %
    -  % Remove inadvertent blank space before typesetting the footnote number.
    -  \unskip
    -  \thisfootno\@sf
    -  \dofootnote
    -}%
    -
    -% Don't bother with the trickery in plain.tex to not require the
    -% footnote text as a parameter.  Our footnotes don't need to be so general.
    -%
    -% Oh yes, they do; otherwise, @ifset (and anything else that uses
    -% \parseargline) fails inside footnotes because the tokens are fixed when
    -% the footnote is read.  --karl, 16nov96.
    -%
    -\gdef\dofootnote{%
    -  \insert\footins\bgroup
    -  %
    -  % Nested footnotes are not supported in TeX, that would take a lot
    -  % more work.  (\startsavinginserts does not suffice.)
    -  \let\footnote=\errfootnotenest
    -  %
    -  % We want to typeset this text as a normal paragraph, even if the
    -  % footnote reference occurs in (for example) a display environment.
    -  % So reset some parameters.
    -  \hsize=\txipagewidth
    -  \interlinepenalty\interfootnotelinepenalty
    -  \splittopskip\ht\strutbox % top baseline for broken footnotes
    -  \splitmaxdepth\dp\strutbox
    -  \floatingpenalty\@MM
    -  \leftskip\z@skip
    -  \rightskip\z@skip
    -  \spaceskip\z@skip
    -  \xspaceskip\z@skip
    -  \parindent\defaultparindent
    -  %
    -  \smallfonts \rm
    -  %
    -  % Because we use hanging indentation in footnotes, a @noindent appears
    -  % to exdent this text, so make it be a no-op.  makeinfo does not use
    -  % hanging indentation so @noindent can still be needed within footnote
    -  % text after an @example or the like (not that this is good style).
    -  \let\noindent = \relax
    -  %
    -  % Hang the footnote text off the number.  Use \everypar in case the
    -  % footnote extends for more than one paragraph.
    -  \everypar = {\hang}%
    -  \textindent{\thisfootno}%
    -  %
    -  % Don't crash into the line above the footnote text.  Since this
    -  % expands into a box, it must come within the paragraph, lest it
    -  % provide a place where TeX can split the footnote.
    -  \footstrut
    -  %
    -  % Invoke rest of plain TeX footnote routine.
    -  \futurelet\next\fo@t
    -}
    -}%end \catcode `\@=11
    -
    -\def\errfootnotenest{%
    -  \errhelp=\EMsimple
    -  \errmessage{Nested footnotes not supported in texinfo.tex,
    -    even though they work in makeinfo; sorry}
    -}
    -
    -\def\errfootnoteheading{%
    -  \errhelp=\EMsimple
    -  \errmessage{Footnotes in chapters, sections, etc., are not supported}
    -}
    -
    -% In case a @footnote appears in a vbox, save the footnote text and create
    -% the real \insert just after the vbox finished.  Otherwise, the insertion
    -% would be lost.
    -% Similarly, if a @footnote appears inside an alignment, save the footnote
    -% text to a box and make the \insert when a row of the table is finished.
    -% And the same can be done for other insert classes.  --kasal, 16nov03.
    -%
    -% Replace the \insert primitive by a cheating macro.
    -% Deeper inside, just make sure that the saved insertions are not spilled
    -% out prematurely.
    -%
    -\def\startsavinginserts{%
    -  \ifx \insert\ptexinsert
    -    \let\insert\saveinsert
    -  \else
    -    \let\checkinserts\relax
    -  \fi
    -}
    -
    -% This \insert replacement works for both \insert\footins{foo} and
    -% \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}.
    -%
    -\def\saveinsert#1{%
    -  \edef\next{\noexpand\savetobox \makeSAVEname#1}%
    -  \afterassignment\next
    -  % swallow the left brace
    -  \let\temp =
    -}
    -\def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}}
    -\def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1}
    -
    -\def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi}
    -
    -\def\placesaveins#1{%
    -  \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname
    -    {\box#1}%
    -}
    -
    -% eat @SAVE -- beware, all of them have catcode \other:
    -{
    -  \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials  %  ;-)
    -  \gdef\gobblesave @SAVE{}
    -}
    -
    -% initialization:
    -\def\newsaveins #1{%
    -  \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}%
    -  \next
    -}
    -\def\newsaveinsX #1{%
    -  \csname newbox\endcsname #1%
    -  \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts
    -    \checksaveins #1}%
    -}
    -
    -% initialize:
    -\let\checkinserts\empty
    -\newsaveins\footins
    -\newsaveins\margin
    -
    -
    -% @image.  We use the macros from epsf.tex to support this.
    -% If epsf.tex is not installed and @image is used, we complain.
    -%
    -% Check for and read epsf.tex up front.  If we read it only at @image
    -% time, we might be inside a group, and then its definitions would get
    -% undone and the next image would fail.
    -\openin 1 = epsf.tex
    -\ifeof 1 \else
    -  % Do not bother showing banner with epsf.tex v2.7k (available in
    -  % doc/epsf.tex and on ctan).
    -  \def\epsfannounce{\toks0 = }%
    -  \input epsf.tex
    -\fi
    -\closein 1
    -%
    -% We will only complain once about lack of epsf.tex.
    -\newif\ifwarnednoepsf
    -\newhelp\noepsfhelp{epsf.tex must be installed for images to
    -  work.  It is also included in the Texinfo distribution, or you can get
    -  it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.}
    -%
    -\def\image#1{%
    -  \ifx\epsfbox\thisisundefined
    -    \ifwarnednoepsf \else
    -      \errhelp = \noepsfhelp
    -      \errmessage{epsf.tex not found, images will be ignored}%
    -      \global\warnednoepsftrue
    -    \fi
    -  \else
    -    \imagexxx #1,,,,,\finish
    -  \fi
    -}
    -%
    -% Arguments to @image:
    -% #1 is (mandatory) image filename; we tack on .eps extension.
    -% #2 is (optional) width, #3 is (optional) height.
    -% #4 is (ignored optional) html alt text.
    -% #5 is (ignored optional) extension.
    -% #6 is just the usual extra ignored arg for parsing stuff.
    -\newif\ifimagevmode
    -\def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup
    -  \catcode`\^^M = 5     % in case we're inside an example
    -  \normalturnoffactive  % allow _ et al. in names
    -  \def\xprocessmacroarg{\eatspaces}% in case we are being used via a macro
    -  % If the image is by itself, center it.
    -  \ifvmode
    -    \imagevmodetrue
    -  \else \ifx\centersub\centerV
    -    % for @center @image, we need a vbox so we can have our vertical space
    -    \imagevmodetrue
    -    \vbox\bgroup % vbox has better behavior than vtop herev
    -  \fi\fi
    -  %
    -  \ifimagevmode
    -    \nobreak\medskip
    -    % Usually we'll have text after the image which will insert
    -    % \parskip glue, so insert it here too to equalize the space
    -    % above and below.
    -    \nobreak\vskip\parskip
    -    \nobreak
    -  \fi
    -  %
    -  % Leave vertical mode so that indentation from an enclosing
    -  %  environment such as @quotation is respected.
    -  % However, if we're at the top level, we don't want the
    -  %  normal paragraph indentation.
    -  % On the other hand, if we are in the case of @center @image, we don't
    -  %  want to start a paragraph, which will create a hsize-width box and
    -  %  eradicate the centering.
    -  \ifx\centersub\centerV\else \noindent \fi
    -  %
    -  % Output the image.
    -  \ifpdf
    -    % For pdfTeX and LuaTeX <= 0.80
    -    \dopdfimage{#1}{#2}{#3}%
    -  \else
    -    \ifx\XeTeXrevision\thisisundefined
    -      % For epsf.tex
    -      % \epsfbox itself resets \epsf?size at each figure.
    -      \setbox0 = \hbox{\ignorespaces #2}%
    -        \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi
    -      \setbox0 = \hbox{\ignorespaces #3}%
    -        \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi
    -      \epsfbox{#1.eps}%
    -    \else
    -      % For XeTeX
    -      \doxeteximage{#1}{#2}{#3}%
    -    \fi
    -  \fi
    -  %
    -  \ifimagevmode
    -    \medskip  % space after a standalone image
    -  \fi
    -  \ifx\centersub\centerV \egroup \fi
    -\endgroup}
    -
    -
    -% @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables,
    -% etc.  We don't actually implement floating yet, we always include the
    -% float "here".  But it seemed the best name for the future.
    -%
    -\envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish}
    -
    -% There may be a space before second and/or third parameter; delete it.
    -\def\eatcommaspace#1, {#1,}
    -
    -% #1 is the optional FLOATTYPE, the text label for this float, typically
    -% "Figure", "Table", "Example", etc.  Can't contain commas.  If omitted,
    -% this float will not be numbered and cannot be referred to.
    -%
    -% #2 is the optional xref label.  Also must be present for the float to
    -% be referable.
    -%
    -% #3 is the optional positioning argument; for now, it is ignored.  It
    -% will somehow specify the positions allowed to float to (here, top, bottom).
    -%
    -% We keep a separate counter for each FLOATTYPE, which we reset at each
    -% chapter-level command.
    -\let\resetallfloatnos=\empty
    -%
    -\def\dofloat#1,#2,#3,#4\finish{%
    -  \let\thiscaption=\empty
    -  \let\thisshortcaption=\empty
    -  %
    -  % don't lose footnotes inside @float.
    -  %
    -  % BEWARE: when the floats start float, we have to issue warning whenever an
    -  % insert appears inside a float which could possibly float. --kasal, 26may04
    -  %
    -  \startsavinginserts
    -  %
    -  % We can't be used inside a paragraph.
    -  \par
    -  %
    -  \vtop\bgroup
    -    \def\floattype{#1}%
    -    \def\floatlabel{#2}%
    -    \def\floatloc{#3}% we do nothing with this yet.
    -    %
    -    \ifx\floattype\empty
    -      \let\safefloattype=\empty
    -    \else
    -      {%
    -        % the floattype might have accents or other special characters,
    -        % but we need to use it in a control sequence name.
    -        \indexnofonts
    -        \turnoffactive
    -        \xdef\safefloattype{\floattype}%
    -      }%
    -    \fi
    -    %
    -    % If label is given but no type, we handle that as the empty type.
    -    \ifx\floatlabel\empty \else
    -      % We want each FLOATTYPE to be numbered separately (Figure 1,
    -      % Table 1, Figure 2, ...).  (And if no label, no number.)
    -      %
    -      \expandafter\getfloatno\csname\safefloattype floatno\endcsname
    -      \global\advance\floatno by 1
    -      %
    -      {%
    -        % This magic value for \currentsection is output by \setref as the
    -        % XREFLABEL-title value.  \xrefX uses it to distinguish float
    -        % labels (which have a completely different output format) from
    -        % node and anchor labels.  And \xrdef uses it to construct the
    -        % lists of floats.
    -        %
    -        \edef\currentsection{\floatmagic=\safefloattype}%
    -        \setref{\floatlabel}{Yfloat}%
    -      }%
    -    \fi
    -    %
    -    % start with \parskip glue, I guess.
    -    \vskip\parskip
    -    %
    -    % Don't suppress indentation if a float happens to start a section.
    -    \restorefirstparagraphindent
    -}
    -
    -% we have these possibilities:
    -% @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap
    -% @float Foo,lbl & no caption:    Foo 1.1
    -% @float Foo & @caption{Cap}:     Foo: Cap
    -% @float Foo & no caption:        Foo
    -% @float ,lbl & Caption{Cap}:     1.1: Cap
    -% @float ,lbl & no caption:       1.1
    -% @float & @caption{Cap}:         Cap
    -% @float & no caption:
    -%
    -\def\Efloat{%
    -    \let\floatident = \empty
    -    %
    -    % In all cases, if we have a float type, it comes first.
    -    \ifx\floattype\empty \else \def\floatident{\floattype}\fi
    -    %
    -    % If we have an xref label, the number comes next.
    -    \ifx\floatlabel\empty \else
    -      \ifx\floattype\empty \else % if also had float type, need tie first.
    -        \appendtomacro\floatident{\tie}%
    -      \fi
    -      % the number.
    -      \appendtomacro\floatident{\chaplevelprefix\the\floatno}%
    -    \fi
    -    %
    -    % Start the printed caption with what we've constructed in
    -    % \floatident, but keep it separate; we need \floatident again.
    -    \let\captionline = \floatident
    -    %
    -    \ifx\thiscaption\empty \else
    -      \ifx\floatident\empty \else
    -        \appendtomacro\captionline{: }% had ident, so need a colon between
    -      \fi
    -      %
    -      % caption text.
    -      \appendtomacro\captionline{\scanexp\thiscaption}%
    -    \fi
    -    %
    -    % If we have anything to print, print it, with space before.
    -    % Eventually this needs to become an \insert.
    -    \ifx\captionline\empty \else
    -      \vskip.5\parskip
    -      \captionline
    -      %
    -      % Space below caption.
    -      \vskip\parskip
    -    \fi
    -    %
    -    % If have an xref label, write the list of floats info.  Do this
    -    % after the caption, to avoid chance of it being a breakpoint.
    -    \ifx\floatlabel\empty \else
    -      % Write the text that goes in the lof to the aux file as
    -      % \floatlabel-lof.  Besides \floatident, we include the short
    -      % caption if specified, else the full caption if specified, else nothing.
    -      {%
    -        \requireauxfile
    -        \atdummies
    -        %
    -        \ifx\thisshortcaption\empty
    -          \def\gtemp{\thiscaption}%
    -        \else
    -          \def\gtemp{\thisshortcaption}%
    -        \fi
    -        \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident
    -          \ifx\gtemp\empty \else : \gtemp \fi}}%
    -      }%
    -    \fi
    -  \egroup  % end of \vtop
    -  %
    -  \checkinserts
    -}
    -
    -% Append the tokens #2 to the definition of macro #1, not expanding either.
    -%
    -\def\appendtomacro#1#2{%
    -  \expandafter\def\expandafter#1\expandafter{#1#2}%
    -}
    -
    -% @caption, @shortcaption
    -%
    -\def\caption{\docaption\thiscaption}
    -\def\shortcaption{\docaption\thisshortcaption}
    -\def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption}
    -\def\defcaption#1#2{\egroup \def#1{#2}}
    -
    -% The parameter is the control sequence identifying the counter we are
    -% going to use.  Create it if it doesn't exist and assign it to \floatno.
    -\def\getfloatno#1{%
    -  \ifx#1\relax
    -      % Haven't seen this figure type before.
    -      \csname newcount\endcsname #1%
    -      %
    -      % Remember to reset this floatno at the next chap.
    -      \expandafter\gdef\expandafter\resetallfloatnos
    -        \expandafter{\resetallfloatnos #1=0 }%
    -  \fi
    -  \let\floatno#1%
    -}
    -
    -% \setref calls this to get the XREFLABEL-snt value.  We want an @xref
    -% to the FLOATLABEL to expand to "Figure 3.1".  We call \setref when we
    -% first read the @float command.
    -%
    -\def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}%
    -
    -% Magic string used for the XREFLABEL-title value, so \xrefX can
    -% distinguish floats from other xref types.
    -\def\floatmagic{!!float!!}
    -
    -% #1 is the control sequence we are passed; we expand into a conditional
    -% which is true if #1 represents a float ref.  That is, the magic
    -% \currentsection value which we \setref above.
    -%
    -\def\iffloat#1{\expandafter\doiffloat#1==\finish}
    -%
    -% #1 is (maybe) the \floatmagic string.  If so, #2 will be the
    -% (safe) float type for this float.  We set \iffloattype to #2.
    -%
    -\def\doiffloat#1=#2=#3\finish{%
    -  \def\temp{#1}%
    -  \def\iffloattype{#2}%
    -  \ifx\temp\floatmagic
    -}
    -
    -% @listoffloats FLOATTYPE - print a list of floats like a table of contents.
    -%
    -\parseargdef\listoffloats{%
    -  \def\floattype{#1}% floattype
    -  {%
    -    % the floattype might have accents or other special characters,
    -    % but we need to use it in a control sequence name.
    -    \indexnofonts
    -    \turnoffactive
    -    \xdef\safefloattype{\floattype}%
    -  }%
    -  %
    -  % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE.
    -  \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax
    -    \ifhavexrefs
    -      % if the user said @listoffloats foo but never @float foo.
    -      \message{\linenumber No `\safefloattype' floats to list.}%
    -    \fi
    -  \else
    -    \begingroup
    -      \leftskip=\tocindent  % indent these entries like a toc
    -      \let\do=\listoffloatsdo
    -      \csname floatlist\safefloattype\endcsname
    -    \endgroup
    -  \fi
    -}
    -
    -% This is called on each entry in a list of floats.  We're passed the
    -% xref label, in the form LABEL-title, which is how we save it in the
    -% aux file.  We strip off the -title and look up \XRLABEL-lof, which
    -% has the text we're supposed to typeset here.
    -%
    -% Figures without xref labels will not be included in the list (since
    -% they won't appear in the aux file).
    -%
    -\def\listoffloatsdo#1{\listoffloatsdoentry#1\finish}
    -\def\listoffloatsdoentry#1-title\finish{{%
    -  % Can't fully expand XR#1-lof because it can contain anything.  Just
    -  % pass the control sequence.  On the other hand, XR#1-pg is just the
    -  % page number, and we want to fully expand that so we can get a link
    -  % in pdf output.
    -  \toksA = \expandafter{\csname XR#1-lof\endcsname}%
    -  %
    -  % use the same \entry macro we use to generate the TOC and index.
    -  \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}%
    -  \writeentry
    -}}
    -
    -
    -\message{localization,}
    -
    -% For single-language documents, @documentlanguage is usually given very
    -% early, just after @documentencoding.  Single argument is the language
    -% (de) or locale (de_DE) abbreviation.
    -%
    -{
    -  \catcode`\_ = \active
    -  \globaldefs=1
    -\parseargdef\documentlanguage{%
    -  \tex % read txi-??.tex file in plain TeX.
    -    % Read the file by the name they passed if it exists.
    -    \let_ = \normalunderscore  % normal _ character for filename test
    -    \openin 1 txi-#1.tex
    -    \ifeof 1
    -      \documentlanguagetrywithoutunderscore #1_\finish
    -    \else
    -      \globaldefs = 1  % everything in the txi-LL files needs to persist
    -      \input txi-#1.tex
    -    \fi
    -    \closein 1
    -  \endgroup % end raw TeX
    -}
    -%
    -% If they passed de_DE, and txi-de_DE.tex doesn't exist,
    -% try txi-de.tex.
    -%
    -\gdef\documentlanguagetrywithoutunderscore#1_#2\finish{%
    -  \openin 1 txi-#1.tex
    -  \ifeof 1
    -    \errhelp = \nolanghelp
    -    \errmessage{Cannot read language file txi-#1.tex}%
    -  \else
    -    \globaldefs = 1  % everything in the txi-LL files needs to persist
    -    \input txi-#1.tex
    -  \fi
    -  \closein 1
    -}
    -}% end of special _ catcode
    -%
    -\newhelp\nolanghelp{The given language definition file cannot be found or
    -is empty.  Maybe you need to install it?  Putting it in the current
    -directory should work if nowhere else does.}
    -
    -% This macro is called from txi-??.tex files; the first argument is the
    -% \language name to set (without the "\lang@" prefix), the second and
    -% third args are \{left,right}hyphenmin.
    -%
    -% The language names to pass are determined when the format is built.
    -% See the etex.log file created at that time, e.g.,
    -% /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log.
    -%
    -% With TeX Live 2008, etex now includes hyphenation patterns for all
    -% available languages.  This means we can support hyphenation in
    -% Texinfo, at least to some extent.  (This still doesn't solve the
    -% accented characters problem.)
    -%
    -\catcode`@=11
    -\def\txisetlanguage#1#2#3{%
    -  % do not set the language if the name is undefined in the current TeX.
    -  \expandafter\ifx\csname lang@#1\endcsname \relax
    -    \message{no patterns for #1}%
    -  \else
    -    \global\language = \csname lang@#1\endcsname
    -  \fi
    -  % but there is no harm in adjusting the hyphenmin values regardless.
    -  \global\lefthyphenmin = #2\relax
    -  \global\righthyphenmin = #3\relax
    -}
    -
    -% XeTeX and LuaTeX can handle Unicode natively.
    -% Their default I/O uses UTF-8 sequences instead of a byte-wise operation.
    -% Other TeX engines' I/O (pdfTeX, etc.) is byte-wise.
    -%
    -\newif\iftxinativeunicodecapable
    -\newif\iftxiusebytewiseio
    -
    -\ifx\XeTeXrevision\thisisundefined
    -  \ifx\luatexversion\thisisundefined
    -    \txinativeunicodecapablefalse
    -    \txiusebytewiseiotrue
    -  \else
    -    \txinativeunicodecapabletrue
    -    \txiusebytewiseiofalse
    -  \fi
    -\else
    -  \txinativeunicodecapabletrue
    -  \txiusebytewiseiofalse
    -\fi
    -
    -% Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex
    -% for non-UTF-8 (byte-wise) encodings.
    -%
    -\def\setbytewiseio{%
    -  \ifx\XeTeXrevision\thisisundefined
    -  \else
    -    \XeTeXdefaultencoding "bytes"  % For subsequent files to be read
    -    \XeTeXinputencoding "bytes"  % For document root file
    -    % Unfortunately, there seems to be no corresponding XeTeX command for
    -    % output encoding.  This is a problem for auxiliary index and TOC files.
    -    % The only solution would be perhaps to write out @U{...} sequences in
    -    % place of non-ASCII characters.
    -  \fi
    -
    -  \ifx\luatexversion\thisisundefined
    -  \else
    -    \directlua{
    -    local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub
    -    local function convert_char (char)
    -      return utf8_char(byte(char))
    -    end
    -
    -    local function convert_line (line)
    -      return gsub(line, ".", convert_char)
    -    end
    -
    -    callback.register("process_input_buffer", convert_line)
    -
    -    local function convert_line_out (line)
    -      local line_out = ""
    -      for c in string.utfvalues(line) do
    -         line_out = line_out .. string.char(c)
    -      end
    -      return line_out
    -    end
    -
    -    callback.register("process_output_buffer", convert_line_out)
    -    }
    -  \fi
    -
    -  \txiusebytewiseiotrue
    -}
    -
    -
    -% Helpers for encodings.
    -% Set the catcode of characters 128 through 255 to the specified number.
    -%
    -\def\setnonasciicharscatcode#1{%
    -   \count255=128
    -   \loop\ifnum\count255<256
    -      \global\catcode\count255=#1\relax
    -      \advance\count255 by 1
    -   \repeat
    -}
    -
    -\def\setnonasciicharscatcodenonglobal#1{%
    -   \count255=128
    -   \loop\ifnum\count255<256
    -      \catcode\count255=#1\relax
    -      \advance\count255 by 1
    -   \repeat
    -}
    -
    -% @documentencoding sets the definition of non-ASCII characters
    -% according to the specified encoding.
    -%
    -\def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz}
    -\def\documentencodingzzz#1{%
    -  %
    -  % Encoding being declared for the document.
    -  \def\declaredencoding{\csname #1.enc\endcsname}%
    -  %
    -  % Supported encodings: names converted to tokens in order to be able
    -  % to compare them with \ifx.
    -  \def\ascii{\csname US-ASCII.enc\endcsname}%
    -  \def\latnine{\csname ISO-8859-15.enc\endcsname}%
    -  \def\latone{\csname ISO-8859-1.enc\endcsname}%
    -  \def\lattwo{\csname ISO-8859-2.enc\endcsname}%
    -  \def\utfeight{\csname UTF-8.enc\endcsname}%
    -  %
    -  \ifx \declaredencoding \ascii
    -     \asciichardefs
    -  %
    -  \else \ifx \declaredencoding \lattwo
    -     \iftxinativeunicodecapable
    -       \setbytewiseio
    -     \fi
    -     \setnonasciicharscatcode\active
    -     \lattwochardefs
    -  %
    -  \else \ifx \declaredencoding \latone
    -     \iftxinativeunicodecapable
    -       \setbytewiseio
    -     \fi
    -     \setnonasciicharscatcode\active
    -     \latonechardefs
    -  %
    -  \else \ifx \declaredencoding \latnine
    -     \iftxinativeunicodecapable
    -       \setbytewiseio
    -     \fi
    -     \setnonasciicharscatcode\active
    -     \latninechardefs
    -  %
    -  \else \ifx \declaredencoding \utfeight
    -     \iftxinativeunicodecapable
    -       % For native Unicode handling (XeTeX and LuaTeX)
    -       \nativeunicodechardefs
    -     \else
    -       % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX)
    -       \setnonasciicharscatcode\active
    -       % since we already invoked \utfeightchardefs at the top level
    -       % (below), do not re-invoke it, otherwise our check for duplicated
    -       % definitions gets triggered.  Making non-ascii chars active is
    -       % sufficient.
    -     \fi
    -  %
    -  \else
    -    \message{Ignoring unknown document encoding: #1.}%
    -  %
    -  \fi % utfeight
    -  \fi % latnine
    -  \fi % latone
    -  \fi % lattwo
    -  \fi % ascii
    -  %
    -  \ifx\XeTeXrevision\thisisundefined
    -  \else
    -    \ifx \declaredencoding \utfeight
    -    \else
    -      \ifx \declaredencoding \ascii
    -      \else
    -        \message{Warning: XeTeX with non-UTF-8 encodings cannot handle %
    -        non-ASCII characters in auxiliary files.}%
    -      \fi
    -    \fi
    -  \fi
    -}
    -
    -% emacs-page
    -% A message to be logged when using a character that isn't available
    -% the default font encoding (OT1).
    -%
    -\def\missingcharmsg#1{\message{Character missing, sorry: #1.}}
    -
    -% Take account of \c (plain) vs. \, (Texinfo) difference.
    -\def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi}
    -
    -% First, make active non-ASCII characters in order for them to be
    -% correctly categorized when TeX reads the replacement text of
    -% macros containing the character definitions.
    -\setnonasciicharscatcode\active
    -%
    -
    -\def\gdefchar#1#2{%
    -\gdef#1{%
    -   \ifpassthroughchars
    -     \string#1%
    -   \else
    -     #2%
    -   \fi
    -}}
    -
    -% Latin1 (ISO-8859-1) character definitions.
    -\def\latonechardefs{%
    -  \gdefchar^^a0{\tie}
    -  \gdefchar^^a1{\exclamdown}
    -  \gdefchar^^a2{{\tcfont \char162}} % cent
    -  \gdefchar^^a3{\pounds{}}
    -  \gdefchar^^a4{{\tcfont \char164}} % currency
    -  \gdefchar^^a5{{\tcfont \char165}} % yen
    -  \gdefchar^^a6{{\tcfont \char166}} % broken bar
    -  \gdefchar^^a7{\S}
    -  \gdefchar^^a8{\"{}}
    -  \gdefchar^^a9{\copyright{}}
    -  \gdefchar^^aa{\ordf}
    -  \gdefchar^^ab{\guillemetleft{}}
    -  \gdefchar^^ac{\ensuremath\lnot}
    -  \gdefchar^^ad{\-}
    -  \gdefchar^^ae{\registeredsymbol{}}
    -  \gdefchar^^af{\={}}
    -  %
    -  \gdefchar^^b0{\textdegree}
    -  \gdefchar^^b1{$\pm$}
    -  \gdefchar^^b2{$^2$}
    -  \gdefchar^^b3{$^3$}
    -  \gdefchar^^b4{\'{}}
    -  \gdefchar^^b5{$\mu$}
    -  \gdefchar^^b6{\P}
    -  \gdefchar^^b7{\ensuremath\cdot}
    -  \gdefchar^^b8{\cedilla\ }
    -  \gdefchar^^b9{$^1$}
    -  \gdefchar^^ba{\ordm}
    -  \gdefchar^^bb{\guillemetright{}}
    -  \gdefchar^^bc{$1\over4$}
    -  \gdefchar^^bd{$1\over2$}
    -  \gdefchar^^be{$3\over4$}
    -  \gdefchar^^bf{\questiondown}
    -  %
    -  \gdefchar^^c0{\`A}
    -  \gdefchar^^c1{\'A}
    -  \gdefchar^^c2{\^A}
    -  \gdefchar^^c3{\~A}
    -  \gdefchar^^c4{\"A}
    -  \gdefchar^^c5{\ringaccent A}
    -  \gdefchar^^c6{\AE}
    -  \gdefchar^^c7{\cedilla C}
    -  \gdefchar^^c8{\`E}
    -  \gdefchar^^c9{\'E}
    -  \gdefchar^^ca{\^E}
    -  \gdefchar^^cb{\"E}
    -  \gdefchar^^cc{\`I}
    -  \gdefchar^^cd{\'I}
    -  \gdefchar^^ce{\^I}
    -  \gdefchar^^cf{\"I}
    -  %
    -  \gdefchar^^d0{\DH}
    -  \gdefchar^^d1{\~N}
    -  \gdefchar^^d2{\`O}
    -  \gdefchar^^d3{\'O}
    -  \gdefchar^^d4{\^O}
    -  \gdefchar^^d5{\~O}
    -  \gdefchar^^d6{\"O}
    -  \gdefchar^^d7{$\times$}
    -  \gdefchar^^d8{\O}
    -  \gdefchar^^d9{\`U}
    -  \gdefchar^^da{\'U}
    -  \gdefchar^^db{\^U}
    -  \gdefchar^^dc{\"U}
    -  \gdefchar^^dd{\'Y}
    -  \gdefchar^^de{\TH}
    -  \gdefchar^^df{\ss}
    -  %
    -  \gdefchar^^e0{\`a}
    -  \gdefchar^^e1{\'a}
    -  \gdefchar^^e2{\^a}
    -  \gdefchar^^e3{\~a}
    -  \gdefchar^^e4{\"a}
    -  \gdefchar^^e5{\ringaccent a}
    -  \gdefchar^^e6{\ae}
    -  \gdefchar^^e7{\cedilla c}
    -  \gdefchar^^e8{\`e}
    -  \gdefchar^^e9{\'e}
    -  \gdefchar^^ea{\^e}
    -  \gdefchar^^eb{\"e}
    -  \gdefchar^^ec{\`{\dotless i}}
    -  \gdefchar^^ed{\'{\dotless i}}
    -  \gdefchar^^ee{\^{\dotless i}}
    -  \gdefchar^^ef{\"{\dotless i}}
    -  %
    -  \gdefchar^^f0{\dh}
    -  \gdefchar^^f1{\~n}
    -  \gdefchar^^f2{\`o}
    -  \gdefchar^^f3{\'o}
    -  \gdefchar^^f4{\^o}
    -  \gdefchar^^f5{\~o}
    -  \gdefchar^^f6{\"o}
    -  \gdefchar^^f7{$\div$}
    -  \gdefchar^^f8{\o}
    -  \gdefchar^^f9{\`u}
    -  \gdefchar^^fa{\'u}
    -  \gdefchar^^fb{\^u}
    -  \gdefchar^^fc{\"u}
    -  \gdefchar^^fd{\'y}
    -  \gdefchar^^fe{\th}
    -  \gdefchar^^ff{\"y}
    -}
    -
    -% Latin9 (ISO-8859-15) encoding character definitions.
    -\def\latninechardefs{%
    -  % Encoding is almost identical to Latin1.
    -  \latonechardefs
    -  %
    -  \gdefchar^^a4{\euro{}}
    -  \gdefchar^^a6{\v S}
    -  \gdefchar^^a8{\v s}
    -  \gdefchar^^b4{\v Z}
    -  \gdefchar^^b8{\v z}
    -  \gdefchar^^bc{\OE}
    -  \gdefchar^^bd{\oe}
    -  \gdefchar^^be{\"Y}
    -}
    -
    -% Latin2 (ISO-8859-2) character definitions.
    -\def\lattwochardefs{%
    -  \gdefchar^^a0{\tie}
    -  \gdefchar^^a1{\ogonek{A}}
    -  \gdefchar^^a2{\u{}}
    -  \gdefchar^^a3{\L}
    -  \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}}
    -  \gdefchar^^a5{\v L}
    -  \gdefchar^^a6{\'S}
    -  \gdefchar^^a7{\S}
    -  \gdefchar^^a8{\"{}}
    -  \gdefchar^^a9{\v S}
    -  \gdefchar^^aa{\cedilla S}
    -  \gdefchar^^ab{\v T}
    -  \gdefchar^^ac{\'Z}
    -  \gdefchar^^ad{\-}
    -  \gdefchar^^ae{\v Z}
    -  \gdefchar^^af{\dotaccent Z}
    -  %
    -  \gdefchar^^b0{\textdegree{}}
    -  \gdefchar^^b1{\ogonek{a}}
    -  \gdefchar^^b2{\ogonek{ }}
    -  \gdefchar^^b3{\l}
    -  \gdefchar^^b4{\'{}}
    -  \gdefchar^^b5{\v l}
    -  \gdefchar^^b6{\'s}
    -  \gdefchar^^b7{\v{}}
    -  \gdefchar^^b8{\cedilla\ }
    -  \gdefchar^^b9{\v s}
    -  \gdefchar^^ba{\cedilla s}
    -  \gdefchar^^bb{\v t}
    -  \gdefchar^^bc{\'z}
    -  \gdefchar^^bd{\H{}}
    -  \gdefchar^^be{\v z}
    -  \gdefchar^^bf{\dotaccent z}
    -  %
    -  \gdefchar^^c0{\'R}
    -  \gdefchar^^c1{\'A}
    -  \gdefchar^^c2{\^A}
    -  \gdefchar^^c3{\u A}
    -  \gdefchar^^c4{\"A}
    -  \gdefchar^^c5{\'L}
    -  \gdefchar^^c6{\'C}
    -  \gdefchar^^c7{\cedilla C}
    -  \gdefchar^^c8{\v C}
    -  \gdefchar^^c9{\'E}
    -  \gdefchar^^ca{\ogonek{E}}
    -  \gdefchar^^cb{\"E}
    -  \gdefchar^^cc{\v E}
    -  \gdefchar^^cd{\'I}
    -  \gdefchar^^ce{\^I}
    -  \gdefchar^^cf{\v D}
    -  %
    -  \gdefchar^^d0{\DH}
    -  \gdefchar^^d1{\'N}
    -  \gdefchar^^d2{\v N}
    -  \gdefchar^^d3{\'O}
    -  \gdefchar^^d4{\^O}
    -  \gdefchar^^d5{\H O}
    -  \gdefchar^^d6{\"O}
    -  \gdefchar^^d7{$\times$}
    -  \gdefchar^^d8{\v R}
    -  \gdefchar^^d9{\ringaccent U}
    -  \gdefchar^^da{\'U}
    -  \gdefchar^^db{\H U}
    -  \gdefchar^^dc{\"U}
    -  \gdefchar^^dd{\'Y}
    -  \gdefchar^^de{\cedilla T}
    -  \gdefchar^^df{\ss}
    -  %
    -  \gdefchar^^e0{\'r}
    -  \gdefchar^^e1{\'a}
    -  \gdefchar^^e2{\^a}
    -  \gdefchar^^e3{\u a}
    -  \gdefchar^^e4{\"a}
    -  \gdefchar^^e5{\'l}
    -  \gdefchar^^e6{\'c}
    -  \gdefchar^^e7{\cedilla c}
    -  \gdefchar^^e8{\v c}
    -  \gdefchar^^e9{\'e}
    -  \gdefchar^^ea{\ogonek{e}}
    -  \gdefchar^^eb{\"e}
    -  \gdefchar^^ec{\v e}
    -  \gdefchar^^ed{\'{\dotless{i}}}
    -  \gdefchar^^ee{\^{\dotless{i}}}
    -  \gdefchar^^ef{\v d}
    -  %
    -  \gdefchar^^f0{\dh}
    -  \gdefchar^^f1{\'n}
    -  \gdefchar^^f2{\v n}
    -  \gdefchar^^f3{\'o}
    -  \gdefchar^^f4{\^o}
    -  \gdefchar^^f5{\H o}
    -  \gdefchar^^f6{\"o}
    -  \gdefchar^^f7{$\div$}
    -  \gdefchar^^f8{\v r}
    -  \gdefchar^^f9{\ringaccent u}
    -  \gdefchar^^fa{\'u}
    -  \gdefchar^^fb{\H u}
    -  \gdefchar^^fc{\"u}
    -  \gdefchar^^fd{\'y}
    -  \gdefchar^^fe{\cedilla t}
    -  \gdefchar^^ff{\dotaccent{}}
    -}
    -
    -% UTF-8 character definitions.
    -%
    -% This code to support UTF-8 is based on LaTeX's utf8.def, with some
    -% changes for Texinfo conventions.  It is included here under the GPL by
    -% permission from Frank Mittelbach and the LaTeX team.
    -%
    -\newcount\countUTFx
    -\newcount\countUTFy
    -\newcount\countUTFz
    -
    -\gdef\UTFviiiTwoOctets#1#2{\expandafter
    -   \UTFviiiDefined\csname u8:#1\string #2\endcsname}
    -%
    -\gdef\UTFviiiThreeOctets#1#2#3{\expandafter
    -   \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname}
    -%
    -\gdef\UTFviiiFourOctets#1#2#3#4{\expandafter
    -   \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname}
    -
    -\gdef\UTFviiiDefined#1{%
    -  \ifx #1\relax
    -    \message{\linenumber Unicode char \string #1 not defined for Texinfo}%
    -  \else
    -    \expandafter #1%
    -  \fi
    -}
    -
    -% Give non-ASCII bytes the active definitions for processing UTF-8 sequences
    -\begingroup
    -  \catcode`\~13
    -  \catcode`\$12
    -  \catcode`\"12
    -
    -  % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp
    -  % substituting ~ and $ with a character token of that value.
    -  \def\UTFviiiLoop{%
    -    \global\catcode\countUTFx\active
    -    \uccode`\~\countUTFx
    -    \uccode`\$\countUTFx
    -    \uppercase\expandafter{\UTFviiiTmp}%
    -    \advance\countUTFx by 1
    -    \ifnum\countUTFx < \countUTFy
    -      \expandafter\UTFviiiLoop
    -    \fi}
    -
    -  % For bytes other than the first in a UTF-8 sequence.  Not expected to
    -  % be expanded except when writing to auxiliary files.
    -  \countUTFx = "80
    -  \countUTFy = "C2
    -  \def\UTFviiiTmp{%
    -    \gdef~{%
    -        \ifpassthroughchars $\fi}}%
    -  \UTFviiiLoop
    -
    -  \countUTFx = "C2
    -  \countUTFy = "E0
    -  \def\UTFviiiTmp{%
    -    \gdef~{%
    -        \ifpassthroughchars $%
    -        \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}%
    -  \UTFviiiLoop
    -
    -  \countUTFx = "E0
    -  \countUTFy = "F0
    -  \def\UTFviiiTmp{%
    -    \gdef~{%
    -        \ifpassthroughchars $%
    -        \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}%
    -  \UTFviiiLoop
    -
    -  \countUTFx = "F0
    -  \countUTFy = "F4
    -  \def\UTFviiiTmp{%
    -    \gdef~{%
    -        \ifpassthroughchars $%
    -        \else\expandafter\UTFviiiFourOctets\expandafter$\fi
    -        }}%
    -  \UTFviiiLoop
    -\endgroup
    -
    -\def\globallet{\global\let} % save some \expandafter's below
    -
    -% @U{xxxx} to produce U+xxxx, if we support it.
    -\def\U#1{%
    -  \expandafter\ifx\csname uni:#1\endcsname \relax
    -    \iftxinativeunicodecapable
    -      % All Unicode characters can be used if native Unicode handling is
    -      % active.  However, if the font does not have the glyph,
    -      % letters are missing.
    -      \begingroup
    -        \uccode`\.="#1\relax
    -        \uppercase{.}
    -      \endgroup
    -    \else
    -      \errhelp = \EMsimple
    -      \errmessage{Unicode character U+#1 not supported, sorry}%
    -    \fi
    -  \else
    -    \csname uni:#1\endcsname
    -  \fi
    -}
    -
    -% These macros are used here to construct the name of a control
    -% sequence to be defined.
    -\def\UTFviiiTwoOctetsName#1#2{%
    -  \csname u8:#1\string #2\endcsname}%
    -\def\UTFviiiThreeOctetsName#1#2#3{%
    -  \csname u8:#1\string #2\string #3\endcsname}%
    -\def\UTFviiiFourOctetsName#1#2#3#4{%
    -  \csname u8:#1\string #2\string #3\string #4\endcsname}%
    -
    -% For UTF-8 byte sequences (TeX, e-TeX and pdfTeX),
    -% provide a definition macro to replace a Unicode character;
    -% this gets used by the @U command
    -%
    -\begingroup
    -  \catcode`\"=12
    -  \catcode`\<=12
    -  \catcode`\.=12
    -  \catcode`\,=12
    -  \catcode`\;=12
    -  \catcode`\!=12
    -  \catcode`\~=13
    -  \gdef\DeclareUnicodeCharacterUTFviii#1#2{%
    -    \countUTFz = "#1\relax
    -    \begingroup
    -      \parseXMLCharref
    -
    -      % Give \u8:... its definition.  The sequence of seven \expandafter's
    -      % expands after the \gdef three times, e.g.
    -      %
    -      % 1.  \UTFviiTwoOctetsName B1 B2
    -      % 2.  \csname u8:B1 \string B2 \endcsname
    -      % 3.  \u8: B1 B2  (a single control sequence token)
    -      %
    -      \expandafter\expandafter
    -      \expandafter\expandafter
    -      \expandafter\expandafter
    -      \expandafter\gdef       \UTFviiiTmp{#2}%
    -      %
    -      \expandafter\ifx\csname uni:#1\endcsname \relax \else
    -       \message{Internal error, already defined: #1}%
    -      \fi
    -      %
    -      % define an additional control sequence for this code point.
    -      \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp
    -    \endgroup}
    -  %
    -  % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp
    -  % to the corresponding UTF-8 sequence.
    -  \gdef\parseXMLCharref{%
    -    \ifnum\countUTFz < "A0\relax
    -      \errhelp = \EMsimple
    -      \errmessage{Cannot define Unicode char value < 00A0}%
    -    \else\ifnum\countUTFz < "800\relax
    -      \parseUTFviiiA,%
    -      \parseUTFviiiB C\UTFviiiTwoOctetsName.,%
    -    \else\ifnum\countUTFz < "10000\relax
    -      \parseUTFviiiA;%
    -      \parseUTFviiiA,%
    -      \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}%
    -    \else
    -      \parseUTFviiiA;%
    -      \parseUTFviiiA,%
    -      \parseUTFviiiA!%
    -      \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}%
    -    \fi\fi\fi
    -  }
    -
    -  % Extract a byte from the end of the UTF-8 representation of \countUTFx.
    -  % It must be a non-initial byte in the sequence.
    -  % Change \uccode of #1 for it to be used in \parseUTFviiiB as one
    -  % of the bytes.
    -  \gdef\parseUTFviiiA#1{%
    -    \countUTFx = \countUTFz
    -    \divide\countUTFz by 64
    -    \countUTFy = \countUTFz  % Save to be the future value of \countUTFz.
    -    \multiply\countUTFz by 64
    -
    -    % \countUTFz is now \countUTFx with the last 5 bits cleared.  Subtract
    -    % in order to get the last five bits.
    -    \advance\countUTFx by -\countUTFz
    -
    -    % Convert this to the byte in the UTF-8 sequence.
    -    \advance\countUTFx by 128
    -    \uccode `#1\countUTFx
    -    \countUTFz = \countUTFy}
    -
    -  % Used to put a UTF-8 byte sequence into \UTFviiiTmp
    -  % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8
    -  %    sequence.
    -  % #2 is one of the \UTFviii*OctetsName macros.
    -  % #3 is always a full stop (.)
    -  % #4 is a template for the other bytes in the sequence.  The values for these
    -  %    bytes is substituted in here with \uppercase using the \uccode's.
    -  \gdef\parseUTFviiiB#1#2#3#4{%
    -    \advance\countUTFz by "#10\relax
    -    \uccode `#3\countUTFz
    -    \uppercase{\gdef\UTFviiiTmp{#2#3#4}}}
    -\endgroup
    -
    -% For native Unicode handling (XeTeX and LuaTeX),
    -% provide a definition macro that sets a catcode to `other' non-globally
    -%
    -\def\DeclareUnicodeCharacterNativeOther#1#2{%
    -  \catcode"#1=\other
    -}
    -
    -% https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M
    -% U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block)
    -% U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block)
    -% U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A
    -% U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B
    -%
    -% Many of our renditions are less than wonderful, and all the missing
    -% characters are available somewhere.  Loading the necessary fonts
    -% awaits user request.  We can't truly support Unicode without
    -% reimplementing everything that's been done in LaTeX for many years,
    -% plus probably using luatex or xetex, and who knows what else.
    -% We won't be doing that here in this simple file.  But we can try to at
    -% least make most of the characters not bomb out.
    -%
    -\def\unicodechardefs{%
    -  \DeclareUnicodeCharacter{00A0}{\tie}%
    -  \DeclareUnicodeCharacter{00A1}{\exclamdown}%
    -  \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent
    -  \DeclareUnicodeCharacter{00A3}{\pounds{}}%
    -  \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency
    -  \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen
    -  \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar
    -  \DeclareUnicodeCharacter{00A7}{\S}%
    -  \DeclareUnicodeCharacter{00A8}{\"{ }}%
    -  \DeclareUnicodeCharacter{00A9}{\copyright{}}%
    -  \DeclareUnicodeCharacter{00AA}{\ordf}%
    -  \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}%
    -  \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}%
    -  \DeclareUnicodeCharacter{00AD}{\-}%
    -  \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}%
    -  \DeclareUnicodeCharacter{00AF}{\={ }}%
    -  %
    -  \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}%
    -  \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}%
    -  \DeclareUnicodeCharacter{00B2}{$^2$}%
    -  \DeclareUnicodeCharacter{00B3}{$^3$}%
    -  \DeclareUnicodeCharacter{00B4}{\'{ }}%
    -  \DeclareUnicodeCharacter{00B5}{$\mu$}%
    -  \DeclareUnicodeCharacter{00B6}{\P}%
    -  \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}%
    -  \DeclareUnicodeCharacter{00B8}{\cedilla{ }}%
    -  \DeclareUnicodeCharacter{00B9}{$^1$}%
    -  \DeclareUnicodeCharacter{00BA}{\ordm}%
    -  \DeclareUnicodeCharacter{00BB}{\guillemetright{}}%
    -  \DeclareUnicodeCharacter{00BC}{$1\over4$}%
    -  \DeclareUnicodeCharacter{00BD}{$1\over2$}%
    -  \DeclareUnicodeCharacter{00BE}{$3\over4$}%
    -  \DeclareUnicodeCharacter{00BF}{\questiondown}%
    -  %
    -  \DeclareUnicodeCharacter{00C0}{\`A}%
    -  \DeclareUnicodeCharacter{00C1}{\'A}%
    -  \DeclareUnicodeCharacter{00C2}{\^A}%
    -  \DeclareUnicodeCharacter{00C3}{\~A}%
    -  \DeclareUnicodeCharacter{00C4}{\"A}%
    -  \DeclareUnicodeCharacter{00C5}{\AA}%
    -  \DeclareUnicodeCharacter{00C6}{\AE}%
    -  \DeclareUnicodeCharacter{00C7}{\cedilla{C}}%
    -  \DeclareUnicodeCharacter{00C8}{\`E}%
    -  \DeclareUnicodeCharacter{00C9}{\'E}%
    -  \DeclareUnicodeCharacter{00CA}{\^E}%
    -  \DeclareUnicodeCharacter{00CB}{\"E}%
    -  \DeclareUnicodeCharacter{00CC}{\`I}%
    -  \DeclareUnicodeCharacter{00CD}{\'I}%
    -  \DeclareUnicodeCharacter{00CE}{\^I}%
    -  \DeclareUnicodeCharacter{00CF}{\"I}%
    -  %
    -  \DeclareUnicodeCharacter{00D0}{\DH}%
    -  \DeclareUnicodeCharacter{00D1}{\~N}%
    -  \DeclareUnicodeCharacter{00D2}{\`O}%
    -  \DeclareUnicodeCharacter{00D3}{\'O}%
    -  \DeclareUnicodeCharacter{00D4}{\^O}%
    -  \DeclareUnicodeCharacter{00D5}{\~O}%
    -  \DeclareUnicodeCharacter{00D6}{\"O}%
    -  \DeclareUnicodeCharacter{00D7}{\ensuremath\times}%
    -  \DeclareUnicodeCharacter{00D8}{\O}%
    -  \DeclareUnicodeCharacter{00D9}{\`U}%
    -  \DeclareUnicodeCharacter{00DA}{\'U}%
    -  \DeclareUnicodeCharacter{00DB}{\^U}%
    -  \DeclareUnicodeCharacter{00DC}{\"U}%
    -  \DeclareUnicodeCharacter{00DD}{\'Y}%
    -  \DeclareUnicodeCharacter{00DE}{\TH}%
    -  \DeclareUnicodeCharacter{00DF}{\ss}%
    -  %
    -  \DeclareUnicodeCharacter{00E0}{\`a}%
    -  \DeclareUnicodeCharacter{00E1}{\'a}%
    -  \DeclareUnicodeCharacter{00E2}{\^a}%
    -  \DeclareUnicodeCharacter{00E3}{\~a}%
    -  \DeclareUnicodeCharacter{00E4}{\"a}%
    -  \DeclareUnicodeCharacter{00E5}{\aa}%
    -  \DeclareUnicodeCharacter{00E6}{\ae}%
    -  \DeclareUnicodeCharacter{00E7}{\cedilla{c}}%
    -  \DeclareUnicodeCharacter{00E8}{\`e}%
    -  \DeclareUnicodeCharacter{00E9}{\'e}%
    -  \DeclareUnicodeCharacter{00EA}{\^e}%
    -  \DeclareUnicodeCharacter{00EB}{\"e}%
    -  \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}%
    -  \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}%
    -  \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}%
    -  \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}%
    -  %
    -  \DeclareUnicodeCharacter{00F0}{\dh}%
    -  \DeclareUnicodeCharacter{00F1}{\~n}%
    -  \DeclareUnicodeCharacter{00F2}{\`o}%
    -  \DeclareUnicodeCharacter{00F3}{\'o}%
    -  \DeclareUnicodeCharacter{00F4}{\^o}%
    -  \DeclareUnicodeCharacter{00F5}{\~o}%
    -  \DeclareUnicodeCharacter{00F6}{\"o}%
    -  \DeclareUnicodeCharacter{00F7}{\ensuremath\div}%
    -  \DeclareUnicodeCharacter{00F8}{\o}%
    -  \DeclareUnicodeCharacter{00F9}{\`u}%
    -  \DeclareUnicodeCharacter{00FA}{\'u}%
    -  \DeclareUnicodeCharacter{00FB}{\^u}%
    -  \DeclareUnicodeCharacter{00FC}{\"u}%
    -  \DeclareUnicodeCharacter{00FD}{\'y}%
    -  \DeclareUnicodeCharacter{00FE}{\th}%
    -  \DeclareUnicodeCharacter{00FF}{\"y}%
    -  %
    -  \DeclareUnicodeCharacter{0100}{\=A}%
    -  \DeclareUnicodeCharacter{0101}{\=a}%
    -  \DeclareUnicodeCharacter{0102}{\u{A}}%
    -  \DeclareUnicodeCharacter{0103}{\u{a}}%
    -  \DeclareUnicodeCharacter{0104}{\ogonek{A}}%
    -  \DeclareUnicodeCharacter{0105}{\ogonek{a}}%
    -  \DeclareUnicodeCharacter{0106}{\'C}%
    -  \DeclareUnicodeCharacter{0107}{\'c}%
    -  \DeclareUnicodeCharacter{0108}{\^C}%
    -  \DeclareUnicodeCharacter{0109}{\^c}%
    -  \DeclareUnicodeCharacter{010A}{\dotaccent{C}}%
    -  \DeclareUnicodeCharacter{010B}{\dotaccent{c}}%
    -  \DeclareUnicodeCharacter{010C}{\v{C}}%
    -  \DeclareUnicodeCharacter{010D}{\v{c}}%
    -  \DeclareUnicodeCharacter{010E}{\v{D}}%
    -  \DeclareUnicodeCharacter{010F}{d'}%
    -  %
    -  \DeclareUnicodeCharacter{0110}{\DH}%
    -  \DeclareUnicodeCharacter{0111}{\dh}%
    -  \DeclareUnicodeCharacter{0112}{\=E}%
    -  \DeclareUnicodeCharacter{0113}{\=e}%
    -  \DeclareUnicodeCharacter{0114}{\u{E}}%
    -  \DeclareUnicodeCharacter{0115}{\u{e}}%
    -  \DeclareUnicodeCharacter{0116}{\dotaccent{E}}%
    -  \DeclareUnicodeCharacter{0117}{\dotaccent{e}}%
    -  \DeclareUnicodeCharacter{0118}{\ogonek{E}}%
    -  \DeclareUnicodeCharacter{0119}{\ogonek{e}}%
    -  \DeclareUnicodeCharacter{011A}{\v{E}}%
    -  \DeclareUnicodeCharacter{011B}{\v{e}}%
    -  \DeclareUnicodeCharacter{011C}{\^G}%
    -  \DeclareUnicodeCharacter{011D}{\^g}%
    -  \DeclareUnicodeCharacter{011E}{\u{G}}%
    -  \DeclareUnicodeCharacter{011F}{\u{g}}%
    -  %
    -  \DeclareUnicodeCharacter{0120}{\dotaccent{G}}%
    -  \DeclareUnicodeCharacter{0121}{\dotaccent{g}}%
    -  \DeclareUnicodeCharacter{0122}{\cedilla{G}}%
    -  \DeclareUnicodeCharacter{0123}{\cedilla{g}}%
    -  \DeclareUnicodeCharacter{0124}{\^H}%
    -  \DeclareUnicodeCharacter{0125}{\^h}%
    -  \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}%
    -  \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}%
    -  \DeclareUnicodeCharacter{0128}{\~I}%
    -  \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}%
    -  \DeclareUnicodeCharacter{012A}{\=I}%
    -  \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}%
    -  \DeclareUnicodeCharacter{012C}{\u{I}}%
    -  \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}%
    -  \DeclareUnicodeCharacter{012E}{\ogonek{I}}%
    -  \DeclareUnicodeCharacter{012F}{\ogonek{i}}%
    -  %
    -  \DeclareUnicodeCharacter{0130}{\dotaccent{I}}%
    -  \DeclareUnicodeCharacter{0131}{\dotless{i}}%
    -  \DeclareUnicodeCharacter{0132}{IJ}%
    -  \DeclareUnicodeCharacter{0133}{ij}%
    -  \DeclareUnicodeCharacter{0134}{\^J}%
    -  \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}%
    -  \DeclareUnicodeCharacter{0136}{\cedilla{K}}%
    -  \DeclareUnicodeCharacter{0137}{\cedilla{k}}%
    -  \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}%
    -  \DeclareUnicodeCharacter{0139}{\'L}%
    -  \DeclareUnicodeCharacter{013A}{\'l}%
    -  \DeclareUnicodeCharacter{013B}{\cedilla{L}}%
    -  \DeclareUnicodeCharacter{013C}{\cedilla{l}}%
    -  \DeclareUnicodeCharacter{013D}{L'}% should kern
    -  \DeclareUnicodeCharacter{013E}{l'}% should kern
    -  \DeclareUnicodeCharacter{013F}{L\U{00B7}}%
    -  %
    -  \DeclareUnicodeCharacter{0140}{l\U{00B7}}%
    -  \DeclareUnicodeCharacter{0141}{\L}%
    -  \DeclareUnicodeCharacter{0142}{\l}%
    -  \DeclareUnicodeCharacter{0143}{\'N}%
    -  \DeclareUnicodeCharacter{0144}{\'n}%
    -  \DeclareUnicodeCharacter{0145}{\cedilla{N}}%
    -  \DeclareUnicodeCharacter{0146}{\cedilla{n}}%
    -  \DeclareUnicodeCharacter{0147}{\v{N}}%
    -  \DeclareUnicodeCharacter{0148}{\v{n}}%
    -  \DeclareUnicodeCharacter{0149}{'n}%
    -  \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}%
    -  \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}%
    -  \DeclareUnicodeCharacter{014C}{\=O}%
    -  \DeclareUnicodeCharacter{014D}{\=o}%
    -  \DeclareUnicodeCharacter{014E}{\u{O}}%
    -  \DeclareUnicodeCharacter{014F}{\u{o}}%
    -  %
    -  \DeclareUnicodeCharacter{0150}{\H{O}}%
    -  \DeclareUnicodeCharacter{0151}{\H{o}}%
    -  \DeclareUnicodeCharacter{0152}{\OE}%
    -  \DeclareUnicodeCharacter{0153}{\oe}%
    -  \DeclareUnicodeCharacter{0154}{\'R}%
    -  \DeclareUnicodeCharacter{0155}{\'r}%
    -  \DeclareUnicodeCharacter{0156}{\cedilla{R}}%
    -  \DeclareUnicodeCharacter{0157}{\cedilla{r}}%
    -  \DeclareUnicodeCharacter{0158}{\v{R}}%
    -  \DeclareUnicodeCharacter{0159}{\v{r}}%
    -  \DeclareUnicodeCharacter{015A}{\'S}%
    -  \DeclareUnicodeCharacter{015B}{\'s}%
    -  \DeclareUnicodeCharacter{015C}{\^S}%
    -  \DeclareUnicodeCharacter{015D}{\^s}%
    -  \DeclareUnicodeCharacter{015E}{\cedilla{S}}%
    -  \DeclareUnicodeCharacter{015F}{\cedilla{s}}%
    -  %
    -  \DeclareUnicodeCharacter{0160}{\v{S}}%
    -  \DeclareUnicodeCharacter{0161}{\v{s}}%
    -  \DeclareUnicodeCharacter{0162}{\cedilla{T}}%
    -  \DeclareUnicodeCharacter{0163}{\cedilla{t}}%
    -  \DeclareUnicodeCharacter{0164}{\v{T}}%
    -  \DeclareUnicodeCharacter{0165}{\v{t}}%
    -  \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}%
    -  \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}%
    -  \DeclareUnicodeCharacter{0168}{\~U}%
    -  \DeclareUnicodeCharacter{0169}{\~u}%
    -  \DeclareUnicodeCharacter{016A}{\=U}%
    -  \DeclareUnicodeCharacter{016B}{\=u}%
    -  \DeclareUnicodeCharacter{016C}{\u{U}}%
    -  \DeclareUnicodeCharacter{016D}{\u{u}}%
    -  \DeclareUnicodeCharacter{016E}{\ringaccent{U}}%
    -  \DeclareUnicodeCharacter{016F}{\ringaccent{u}}%
    -  %
    -  \DeclareUnicodeCharacter{0170}{\H{U}}%
    -  \DeclareUnicodeCharacter{0171}{\H{u}}%
    -  \DeclareUnicodeCharacter{0172}{\ogonek{U}}%
    -  \DeclareUnicodeCharacter{0173}{\ogonek{u}}%
    -  \DeclareUnicodeCharacter{0174}{\^W}%
    -  \DeclareUnicodeCharacter{0175}{\^w}%
    -  \DeclareUnicodeCharacter{0176}{\^Y}%
    -  \DeclareUnicodeCharacter{0177}{\^y}%
    -  \DeclareUnicodeCharacter{0178}{\"Y}%
    -  \DeclareUnicodeCharacter{0179}{\'Z}%
    -  \DeclareUnicodeCharacter{017A}{\'z}%
    -  \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}%
    -  \DeclareUnicodeCharacter{017C}{\dotaccent{z}}%
    -  \DeclareUnicodeCharacter{017D}{\v{Z}}%
    -  \DeclareUnicodeCharacter{017E}{\v{z}}%
    -  \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}%
    -  %
    -  \DeclareUnicodeCharacter{01C4}{D\v{Z}}%
    -  \DeclareUnicodeCharacter{01C5}{D\v{z}}%
    -  \DeclareUnicodeCharacter{01C6}{d\v{z}}%
    -  \DeclareUnicodeCharacter{01C7}{LJ}%
    -  \DeclareUnicodeCharacter{01C8}{Lj}%
    -  \DeclareUnicodeCharacter{01C9}{lj}%
    -  \DeclareUnicodeCharacter{01CA}{NJ}%
    -  \DeclareUnicodeCharacter{01CB}{Nj}%
    -  \DeclareUnicodeCharacter{01CC}{nj}%
    -  \DeclareUnicodeCharacter{01CD}{\v{A}}%
    -  \DeclareUnicodeCharacter{01CE}{\v{a}}%
    -  \DeclareUnicodeCharacter{01CF}{\v{I}}%
    -  %
    -  \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}%
    -  \DeclareUnicodeCharacter{01D1}{\v{O}}%
    -  \DeclareUnicodeCharacter{01D2}{\v{o}}%
    -  \DeclareUnicodeCharacter{01D3}{\v{U}}%
    -  \DeclareUnicodeCharacter{01D4}{\v{u}}%
    -  %
    -  \DeclareUnicodeCharacter{01E2}{\={\AE}}%
    -  \DeclareUnicodeCharacter{01E3}{\={\ae}}%
    -  \DeclareUnicodeCharacter{01E6}{\v{G}}%
    -  \DeclareUnicodeCharacter{01E7}{\v{g}}%
    -  \DeclareUnicodeCharacter{01E8}{\v{K}}%
    -  \DeclareUnicodeCharacter{01E9}{\v{k}}%
    -  %
    -  \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}%
    -  \DeclareUnicodeCharacter{01F1}{DZ}%
    -  \DeclareUnicodeCharacter{01F2}{Dz}%
    -  \DeclareUnicodeCharacter{01F3}{dz}%
    -  \DeclareUnicodeCharacter{01F4}{\'G}%
    -  \DeclareUnicodeCharacter{01F5}{\'g}%
    -  \DeclareUnicodeCharacter{01F8}{\`N}%
    -  \DeclareUnicodeCharacter{01F9}{\`n}%
    -  \DeclareUnicodeCharacter{01FC}{\'{\AE}}%
    -  \DeclareUnicodeCharacter{01FD}{\'{\ae}}%
    -  \DeclareUnicodeCharacter{01FE}{\'{\O}}%
    -  \DeclareUnicodeCharacter{01FF}{\'{\o}}%
    -  %
    -  \DeclareUnicodeCharacter{021E}{\v{H}}%
    -  \DeclareUnicodeCharacter{021F}{\v{h}}%
    -  %
    -  \DeclareUnicodeCharacter{0226}{\dotaccent{A}}%
    -  \DeclareUnicodeCharacter{0227}{\dotaccent{a}}%
    -  \DeclareUnicodeCharacter{0228}{\cedilla{E}}%
    -  \DeclareUnicodeCharacter{0229}{\cedilla{e}}%
    -  \DeclareUnicodeCharacter{022E}{\dotaccent{O}}%
    -  \DeclareUnicodeCharacter{022F}{\dotaccent{o}}%
    -  %
    -  \DeclareUnicodeCharacter{0232}{\=Y}%
    -  \DeclareUnicodeCharacter{0233}{\=y}%
    -  \DeclareUnicodeCharacter{0237}{\dotless{j}}%
    -  %
    -  \DeclareUnicodeCharacter{02DB}{\ogonek{ }}%
    -  %
    -  % Greek letters upper case
    -  \DeclareUnicodeCharacter{0391}{{\it A}}%
    -  \DeclareUnicodeCharacter{0392}{{\it B}}%
    -  \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}%
    -  \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}%
    -  \DeclareUnicodeCharacter{0395}{{\it E}}%
    -  \DeclareUnicodeCharacter{0396}{{\it Z}}%
    -  \DeclareUnicodeCharacter{0397}{{\it H}}%
    -  \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}%
    -  \DeclareUnicodeCharacter{0399}{{\it I}}%
    -  \DeclareUnicodeCharacter{039A}{{\it K}}%
    -  \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}%
    -  \DeclareUnicodeCharacter{039C}{{\it M}}%
    -  \DeclareUnicodeCharacter{039D}{{\it N}}%
    -  \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}%
    -  \DeclareUnicodeCharacter{039F}{{\it O}}%
    -  \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}%
    -  \DeclareUnicodeCharacter{03A1}{{\it P}}%
    -  %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma
    -  \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}%
    -  \DeclareUnicodeCharacter{03A4}{{\it T}}%
    -  \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}%
    -  \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}%
    -  \DeclareUnicodeCharacter{03A7}{{\it X}}%
    -  \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}%
    -  \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}%
    -  %
    -  % Vowels with accents
    -  \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}%
    -  \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}%
    -  \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}%
    -  \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}%
    -  \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}%
    -  \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}%
    -  %
    -  % Standalone accent
    -  \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}%
    -  %
    -  % Greek letters lower case
    -  \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}%
    -  \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}%
    -  \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}%
    -  \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}%
    -  \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}%
    -  \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}%
    -  \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}%
    -  \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}%
    -  \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}%
    -  \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}%
    -  \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}%
    -  \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}%
    -  \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}%
    -  \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}%
    -  \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron
    -  \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}%
    -  \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}%
    -  \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}%
    -  \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}%
    -  \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}%
    -  \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}%
    -  \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}%
    -  \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}%
    -  \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}%
    -  \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}%
    -  %
    -  % More Greek vowels with accents
    -  \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}%
    -  \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}%
    -  \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}%
    -  \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}%
    -  \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}%
    -  %
    -  % Variant Greek letters
    -  \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}%
    -  \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}%
    -  \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}%
    -  %
    -  \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}%
    -  \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}%
    -  \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}%
    -  \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}%
    -  \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}%
    -  \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}%
    -  \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}%
    -  \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}%
    -  \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}%
    -  \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}%
    -  \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}%
    -  \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}%
    -  %
    -  \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}%
    -  \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}%
    -  %
    -  \DeclareUnicodeCharacter{1E20}{\=G}%
    -  \DeclareUnicodeCharacter{1E21}{\=g}%
    -  \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}%
    -  \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}%
    -  \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}%
    -  \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}%
    -  \DeclareUnicodeCharacter{1E26}{\"H}%
    -  \DeclareUnicodeCharacter{1E27}{\"h}%
    -  %
    -  \DeclareUnicodeCharacter{1E30}{\'K}%
    -  \DeclareUnicodeCharacter{1E31}{\'k}%
    -  \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}%
    -  \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}%
    -  \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}%
    -  \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}%
    -  \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}%
    -  \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}%
    -  \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}%
    -  \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}%
    -  \DeclareUnicodeCharacter{1E3E}{\'M}%
    -  \DeclareUnicodeCharacter{1E3F}{\'m}%
    -  %
    -  \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}%
    -  \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}%
    -  \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}%
    -  \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}%
    -  \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}%
    -  \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}%
    -  \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}%
    -  \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}%
    -  \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}%
    -  \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}%
    -  %
    -  \DeclareUnicodeCharacter{1E54}{\'P}%
    -  \DeclareUnicodeCharacter{1E55}{\'p}%
    -  \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}%
    -  \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}%
    -  \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}%
    -  \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}%
    -  \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}%
    -  \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}%
    -  \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}%
    -  \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}%
    -  %
    -  \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}%
    -  \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}%
    -  \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}%
    -  \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}%
    -  \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}%
    -  \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}%
    -  \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}%
    -  \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}%
    -  \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}%
    -  \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}%
    -  %
    -  \DeclareUnicodeCharacter{1E7C}{\~V}%
    -  \DeclareUnicodeCharacter{1E7D}{\~v}%
    -  \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}%
    -  \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}%
    -  %
    -  \DeclareUnicodeCharacter{1E80}{\`W}%
    -  \DeclareUnicodeCharacter{1E81}{\`w}%
    -  \DeclareUnicodeCharacter{1E82}{\'W}%
    -  \DeclareUnicodeCharacter{1E83}{\'w}%
    -  \DeclareUnicodeCharacter{1E84}{\"W}%
    -  \DeclareUnicodeCharacter{1E85}{\"w}%
    -  \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}%
    -  \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}%
    -  \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}%
    -  \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}%
    -  \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}%
    -  \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}%
    -  \DeclareUnicodeCharacter{1E8C}{\"X}%
    -  \DeclareUnicodeCharacter{1E8D}{\"x}%
    -  \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}%
    -  \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}%
    -  %
    -  \DeclareUnicodeCharacter{1E90}{\^Z}%
    -  \DeclareUnicodeCharacter{1E91}{\^z}%
    -  \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}%
    -  \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}%
    -  \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}%
    -  \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}%
    -  \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}%
    -  \DeclareUnicodeCharacter{1E97}{\"t}%
    -  \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}%
    -  \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}%
    -  %
    -  \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}%
    -  \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}%
    -  %
    -  \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}%
    -  \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}%
    -  \DeclareUnicodeCharacter{1EBC}{\~E}%
    -  \DeclareUnicodeCharacter{1EBD}{\~e}%
    -  %
    -  \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}%
    -  \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}%
    -  \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}%
    -  \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}%
    -  %
    -  \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}%
    -  \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}%
    -  %
    -  \DeclareUnicodeCharacter{1EF2}{\`Y}%
    -  \DeclareUnicodeCharacter{1EF3}{\`y}%
    -  \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}%
    -  %
    -  \DeclareUnicodeCharacter{1EF8}{\~Y}%
    -  \DeclareUnicodeCharacter{1EF9}{\~y}%
    -  %
    -  % Punctuation
    -  \DeclareUnicodeCharacter{2013}{--}%
    -  \DeclareUnicodeCharacter{2014}{---}%
    -  \DeclareUnicodeCharacter{2018}{\quoteleft{}}%
    -  \DeclareUnicodeCharacter{2019}{\quoteright{}}%
    -  \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}%
    -  \DeclareUnicodeCharacter{201C}{\quotedblleft{}}%
    -  \DeclareUnicodeCharacter{201D}{\quotedblright{}}%
    -  \DeclareUnicodeCharacter{201E}{\quotedblbase{}}%
    -  \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}%
    -  \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}%
    -  \DeclareUnicodeCharacter{2022}{\bullet{}}%
    -  \DeclareUnicodeCharacter{202F}{\thinspace}%
    -  \DeclareUnicodeCharacter{2026}{\dots{}}%
    -  \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}%
    -  \DeclareUnicodeCharacter{203A}{\guilsinglright{}}%
    -  %
    -  \DeclareUnicodeCharacter{20AC}{\euro{}}%
    -  %
    -  \DeclareUnicodeCharacter{2192}{\expansion{}}%
    -  \DeclareUnicodeCharacter{21D2}{\result{}}%
    -  %
    -  % Mathematical symbols
    -  \DeclareUnicodeCharacter{2200}{\ensuremath\forall}%
    -  \DeclareUnicodeCharacter{2203}{\ensuremath\exists}%
    -  \DeclareUnicodeCharacter{2208}{\ensuremath\in}%
    -  \DeclareUnicodeCharacter{2212}{\minus{}}%
    -  \DeclareUnicodeCharacter{2217}{\ast}%
    -  \DeclareUnicodeCharacter{221E}{\ensuremath\infty}%
    -  \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}%
    -  \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}%
    -  \DeclareUnicodeCharacter{2229}{\ensuremath\cap}%
    -  \DeclareUnicodeCharacter{2261}{\equiv{}}%
    -  \DeclareUnicodeCharacter{2264}{\ensuremath\leq}%
    -  \DeclareUnicodeCharacter{2265}{\ensuremath\geq}%
    -  \DeclareUnicodeCharacter{2282}{\ensuremath\subset}%
    -  \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}%
    -  %
    -  \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}%
    -  \DeclareUnicodeCharacter{2032}{\ensuremath\prime}%
    -  \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}%
    -  \DeclareUnicodeCharacter{2111}{\ensuremath\Im}%
    -  \DeclareUnicodeCharacter{2113}{\ensuremath\ell}%
    -  \DeclareUnicodeCharacter{2118}{\ensuremath\wp}%
    -  \DeclareUnicodeCharacter{211C}{\ensuremath\Re}%
    -  \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}%
    -  \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}%
    -  \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}%
    -  \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}%
    -  \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}%
    -  \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}%
    -  \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}%
    -  \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}%
    -  \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}%
    -  \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}%
    -  \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}%
    -  \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}%
    -  \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}%
    -  \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}%
    -  \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}%
    -  \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}%
    -  \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}%
    -  \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}%
    -  \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}%
    -  \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}%
    -  \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}%
    -  \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}%
    -  \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}%
    -  \DeclareUnicodeCharacter{2202}{\ensuremath\partial}%
    -  \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}%
    -  \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}%
    -  \DeclareUnicodeCharacter{2209}{\ensuremath\notin}%
    -  \DeclareUnicodeCharacter{220B}{\ensuremath\owns}%
    -  \DeclareUnicodeCharacter{220F}{\ensuremath\prod}%
    -  \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}%
    -  \DeclareUnicodeCharacter{2211}{\ensuremath\sum}%
    -  \DeclareUnicodeCharacter{2213}{\ensuremath\mp}%
    -  \DeclareUnicodeCharacter{2218}{\ensuremath\circ}%
    -  \DeclareUnicodeCharacter{221A}{\ensuremath\surd}%
    -  \DeclareUnicodeCharacter{221D}{\ensuremath\propto}%
    -  \DeclareUnicodeCharacter{2220}{\ensuremath\angle}%
    -  \DeclareUnicodeCharacter{2223}{\ensuremath\mid}%
    -  \DeclareUnicodeCharacter{2228}{\ensuremath\vee}%
    -  \DeclareUnicodeCharacter{222A}{\ensuremath\cup}%
    -  \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}%
    -  \DeclareUnicodeCharacter{222E}{\ensuremath\oint}%
    -  \DeclareUnicodeCharacter{223C}{\ensuremath\sim}%
    -  \DeclareUnicodeCharacter{2240}{\ensuremath\wr}%
    -  \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}%
    -  \DeclareUnicodeCharacter{2245}{\ensuremath\cong}%
    -  \DeclareUnicodeCharacter{2248}{\ensuremath\approx}%
    -  \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}%
    -  \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}%
    -  \DeclareUnicodeCharacter{2260}{\ensuremath\neq}%
    -  \DeclareUnicodeCharacter{226A}{\ensuremath\ll}%
    -  \DeclareUnicodeCharacter{226B}{\ensuremath\gg}%
    -  \DeclareUnicodeCharacter{227A}{\ensuremath\prec}%
    -  \DeclareUnicodeCharacter{227B}{\ensuremath\succ}%
    -  \DeclareUnicodeCharacter{2283}{\ensuremath\supset}%
    -  \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}%
    -  \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}%
    -  \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}%
    -  \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}%
    -  \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}%
    -  \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}%
    -  \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}%
    -  \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}%
    -  \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}%
    -  \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}%
    -  \DeclareUnicodeCharacter{2299}{\ensuremath\odot}%
    -  \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}%
    -  \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}%
    -  \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}%
    -  \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}%
    -  \DeclareUnicodeCharacter{22A8}{\ensuremath\models}%
    -  \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}%
    -  \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}%
    -  \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}%
    -  \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}%
    -  \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}%
    -  \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}%
    -  \DeclareUnicodeCharacter{22C6}{\ensuremath\star}%
    -  \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}%
    -  \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}%
    -  \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}%
    -  \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}%
    -  \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}%
    -  \DeclareUnicodeCharacter{2322}{\ensuremath\frown}%
    -  \DeclareUnicodeCharacter{2323}{\ensuremath\smile}%
    -  %
    -  \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}%
    -  \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}%
    -  \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}%
    -  \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}%
    -  \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}%
    -  \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}%
    -  \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}%
    -  \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}%
    -  \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}%
    -  \DeclareUnicodeCharacter{266D}{\ensuremath\flat}%
    -  \DeclareUnicodeCharacter{266E}{\ensuremath\natural}%
    -  \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}%
    -  \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}%
    -  \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}%
    -  \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}%
    -  \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}%
    -  \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}%
    -  \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}%
    -  \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}%
    -  \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}%
    -  \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}%
    -  \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}%
    -  \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}%
    -  \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}%
    -  \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}%
    -  \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}%
    -  \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}%
    -  \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}%
    -  \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}%
    -  %
    -  \global\mathchardef\checkmark="1370% actually the square root sign
    -  \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}%
    -}% end of \unicodechardefs
    -
    -% UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command)
    -% It makes the setting that replace UTF-8 byte sequence.
    -\def\utfeightchardefs{%
    -  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii
    -  \unicodechardefs
    -}
    -
    -% Whether the active definitions of non-ASCII characters expand to
    -% non-active tokens with the same character code.  This is used to
    -% write characters literally, instead of using active definitions for
    -% printing the correct glyphs.
    -\newif\ifpassthroughchars
    -\passthroughcharsfalse
    -
    -% For native Unicode handling (XeTeX and LuaTeX),
    -% provide a definition macro to replace/pass-through a Unicode character
    -%
    -\def\DeclareUnicodeCharacterNative#1#2{%
    -  \catcode"#1=\active
    -  \def\dodeclareunicodecharacternative##1##2##3{%
    -    \begingroup
    -      \uccode`\~="##2\relax
    -      \uppercase{\gdef~}{%
    -        \ifpassthroughchars
    -          ##1%
    -        \else
    -          ##3%
    -        \fi
    -      }
    -    \endgroup
    -  }
    -  \begingroup
    -    \uccode`\.="#1\relax
    -    \uppercase{\def\UTFNativeTmp{.}}%
    -    \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}%
    -  \endgroup
    -}
    -
    -% Native Unicode handling (XeTeX and LuaTeX) character replacing definition.
    -% It activates the setting that replaces Unicode characters.
    -\def\nativeunicodechardefs{%
    -  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative
    -  \unicodechardefs
    -}
    -
    -% For native Unicode handling (XeTeX and LuaTeX),
    -% make the character token expand
    -% to the sequences given in \unicodechardefs for printing.
    -\def\DeclareUnicodeCharacterNativeAtU#1#2{%
    -  \def\UTFAtUTmp{#2}
    -  \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp
    -}
    -
    -% @U command definitions for native Unicode handling (XeTeX and LuaTeX).
    -\def\nativeunicodechardefsatu{%
    -  \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU
    -  \unicodechardefs
    -}
    -
    -% US-ASCII character definitions.
    -\def\asciichardefs{% nothing need be done
    -   \relax
    -}
    -
    -% Define all Unicode characters we know about.  This makes UTF-8 the default
    -% input encoding and allows @U to work.
    -\iftxinativeunicodecapable
    -  \nativeunicodechardefsatu
    -\else
    -  \utfeightchardefs
    -\fi
    -
    -\message{formatting,}
    -
    -\newdimen\defaultparindent \defaultparindent = 15pt
    -
    -\chapheadingskip = 15pt plus 4pt minus 2pt
    -\secheadingskip = 12pt plus 3pt minus 2pt
    -\subsecheadingskip = 9pt plus 2pt minus 2pt
    -
    -% Prevent underfull vbox error messages.
    -\vbadness = 10000
    -
    -% Don't be very finicky about underfull hboxes, either.
    -\hbadness = 6666
    -
    -% Following George Bush, get rid of widows and orphans.
    -\widowpenalty=10000
    -\clubpenalty=10000
    -
    -% Use TeX 3.0's \emergencystretch to help line breaking, but if we're
    -% using an old version of TeX, don't do anything.  We want the amount of
    -% stretch added to depend on the line length, hence the dependence on
    -% \hsize.  We call this whenever the paper size is set.
    -%
    -\def\setemergencystretch{%
    -  \ifx\emergencystretch\thisisundefined
    -    % Allow us to assign to \emergencystretch anyway.
    -    \def\emergencystretch{\dimen0}%
    -  \else
    -    \emergencystretch = .15\hsize
    -  \fi
    -}
    -
    -% Parameters in order: 1) textheight; 2) textwidth;
    -% 3) voffset; 4) hoffset; 5) binding offset; 6) topskip;
    -% 7) physical page height; 8) physical page width.
    -%
    -% We also call \setleading{\textleading}, so the caller should define
    -% \textleading.  The caller should also set \parskip.
    -%
    -\def\internalpagesizes#1#2#3#4#5#6#7#8{%
    -  \voffset = #3\relax
    -  \topskip = #6\relax
    -  \splittopskip = \topskip
    -  %
    -  \vsize = #1\relax
    -  \advance\vsize by \topskip
    -  \outervsize = \vsize
    -  \advance\outervsize by 2\topandbottommargin
    -  \txipageheight = \vsize
    -  %
    -  \hsize = #2\relax
    -  \outerhsize = \hsize
    -  \advance\outerhsize by 0.5in
    -  \txipagewidth = \hsize
    -  %
    -  \normaloffset = #4\relax
    -  \bindingoffset = #5\relax
    -  %
    -  \ifpdf
    -    \pdfpageheight #7\relax
    -    \pdfpagewidth #8\relax
    -    % if we don't reset these, they will remain at "1 true in" of
    -    % whatever layout pdftex was dumped with.
    -    \pdfhorigin = 1 true in
    -    \pdfvorigin = 1 true in
    -  \else
    -    \ifx\XeTeXrevision\thisisundefined
    -      \special{papersize=#8,#7}%
    -    \else
    -      \pdfpageheight #7\relax
    -      \pdfpagewidth #8\relax
    -      % XeTeX does not have \pdfhorigin and \pdfvorigin.
    -    \fi
    -  \fi
    -  %
    -  \setleading{\textleading}
    -  %
    -  \parindent = \defaultparindent
    -  \setemergencystretch
    -}
    -
    -% @letterpaper (the default).
    -\def\letterpaper{{\globaldefs = 1
    -  \parskip = 3pt plus 2pt minus 1pt
    -  \textleading = 13.2pt
    -  %
    -  % If page is nothing but text, make it come out even.
    -  \internalpagesizes{607.2pt}{6in}% that's 46 lines
    -                    {\voffset}{.25in}%
    -                    {\bindingoffset}{36pt}%
    -                    {11in}{8.5in}%
    -}}
    -
    -% Use @smallbook to reset parameters for 7x9.25 trim size.
    -\def\smallbook{{\globaldefs = 1
    -  \parskip = 2pt plus 1pt
    -  \textleading = 12pt
    -  %
    -  \internalpagesizes{7.5in}{5in}%
    -                    {-.2in}{0in}%
    -                    {\bindingoffset}{16pt}%
    -                    {9.25in}{7in}%
    -  %
    -  \lispnarrowing = 0.3in
    -  \tolerance = 700
    -  \contentsrightmargin = 0pt
    -  \defbodyindent = .5cm
    -}}
    -
    -% Use @smallerbook to reset parameters for 6x9 trim size.
    -% (Just testing, parameters still in flux.)
    -\def\smallerbook{{\globaldefs = 1
    -  \parskip = 1.5pt plus 1pt
    -  \textleading = 12pt
    -  %
    -  \internalpagesizes{7.4in}{4.8in}%
    -                    {-.2in}{-.4in}%
    -                    {0pt}{14pt}%
    -                    {9in}{6in}%
    -  %
    -  \lispnarrowing = 0.25in
    -  \tolerance = 700
    -  \contentsrightmargin = 0pt
    -  \defbodyindent = .4cm
    -}}
    -
    -% Use @afourpaper to print on European A4 paper.
    -\def\afourpaper{{\globaldefs = 1
    -  \parskip = 3pt plus 2pt minus 1pt
    -  \textleading = 13.2pt
    -  %
    -  % Double-side printing via postscript on Laserjet 4050
    -  % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm.
    -  % To change the settings for a different printer or situation, adjust
    -  % \normaloffset until the front-side and back-side texts align.  Then
    -  % do the same for \bindingoffset.  You can set these for testing in
    -  % your texinfo source file like this:
    -  % @tex
    -  % \global\normaloffset = -6mm
    -  % \global\bindingoffset = 10mm
    -  % @end tex
    -  \internalpagesizes{673.2pt}{160mm}% that's 51 lines
    -                    {\voffset}{\hoffset}%
    -                    {\bindingoffset}{44pt}%
    -                    {297mm}{210mm}%
    -  %
    -  \tolerance = 700
    -  \contentsrightmargin = 0pt
    -  \defbodyindent = 5mm
    -}}
    -
    -% Use @afivepaper to print on European A5 paper.
    -% From romildo@urano.iceb.ufop.br, 2 July 2000.
    -% He also recommends making @example and @lisp be small.
    -\def\afivepaper{{\globaldefs = 1
    -  \parskip = 2pt plus 1pt minus 0.1pt
    -  \textleading = 12.5pt
    -  %
    -  \internalpagesizes{160mm}{120mm}%
    -                    {\voffset}{\hoffset}%
    -                    {\bindingoffset}{8pt}%
    -                    {210mm}{148mm}%
    -  %
    -  \lispnarrowing = 0.2in
    -  \tolerance = 800
    -  \contentsrightmargin = 0pt
    -  \defbodyindent = 2mm
    -  \tableindent = 12mm
    -}}
    -
    -% A specific text layout, 24x15cm overall, intended for A4 paper.
    -\def\afourlatex{{\globaldefs = 1
    -  \afourpaper
    -  \internalpagesizes{237mm}{150mm}%
    -                    {\voffset}{4.6mm}%
    -                    {\bindingoffset}{7mm}%
    -                    {297mm}{210mm}%
    -  %
    -  % Must explicitly reset to 0 because we call \afourpaper.
    -  \globaldefs = 0
    -}}
    -
    -% Use @afourwide to print on A4 paper in landscape format.
    -\def\afourwide{{\globaldefs = 1
    -  \afourpaper
    -  \internalpagesizes{241mm}{165mm}%
    -                    {\voffset}{-2.95mm}%
    -                    {\bindingoffset}{7mm}%
    -                    {297mm}{210mm}%
    -  \globaldefs = 0
    -}}
    -
    -% @pagesizes TEXTHEIGHT[,TEXTWIDTH]
    -% Perhaps we should allow setting the margins, \topskip, \parskip,
    -% and/or leading, also. Or perhaps we should compute them somehow.
    -%
    -\parseargdef\pagesizes{\pagesizesyyy #1,,\finish}
    -\def\pagesizesyyy#1,#2,#3\finish{{%
    -  \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi
    -  \globaldefs = 1
    -  %
    -  \parskip = 3pt plus 2pt minus 1pt
    -  \setleading{\textleading}%
    -  %
    -  \dimen0 = #1\relax
    -  \advance\dimen0 by \voffset
    -  \advance\dimen0 by 1in % reference point for DVI is 1 inch from top of page
    -  %
    -  \dimen2 = \hsize
    -  \advance\dimen2 by \normaloffset
    -  \advance\dimen2 by 1in % reference point is 1 inch from left edge of page
    -  %
    -  \internalpagesizes{#1}{\hsize}%
    -                    {\voffset}{\normaloffset}%
    -                    {\bindingoffset}{44pt}%
    -                    {\dimen0}{\dimen2}%
    -}}
    -
    -% Set default to letter.
    -%
    -\letterpaper
    -
    -% Default value of \hfuzz, for suppressing warnings about overfull hboxes.
    -\hfuzz = 1pt
    -
    -
    -\message{and turning on texinfo input format.}
    -
    -\def^^L{\par} % remove \outer, so ^L can appear in an @comment
    -
    -% DEL is a comment character, in case @c does not suffice.
    -\catcode`\^^? = 14
    -
    -% Define macros to output various characters with catcode for normal text.
    -\catcode`\"=\other \def\normaldoublequote{"}
    -\catcode`\$=\other \def\normaldollar{$}%$ font-lock fix
    -\catcode`\+=\other \def\normalplus{+}
    -\catcode`\<=\other \def\normalless{<}
    -\catcode`\>=\other \def\normalgreater{>}
    -\catcode`\^=\other \def\normalcaret{^}
    -\catcode`\_=\other \def\normalunderscore{_}
    -\catcode`\|=\other \def\normalverticalbar{|}
    -\catcode`\~=\other \def\normaltilde{~}
    -
    -% This macro is used to make a character print one way in \tt
    -% (where it can probably be output as-is), and another way in other fonts,
    -% where something hairier probably needs to be done.
    -%
    -% #1 is what to print if we are indeed using \tt; #2 is what to print
    -% otherwise.  Since all the Computer Modern typewriter fonts have zero
    -% interword stretch (and shrink), and it is reasonable to expect all
    -% typewriter fonts to have this, we can check that font parameter.
    -%
    -\def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi}
    -
    -% Same as above, but check for italic font.  Actually this also catches
    -% non-italic slanted fonts since it is impossible to distinguish them from
    -% italic fonts.  But since this is only used by $ and it uses \sl anyway
    -% this is not a problem.
    -\def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi}
    -
    -% Set catcodes for Texinfo file
    -
    -% Active characters for printing the wanted glyph.
    -% Most of these we simply print from the \tt font, but for some, we can
    -% use math or other variants that look better in normal text.
    -%
    -\catcode`\"=\active
    -\def\activedoublequote{{\tt\char34}}
    -\let"=\activedoublequote
    -\catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde
    -\chardef\hatchar=`\^
    -\catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat
    -
    -\catcode`\_=\active
    -\def_{\ifusingtt\normalunderscore\_}
    -\def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }
    -\let\realunder=_
    -
    -\catcode`\|=\active \def|{{\tt\char124}}
    -
    -\chardef \less=`\<
    -\catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless
    -\chardef \gtr=`\>
    -\catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr
    -\catcode`\+=\active \def+{{\tt \char 43}}
    -\catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix
    -\catcode`\-=\active \let-=\normaldash
    -
    -
    -% used for headline/footline in the output routine, in case the page
    -% breaks in the middle of an @tex block.
    -\def\texinfochars{%
    -  \let< = \activeless
    -  \let> = \activegtr
    -  \let~ = \activetilde
    -  \let^ = \activehat
    -  \markupsetuplqdefault \markupsetuprqdefault
    -  \let\b = \strong
    -  \let\i = \smartitalic
    -  % in principle, all other definitions in \tex have to be undone too.
    -}
    -
    -% Used sometimes to turn off (effectively) the active characters even after
    -% parsing them.
    -\def\turnoffactive{%
    -  \normalturnoffactive
    -  \otherbackslash
    -}
    -
    -\catcode`\@=0
    -
    -% \backslashcurfont outputs one backslash character in current font,
    -% as in \char`\\.
    -\global\chardef\backslashcurfont=`\\
    -
    -% \realbackslash is an actual character `\' with catcode other.
    -{\catcode`\\=\other @gdef@realbackslash{\}}
    -
    -% In Texinfo, backslash is an active character; it prints the backslash
    -% in fixed width font.
    -\catcode`\\=\active  % @ for escape char from now on.
    -
    -% Print a typewriter backslash.  For math mode, we can't simply use
    -% \backslashcurfont: the story here is that in math mode, the \char
    -% of \backslashcurfont ends up printing the roman \ from the math symbol
    -% font (because \char in math mode uses the \mathcode, and plain.tex
    -% sets \mathcode`\\="026E).  Hence we use an explicit \mathchar,
    -% which is the decimal equivalent of "715c (class 7, e.g., use \fam;
    -% ignored family value; char position "5C).  We can't use " for the
    -% usual hex value because it has already been made active.
    -
    -@def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}}
    -@let@backslashchar = @ttbackslash % @backslashchar{} is for user documents.
    -
    -% \otherbackslash defines an active \ to be a literal `\' character with
    -% catcode other.
    -@gdef@otherbackslash{@let\=@realbackslash}
    -
    -% Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of
    -% the literal character `\'.
    -%
    -{@catcode`- = @active
    - @gdef@normalturnoffactive{%
    -   @passthroughcharstrue
    -   @let-=@normaldash
    -   @let"=@normaldoublequote
    -   @let$=@normaldollar %$ font-lock fix
    -   @let+=@normalplus
    -   @let<=@normalless
    -   @let>=@normalgreater
    -   @let^=@normalcaret
    -   @let_=@normalunderscore
    -   @let|=@normalverticalbar
    -   @let~=@normaltilde
    -   @let\=@ttbackslash
    -   @markupsetuplqdefault
    -   @markupsetuprqdefault
    -   @unsepspaces
    - }
    -}
    -
    -% If a .fmt file is being used, characters that might appear in a file
    -% name cannot be active until we have parsed the command line.
    -% So turn them off again, and have @fixbackslash turn them back on.
    -@catcode`+=@other @catcode`@_=@other
    -
    -% \enablebackslashhack - allow file to begin `\input texinfo'
    -%
    -% If a .fmt file is being used, we don't want the `\input texinfo' to show up.
    -% That is what \eatinput is for; after that, the `\' should revert to printing
    -% a backslash.
    -% If the file did not have a `\input texinfo', then it is turned off after
    -% the first line; otherwise the first `\' in the file would cause an error.
    -% This is used on the very last line of this file, texinfo.tex.
    -% We also use @c to call @fixbackslash, in case ends of lines are hidden.
    -{
    -@catcode`@^=7
    -@catcode`@^^M=13@gdef@enablebackslashhack{%
    -  @global@let\ = @eatinput%
    -  @catcode`@^^M=13%
    -  @def@c{@fixbackslash@c}%
    -  % Definition for the newline at the end of this file.
    -  @def ^^M{@let^^M@secondlinenl}%
    -  % Definition for a newline in the main Texinfo file.
    -  @gdef @secondlinenl{@fixbackslash}%
    -  % In case the first line has a whole-line command on it
    -  @let@originalparsearg@parsearg
    -  @def@parsearg{@fixbackslash@originalparsearg}
    -}}
    -
    -{@catcode`@^=7 @catcode`@^^M=13%
    -@gdef@eatinput input texinfo#1^^M{@fixbackslash}}
    -
    -% Emergency active definition of newline, in case an active newline token
    -% appears by mistake.
    -{@catcode`@^=7 @catcode13=13%
    -@gdef@enableemergencynewline{%
    -  @gdef^^M{%
    -    @par%
    -    %@par%
    -}}}
    -
    -
    -@gdef@fixbackslash{%
    -  @ifx\@eatinput @let\ = @ttbackslash @fi
    -  @catcode13=5 % regular end of line
    -  @enableemergencynewline
    -  @let@c=@comment
    -  @let@parsearg@originalparsearg
    -  % Also turn back on active characters that might appear in the input
    -  % file name, in case not using a pre-dumped format.
    -  @catcode`+=@active
    -  @catcode`@_=@active
    -  %
    -  % If texinfo.cnf is present on the system, read it.
    -  % Useful for site-wide @afourpaper, etc.  This macro, @fixbackslash, gets
    -  % called at the beginning of every Texinfo file.  Not opening texinfo.cnf
    -  % directly in this file, texinfo.tex, makes it possible to make a format
    -  % file for Texinfo.
    -  %
    -  @openin 1 texinfo.cnf
    -  @ifeof 1 @else @input texinfo.cnf @fi
    -  @closein 1
    -}
    -
    -
    -% Say @foo, not \foo, in error messages.
    -@escapechar = `@@
    -
    -% These (along with & and #) are made active for url-breaking, so need
    -% active definitions as the normal characters.
    -@def@normaldot{.}
    -@def@normalquest{?}
    -@def@normalslash{/}
    -
    -% These look ok in all fonts, so just make them not special.
    -% @hashchar{} gets its own user-level command, because of #line.
    -@catcode`@& = @other @def@normalamp{&}
    -@catcode`@# = @other @def@normalhash{#}
    -@catcode`@% = @other @def@normalpercent{%}
    -
    -@let @hashchar = @normalhash
    -
    -@c Finally, make ` and ' active, so that txicodequoteundirected and
    -@c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}.  If we
    -@c don't make ` and ' active, @code will not get them as active chars.
    -@c Do this last of all since we use ` in the previous @catcode assignments.
    -@catcode`@'=@active
    -@catcode`@`=@active
    -@markupsetuplqdefault
    -@markupsetuprqdefault
    -
    -@c Local variables:
    -@c eval: (add-hook 'before-save-hook 'time-stamp)
    -@c page-delimiter: "^\\\\message\\|emacs-page"
    -@c time-stamp-start: "def\\\\texinfoversion{"
    -@c time-stamp-format: "%:y-%02m-%02d.%02H"
    -@c time-stamp-end: "}"
    -@c End:
    -
    -@c vim:sw=2:
    -
    -@enablebackslashhack
    -- 
    cgit v1.2.3
    
    
    From 47a269faae09db8e3144a0d68a969403c928d2ad Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:43:31 -0300
    Subject: fake-symlinks: Add Guix channel files
    
    ---
     bash/fake-symlinks.sh                    |  2 +-
     bash/templates/.guix-authorizations      |  4 ++
     bash/templates/.guix-channel             |  4 ++
     bash/templates/guix/channel/euandreh.key | 63 ++++++++++++++++++++++++++++++++
     4 files changed, 72 insertions(+), 1 deletion(-)
     create mode 100644 bash/templates/.guix-authorizations
     create mode 100644 bash/templates/.guix-channel
     create mode 100644 bash/templates/guix/channel/euandreh.key
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 6b3b88f..0d2412a 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -215,7 +215,7 @@ ln-base-autotools-guix-project() {
     
     ln-guile-files() {
       if [[ -n "${GUILE_PROJECTS[$PROJECT]}" ]]; then
    -    cp-all build-aux/guile.am build-aux/pre-inst-env.in m4/guile.m4
    +    cp-all build-aux/guile.am build-aux/with-guile-env.in m4/guile.m4 .guix-channel .guix-authorizations guix/channel/euandreh.key
       fi
     }
     
    diff --git a/bash/templates/.guix-authorizations b/bash/templates/.guix-authorizations
    new file mode 100644
    index 0000000..0221b5b
    --- /dev/null
    +++ b/bash/templates/.guix-authorizations
    @@ -0,0 +1,4 @@
    +(authorizations
    +  (version 0)
    +  (("5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060"
    +    (name "euandreh"))))
    diff --git a/bash/templates/.guix-channel b/bash/templates/.guix-channel
    new file mode 100644
    index 0000000..d4d0f36
    --- /dev/null
    +++ b/bash/templates/.guix-channel
    @@ -0,0 +1,4 @@
    +(channel
    +  (version 0)
    +  (directory "guix/channel")
    +  (keyring-reference "master"))
    diff --git a/bash/templates/guix/channel/euandreh.key b/bash/templates/guix/channel/euandreh.key
    new file mode 100644
    index 0000000..3046d6b
    --- /dev/null
    +++ b/bash/templates/guix/channel/euandreh.key
    @@ -0,0 +1,63 @@
    +-----BEGIN PGP PUBLIC KEY BLOCK-----
    +
    +mQINBFjVvh4BEADIlHUiO6IfkhcNm3J7ilXERgimvKuFNyLIUPZlDcESC1ORrv4y
    +9slMDA5uojXctuLRC7nNdynLP+eFFfVUQ+hUXcV24AzyOE0CYo5c4PQA5TLe2AUC
    +E9YqqfQF4XuNddY+UpcG47MuVDR+6SHkFkF29ATzpmShJj41lc7a9CdRib+62Wpe
    +h7WJOFj/YoxMCBBzic4tiFNgoYobu+lLxyA4T2kCmxEaiZzc6eXBDDgJ0STL4+S8
    +avpglaQ+mb5gHbH0yOtuwDG3sWyHKf7LSRVtzWvOqaGmRUmmDsSPjb5vQqvT8EMq
    +UfqFFZhScLalthF3PhG0SLXPvoCoRm2aLkN+O3sv057RqaN8E39223mmz6EMXmLk
    +H/U5qk2SUl3dx86dIQcB+2WUVu5zuFyfR1g6tD+DcqzxGc9XB7Gz/0TTDf3OimHb
    +rp1x5i/04198ocRZT3MzXx8H25tLMS/rHmE87YdgPhMTWheSUevyhoGNHfAOcDwX
    +P2oGzELXbLqHxtjENMEw2E996KrSmpcz7WOqIl3PHS1J6eRZoYQesXE+SZTeIiYb
    +wD0kkZGYhBZbtLC4VWIuU2T3AL/2hF6aUh1tj1B6vcV0i3HpIHNbvPAF/I0NUhhc
    +Gxwwi+ggG/MBHBbxkq7LvG5DfDbav0ZoZaov5dyhtX0CBWjVYATvjRfeAwARAQAB
    +tBlFdUFuZHJlaCA8ZXVAZXVhbmRyZS5vcmc+iQJWBBMBCgBAAhsDBwsJCAcDAgEG
    +FQgCCQoLBBYCAwECHgECF4AWIQRb2um4svbGvLsNbOWB+Q7DzTVgYAUCXxBk/wUJ
    +Cf0N4QAKCRCB+Q7DzTVgYKYFD/4080rAAYvmB/XlMgjxwwxVwAlJxm45iNN4/Ar3
    +A4H+kpoPIQFivQgkE51XK7vuKo0LacND8EmBtl6nJf4xqN3/xW0xM7LNhBEo9uLe
    +66/ABpSTBRDAydOpshtoAtjaEGGHF0wpvneGaYKqYdpRwlPgKr3N3yCXq2u7TGcX
    +Msdr1wtXVY6PoeC0ry5Li7dUQNUV5VJPRrJ4iHNWJohl1ZU39Hne0HiRYMXnl2lg
    +NdSX9gsyyZuuZ+xHgfIR6QQuqsZ1kOaKt0EosVWbqS9fBw8t3GOy1LFgwu4A+2JQ
    +gdV9+SsMmHHEHdTgVvoMtOv0Yg0NVBaAd0tqKMjfnVfk/6RqKjkgQ7/CmDLSNBsK
    +dq1P5oVjmfA1U2N//MNtyd0gyAGgsTazUOL7DuVi8CCh6NTIpNIyMNXSccIM0//8
    +fTcMJQr/Xpfcrlcp5d62GDTFqfMlb4ItQkMa4I3T33T9R5Dc5hoLFbVdytEuzxPn
    +OD2qVRl6hptnr1VfXXK1WD7KzuPI+gvGgf/iPCGMjLpwKWXBRD1K4AiPkS2zKoiQ
    +/bXCjM6Cj2wldwsJmTlwDuubkNDnfhueZORBdC9GwWeJ/ilD3ZRM6WoJS89blZc9
    +FfDFyHBDNP8fnHYJvC3fbFvOV7C8xjwv3oXmjc4dQzhpmdldI1qcBxU73PYqEQG8
    +ibfKA4kCOQQTAQgAIwUCWNW+HgIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheA
    +AAoJEIH5DsPNNWBgls4P/0LQ6cIGw2PbgmPWv0YFLG6hgGM0iJ7G8gwl6wAIVhs5
    +AzCz3hadN0sPUMgg3tMFrvC9h+IVfxTefPuBut+dyEsJKrH/Ufj/ZULP+XcBu5ae
    +fxns/G2St8u8xa3bVcHDgm+A3vvX4T7ID/aUVPHR6SzaPFIvSM24mJWu2hsV0HZF
    +1NnLzrhKIrhYL3FlNSljTlq4yJgE3AvBBfFWhGmWBkV8/JTC/CoLAFMa4xZJOras
    +azJTi042NAbs3GGabeVy2djbkiA2AaEom7gUNR+wyxmvq9IZzY1RAZjDrxQNYW1m
    +t94dQMmI2IaHlZQWKaB7g6LBBapMGfqLc87yJmkQDjhV9SHoYn0xhBYnt4prjh3V
    +bkY12/EhrvAoHm8tE9PegP73/i9Ut+Z3NpnUQlBP0iFEVuoXx+7k+iqqaJFPOr6M
    +ypjcyHFd84QFyfVGMEKmYINh9wznE7WchI1QZdoJbKaHJbH0dtE/oPqj6jQwIKA2
    +wu9XxAG1EwAkGrtetrraR4mm6IO3u78oSIKOcXY8QPMW9ybZ9/aWM24O+QK2aj28
    +RzWd/JtNBAbQuRJA+AxYdHKUNqXrmSIdZHOW62oArfKOnFfbeI2qvk7Vb+D6xRD6
    +hHfsNRaqsGmwat8UrCICoNl+a10JJLcpgbp/qDeNcKH7k2SKBjbfJ5xm/rJBQcYM
    +uQINBFjVvh4BEADzt2iKa1gSksHtTFkPQ5ULqUF2sHDClr3ykbLq/AxgSCON58eP
    +A9SKQy2O+qDpojHAN1UULJgHEn34afzMkBzjxcJXMRgaTV2M+1trjwx/VluD9OKX
    +wmnhmSdvCIP7Z0qdhU78maLq10UG1vVwej3kVlxsf4Eu2ZA+NeIr7Tj0DERqEDQo
    +DRtNPVEy3h1xoYruy/VjNDi1CI3yFkM6HW1CgRA50rI7GDtvOuitZy+9Lpqs0mWq
    +vdApWZxoQwslFcziNd+ZVaQjgO6LSnkDttRkAOblFiD710OQy3/Yo97i7bqsKrnZ
    +qQMRUk0n12VXY9I94c7ELfViVqGk123ELtTViiIz5BT5iQRkJj1GiizTgGY6cfsj
    +kwWwvabpmWYdyQ85sYoVuNAPz3yDaLdtStWRNHWi4+UHC03J2BiBgIrQbuXoNGuc
    +j0b1fsntdntaBoZgFygwW6kXUjHLeEfnrGX3C2X49zg0rBTvEzdZwr2K0xgc2z26
    +1EEf5ObmOGRt27K1fwrCxKHbKTscReHv78S4v3uN/9LvHfvIEaBoYHqMCcxy7Aii
    +dk+02dNDO/jZDnTAJH2NWhyB+PJvrlnK34zHhUMVH0i5nUjaCDL/n07Vd2sbE5qW
    +ivE2MWeayVKRGPci80tEGA1i42FJzGiA1uZrxXNImnsyxQyS8cr9iKoTIQARAQAB
    +iQIfBBgBCAAJBQJY1b4eAhsMAAoJEIH5DsPNNWBg+bYQALJyD1nyuz8+vl8rqj7K
    +Z9aRSW+XeG/wz6xrAqdY3OVvHwXYw33pgOmhNhfMUgP/Uy5OsxZdjIO7NzyKa2H9
    +JoVSsAs/eLQDOQCcwXruBND6zuxt99kZh6o/Xp4lII9vuLafKner+fWluFHhOy/w
    +E3Q3VwCbC9npbmzweEl9Q83R7IxbEhtFF5HV0wKVRzW/GX7iWADoHpkAAQ2sUnQp
    +HhE1wOrdPm0dD9BEbTRQHekUiIQ8cFoORyWbJBwbflY64ioaFjyM+Ji49pNMykie
    +LzQFW1UYyhkXJeTvv93ym4XyMi2mhsOzna7mG1bonKvbKj6qaXb7gFHUXHh/ARuu
    +6CNARzBh6BTp+7c1brthGjT/L8CxrAeW2oE5wVIRuk8mdKiFoK3BuXc1P+vsnp36
    +ioOQ0y+KPcp+PSbw6oDp7hTHztcW/3EoAgyHneWCmtYYi6RmVptTNpeeyHwqRP/O
    +elCN1cw9zopofVQhnxDEUgzVPrWWaE7UR6vrHbzlXvWMeGTYtmdmo/9xkYbQzZW7
    +y90QLUGyDwQ+KeCG29W3EhygGy3myVQbRaXywgzzO2YvovjATDa7wZQrXNoVE7J9
    +uLonNtRlyRlTAfFP6hCLDXwuE6WRHXhdu7aFKbq0LQGFv5hY4wPUp8vnUtGYT/wo
    +qqSkuSYhzNvmuKBIHPs6YD8d
    +=d7Et
    +-----END PGP PUBLIC KEY BLOCK-----
    -- 
    cgit v1.2.3
    
    
    From db86b64d2181be8500c5d4af7a38c42a49c49aa1 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:43:43 -0300
    Subject: fake-symlinks: Remove check-news option from configure.ac
    
    ---
     bash/templates/configure.ac | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/templates/configure.ac b/bash/templates/configure.ac
    index fee2c16..752c066 100644
    --- a/bash/templates/configure.ac
    +++ b/bash/templates/configure.ac
    @@ -7,7 +7,7 @@ AC_INIT([$PROJECT],
     AC_CONFIG_SRCDIR([FIXME])
     AC_CONFIG_AUX_DIR([build-aux])
     AC_CONFIG_MACRO_DIR([m4])
    -AM_INIT_AUTOMAKE([-Wall -Werror check-news parallel-tests subdir-objects])
    +AM_INIT_AUTOMAKE([-Wall -Werror parallel-tests subdir-objects])
     
     AC_CONFIG_FILES([Makefile])
     
    -- 
    cgit v1.2.3
    
    
    From c0d8e70126cbc212dd9752a5515bd05007078fbe Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:44:02 -0300
    Subject: fake-symlinks: Makefile.am: Add description to $(EXTRA_DIST) and use
     $(srcdir)
    
    ---
     bash/templates/Makefile.am | 17 ++++++++---------
     1 file changed, 8 insertions(+), 9 deletions(-)
    
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index f592a39..94e400b 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -8,22 +8,21 @@ EXTRA_DIST =                \
       guix/manifest.scm         \
       guix/pinned-channels.scm  \
       scripts/with-container.sh \
    +  description               \
       $(TESTS)
     
     info_TEXINFOS = doc/$PROJECT.texi
     
     check-local:
    -	if [ -f scripts/assert-shellcheck.sh ]; then \
    -    echo 'Running non-dist checks';            \
    -    bash scripts/assert-shellcheck.sh;         \
    -    bash scripts/assert-todos.sh;              \
    -  else                                         \
    -    echo 'Skipping non-dist checks.';          \
    +	if [ -f $(srcdir)/scripts/assert-shellcheck.sh ]; then \
    +    echo 'Running non-dist checks';                      \
    +    $(srcdir)/scripts/assert-shellcheck.sh;              \
    +    $(srcdir)/scripts/assert-todos.sh;                   \
       fi
     
     clean-local:
    -	rm -rf public/
    +	rm -rf $(srcdir)/public/
     
     public:
    -	bash scripts/generate-tasks-and-bugs.sh
    -	bash scripts/compile-readme.sh
    +	$(srcdir)/scripts/generate-tasks-and-bugs.sh
    +	$(srcdir)/scripts/compile-readme.sh
    -- 
    cgit v1.2.3
    
    
    From 7f67bfe0adc9811ff39263e7469ce3b3f12bf240 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:44:37 -0300
    Subject: fake-symlinks.sh: Add guile-clap
    
    ---
     bash/fake-symlinks.sh | 4 +++-
     1 file changed, 3 insertions(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 0d2412a..20b131f 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -306,6 +306,7 @@ declare -A ML_FOR_PROJECT=(
       [libedn]=mediator
       [eq]=mediator
       [songbooks]=songbooks
    +  [guile-clap]=songbooks
     )
     
     declare -A PREFIX_FOR_PROJECT=(
    @@ -315,6 +316,7 @@ declare -A PREFIX_FOR_PROJECT=(
     declare -A GUILE_PROJECTS=(
       [guile-quickcheck]=1
       [guile-pds]=1
    +  [guile-clap]=1
       [songbooks]=1
     )
     
    @@ -326,7 +328,7 @@ ln-all() {
       done
     }
     
    -ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds cement songbooks
    +ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds guile-clap cement songbooks
     ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
     ln-all ln-scribble-autotools-guix-project parsecc
     ln-all ln-antora-autotools-guix-project   byopds
    -- 
    cgit v1.2.3
    
    
    From b954150ee5bcc227d5558905b85fd79400f78f9f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:46:19 -0300
    Subject: aliases.sh: Remove guix alias
    
    ---
     bash/aliases.sh | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/bash/aliases.sh b/bash/aliases.sh
    index 2b62dda..c219ca4 100644
    --- a/bash/aliases.sh
    +++ b/bash/aliases.sh
    @@ -6,7 +6,6 @@ unalias -a
     alias sbcl='rlwrap sbcl'
     alias sqlite='rlwrap sqlite3'
     alias guile='rlwrap guile'
    -alias guix='rlwrap guix'
     
     alias l="ls -lahp --color"
     alias copy="tr -d '\\n' | xclip -sel clip"
    -- 
    cgit v1.2.3
    
    
    From 783495921f23afe460af8afc3cecc3a8257eef68 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 04:46:29 -0300
    Subject: aliases.sh: Add cop alias
    
    ---
     bash/aliases.sh | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/bash/aliases.sh b/bash/aliases.sh
    index c219ca4..24f673d 100644
    --- a/bash/aliases.sh
    +++ b/bash/aliases.sh
    @@ -9,6 +9,7 @@ alias guile='rlwrap guile'
     
     alias l="ls -lahp --color"
     alias copy="tr -d '\\n' | xclip -sel clip"
    +alias cop="xclip -sel clip"
     alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn"
     # Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329
     alias watch="watch --color "
    -- 
    cgit v1.2.3
    
    
    From 9faea0f628733437e706f2cc7d263507ccc535cb Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 05:31:59 -0300
    Subject: fake-symlinks: pre-push: Use POSIX sh over Bash
    
    ---
     bash/templates/..git/hooks/pre-push | 6 ++----
     1 file changed, 2 insertions(+), 4 deletions(-)
    
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    index 23901c4..265405f 100755
    --- a/bash/templates/..git/hooks/pre-push
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -1,8 +1,6 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -set -x
    +#!/bin/sh -eux
     
    -if [[ -f description ]]; then
    +if [ -f description ]; then
       scp description         git.euandreh.xyz:/data/git/$PROJECT.git/description
     else
       git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/$PROJECT.git/description'
    -- 
    cgit v1.2.3
    
    
    From b357751d0ef19c73b1a155006968acaea91e56bd Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 07:02:48 -0300
    Subject: fake-symlinks: git-notes-release.am: Move logic into
     git-notes-release.sh
    
    ---
     bash/templates/build-aux/git-notes-release.am | 31 +++--------
     bash/templates/build-aux/git-notes-release.sh | 76 +++++++++++++++++++++++++++
     2 files changed, 82 insertions(+), 25 deletions(-)
     create mode 100644 bash/templates/build-aux/git-notes-release.sh
    
    diff --git a/bash/templates/build-aux/git-notes-release.am b/bash/templates/build-aux/git-notes-release.am
    index 67a4de5..0d91e88 100644
    --- a/bash/templates/build-aux/git-notes-release.am
    +++ b/bash/templates/build-aux/git-notes-release.am
    @@ -1,26 +1,7 @@
    -upgrade-news:
    -	sed -i "s/^\* Unreleased$$/* $(VERSION) - $$(date -I)/" NEWS
    -	printf '* Unreleased\n** Added\n** Changed\n** Deprecated\n** Removed\n** Fixed\n** Security\n' | cat - NEWS | sponge NEWS
    -	vi NEWS
    -	git diff NEWS
    -	read -p "Is the above NEWS diff acceptable? Press CTRL+c to cancel."
    -	git add NEWS
    -	git commit -m 'Update NEWS: release version $(VERSION).'
    +.PHONY: release
    +release: check distcheck dist
    +	$(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE)
     
    -release: upgrade-news check distcheck dist
    -	gpg --sign --armor --yes $(DIST_ARCHIVES)
    -	git tag $(VERSION)
    -	SHA_TAR=$$(git hash-object -w $(DIST_ARCHIVES));                          \
    -	SHA_SIG=$$(git hash-object -w $(DIST_ARCHIVES).asc);                      \
    -	git notes --ref=refs/notes/tarballs   add -f -C $$SHA_TAR $(VERSION);     \
    -	git notes --ref=refs/notes/signatures add -f -C $$SHA_SIG $(VERSION);     \
    -	git notes append -m "$$(printf "Get this release with:\n  git cat-file -p $$SHA_TAR > $(DIST_ARCHIVES)\n  git cat-file -p $$SHA_SIG > $(DIST_ARCHIVES).asc")"
    -	sed -i -e "s/blob?id=.*\"/blob?id=$$(git notes --ref=refs/notes/tarballs list $(VERSION))\"/" guix/channel/xyz/euandreh/__PROJECT__/channel.scm.in
    -	sed -i -e "s/(base32 \".*\")/(base32 \"$$(guix download $(DIST_ARCHIVES) | tail -n 1)\")/"   guix/channel/xyz/euandreh/__PROJECT__/channel.scm.in
    -	./configure
    -	git add guix/channel/xyz/euandreh/__PROJECT__/channel.scm guix/channel/xyz/euandreh/__PROJECT__/channel.scm.in
    -	git commit -m 'Update released version $(VERSION) in channel.scm.in file.'
    -	git push --tags
    -	git push origin refs/notes/tarballs
    -	git push origin refs/notes/signatures
    -	git push
    +.PHONY: release-with-binaries
    +release-with-binaries:
    +	$(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) --bin
    diff --git a/bash/templates/build-aux/git-notes-release.sh b/bash/templates/build-aux/git-notes-release.sh
    new file mode 100644
    index 0000000..ad35eda
    --- /dev/null
    +++ b/bash/templates/build-aux/git-notes-release.sh
    @@ -0,0 +1,76 @@
    +#!/bin/sh -eux
    +
    +DIST_ARCHIVES="$1"
    +VERSION="$2"
    +PACKAGE="$3"
    +BIN="${4:-}"
    +
    +if [ "$BIN" != --bin ]; then
    +  # Assert version
    +  if git rev-parse "$VERSION" > /dev/null; then
    +    echo "Tar $VERSION already exists, exitting."
    +    exit 2
    +  fi
    +
    +  # Update NEWS
    +  sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS
    +  cat < $DIST_ARCHIVES
    +  git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc
    +EOF
    +)
    +  git notes append -m "$NOTE"
    +  sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    +  sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/"    "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    +  ./configure
    +  git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    +  git commit -m "Update released version $VERSION in channel.scm.in file."
    +
    +  # Publish release artifacts
    +  git push --tags
    +  git push origin refs/notes/tarballs
    +  git push origin refs/notes/signatures
    +  git push origin refs/notes/commits
    +  git push
    +else
    +  guix pull
    +  BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")"
    +  SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")"
    +  git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION"
    +  NOTE=$(cat < $PACKAGE-bin.tar.gz
    +  tar xf $PACKAGE-bin.tar.gz
    +  bin/$PACKAGE
    +EOF
    +)
    +  git notes append -m "$NOTE"
    +  git push origin refs/notes/binaries
    +  git push origin refs/notes/commits
    +fi
    -- 
    cgit v1.2.3
    
    
    From 2e62c55bb48784ba26ad82a710ed872b2191f5b1 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 07:03:34 -0300
    Subject: fake-symlinks: Move things from scripts/* to build-aux/
    
    ---
     bash/fake-symlinks.sh                              | 36 ++++++------
     bash/templates/..git/hooks/pre-push                |  4 +-
     bash/templates/Makefile                            |  6 +-
     bash/templates/Makefile.am                         | 12 ++--
     bash/templates/build-aux/assert-docs-spelling.sh   | 32 +++++++++++
     bash/templates/build-aux/assert-shellcheck.sh      |  5 ++
     bash/templates/build-aux/assert-todos.sh           | 33 +++++++++++
     bash/templates/build-aux/build-sphinx.sh           | 66 ++++++++++++++++++++++
     bash/templates/build-aux/ci-build.sh               | 41 ++++++++++++++
     bash/templates/build-aux/compile-readme.sh         |  8 +++
     .../templates/build-aux/generate-tasks-and-bugs.sh | 21 +++++++
     bash/templates/build-aux/with-container.sh         |  3 +
     bash/templates/scripts/assert-docs-spelling.sh     | 32 -----------
     bash/templates/scripts/assert-shellcheck.sh        |  5 --
     bash/templates/scripts/assert-todos.sh             | 33 -----------
     bash/templates/scripts/build-sphinx.sh             | 66 ----------------------
     bash/templates/scripts/ci-build.sh                 | 41 --------------
     bash/templates/scripts/compile-readme.sh           |  8 ---
     bash/templates/scripts/generate-tasks-and-bugs.sh  | 21 -------
     bash/templates/scripts/with-container.sh           |  3 -
     20 files changed, 238 insertions(+), 238 deletions(-)
     create mode 100755 bash/templates/build-aux/assert-docs-spelling.sh
     create mode 100755 bash/templates/build-aux/assert-shellcheck.sh
     create mode 100755 bash/templates/build-aux/assert-todos.sh
     create mode 100755 bash/templates/build-aux/build-sphinx.sh
     create mode 100755 bash/templates/build-aux/ci-build.sh
     create mode 100755 bash/templates/build-aux/compile-readme.sh
     create mode 100755 bash/templates/build-aux/generate-tasks-and-bugs.sh
     create mode 100755 bash/templates/build-aux/with-container.sh
     delete mode 100755 bash/templates/scripts/assert-docs-spelling.sh
     delete mode 100755 bash/templates/scripts/assert-shellcheck.sh
     delete mode 100755 bash/templates/scripts/assert-todos.sh
     delete mode 100755 bash/templates/scripts/build-sphinx.sh
     delete mode 100755 bash/templates/scripts/ci-build.sh
     delete mode 100755 bash/templates/scripts/compile-readme.sh
     delete mode 100755 bash/templates/scripts/generate-tasks-and-bugs.sh
     delete mode 100755 bash/templates/scripts/with-container.sh
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 20b131f..42e98ad 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -129,12 +129,12 @@ ln-autotools() {
     }
     
     ln-workflow() {
    -  cp-all workflow/vendor/org.css      \
    -         workflow/vendor/htmlize.el   \
    -         workflow/workflow.css        \
    -         scripts/assert-todos.sh      \
    -         scripts/assert-shellcheck.sh \
    -         scripts/generate-tasks-and-bugs.sh
    +  cp-all workflow/vendor/org.css        \
    +         workflow/vendor/htmlize.el     \
    +         workflow/workflow.css          \
    +         build-aux/assert-todos.sh      \
    +         build-aux/assert-shellcheck.sh \
    +         build-aux/generate-tasks-and-bugs.sh
       cp-if-not TODOs.org
       envsubst-all workflow/preamble.org
     }
    @@ -144,24 +144,24 @@ ln-agpl() {
     }
     
     ln-guix-container() {
    -  cp-all scripts/with-container.sh scripts/assert-shellcheck.sh
    +  cp-all build-aux/with-container.sh build-aux/assert-shellcheck.sh
       cp-if-not guix/pinned-channels.scm guix/manifest.scm
     }
     
     ln-ci() {
    -  cp-all scripts/assert-shellcheck.sh
    +  cp-all build-aux/assert-shellcheck.sh
     
       if [[ -f "$PREFIX/configure.ac" ]]; then
         export AUTOTOOLS_SETUP='./bootstrap && ./configure && '
       else
         export AUTOTOOLS_SETUP=''
       fi
    -  envsubst-all scripts/ci-build.sh ..git/hooks/pre-push
    -  chmod+x-all  scripts/ci-build.sh ..git/hooks/pre-push
    +  envsubst-all build-aux/ci-build.sh ..git/hooks/pre-push
    +  chmod+x-all  build-aux/ci-build.sh ..git/hooks/pre-push
     }
     
     ln-git-notes-release() {
    -  sed-all build-aux/git-notes-release.am
    +  cp-all build-aux/git-notes-release.am build-aux/git-notes-release.sh
       cp-if-not NEWS
     }
     
    @@ -170,8 +170,8 @@ ln-dicts() {
     }
     
     ln-pandoc-index() {
    -  envsubst-all scripts/compile-readme.sh
    -  chmod+x-all  scripts/compile-readme.sh
    +  envsubst-all build-aux/compile-readme.sh
    +  chmod+x-all  build-aux/compile-readme.sh
     }
     
     ln-texinfo() {
    @@ -182,11 +182,11 @@ ln-texinfo() {
     
     ln-sphinx() {
       ln-dicts
    -  cp-all scripts/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico
    +  cp-all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico
       envsubst-all doc/conf.py.in doc/_templates/layout.html
       envsubst-if-not doc/index.rst
    -  sed-all scripts/build-sphinx.sh
    -  chmod+x-all /scripts/build-sphinx.sh
    +  sed-all build-aux/build-sphinx.sh
    +  chmod+x-all /build-aux/build-sphinx.sh
       cp-if-not doc/i18n-pagenames.json doc/Makefile
     }
     
    @@ -260,8 +260,8 @@ ln-maybe-pre-push() {
     
     ln-maybe-ci-build() {
       if [[ -f "$PREFIX/Makefile" ]]; then
    -    envsubst-all scripts/ci-build.sh
    -    chmod+x-all  scripts/ci-build.sh
    +    envsubst-all build-aux/ci-build.sh
    +    chmod+x-all  build-aux/ci-build.sh
       fi
       envsubst-all ..git/hooks/pre-push
       chmod+x-all  ..git/hooks/pre-push
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    index 265405f..cf56aea 100755
    --- a/bash/templates/..git/hooks/pre-push
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -6,7 +6,7 @@ else
       git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/$PROJECT.git/description'
     fi
     
    -${DISABLE_CI}scp scripts/ci-build.sh git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    +${DISABLE_CI}scp build-aux/ci-build.sh git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
     
     # scp description         arrobaponto.org:/srv/git/$PROJECT.git/description
    -# ${DISABLE_CI}scp scripts/ci-build.sh arrobaponto.org:/srv/git/$PROJECT.git/hooks/post-receive
    +# ${DISABLE_CI}scp build-aux/ci-build.sh arrobaponto.org:/srv/git/$PROJECT.git/hooks/post-receive
    diff --git a/bash/templates/Makefile b/bash/templates/Makefile
    index 7a2d30e..6e902e7 100644
    --- a/bash/templates/Makefile
    +++ b/bash/templates/Makefile
    @@ -1,7 +1,7 @@
     .PHONY: check
     check:
    -	bash scripts/assert-shellcheck.sh
    -	bash scripts/assert-todos.sh
    +	bash build-aux/assert-shellcheck.sh
    +	bash build-aux/assert-todos.sh
     
     .PHONY: clean
     clean:
    @@ -9,5 +9,5 @@ clean:
     
     .PHONY: public
     public:
    -	bash ./scripts/generate-tasks-and-bugs.sh
    +	bash ./build-aux/generate-tasks-and-bugs.sh
     	pandoc -s --metadata title='$PROJECT_UC - EuAndreh' -c styles.css -o public/index.html README.md
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index 94e400b..fd5da9d 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -7,22 +7,22 @@ TESTS =
     EXTRA_DIST =                \
       guix/manifest.scm         \
       guix/pinned-channels.scm  \
    -  scripts/with-container.sh \
    +  build-aux/with-container.sh \
       description               \
       $(TESTS)
     
     info_TEXINFOS = doc/$PROJECT.texi
     
     check-local:
    -	if [ -f $(srcdir)/scripts/assert-shellcheck.sh ]; then \
    +	if [ -f $(srcdir)/build-aux/assert-shellcheck.sh ]; then \
         echo 'Running non-dist checks';                      \
    -    $(srcdir)/scripts/assert-shellcheck.sh;              \
    -    $(srcdir)/scripts/assert-todos.sh;                   \
    +    $(srcdir)/build-aux/assert-shellcheck.sh;              \
    +    $(srcdir)/build-aux/assert-todos.sh;                   \
       fi
     
     clean-local:
     	rm -rf $(srcdir)/public/
     
     public:
    -	$(srcdir)/scripts/generate-tasks-and-bugs.sh
    -	$(srcdir)/scripts/compile-readme.sh
    +	$(srcdir)/build-aux/generate-tasks-and-bugs.sh
    +	$(srcdir)/build-aux/compile-readme.sh
    diff --git a/bash/templates/build-aux/assert-docs-spelling.sh b/bash/templates/build-aux/assert-docs-spelling.sh
    new file mode 100755
    index 0000000..6720bc5
    --- /dev/null
    +++ b/bash/templates/build-aux/assert-docs-spelling.sh
    @@ -0,0 +1,32 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +cd "$(dirname "${BASH_SOURCE[0]}")"
    +cd ../doc/
    +
    +export LANG=C.UTF-8
    +
    +for DICT in dictionaries/*.txt; do
    +  diff <(sort "$DICT") "$DICT" || {
    +    echo "The $DICT dictionary is unsorted. To fix it, run:" >&2
    +    echo "  LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2
    +    exit 1
    +  }
    +done
    +
    +OUT="$(mktemp)"
    +LANGS="$(jq -r .langs[] < ../metadata.json)"
    +
    +for l in ${LANGS}; do
    +  make SPHINXOPTS="-D language=$l" html
    +  hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT"
    +done
    +
    +if [[ -s "$OUT" ]]; then
    +  printf "\nvvv Mispelled words detected by hunspell.\n\n"
    +  sort < "$OUT" | uniq
    +  printf "\n^^^\n" >&2
    +  exit 1
    +else
    +  echo "No spelling errors detected"
    +  exit 0
    +fi
    diff --git a/bash/templates/build-aux/assert-shellcheck.sh b/bash/templates/build-aux/assert-shellcheck.sh
    new file mode 100755
    index 0000000..d07815b
    --- /dev/null
    +++ b/bash/templates/build-aux/assert-shellcheck.sh
    @@ -0,0 +1,5 @@
    +#!/bin/sh -eux
    +
    +git ls-files -z | \
    +  xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \
    +  xargs shellcheck
    diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh
    new file mode 100755
    index 0000000..74c61c9
    --- /dev/null
    +++ b/bash/templates/build-aux/assert-todos.sh
    @@ -0,0 +1,33 @@
    +#!/bin/sh -eux
    +
    +if git grep FIXME | grep -v '^TODOs.org' | grep -v '^build-aux/assert-todos.sh'; then
    +  echo "Found dangling FIXME markers on the project."
    +  echo "You should write them down properly on TODOs.org."
    +  exit 1
    +fi
    +
    +KNOWN_IDS=''
    +has_error=0
    +# shellcheck disable=2013
    +for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do
    +  if sed "${todo}q;d" TODOs.org | grep -E '^\*\* (CANCELLED|DONE)' > /dev/null; then
    +    ID_OFFSET=3
    +  else
    +    ID_OFFSET=2
    +  fi
    +  line_n="$((todo+ID_OFFSET))"
    +  ID="$(sed "${line_n}q;d" TODOs.org)"
    +  if echo "$ID" | grep '^:CUSTOM_ID: .*$' > /dev/null; then
    +    if echo "$KNOWN_IDS" | grep "$ID" > /dev/null; then
    +      echo "Duplicated ID: $ID"
    +      has_error=1
    +    else
    +      KNOWN_IDS="$KNOWN_IDS $(echo "$ID" | awk '{print $2}')"
    +    fi
    +  else
    +    echo "Missing ID for TODO in line $line_n"
    +    has_error=1
    +  fi
    +done
    +
    +exit "$has_error"
    diff --git a/bash/templates/build-aux/build-sphinx.sh b/bash/templates/build-aux/build-sphinx.sh
    new file mode 100755
    index 0000000..658a705
    --- /dev/null
    +++ b/bash/templates/build-aux/build-sphinx.sh
    @@ -0,0 +1,66 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +cd "$(dirname "${BASH_SOURCE[0]}")"
    +cd ../
    +
    +OUT='public'
    +PROJECT_UC="__PROJECT_UC__"
    +
    +pushd doc
    +make html
    +popd
    +
    +cp doc/favicon.ico "$OUT"
    +mv doc/_build/html/_static/ "$OUT/_static/"
    +
    +CURRENT_LANG="$(jq -r .current_lang < metadata.json)"
    +LANGS="$(jq -r .langs[] < metadata.json)"
    +TAGS="$(git tag | cat - <(echo master))"
    +
    +for lang in ${LANGS}; do
    +  for tag in ${TAGS}; do
    +    mkdir -p "tmp/$lang/$tag/"
    +    git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- .
    +    git reset .
    +    git checkout .
    +
    +    pushd "tmp/$lang/$tag/doc/"
    +    jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json
    +
    +    RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json      | \
    +                 jq -r 'to_entries[] | [.key, .value] | @csv' | \
    +                 tr -d '\"')"
    +
    +    if [[ "$lang" != "$CURRENT_LANG" ]]; then
    +      for rename in $RENAMES; do
    +        from="$(echo "$rename" | cut -d, -f1)"
    +        to="$(echo "$rename"   | cut -d, -f2)"
    +        mv "${from}.rst" "${to}.rst"
    +        sed -i "s/^   $from$/   $to/" index.rst
    +      done
    +    fi
    +
    +    make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html
    +    popd
    +
    +    mkdir "$OUT/$lang/"
    +
    +    mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/"
    +    pushd "$OUT/$lang/$tag/"
    +    rm -rf _static/
    +    ln -s ../../_static .
    +    popd
    +
    +    mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/"
    +    pushd "$OUT/$lang/$tag/single/"
    +    rm -rf _static/
    +    ln -s ../../../_static .
    +    rm -rf _images/
    +    ln -s ../_images .
    +    popd
    +
    +    mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf"
    +  done
    +done
    +
    +gitstats . "$OUT/gitstats/"
    diff --git a/bash/templates/build-aux/ci-build.sh b/bash/templates/build-aux/ci-build.sh
    new file mode 100755
    index 0000000..a9b9070
    --- /dev/null
    +++ b/bash/templates/build-aux/ci-build.sh
    @@ -0,0 +1,41 @@
    +#!/bin/sh -eux
    +
    +PREFIX="${DOLLAR}LOGS_PREFIX/$PROJECT"
    +mkdir -p "${DOLLAR}PREFIX"
    +read -r _ SHA _ # oldrev newrev refname
    +FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log"
    +LOGFILE="${DOLLAR}PREFIX/${DOLLAR}FILENAME"
    +{
    +
    +  # exec 2>&1 >(tee -a "${DOLLAR}LOGFILE")
    +
    +  echo "Starting CI job at: ${DOLLAR}(date -Is)"
    +
    +  finish() {
    +    STATUS="${DOLLAR}?"
    +    printf "\n\n>>> exit status was %s\n" "${DOLLAR}STATUS"
    +    echo "Finishing CI job at: ${DOLLAR}(date -Is)"
    +    cd -
    +    NOTE=$(cat <>> CI logs added as Git note."
    +  }
    +  trap finish EXIT
    +
    +  unset GIT_DIR
    +  CLONE="${DOLLAR}(mktemp -d)"
    +  git clone . "${DOLLAR}CLONE"
    +  cd "${DOLLAR}CLONE"
    +  git config --global user.email git@euandre.org
    +  git config --global user.name 'EuAndreh CI'
    +
    +  ./build-aux/with-container.sh '${AUTOTOOLS_SETUP}make clean check distcheck public'
    +  rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/
    +} | tee "${DOLLAR}LOGFILE" 2>&1
    diff --git a/bash/templates/build-aux/compile-readme.sh b/bash/templates/build-aux/compile-readme.sh
    new file mode 100755
    index 0000000..0a53b49
    --- /dev/null
    +++ b/bash/templates/build-aux/compile-readme.sh
    @@ -0,0 +1,8 @@
    +#!/bin/sh -eux
    +
    +pandoc -s \
    +       --metadata title='$PROJECT_UC - EuAndreh' \
    +       -c styles.css \
    +       -o public/index.html \
    +       -r markdown \
    +       README
    diff --git a/bash/templates/build-aux/generate-tasks-and-bugs.sh b/bash/templates/build-aux/generate-tasks-and-bugs.sh
    new file mode 100755
    index 0000000..0596190
    --- /dev/null
    +++ b/bash/templates/build-aux/generate-tasks-and-bugs.sh
    @@ -0,0 +1,21 @@
    +#!/bin/sh -eux
    +
    +mkdir -p public
    +
    +cat workflow/vendor/org.css workflow/workflow.css > public/styles.css
    +
    +sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \
    +  head -n -1                                          | \
    +  cat workflow/preamble.org - > tasks-and-bugs.org
    +
    +emacs tasks-and-bugs.org                               \
    +      -l workflow/vendor/htmlize.el                    \
    +      --eval '(setq org-export-allow-bind-keywords t)' \
    +      -f org-html-export-to-html                       \
    +      --batch                                          \
    +      --kill
    +
    +# Add anchor link to bug headers
    +perl -pe \
    +     's|^

    (.*)

    $|

    \2
    #\1

    |' \ + tasks-and-bugs.html > public/tasks-and-bugs.html diff --git a/bash/templates/build-aux/with-container.sh b/bash/templates/build-aux/with-container.sh new file mode 100755 index 0000000..cff282f --- /dev/null +++ b/bash/templates/build-aux/with-container.sh @@ -0,0 +1,3 @@ +#!/bin/sh -eux + +guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" diff --git a/bash/templates/scripts/assert-docs-spelling.sh b/bash/templates/scripts/assert-docs-spelling.sh deleted file mode 100755 index 6720bc5..0000000 --- a/bash/templates/scripts/assert-docs-spelling.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../doc/ - -export LANG=C.UTF-8 - -for DICT in dictionaries/*.txt; do - diff <(sort "$DICT") "$DICT" || { - echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 - echo " LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2 - exit 1 - } -done - -OUT="$(mktemp)" -LANGS="$(jq -r .langs[] < ../metadata.json)" - -for l in ${LANGS}; do - make SPHINXOPTS="-D language=$l" html - hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT" -done - -if [[ -s "$OUT" ]]; then - printf "\nvvv Mispelled words detected by hunspell.\n\n" - sort < "$OUT" | uniq - printf "\n^^^\n" >&2 - exit 1 -else - echo "No spelling errors detected" - exit 0 -fi diff --git a/bash/templates/scripts/assert-shellcheck.sh b/bash/templates/scripts/assert-shellcheck.sh deleted file mode 100755 index d07815b..0000000 --- a/bash/templates/scripts/assert-shellcheck.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -eux - -git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ - xargs shellcheck diff --git a/bash/templates/scripts/assert-todos.sh b/bash/templates/scripts/assert-todos.sh deleted file mode 100755 index 99e6f00..0000000 --- a/bash/templates/scripts/assert-todos.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -eux - -if git grep FIXME | grep -v '^TODOs.org' | grep -v '^scripts/assert-todos.sh'; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.org." - exit 1 -fi - -KNOWN_IDS='' -has_error=0 -# shellcheck disable=2013 -for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do - if sed "${todo}q;d" TODOs.org | grep -E '^\*\* (CANCELLED|DONE)' > /dev/null; then - ID_OFFSET=3 - else - ID_OFFSET=2 - fi - line_n="$((todo+ID_OFFSET))" - ID="$(sed "${line_n}q;d" TODOs.org)" - if echo "$ID" | grep '^:CUSTOM_ID: .*$' > /dev/null; then - if echo "$KNOWN_IDS" | grep "$ID" > /dev/null; then - echo "Duplicated ID: $ID" - has_error=1 - else - KNOWN_IDS="$KNOWN_IDS $(echo "$ID" | awk '{print $2}')" - fi - else - echo "Missing ID for TODO in line $line_n" - has_error=1 - fi -done - -exit "$has_error" diff --git a/bash/templates/scripts/build-sphinx.sh b/bash/templates/scripts/build-sphinx.sh deleted file mode 100755 index 658a705..0000000 --- a/bash/templates/scripts/build-sphinx.sh +++ /dev/null @@ -1,66 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -OUT='public' -PROJECT_UC="__PROJECT_UC__" - -pushd doc -make html -popd - -cp doc/favicon.ico "$OUT" -mv doc/_build/html/_static/ "$OUT/_static/" - -CURRENT_LANG="$(jq -r .current_lang < metadata.json)" -LANGS="$(jq -r .langs[] < metadata.json)" -TAGS="$(git tag | cat - <(echo master))" - -for lang in ${LANGS}; do - for tag in ${TAGS}; do - mkdir -p "tmp/$lang/$tag/" - git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . - git reset . - git checkout . - - pushd "tmp/$lang/$tag/doc/" - jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - - RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json | \ - jq -r 'to_entries[] | [.key, .value] | @csv' | \ - tr -d '\"')" - - if [[ "$lang" != "$CURRENT_LANG" ]]; then - for rename in $RENAMES; do - from="$(echo "$rename" | cut -d, -f1)" - to="$(echo "$rename" | cut -d, -f2)" - mv "${from}.rst" "${to}.rst" - sed -i "s/^ $from$/ $to/" index.rst - done - fi - - make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html - popd - - mkdir "$OUT/$lang/" - - mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/" - pushd "$OUT/$lang/$tag/" - rm -rf _static/ - ln -s ../../_static . - popd - - mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/" - pushd "$OUT/$lang/$tag/single/" - rm -rf _static/ - ln -s ../../../_static . - rm -rf _images/ - ln -s ../_images . - popd - - mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" - done -done - -gitstats . "$OUT/gitstats/" diff --git a/bash/templates/scripts/ci-build.sh b/bash/templates/scripts/ci-build.sh deleted file mode 100755 index 8509c59..0000000 --- a/bash/templates/scripts/ci-build.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -eux - -PREFIX="${DOLLAR}LOGS_PREFIX/$PROJECT" -mkdir -p "${DOLLAR}PREFIX" -read -r _ SHA _ # oldrev newrev refname -FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log" -LOGFILE="${DOLLAR}PREFIX/${DOLLAR}FILENAME" -{ - - # exec 2>&1 >(tee -a "${DOLLAR}LOGFILE") - - echo "Starting CI job at: ${DOLLAR}(date -Is)" - - finish() { - STATUS="${DOLLAR}?" - printf "\n\n>>> exit status was %s\n" "${DOLLAR}STATUS" - echo "Finishing CI job at: ${DOLLAR}(date -Is)" - cd - - NOTE=$(cat <>> CI logs added as Git note." - } - trap finish EXIT - - unset GIT_DIR - CLONE="${DOLLAR}(mktemp -d)" - git clone . "${DOLLAR}CLONE" - cd "${DOLLAR}CLONE" - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - - ./scripts/with-container.sh '${AUTOTOOLS_SETUP}make clean check distcheck public' - rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/ -} | tee "${DOLLAR}LOGFILE" 2>&1 diff --git a/bash/templates/scripts/compile-readme.sh b/bash/templates/scripts/compile-readme.sh deleted file mode 100755 index 0a53b49..0000000 --- a/bash/templates/scripts/compile-readme.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -eux - -pandoc -s \ - --metadata title='$PROJECT_UC - EuAndreh' \ - -c styles.css \ - -o public/index.html \ - -r markdown \ - README diff --git a/bash/templates/scripts/generate-tasks-and-bugs.sh b/bash/templates/scripts/generate-tasks-and-bugs.sh deleted file mode 100755 index 0596190..0000000 --- a/bash/templates/scripts/generate-tasks-and-bugs.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -eux - -mkdir -p public - -cat workflow/vendor/org.css workflow/workflow.css > public/styles.css - -sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - cat workflow/preamble.org - > tasks-and-bugs.org - -emacs tasks-and-bugs.org \ - -l workflow/vendor/htmlize.el \ - --eval '(setq org-export-allow-bind-keywords t)' \ - -f org-html-export-to-html \ - --batch \ - --kill - -# Add anchor link to bug headers -perl -pe \ - 's|^

    (.*)

    $|

    \2
    #\1

    |' \ - tasks-and-bugs.html > public/tasks-and-bugs.html diff --git a/bash/templates/scripts/with-container.sh b/bash/templates/scripts/with-container.sh deleted file mode 100755 index cff282f..0000000 --- a/bash/templates/scripts/with-container.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -eux - -guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" -- cgit v1.2.3 From 418da44f6399daf74ffc59f24f6ab1536c48008b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 16 Dec 2020 07:58:33 -0300 Subject: Move generated scripts/*.sh to build-aux/ --- build-aux/ci-build.sh | 41 +++++++++++++++++++++++++++++++++++++++++ scripts/assert-nixfmt.sh | 16 ---------------- scripts/assert-shellcheck.sh | 6 ------ scripts/ci-build.sh | 41 ----------------------------------------- 4 files changed, 41 insertions(+), 63 deletions(-) create mode 100755 build-aux/ci-build.sh delete mode 100755 scripts/assert-nixfmt.sh delete mode 100755 scripts/assert-shellcheck.sh delete mode 100755 scripts/ci-build.sh diff --git a/build-aux/ci-build.sh b/build-aux/ci-build.sh new file mode 100755 index 0000000..8636ae0 --- /dev/null +++ b/build-aux/ci-build.sh @@ -0,0 +1,41 @@ +#!/bin/sh -eux + +PREFIX="$LOGS_PREFIX/dotfiles" +mkdir -p "$PREFIX" +read -r _ SHA _ # oldrev newrev refname +FILENAME="$(date -Is)-$SHA.log" +LOGFILE="$PREFIX/$FILENAME" +{ + + # exec 2>&1 >(tee -a "$LOGFILE") + + echo "Starting CI job at: $(date -Is)" + + finish() { + STATUS="$?" + printf "\n\n>>> exit status was %s\n" "$STATUS" + echo "Finishing CI job at: $(date -Is)" + cd - + NOTE=$(cat <>> CI logs added as Git note." + } + trap finish EXIT + + unset GIT_DIR + CLONE="$(mktemp -d)" + git clone . "$CLONE" + cd "$CLONE" + git config --global user.email git@euandre.org + git config --global user.name 'EuAndreh CI' + + ./build-aux/with-container.sh 'make clean check distcheck public' + rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/ +} | tee "$LOGFILE" 2>&1 diff --git a/scripts/assert-nixfmt.sh b/scripts/assert-nixfmt.sh deleted file mode 100755 index 7a68fa9..0000000 --- a/scripts/assert-nixfmt.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -format() { - nix_file="${1}" - diff <(nixfmt < "${nix_file}") "${nix_file}" || { - echo "The file '${nix_file}' is unformatted. To fix it, run:" - echo " nixfmt ${nix_file}" - exit 1 - } -} -export -f format - -find . -type f -name '*.nix' -print0 | xargs -0 -I% bash -c "format %" diff --git a/scripts/assert-shellcheck.sh b/scripts/assert-shellcheck.sh deleted file mode 100755 index f3c110c..0000000 --- a/scripts/assert-shellcheck.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -git ls-files | grep '\.sh$' | grep -v bash/templates/ | xargs shellcheck diff --git a/scripts/ci-build.sh b/scripts/ci-build.sh deleted file mode 100755 index 1ab3869..0000000 --- a/scripts/ci-build.sh +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -eux - -PREFIX="$LOGS_PREFIX/dotfiles" -mkdir -p "$PREFIX" -read -r _ SHA _ # oldrev newrev refname -FILENAME="$(date -Is)-$SHA.log" -LOGFILE="$PREFIX/$FILENAME" -{ - - # exec 2>&1 >(tee -a "$LOGFILE") - - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>> CI logs added as Git note." - } - trap finish EXIT - - unset GIT_DIR - CLONE="$(mktemp -d)" - git clone . "$CLONE" - cd "$CLONE" - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - - ./scripts/with-container.sh 'make clean check distcheck public' - rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/ -} | tee "$LOGFILE" 2>&1 -- cgit v1.2.3 From d9b8498d439aae18b8c1ea9ae2952aef8d31ede9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 16 Dec 2020 07:59:04 -0300 Subject: channels.scm: Point to git.euandreh.xyz and fix channel introduction commit --- guix/channels.scm | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/guix/channels.scm b/guix/channels.scm index 7490985..c647855 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -2,7 +2,7 @@ (list (channel (name 'euandreh) - (url "https://git.sr.ht/~euandreh/euandreh-guix-channel") + (url "git://git.euandreh.xyz/euandreh-guix-channel") (branch "master") (introduction (make-channel-introduction @@ -11,11 +11,11 @@ "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) (channel (name 'songbooks) - (url "https://git.sr.ht/~euandreh/songbooks") + (url "git://git.euandreh.xyz/songbooks") (branch "master") (introduction (make-channel-introduction - "34ba04025e2bf1a66ba85c295f3dda3e6577874e" + "26b772cdb5074e93d3112c807ffd4c76f16f039c" (openpgp-fingerprint "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060"))))) %default-channels) -- cgit v1.2.3 From 66c13c81c7bfb25228c6c489a9fbfac478baecf1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 16 Dec 2020 08:26:13 -0300 Subject: Use 'grep -q ...' over 'grep ... > /dev/null' --- bash/fake-symlinks.sh | 2 +- bash/ps1.sh | 8 ++++---- bash/symlinks.sh | 2 ++ bash/templates/build-aux/assert-todos.sh | 6 +++--- scripts/ad-hoc/rotate-mpris-player.sh | 2 +- scripts/ad-hoc/xmobar-notmuch.sh | 2 +- spacemacs.el | 2 +- 7 files changed, 13 insertions(+), 11 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 42e98ad..9671194 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -107,7 +107,7 @@ ln-env() { } ln-init() { - if ! grep "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini > /dev/null; then + if ! grep -q "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini; then red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")" fi diff --git a/bash/ps1.sh b/bash/ps1.sh index 076ad63..8b6e1a2 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -21,10 +21,10 @@ repo-status() { BRANCH_LINE="$(head -n 1 <<< "$OUT")" DIFF_LINES="$(tail -n +2 <<< "$OUT")" - if grep 'ahead' <<< "$BRANCH_LINE" > /dev/null; then + if grep -q 'ahead' <<< "$BRANCH_LINE"; then IS_AHEAD=1 fi - if grep 'behind' <<< "$BRANCH_LINE" > /dev/null; then + if grep -q 'behind' <<< "$BRANCH_LINE"; then IS_BEHIND=1 fi @@ -38,11 +38,11 @@ repo-status() { BRANCH_MARKER="$inner" fi - if grep '^[A| ][M|D]' <<< "$DIFF_LINES" > /dev/null; then + if grep -q '^[A| ][M|D]' <<< "$DIFF_LINES"; then HAS_DIFF=1 fi - if grep '^[?][?]' <<< "$DIFF_LINES" > /dev/null; then + if grep -q '^[?][?]' <<< "$DIFF_LINES"; then HAS_UNTRACKED=1 fi diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 12a1cdc..5b644b3 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -21,6 +21,8 @@ ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc +ln -f "$HOME/Sync/TODOs.org.txt" "$HOME/annex/TODOs.org" + mkdir -p ~/.gnupg ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh index 74c61c9..73e02d6 100755 --- a/bash/templates/build-aux/assert-todos.sh +++ b/bash/templates/build-aux/assert-todos.sh @@ -10,15 +10,15 @@ KNOWN_IDS='' has_error=0 # shellcheck disable=2013 for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do - if sed "${todo}q;d" TODOs.org | grep -E '^\*\* (CANCELLED|DONE)' > /dev/null; then + if sed "${todo}q;d" TODOs.org | grep -qE '^\*\* (CANCELLED|DONE)'; then ID_OFFSET=3 else ID_OFFSET=2 fi line_n="$((todo+ID_OFFSET))" ID="$(sed "${line_n}q;d" TODOs.org)" - if echo "$ID" | grep '^:CUSTOM_ID: .*$' > /dev/null; then - if echo "$KNOWN_IDS" | grep "$ID" > /dev/null; then + if echo "$ID" | grep -q '^:CUSTOM_ID: .*$'; then + if echo "$KNOWN_IDS" | grep -q "$ID"; then echo "Duplicated ID: $ID" has_error=1 else diff --git a/scripts/ad-hoc/rotate-mpris-player.sh b/scripts/ad-hoc/rotate-mpris-player.sh index cc8c701..863501e 100755 --- a/scripts/ad-hoc/rotate-mpris-player.sh +++ b/scripts/ad-hoc/rotate-mpris-player.sh @@ -12,7 +12,7 @@ pick_first() { if [[ "${CURRENT_PLAYER}" = "" ]]; then pick_first -elif ! echo "${AVAILABLE_PLAYERS}" | grep "${CURRENT_PLAYER}" > /dev/null; then +elif ! echo "${AVAILABLE_PLAYERS}" | grep -q "${CURRENT_PLAYER}"; then # Unknown $CURRENT_PLAYER, pick anyone pick_first else diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh index 8bceab0..a0362d3 100755 --- a/scripts/ad-hoc/xmobar-notmuch.sh +++ b/scripts/ad-hoc/xmobar-notmuch.sh @@ -3,7 +3,7 @@ set -Eeuo pipefail while true; do echo "mail: $(notmuch count tag:unread AND \(NOT tag:ml OR thread:{tag:track}\))/$(notmuch count tag:inbox)" - if grep off-line <(acpi -a) > /dev/null; then + if grep -q off-line <(acpi -a); then sleep $((60 * 15)) else sleep $((60 * 1)) diff --git a/spacemacs.el b/spacemacs.el index aa0b647..c077bfb 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -797,7 +797,7 @@ through `notmuch-message-attach-regex'." (interactive) (helm :sources (helm-build-sync-source "mailint lists" - :candidates '("Sync/TODOs.org" + :candidates '("annex/TODOs.org" "annex/txt/Work.org" "annex/txt/Things.org" "annex/txt/writing.org" -- cgit v1.2.3 From e3ef86a4b48a117bef3593e8b0433f40273e0a1b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 16 Dec 2020 17:04:19 -0300 Subject: fake-symlinks: Move workflow/* into build-aux/workflow/ --- bash/fake-symlinks.sh | 12 +- .../templates/build-aux/generate-tasks-and-bugs.sh | 6 +- bash/templates/build-aux/workflow/preamble.org | 25 + .../templates/build-aux/workflow/vendor/htmlize.el | 1884 ++++++++++++++++++++ bash/templates/build-aux/workflow/vendor/org.css | 5 + bash/templates/build-aux/workflow/workflow.css | 49 + bash/templates/workflow/preamble.org | 25 - bash/templates/workflow/vendor/htmlize.el | 1884 -------------------- bash/templates/workflow/vendor/org.css | 5 - bash/templates/workflow/workflow.css | 49 - 10 files changed, 1972 insertions(+), 1972 deletions(-) create mode 100644 bash/templates/build-aux/workflow/preamble.org create mode 100644 bash/templates/build-aux/workflow/vendor/htmlize.el create mode 100644 bash/templates/build-aux/workflow/vendor/org.css create mode 100644 bash/templates/build-aux/workflow/workflow.css delete mode 100644 bash/templates/workflow/preamble.org delete mode 100644 bash/templates/workflow/vendor/htmlize.el delete mode 100644 bash/templates/workflow/vendor/org.css delete mode 100644 bash/templates/workflow/workflow.css diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 9671194..ef7a353 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -129,14 +129,14 @@ ln-autotools() { } ln-workflow() { - cp-all workflow/vendor/org.css \ - workflow/vendor/htmlize.el \ - workflow/workflow.css \ - build-aux/assert-todos.sh \ - build-aux/assert-shellcheck.sh \ + cp-all build-aux/workflow/vendor/org.css \ + build-aux/workflow/vendor/htmlize.el \ + build-aux/workflow/workflow.css \ + build-aux/assert-todos.sh \ + build-aux/assert-shellcheck.sh \ build-aux/generate-tasks-and-bugs.sh cp-if-not TODOs.org - envsubst-all workflow/preamble.org + envsubst-all build-aux/workflow/preamble.org } ln-agpl() { diff --git a/bash/templates/build-aux/generate-tasks-and-bugs.sh b/bash/templates/build-aux/generate-tasks-and-bugs.sh index 0596190..1788c18 100755 --- a/bash/templates/build-aux/generate-tasks-and-bugs.sh +++ b/bash/templates/build-aux/generate-tasks-and-bugs.sh @@ -2,14 +2,14 @@ mkdir -p public -cat workflow/vendor/org.css workflow/workflow.css > public/styles.css +cat build-aux/workflow/vendor/org.css build-aux/workflow/workflow.css > public/styles.css sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ head -n -1 | \ - cat workflow/preamble.org - > tasks-and-bugs.org + cat build-aux/workflow/preamble.org - > tasks-and-bugs.org emacs tasks-and-bugs.org \ - -l workflow/vendor/htmlize.el \ + -l build-aux/workflow/vendor/htmlize.el \ --eval '(setq org-export-allow-bind-keywords t)' \ -f org-html-export-to-html \ --batch \ diff --git a/bash/templates/build-aux/workflow/preamble.org b/bash/templates/build-aux/workflow/preamble.org new file mode 100644 index 0000000..1da69e7 --- /dev/null +++ b/bash/templates/build-aux/workflow/preamble.org @@ -0,0 +1,25 @@ +#+TITLE: Tasks and bug listing for $PROJECT_UC +#+AUTHOR: EuAndreh +#+BIND: org-html-validation-link nil +#+BIND: org-html-scripts nil +#+BIND: org-html-postamble nil +#+BIND: org-export-html-headline-anchor-format nil +#+BIND: org-html-doctype "html5" +#+OPTIONS: toc:nil html-style:nil num:nil +#+HTML_HEAD: +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] +#+MACRO: bug bug\nbsp{}[[#$1][#$1]] +#+MACRO: task task\nbsp{}[[#$1][#$1]] +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) + +Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. + +Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. + +/Você também pode escrever em português./ + +/Vous pouvez aussi écrire en français./ + +#+TOC: headlines 2 diff --git a/bash/templates/build-aux/workflow/vendor/htmlize.el b/bash/templates/build-aux/workflow/vendor/htmlize.el new file mode 100644 index 0000000..02f251a --- /dev/null +++ b/bash/templates/build-aux/workflow/vendor/htmlize.el @@ -0,0 +1,1884 @@ +;;;; Taken from: +;;;; https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el + +;;; htmlize.el --- Convert buffer text and decorations to HTML. -*- lexical-binding: t -*- + +;; Copyright (C) 1997-2003,2005,2006,2009,2011,2012,2014,2017,2018 Hrvoje Niksic + +;; Author: Hrvoje Niksic +;; Keywords: hypermedia, extensions +;; Version: 1.55 + +;; This program is free software; you can redistribute it and/or modify +;; it under the terms of the GNU General Public License as published by +;; the Free Software Foundation; either version 2, or (at your option) +;; any later version. + +;; This program is distributed in the hope that it will be useful, +;; but WITHOUT ANY WARRANTY; without even the implied warranty of +;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +;; GNU General Public License for more details. + +;; You should have received a copy of the GNU General Public License +;; along with this program; see the file COPYING. If not, write to the +;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, +;; Boston, MA 02111-1307, USA. + +;;; Commentary: + +;; This package converts the buffer text and the associated +;; decorations to HTML. Mail to to discuss +;; features and additions. All suggestions are more than welcome. + +;; To use it, just switch to the buffer you want HTML-ized and type +;; `M-x htmlize-buffer'. You will be switched to a new buffer that +;; contains the resulting HTML code. You can edit and inspect this +;; buffer, or you can just save it with C-x C-w. `M-x htmlize-file' +;; will find a file, fontify it, and save the HTML version in +;; FILE.html, without any additional intervention. `M-x +;; htmlize-many-files' allows you to htmlize any number of files in +;; the same manner. `M-x htmlize-many-files-dired' does the same for +;; files marked in a dired buffer. + +;; htmlize supports three types of HTML output, selected by setting +;; `htmlize-output-type': `css', `inline-css', and `font'. In `css' +;; mode, htmlize uses cascading style sheets to specify colors; it +;; generates classes that correspond to Emacs faces and uses ... to color parts of text. In this mode, the +;; produced HTML is valid under the 4.01 strict DTD, as confirmed by +;; the W3C validator. `inline-css' is like `css', except the CSS is +;; put directly in the STYLE attribute of the SPAN element, making it +;; possible to paste the generated HTML into existing HTML documents. +;; In `font' mode, htmlize uses ... to +;; colorize HTML, which is not standard-compliant, but works better in +;; older browsers. `css' mode is the default. + +;; You can also use htmlize from your Emacs Lisp code. When called +;; non-interactively, `htmlize-buffer' and `htmlize-region' will +;; return the resulting HTML buffer, but will not change current +;; buffer or move the point. htmlize will do its best to work on +;; non-windowing Emacs sessions but the result will be limited to +;; colors supported by the terminal. + +;; htmlize aims for compatibility with older Emacs versions. Please +;; let me know if it doesn't work on the version of GNU Emacs that you +;; are using. The package relies on the presence of CL extensions; +;; please don't try to remove that dependency. I see no practical +;; problems with using the full power of the CL extensions, except +;; that one might learn to like them too much. + +;; The latest version is available at: +;; +;; +;; +;; + +;; Thanks go to the many people who have sent reports and contributed +;; comments, suggestions, and fixes. They include Ron Gut, Bob +;; Weiner, Toni Drabik, Peter Breton, Ville Skytta, Thomas Vogels, +;; Juri Linkov, Maciek Pasternacki, and many others. + +;; User quotes: "You sir, are a sick, sick, _sick_ person. :)" +;; -- Bill Perry, author of Emacs/W3 + + +;;; Code: + +(require 'cl) +(eval-when-compile + (defvar font-lock-auto-fontify) + (defvar font-lock-support-mode) + (defvar global-font-lock-mode)) + +(defconst htmlize-version "1.55") + +(defgroup htmlize nil + "Convert buffer text and faces to HTML." + :group 'hypermedia) + +(defcustom htmlize-head-tags "" + "Additional tags to insert within HEAD of the generated document." + :type 'string + :group 'htmlize) + +(defcustom htmlize-output-type 'css + "Output type of generated HTML, one of `css', `inline-css', or `font'. +When set to `css' (the default), htmlize will generate a style sheet +with description of faces, and use it in the HTML document, specifying +the faces in the actual text with . + +When set to `inline-css', the style will be generated as above, but +placed directly in the STYLE attribute of the span ELEMENT: . This makes it easier to paste the resulting HTML to +other documents. + +When set to `font', the properties will be set using layout tags +, , , , and . + +`css' output is normally preferred, but `font' is still useful for +supporting old, pre-CSS browsers, and both `inline-css' and `font' for +easier embedding of colorized text in foreign HTML documents (no style +sheet to carry around)." + :type '(choice (const css) (const inline-css) (const font)) + :group 'htmlize) + +(defcustom htmlize-use-images t + "Whether htmlize generates `img' for images attached to buffer contents." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-force-inline-images nil + "Non-nil means generate all images inline using data URLs. +Normally htmlize converts image descriptors with :file properties to +relative URIs, and those with :data properties to data URIs. With this +flag set, the images specified as a file name are loaded into memory and +embedded in the HTML as data URIs." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-max-alt-text 100 + "Maximum size of text to use as ALT text in images. + +Normally when htmlize encounters text covered by the `display' property +that specifies an image, it generates an `alt' attribute containing the +original text. If the text is larger than `htmlize-max-alt-text' characters, +this will not be done." + :type 'integer + :group 'htmlize) + +(defcustom htmlize-transform-image 'htmlize-default-transform-image + "Function called to modify the image descriptor. + +The function is called with the image descriptor found in the buffer and +the text the image is supposed to replace. It should return a (possibly +different) image descriptor property list or a replacement string to use +instead of of the original buffer text. + +Returning nil is the same as returning the original text." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-generate-hyperlinks t + "Non-nil means auto-generate the links from URLs and mail addresses in buffer. + +This is on by default; set it to nil if you don't want htmlize to +autogenerate such links. Note that this option only turns off automatic +search for contents that looks like URLs and converting them to links. +It has no effect on whether htmlize respects the `htmlize-link' property." + :type 'boolean + :group 'htmlize) + +(defcustom htmlize-hyperlink-style " + a { + color: inherit; + background-color: inherit; + font: inherit; + text-decoration: inherit; + } + a:hover { + text-decoration: underline; + } +" + "The CSS style used for hyperlinks when in CSS mode." + :type 'string + :group 'htmlize) + +(defcustom htmlize-replace-form-feeds t + "Non-nil means replace form feeds in source code with HTML separators. +Form feeds are the ^L characters at line beginnings that are sometimes +used to separate sections of source code. If this variable is set to +`t', form feed characters are replaced with the
    separator. If this +is a string, it specifies the replacement to use. Note that
     is
    +temporarily closed before the separator is inserted, so the default
    +replacement is effectively \"

    \".  If you specify
    +another replacement, don't forget to close and reopen the 
     if you
    +want the output to remain valid HTML.
    +
    +If you need more elaborate processing, set this to nil and use
    +htmlize-after-hook."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defcustom htmlize-html-charset nil
    +  "The charset declared by the resulting HTML documents.
    +When non-nil, causes htmlize to insert the following in the HEAD section
    +of the generated HTML:
    +
    +  
    +
    +where CHARSET is the value you've set for htmlize-html-charset.  Valid
    +charsets are defined by MIME and include strings like \"iso-8859-1\",
    +\"iso-8859-15\", \"utf-8\", etc.
    +
    +If you are using non-Latin-1 charsets, you might need to set this for
    +your documents to render correctly.  Also, the W3C validator requires
    +submitted HTML documents to declare a charset.  So if you care about
    +validation, you can use this to prevent the validator from bitching.
    +
    +Needless to say, if you set this, you should actually make sure that
    +the buffer is in the encoding you're claiming it is in.  (This is
    +normally achieved by using the correct file coding system for the
    +buffer.)  If you don't understand what that means, you should probably
    +leave this option in its default setting."
    +  :type '(choice (const :tag "Unset" nil)
    +		 string)
    +  :group 'htmlize)
    +
    +(defcustom htmlize-convert-nonascii-to-entities t
    +  "Whether non-ASCII characters should be converted to HTML entities.
    +
    +When this is non-nil, characters with codes in the 128-255 range will be
    +considered Latin 1 and rewritten as \"&#CODE;\".  Characters with codes
    +above 255 will be converted to \"&#UCS;\", where UCS denotes the Unicode
    +code point of the character.  If the code point cannot be determined,
    +the character will be copied unchanged, as would be the case if the
    +option were nil.
    +
    +When the option is nil, the non-ASCII characters are copied to HTML
    +without modification.  In that case, the web server and/or the browser
    +must be set to understand the encoding that was used when saving the
    +buffer.  (You might also want to specify it by setting
    +`htmlize-html-charset'.)
    +
    +Note that in an HTML entity \"&#CODE;\", CODE is always a UCS code point,
    +which has nothing to do with the charset the page is in.  For example,
    +\"©\" *always* refers to the copyright symbol, regardless of charset
    +specified by the META tag or the charset sent by the HTTP server.  In
    +other words, \"©\" is exactly equivalent to \"©\".
    +
    +For most people htmlize will work fine with this option left at the
    +default setting; don't change it unless you know what you're doing."
    +  :type 'sexp
    +  :group 'htmlize)
    +
    +(defcustom htmlize-ignore-face-size 'absolute
    +  "Whether face size should be ignored when generating HTML.
    +If this is nil, face sizes are used.  If set to t, sizes are ignored
    +If set to `absolute', only absolute size specifications are ignored.
    +Please note that font sizes only work with CSS-based output types."
    +  :type '(choice (const :tag "Don't ignore" nil)
    +		 (const :tag "Ignore all" t)
    +		 (const :tag "Ignore absolute" absolute))
    +  :group 'htmlize)
    +
    +(defcustom htmlize-css-name-prefix ""
    +  "The prefix used for CSS names.
    +The CSS names that htmlize generates from face names are often too
    +generic for CSS files; for example, `font-lock-type-face' is transformed
    +to `type'.  Use this variable to add a prefix to the generated names.
    +The string \"htmlize-\" is an example of a reasonable prefix."
    +  :type 'string
    +  :group 'htmlize)
    +
    +(defcustom htmlize-use-rgb-txt t
    +  "Whether `rgb.txt' should be used to convert color names to RGB.
    +
    +This conversion means determining, for instance, that the color
    +\"IndianRed\" corresponds to the (205, 92, 92) RGB triple.  `rgb.txt'
    +is the X color database that maps hundreds of color names to such RGB
    +triples.  When this variable is non-nil, `htmlize' uses `rgb.txt' to
    +look up color names.
    +
    +If this variable is nil, htmlize queries Emacs for RGB components of
    +colors using `color-instance-rgb-components' and `color-values'.
    +This can yield incorrect results on non-true-color displays.
    +
    +If the `rgb.txt' file is not found (which will be the case if you're
    +running Emacs on non-X11 systems), this option is ignored."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defvar htmlize-face-overrides nil
    +  "Overrides for face definitions.
    +
    +Normally face definitions are taken from Emacs settings for fonts
    +in the current frame.  For faces present in this plist, the
    +definitions will be used instead.  Keys in the plist are symbols
    +naming the face and values are the overriding definitions.  For
    +example:
    +
    +  (setq htmlize-face-overrides
    +        '(font-lock-warning-face \"black\"
    +          font-lock-function-name-face \"red\"
    +          font-lock-comment-face \"blue\"
    +          default (:foreground \"dark-green\" :background \"yellow\")))
    +
    +This variable can be also be `let' bound when running `htmlize-buffer'.")
    +
    +(defcustom htmlize-untabify t
    +  "Non-nil means untabify buffer contents during htmlization."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defcustom htmlize-html-major-mode nil
    +  "The mode the newly created HTML buffer will be put in.
    +Set this to nil if you prefer the default (fundamental) mode."
    +  :type '(radio (const :tag "No mode (fundamental)" nil)
    +		 (function-item html-mode)
    +		 (function :tag "User-defined major mode"))
    +  :group 'htmlize)
    +
    +(defcustom htmlize-pre-style nil
    +  "When non-nil, `
    ' tags will be decorated with style
    +information in `font' and `inline-css' modes. This allows a
    +consistent background for captures of regions."
    +  :type 'boolean
    +  :group 'htmlize)
    +
    +(defvar htmlize-before-hook nil
    +  "Hook run before htmlizing a buffer.
    +The hook functions are run in the source buffer (not the resulting HTML
    +buffer).")
    +
    +(defvar htmlize-after-hook nil
    +  "Hook run after htmlizing a buffer.
    +Unlike `htmlize-before-hook', these functions are run in the generated
    +HTML buffer.  You may use them to modify the outlook of the final HTML
    +output.")
    +
    +(defvar htmlize-file-hook nil
    +  "Hook run by `htmlize-file' after htmlizing a file, but before saving it.")
    +
    +(defvar htmlize-buffer-places)
    +
    +;;; Some cross-Emacs compatibility.
    +
    +;; We need a function that efficiently finds the next change of a
    +;; property regardless of whether the change occurred because of a
    +;; text property or an extent/overlay.
    +(defun htmlize-next-change (pos prop &optional limit)
    +  (if prop
    +      (next-single-char-property-change pos prop nil limit)
    +    (next-char-property-change pos limit)))
    +
    +(defun htmlize-overlay-faces-at (pos)
    +  (delq nil (mapcar (lambda (o) (overlay-get o 'face)) (overlays-at pos))))
    +
    +(defun htmlize-next-face-change (pos &optional limit)
    +  ;; (htmlize-next-change pos 'face limit) would skip over entire
    +  ;; overlays that specify the `face' property, even when they
    +  ;; contain smaller text properties that also specify `face'.
    +  ;; Emacs display engine merges those faces, and so must we.
    +  (or limit
    +      (setq limit (point-max)))
    +  (let ((next-prop (next-single-property-change pos 'face nil limit))
    +        (overlay-faces (htmlize-overlay-faces-at pos)))
    +    (while (progn
    +             (setq pos (next-overlay-change pos))
    +             (and (< pos next-prop)
    +                  (equal overlay-faces (htmlize-overlay-faces-at pos)))))
    +    (setq pos (min pos next-prop))
    +    ;; Additionally, we include the entire region that specifies the
    +    ;; `display' property.
    +    (when (get-char-property pos 'display)
    +      (setq pos (next-single-char-property-change pos 'display nil limit)))
    +    pos))
    +
    +(defmacro htmlize-lexlet (&rest letforms)
    +  (declare (indent 1) (debug let))
    +  (if (and (boundp 'lexical-binding)
    +           lexical-binding)
    +      `(let ,@letforms)
    +    ;; cl extensions have a macro implementing lexical let
    +    `(lexical-let ,@letforms)))
    +
    +
    +;;; Transformation of buffer text: HTML escapes, untabification, etc.
    +
    +(defvar htmlize-basic-character-table
    +  ;; Map characters in the 0-127 range to either one-character strings
    +  ;; or to numeric entities.
    +  (let ((table (make-vector 128 ?\0)))
    +    ;; Map characters in the 32-126 range to themselves, others to
    +    ;; &#CODE entities;
    +    (dotimes (i 128)
    +      (setf (aref table i) (if (and (>= i 32) (<= i 126))
    +			       (char-to-string i)
    +			     (format "&#%d;" i))))
    +    ;; Set exceptions manually.
    +    (setf
    +     ;; Don't escape newline, carriage return, and TAB.
    +     (aref table ?\n) "\n"
    +     (aref table ?\r) "\r"
    +     (aref table ?\t) "\t"
    +     ;; Escape &, <, and >.
    +     (aref table ?&) "&"
    +     (aref table ?<) "<"
    +     (aref table ?>) ">"
    +     ;; Not escaping '"' buys us a measurable speedup.  It's only
    +     ;; necessary to quote it for strings used in attribute values,
    +     ;; which htmlize doesn't typically do.
    +     ;(aref table ?\") """
    +     )
    +    table))
    +
    +;; A cache of HTML representation of non-ASCII characters.  Depending
    +;; on the setting of `htmlize-convert-nonascii-to-entities', this maps
    +;; non-ASCII characters to either "&#;" or "" (mapconcat's
    +;; mapper must always return strings).  It's only filled as characters
    +;; are encountered, so that in a buffer with e.g. French text, it will
    +;; only ever contain French accented characters as keys.  It's cleared
    +;; on each entry to htmlize-buffer-1 to allow modifications of
    +;; `htmlize-convert-nonascii-to-entities' to take effect.
    +(defvar htmlize-extended-character-cache (make-hash-table :test 'eq))
    +
    +(defun htmlize-protect-string (string)
    +  "HTML-protect string, escaping HTML metacharacters and I18N chars."
    +  ;; Only protecting strings that actually contain unsafe or non-ASCII
    +  ;; chars removes a lot of unnecessary funcalls and consing.
    +  (if (not (string-match "[^\r\n\t -%'-;=?-~]" string))
    +      string
    +    (mapconcat (lambda (char)
    +		 (cond
    +		  ((< char 128)
    +		   ;; ASCII: use htmlize-basic-character-table.
    +		   (aref htmlize-basic-character-table char))
    +		  ((gethash char htmlize-extended-character-cache)
    +		   ;; We've already seen this char; return the cached
    +		   ;; string.
    +		   )
    +		  ((not htmlize-convert-nonascii-to-entities)
    +		   ;; If conversion to entities is not desired, always
    +		   ;; copy the char literally.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (char-to-string char)))
    +		  ((< char 256)
    +		   ;; Latin 1: no need to call encode-char.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (format "&#%d;" char)))
    +		  ((encode-char char 'ucs)
    +                   ;; Must check if encode-char works for CHAR;
    +                   ;; it fails for Arabic and possibly elsewhere.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (format "&#%d;" (encode-char char 'ucs))))
    +		  (t
    +		   ;; encode-char doesn't work for this char.  Copy it
    +		   ;; unchanged and hope for the best.
    +		   (setf (gethash char htmlize-extended-character-cache)
    +			 (char-to-string char)))))
    +	       string "")))
    +
    +(defun htmlize-attr-escape (string)
    +  ;; Like htmlize-protect-string, but also escapes double-quoted
    +  ;; strings to make it usable in attribute values.
    +  (setq string (htmlize-protect-string string))
    +  (if (not (string-match "\"" string))
    +      string
    +    (mapconcat (lambda (char)
    +                 (if (eql char ?\")
    +                     """
    +                   (char-to-string char)))
    +               string "")))
    +
    +(defsubst htmlize-concat (list)
    +  (if (and (consp list) (null (cdr list)))
    +      ;; Don't create a new string in the common case where the list only
    +      ;; consists of one element.
    +      (car list)
    +    (apply #'concat list)))
    +
    +(defun htmlize-format-link (linkprops text)
    +  (let ((uri (if (stringp linkprops)
    +                 linkprops
    +               (plist-get linkprops :uri)))
    +        (escaped-text (htmlize-protect-string text)))
    +    (if uri
    +        (format "%s" (htmlize-attr-escape uri) escaped-text)
    +      escaped-text)))
    +
    +(defun htmlize-escape-or-link (string)
    +  ;; Escape STRING and/or add hyperlinks.  STRING comes from a
    +  ;; `display' property.
    +  (let ((pos 0) (end (length string)) outlist)
    +    (while (< pos end)
    +      (let* ((link (get-char-property pos 'htmlize-link string))
    +             (next-link-change (next-single-property-change
    +                                pos 'htmlize-link string end))
    +             (chunk (substring string pos next-link-change)))
    +        (push
    +         (cond (link
    +                (htmlize-format-link link chunk))
    +               ((get-char-property 0 'htmlize-literal chunk)
    +                chunk)
    +               (t
    +                (htmlize-protect-string chunk)))
    +         outlist)
    +        (setq pos next-link-change)))
    +    (htmlize-concat (nreverse outlist))))
    +
    +(defun htmlize-display-prop-to-html (display text)
    +  (let (desc)
    +    (cond ((stringp display)
    +           ;; Emacs ignores recursive display properties.
    +           (htmlize-escape-or-link display))
    +          ((not (eq (car-safe display) 'image))
    +           (htmlize-protect-string text))
    +          ((null (setq desc (funcall htmlize-transform-image
    +                                     (cdr display) text)))
    +           (htmlize-escape-or-link text))
    +          ((stringp desc)
    +           (htmlize-escape-or-link desc))
    +          (t
    +           (htmlize-generate-image desc text)))))
    +
    +(defun htmlize-string-to-html (string)
    +  ;; Convert the string to HTML, including images attached as
    +  ;; `display' property and links as `htmlize-link' property.  In a
    +  ;; string without images or links, this is equivalent to
    +  ;; `htmlize-protect-string'.
    +  (let ((pos 0) (end (length string)) outlist)
    +    (while (< pos end)
    +      (let* ((display (get-char-property pos 'display string))
    +             (next-display-change (next-single-property-change
    +                                   pos 'display string end))
    +             (chunk (substring string pos next-display-change)))
    +        (push
    +         (if display
    +             (htmlize-display-prop-to-html display chunk)
    +           (htmlize-escape-or-link chunk))
    +         outlist)
    +        (setq pos next-display-change)))
    +    (htmlize-concat (nreverse outlist))))
    +
    +(defun htmlize-default-transform-image (imgprops _text)
    +  "Default transformation of image descriptor to something usable in HTML.
    +
    +If `htmlize-use-images' is nil, the function always returns nil, meaning
    +use original text.  Otherwise, it tries to find the image for images that
    +specify a file name.  If `htmlize-force-inline-images' is non-nil, it also
    +converts the :file attribute to :data and returns the modified property
    +list."
    +  (when htmlize-use-images
    +    (when (plist-get imgprops :file)
    +      (let ((location (plist-get (cdr (find-image (list imgprops))) :file)))
    +        (when location
    +          (setq imgprops (plist-put (copy-list imgprops) :file location)))))
    +    (if htmlize-force-inline-images
    +        (let ((location (plist-get imgprops :file))
    +              data)
    +          (when location
    +            (with-temp-buffer
    +              (condition-case nil
    +                  (progn
    +                    (insert-file-contents-literally location)
    +                    (setq data (buffer-string)))
    +                (error nil))))
    +          ;; if successful, return the new plist, otherwise return
    +          ;; nil, which will use the original text
    +          (and data
    +               (plist-put (plist-put imgprops :file nil)
    +                          :data data)))
    +      imgprops)))
    +
    +(defun htmlize-alt-text (_imgprops origtext)
    +  (and (/= (length origtext) 0)
    +       (<= (length origtext) htmlize-max-alt-text)
    +       (not (string-match "[\0-\x1f]" origtext))
    +       origtext))
    +
    +(defun htmlize-generate-image (imgprops origtext)
    +  (let* ((alt-text (htmlize-alt-text imgprops origtext))
    +         (alt-attr (if alt-text
    +                       (format " alt=\"%s\"" (htmlize-attr-escape alt-text))
    +                     "")))
    +    (cond ((plist-get imgprops :file)
    +           ;; Try to find the image in image-load-path
    +           (let* ((found-props (cdr (find-image (list imgprops))))
    +                  (file (or (plist-get found-props :file)
    +                            (plist-get imgprops :file))))
    +             (format ""
    +                     (htmlize-attr-escape (file-relative-name file))
    +                     alt-attr)))
    +          ((plist-get imgprops :data)
    +           (format ""
    +                   (or (plist-get imgprops :type) "")
    +                   (base64-encode-string (plist-get imgprops :data))
    +                   alt-attr)))))
    +
    +(defconst htmlize-ellipsis "...")
    +(put-text-property 0 (length htmlize-ellipsis) 'htmlize-ellipsis t htmlize-ellipsis)
    +
    +(defun htmlize-match-inv-spec (inv)
    +  (member* inv buffer-invisibility-spec
    +           :key (lambda (i)
    +                  (if (symbolp i) i (car i)))))
    +
    +(defun htmlize-decode-invisibility-spec (invisible)
    +  ;; Return t, nil, or `ellipsis', depending on how invisible text should be inserted.
    +
    +  (if (not (listp buffer-invisibility-spec))
    +      ;; If buffer-invisibility-spec is not a list, then all
    +      ;; characters with non-nil `invisible' property are visible.
    +      (not invisible)
    +
    +    ;; Otherwise, the value of a non-nil `invisible' property can be:
    +    ;; 1. a symbol -- make the text invisible if it matches
    +    ;;    buffer-invisibility-spec.
    +    ;; 2. a list of symbols -- make the text invisible if
    +    ;;    any symbol in the list matches
    +    ;;    buffer-invisibility-spec.
    +    ;; If the match of buffer-invisibility-spec has a non-nil
    +    ;; CDR, replace the invisible text with an ellipsis.
    +    (let ((match (if (symbolp invisible)
    +                     (htmlize-match-inv-spec invisible)
    +                   (some #'htmlize-match-inv-spec invisible))))
    +      (cond ((null match) t)
    +            ((cdr-safe (car match)) 'ellipsis)
    +            (t nil)))))
    +
    +(defun htmlize-add-before-after-strings (beg end text)
    +  ;; Find overlays specifying before-string and after-string in [beg,
    +  ;; pos).  If any are found, splice them into TEXT and return the new
    +  ;; text.
    +  (let (additions)
    +    (dolist (overlay (overlays-in beg end))
    +      (let ((before (overlay-get overlay 'before-string))
    +            (after (overlay-get overlay 'after-string)))
    +        (when after
    +          (push (cons (- (overlay-end overlay) beg)
    +                      after)
    +                additions))
    +        (when before
    +          (push (cons (- (overlay-start overlay) beg)
    +                      before)
    +                additions))))
    +    (if additions
    +        (let ((textlist nil)
    +              (strpos 0))
    +          (dolist (add (stable-sort additions #'< :key #'car))
    +            (let ((addpos (car add))
    +                  (addtext (cdr add)))
    +              (push (substring text strpos addpos) textlist)
    +              (push addtext textlist)
    +              (setq strpos addpos)))
    +          (push (substring text strpos) textlist)
    +          (apply #'concat (nreverse textlist)))
    +      text)))
    +
    +(defun htmlize-copy-prop (prop beg end string)
    +  ;; Copy the specified property from the specified region of the
    +  ;; buffer to the target string.  We cannot rely on Emacs to copy the
    +  ;; property because we want to handle properties coming from both
    +  ;; text properties and overlays.
    +  (let ((pos beg))
    +    (while (< pos end)
    +      (let ((value (get-char-property pos prop))
    +            (next-change (htmlize-next-change pos prop end)))
    +        (when value
    +          (put-text-property (- pos beg) (- next-change beg)
    +                             prop value string))
    +        (setq pos next-change)))))
    +
    +(defun htmlize-get-text-with-display (beg end)
    +  ;; Like buffer-substring-no-properties, except it copies the
    +  ;; `display' property from the buffer, if found.
    +  (let ((text (buffer-substring-no-properties beg end)))
    +    (htmlize-copy-prop 'display beg end text)
    +    (htmlize-copy-prop 'htmlize-link beg end text)
    +    (setq text (htmlize-add-before-after-strings beg end text))
    +    text))
    +
    +(defun htmlize-buffer-substring-no-invisible (beg end)
    +  ;; Like buffer-substring-no-properties, but don't copy invisible
    +  ;; parts of the region.  Where buffer-substring-no-properties
    +  ;; mandates an ellipsis to be shown, htmlize-ellipsis is inserted.
    +  (let ((pos beg)
    +	visible-list invisible show last-show next-change)
    +    ;; Iterate over the changes in the `invisible' property and filter
    +    ;; out the portions where it's non-nil, i.e. where the text is
    +    ;; invisible.
    +    (while (< pos end)
    +      (setq invisible (get-char-property pos 'invisible)
    +	    next-change (htmlize-next-change pos 'invisible end)
    +            show (htmlize-decode-invisibility-spec invisible))
    +      (cond ((eq show t)
    +	     (push (htmlize-get-text-with-display pos next-change)
    +                   visible-list))
    +            ((and (eq show 'ellipsis)
    +                  (not (eq last-show 'ellipsis))
    +                  ;; Conflate successive ellipses.
    +                  (push htmlize-ellipsis visible-list))))
    +      (setq pos next-change last-show show))
    +    (htmlize-concat (nreverse visible-list))))
    +
    +(defun htmlize-trim-ellipsis (text)
    +  ;; Remove htmlize-ellipses ("...") from the beginning of TEXT if it
    +  ;; starts with it.  It checks for the special property of the
    +  ;; ellipsis so it doesn't work on ordinary text that begins with
    +  ;; "...".
    +  (if (get-text-property 0 'htmlize-ellipsis text)
    +      (substring text (length htmlize-ellipsis))
    +    text))
    +
    +(defconst htmlize-tab-spaces
    +  ;; A table of strings with spaces.  (aref htmlize-tab-spaces 5) is
    +  ;; like (make-string 5 ?\ ), except it doesn't cons.
    +  (let ((v (make-vector 32 nil)))
    +    (dotimes (i (length v))
    +      (setf (aref v i) (make-string i ?\ )))
    +    v))
    +
    +(defun htmlize-untabify-string (text start-column)
    +  "Untabify TEXT, assuming it starts at START-COLUMN."
    +  (let ((column start-column)
    +	(last-match 0)
    +	(chunk-start 0)
    +	chunks match-pos tab-size)
    +    (while (string-match "[\t\n]" text last-match)
    +      (setq match-pos (match-beginning 0))
    +      (cond ((eq (aref text match-pos) ?\t)
    +	     ;; Encountered a tab: create a chunk of text followed by
    +	     ;; the expanded tab.
    +	     (push (substring text chunk-start match-pos) chunks)
    +	     ;; Increase COLUMN by the length of the text we've
    +	     ;; skipped since last tab or newline.  (Encountering
    +	     ;; newline resets it.)
    +	     (incf column (- match-pos last-match))
    +	     ;; Calculate tab size based on tab-width and COLUMN.
    +	     (setq tab-size (- tab-width (% column tab-width)))
    +	     ;; Expand the tab, carefully recreating the `display'
    +	     ;; property if one was on the TAB.
    +             (let ((display (get-text-property match-pos 'display text))
    +                   (expanded-tab (aref htmlize-tab-spaces tab-size)))
    +               (when display
    +                 (put-text-property 0 tab-size 'display display expanded-tab))
    +               (push expanded-tab chunks))
    +	     (incf column tab-size)
    +	     (setq chunk-start (1+ match-pos)))
    +	    (t
    +	     ;; Reset COLUMN at beginning of line.
    +	     (setq column 0)))
    +      (setq last-match (1+ match-pos)))
    +    ;; If no chunks have been allocated, it means there have been no
    +    ;; tabs to expand.  Return TEXT unmodified.
    +    (if (null chunks)
    +	text
    +      (when (< chunk-start (length text))
    +	;; Push the remaining chunk.
    +	(push (substring text chunk-start) chunks))
    +      ;; Generate the output from the available chunks.
    +      (htmlize-concat (nreverse chunks)))))
    +
    +(defun htmlize-extract-text (beg end trailing-ellipsis)
    +  ;; Extract buffer text, sans the invisible parts.  Then
    +  ;; untabify it and escape the HTML metacharacters.
    +  (let ((text (htmlize-buffer-substring-no-invisible beg end)))
    +    (when trailing-ellipsis
    +      (setq text (htmlize-trim-ellipsis text)))
    +    ;; If TEXT ends up empty, don't change trailing-ellipsis.
    +    (when (> (length text) 0)
    +      (setq trailing-ellipsis
    +            (get-text-property (1- (length text))
    +                               'htmlize-ellipsis text)))
    +    (when htmlize-untabify
    +      (setq text (htmlize-untabify-string text (current-column))))
    +    (setq text (htmlize-string-to-html text))
    +    (values text trailing-ellipsis)))
    +
    +(defun htmlize-despam-address (string)
    +  "Replace every occurrence of '@' in STRING with %40.
    +This is used to protect mailto links without modifying their meaning."
    +  ;; Suggested by Ville Skytta.
    +  (while (string-match "@" string)
    +    (setq string (replace-match "%40" nil t string)))
    +  string)
    +
    +(defun htmlize-make-tmp-overlay (beg end props)
    +  (let ((overlay (make-overlay beg end)))
    +    (overlay-put overlay 'htmlize-tmp-overlay t)
    +    (while props
    +      (overlay-put overlay (pop props) (pop props)))
    +    overlay))
    +
    +(defun htmlize-delete-tmp-overlays ()
    +  (dolist (overlay (overlays-in (point-min) (point-max)))
    +    (when (overlay-get overlay 'htmlize-tmp-overlay)
    +      (delete-overlay overlay))))
    +
    +(defun htmlize-make-link-overlay (beg end uri)
    +  (htmlize-make-tmp-overlay beg end `(htmlize-link (:uri ,uri))))
    +
    +(defun htmlize-create-auto-links ()
    +  "Add `htmlize-link' property to all mailto links in the buffer."
    +  (save-excursion
    +    (goto-char (point-min))
    +    (while (re-search-forward
    +            "<\\(\\(mailto:\\)?\\([-=+_.a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\\)\\)>"
    +            nil t)
    +      (let* ((address (match-string 3))
    +             (beg (match-beginning 0)) (end (match-end 0))
    +             (uri (concat "mailto:" (htmlize-despam-address address))))
    +        (htmlize-make-link-overlay beg end uri)))
    +    (goto-char (point-min))
    +    (while (re-search-forward "<\\(\\(URL:\\)?\\([a-zA-Z]+://[^;]+\\)\\)>"
    +                              nil t)
    +      (htmlize-make-link-overlay
    +       (match-beginning 0) (match-end 0) (match-string 3)))))
    +
    +;; Tests for htmlize-create-auto-links:
    +
    +;; 
    +;; 
    +;; 
    +;; 
    +;; 
    +;; 
    +
    +(defun htmlize-shadow-form-feeds ()
    +  (let ((s "\n
    ")) + (put-text-property 0 (length s) 'htmlize-literal t s) + (let ((disp `(display ,s))) + (while (re-search-forward "\n\^L" nil t) + (let* ((beg (match-beginning 0)) + (end (match-end 0)) + (form-feed-pos (1+ beg)) + ;; don't process ^L if invisible or covered by `display' + (show (and (htmlize-decode-invisibility-spec + (get-char-property form-feed-pos 'invisible)) + (not (get-char-property form-feed-pos 'display))))) + (when show + (htmlize-make-tmp-overlay beg end disp))))))) + +(defun htmlize-defang-local-variables () + ;; Juri Linkov reports that an HTML-ized "Local variables" can lead + ;; visiting the HTML to fail with "Local variables list is not + ;; properly terminated". He suggested changing the phrase to + ;; syntactically equivalent HTML that Emacs doesn't recognize. + (goto-char (point-min)) + (while (search-forward "Local Variables:" nil t) + (replace-match "Local Variables:" nil t))) + + +;;; Color handling. + +(defvar htmlize-x-library-search-path + `(,data-directory + "/etc/X11/rgb.txt" + "/usr/share/X11/rgb.txt" + ;; the remainder of this list really belongs in a museum + "/usr/X11R6/lib/X11/" + "/usr/X11R5/lib/X11/" + "/usr/lib/X11R6/X11/" + "/usr/lib/X11R5/X11/" + "/usr/local/X11R6/lib/X11/" + "/usr/local/X11R5/lib/X11/" + "/usr/local/lib/X11R6/X11/" + "/usr/local/lib/X11R5/X11/" + "/usr/X11/lib/X11/" + "/usr/lib/X11/" + "/usr/local/lib/X11/" + "/usr/X386/lib/X11/" + "/usr/x386/lib/X11/" + "/usr/XFree86/lib/X11/" + "/usr/unsupported/lib/X11/" + "/usr/athena/lib/X11/" + "/usr/local/x11r5/lib/X11/" + "/usr/lpp/Xamples/lib/X11/" + "/usr/openwin/lib/X11/" + "/usr/openwin/share/lib/X11/")) + +(defun htmlize-get-color-rgb-hash (&optional rgb-file) + "Return a hash table mapping X color names to RGB values. +The keys in the hash table are X11 color names, and the values are the +#rrggbb RGB specifications, extracted from `rgb.txt'. + +If RGB-FILE is nil, the function will try hard to find a suitable file +in the system directories. + +If no rgb.txt file is found, return nil." + (let ((rgb-file (or rgb-file (locate-file + "rgb.txt" + htmlize-x-library-search-path))) + (hash nil)) + (when rgb-file + (with-temp-buffer + (insert-file-contents rgb-file) + (setq hash (make-hash-table :test 'equal)) + (while (not (eobp)) + (cond ((looking-at "^\\s-*\\([!#]\\|$\\)") + ;; Skip comments and empty lines. + ) + ((looking-at + "[ \t]*\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\(.*\\)") + (setf (gethash (downcase (match-string 4)) hash) + (format "#%02x%02x%02x" + (string-to-number (match-string 1)) + (string-to-number (match-string 2)) + (string-to-number (match-string 3))))) + (t + (error + "Unrecognized line in %s: %s" + rgb-file + (buffer-substring (point) (progn (end-of-line) (point)))))) + (forward-line 1)))) + hash)) + +;; Compile the RGB map when loaded. On systems where rgb.txt is +;; missing, the value of the variable will be nil, and rgb.txt will +;; not be used. +(defvar htmlize-color-rgb-hash (htmlize-get-color-rgb-hash)) + +;;; Face handling. + +(defun htmlize-face-color-internal (face fg) + ;; Used only under GNU Emacs. Return the color of FACE, but don't + ;; return "unspecified-fg" or "unspecified-bg". If the face is + ;; `default' and the color is unspecified, look up the color in + ;; frame parameters. + (let* ((function (if fg #'face-foreground #'face-background)) + (color (funcall function face nil t))) + (when (and (eq face 'default) (null color)) + (setq color (cdr (assq (if fg 'foreground-color 'background-color) + (frame-parameters))))) + (when (or (eq color 'unspecified) + (equal color "unspecified-fg") + (equal color "unspecified-bg")) + (setq color nil)) + (when (and (eq face 'default) + (null color)) + ;; Assuming black on white doesn't seem right, but I can't think + ;; of anything better to do. + (setq color (if fg "black" "white"))) + color)) + +(defun htmlize-face-foreground (face) + ;; Return the name of the foreground color of FACE. If FACE does + ;; not specify a foreground color, return nil. + (htmlize-face-color-internal face t)) + +(defun htmlize-face-background (face) + ;; Return the name of the background color of FACE. If FACE does + ;; not specify a background color, return nil. + ;; GNU Emacs. + (htmlize-face-color-internal face nil)) + +;; Convert COLOR to the #RRGGBB string. If COLOR is already in that +;; format, it's left unchanged. + +(defun htmlize-color-to-rgb (color) + (let ((rgb-string nil)) + (cond ((null color) + ;; Ignore nil COLOR because it means that the face is not + ;; specifying any color. Hence (htmlize-color-to-rgb nil) + ;; returns nil. + ) + ((string-match "\\`#" color) + ;; The color is already in #rrggbb format. + (setq rgb-string color)) + ((and htmlize-use-rgb-txt + htmlize-color-rgb-hash) + ;; Use of rgb.txt is requested, and it's available on the + ;; system. Use it. + (setq rgb-string (gethash (downcase color) htmlize-color-rgb-hash))) + (t + ;; We're getting the RGB components from Emacs. + (let ((rgb (mapcar (lambda (arg) + (/ arg 256)) + (color-values color)))) + (when rgb + (setq rgb-string (apply #'format "#%02x%02x%02x" rgb)))))) + ;; If RGB-STRING is still nil, it means the color cannot be found, + ;; for whatever reason. In that case just punt and return COLOR. + ;; Most browsers support a decent set of color names anyway. + (or rgb-string color))) + +;; We store the face properties we care about into an +;; `htmlize-fstruct' type. That way we only have to analyze face +;; properties, which can be time consuming, once per each face. The +;; mapping between Emacs faces and htmlize-fstructs is established by +;; htmlize-make-face-map. The name "fstruct" refers to variables of +;; type `htmlize-fstruct', while the term "face" is reserved for Emacs +;; faces. + +(defstruct htmlize-fstruct + foreground ; foreground color, #rrggbb + background ; background color, #rrggbb + size ; size + boldp ; whether face is bold + italicp ; whether face is italic + underlinep ; whether face is underlined + overlinep ; whether face is overlined + strikep ; whether face is struck through + css-name ; CSS name of face + ) + +(defun htmlize-face-set-from-keyword-attr (fstruct attr value) + ;; For ATTR and VALUE, set the equivalent value in FSTRUCT. + (case attr + (:foreground + (setf (htmlize-fstruct-foreground fstruct) (htmlize-color-to-rgb value))) + (:background + (setf (htmlize-fstruct-background fstruct) (htmlize-color-to-rgb value))) + (:height + (setf (htmlize-fstruct-size fstruct) value)) + (:weight + (when (string-match (symbol-name value) "bold") + (setf (htmlize-fstruct-boldp fstruct) t))) + (:slant + (setf (htmlize-fstruct-italicp fstruct) (or (eq value 'italic) + (eq value 'oblique)))) + (:bold + (setf (htmlize-fstruct-boldp fstruct) value)) + (:italic + (setf (htmlize-fstruct-italicp fstruct) value)) + (:underline + (setf (htmlize-fstruct-underlinep fstruct) value)) + (:overline + (setf (htmlize-fstruct-overlinep fstruct) value)) + (:strike-through + (setf (htmlize-fstruct-strikep fstruct) value)))) + +(defun htmlize-face-size (face) + ;; The size (height) of FACE, taking inheritance into account. + ;; Only works in Emacs 21 and later. + (let* ((face-list (list face)) + (head face-list) + (tail face-list)) + (while head + (let ((inherit (face-attribute (car head) :inherit))) + (cond ((listp inherit) + (setcdr tail (copy-list inherit)) + (setq tail (last tail))) + ((eq inherit 'unspecified)) + (t + (setcdr tail (list inherit)) + (setq tail (cdr tail))))) + (pop head)) + (let ((size-list + (loop + for f in face-list + for h = (face-attribute f :height) + collect (if (eq h 'unspecified) nil h)))) + (reduce 'htmlize-merge-size (cons nil size-list))))) + +(defun htmlize-face-css-name (face) + ;; Generate the css-name property for the given face. Emacs places + ;; no restrictions on the names of symbols that represent faces -- + ;; any characters may be in the name, even control chars. We try + ;; hard to beat the face name into shape, both esthetically and + ;; according to CSS1 specs. + (let ((name (downcase (symbol-name face)))) + (when (string-match "\\`font-lock-" name) + ;; font-lock-FOO-face -> FOO. + (setq name (replace-match "" t t name))) + (when (string-match "-face\\'" name) + ;; Drop the redundant "-face" suffix. + (setq name (replace-match "" t t name))) + (while (string-match "[^-a-zA-Z0-9]" name) + ;; Drop the non-alphanumerics. + (setq name (replace-match "X" t t name))) + (when (string-match "\\`[-0-9]" name) + ;; CSS identifiers may not start with a digit. + (setq name (concat "X" name))) + ;; After these transformations, the face could come out empty. + (when (equal name "") + (setq name "face")) + ;; Apply the prefix. + (concat htmlize-css-name-prefix name))) + +(defun htmlize-face-to-fstruct-1 (face) + "Convert Emacs face FACE to fstruct, internal." + (let ((fstruct (make-htmlize-fstruct + :foreground (htmlize-color-to-rgb + (htmlize-face-foreground face)) + :background (htmlize-color-to-rgb + (htmlize-face-background face))))) + ;; GNU Emacs + (dolist (attr '(:weight :slant :underline :overline :strike-through)) + (let ((value (face-attribute face attr nil t))) + (when (and value (not (eq value 'unspecified))) + (htmlize-face-set-from-keyword-attr fstruct attr value)))) + (let ((size (htmlize-face-size face))) + (unless (eql size 1.0) ; ignore non-spec + (setf (htmlize-fstruct-size fstruct) size))) + (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face)) + fstruct)) + +(defun htmlize-face-to-fstruct (face) + (let* ((face-list (or (and (symbolp face) + (cdr (assq face face-remapping-alist))) + (list face))) + (fstruct (htmlize-merge-faces + (mapcar (lambda (face) + (if (symbolp face) + (or (htmlize-get-override-fstruct face) + (htmlize-face-to-fstruct-1 face)) + (htmlize-attrlist-to-fstruct face))) + (nreverse face-list))))) + (when (symbolp face) + (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face))) + fstruct)) + +(defmacro htmlize-copy-attr-if-set (attr-list dest source) + ;; Generate code with the following pattern: + ;; (progn + ;; (when (htmlize-fstruct-ATTR source) + ;; (setf (htmlize-fstruct-ATTR dest) (htmlize-fstruct-ATTR source))) + ;; ...) + ;; for the given list of boolean attributes. + (cons 'progn + (loop for attr in attr-list + for attr-sym = (intern (format "htmlize-fstruct-%s" attr)) + collect `(when (,attr-sym ,source) + (setf (,attr-sym ,dest) (,attr-sym ,source)))))) + +(defun htmlize-merge-size (merged next) + ;; Calculate the size of the merge of MERGED and NEXT. + (cond ((null merged) next) + ((integerp next) next) + ((null next) merged) + ((floatp merged) (* merged next)) + ((integerp merged) (round (* merged next))))) + +(defun htmlize-merge-two-faces (merged next) + (htmlize-copy-attr-if-set + (foreground background boldp italicp underlinep overlinep strikep) + merged next) + (setf (htmlize-fstruct-size merged) + (htmlize-merge-size (htmlize-fstruct-size merged) + (htmlize-fstruct-size next))) + merged) + +(defun htmlize-merge-faces (fstruct-list) + (cond ((null fstruct-list) + ;; Nothing to do, return a dummy face. + (make-htmlize-fstruct)) + ((null (cdr fstruct-list)) + ;; Optimize for the common case of a single face, simply + ;; return it. + (car fstruct-list)) + (t + (reduce #'htmlize-merge-two-faces + (cons (make-htmlize-fstruct) fstruct-list))))) + +;; GNU Emacs 20+ supports attribute lists in `face' properties. For +;; example, you can use `(:foreground "red" :weight bold)' as an +;; overlay's "face", or you can even use a list of such lists, etc. +;; We call those "attrlists". +;; +;; htmlize supports attrlist by converting them to fstructs, the same +;; as with regular faces. + +(defun htmlize-attrlist-to-fstruct (attrlist &optional name) + ;; Like htmlize-face-to-fstruct, but accepts an ATTRLIST as input. + (let ((fstruct (make-htmlize-fstruct))) + (cond ((eq (car attrlist) 'foreground-color) + ;; ATTRLIST is (foreground-color . COLOR) + (setf (htmlize-fstruct-foreground fstruct) + (htmlize-color-to-rgb (cdr attrlist)))) + ((eq (car attrlist) 'background-color) + ;; ATTRLIST is (background-color . COLOR) + (setf (htmlize-fstruct-background fstruct) + (htmlize-color-to-rgb (cdr attrlist)))) + (t + ;; ATTRLIST is a plist. + (while attrlist + (let ((attr (pop attrlist)) + (value (pop attrlist))) + (when (and value (not (eq value 'unspecified))) + (htmlize-face-set-from-keyword-attr fstruct attr value)))))) + (setf (htmlize-fstruct-css-name fstruct) (or name "custom")) + fstruct)) + +(defun htmlize-decode-face-prop (prop) + "Turn face property PROP into a list of face-like objects." + ;; PROP can be a symbol naming a face, a string naming such a + ;; symbol, a cons (foreground-color . COLOR) or (background-color + ;; COLOR), a property list (:attr1 val1 :attr2 val2 ...), or a list + ;; of any of those. + ;; + ;; (htmlize-decode-face-prop 'face) -> (face) + ;; (htmlize-decode-face-prop '(face1 face2)) -> (face1 face2) + ;; (htmlize-decode-face-prop '(:attr "val")) -> ((:attr "val")) + ;; (htmlize-decode-face-prop '((:attr "val") face (foreground-color "red"))) + ;; -> ((:attr "val") face (foreground-color "red")) + ;; + ;; Unrecognized atoms or non-face symbols/strings are silently + ;; stripped away. + (cond ((null prop) + nil) + ((symbolp prop) + (and (facep prop) + (list prop))) + ((stringp prop) + (and (facep (intern-soft prop)) + (list prop))) + ((atom prop) + nil) + ((and (symbolp (car prop)) + (eq ?: (aref (symbol-name (car prop)) 0))) + (list prop)) + ((or (eq (car prop) 'foreground-color) + (eq (car prop) 'background-color)) + (list prop)) + (t + (apply #'nconc (mapcar #'htmlize-decode-face-prop prop))))) + +(defun htmlize-get-override-fstruct (face) + (let* ((raw-def (plist-get htmlize-face-overrides face)) + (def (cond ((stringp raw-def) (list :foreground raw-def)) + ((listp raw-def) raw-def) + (t + (error (format (concat "face override must be an " + "attribute list or string, got %s") + raw-def)))))) + (and def + (htmlize-attrlist-to-fstruct def (symbol-name face))))) + +(defun htmlize-make-face-map (faces) + ;; Return a hash table mapping Emacs faces to htmlize's fstructs. + ;; The keys are either face symbols or attrlists, so the test + ;; function must be `equal'. + (let ((face-map (make-hash-table :test 'equal)) + css-names) + (dolist (face faces) + (unless (gethash face face-map) + ;; Haven't seen FACE yet; convert it to an fstruct and cache + ;; it. + (let ((fstruct (htmlize-face-to-fstruct face))) + (setf (gethash face face-map) fstruct) + (let* ((css-name (htmlize-fstruct-css-name fstruct)) + (new-name css-name) + (i 0)) + ;; Uniquify the face's css-name by using NAME-1, NAME-2, + ;; etc. + (while (member new-name css-names) + (setq new-name (format "%s-%s" css-name (incf i)))) + (unless (equal new-name css-name) + (setf (htmlize-fstruct-css-name fstruct) new-name)) + (push new-name css-names))))) + face-map)) + +(defun htmlize-unstringify-face (face) + "If FACE is a string, return it interned, otherwise return it unchanged." + (if (stringp face) + (intern face) + face)) + +(defun htmlize-faces-in-buffer () + "Return a list of faces used in the current buffer. +This is the set of faces specified by the `face' text property and by buffer +overlays that specify `face'." + (let (faces) + ;; Faces used by text properties. + (let ((pos (point-min)) face-prop next) + (while (< pos (point-max)) + (setq face-prop (get-text-property pos 'face) + next (or (next-single-property-change pos 'face) (point-max))) + (setq faces (nunion (htmlize-decode-face-prop face-prop) + faces :test 'equal)) + (setq pos next))) + ;; Faces used by overlays. + (dolist (overlay (overlays-in (point-min) (point-max))) + (let ((face-prop (overlay-get overlay 'face))) + (setq faces (nunion (htmlize-decode-face-prop face-prop) + faces :test 'equal)))) + faces)) + +(if (>= emacs-major-version 25) + (defun htmlize-sorted-overlays-at (pos) + (overlays-at pos t)) + + (defun htmlize-sorted-overlays-at (pos) + ;; Like OVERLAYS-AT with the SORTED argument, for older Emacsen. + (let ((overlays (overlays-at pos))) + (setq overlays (sort* overlays #'< + :key (lambda (o) + (- (overlay-end o) (overlay-start o))))) + (setq overlays + (stable-sort overlays #'< + :key (lambda (o) + (let ((prio (overlay-get o 'priority))) + (if (numberp prio) prio 0))))) + (nreverse overlays)))) + + +;; htmlize-faces-at-point returns the faces in use at point. The +;; faces are sorted by increasing priority, i.e. the last face takes +;; precedence. +;; +;; This returns all the faces in the `face' property and all the faces +;; in the overlays at point. + +(defun htmlize-faces-at-point () + (let (all-faces) + ;; Faces from text properties. + (let ((face-prop (get-text-property (point) 'face))) + ;; we need to reverse the `face' prop because we want + ;; more specific faces to come later + (setq all-faces (nreverse (htmlize-decode-face-prop face-prop)))) + ;; Faces from overlays. + (let ((overlays + ;; Collect overlays at point that specify `face'. + (delete-if-not (lambda (o) + (overlay-get o 'face)) + (nreverse (htmlize-sorted-overlays-at (point))))) + list face-prop) + (dolist (overlay overlays) + (setq face-prop (overlay-get overlay 'face) + list (nconc (htmlize-decode-face-prop face-prop) list))) + ;; Under "Merging Faces" the manual explicitly states + ;; that faces specified by overlays take precedence over + ;; faces specified by text properties. + (setq all-faces (nconc all-faces list))) + all-faces)) + +;; htmlize supports generating HTML in several flavors, some of which +;; use CSS, and others the element. We take an OO approach and +;; define "methods" that indirect to the functions that depend on +;; `htmlize-output-type'. The currently used methods are `doctype', +;; `insert-head', `body-tag', `pre-tag', and `text-markup'. Not all +;; output types define all methods. +;; +;; Methods are called either with (htmlize-method METHOD ARGS...) +;; special form, or by accessing the function with +;; (htmlize-method-function 'METHOD) and calling (funcall FUNCTION). +;; The latter form is useful in tight loops because `htmlize-method' +;; conses. + +(defmacro htmlize-method (method &rest args) + ;; Expand to (htmlize-TYPE-METHOD ...ARGS...). TYPE is the value of + ;; `htmlize-output-type' at run time. + `(funcall (htmlize-method-function ',method) ,@args)) + +(defun htmlize-method-function (method) + ;; Return METHOD's function definition for the current output type. + ;; The returned object can be safely funcalled. + (let ((sym (intern (format "htmlize-%s-%s" htmlize-output-type method)))) + (indirect-function (if (fboundp sym) + sym + (let ((default (intern (concat "htmlize-default-" + (symbol-name method))))) + (if (fboundp default) + default + 'ignore)))))) + +(defvar htmlize-memoization-table (make-hash-table :test 'equal)) + +(defmacro htmlize-memoize (key generator) + "Return the value of GENERATOR, memoized as KEY. +That means that GENERATOR will be evaluated and returned the first time +it's called with the same value of KEY. All other times, the cached +\(memoized) value will be returned." + (let ((value (gensym))) + `(let ((,value (gethash ,key htmlize-memoization-table))) + (unless ,value + (setq ,value ,generator) + (setf (gethash ,key htmlize-memoization-table) ,value)) + ,value))) + +;;; Default methods. + +(defun htmlize-default-doctype () + nil ; no doc-string + ;; Note that the `font' output is technically invalid under this DTD + ;; because the DTD doesn't allow embedding in
    .
    +  ""
    +  )
    +
    +(defun htmlize-default-body-tag (face-map)
    +  nil					; no doc-string
    +  face-map ; shut up the byte-compiler
    +  "")
    +
    +(defun htmlize-default-pre-tag (face-map)
    +  nil					; no doc-string
    +  face-map ; shut up the byte-compiler
    +  "
    ")
    +
    +
    +;;; CSS based output support.
    +
    +;; Internal function; not a method.
    +(defun htmlize-css-specs (fstruct)
    +  (let (result)
    +    (when (htmlize-fstruct-foreground fstruct)
    +      (push (format "color: %s;" (htmlize-fstruct-foreground fstruct))
    +	    result))
    +    (when (htmlize-fstruct-background fstruct)
    +      (push (format "background-color: %s;"
    +		    (htmlize-fstruct-background fstruct))
    +	    result))
    +    (let ((size (htmlize-fstruct-size fstruct)))
    +      (when (and size (not (eq htmlize-ignore-face-size t)))
    +	(cond ((floatp size)
    +	       (push (format "font-size: %d%%;" (* 100 size)) result))
    +	      ((not (eq htmlize-ignore-face-size 'absolute))
    +	       (push (format "font-size: %spt;" (/ size 10.0)) result)))))
    +    (when (htmlize-fstruct-boldp fstruct)
    +      (push "font-weight: bold;" result))
    +    (when (htmlize-fstruct-italicp fstruct)
    +      (push "font-style: italic;" result))
    +    (when (htmlize-fstruct-underlinep fstruct)
    +      (push "text-decoration: underline;" result))
    +    (when (htmlize-fstruct-overlinep fstruct)
    +      (push "text-decoration: overline;" result))
    +    (when (htmlize-fstruct-strikep fstruct)
    +      (push "text-decoration: line-through;" result))
    +    (nreverse result)))
    +
    +(defun htmlize-css-insert-head (buffer-faces face-map)
    +  (insert "    \n"))
    +
    +(defun htmlize-css-text-markup (fstruct-list buffer)
    +  ;; Open the markup needed to insert text colored with FACES into
    +  ;; BUFFER.  Return the function that closes the markup.
    +
    +  ;; In CSS mode, this is easy: just nest the text in one  tag for each face in FSTRUCT-LIST.
    +  (dolist (fstruct fstruct-list)
    +    (princ "" buffer))
    +  (htmlize-lexlet ((fstruct-list fstruct-list) (buffer buffer))
    +    (lambda ()
    +      (dolist (fstruct fstruct-list)
    +        (ignore fstruct)                ; shut up the byte-compiler
    +        (princ "" buffer)))))
    +
    +;; `inline-css' output support.
    +
    +(defun htmlize-inline-css-body-tag (face-map)
    +  (format ""
    +	  (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    +		     " ")))
    +
    +(defun htmlize-inline-css-pre-tag (face-map)
    +  (if htmlize-pre-style
    +      (format "
    "
    +              (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    +                         " "))
    +    (format "
    ")))
    +
    +(defun htmlize-inline-css-text-markup (fstruct-list buffer)
    +  (let* ((merged (htmlize-merge-faces fstruct-list))
    +	 (style (htmlize-memoize
    +		 merged
    +		 (let ((specs (htmlize-css-specs merged)))
    +		   (and specs
    +			(mapconcat #'identity (htmlize-css-specs merged) " "))))))
    +    (when style
    +      (princ "" buffer))
    +    (htmlize-lexlet ((style style) (buffer buffer))
    +      (lambda ()
    +        (when style
    +          (princ "" buffer))))))
    +
    +;;; `font' tag based output support.
    +
    +(defun htmlize-font-body-tag (face-map)
    +  (let ((fstruct (gethash 'default face-map)))
    +    (format ""
    +	    (htmlize-fstruct-foreground fstruct)
    +	    (htmlize-fstruct-background fstruct))))
    +
    +(defun htmlize-font-pre-tag (face-map)
    +  (if htmlize-pre-style
    +      (let ((fstruct (gethash 'default face-map)))
    +        (format "
    "
    +                (htmlize-fstruct-foreground fstruct)
    +                (htmlize-fstruct-background fstruct)))
    +    (format "
    ")))
    +       
    +(defun htmlize-font-text-markup (fstruct-list buffer)
    +  ;; In `font' mode, we use the traditional HTML means of altering
    +  ;; presentation:  tag for colors,  for bold,  for
    +  ;; underline, and  for strike-through.
    +  (let* ((merged (htmlize-merge-faces fstruct-list))
    +	 (markup (htmlize-memoize
    +		  merged
    +		  (cons (concat
    +			 (and (htmlize-fstruct-foreground merged)
    +			      (format "" (htmlize-fstruct-foreground merged)))
    +			 (and (htmlize-fstruct-boldp merged)      "")
    +			 (and (htmlize-fstruct-italicp merged)    "")
    +			 (and (htmlize-fstruct-underlinep merged) "")
    +			 (and (htmlize-fstruct-strikep merged)    ""))
    +			(concat
    +			 (and (htmlize-fstruct-strikep merged)    "")
    +			 (and (htmlize-fstruct-underlinep merged) "")
    +			 (and (htmlize-fstruct-italicp merged)    "")
    +			 (and (htmlize-fstruct-boldp merged)      "")
    +			 (and (htmlize-fstruct-foreground merged) ""))))))
    +    (princ (car markup) buffer)
    +    (htmlize-lexlet ((markup markup) (buffer buffer))
    +      (lambda ()
    +        (princ (cdr markup) buffer)))))
    +
    +(defun htmlize-buffer-1 ()
    +  ;; Internal function; don't call it from outside this file.  Htmlize
    +  ;; current buffer, writing the resulting HTML to a new buffer, and
    +  ;; return it.  Unlike htmlize-buffer, this doesn't change current
    +  ;; buffer or use switch-to-buffer.
    +  (save-excursion
    +    ;; Protect against the hook changing the current buffer.
    +    (save-excursion
    +      (run-hooks 'htmlize-before-hook))
    +    ;; Convince font-lock support modes to fontify the entire buffer
    +    ;; in advance.
    +    (htmlize-ensure-fontified)
    +    (clrhash htmlize-extended-character-cache)
    +    (clrhash htmlize-memoization-table)
    +    ;; It's important that the new buffer inherits default-directory
    +    ;; from the current buffer.
    +    (let ((htmlbuf (generate-new-buffer (if (buffer-file-name)
    +                                            (htmlize-make-file-name
    +                                             (file-name-nondirectory
    +                                              (buffer-file-name)))
    +                                          "*html*")))
    +          (completed nil))
    +      (unwind-protect
    +          (let* ((buffer-faces (htmlize-faces-in-buffer))
    +                 (face-map (htmlize-make-face-map (adjoin 'default buffer-faces)))
    +                 (places (gensym))
    +                 (title (if (buffer-file-name)
    +                            (file-name-nondirectory (buffer-file-name))
    +                          (buffer-name))))
    +            (when htmlize-generate-hyperlinks
    +              (htmlize-create-auto-links))
    +            (when htmlize-replace-form-feeds
    +              (htmlize-shadow-form-feeds))
    +
    +            ;; Initialize HTMLBUF and insert the HTML prolog.
    +            (with-current-buffer htmlbuf
    +              (buffer-disable-undo)
    +              (insert (htmlize-method doctype) ?\n
    +                      (format "\n"
    +                              htmlize-version htmlize-output-type)
    +                      "\n  ")
    +              (put places 'head-start (point-marker))
    +              (insert "\n"
    +                      "    " (htmlize-protect-string title) "\n"
    +                      (if htmlize-html-charset
    +                          (format (concat "    \n")
    +                                  htmlize-html-charset)
    +                        "")
    +                      htmlize-head-tags)
    +              (htmlize-method insert-head buffer-faces face-map)
    +              (insert "  ")
    +              (put places 'head-end (point-marker))
    +              (insert "\n  ")
    +              (put places 'body-start (point-marker))
    +              (insert (htmlize-method body-tag face-map)
    +                      "\n    ")
    +              (put places 'content-start (point-marker))
    +              (insert (htmlize-method pre-tag face-map) "\n"))
    +            (let ((text-markup
    +                   ;; Get the inserter method, so we can funcall it inside
    +                   ;; the loop.  Not calling `htmlize-method' in the loop
    +                   ;; body yields a measurable speed increase.
    +                   (htmlize-method-function 'text-markup))
    +                  ;; Declare variables used in loop body outside the loop
    +                  ;; because it's faster to establish `let' bindings only
    +                  ;; once.
    +                  next-change text face-list trailing-ellipsis
    +                  fstruct-list last-fstruct-list
    +                  (close-markup (lambda ())))
    +              ;; This loop traverses and reads the source buffer, appending
    +              ;; the resulting HTML to HTMLBUF.  This method is fast
    +              ;; because: 1) it doesn't require examining the text
    +              ;; properties char by char (htmlize-next-face-change is used
    +              ;; to move between runs with the same face), and 2) it doesn't
    +              ;; require frequent buffer switches, which are slow because
    +              ;; they rebind all buffer-local vars.
    +              (goto-char (point-min))
    +              (while (not (eobp))
    +                (setq next-change (htmlize-next-face-change (point)))
    +                ;; Get faces in use between (point) and NEXT-CHANGE, and
    +                ;; convert them to fstructs.
    +                (setq face-list (htmlize-faces-at-point)
    +                      fstruct-list (delq nil (mapcar (lambda (f)
    +                                                       (gethash f face-map))
    +                                                     face-list)))
    +                (multiple-value-setq (text trailing-ellipsis)
    +                  (htmlize-extract-text (point) next-change trailing-ellipsis))
    +                ;; Don't bother writing anything if there's no text (this
    +                ;; happens in invisible regions).
    +                (when (> (length text) 0)
    +                  ;; Open the new markup if necessary and insert the text.
    +                  (when (not (equalp fstruct-list last-fstruct-list))
    +                    (funcall close-markup)
    +                    (setq last-fstruct-list fstruct-list
    +                          close-markup (funcall text-markup fstruct-list htmlbuf)))
    +                  (princ text htmlbuf))
    +                (goto-char next-change))
    +
    +              ;; We've gone through the buffer; close the markup from
    +              ;; the last run, if any.
    +              (funcall close-markup))
    +
    +            ;; Insert the epilog and post-process the buffer.
    +            (with-current-buffer htmlbuf
    +              (insert "
    ") + (put places 'content-end (point-marker)) + (insert "\n ") + (put places 'body-end (point-marker)) + (insert "\n\n") + (htmlize-defang-local-variables) + (goto-char (point-min)) + (when htmlize-html-major-mode + ;; What sucks about this is that the minor modes, most notably + ;; font-lock-mode, won't be initialized. Oh well. + (funcall htmlize-html-major-mode)) + (set (make-local-variable 'htmlize-buffer-places) + (symbol-plist places)) + (run-hooks 'htmlize-after-hook) + (buffer-enable-undo)) + (setq completed t) + htmlbuf) + + (when (not completed) + (kill-buffer htmlbuf)) + (htmlize-delete-tmp-overlays))))) + +;; Utility functions. + +(defmacro htmlize-with-fontify-message (&rest body) + ;; When forcing fontification of large buffers in + ;; htmlize-ensure-fontified, inform the user that he is waiting for + ;; font-lock, not for htmlize to finish. + `(progn + (if (> (buffer-size) 65536) + (message "Forcing fontification of %s..." + (buffer-name (current-buffer)))) + ,@body + (if (> (buffer-size) 65536) + (message "Forcing fontification of %s...done" + (buffer-name (current-buffer)))))) + +(defun htmlize-ensure-fontified () + ;; If font-lock is being used, ensure that the "support" modes + ;; actually fontify the buffer. If font-lock is not in use, we + ;; don't care because, except in htmlize-file, we don't force + ;; font-lock on the user. + (when font-lock-mode + ;; In part taken from ps-print-ensure-fontified in GNU Emacs 21. + (when (and (boundp 'jit-lock-mode) + (symbol-value 'jit-lock-mode)) + (htmlize-with-fontify-message + (jit-lock-fontify-now (point-min) (point-max)))) + + (if (fboundp 'font-lock-ensure) + (font-lock-ensure) + ;; Emacs prior to 25.1 + (with-no-warnings + (font-lock-mode 1) + (font-lock-fontify-buffer))))) + + +;;;###autoload +(defun htmlize-buffer (&optional buffer) + "Convert BUFFER to HTML, preserving colors and decorations. + +The generated HTML is available in a new buffer, which is returned. +When invoked interactively, the new buffer is selected in the current +window. The title of the generated document will be set to the buffer's +file name or, if that's not available, to the buffer's name. + +Note that htmlize doesn't fontify your buffers, it only uses the +decorations that are already present. If you don't set up font-lock or +something else to fontify your buffers, the resulting HTML will be +plain. Likewise, if you don't like the choice of colors, fix the mode +that created them, or simply alter the faces it uses." + (interactive) + (let ((htmlbuf (with-current-buffer (or buffer (current-buffer)) + (htmlize-buffer-1)))) + (when (interactive-p) + (switch-to-buffer htmlbuf)) + htmlbuf)) + +;;;###autoload +(defun htmlize-region (beg end) + "Convert the region to HTML, preserving colors and decorations. +See `htmlize-buffer' for details." + (interactive "r") + ;; Don't let zmacs region highlighting end up in HTML. + (when (fboundp 'zmacs-deactivate-region) + (zmacs-deactivate-region)) + (let ((htmlbuf (save-restriction + (narrow-to-region beg end) + (htmlize-buffer-1)))) + (when (interactive-p) + (switch-to-buffer htmlbuf)) + htmlbuf)) + +(defun htmlize-region-for-paste (beg end) + "Htmlize the region and return just the HTML as a string. +This forces the `inline-css' style and only returns the HTML body, +but without the BODY tag. This should make it useful for inserting +the text to another HTML buffer." + (let* ((htmlize-output-type 'inline-css) + (htmlbuf (htmlize-region beg end))) + (unwind-protect + (with-current-buffer htmlbuf + (buffer-substring (plist-get htmlize-buffer-places 'content-start) + (plist-get htmlize-buffer-places 'content-end))) + (kill-buffer htmlbuf)))) + +(defun htmlize-region-save-screenshot (beg end) + "Save the htmlized (see `htmlize-region-for-paste') region in +the kill ring. Uses `inline-css', with style information in +`
    ' tags, so that the rendering of the marked up text
    +approximates the buffer as closely as possible."
    +  (interactive "r")
    +  (let ((htmlize-pre-style t))
    +    (kill-new (htmlize-region-for-paste beg end)))
    +  (deactivate-mark))
    +
    +(defun htmlize-make-file-name (file)
    +  "Make an HTML file name from FILE.
    +
    +In its default implementation, this simply appends `.html' to FILE.
    +This function is called by htmlize to create the buffer file name, and
    +by `htmlize-file' to create the target file name.
    +
    +More elaborate transformations are conceivable, such as changing FILE's
    +extension to `.html' (\"file.c\" -> \"file.html\").  If you want them,
    +overload this function to do it and htmlize will comply."
    +  (concat file ".html"))
    +
    +;; Older implementation of htmlize-make-file-name that changes FILE's
    +;; extension to ".html".
    +;(defun htmlize-make-file-name (file)
    +;  (let ((extension (file-name-extension file))
    +;	(sans-extension (file-name-sans-extension file)))
    +;    (if (or (equal extension "html")
    +;	    (equal extension "htm")
    +;	    (equal sans-extension ""))
    +;	(concat file ".html")
    +;      (concat sans-extension ".html"))))
    +
    +;;;###autoload
    +(defun htmlize-file (file &optional target)
    +  "Load FILE, fontify it, convert it to HTML, and save the result.
    +
    +Contents of FILE are inserted into a temporary buffer, whose major mode
    +is set with `normal-mode' as appropriate for the file type.  The buffer
    +is subsequently fontified with `font-lock' and converted to HTML.  Note
    +that, unlike `htmlize-buffer', this function explicitly turns on
    +font-lock.  If a form of highlighting other than font-lock is desired,
    +please use `htmlize-buffer' directly on buffers so highlighted.
    +
    +Buffers currently visiting FILE are unaffected by this function.  The
    +function does not change current buffer or move the point.
    +
    +If TARGET is specified and names a directory, the resulting file will be
    +saved there instead of to FILE's directory.  If TARGET is specified and
    +does not name a directory, it will be used as output file name."
    +  (interactive (list (read-file-name
    +		      "HTML-ize file: "
    +		      nil nil nil (and (buffer-file-name)
    +				       (file-name-nondirectory
    +					(buffer-file-name))))))
    +  (let ((output-file (if (and target (not (file-directory-p target)))
    +			 target
    +		       (expand-file-name
    +			(htmlize-make-file-name (file-name-nondirectory file))
    +			(or target (file-name-directory file)))))
    +	;; Try to prevent `find-file-noselect' from triggering
    +	;; font-lock because we'll fontify explicitly below.
    +	(font-lock-mode nil)
    +	(font-lock-auto-fontify nil)
    +	(global-font-lock-mode nil)
    +	;; Ignore the size limit for the purposes of htmlization.
    +	(font-lock-maximum-size nil))
    +    (with-temp-buffer
    +      ;; Insert FILE into the temporary buffer.
    +      (insert-file-contents file)
    +      ;; Set the file name so normal-mode and htmlize-buffer-1 pick it
    +      ;; up.  Restore it afterwards so with-temp-buffer's kill-buffer
    +      ;; doesn't complain about killing a modified buffer.
    +      (let ((buffer-file-name file))
    +	;; Set the major mode for the sake of font-lock.
    +	(normal-mode)
    +	;; htmlize the buffer and save the HTML.
    +	(with-current-buffer (htmlize-buffer-1)
    +	  (unwind-protect
    +	      (progn
    +		(run-hooks 'htmlize-file-hook)
    +		(write-region (point-min) (point-max) output-file))
    +	    (kill-buffer (current-buffer)))))))
    +  ;; I haven't decided on a useful return value yet, so just return
    +  ;; nil.
    +  nil)
    +
    +;;;###autoload
    +(defun htmlize-many-files (files &optional target-directory)
    +  "Convert FILES to HTML and save the corresponding HTML versions.
    +
    +FILES should be a list of file names to convert.  This function calls
    +`htmlize-file' on each file; see that function for details.  When
    +invoked interactively, you are prompted for a list of files to convert,
    +terminated with RET.
    +
    +If TARGET-DIRECTORY is specified, the HTML files will be saved to that
    +directory.  Normally, each HTML file is saved to the directory of the
    +corresponding source file."
    +  (interactive
    +   (list
    +    (let (list file)
    +      ;; Use empty string as DEFAULT because setting DEFAULT to nil
    +      ;; defaults to the directory name, which is not what we want.
    +      (while (not (equal (setq file (read-file-name
    +				     "HTML-ize file (RET to finish): "
    +				     (and list (file-name-directory
    +						(car list)))
    +				     "" t))
    +			 ""))
    +	(push file list))
    +      (nreverse list))))
    +  ;; Verify that TARGET-DIRECTORY is indeed a directory.  If it's a
    +  ;; file, htmlize-file will use it as target, and that doesn't make
    +  ;; sense.
    +  (and target-directory
    +       (not (file-directory-p target-directory))
    +       (error "target-directory must name a directory: %s" target-directory))
    +  (dolist (file files)
    +    (htmlize-file file target-directory)))
    +
    +;;;###autoload
    +(defun htmlize-many-files-dired (arg &optional target-directory)
    +  "HTMLize dired-marked files."
    +  (interactive "P")
    +  (htmlize-many-files (dired-get-marked-files nil arg) target-directory))
    +
    +(provide 'htmlize)
    +
    +;; Local Variables:
    +;; byte-compile-warnings: (not cl-functions unresolved obsolete)
    +;; End:
    +
    +;;; htmlize.el ends here
    diff --git a/bash/templates/build-aux/workflow/vendor/org.css b/bash/templates/build-aux/workflow/vendor/org.css
    new file mode 100644
    index 0000000..138cdba
    --- /dev/null
    +++ b/bash/templates/build-aux/workflow/vendor/org.css
    @@ -0,0 +1,5 @@
    +/*
    +Taken from:
    +https://gongzhitaao.org/orgcss/org.css
    +*/
    +/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body{color:#000;background-color:#fff}.org-alert-high{color:#ff8c00;font-weight:700}.org-alert-low{color:#00008b}.org-alert-moderate{color:gold;font-weight:700}.org-alert-saved-fringe{background-color:#f2f2f2}.org-alert-trivial{color:Dark purple}.org-alert-urgent{color:red;font-weight:700}.org-anzu-match-1{color:#000;background-color:#7fffd4}.org-anzu-match-2{color:#000;background-color:#00ff7f}.org-anzu-match-3{color:#000;background-color:#ff0}.org-anzu-mode-line,.org-anzu-mode-line-no-match{color:#008b00;font-weight:700}.org-anzu-replace-highlight{color:#b0e2ff;background-color:#cd00cd}.org-anzu-replace-to{color:red}.org-bbdb-field-name{color:sienna}.org-bbdb-name{color:#00f}.org-bbdb-organization{color:#b22222}.org-beacon-fallback-background{background-color:#000}.org-biblio-results-header{color:#483d8b;font-size:150%;font-weight:700}.org-bold{font-weight:700}.org-bold-italic{font-weight:700;font-style:italic}.org-bookmark-menu-bookmark{font-weight:700}.org-bookmark-menu-heading{color:#228b22}.org-buffer-menu-buffer{font-weight:700}.org-builtin{color:#483d8b}.org-button{color:#3a5fcd;text-decoration:underline}.org-c-annotation{color:#008b8b}.org-cal-china-x-general-holiday{background-color:#228b22}.org-cal-china-x-important-holiday{background-color:#8b0000}.org-calendar-iso-week{color:pink;font-weight:700}.org-calendar-iso-week-header{color:#0ff}.org-calendar-month-header{color:#00f}.org-calendar-today{text-decoration:underline}.org-calendar-weekday-header{color:#008b8b}.org-calendar-weekend-header{color:#b22222}.org-comint-highlight-input{font-weight:700}.org-comint-highlight-prompt{color:#0000cd}.org-comment,.org-comment-delimiter{color:#b22222}.org-compilation-column-number{color:#8b2252}.org-compilation-error{color:red;font-weight:700}.org-compilation-info{color:#228b22;font-weight:700}.org-compilation-line-number{color:#a020f0}.org-compilation-mode-line-exit{color:#228b22;font-weight:700}.org-compilation-mode-line-fail{color:red;font-weight:700}.org-compilation-mode-line-run,.org-compilation-warning{color:#ff8c00;font-weight:700}.org-completions-annotations{font-style:italic}.org-completions-first-difference{font-weight:700}.org-constant{color:#008b8b}.org-cursor{background-color:#eead0e}.org-custom-button{color:#000;background-color:#d3d3d3}.org-custom-button-mouse{color:#000;background-color:#e5e5e5}.org-custom-button-pressed{color:#000;background-color:#d3d3d3}.org-custom-button-pressed-unraised{color:#8b008b;text-decoration:underline}.org-custom-button-unraised{text-decoration:underline}.org-custom-changed{color:#fff;background-color:#00f}.org-custom-comment{background-color:#d9d9d9}.org-custom-comment-tag{color:#00008b}.org-custom-face-tag{color:#00f;font-weight:700}.org-custom-group-subtitle{font-weight:700}.org-custom-group-tag{color:#00f;font-size:120%;font-weight:700}.org-custom-group-tag-1{color:red;font-size:120%;font-weight:700}.org-custom-invalid{color:#ff0;background-color:red}.org-custom-link{color:#3a5fcd;text-decoration:underline}.org-custom-modified{color:#fff;background-color:#00f}.org-custom-rogue{color:pink;background-color:#000}.org-custom-saved{text-decoration:underline}.org-custom-set{color:#00f;background-color:#fff}.org-custom-state{color:#006400}.org-custom-themed{color:#fff;background-color:#00f}.org-custom-variable-button{font-weight:700;text-decoration:underline}.org-custom-variable-tag{color:#00f;font-weight:700}.org-custom-visibility{color:#3a5fcd;font-size:80%;text-decoration:underline}.org-diary{color:red}.org-diary-anniversary{color:#a020f0}.org-diary-time{color:sienna}.org-dired-async-failures{color:red}.org-dired-async-message{color:#ff0}.org-dired-async-mode-message{color:gold}.org-dired-directory{color:#00f}.org-dired-flagged{color:red;font-weight:700}.org-dired-header{color:#228b22}.org-dired-ignored{color:#7f7f7f}.org-dired-mark{color:#008b8b}.org-dired-marked{color:#ff8c00;font-weight:700}.org-dired-perm-write{color:#b22222}.org-dired-symlink{color:#a020f0}.org-dired-warning{color:red;font-weight:700}.org-doc{color:#8b2252}.org-eldoc-highlight-function-argument{font-weight:700}.org-epa-field-body{font-style:italic}.org-epa-field-name,.org-epa-mark{font-weight:700}.org-epa-mark{color:red}.org-epa-string{color:#00008b}.org-epa-validity-disabled{font-style:italic}.org-epa-validity-high{font-weight:700}.org-epa-validity-low,.org-epa-validity-medium{font-style:italic}.org-error{color:red;font-weight:700}.org-escape-glyph{color:brown}.org-evil-ex-commands{font-style:italic;text-decoration:underline}.org-evil-ex-info{color:red;font-style:italic}.org-evil-ex-lazy-highlight{background-color:#afeeee}.org-evil-ex-search{color:#b0e2ff;background-color:#cd00cd}.org-evil-ex-substitute-matches{background-color:#afeeee}.org-evil-ex-substitute-replacement{color:red;text-decoration:underline}.org-ffap{background-color:#b4eeb4}.org-file-name-shadow{color:#7f7f7f}.org-flycheck-error{text-decoration:underline}.org-flycheck-error-list-checker-name{color:#00f}.org-flycheck-error-list-column-number{color:#008b8b}.org-flycheck-error-list-error{color:red;font-weight:700}.org-flycheck-error-list-filename{color:sienna}.org-flycheck-error-list-highlight{background-color:#b4eeb4}.org-flycheck-error-list-id,.org-flycheck-error-list-id-with-explainer{color:#228b22}.org-flycheck-error-list-info{color:#228b22;font-weight:700}.org-flycheck-error-list-line-number{color:#008b8b}.org-flycheck-error-list-warning{color:#ff8c00;font-weight:700}.org-flycheck-fringe-error{color:red;font-weight:700}.org-flycheck-fringe-info{color:#228b22;font-weight:700}.org-flycheck-fringe-warning{color:#ff8c00;font-weight:700}.org-flycheck-info,.org-flycheck-warning,.org-flyspell-duplicate,.org-flyspell-incorrect{text-decoration:underline}.org-fringe{background-color:#f2f2f2}.org-function-name{color:#00f}.org-glyphless-char{font-size:60%}.org-golden-ratio-scroll-highlight-line{color:#fff;background-color:#53868b;font-weight:700}.org-header-line{color:#333;background-color:#e5e5e5}.org-helm-action{text-decoration:underline}.org-helm-bookmark-addressbook{color:tomato}.org-helm-bookmark-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-bookmark-file{color:#00b2ee}.org-helm-bookmark-file-not-found{color:#6c7b8b}.org-helm-bookmark-gnus{color:#f0f}.org-helm-bookmark-info{color:#0f0}.org-helm-bookmark-man{color:#8b5a00}.org-helm-bookmark-w3m{color:#ff0}.org-helm-buffer-archive{color:gold}.org-helm-buffer-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-buffer-file{color:#483d8b}.org-helm-buffer-modified{color:#b22222}.org-helm-buffer-not-saved{color:#ee6363}.org-helm-buffer-process{color:#cd6839}.org-helm-buffer-saved-out{color:red;background-color:#000}.org-helm-buffer-size{color:#708090}.org-helm-candidate-number,.org-helm-candidate-number-suspended{color:#000;background-color:#faffb5}.org-helm-delete-async-message{color:#ff0}.org-helm-etags-file{color:#8b814c;text-decoration:underline}.org-helm-ff-denied{color:red;background-color:#000}.org-helm-ff-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-ff-dirs{color:#00f}.org-helm-ff-dotted-directory{color:#000;background-color:#696969}.org-helm-ff-dotted-symlink-directory{color:#ff8c00;background-color:#696969}.org-helm-ff-executable{color:#0f0}.org-helm-ff-file{color:#483d8b}.org-helm-ff-invalid-symlink{color:#000;background-color:red}.org-helm-ff-pipe{color:#ff0;background-color:#000}.org-helm-ff-prefix{color:#000;background-color:#ff0}.org-helm-ff-socket{color:#ff1493}.org-helm-ff-suid{color:#fff;background-color:red}.org-helm-ff-symlink{color:#b22222}.org-helm-ff-truename{color:#8b2252}.org-helm-grep-cmd-line{color:#228b22}.org-helm-grep-file{color:#8a2be2;text-decoration:underline}.org-helm-grep-finish{color:#0f0}.org-helm-grep-lineno{color:#ff7f00}.org-helm-grep-match{color:#b00000}.org-helm-header{color:#333;background-color:#e5e5e5}.org-helm-header-line-left-margin{color:#000;background-color:#ff0}.org-helm-helper{color:#333;background-color:#e5e5e5}.org-helm-history-deleted{color:#000;background-color:red}.org-helm-history-remote{color:#ff6a6a}.org-helm-lisp-completion-info{color:red}.org-helm-lisp-show-completion{background-color:#2f4f4f}.org-helm-locate-finish{color:#0f0}.org-helm-m-x-key{color:orange;text-decoration:underline}.org-helm-match{color:#b00000}.org-helm-match-item{color:#b0e2ff;background-color:#cd00cd}.org-helm-minibuffer-prompt{color:#0000cd}.org-helm-moccur-buffer{color:#00ced1;text-decoration:underline}.org-helm-non-file-buffer{font-style:italic}.org-helm-prefarg{color:red}.org-helm-resume-need-update{background-color:red}.org-helm-selection{background-color:#097209}.org-helm-selection-line{background-color:#b4eeb4}.org-helm-separator{color:#ffbfb5}.org-helm-source-header{color:#000;background-color:#abd7f0;font-size:130%;font-weight:700}.org-helm-visible-mark{background-color:#d1f5ea}.org-help-argument-name{font-style:italic}.org-highlight{background-color:#b4eeb4}.org-highlight-indent-guides-character{color:#e6e6e6}.org-highlight-indent-guides-even{background-color:#e6e6e6}.org-highlight-indent-guides-odd{background-color:#f3f3f3}.org-highlight-indent-guides-stack-character{color:#ccc}.org-highlight-indent-guides-stack-even{background-color:#ccc}.org-highlight-indent-guides-stack-odd{background-color:#d9d9d9}.org-highlight-indent-guides-top-character{color:#b3b3b3}.org-highlight-indent-guides-top-even{background-color:#b3b3b3}.org-highlight-indent-guides-top-odd{background-color:silver}.org-highlight-numbers-number{color:#008b8b}.org-hl-line{background-color:#b4eeb4}.org-holiday{background-color:pink}.org-hydra-face-amaranth{color:#e52b50;font-weight:700}.org-hydra-face-blue{color:#00f;font-weight:700}.org-hydra-face-pink{color:#ff6eb4;font-weight:700}.org-hydra-face-red{color:red;font-weight:700}.org-hydra-face-teal{color:#367588;font-weight:700}.org-ido-first-match{font-weight:700}.org-ido-incomplete-regexp{color:red;font-weight:700}.org-ido-indicator{color:#ff0;background-color:red}.org-ido-only-match{color:#228b22}.org-ido-subdir{color:red}.org-ido-virtual{color:#483d8b}.org-info-header-node{color:brown;font-weight:700;font-style:italic}.org-info-header-xref{color:#3a5fcd;text-decoration:underline}.org-info-index-match{background-color:#ff0}.org-info-menu-header{font-weight:700}.org-info-menu-star{color:red}.org-info-node{color:brown;font-weight:700;font-style:italic}.org-info-title-1{font-size:172%;font-weight:700}.org-info-title-2{font-size:144%;font-weight:700}.org-info-title-3{font-size:120%;font-weight:700}.org-info-title-4{font-weight:700}.org-info-xref{color:#3a5fcd;text-decoration:underline}.org-isearch{color:#b0e2ff;background-color:#cd00cd}.org-isearch-fail{background-color:#ffc1c1}.org-italic{font-style:italic}.org-keyword{color:#a020f0}.org-lazy-highlight{background-color:#afeeee}.org-link{color:#3a5fcd;text-decoration:underline}.org-link-visited{color:#8b008b;text-decoration:underline}.org-lv-separator{background-color:#ccc}.org-match{background-color:#ff0}.org-mcXcursor-bar{background-color:#000}.org-mcXregion{background-color:gtk_selection_bg_color}.org-me-dired-dim-0{color:#b3b3b3}.org-me-dired-dim-1{color:#7f7f7f}.org-me-dired-executable{color:#0f0}.org-message-cited-text{color:red}.org-message-header-cc{color:#191970}.org-message-header-name{color:#6495ed}.org-message-header-newsgroups{color:#00008b;font-weight:700;font-style:italic}.org-message-header-other{color:#4682b4}.org-message-header-subject{color:navy;font-weight:700}.org-message-header-to{color:#191970;font-weight:700}.org-message-header-xheader{color:#00f}.org-message-mml{color:#228b22}.org-message-separator{color:brown}.org-minibuffer-prompt{color:#0000cd}.org-mm-command-output{color:#cd0000}.org-mode-line{color:#000;background-color:#bfbfbf}.org-mode-line-buffer-id,.org-mode-line-buffer-id-inactive,.org-mode-line-emphasis{font-weight:700}.org-mode-line-inactive{color:#333;background-color:#e5e5e5}.org-mu4e-attach-number{color:sienna;font-weight:700}.org-mu4e-cited-1{color:#483d8b;font-style:italic}.org-mu4e-cited-2{color:#5cacee;font-style:italic}.org-mu4e-cited-3{color:sienna;font-style:italic}.org-mu4e-cited-4{color:#a020f0;font-style:italic}.org-mu4e-cited-5,.org-mu4e-cited-6{color:#b22222;font-style:italic}.org-mu4e-cited-7{color:#228b22;font-style:italic}.org-mu4e-compose-header,.org-mu4e-compose-separator{color:brown;font-style:italic}.org-mu4e-contact{color:sienna}.org-mu4e-context{color:#006400;font-weight:700}.org-mu4e-draft{color:#8b2252}.org-mu4e-flagged{color:#008b8b;font-weight:700}.org-mu4e-footer{color:#b22222}.org-mu4e-forwarded{color:#483d8b}.org-mu4e-header{color:#000;background-color:#fff}.org-mu4e-header-highlight{background-color:#000;font-weight:700;text-decoration:underline}.org-mu4e-header-key{color:#6495ed;font-weight:700}.org-mu4e-header-marks{color:#483d8b}.org-mu4e-header-title,.org-mu4e-header-value{color:#228b22}.org-mu4e-highlight{background-color:#b4eeb4}.org-mu4e-link{color:#3a5fcd;text-decoration:underline}.org-mu4e-modeline{color:#8b4500;font-weight:700}.org-mu4e-moved{color:#b22222;font-style:italic}.org-mu4e-ok{color:#b22222;font-weight:700}.org-mu4e-region-code{background-color:#2f4f4f}.org-mu4e-replied,.org-mu4e-special-header-value{color:#483d8b}.org-mu4e-system{color:#b22222;font-style:italic}.org-mu4e-title{color:#228b22;font-weight:700}.org-mu4e-trashed{color:#b22222;text-decoration:line-through}.org-mu4e-unread{color:#a020f0;font-weight:700}.org-mu4e-url-number{color:#008b8b;font-weight:700}.org-mu4e-view-body{color:#000;background-color:#fff}.org-mu4e-warning{color:red;font-weight:700}.org-next-error{background-color:gtk_selection_bg_color}.org-nobreak-space{color:brown;text-decoration:underline}.org-org-agenda-calendar-event,.org-org-agenda-calendar-sexp{color:#000;background-color:#fff}.org-org-agenda-clocking{background-color:#ff0}.org-org-agenda-column-dateline{background-color:#e5e5e5}.org-org-agenda-current-time{color:#b8860b}.org-org-agenda-date{color:#00f}.org-org-agenda-date-today{color:#00f;font-weight:700;font-style:italic}.org-org-agenda-date-weekend{color:#00f;font-weight:700}.org-org-agenda-diary{color:#000;background-color:#fff}.org-org-agenda-dimmed-todo{color:#7f7f7f}.org-org-agenda-done{color:#228b22}.org-org-agenda-filter-category,.org-org-agenda-filter-effort,.org-org-agenda-filter-regexp,.org-org-agenda-filter-tags{color:#000;background-color:#bfbfbf}.org-org-agenda-restriction-lock{background-color:#eee}.org-org-agenda-structure{color:#00f}.org-org-archived{color:#7f7f7f}.org-org-block{color:#7f7f7f}.org-org-block-begin-line,.org-org-block-end-line{color:#b22222}.org-org-checkbox{font-weight:700}.org-org-checkbox-statistics-done{color:#228b22;font-weight:700}.org-org-checkbox-statistics-todo{color:red;font-weight:700}.org-org-clock-overlay{color:#000;background-color:#d3d3d3}.org-org-code{color:#7f7f7f}.org-org-column,.org-org-column-title{background-color:#e5e5e5}.org-org-column-title{font-weight:700;text-decoration:underline}.org-org-date{color:#bfaf87;text-decoration:underline}.org-org-date-selected{color:red}.org-org-default{color:#000;background-color:#fff}.org-org-document-info{color:#191970}.org-org-document-info-keyword{color:#7f7f7f}.org-org-document-title{color:#191970;font-weight:700}.org-org-done{color:#228b22;font-weight:700}.org-org-drawer{color:#00f}.org-org-ellipsis{color:#b8860b;text-decoration:underline}.org-org-footnote{color:#96b4cd;text-decoration:underline}.org-org-formula{color:#b22222}.org-org-habit-alert{background-color:#f5f946}.org-org-habit-alert-future{background-color:#fafca9}.org-org-habit-clear{background-color:#8270f9}.org-org-habit-clear-future{background-color:#d6e4fc}.org-org-habit-overdue{background-color:#f9372d}.org-org-habit-overdue-future{background-color:#fc9590}.org-org-habit-ready{background-color:#4df946}.org-org-habit-ready-future{background-color:#acfca9}.org-org-headline-done{color:#bc8f8f}.org-org-hide{color:#fff}.org-org-latex-and-related{color:#8b4513}.org-org-level-1{color:#edd1c5}.org-org-level-2{color:#ebebb7}.org-org-level-3{color:#cce8cc}.org-org-level-4{color:#c9deec}.org-org-level-5{color:#dce3e8}.org-org-level-6{color:#dde6dd}.org-org-level-7{color:#e8e8ce}.org-org-level-8{color:#e8dedb}.org-org-link{color:#c5d2dc;text-decoration:underline}.org-org-list-dt{font-weight:700}.org-org-macro{color:#8b4513}.org-org-meta-line{color:#b22222}.org-org-mode-line-clock{color:#000;background-color:#bfbfbf}.org-org-mode-line-clock-overrun{color:#000;background-color:red}.org-org-priority{color:#a020f0}.org-org-quote{color:#7f7f7f}.org-org-ref-acronym{color:#ee7600;text-decoration:underline}.org-org-ref-cite{color:#c3d5c3;text-decoration:underline}.org-org-ref-glossary{color:#8968cd;text-decoration:underline}.org-org-ref-label{color:#8b008b;text-decoration:underline}.org-org-ref-ref{color:#e1cc96;text-decoration:underline}.org-org-scheduled{color:#006400}.org-org-scheduled-previously{color:#b22222}.org-org-scheduled-today{color:#006400}.org-org-sexp-date{color:#a020f0}.org-org-special-keyword{color:#88949f}.org-org-table{color:#00f}.org-org-tag,.org-org-tag-group{font-weight:700}.org-org-target{text-decoration:underline}.org-org-time-grid{color:#b8860b}.org-org-todo{color:red;font-weight:700}.org-org-upcoming-deadline{color:#b22222}.org-org-verbatim,.org-org-verse{color:#7f7f7f}.org-org-warning{color:red;font-weight:700}.org-outline-1{color:#00f}.org-outline-2{color:sienna}.org-outline-3{color:#a020f0}.org-outline-4{color:#b22222}.org-outline-5{color:#228b22}.org-outline-6{color:#008b8b}.org-outline-7{color:#483d8b}.org-outline-8{color:#8b2252}.org-package-description{color:#000;background-color:#fff}.org-package-name{color:#3a5fcd;text-decoration:underline}.org-package-status-avail-obso{color:#b22222}.org-package-status-available{color:#000;background-color:#fff}.org-package-status-built-in{color:#483d8b}.org-package-status-dependency{color:#b22222}.org-package-status-disabled{color:red;font-weight:700}.org-package-status-external{color:#483d8b}.org-package-status-held{color:#008b8b}.org-package-status-incompat,.org-package-status-installed{color:#b22222}.org-package-status-unsigned{color:red;font-weight:700}.org-pdf-isearch-batch{background-color:#ff0}.org-pdf-isearch-lazy{background-color:#afeeee}.org-pdf-isearch-match{color:#b0e2ff;background-color:#cd00cd}.org-pdf-occur-document{color:#8b2252}.org-pdf-occur-page{color:#228b22}.org-pdf-view-rectangle{background-color:#b4eeb4}.org-pdf-view-region{background-color:gtk_selection_bg_color}.org-powerline-active0{color:#000;background-color:#bfbfbf}.org-powerline-active1{color:#fff;background-color:#2b2b2b}.org-powerline-active2{color:#fff;background-color:#666}.org-powerline-inactive0{color:#333;background-color:#e5e5e5}.org-powerline-inactive1{color:#333;background-color:#1c1c1c}.org-powerline-inactive2{color:#333;background-color:#333}.org-preprocessor{color:#483d8b}.org-query-replace{color:#b0e2ff;background-color:#cd00cd}.org-rainbow-delimiters-depth-1{color:#ffdead}.org-rainbow-delimiters-depth-2{color:#00bfff}.org-rainbow-delimiters-depth-3{color:#ffdead}.org-rainbow-delimiters-depth-4{color:#00bfff}.org-rainbow-delimiters-depth-5{color:#ffdead}.org-rainbow-delimiters-depth-6{color:#00bfff}.org-rainbow-delimiters-depth-7{color:#ffdead}.org-rainbow-delimiters-depth-8{color:#00bfff}.org-rainbow-delimiters-depth-9{color:#ffdead}.org-rainbow-delimiters-unmatched{color:#88090b}.org-reb-match-0{background-color:#add8e6}.org-reb-match-1{background-color:#7fffd4}.org-reb-match-2{background-color:#00ff7f}.org-reb-match-3{background-color:#ff0}.org-rectangle-preview{background-color:gtk_selection_bg_color}.org-regexp-grouping-backslash,.org-regexp-grouping-construct{font-weight:700}.org-region{background-color:gtk_selection_bg_color}.org-secondary-selection{background-color:#ff0}.org-semantic-highlight-edits,.org-semantic-highlight-func-current-tag{background-color:#e5e5e5}.org-semantic-unmatched-syntax{text-decoration:underline}.org-sgml-namespace{color:#483d8b}.org-sh-escaped-newline{color:#8b2252}.org-sh-heredoc{color:#ee0}.org-sh-quoted-exec{color:#f0f}.org-shadow{color:#7f7f7f}.org-show-paren-match{background-color:#40e0d0}.org-show-paren-mismatch{color:#fff;background-color:#a020f0}.org-sp-pair-overlay,.org-sp-show-pair-enclosing{background-color:#b4eeb4}.org-sp-show-pair-match{background-color:#40e0d0}.org-sp-show-pair-mismatch{color:#fff;background-color:#a020f0}.org-sp-wrap-overlay{background-color:#b4eeb4}.org-sp-wrap-overlay-closing-pair{color:red;background-color:#b4eeb4}.org-sp-wrap-overlay-opening-pair{color:#0f0;background-color:#b4eeb4}.org-sp-wrap-tag-overlay{background-color:#b4eeb4}.org-spaceline-flycheck-error{color:#fc5c94;background-color:#333}.org-spaceline-flycheck-info{color:#8de6f7;background-color:#333}.org-spaceline-flycheck-warning{color:#f3ea98;background-color:#333}.org-spaceline-python-venv{color:#fbf}.org-speedbar-button{color:#008b00}.org-speedbar-directory{color:#00008b}.org-speedbar-file{color:#008b8b}.org-speedbar-highlight{background-color:#0f0}.org-speedbar-selected{color:red;text-decoration:underline}.org-speedbar-separator{color:#fff;background-color:#00f;text-decoration:overline}.org-speedbar-tag{color:brown}.org-string{color:#8b2252}.org-success{color:#228b22;font-weight:700}.org-table-cell{color:#e5e5e5;background-color:#00f}.org-tex-math{color:#8b2252}.org-tool-bar{color:#000;background-color:#bfbfbf}.org-tooltip{color:#000;background-color:#ffffe0}.org-trailing-whitespace{background-color:red}.org-tty-menu-disabled{color:#d3d3d3;background-color:#00f}.org-tty-menu-enabled{color:#ff0;background-color:#00f;font-weight:700}.org-tty-menu-selected{background-color:red}.org-type{color:#228b22}.org-underline{text-decoration:underline}.org-undo-tree-visualizer-active-branch{color:#000;font-weight:700}.org-undo-tree-visualizer-current{color:red}.org-undo-tree-visualizer-default{color:#bebebe}.org-undo-tree-visualizer-register{color:#ff0}.org-undo-tree-visualizer-unmodified{color:#0ff}.org-variable-name{color:sienna}.org-vhlXdefault{background-color:#ff0}.org-warning{color:#ff8c00;font-weight:700}.org-warning-1{color:red;font-weight:700}.org-wgrep{color:#fff;background-color:#228b22}.org-wgrep-delete{color:pink;background-color:#228b22}.org-wgrep-done{color:#00f}.org-wgrep-file{color:#fff;background-color:#228b22}.org-wgrep-reject{color:red;font-weight:700}.org-which-key-command-description{color:#00f}.org-which-key-docstring{color:#b22222}.org-which-key-group-description{color:#a020f0}.org-which-key-highlighted-command{color:#00f;text-decoration:underline}.org-which-key-key{color:#008b8b}.org-which-key-local-map-description{color:#00f}.org-which-key-note,.org-which-key-separator{color:#b22222}.org-which-key-special-key{color:#008b8b;font-weight:700}.org-whitespace-big-indent{color:#b22222;background-color:red}.org-whitespace-empty{color:#b22222;background-color:#ff0}.org-whitespace-hspace{color:#d3d3d3;background-color:#cdc9a5}.org-whitespace-indentation{color:#b22222;background-color:#ff0}.org-whitespace-line{color:violet;background-color:#333}.org-whitespace-newline{color:#d3d3d3}.org-whitespace-space{color:#d3d3d3;background-color:#ffffe0}.org-whitespace-space-after-tab{color:#b22222;background-color:#ff0}.org-whitespace-space-before-tab{color:#b22222;background-color:#ff8c00}.org-whitespace-tab{color:#d3d3d3;background-color:beige}.org-whitespace-trailing{color:#ff0;background-color:red;font-weight:700}.org-widget-button{font-weight:700}.org-widget-button-pressed{color:red}.org-widget-documentation{color:#006400}.org-widget-field{background-color:#d9d9d9}.org-widget-inactive{color:#7f7f7f}.org-widget-single-line-field{background-color:#d9d9d9}.org-window-divider{color:#999}.org-window-divider-first-pixel{color:#ccc}.org-window-divider-last-pixel{color:#666}a{color:inherit;background-color:inherit;font:inherit;text-decoration:inherit}a:hover{text-decoration:underline}body{width:95%;margin:2% auto;font-size:14px;line-height:1.4em;font-family:Georgia,serif;color:#333}@media screen and (min-width:600px){body{font-size:18px}}@media screen and (min-width:910px){body{width:900px}}::-moz-selection{background:#d6edff}::selection{background:#d6edff}p{margin:1em auto}dl,ol,ul{margin:0 auto}.title{margin:.8em auto;color:#000}.subtitle,.title{text-align:center}.subtitle{font-size:1.1em;line-height:1.4;font-weight:700;margin:1em auto}.abstract{margin:auto;width:80%;font-style:italic}.abstract p:last-of-type:before{content:"    ";white-space:pre}.status{font-size:90%;margin:2em auto}[class^=section-number-]{margin-right:.5em}[id^=orgheadline]{clear:both}#footnotes{font-size:90%}.footpara{display:inline;margin:.2em auto}.footdef{margin-bottom:1em}.footdef sup{padding-right:.5em}a{color:#527d9a;text-decoration:none}a:hover{color:#035;border-bottom:1px dotted}figure{padding:0;margin:1em auto;text-align:center}img{max-width:100%;vertical-align:middle}.MathJax_Display{margin:0!important;width:90%!important}h1,h2,h3,h4,h5,h6{color:#a5573e;line-height:1em;font-family:Helvetica,sans-serif}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1em}@media screen and (min-width:600px){h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.3em}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1.1em}}dt{font-weight:700}table{margin:1em auto;border-top:2px solid;border-collapse:collapse}table,thead{border-bottom:2px solid}table td+td,table th+th{border-left:1px solid grey}table tr{border-top:1px solid #d3d3d3}td,th{padding:.3em .6em;vertical-align:middle}caption.t-above{caption-side:top}caption.t-bottom{caption-side:bottom}caption{margin-bottom:.3em}figcaption{margin-top:.3em}th.org-center,th.org-left,th.org-right{text-align:center}td.org-right{text-align:right}td.org-left{text-align:left}td.org-center{text-align:center}blockquote{margin:1em 2em;padding-left:1em;border-left:3px solid #ccc}kbd{background-color:#f7f7f7;font-size:80%;margin:0 .1em;padding:.1em .6em}.todo{background-color:red}.done,.todo{color:#fff;padding:.1em .3em;border-radius:3px;background-clip:padding-box;font-size:80%;font-family:Lucida Console,monospace;line-height:1}.done{background-color:green}.priority{color:orange;font-family:Lucida Console,monospace}#table-of-contents li{clear:both}.tag{font-family:Lucida Console,monospace;font-size:.7em;font-weight:400}.tag span{padding:.3em;float:right;margin-right:.5em;border:1px solid #bbb;border-radius:3px;background-clip:padding-box;color:#333;background-color:#eee;line-height:1}.timestamp{color:#bebebe;font-size:90%}.timestamp-kwd{color:#5f9ea0}.org-right{margin-left:auto;margin-right:0;text-align:right}.org-left{margin-left:0;margin-right:auto;text-align:left}.org-center{margin-left:auto;margin-right:auto;text-align:center}.underline{text-decoration:underline}#postamble p,#preamble p{font-size:90%;margin:.2em}p.verse{margin-left:3%}:not(pre)>code{padding:2px 5px;margin:auto 1px;border:1px solid #ddd;border-radius:3px;background-clip:padding-box;color:#333;font-size:80%}.org-src-container{border:1px solid #ccc;box-shadow:3px 3px 3px #eee;font-family:Lucida Console,monospace;font-size:80%;margin:1em auto;padding:.1em .5em;position:relative}.org-src-container>pre{overflow:auto}.org-src-container>pre:before{display:block;position:absolute;background-color:#b3b3b3;top:0;right:0;padding:0 .5em;border-bottom-left-radius:8px;border:0;color:#fff;font-size:80%}.org-src-container>pre.src-sh:before{content:"sh"}.org-src-container>pre.src-bash:before{content:"bash"}.org-src-container>pre.src-emacs-lisp:before{content:"Emacs Lisp"}.org-src-container>pre.src-R:before{content:"R"}.org-src-container>pre.src-cpp:before{content:"C++"}.org-src-container>pre.src-c:before{content:"C"}.org-src-container>pre.src-html:before{content:"HTML"}.org-src-container>pre.src-javascript:before,.org-src-container>pre.src-js:before{content:"Javascript"}// More languages 0% http://orgmode.org/worg/org-contrib/babel/languages.html .org-src-container>pre.src-abc:before{content:"ABC"}.org-src-container>pre.src-asymptote:before{content:"Asymptote"}.org-src-container>pre.src-awk:before{content:"Awk"}.org-src-container>pre.src-C:before{content:"C"}.org-src-container>pre.src-calc:before{content:"Calc"}.org-src-container>pre.src-clojure:before{content:"Clojure"}.org-src-container>pre.src-comint:before{content:"comint"}.org-src-container>pre.src-css:before{content:"CSS"}.org-src-container>pre.src-D:before{content:"D"}.org-src-container>pre.src-ditaa:before{content:"Ditaa"}.org-src-container>pre.src-dot:before{content:"Dot"}.org-src-container>pre.src-ebnf:before{content:"ebnf"}.org-src-container>pre.src-forth:before{content:"Forth"}.org-src-container>pre.src-F90:before{content:"Fortran"}.org-src-container>pre.src-gnuplot:before{content:"Gnuplot"}.org-src-container>pre.src-haskell:before{content:"Haskell"}.org-src-container>pre.src-io:before{content:"Io"}.org-src-container>pre.src-java:before{content:"Java"}.org-src-container>pre.src-latex:before{content:"LaTeX"}.org-src-container>pre.src-ledger:before{content:"Ledger"}.org-src-container>pre.src-ly:before{content:"Lilypond"}.org-src-container>pre.src-lisp:before{content:"Lisp"}.org-src-container>pre.src-makefile:before{content:"Make"}.org-src-container>pre.src-matlab:before{content:"Matlab"}.org-src-container>pre.src-max:before{content:"Maxima"}.org-src-container>pre.src-mscgen:before{content:"Mscgen"}.org-src-container>pre.src-Caml:before{content:"Objective"}.org-src-container>pre.src-octave:before{content:"Octave"}.org-src-container>pre.src-org:before{content:"Org"}.org-src-container>pre.src-perl:before{content:"Perl"}.org-src-container>pre.src-picolisp:before{content:"Picolisp"}.org-src-container>pre.src-plantuml:before{content:"PlantUML"}.org-src-container>pre.src-python:before{content:"Python"}.org-src-container>pre.src-ruby:before{content:"Ruby"}.org-src-container>pre.src-sass:before{content:"Sass"}.org-src-container>pre.src-scala:before{content:"Scala"}.org-src-container>pre.src-scheme:before{content:"Scheme"}.org-src-container>pre.src-screen:before{content:"Screen"}.org-src-container>pre.src-sed:before{content:"Sed"}.org-src-container>pre.src-shell:before{content:"shell"}.org-src-container>pre.src-shen:before{content:"Shen"}.org-src-container>pre.src-sql:before{content:"SQL"}.org-src-container>pre.src-sqlite:before{content:"SQLite"}.org-src-container>pre.src-stan:before{content:"Stan"}.org-src-container>pre.src-vala:before{content:"Vala"}.org-src-container>pre.src-axiom:before{content:"Axiom"}.org-src-container>pre.src-browser:before{content:"HTML"}.org-src-container>pre.src-cypher:before{content:"Neo4j"}.org-src-container>pre.src-elixir:before{content:"Elixir"}.org-src-container>pre.src-request:before{content:"http"}.org-src-container>pre.src-ipython:before{content:"iPython"}.org-src-container>pre.src-kotlin:before{content:"Kotlin"}.org-src-container>pre.src-Flavored Erlang lfe:before{content:"Lisp"}.org-src-container>pre.src-mongo:before{content:"MongoDB"}.org-src-container>pre.src-prolog:before{content:"Prolog"}.org-src-container>pre.src-rec:before{content:"rec"}.org-src-container>pre.src-ML sml:before{content:"Standard"}.org-src-container>pre.src-Translate translate:before{content:"Google"}.org-src-container>pre.src-typescript:before{content:"Typescript"}.org-src-container>pre.src-rust:before{content:"Rust"}.inlinetask{background:#ffc;border:2px solid grey;margin:10px;padding:10px}#org-div-home-and-up{font-size:70%;text-align:right;white-space:nowrap}.linenr{font-size:90%}.code-highlighted{background-color:#ff0}#bibliography{font-size:90%}#bibliography table{width:100%}.creator{display:block}@media screen and (min-width:600px){.creator{display:inline;float:right}}
    diff --git a/bash/templates/build-aux/workflow/workflow.css b/bash/templates/build-aux/workflow/workflow.css
    new file mode 100644
    index 0000000..0e4f851
    --- /dev/null
    +++ b/bash/templates/build-aux/workflow/workflow.css
    @@ -0,0 +1,49 @@
    +/* EuAndreh's additions */
    +
    +#tasks, #bugs {
    +  border-bottom: 5px;
    +}
    +
    +a.header-anchor {
    +  font-size: 0.5em;
    +  opacity: 0.5;
    +}
    +
    +.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO {
    +	color: #fff;
    +	padding: .1em .3em;
    +	border-radius: 3px;
    +	background-clip: padding-box;
    +	font-size: 80%;
    +	font-family: Lucida Console,monospace;
    +	line-height: 1
    +}
    +
    +/*
    +  Replicate colors from:
    +  https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866
    +*/
    +
    +.TODO {
    +	background-color: brown;
    +}
    +
    +.DOING {
    +	background-color: yellowgreen;
    +}
    +
    +.WAITING, .MEETING {
    +	background-color: gray;
    +}
    +
    +.INACTIVE {
    +	background-color: orange;
    +}
    +
    +.NEXT {
    +	background-color: red;
    +}
    +
    +.CANCELLED, .DONE {
    +	background-color: green;
    +}
    diff --git a/bash/templates/workflow/preamble.org b/bash/templates/workflow/preamble.org
    deleted file mode 100644
    index 1da69e7..0000000
    --- a/bash/templates/workflow/preamble.org
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -#+TITLE: Tasks and bug listing for $PROJECT_UC
    -#+AUTHOR: EuAndreh 
    -#+BIND: org-html-validation-link nil
    -#+BIND: org-html-scripts nil
    -#+BIND: org-html-postamble nil
    -#+BIND: org-export-html-headline-anchor-format nil
    -#+BIND: org-html-doctype "html5"
    -#+OPTIONS: toc:nil html-style:nil num:nil
    -#+HTML_HEAD: 
    -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]]
    -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]]
    -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]]
    -#+MACRO: bug bug\nbsp{}[[#$1][#$1]]
    -#+MACRO: task task\nbsp{}[[#$1][#$1]]
    -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@)
    -
    -Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]].
    -
    -Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]].
    -
    -/Você também pode escrever em português./
    -
    -/Vous pouvez aussi écrire en français./
    -
    -#+TOC: headlines 2
    diff --git a/bash/templates/workflow/vendor/htmlize.el b/bash/templates/workflow/vendor/htmlize.el
    deleted file mode 100644
    index 02f251a..0000000
    --- a/bash/templates/workflow/vendor/htmlize.el
    +++ /dev/null
    @@ -1,1884 +0,0 @@
    -;;;; Taken from:
    -;;;; https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el
    -
    -;;; htmlize.el --- Convert buffer text and decorations to HTML. -*- lexical-binding: t -*-
    -
    -;; Copyright (C) 1997-2003,2005,2006,2009,2011,2012,2014,2017,2018 Hrvoje Niksic
    -
    -;; Author: Hrvoje Niksic 
    -;; Keywords: hypermedia, extensions
    -;; Version: 1.55
    -
    -;; This program is free software; you can redistribute it and/or modify
    -;; it under the terms of the GNU General Public License as published by
    -;; the Free Software Foundation; either version 2, or (at your option)
    -;; any later version.
    -
    -;; This program is distributed in the hope that it will be useful,
    -;; but WITHOUT ANY WARRANTY; without even the implied warranty of
    -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -;; GNU General Public License for more details.
    -
    -;; You should have received a copy of the GNU General Public License
    -;; along with this program; see the file COPYING.  If not, write to the
    -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330,
    -;; Boston, MA 02111-1307, USA.
    -
    -;;; Commentary:
    -
    -;; This package converts the buffer text and the associated
    -;; decorations to HTML.  Mail to  to discuss
    -;; features and additions.  All suggestions are more than welcome.
    -
    -;; To use it, just switch to the buffer you want HTML-ized and type
    -;; `M-x htmlize-buffer'.  You will be switched to a new buffer that
    -;; contains the resulting HTML code.  You can edit and inspect this
    -;; buffer, or you can just save it with C-x C-w.  `M-x htmlize-file'
    -;; will find a file, fontify it, and save the HTML version in
    -;; FILE.html, without any additional intervention.  `M-x
    -;; htmlize-many-files' allows you to htmlize any number of files in
    -;; the same manner.  `M-x htmlize-many-files-dired' does the same for
    -;; files marked in a dired buffer.
    -
    -;; htmlize supports three types of HTML output, selected by setting
    -;; `htmlize-output-type': `css', `inline-css', and `font'.  In `css'
    -;; mode, htmlize uses cascading style sheets to specify colors; it
    -;; generates classes that correspond to Emacs faces and uses ... to color parts of text.  In this mode, the
    -;; produced HTML is valid under the 4.01 strict DTD, as confirmed by
    -;; the W3C validator.  `inline-css' is like `css', except the CSS is
    -;; put directly in the STYLE attribute of the SPAN element, making it
    -;; possible to paste the generated HTML into existing HTML documents.
    -;; In `font' mode, htmlize uses ... to
    -;; colorize HTML, which is not standard-compliant, but works better in
    -;; older browsers.  `css' mode is the default.
    -
    -;; You can also use htmlize from your Emacs Lisp code.  When called
    -;; non-interactively, `htmlize-buffer' and `htmlize-region' will
    -;; return the resulting HTML buffer, but will not change current
    -;; buffer or move the point.  htmlize will do its best to work on
    -;; non-windowing Emacs sessions but the result will be limited to
    -;; colors supported by the terminal.
    -
    -;; htmlize aims for compatibility with older Emacs versions.  Please
    -;; let me know if it doesn't work on the version of GNU Emacs that you
    -;; are using.  The package relies on the presence of CL extensions;
    -;; please don't try to remove that dependency.  I see no practical
    -;; problems with using the full power of the CL extensions, except
    -;; that one might learn to like them too much.
    -
    -;; The latest version is available at:
    -;;
    -;;        
    -;;        
    -;;
    -
    -;; Thanks go to the many people who have sent reports and contributed
    -;; comments, suggestions, and fixes.  They include Ron Gut, Bob
    -;; Weiner, Toni Drabik, Peter Breton, Ville Skytta, Thomas Vogels,
    -;; Juri Linkov, Maciek Pasternacki, and many others.
    -
    -;; User quotes: "You sir, are a sick, sick, _sick_ person. :)"
    -;;                  -- Bill Perry, author of Emacs/W3
    -
    -
    -;;; Code:
    -
    -(require 'cl)
    -(eval-when-compile
    -  (defvar font-lock-auto-fontify)
    -  (defvar font-lock-support-mode)
    -  (defvar global-font-lock-mode))
    -
    -(defconst htmlize-version "1.55")
    -
    -(defgroup htmlize nil
    -  "Convert buffer text and faces to HTML."
    -  :group 'hypermedia)
    -
    -(defcustom htmlize-head-tags ""
    -  "Additional tags to insert within HEAD of the generated document."
    -  :type 'string
    -  :group 'htmlize)
    -
    -(defcustom htmlize-output-type 'css
    -  "Output type of generated HTML, one of `css', `inline-css', or `font'.
    -When set to `css' (the default), htmlize will generate a style sheet
    -with description of faces, and use it in the HTML document, specifying
    -the faces in the actual text with .
    -
    -When set to `inline-css', the style will be generated as above, but
    -placed directly in the STYLE attribute of the span ELEMENT: .  This makes it easier to paste the resulting HTML to
    -other documents.
    -
    -When set to `font', the properties will be set using layout tags
    -, , , , and .
    -
    -`css' output is normally preferred, but `font' is still useful for
    -supporting old, pre-CSS browsers, and both `inline-css' and `font' for
    -easier embedding of colorized text in foreign HTML documents (no style
    -sheet to carry around)."
    -  :type '(choice (const css) (const inline-css) (const font))
    -  :group 'htmlize)
    -
    -(defcustom htmlize-use-images t
    -  "Whether htmlize generates `img' for images attached to buffer contents."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-force-inline-images nil
    -  "Non-nil means generate all images inline using data URLs.
    -Normally htmlize converts image descriptors with :file properties to
    -relative URIs, and those with :data properties to data URIs.  With this
    -flag set, the images specified as a file name are loaded into memory and
    -embedded in the HTML as data URIs."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-max-alt-text 100
    -  "Maximum size of text to use as ALT text in images.
    -
    -Normally when htmlize encounters text covered by the `display' property
    -that specifies an image, it generates an `alt' attribute containing the
    -original text.  If the text is larger than `htmlize-max-alt-text' characters,
    -this will not be done."
    -  :type 'integer
    -  :group 'htmlize)
    -
    -(defcustom htmlize-transform-image 'htmlize-default-transform-image
    -  "Function called to modify the image descriptor.
    -
    -The function is called with the image descriptor found in the buffer and
    -the text the image is supposed to replace.  It should return a (possibly
    -different) image descriptor property list or a replacement string to use
    -instead of of the original buffer text.
    -
    -Returning nil is the same as returning the original text."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-generate-hyperlinks t
    -  "Non-nil means auto-generate the links from URLs and mail addresses in buffer.
    -
    -This is on by default; set it to nil if you don't want htmlize to
    -autogenerate such links.  Note that this option only turns off automatic
    -search for contents that looks like URLs and converting them to links.
    -It has no effect on whether htmlize respects the `htmlize-link' property."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-hyperlink-style "
    -      a {
    -        color: inherit;
    -        background-color: inherit;
    -        font: inherit;
    -        text-decoration: inherit;
    -      }
    -      a:hover {
    -        text-decoration: underline;
    -      }
    -"
    -  "The CSS style used for hyperlinks when in CSS mode."
    -  :type 'string
    -  :group 'htmlize)
    -
    -(defcustom htmlize-replace-form-feeds t
    -  "Non-nil means replace form feeds in source code with HTML separators.
    -Form feeds are the ^L characters at line beginnings that are sometimes
    -used to separate sections of source code.  If this variable is set to
    -`t', form feed characters are replaced with the 
    separator. If this -is a string, it specifies the replacement to use. Note that
     is
    -temporarily closed before the separator is inserted, so the default
    -replacement is effectively \"

    \".  If you specify
    -another replacement, don't forget to close and reopen the 
     if you
    -want the output to remain valid HTML.
    -
    -If you need more elaborate processing, set this to nil and use
    -htmlize-after-hook."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-html-charset nil
    -  "The charset declared by the resulting HTML documents.
    -When non-nil, causes htmlize to insert the following in the HEAD section
    -of the generated HTML:
    -
    -  
    -
    -where CHARSET is the value you've set for htmlize-html-charset.  Valid
    -charsets are defined by MIME and include strings like \"iso-8859-1\",
    -\"iso-8859-15\", \"utf-8\", etc.
    -
    -If you are using non-Latin-1 charsets, you might need to set this for
    -your documents to render correctly.  Also, the W3C validator requires
    -submitted HTML documents to declare a charset.  So if you care about
    -validation, you can use this to prevent the validator from bitching.
    -
    -Needless to say, if you set this, you should actually make sure that
    -the buffer is in the encoding you're claiming it is in.  (This is
    -normally achieved by using the correct file coding system for the
    -buffer.)  If you don't understand what that means, you should probably
    -leave this option in its default setting."
    -  :type '(choice (const :tag "Unset" nil)
    -		 string)
    -  :group 'htmlize)
    -
    -(defcustom htmlize-convert-nonascii-to-entities t
    -  "Whether non-ASCII characters should be converted to HTML entities.
    -
    -When this is non-nil, characters with codes in the 128-255 range will be
    -considered Latin 1 and rewritten as \"&#CODE;\".  Characters with codes
    -above 255 will be converted to \"&#UCS;\", where UCS denotes the Unicode
    -code point of the character.  If the code point cannot be determined,
    -the character will be copied unchanged, as would be the case if the
    -option were nil.
    -
    -When the option is nil, the non-ASCII characters are copied to HTML
    -without modification.  In that case, the web server and/or the browser
    -must be set to understand the encoding that was used when saving the
    -buffer.  (You might also want to specify it by setting
    -`htmlize-html-charset'.)
    -
    -Note that in an HTML entity \"&#CODE;\", CODE is always a UCS code point,
    -which has nothing to do with the charset the page is in.  For example,
    -\"©\" *always* refers to the copyright symbol, regardless of charset
    -specified by the META tag or the charset sent by the HTTP server.  In
    -other words, \"©\" is exactly equivalent to \"©\".
    -
    -For most people htmlize will work fine with this option left at the
    -default setting; don't change it unless you know what you're doing."
    -  :type 'sexp
    -  :group 'htmlize)
    -
    -(defcustom htmlize-ignore-face-size 'absolute
    -  "Whether face size should be ignored when generating HTML.
    -If this is nil, face sizes are used.  If set to t, sizes are ignored
    -If set to `absolute', only absolute size specifications are ignored.
    -Please note that font sizes only work with CSS-based output types."
    -  :type '(choice (const :tag "Don't ignore" nil)
    -		 (const :tag "Ignore all" t)
    -		 (const :tag "Ignore absolute" absolute))
    -  :group 'htmlize)
    -
    -(defcustom htmlize-css-name-prefix ""
    -  "The prefix used for CSS names.
    -The CSS names that htmlize generates from face names are often too
    -generic for CSS files; for example, `font-lock-type-face' is transformed
    -to `type'.  Use this variable to add a prefix to the generated names.
    -The string \"htmlize-\" is an example of a reasonable prefix."
    -  :type 'string
    -  :group 'htmlize)
    -
    -(defcustom htmlize-use-rgb-txt t
    -  "Whether `rgb.txt' should be used to convert color names to RGB.
    -
    -This conversion means determining, for instance, that the color
    -\"IndianRed\" corresponds to the (205, 92, 92) RGB triple.  `rgb.txt'
    -is the X color database that maps hundreds of color names to such RGB
    -triples.  When this variable is non-nil, `htmlize' uses `rgb.txt' to
    -look up color names.
    -
    -If this variable is nil, htmlize queries Emacs for RGB components of
    -colors using `color-instance-rgb-components' and `color-values'.
    -This can yield incorrect results on non-true-color displays.
    -
    -If the `rgb.txt' file is not found (which will be the case if you're
    -running Emacs on non-X11 systems), this option is ignored."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defvar htmlize-face-overrides nil
    -  "Overrides for face definitions.
    -
    -Normally face definitions are taken from Emacs settings for fonts
    -in the current frame.  For faces present in this plist, the
    -definitions will be used instead.  Keys in the plist are symbols
    -naming the face and values are the overriding definitions.  For
    -example:
    -
    -  (setq htmlize-face-overrides
    -        '(font-lock-warning-face \"black\"
    -          font-lock-function-name-face \"red\"
    -          font-lock-comment-face \"blue\"
    -          default (:foreground \"dark-green\" :background \"yellow\")))
    -
    -This variable can be also be `let' bound when running `htmlize-buffer'.")
    -
    -(defcustom htmlize-untabify t
    -  "Non-nil means untabify buffer contents during htmlization."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-html-major-mode nil
    -  "The mode the newly created HTML buffer will be put in.
    -Set this to nil if you prefer the default (fundamental) mode."
    -  :type '(radio (const :tag "No mode (fundamental)" nil)
    -		 (function-item html-mode)
    -		 (function :tag "User-defined major mode"))
    -  :group 'htmlize)
    -
    -(defcustom htmlize-pre-style nil
    -  "When non-nil, `
    ' tags will be decorated with style
    -information in `font' and `inline-css' modes. This allows a
    -consistent background for captures of regions."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defvar htmlize-before-hook nil
    -  "Hook run before htmlizing a buffer.
    -The hook functions are run in the source buffer (not the resulting HTML
    -buffer).")
    -
    -(defvar htmlize-after-hook nil
    -  "Hook run after htmlizing a buffer.
    -Unlike `htmlize-before-hook', these functions are run in the generated
    -HTML buffer.  You may use them to modify the outlook of the final HTML
    -output.")
    -
    -(defvar htmlize-file-hook nil
    -  "Hook run by `htmlize-file' after htmlizing a file, but before saving it.")
    -
    -(defvar htmlize-buffer-places)
    -
    -;;; Some cross-Emacs compatibility.
    -
    -;; We need a function that efficiently finds the next change of a
    -;; property regardless of whether the change occurred because of a
    -;; text property or an extent/overlay.
    -(defun htmlize-next-change (pos prop &optional limit)
    -  (if prop
    -      (next-single-char-property-change pos prop nil limit)
    -    (next-char-property-change pos limit)))
    -
    -(defun htmlize-overlay-faces-at (pos)
    -  (delq nil (mapcar (lambda (o) (overlay-get o 'face)) (overlays-at pos))))
    -
    -(defun htmlize-next-face-change (pos &optional limit)
    -  ;; (htmlize-next-change pos 'face limit) would skip over entire
    -  ;; overlays that specify the `face' property, even when they
    -  ;; contain smaller text properties that also specify `face'.
    -  ;; Emacs display engine merges those faces, and so must we.
    -  (or limit
    -      (setq limit (point-max)))
    -  (let ((next-prop (next-single-property-change pos 'face nil limit))
    -        (overlay-faces (htmlize-overlay-faces-at pos)))
    -    (while (progn
    -             (setq pos (next-overlay-change pos))
    -             (and (< pos next-prop)
    -                  (equal overlay-faces (htmlize-overlay-faces-at pos)))))
    -    (setq pos (min pos next-prop))
    -    ;; Additionally, we include the entire region that specifies the
    -    ;; `display' property.
    -    (when (get-char-property pos 'display)
    -      (setq pos (next-single-char-property-change pos 'display nil limit)))
    -    pos))
    -
    -(defmacro htmlize-lexlet (&rest letforms)
    -  (declare (indent 1) (debug let))
    -  (if (and (boundp 'lexical-binding)
    -           lexical-binding)
    -      `(let ,@letforms)
    -    ;; cl extensions have a macro implementing lexical let
    -    `(lexical-let ,@letforms)))
    -
    -
    -;;; Transformation of buffer text: HTML escapes, untabification, etc.
    -
    -(defvar htmlize-basic-character-table
    -  ;; Map characters in the 0-127 range to either one-character strings
    -  ;; or to numeric entities.
    -  (let ((table (make-vector 128 ?\0)))
    -    ;; Map characters in the 32-126 range to themselves, others to
    -    ;; &#CODE entities;
    -    (dotimes (i 128)
    -      (setf (aref table i) (if (and (>= i 32) (<= i 126))
    -			       (char-to-string i)
    -			     (format "&#%d;" i))))
    -    ;; Set exceptions manually.
    -    (setf
    -     ;; Don't escape newline, carriage return, and TAB.
    -     (aref table ?\n) "\n"
    -     (aref table ?\r) "\r"
    -     (aref table ?\t) "\t"
    -     ;; Escape &, <, and >.
    -     (aref table ?&) "&"
    -     (aref table ?<) "<"
    -     (aref table ?>) ">"
    -     ;; Not escaping '"' buys us a measurable speedup.  It's only
    -     ;; necessary to quote it for strings used in attribute values,
    -     ;; which htmlize doesn't typically do.
    -     ;(aref table ?\") """
    -     )
    -    table))
    -
    -;; A cache of HTML representation of non-ASCII characters.  Depending
    -;; on the setting of `htmlize-convert-nonascii-to-entities', this maps
    -;; non-ASCII characters to either "&#;" or "" (mapconcat's
    -;; mapper must always return strings).  It's only filled as characters
    -;; are encountered, so that in a buffer with e.g. French text, it will
    -;; only ever contain French accented characters as keys.  It's cleared
    -;; on each entry to htmlize-buffer-1 to allow modifications of
    -;; `htmlize-convert-nonascii-to-entities' to take effect.
    -(defvar htmlize-extended-character-cache (make-hash-table :test 'eq))
    -
    -(defun htmlize-protect-string (string)
    -  "HTML-protect string, escaping HTML metacharacters and I18N chars."
    -  ;; Only protecting strings that actually contain unsafe or non-ASCII
    -  ;; chars removes a lot of unnecessary funcalls and consing.
    -  (if (not (string-match "[^\r\n\t -%'-;=?-~]" string))
    -      string
    -    (mapconcat (lambda (char)
    -		 (cond
    -		  ((< char 128)
    -		   ;; ASCII: use htmlize-basic-character-table.
    -		   (aref htmlize-basic-character-table char))
    -		  ((gethash char htmlize-extended-character-cache)
    -		   ;; We've already seen this char; return the cached
    -		   ;; string.
    -		   )
    -		  ((not htmlize-convert-nonascii-to-entities)
    -		   ;; If conversion to entities is not desired, always
    -		   ;; copy the char literally.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (char-to-string char)))
    -		  ((< char 256)
    -		   ;; Latin 1: no need to call encode-char.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (format "&#%d;" char)))
    -		  ((encode-char char 'ucs)
    -                   ;; Must check if encode-char works for CHAR;
    -                   ;; it fails for Arabic and possibly elsewhere.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (format "&#%d;" (encode-char char 'ucs))))
    -		  (t
    -		   ;; encode-char doesn't work for this char.  Copy it
    -		   ;; unchanged and hope for the best.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (char-to-string char)))))
    -	       string "")))
    -
    -(defun htmlize-attr-escape (string)
    -  ;; Like htmlize-protect-string, but also escapes double-quoted
    -  ;; strings to make it usable in attribute values.
    -  (setq string (htmlize-protect-string string))
    -  (if (not (string-match "\"" string))
    -      string
    -    (mapconcat (lambda (char)
    -                 (if (eql char ?\")
    -                     """
    -                   (char-to-string char)))
    -               string "")))
    -
    -(defsubst htmlize-concat (list)
    -  (if (and (consp list) (null (cdr list)))
    -      ;; Don't create a new string in the common case where the list only
    -      ;; consists of one element.
    -      (car list)
    -    (apply #'concat list)))
    -
    -(defun htmlize-format-link (linkprops text)
    -  (let ((uri (if (stringp linkprops)
    -                 linkprops
    -               (plist-get linkprops :uri)))
    -        (escaped-text (htmlize-protect-string text)))
    -    (if uri
    -        (format "%s" (htmlize-attr-escape uri) escaped-text)
    -      escaped-text)))
    -
    -(defun htmlize-escape-or-link (string)
    -  ;; Escape STRING and/or add hyperlinks.  STRING comes from a
    -  ;; `display' property.
    -  (let ((pos 0) (end (length string)) outlist)
    -    (while (< pos end)
    -      (let* ((link (get-char-property pos 'htmlize-link string))
    -             (next-link-change (next-single-property-change
    -                                pos 'htmlize-link string end))
    -             (chunk (substring string pos next-link-change)))
    -        (push
    -         (cond (link
    -                (htmlize-format-link link chunk))
    -               ((get-char-property 0 'htmlize-literal chunk)
    -                chunk)
    -               (t
    -                (htmlize-protect-string chunk)))
    -         outlist)
    -        (setq pos next-link-change)))
    -    (htmlize-concat (nreverse outlist))))
    -
    -(defun htmlize-display-prop-to-html (display text)
    -  (let (desc)
    -    (cond ((stringp display)
    -           ;; Emacs ignores recursive display properties.
    -           (htmlize-escape-or-link display))
    -          ((not (eq (car-safe display) 'image))
    -           (htmlize-protect-string text))
    -          ((null (setq desc (funcall htmlize-transform-image
    -                                     (cdr display) text)))
    -           (htmlize-escape-or-link text))
    -          ((stringp desc)
    -           (htmlize-escape-or-link desc))
    -          (t
    -           (htmlize-generate-image desc text)))))
    -
    -(defun htmlize-string-to-html (string)
    -  ;; Convert the string to HTML, including images attached as
    -  ;; `display' property and links as `htmlize-link' property.  In a
    -  ;; string without images or links, this is equivalent to
    -  ;; `htmlize-protect-string'.
    -  (let ((pos 0) (end (length string)) outlist)
    -    (while (< pos end)
    -      (let* ((display (get-char-property pos 'display string))
    -             (next-display-change (next-single-property-change
    -                                   pos 'display string end))
    -             (chunk (substring string pos next-display-change)))
    -        (push
    -         (if display
    -             (htmlize-display-prop-to-html display chunk)
    -           (htmlize-escape-or-link chunk))
    -         outlist)
    -        (setq pos next-display-change)))
    -    (htmlize-concat (nreverse outlist))))
    -
    -(defun htmlize-default-transform-image (imgprops _text)
    -  "Default transformation of image descriptor to something usable in HTML.
    -
    -If `htmlize-use-images' is nil, the function always returns nil, meaning
    -use original text.  Otherwise, it tries to find the image for images that
    -specify a file name.  If `htmlize-force-inline-images' is non-nil, it also
    -converts the :file attribute to :data and returns the modified property
    -list."
    -  (when htmlize-use-images
    -    (when (plist-get imgprops :file)
    -      (let ((location (plist-get (cdr (find-image (list imgprops))) :file)))
    -        (when location
    -          (setq imgprops (plist-put (copy-list imgprops) :file location)))))
    -    (if htmlize-force-inline-images
    -        (let ((location (plist-get imgprops :file))
    -              data)
    -          (when location
    -            (with-temp-buffer
    -              (condition-case nil
    -                  (progn
    -                    (insert-file-contents-literally location)
    -                    (setq data (buffer-string)))
    -                (error nil))))
    -          ;; if successful, return the new plist, otherwise return
    -          ;; nil, which will use the original text
    -          (and data
    -               (plist-put (plist-put imgprops :file nil)
    -                          :data data)))
    -      imgprops)))
    -
    -(defun htmlize-alt-text (_imgprops origtext)
    -  (and (/= (length origtext) 0)
    -       (<= (length origtext) htmlize-max-alt-text)
    -       (not (string-match "[\0-\x1f]" origtext))
    -       origtext))
    -
    -(defun htmlize-generate-image (imgprops origtext)
    -  (let* ((alt-text (htmlize-alt-text imgprops origtext))
    -         (alt-attr (if alt-text
    -                       (format " alt=\"%s\"" (htmlize-attr-escape alt-text))
    -                     "")))
    -    (cond ((plist-get imgprops :file)
    -           ;; Try to find the image in image-load-path
    -           (let* ((found-props (cdr (find-image (list imgprops))))
    -                  (file (or (plist-get found-props :file)
    -                            (plist-get imgprops :file))))
    -             (format ""
    -                     (htmlize-attr-escape (file-relative-name file))
    -                     alt-attr)))
    -          ((plist-get imgprops :data)
    -           (format ""
    -                   (or (plist-get imgprops :type) "")
    -                   (base64-encode-string (plist-get imgprops :data))
    -                   alt-attr)))))
    -
    -(defconst htmlize-ellipsis "...")
    -(put-text-property 0 (length htmlize-ellipsis) 'htmlize-ellipsis t htmlize-ellipsis)
    -
    -(defun htmlize-match-inv-spec (inv)
    -  (member* inv buffer-invisibility-spec
    -           :key (lambda (i)
    -                  (if (symbolp i) i (car i)))))
    -
    -(defun htmlize-decode-invisibility-spec (invisible)
    -  ;; Return t, nil, or `ellipsis', depending on how invisible text should be inserted.
    -
    -  (if (not (listp buffer-invisibility-spec))
    -      ;; If buffer-invisibility-spec is not a list, then all
    -      ;; characters with non-nil `invisible' property are visible.
    -      (not invisible)
    -
    -    ;; Otherwise, the value of a non-nil `invisible' property can be:
    -    ;; 1. a symbol -- make the text invisible if it matches
    -    ;;    buffer-invisibility-spec.
    -    ;; 2. a list of symbols -- make the text invisible if
    -    ;;    any symbol in the list matches
    -    ;;    buffer-invisibility-spec.
    -    ;; If the match of buffer-invisibility-spec has a non-nil
    -    ;; CDR, replace the invisible text with an ellipsis.
    -    (let ((match (if (symbolp invisible)
    -                     (htmlize-match-inv-spec invisible)
    -                   (some #'htmlize-match-inv-spec invisible))))
    -      (cond ((null match) t)
    -            ((cdr-safe (car match)) 'ellipsis)
    -            (t nil)))))
    -
    -(defun htmlize-add-before-after-strings (beg end text)
    -  ;; Find overlays specifying before-string and after-string in [beg,
    -  ;; pos).  If any are found, splice them into TEXT and return the new
    -  ;; text.
    -  (let (additions)
    -    (dolist (overlay (overlays-in beg end))
    -      (let ((before (overlay-get overlay 'before-string))
    -            (after (overlay-get overlay 'after-string)))
    -        (when after
    -          (push (cons (- (overlay-end overlay) beg)
    -                      after)
    -                additions))
    -        (when before
    -          (push (cons (- (overlay-start overlay) beg)
    -                      before)
    -                additions))))
    -    (if additions
    -        (let ((textlist nil)
    -              (strpos 0))
    -          (dolist (add (stable-sort additions #'< :key #'car))
    -            (let ((addpos (car add))
    -                  (addtext (cdr add)))
    -              (push (substring text strpos addpos) textlist)
    -              (push addtext textlist)
    -              (setq strpos addpos)))
    -          (push (substring text strpos) textlist)
    -          (apply #'concat (nreverse textlist)))
    -      text)))
    -
    -(defun htmlize-copy-prop (prop beg end string)
    -  ;; Copy the specified property from the specified region of the
    -  ;; buffer to the target string.  We cannot rely on Emacs to copy the
    -  ;; property because we want to handle properties coming from both
    -  ;; text properties and overlays.
    -  (let ((pos beg))
    -    (while (< pos end)
    -      (let ((value (get-char-property pos prop))
    -            (next-change (htmlize-next-change pos prop end)))
    -        (when value
    -          (put-text-property (- pos beg) (- next-change beg)
    -                             prop value string))
    -        (setq pos next-change)))))
    -
    -(defun htmlize-get-text-with-display (beg end)
    -  ;; Like buffer-substring-no-properties, except it copies the
    -  ;; `display' property from the buffer, if found.
    -  (let ((text (buffer-substring-no-properties beg end)))
    -    (htmlize-copy-prop 'display beg end text)
    -    (htmlize-copy-prop 'htmlize-link beg end text)
    -    (setq text (htmlize-add-before-after-strings beg end text))
    -    text))
    -
    -(defun htmlize-buffer-substring-no-invisible (beg end)
    -  ;; Like buffer-substring-no-properties, but don't copy invisible
    -  ;; parts of the region.  Where buffer-substring-no-properties
    -  ;; mandates an ellipsis to be shown, htmlize-ellipsis is inserted.
    -  (let ((pos beg)
    -	visible-list invisible show last-show next-change)
    -    ;; Iterate over the changes in the `invisible' property and filter
    -    ;; out the portions where it's non-nil, i.e. where the text is
    -    ;; invisible.
    -    (while (< pos end)
    -      (setq invisible (get-char-property pos 'invisible)
    -	    next-change (htmlize-next-change pos 'invisible end)
    -            show (htmlize-decode-invisibility-spec invisible))
    -      (cond ((eq show t)
    -	     (push (htmlize-get-text-with-display pos next-change)
    -                   visible-list))
    -            ((and (eq show 'ellipsis)
    -                  (not (eq last-show 'ellipsis))
    -                  ;; Conflate successive ellipses.
    -                  (push htmlize-ellipsis visible-list))))
    -      (setq pos next-change last-show show))
    -    (htmlize-concat (nreverse visible-list))))
    -
    -(defun htmlize-trim-ellipsis (text)
    -  ;; Remove htmlize-ellipses ("...") from the beginning of TEXT if it
    -  ;; starts with it.  It checks for the special property of the
    -  ;; ellipsis so it doesn't work on ordinary text that begins with
    -  ;; "...".
    -  (if (get-text-property 0 'htmlize-ellipsis text)
    -      (substring text (length htmlize-ellipsis))
    -    text))
    -
    -(defconst htmlize-tab-spaces
    -  ;; A table of strings with spaces.  (aref htmlize-tab-spaces 5) is
    -  ;; like (make-string 5 ?\ ), except it doesn't cons.
    -  (let ((v (make-vector 32 nil)))
    -    (dotimes (i (length v))
    -      (setf (aref v i) (make-string i ?\ )))
    -    v))
    -
    -(defun htmlize-untabify-string (text start-column)
    -  "Untabify TEXT, assuming it starts at START-COLUMN."
    -  (let ((column start-column)
    -	(last-match 0)
    -	(chunk-start 0)
    -	chunks match-pos tab-size)
    -    (while (string-match "[\t\n]" text last-match)
    -      (setq match-pos (match-beginning 0))
    -      (cond ((eq (aref text match-pos) ?\t)
    -	     ;; Encountered a tab: create a chunk of text followed by
    -	     ;; the expanded tab.
    -	     (push (substring text chunk-start match-pos) chunks)
    -	     ;; Increase COLUMN by the length of the text we've
    -	     ;; skipped since last tab or newline.  (Encountering
    -	     ;; newline resets it.)
    -	     (incf column (- match-pos last-match))
    -	     ;; Calculate tab size based on tab-width and COLUMN.
    -	     (setq tab-size (- tab-width (% column tab-width)))
    -	     ;; Expand the tab, carefully recreating the `display'
    -	     ;; property if one was on the TAB.
    -             (let ((display (get-text-property match-pos 'display text))
    -                   (expanded-tab (aref htmlize-tab-spaces tab-size)))
    -               (when display
    -                 (put-text-property 0 tab-size 'display display expanded-tab))
    -               (push expanded-tab chunks))
    -	     (incf column tab-size)
    -	     (setq chunk-start (1+ match-pos)))
    -	    (t
    -	     ;; Reset COLUMN at beginning of line.
    -	     (setq column 0)))
    -      (setq last-match (1+ match-pos)))
    -    ;; If no chunks have been allocated, it means there have been no
    -    ;; tabs to expand.  Return TEXT unmodified.
    -    (if (null chunks)
    -	text
    -      (when (< chunk-start (length text))
    -	;; Push the remaining chunk.
    -	(push (substring text chunk-start) chunks))
    -      ;; Generate the output from the available chunks.
    -      (htmlize-concat (nreverse chunks)))))
    -
    -(defun htmlize-extract-text (beg end trailing-ellipsis)
    -  ;; Extract buffer text, sans the invisible parts.  Then
    -  ;; untabify it and escape the HTML metacharacters.
    -  (let ((text (htmlize-buffer-substring-no-invisible beg end)))
    -    (when trailing-ellipsis
    -      (setq text (htmlize-trim-ellipsis text)))
    -    ;; If TEXT ends up empty, don't change trailing-ellipsis.
    -    (when (> (length text) 0)
    -      (setq trailing-ellipsis
    -            (get-text-property (1- (length text))
    -                               'htmlize-ellipsis text)))
    -    (when htmlize-untabify
    -      (setq text (htmlize-untabify-string text (current-column))))
    -    (setq text (htmlize-string-to-html text))
    -    (values text trailing-ellipsis)))
    -
    -(defun htmlize-despam-address (string)
    -  "Replace every occurrence of '@' in STRING with %40.
    -This is used to protect mailto links without modifying their meaning."
    -  ;; Suggested by Ville Skytta.
    -  (while (string-match "@" string)
    -    (setq string (replace-match "%40" nil t string)))
    -  string)
    -
    -(defun htmlize-make-tmp-overlay (beg end props)
    -  (let ((overlay (make-overlay beg end)))
    -    (overlay-put overlay 'htmlize-tmp-overlay t)
    -    (while props
    -      (overlay-put overlay (pop props) (pop props)))
    -    overlay))
    -
    -(defun htmlize-delete-tmp-overlays ()
    -  (dolist (overlay (overlays-in (point-min) (point-max)))
    -    (when (overlay-get overlay 'htmlize-tmp-overlay)
    -      (delete-overlay overlay))))
    -
    -(defun htmlize-make-link-overlay (beg end uri)
    -  (htmlize-make-tmp-overlay beg end `(htmlize-link (:uri ,uri))))
    -
    -(defun htmlize-create-auto-links ()
    -  "Add `htmlize-link' property to all mailto links in the buffer."
    -  (save-excursion
    -    (goto-char (point-min))
    -    (while (re-search-forward
    -            "<\\(\\(mailto:\\)?\\([-=+_.a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\\)\\)>"
    -            nil t)
    -      (let* ((address (match-string 3))
    -             (beg (match-beginning 0)) (end (match-end 0))
    -             (uri (concat "mailto:" (htmlize-despam-address address))))
    -        (htmlize-make-link-overlay beg end uri)))
    -    (goto-char (point-min))
    -    (while (re-search-forward "<\\(\\(URL:\\)?\\([a-zA-Z]+://[^;]+\\)\\)>"
    -                              nil t)
    -      (htmlize-make-link-overlay
    -       (match-beginning 0) (match-end 0) (match-string 3)))))
    -
    -;; Tests for htmlize-create-auto-links:
    -
    -;; 
    -;; 
    -;; 
    -;; 
    -;; 
    -;; 
    -
    -(defun htmlize-shadow-form-feeds ()
    -  (let ((s "\n
    ")) - (put-text-property 0 (length s) 'htmlize-literal t s) - (let ((disp `(display ,s))) - (while (re-search-forward "\n\^L" nil t) - (let* ((beg (match-beginning 0)) - (end (match-end 0)) - (form-feed-pos (1+ beg)) - ;; don't process ^L if invisible or covered by `display' - (show (and (htmlize-decode-invisibility-spec - (get-char-property form-feed-pos 'invisible)) - (not (get-char-property form-feed-pos 'display))))) - (when show - (htmlize-make-tmp-overlay beg end disp))))))) - -(defun htmlize-defang-local-variables () - ;; Juri Linkov reports that an HTML-ized "Local variables" can lead - ;; visiting the HTML to fail with "Local variables list is not - ;; properly terminated". He suggested changing the phrase to - ;; syntactically equivalent HTML that Emacs doesn't recognize. - (goto-char (point-min)) - (while (search-forward "Local Variables:" nil t) - (replace-match "Local Variables:" nil t))) - - -;;; Color handling. - -(defvar htmlize-x-library-search-path - `(,data-directory - "/etc/X11/rgb.txt" - "/usr/share/X11/rgb.txt" - ;; the remainder of this list really belongs in a museum - "/usr/X11R6/lib/X11/" - "/usr/X11R5/lib/X11/" - "/usr/lib/X11R6/X11/" - "/usr/lib/X11R5/X11/" - "/usr/local/X11R6/lib/X11/" - "/usr/local/X11R5/lib/X11/" - "/usr/local/lib/X11R6/X11/" - "/usr/local/lib/X11R5/X11/" - "/usr/X11/lib/X11/" - "/usr/lib/X11/" - "/usr/local/lib/X11/" - "/usr/X386/lib/X11/" - "/usr/x386/lib/X11/" - "/usr/XFree86/lib/X11/" - "/usr/unsupported/lib/X11/" - "/usr/athena/lib/X11/" - "/usr/local/x11r5/lib/X11/" - "/usr/lpp/Xamples/lib/X11/" - "/usr/openwin/lib/X11/" - "/usr/openwin/share/lib/X11/")) - -(defun htmlize-get-color-rgb-hash (&optional rgb-file) - "Return a hash table mapping X color names to RGB values. -The keys in the hash table are X11 color names, and the values are the -#rrggbb RGB specifications, extracted from `rgb.txt'. - -If RGB-FILE is nil, the function will try hard to find a suitable file -in the system directories. - -If no rgb.txt file is found, return nil." - (let ((rgb-file (or rgb-file (locate-file - "rgb.txt" - htmlize-x-library-search-path))) - (hash nil)) - (when rgb-file - (with-temp-buffer - (insert-file-contents rgb-file) - (setq hash (make-hash-table :test 'equal)) - (while (not (eobp)) - (cond ((looking-at "^\\s-*\\([!#]\\|$\\)") - ;; Skip comments and empty lines. - ) - ((looking-at - "[ \t]*\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\(.*\\)") - (setf (gethash (downcase (match-string 4)) hash) - (format "#%02x%02x%02x" - (string-to-number (match-string 1)) - (string-to-number (match-string 2)) - (string-to-number (match-string 3))))) - (t - (error - "Unrecognized line in %s: %s" - rgb-file - (buffer-substring (point) (progn (end-of-line) (point)))))) - (forward-line 1)))) - hash)) - -;; Compile the RGB map when loaded. On systems where rgb.txt is -;; missing, the value of the variable will be nil, and rgb.txt will -;; not be used. -(defvar htmlize-color-rgb-hash (htmlize-get-color-rgb-hash)) - -;;; Face handling. - -(defun htmlize-face-color-internal (face fg) - ;; Used only under GNU Emacs. Return the color of FACE, but don't - ;; return "unspecified-fg" or "unspecified-bg". If the face is - ;; `default' and the color is unspecified, look up the color in - ;; frame parameters. - (let* ((function (if fg #'face-foreground #'face-background)) - (color (funcall function face nil t))) - (when (and (eq face 'default) (null color)) - (setq color (cdr (assq (if fg 'foreground-color 'background-color) - (frame-parameters))))) - (when (or (eq color 'unspecified) - (equal color "unspecified-fg") - (equal color "unspecified-bg")) - (setq color nil)) - (when (and (eq face 'default) - (null color)) - ;; Assuming black on white doesn't seem right, but I can't think - ;; of anything better to do. - (setq color (if fg "black" "white"))) - color)) - -(defun htmlize-face-foreground (face) - ;; Return the name of the foreground color of FACE. If FACE does - ;; not specify a foreground color, return nil. - (htmlize-face-color-internal face t)) - -(defun htmlize-face-background (face) - ;; Return the name of the background color of FACE. If FACE does - ;; not specify a background color, return nil. - ;; GNU Emacs. - (htmlize-face-color-internal face nil)) - -;; Convert COLOR to the #RRGGBB string. If COLOR is already in that -;; format, it's left unchanged. - -(defun htmlize-color-to-rgb (color) - (let ((rgb-string nil)) - (cond ((null color) - ;; Ignore nil COLOR because it means that the face is not - ;; specifying any color. Hence (htmlize-color-to-rgb nil) - ;; returns nil. - ) - ((string-match "\\`#" color) - ;; The color is already in #rrggbb format. - (setq rgb-string color)) - ((and htmlize-use-rgb-txt - htmlize-color-rgb-hash) - ;; Use of rgb.txt is requested, and it's available on the - ;; system. Use it. - (setq rgb-string (gethash (downcase color) htmlize-color-rgb-hash))) - (t - ;; We're getting the RGB components from Emacs. - (let ((rgb (mapcar (lambda (arg) - (/ arg 256)) - (color-values color)))) - (when rgb - (setq rgb-string (apply #'format "#%02x%02x%02x" rgb)))))) - ;; If RGB-STRING is still nil, it means the color cannot be found, - ;; for whatever reason. In that case just punt and return COLOR. - ;; Most browsers support a decent set of color names anyway. - (or rgb-string color))) - -;; We store the face properties we care about into an -;; `htmlize-fstruct' type. That way we only have to analyze face -;; properties, which can be time consuming, once per each face. The -;; mapping between Emacs faces and htmlize-fstructs is established by -;; htmlize-make-face-map. The name "fstruct" refers to variables of -;; type `htmlize-fstruct', while the term "face" is reserved for Emacs -;; faces. - -(defstruct htmlize-fstruct - foreground ; foreground color, #rrggbb - background ; background color, #rrggbb - size ; size - boldp ; whether face is bold - italicp ; whether face is italic - underlinep ; whether face is underlined - overlinep ; whether face is overlined - strikep ; whether face is struck through - css-name ; CSS name of face - ) - -(defun htmlize-face-set-from-keyword-attr (fstruct attr value) - ;; For ATTR and VALUE, set the equivalent value in FSTRUCT. - (case attr - (:foreground - (setf (htmlize-fstruct-foreground fstruct) (htmlize-color-to-rgb value))) - (:background - (setf (htmlize-fstruct-background fstruct) (htmlize-color-to-rgb value))) - (:height - (setf (htmlize-fstruct-size fstruct) value)) - (:weight - (when (string-match (symbol-name value) "bold") - (setf (htmlize-fstruct-boldp fstruct) t))) - (:slant - (setf (htmlize-fstruct-italicp fstruct) (or (eq value 'italic) - (eq value 'oblique)))) - (:bold - (setf (htmlize-fstruct-boldp fstruct) value)) - (:italic - (setf (htmlize-fstruct-italicp fstruct) value)) - (:underline - (setf (htmlize-fstruct-underlinep fstruct) value)) - (:overline - (setf (htmlize-fstruct-overlinep fstruct) value)) - (:strike-through - (setf (htmlize-fstruct-strikep fstruct) value)))) - -(defun htmlize-face-size (face) - ;; The size (height) of FACE, taking inheritance into account. - ;; Only works in Emacs 21 and later. - (let* ((face-list (list face)) - (head face-list) - (tail face-list)) - (while head - (let ((inherit (face-attribute (car head) :inherit))) - (cond ((listp inherit) - (setcdr tail (copy-list inherit)) - (setq tail (last tail))) - ((eq inherit 'unspecified)) - (t - (setcdr tail (list inherit)) - (setq tail (cdr tail))))) - (pop head)) - (let ((size-list - (loop - for f in face-list - for h = (face-attribute f :height) - collect (if (eq h 'unspecified) nil h)))) - (reduce 'htmlize-merge-size (cons nil size-list))))) - -(defun htmlize-face-css-name (face) - ;; Generate the css-name property for the given face. Emacs places - ;; no restrictions on the names of symbols that represent faces -- - ;; any characters may be in the name, even control chars. We try - ;; hard to beat the face name into shape, both esthetically and - ;; according to CSS1 specs. - (let ((name (downcase (symbol-name face)))) - (when (string-match "\\`font-lock-" name) - ;; font-lock-FOO-face -> FOO. - (setq name (replace-match "" t t name))) - (when (string-match "-face\\'" name) - ;; Drop the redundant "-face" suffix. - (setq name (replace-match "" t t name))) - (while (string-match "[^-a-zA-Z0-9]" name) - ;; Drop the non-alphanumerics. - (setq name (replace-match "X" t t name))) - (when (string-match "\\`[-0-9]" name) - ;; CSS identifiers may not start with a digit. - (setq name (concat "X" name))) - ;; After these transformations, the face could come out empty. - (when (equal name "") - (setq name "face")) - ;; Apply the prefix. - (concat htmlize-css-name-prefix name))) - -(defun htmlize-face-to-fstruct-1 (face) - "Convert Emacs face FACE to fstruct, internal." - (let ((fstruct (make-htmlize-fstruct - :foreground (htmlize-color-to-rgb - (htmlize-face-foreground face)) - :background (htmlize-color-to-rgb - (htmlize-face-background face))))) - ;; GNU Emacs - (dolist (attr '(:weight :slant :underline :overline :strike-through)) - (let ((value (face-attribute face attr nil t))) - (when (and value (not (eq value 'unspecified))) - (htmlize-face-set-from-keyword-attr fstruct attr value)))) - (let ((size (htmlize-face-size face))) - (unless (eql size 1.0) ; ignore non-spec - (setf (htmlize-fstruct-size fstruct) size))) - (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face)) - fstruct)) - -(defun htmlize-face-to-fstruct (face) - (let* ((face-list (or (and (symbolp face) - (cdr (assq face face-remapping-alist))) - (list face))) - (fstruct (htmlize-merge-faces - (mapcar (lambda (face) - (if (symbolp face) - (or (htmlize-get-override-fstruct face) - (htmlize-face-to-fstruct-1 face)) - (htmlize-attrlist-to-fstruct face))) - (nreverse face-list))))) - (when (symbolp face) - (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face))) - fstruct)) - -(defmacro htmlize-copy-attr-if-set (attr-list dest source) - ;; Generate code with the following pattern: - ;; (progn - ;; (when (htmlize-fstruct-ATTR source) - ;; (setf (htmlize-fstruct-ATTR dest) (htmlize-fstruct-ATTR source))) - ;; ...) - ;; for the given list of boolean attributes. - (cons 'progn - (loop for attr in attr-list - for attr-sym = (intern (format "htmlize-fstruct-%s" attr)) - collect `(when (,attr-sym ,source) - (setf (,attr-sym ,dest) (,attr-sym ,source)))))) - -(defun htmlize-merge-size (merged next) - ;; Calculate the size of the merge of MERGED and NEXT. - (cond ((null merged) next) - ((integerp next) next) - ((null next) merged) - ((floatp merged) (* merged next)) - ((integerp merged) (round (* merged next))))) - -(defun htmlize-merge-two-faces (merged next) - (htmlize-copy-attr-if-set - (foreground background boldp italicp underlinep overlinep strikep) - merged next) - (setf (htmlize-fstruct-size merged) - (htmlize-merge-size (htmlize-fstruct-size merged) - (htmlize-fstruct-size next))) - merged) - -(defun htmlize-merge-faces (fstruct-list) - (cond ((null fstruct-list) - ;; Nothing to do, return a dummy face. - (make-htmlize-fstruct)) - ((null (cdr fstruct-list)) - ;; Optimize for the common case of a single face, simply - ;; return it. - (car fstruct-list)) - (t - (reduce #'htmlize-merge-two-faces - (cons (make-htmlize-fstruct) fstruct-list))))) - -;; GNU Emacs 20+ supports attribute lists in `face' properties. For -;; example, you can use `(:foreground "red" :weight bold)' as an -;; overlay's "face", or you can even use a list of such lists, etc. -;; We call those "attrlists". -;; -;; htmlize supports attrlist by converting them to fstructs, the same -;; as with regular faces. - -(defun htmlize-attrlist-to-fstruct (attrlist &optional name) - ;; Like htmlize-face-to-fstruct, but accepts an ATTRLIST as input. - (let ((fstruct (make-htmlize-fstruct))) - (cond ((eq (car attrlist) 'foreground-color) - ;; ATTRLIST is (foreground-color . COLOR) - (setf (htmlize-fstruct-foreground fstruct) - (htmlize-color-to-rgb (cdr attrlist)))) - ((eq (car attrlist) 'background-color) - ;; ATTRLIST is (background-color . COLOR) - (setf (htmlize-fstruct-background fstruct) - (htmlize-color-to-rgb (cdr attrlist)))) - (t - ;; ATTRLIST is a plist. - (while attrlist - (let ((attr (pop attrlist)) - (value (pop attrlist))) - (when (and value (not (eq value 'unspecified))) - (htmlize-face-set-from-keyword-attr fstruct attr value)))))) - (setf (htmlize-fstruct-css-name fstruct) (or name "custom")) - fstruct)) - -(defun htmlize-decode-face-prop (prop) - "Turn face property PROP into a list of face-like objects." - ;; PROP can be a symbol naming a face, a string naming such a - ;; symbol, a cons (foreground-color . COLOR) or (background-color - ;; COLOR), a property list (:attr1 val1 :attr2 val2 ...), or a list - ;; of any of those. - ;; - ;; (htmlize-decode-face-prop 'face) -> (face) - ;; (htmlize-decode-face-prop '(face1 face2)) -> (face1 face2) - ;; (htmlize-decode-face-prop '(:attr "val")) -> ((:attr "val")) - ;; (htmlize-decode-face-prop '((:attr "val") face (foreground-color "red"))) - ;; -> ((:attr "val") face (foreground-color "red")) - ;; - ;; Unrecognized atoms or non-face symbols/strings are silently - ;; stripped away. - (cond ((null prop) - nil) - ((symbolp prop) - (and (facep prop) - (list prop))) - ((stringp prop) - (and (facep (intern-soft prop)) - (list prop))) - ((atom prop) - nil) - ((and (symbolp (car prop)) - (eq ?: (aref (symbol-name (car prop)) 0))) - (list prop)) - ((or (eq (car prop) 'foreground-color) - (eq (car prop) 'background-color)) - (list prop)) - (t - (apply #'nconc (mapcar #'htmlize-decode-face-prop prop))))) - -(defun htmlize-get-override-fstruct (face) - (let* ((raw-def (plist-get htmlize-face-overrides face)) - (def (cond ((stringp raw-def) (list :foreground raw-def)) - ((listp raw-def) raw-def) - (t - (error (format (concat "face override must be an " - "attribute list or string, got %s") - raw-def)))))) - (and def - (htmlize-attrlist-to-fstruct def (symbol-name face))))) - -(defun htmlize-make-face-map (faces) - ;; Return a hash table mapping Emacs faces to htmlize's fstructs. - ;; The keys are either face symbols or attrlists, so the test - ;; function must be `equal'. - (let ((face-map (make-hash-table :test 'equal)) - css-names) - (dolist (face faces) - (unless (gethash face face-map) - ;; Haven't seen FACE yet; convert it to an fstruct and cache - ;; it. - (let ((fstruct (htmlize-face-to-fstruct face))) - (setf (gethash face face-map) fstruct) - (let* ((css-name (htmlize-fstruct-css-name fstruct)) - (new-name css-name) - (i 0)) - ;; Uniquify the face's css-name by using NAME-1, NAME-2, - ;; etc. - (while (member new-name css-names) - (setq new-name (format "%s-%s" css-name (incf i)))) - (unless (equal new-name css-name) - (setf (htmlize-fstruct-css-name fstruct) new-name)) - (push new-name css-names))))) - face-map)) - -(defun htmlize-unstringify-face (face) - "If FACE is a string, return it interned, otherwise return it unchanged." - (if (stringp face) - (intern face) - face)) - -(defun htmlize-faces-in-buffer () - "Return a list of faces used in the current buffer. -This is the set of faces specified by the `face' text property and by buffer -overlays that specify `face'." - (let (faces) - ;; Faces used by text properties. - (let ((pos (point-min)) face-prop next) - (while (< pos (point-max)) - (setq face-prop (get-text-property pos 'face) - next (or (next-single-property-change pos 'face) (point-max))) - (setq faces (nunion (htmlize-decode-face-prop face-prop) - faces :test 'equal)) - (setq pos next))) - ;; Faces used by overlays. - (dolist (overlay (overlays-in (point-min) (point-max))) - (let ((face-prop (overlay-get overlay 'face))) - (setq faces (nunion (htmlize-decode-face-prop face-prop) - faces :test 'equal)))) - faces)) - -(if (>= emacs-major-version 25) - (defun htmlize-sorted-overlays-at (pos) - (overlays-at pos t)) - - (defun htmlize-sorted-overlays-at (pos) - ;; Like OVERLAYS-AT with the SORTED argument, for older Emacsen. - (let ((overlays (overlays-at pos))) - (setq overlays (sort* overlays #'< - :key (lambda (o) - (- (overlay-end o) (overlay-start o))))) - (setq overlays - (stable-sort overlays #'< - :key (lambda (o) - (let ((prio (overlay-get o 'priority))) - (if (numberp prio) prio 0))))) - (nreverse overlays)))) - - -;; htmlize-faces-at-point returns the faces in use at point. The -;; faces are sorted by increasing priority, i.e. the last face takes -;; precedence. -;; -;; This returns all the faces in the `face' property and all the faces -;; in the overlays at point. - -(defun htmlize-faces-at-point () - (let (all-faces) - ;; Faces from text properties. - (let ((face-prop (get-text-property (point) 'face))) - ;; we need to reverse the `face' prop because we want - ;; more specific faces to come later - (setq all-faces (nreverse (htmlize-decode-face-prop face-prop)))) - ;; Faces from overlays. - (let ((overlays - ;; Collect overlays at point that specify `face'. - (delete-if-not (lambda (o) - (overlay-get o 'face)) - (nreverse (htmlize-sorted-overlays-at (point))))) - list face-prop) - (dolist (overlay overlays) - (setq face-prop (overlay-get overlay 'face) - list (nconc (htmlize-decode-face-prop face-prop) list))) - ;; Under "Merging Faces" the manual explicitly states - ;; that faces specified by overlays take precedence over - ;; faces specified by text properties. - (setq all-faces (nconc all-faces list))) - all-faces)) - -;; htmlize supports generating HTML in several flavors, some of which -;; use CSS, and others the element. We take an OO approach and -;; define "methods" that indirect to the functions that depend on -;; `htmlize-output-type'. The currently used methods are `doctype', -;; `insert-head', `body-tag', `pre-tag', and `text-markup'. Not all -;; output types define all methods. -;; -;; Methods are called either with (htmlize-method METHOD ARGS...) -;; special form, or by accessing the function with -;; (htmlize-method-function 'METHOD) and calling (funcall FUNCTION). -;; The latter form is useful in tight loops because `htmlize-method' -;; conses. - -(defmacro htmlize-method (method &rest args) - ;; Expand to (htmlize-TYPE-METHOD ...ARGS...). TYPE is the value of - ;; `htmlize-output-type' at run time. - `(funcall (htmlize-method-function ',method) ,@args)) - -(defun htmlize-method-function (method) - ;; Return METHOD's function definition for the current output type. - ;; The returned object can be safely funcalled. - (let ((sym (intern (format "htmlize-%s-%s" htmlize-output-type method)))) - (indirect-function (if (fboundp sym) - sym - (let ((default (intern (concat "htmlize-default-" - (symbol-name method))))) - (if (fboundp default) - default - 'ignore)))))) - -(defvar htmlize-memoization-table (make-hash-table :test 'equal)) - -(defmacro htmlize-memoize (key generator) - "Return the value of GENERATOR, memoized as KEY. -That means that GENERATOR will be evaluated and returned the first time -it's called with the same value of KEY. All other times, the cached -\(memoized) value will be returned." - (let ((value (gensym))) - `(let ((,value (gethash ,key htmlize-memoization-table))) - (unless ,value - (setq ,value ,generator) - (setf (gethash ,key htmlize-memoization-table) ,value)) - ,value))) - -;;; Default methods. - -(defun htmlize-default-doctype () - nil ; no doc-string - ;; Note that the `font' output is technically invalid under this DTD - ;; because the DTD doesn't allow embedding in
    .
    -  ""
    -  )
    -
    -(defun htmlize-default-body-tag (face-map)
    -  nil					; no doc-string
    -  face-map ; shut up the byte-compiler
    -  "")
    -
    -(defun htmlize-default-pre-tag (face-map)
    -  nil					; no doc-string
    -  face-map ; shut up the byte-compiler
    -  "
    ")
    -
    -
    -;;; CSS based output support.
    -
    -;; Internal function; not a method.
    -(defun htmlize-css-specs (fstruct)
    -  (let (result)
    -    (when (htmlize-fstruct-foreground fstruct)
    -      (push (format "color: %s;" (htmlize-fstruct-foreground fstruct))
    -	    result))
    -    (when (htmlize-fstruct-background fstruct)
    -      (push (format "background-color: %s;"
    -		    (htmlize-fstruct-background fstruct))
    -	    result))
    -    (let ((size (htmlize-fstruct-size fstruct)))
    -      (when (and size (not (eq htmlize-ignore-face-size t)))
    -	(cond ((floatp size)
    -	       (push (format "font-size: %d%%;" (* 100 size)) result))
    -	      ((not (eq htmlize-ignore-face-size 'absolute))
    -	       (push (format "font-size: %spt;" (/ size 10.0)) result)))))
    -    (when (htmlize-fstruct-boldp fstruct)
    -      (push "font-weight: bold;" result))
    -    (when (htmlize-fstruct-italicp fstruct)
    -      (push "font-style: italic;" result))
    -    (when (htmlize-fstruct-underlinep fstruct)
    -      (push "text-decoration: underline;" result))
    -    (when (htmlize-fstruct-overlinep fstruct)
    -      (push "text-decoration: overline;" result))
    -    (when (htmlize-fstruct-strikep fstruct)
    -      (push "text-decoration: line-through;" result))
    -    (nreverse result)))
    -
    -(defun htmlize-css-insert-head (buffer-faces face-map)
    -  (insert "    \n"))
    -
    -(defun htmlize-css-text-markup (fstruct-list buffer)
    -  ;; Open the markup needed to insert text colored with FACES into
    -  ;; BUFFER.  Return the function that closes the markup.
    -
    -  ;; In CSS mode, this is easy: just nest the text in one  tag for each face in FSTRUCT-LIST.
    -  (dolist (fstruct fstruct-list)
    -    (princ "" buffer))
    -  (htmlize-lexlet ((fstruct-list fstruct-list) (buffer buffer))
    -    (lambda ()
    -      (dolist (fstruct fstruct-list)
    -        (ignore fstruct)                ; shut up the byte-compiler
    -        (princ "" buffer)))))
    -
    -;; `inline-css' output support.
    -
    -(defun htmlize-inline-css-body-tag (face-map)
    -  (format ""
    -	  (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    -		     " ")))
    -
    -(defun htmlize-inline-css-pre-tag (face-map)
    -  (if htmlize-pre-style
    -      (format "
    "
    -              (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    -                         " "))
    -    (format "
    ")))
    -
    -(defun htmlize-inline-css-text-markup (fstruct-list buffer)
    -  (let* ((merged (htmlize-merge-faces fstruct-list))
    -	 (style (htmlize-memoize
    -		 merged
    -		 (let ((specs (htmlize-css-specs merged)))
    -		   (and specs
    -			(mapconcat #'identity (htmlize-css-specs merged) " "))))))
    -    (when style
    -      (princ "" buffer))
    -    (htmlize-lexlet ((style style) (buffer buffer))
    -      (lambda ()
    -        (when style
    -          (princ "" buffer))))))
    -
    -;;; `font' tag based output support.
    -
    -(defun htmlize-font-body-tag (face-map)
    -  (let ((fstruct (gethash 'default face-map)))
    -    (format ""
    -	    (htmlize-fstruct-foreground fstruct)
    -	    (htmlize-fstruct-background fstruct))))
    -
    -(defun htmlize-font-pre-tag (face-map)
    -  (if htmlize-pre-style
    -      (let ((fstruct (gethash 'default face-map)))
    -        (format "
    "
    -                (htmlize-fstruct-foreground fstruct)
    -                (htmlize-fstruct-background fstruct)))
    -    (format "
    ")))
    -       
    -(defun htmlize-font-text-markup (fstruct-list buffer)
    -  ;; In `font' mode, we use the traditional HTML means of altering
    -  ;; presentation:  tag for colors,  for bold,  for
    -  ;; underline, and  for strike-through.
    -  (let* ((merged (htmlize-merge-faces fstruct-list))
    -	 (markup (htmlize-memoize
    -		  merged
    -		  (cons (concat
    -			 (and (htmlize-fstruct-foreground merged)
    -			      (format "" (htmlize-fstruct-foreground merged)))
    -			 (and (htmlize-fstruct-boldp merged)      "")
    -			 (and (htmlize-fstruct-italicp merged)    "")
    -			 (and (htmlize-fstruct-underlinep merged) "")
    -			 (and (htmlize-fstruct-strikep merged)    ""))
    -			(concat
    -			 (and (htmlize-fstruct-strikep merged)    "")
    -			 (and (htmlize-fstruct-underlinep merged) "")
    -			 (and (htmlize-fstruct-italicp merged)    "")
    -			 (and (htmlize-fstruct-boldp merged)      "")
    -			 (and (htmlize-fstruct-foreground merged) ""))))))
    -    (princ (car markup) buffer)
    -    (htmlize-lexlet ((markup markup) (buffer buffer))
    -      (lambda ()
    -        (princ (cdr markup) buffer)))))
    -
    -(defun htmlize-buffer-1 ()
    -  ;; Internal function; don't call it from outside this file.  Htmlize
    -  ;; current buffer, writing the resulting HTML to a new buffer, and
    -  ;; return it.  Unlike htmlize-buffer, this doesn't change current
    -  ;; buffer or use switch-to-buffer.
    -  (save-excursion
    -    ;; Protect against the hook changing the current buffer.
    -    (save-excursion
    -      (run-hooks 'htmlize-before-hook))
    -    ;; Convince font-lock support modes to fontify the entire buffer
    -    ;; in advance.
    -    (htmlize-ensure-fontified)
    -    (clrhash htmlize-extended-character-cache)
    -    (clrhash htmlize-memoization-table)
    -    ;; It's important that the new buffer inherits default-directory
    -    ;; from the current buffer.
    -    (let ((htmlbuf (generate-new-buffer (if (buffer-file-name)
    -                                            (htmlize-make-file-name
    -                                             (file-name-nondirectory
    -                                              (buffer-file-name)))
    -                                          "*html*")))
    -          (completed nil))
    -      (unwind-protect
    -          (let* ((buffer-faces (htmlize-faces-in-buffer))
    -                 (face-map (htmlize-make-face-map (adjoin 'default buffer-faces)))
    -                 (places (gensym))
    -                 (title (if (buffer-file-name)
    -                            (file-name-nondirectory (buffer-file-name))
    -                          (buffer-name))))
    -            (when htmlize-generate-hyperlinks
    -              (htmlize-create-auto-links))
    -            (when htmlize-replace-form-feeds
    -              (htmlize-shadow-form-feeds))
    -
    -            ;; Initialize HTMLBUF and insert the HTML prolog.
    -            (with-current-buffer htmlbuf
    -              (buffer-disable-undo)
    -              (insert (htmlize-method doctype) ?\n
    -                      (format "\n"
    -                              htmlize-version htmlize-output-type)
    -                      "\n  ")
    -              (put places 'head-start (point-marker))
    -              (insert "\n"
    -                      "    " (htmlize-protect-string title) "\n"
    -                      (if htmlize-html-charset
    -                          (format (concat "    \n")
    -                                  htmlize-html-charset)
    -                        "")
    -                      htmlize-head-tags)
    -              (htmlize-method insert-head buffer-faces face-map)
    -              (insert "  ")
    -              (put places 'head-end (point-marker))
    -              (insert "\n  ")
    -              (put places 'body-start (point-marker))
    -              (insert (htmlize-method body-tag face-map)
    -                      "\n    ")
    -              (put places 'content-start (point-marker))
    -              (insert (htmlize-method pre-tag face-map) "\n"))
    -            (let ((text-markup
    -                   ;; Get the inserter method, so we can funcall it inside
    -                   ;; the loop.  Not calling `htmlize-method' in the loop
    -                   ;; body yields a measurable speed increase.
    -                   (htmlize-method-function 'text-markup))
    -                  ;; Declare variables used in loop body outside the loop
    -                  ;; because it's faster to establish `let' bindings only
    -                  ;; once.
    -                  next-change text face-list trailing-ellipsis
    -                  fstruct-list last-fstruct-list
    -                  (close-markup (lambda ())))
    -              ;; This loop traverses and reads the source buffer, appending
    -              ;; the resulting HTML to HTMLBUF.  This method is fast
    -              ;; because: 1) it doesn't require examining the text
    -              ;; properties char by char (htmlize-next-face-change is used
    -              ;; to move between runs with the same face), and 2) it doesn't
    -              ;; require frequent buffer switches, which are slow because
    -              ;; they rebind all buffer-local vars.
    -              (goto-char (point-min))
    -              (while (not (eobp))
    -                (setq next-change (htmlize-next-face-change (point)))
    -                ;; Get faces in use between (point) and NEXT-CHANGE, and
    -                ;; convert them to fstructs.
    -                (setq face-list (htmlize-faces-at-point)
    -                      fstruct-list (delq nil (mapcar (lambda (f)
    -                                                       (gethash f face-map))
    -                                                     face-list)))
    -                (multiple-value-setq (text trailing-ellipsis)
    -                  (htmlize-extract-text (point) next-change trailing-ellipsis))
    -                ;; Don't bother writing anything if there's no text (this
    -                ;; happens in invisible regions).
    -                (when (> (length text) 0)
    -                  ;; Open the new markup if necessary and insert the text.
    -                  (when (not (equalp fstruct-list last-fstruct-list))
    -                    (funcall close-markup)
    -                    (setq last-fstruct-list fstruct-list
    -                          close-markup (funcall text-markup fstruct-list htmlbuf)))
    -                  (princ text htmlbuf))
    -                (goto-char next-change))
    -
    -              ;; We've gone through the buffer; close the markup from
    -              ;; the last run, if any.
    -              (funcall close-markup))
    -
    -            ;; Insert the epilog and post-process the buffer.
    -            (with-current-buffer htmlbuf
    -              (insert "
    ") - (put places 'content-end (point-marker)) - (insert "\n ") - (put places 'body-end (point-marker)) - (insert "\n\n") - (htmlize-defang-local-variables) - (goto-char (point-min)) - (when htmlize-html-major-mode - ;; What sucks about this is that the minor modes, most notably - ;; font-lock-mode, won't be initialized. Oh well. - (funcall htmlize-html-major-mode)) - (set (make-local-variable 'htmlize-buffer-places) - (symbol-plist places)) - (run-hooks 'htmlize-after-hook) - (buffer-enable-undo)) - (setq completed t) - htmlbuf) - - (when (not completed) - (kill-buffer htmlbuf)) - (htmlize-delete-tmp-overlays))))) - -;; Utility functions. - -(defmacro htmlize-with-fontify-message (&rest body) - ;; When forcing fontification of large buffers in - ;; htmlize-ensure-fontified, inform the user that he is waiting for - ;; font-lock, not for htmlize to finish. - `(progn - (if (> (buffer-size) 65536) - (message "Forcing fontification of %s..." - (buffer-name (current-buffer)))) - ,@body - (if (> (buffer-size) 65536) - (message "Forcing fontification of %s...done" - (buffer-name (current-buffer)))))) - -(defun htmlize-ensure-fontified () - ;; If font-lock is being used, ensure that the "support" modes - ;; actually fontify the buffer. If font-lock is not in use, we - ;; don't care because, except in htmlize-file, we don't force - ;; font-lock on the user. - (when font-lock-mode - ;; In part taken from ps-print-ensure-fontified in GNU Emacs 21. - (when (and (boundp 'jit-lock-mode) - (symbol-value 'jit-lock-mode)) - (htmlize-with-fontify-message - (jit-lock-fontify-now (point-min) (point-max)))) - - (if (fboundp 'font-lock-ensure) - (font-lock-ensure) - ;; Emacs prior to 25.1 - (with-no-warnings - (font-lock-mode 1) - (font-lock-fontify-buffer))))) - - -;;;###autoload -(defun htmlize-buffer (&optional buffer) - "Convert BUFFER to HTML, preserving colors and decorations. - -The generated HTML is available in a new buffer, which is returned. -When invoked interactively, the new buffer is selected in the current -window. The title of the generated document will be set to the buffer's -file name or, if that's not available, to the buffer's name. - -Note that htmlize doesn't fontify your buffers, it only uses the -decorations that are already present. If you don't set up font-lock or -something else to fontify your buffers, the resulting HTML will be -plain. Likewise, if you don't like the choice of colors, fix the mode -that created them, or simply alter the faces it uses." - (interactive) - (let ((htmlbuf (with-current-buffer (or buffer (current-buffer)) - (htmlize-buffer-1)))) - (when (interactive-p) - (switch-to-buffer htmlbuf)) - htmlbuf)) - -;;;###autoload -(defun htmlize-region (beg end) - "Convert the region to HTML, preserving colors and decorations. -See `htmlize-buffer' for details." - (interactive "r") - ;; Don't let zmacs region highlighting end up in HTML. - (when (fboundp 'zmacs-deactivate-region) - (zmacs-deactivate-region)) - (let ((htmlbuf (save-restriction - (narrow-to-region beg end) - (htmlize-buffer-1)))) - (when (interactive-p) - (switch-to-buffer htmlbuf)) - htmlbuf)) - -(defun htmlize-region-for-paste (beg end) - "Htmlize the region and return just the HTML as a string. -This forces the `inline-css' style and only returns the HTML body, -but without the BODY tag. This should make it useful for inserting -the text to another HTML buffer." - (let* ((htmlize-output-type 'inline-css) - (htmlbuf (htmlize-region beg end))) - (unwind-protect - (with-current-buffer htmlbuf - (buffer-substring (plist-get htmlize-buffer-places 'content-start) - (plist-get htmlize-buffer-places 'content-end))) - (kill-buffer htmlbuf)))) - -(defun htmlize-region-save-screenshot (beg end) - "Save the htmlized (see `htmlize-region-for-paste') region in -the kill ring. Uses `inline-css', with style information in -`
    ' tags, so that the rendering of the marked up text
    -approximates the buffer as closely as possible."
    -  (interactive "r")
    -  (let ((htmlize-pre-style t))
    -    (kill-new (htmlize-region-for-paste beg end)))
    -  (deactivate-mark))
    -
    -(defun htmlize-make-file-name (file)
    -  "Make an HTML file name from FILE.
    -
    -In its default implementation, this simply appends `.html' to FILE.
    -This function is called by htmlize to create the buffer file name, and
    -by `htmlize-file' to create the target file name.
    -
    -More elaborate transformations are conceivable, such as changing FILE's
    -extension to `.html' (\"file.c\" -> \"file.html\").  If you want them,
    -overload this function to do it and htmlize will comply."
    -  (concat file ".html"))
    -
    -;; Older implementation of htmlize-make-file-name that changes FILE's
    -;; extension to ".html".
    -;(defun htmlize-make-file-name (file)
    -;  (let ((extension (file-name-extension file))
    -;	(sans-extension (file-name-sans-extension file)))
    -;    (if (or (equal extension "html")
    -;	    (equal extension "htm")
    -;	    (equal sans-extension ""))
    -;	(concat file ".html")
    -;      (concat sans-extension ".html"))))
    -
    -;;;###autoload
    -(defun htmlize-file (file &optional target)
    -  "Load FILE, fontify it, convert it to HTML, and save the result.
    -
    -Contents of FILE are inserted into a temporary buffer, whose major mode
    -is set with `normal-mode' as appropriate for the file type.  The buffer
    -is subsequently fontified with `font-lock' and converted to HTML.  Note
    -that, unlike `htmlize-buffer', this function explicitly turns on
    -font-lock.  If a form of highlighting other than font-lock is desired,
    -please use `htmlize-buffer' directly on buffers so highlighted.
    -
    -Buffers currently visiting FILE are unaffected by this function.  The
    -function does not change current buffer or move the point.
    -
    -If TARGET is specified and names a directory, the resulting file will be
    -saved there instead of to FILE's directory.  If TARGET is specified and
    -does not name a directory, it will be used as output file name."
    -  (interactive (list (read-file-name
    -		      "HTML-ize file: "
    -		      nil nil nil (and (buffer-file-name)
    -				       (file-name-nondirectory
    -					(buffer-file-name))))))
    -  (let ((output-file (if (and target (not (file-directory-p target)))
    -			 target
    -		       (expand-file-name
    -			(htmlize-make-file-name (file-name-nondirectory file))
    -			(or target (file-name-directory file)))))
    -	;; Try to prevent `find-file-noselect' from triggering
    -	;; font-lock because we'll fontify explicitly below.
    -	(font-lock-mode nil)
    -	(font-lock-auto-fontify nil)
    -	(global-font-lock-mode nil)
    -	;; Ignore the size limit for the purposes of htmlization.
    -	(font-lock-maximum-size nil))
    -    (with-temp-buffer
    -      ;; Insert FILE into the temporary buffer.
    -      (insert-file-contents file)
    -      ;; Set the file name so normal-mode and htmlize-buffer-1 pick it
    -      ;; up.  Restore it afterwards so with-temp-buffer's kill-buffer
    -      ;; doesn't complain about killing a modified buffer.
    -      (let ((buffer-file-name file))
    -	;; Set the major mode for the sake of font-lock.
    -	(normal-mode)
    -	;; htmlize the buffer and save the HTML.
    -	(with-current-buffer (htmlize-buffer-1)
    -	  (unwind-protect
    -	      (progn
    -		(run-hooks 'htmlize-file-hook)
    -		(write-region (point-min) (point-max) output-file))
    -	    (kill-buffer (current-buffer)))))))
    -  ;; I haven't decided on a useful return value yet, so just return
    -  ;; nil.
    -  nil)
    -
    -;;;###autoload
    -(defun htmlize-many-files (files &optional target-directory)
    -  "Convert FILES to HTML and save the corresponding HTML versions.
    -
    -FILES should be a list of file names to convert.  This function calls
    -`htmlize-file' on each file; see that function for details.  When
    -invoked interactively, you are prompted for a list of files to convert,
    -terminated with RET.
    -
    -If TARGET-DIRECTORY is specified, the HTML files will be saved to that
    -directory.  Normally, each HTML file is saved to the directory of the
    -corresponding source file."
    -  (interactive
    -   (list
    -    (let (list file)
    -      ;; Use empty string as DEFAULT because setting DEFAULT to nil
    -      ;; defaults to the directory name, which is not what we want.
    -      (while (not (equal (setq file (read-file-name
    -				     "HTML-ize file (RET to finish): "
    -				     (and list (file-name-directory
    -						(car list)))
    -				     "" t))
    -			 ""))
    -	(push file list))
    -      (nreverse list))))
    -  ;; Verify that TARGET-DIRECTORY is indeed a directory.  If it's a
    -  ;; file, htmlize-file will use it as target, and that doesn't make
    -  ;; sense.
    -  (and target-directory
    -       (not (file-directory-p target-directory))
    -       (error "target-directory must name a directory: %s" target-directory))
    -  (dolist (file files)
    -    (htmlize-file file target-directory)))
    -
    -;;;###autoload
    -(defun htmlize-many-files-dired (arg &optional target-directory)
    -  "HTMLize dired-marked files."
    -  (interactive "P")
    -  (htmlize-many-files (dired-get-marked-files nil arg) target-directory))
    -
    -(provide 'htmlize)
    -
    -;; Local Variables:
    -;; byte-compile-warnings: (not cl-functions unresolved obsolete)
    -;; End:
    -
    -;;; htmlize.el ends here
    diff --git a/bash/templates/workflow/vendor/org.css b/bash/templates/workflow/vendor/org.css
    deleted file mode 100644
    index 138cdba..0000000
    --- a/bash/templates/workflow/vendor/org.css
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -/*
    -Taken from:
    -https://gongzhitaao.org/orgcss/org.css
    -*/
    -/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body{color:#000;background-color:#fff}.org-alert-high{color:#ff8c00;font-weight:700}.org-alert-low{color:#00008b}.org-alert-moderate{color:gold;font-weight:700}.org-alert-saved-fringe{background-color:#f2f2f2}.org-alert-trivial{color:Dark purple}.org-alert-urgent{color:red;font-weight:700}.org-anzu-match-1{color:#000;background-color:#7fffd4}.org-anzu-match-2{color:#000;background-color:#00ff7f}.org-anzu-match-3{color:#000;background-color:#ff0}.org-anzu-mode-line,.org-anzu-mode-line-no-match{color:#008b00;font-weight:700}.org-anzu-replace-highlight{color:#b0e2ff;background-color:#cd00cd}.org-anzu-replace-to{color:red}.org-bbdb-field-name{color:sienna}.org-bbdb-name{color:#00f}.org-bbdb-organization{color:#b22222}.org-beacon-fallback-background{background-color:#000}.org-biblio-results-header{color:#483d8b;font-size:150%;font-weight:700}.org-bold{font-weight:700}.org-bold-italic{font-weight:700;font-style:italic}.org-bookmark-menu-bookmark{font-weight:700}.org-bookmark-menu-heading{color:#228b22}.org-buffer-menu-buffer{font-weight:700}.org-builtin{color:#483d8b}.org-button{color:#3a5fcd;text-decoration:underline}.org-c-annotation{color:#008b8b}.org-cal-china-x-general-holiday{background-color:#228b22}.org-cal-china-x-important-holiday{background-color:#8b0000}.org-calendar-iso-week{color:pink;font-weight:700}.org-calendar-iso-week-header{color:#0ff}.org-calendar-month-header{color:#00f}.org-calendar-today{text-decoration:underline}.org-calendar-weekday-header{color:#008b8b}.org-calendar-weekend-header{color:#b22222}.org-comint-highlight-input{font-weight:700}.org-comint-highlight-prompt{color:#0000cd}.org-comment,.org-comment-delimiter{color:#b22222}.org-compilation-column-number{color:#8b2252}.org-compilation-error{color:red;font-weight:700}.org-compilation-info{color:#228b22;font-weight:700}.org-compilation-line-number{color:#a020f0}.org-compilation-mode-line-exit{color:#228b22;font-weight:700}.org-compilation-mode-line-fail{color:red;font-weight:700}.org-compilation-mode-line-run,.org-compilation-warning{color:#ff8c00;font-weight:700}.org-completions-annotations{font-style:italic}.org-completions-first-difference{font-weight:700}.org-constant{color:#008b8b}.org-cursor{background-color:#eead0e}.org-custom-button{color:#000;background-color:#d3d3d3}.org-custom-button-mouse{color:#000;background-color:#e5e5e5}.org-custom-button-pressed{color:#000;background-color:#d3d3d3}.org-custom-button-pressed-unraised{color:#8b008b;text-decoration:underline}.org-custom-button-unraised{text-decoration:underline}.org-custom-changed{color:#fff;background-color:#00f}.org-custom-comment{background-color:#d9d9d9}.org-custom-comment-tag{color:#00008b}.org-custom-face-tag{color:#00f;font-weight:700}.org-custom-group-subtitle{font-weight:700}.org-custom-group-tag{color:#00f;font-size:120%;font-weight:700}.org-custom-group-tag-1{color:red;font-size:120%;font-weight:700}.org-custom-invalid{color:#ff0;background-color:red}.org-custom-link{color:#3a5fcd;text-decoration:underline}.org-custom-modified{color:#fff;background-color:#00f}.org-custom-rogue{color:pink;background-color:#000}.org-custom-saved{text-decoration:underline}.org-custom-set{color:#00f;background-color:#fff}.org-custom-state{color:#006400}.org-custom-themed{color:#fff;background-color:#00f}.org-custom-variable-button{font-weight:700;text-decoration:underline}.org-custom-variable-tag{color:#00f;font-weight:700}.org-custom-visibility{color:#3a5fcd;font-size:80%;text-decoration:underline}.org-diary{color:red}.org-diary-anniversary{color:#a020f0}.org-diary-time{color:sienna}.org-dired-async-failures{color:red}.org-dired-async-message{color:#ff0}.org-dired-async-mode-message{color:gold}.org-dired-directory{color:#00f}.org-dired-flagged{color:red;font-weight:700}.org-dired-header{color:#228b22}.org-dired-ignored{color:#7f7f7f}.org-dired-mark{color:#008b8b}.org-dired-marked{color:#ff8c00;font-weight:700}.org-dired-perm-write{color:#b22222}.org-dired-symlink{color:#a020f0}.org-dired-warning{color:red;font-weight:700}.org-doc{color:#8b2252}.org-eldoc-highlight-function-argument{font-weight:700}.org-epa-field-body{font-style:italic}.org-epa-field-name,.org-epa-mark{font-weight:700}.org-epa-mark{color:red}.org-epa-string{color:#00008b}.org-epa-validity-disabled{font-style:italic}.org-epa-validity-high{font-weight:700}.org-epa-validity-low,.org-epa-validity-medium{font-style:italic}.org-error{color:red;font-weight:700}.org-escape-glyph{color:brown}.org-evil-ex-commands{font-style:italic;text-decoration:underline}.org-evil-ex-info{color:red;font-style:italic}.org-evil-ex-lazy-highlight{background-color:#afeeee}.org-evil-ex-search{color:#b0e2ff;background-color:#cd00cd}.org-evil-ex-substitute-matches{background-color:#afeeee}.org-evil-ex-substitute-replacement{color:red;text-decoration:underline}.org-ffap{background-color:#b4eeb4}.org-file-name-shadow{color:#7f7f7f}.org-flycheck-error{text-decoration:underline}.org-flycheck-error-list-checker-name{color:#00f}.org-flycheck-error-list-column-number{color:#008b8b}.org-flycheck-error-list-error{color:red;font-weight:700}.org-flycheck-error-list-filename{color:sienna}.org-flycheck-error-list-highlight{background-color:#b4eeb4}.org-flycheck-error-list-id,.org-flycheck-error-list-id-with-explainer{color:#228b22}.org-flycheck-error-list-info{color:#228b22;font-weight:700}.org-flycheck-error-list-line-number{color:#008b8b}.org-flycheck-error-list-warning{color:#ff8c00;font-weight:700}.org-flycheck-fringe-error{color:red;font-weight:700}.org-flycheck-fringe-info{color:#228b22;font-weight:700}.org-flycheck-fringe-warning{color:#ff8c00;font-weight:700}.org-flycheck-info,.org-flycheck-warning,.org-flyspell-duplicate,.org-flyspell-incorrect{text-decoration:underline}.org-fringe{background-color:#f2f2f2}.org-function-name{color:#00f}.org-glyphless-char{font-size:60%}.org-golden-ratio-scroll-highlight-line{color:#fff;background-color:#53868b;font-weight:700}.org-header-line{color:#333;background-color:#e5e5e5}.org-helm-action{text-decoration:underline}.org-helm-bookmark-addressbook{color:tomato}.org-helm-bookmark-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-bookmark-file{color:#00b2ee}.org-helm-bookmark-file-not-found{color:#6c7b8b}.org-helm-bookmark-gnus{color:#f0f}.org-helm-bookmark-info{color:#0f0}.org-helm-bookmark-man{color:#8b5a00}.org-helm-bookmark-w3m{color:#ff0}.org-helm-buffer-archive{color:gold}.org-helm-buffer-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-buffer-file{color:#483d8b}.org-helm-buffer-modified{color:#b22222}.org-helm-buffer-not-saved{color:#ee6363}.org-helm-buffer-process{color:#cd6839}.org-helm-buffer-saved-out{color:red;background-color:#000}.org-helm-buffer-size{color:#708090}.org-helm-candidate-number,.org-helm-candidate-number-suspended{color:#000;background-color:#faffb5}.org-helm-delete-async-message{color:#ff0}.org-helm-etags-file{color:#8b814c;text-decoration:underline}.org-helm-ff-denied{color:red;background-color:#000}.org-helm-ff-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-ff-dirs{color:#00f}.org-helm-ff-dotted-directory{color:#000;background-color:#696969}.org-helm-ff-dotted-symlink-directory{color:#ff8c00;background-color:#696969}.org-helm-ff-executable{color:#0f0}.org-helm-ff-file{color:#483d8b}.org-helm-ff-invalid-symlink{color:#000;background-color:red}.org-helm-ff-pipe{color:#ff0;background-color:#000}.org-helm-ff-prefix{color:#000;background-color:#ff0}.org-helm-ff-socket{color:#ff1493}.org-helm-ff-suid{color:#fff;background-color:red}.org-helm-ff-symlink{color:#b22222}.org-helm-ff-truename{color:#8b2252}.org-helm-grep-cmd-line{color:#228b22}.org-helm-grep-file{color:#8a2be2;text-decoration:underline}.org-helm-grep-finish{color:#0f0}.org-helm-grep-lineno{color:#ff7f00}.org-helm-grep-match{color:#b00000}.org-helm-header{color:#333;background-color:#e5e5e5}.org-helm-header-line-left-margin{color:#000;background-color:#ff0}.org-helm-helper{color:#333;background-color:#e5e5e5}.org-helm-history-deleted{color:#000;background-color:red}.org-helm-history-remote{color:#ff6a6a}.org-helm-lisp-completion-info{color:red}.org-helm-lisp-show-completion{background-color:#2f4f4f}.org-helm-locate-finish{color:#0f0}.org-helm-m-x-key{color:orange;text-decoration:underline}.org-helm-match{color:#b00000}.org-helm-match-item{color:#b0e2ff;background-color:#cd00cd}.org-helm-minibuffer-prompt{color:#0000cd}.org-helm-moccur-buffer{color:#00ced1;text-decoration:underline}.org-helm-non-file-buffer{font-style:italic}.org-helm-prefarg{color:red}.org-helm-resume-need-update{background-color:red}.org-helm-selection{background-color:#097209}.org-helm-selection-line{background-color:#b4eeb4}.org-helm-separator{color:#ffbfb5}.org-helm-source-header{color:#000;background-color:#abd7f0;font-size:130%;font-weight:700}.org-helm-visible-mark{background-color:#d1f5ea}.org-help-argument-name{font-style:italic}.org-highlight{background-color:#b4eeb4}.org-highlight-indent-guides-character{color:#e6e6e6}.org-highlight-indent-guides-even{background-color:#e6e6e6}.org-highlight-indent-guides-odd{background-color:#f3f3f3}.org-highlight-indent-guides-stack-character{color:#ccc}.org-highlight-indent-guides-stack-even{background-color:#ccc}.org-highlight-indent-guides-stack-odd{background-color:#d9d9d9}.org-highlight-indent-guides-top-character{color:#b3b3b3}.org-highlight-indent-guides-top-even{background-color:#b3b3b3}.org-highlight-indent-guides-top-odd{background-color:silver}.org-highlight-numbers-number{color:#008b8b}.org-hl-line{background-color:#b4eeb4}.org-holiday{background-color:pink}.org-hydra-face-amaranth{color:#e52b50;font-weight:700}.org-hydra-face-blue{color:#00f;font-weight:700}.org-hydra-face-pink{color:#ff6eb4;font-weight:700}.org-hydra-face-red{color:red;font-weight:700}.org-hydra-face-teal{color:#367588;font-weight:700}.org-ido-first-match{font-weight:700}.org-ido-incomplete-regexp{color:red;font-weight:700}.org-ido-indicator{color:#ff0;background-color:red}.org-ido-only-match{color:#228b22}.org-ido-subdir{color:red}.org-ido-virtual{color:#483d8b}.org-info-header-node{color:brown;font-weight:700;font-style:italic}.org-info-header-xref{color:#3a5fcd;text-decoration:underline}.org-info-index-match{background-color:#ff0}.org-info-menu-header{font-weight:700}.org-info-menu-star{color:red}.org-info-node{color:brown;font-weight:700;font-style:italic}.org-info-title-1{font-size:172%;font-weight:700}.org-info-title-2{font-size:144%;font-weight:700}.org-info-title-3{font-size:120%;font-weight:700}.org-info-title-4{font-weight:700}.org-info-xref{color:#3a5fcd;text-decoration:underline}.org-isearch{color:#b0e2ff;background-color:#cd00cd}.org-isearch-fail{background-color:#ffc1c1}.org-italic{font-style:italic}.org-keyword{color:#a020f0}.org-lazy-highlight{background-color:#afeeee}.org-link{color:#3a5fcd;text-decoration:underline}.org-link-visited{color:#8b008b;text-decoration:underline}.org-lv-separator{background-color:#ccc}.org-match{background-color:#ff0}.org-mcXcursor-bar{background-color:#000}.org-mcXregion{background-color:gtk_selection_bg_color}.org-me-dired-dim-0{color:#b3b3b3}.org-me-dired-dim-1{color:#7f7f7f}.org-me-dired-executable{color:#0f0}.org-message-cited-text{color:red}.org-message-header-cc{color:#191970}.org-message-header-name{color:#6495ed}.org-message-header-newsgroups{color:#00008b;font-weight:700;font-style:italic}.org-message-header-other{color:#4682b4}.org-message-header-subject{color:navy;font-weight:700}.org-message-header-to{color:#191970;font-weight:700}.org-message-header-xheader{color:#00f}.org-message-mml{color:#228b22}.org-message-separator{color:brown}.org-minibuffer-prompt{color:#0000cd}.org-mm-command-output{color:#cd0000}.org-mode-line{color:#000;background-color:#bfbfbf}.org-mode-line-buffer-id,.org-mode-line-buffer-id-inactive,.org-mode-line-emphasis{font-weight:700}.org-mode-line-inactive{color:#333;background-color:#e5e5e5}.org-mu4e-attach-number{color:sienna;font-weight:700}.org-mu4e-cited-1{color:#483d8b;font-style:italic}.org-mu4e-cited-2{color:#5cacee;font-style:italic}.org-mu4e-cited-3{color:sienna;font-style:italic}.org-mu4e-cited-4{color:#a020f0;font-style:italic}.org-mu4e-cited-5,.org-mu4e-cited-6{color:#b22222;font-style:italic}.org-mu4e-cited-7{color:#228b22;font-style:italic}.org-mu4e-compose-header,.org-mu4e-compose-separator{color:brown;font-style:italic}.org-mu4e-contact{color:sienna}.org-mu4e-context{color:#006400;font-weight:700}.org-mu4e-draft{color:#8b2252}.org-mu4e-flagged{color:#008b8b;font-weight:700}.org-mu4e-footer{color:#b22222}.org-mu4e-forwarded{color:#483d8b}.org-mu4e-header{color:#000;background-color:#fff}.org-mu4e-header-highlight{background-color:#000;font-weight:700;text-decoration:underline}.org-mu4e-header-key{color:#6495ed;font-weight:700}.org-mu4e-header-marks{color:#483d8b}.org-mu4e-header-title,.org-mu4e-header-value{color:#228b22}.org-mu4e-highlight{background-color:#b4eeb4}.org-mu4e-link{color:#3a5fcd;text-decoration:underline}.org-mu4e-modeline{color:#8b4500;font-weight:700}.org-mu4e-moved{color:#b22222;font-style:italic}.org-mu4e-ok{color:#b22222;font-weight:700}.org-mu4e-region-code{background-color:#2f4f4f}.org-mu4e-replied,.org-mu4e-special-header-value{color:#483d8b}.org-mu4e-system{color:#b22222;font-style:italic}.org-mu4e-title{color:#228b22;font-weight:700}.org-mu4e-trashed{color:#b22222;text-decoration:line-through}.org-mu4e-unread{color:#a020f0;font-weight:700}.org-mu4e-url-number{color:#008b8b;font-weight:700}.org-mu4e-view-body{color:#000;background-color:#fff}.org-mu4e-warning{color:red;font-weight:700}.org-next-error{background-color:gtk_selection_bg_color}.org-nobreak-space{color:brown;text-decoration:underline}.org-org-agenda-calendar-event,.org-org-agenda-calendar-sexp{color:#000;background-color:#fff}.org-org-agenda-clocking{background-color:#ff0}.org-org-agenda-column-dateline{background-color:#e5e5e5}.org-org-agenda-current-time{color:#b8860b}.org-org-agenda-date{color:#00f}.org-org-agenda-date-today{color:#00f;font-weight:700;font-style:italic}.org-org-agenda-date-weekend{color:#00f;font-weight:700}.org-org-agenda-diary{color:#000;background-color:#fff}.org-org-agenda-dimmed-todo{color:#7f7f7f}.org-org-agenda-done{color:#228b22}.org-org-agenda-filter-category,.org-org-agenda-filter-effort,.org-org-agenda-filter-regexp,.org-org-agenda-filter-tags{color:#000;background-color:#bfbfbf}.org-org-agenda-restriction-lock{background-color:#eee}.org-org-agenda-structure{color:#00f}.org-org-archived{color:#7f7f7f}.org-org-block{color:#7f7f7f}.org-org-block-begin-line,.org-org-block-end-line{color:#b22222}.org-org-checkbox{font-weight:700}.org-org-checkbox-statistics-done{color:#228b22;font-weight:700}.org-org-checkbox-statistics-todo{color:red;font-weight:700}.org-org-clock-overlay{color:#000;background-color:#d3d3d3}.org-org-code{color:#7f7f7f}.org-org-column,.org-org-column-title{background-color:#e5e5e5}.org-org-column-title{font-weight:700;text-decoration:underline}.org-org-date{color:#bfaf87;text-decoration:underline}.org-org-date-selected{color:red}.org-org-default{color:#000;background-color:#fff}.org-org-document-info{color:#191970}.org-org-document-info-keyword{color:#7f7f7f}.org-org-document-title{color:#191970;font-weight:700}.org-org-done{color:#228b22;font-weight:700}.org-org-drawer{color:#00f}.org-org-ellipsis{color:#b8860b;text-decoration:underline}.org-org-footnote{color:#96b4cd;text-decoration:underline}.org-org-formula{color:#b22222}.org-org-habit-alert{background-color:#f5f946}.org-org-habit-alert-future{background-color:#fafca9}.org-org-habit-clear{background-color:#8270f9}.org-org-habit-clear-future{background-color:#d6e4fc}.org-org-habit-overdue{background-color:#f9372d}.org-org-habit-overdue-future{background-color:#fc9590}.org-org-habit-ready{background-color:#4df946}.org-org-habit-ready-future{background-color:#acfca9}.org-org-headline-done{color:#bc8f8f}.org-org-hide{color:#fff}.org-org-latex-and-related{color:#8b4513}.org-org-level-1{color:#edd1c5}.org-org-level-2{color:#ebebb7}.org-org-level-3{color:#cce8cc}.org-org-level-4{color:#c9deec}.org-org-level-5{color:#dce3e8}.org-org-level-6{color:#dde6dd}.org-org-level-7{color:#e8e8ce}.org-org-level-8{color:#e8dedb}.org-org-link{color:#c5d2dc;text-decoration:underline}.org-org-list-dt{font-weight:700}.org-org-macro{color:#8b4513}.org-org-meta-line{color:#b22222}.org-org-mode-line-clock{color:#000;background-color:#bfbfbf}.org-org-mode-line-clock-overrun{color:#000;background-color:red}.org-org-priority{color:#a020f0}.org-org-quote{color:#7f7f7f}.org-org-ref-acronym{color:#ee7600;text-decoration:underline}.org-org-ref-cite{color:#c3d5c3;text-decoration:underline}.org-org-ref-glossary{color:#8968cd;text-decoration:underline}.org-org-ref-label{color:#8b008b;text-decoration:underline}.org-org-ref-ref{color:#e1cc96;text-decoration:underline}.org-org-scheduled{color:#006400}.org-org-scheduled-previously{color:#b22222}.org-org-scheduled-today{color:#006400}.org-org-sexp-date{color:#a020f0}.org-org-special-keyword{color:#88949f}.org-org-table{color:#00f}.org-org-tag,.org-org-tag-group{font-weight:700}.org-org-target{text-decoration:underline}.org-org-time-grid{color:#b8860b}.org-org-todo{color:red;font-weight:700}.org-org-upcoming-deadline{color:#b22222}.org-org-verbatim,.org-org-verse{color:#7f7f7f}.org-org-warning{color:red;font-weight:700}.org-outline-1{color:#00f}.org-outline-2{color:sienna}.org-outline-3{color:#a020f0}.org-outline-4{color:#b22222}.org-outline-5{color:#228b22}.org-outline-6{color:#008b8b}.org-outline-7{color:#483d8b}.org-outline-8{color:#8b2252}.org-package-description{color:#000;background-color:#fff}.org-package-name{color:#3a5fcd;text-decoration:underline}.org-package-status-avail-obso{color:#b22222}.org-package-status-available{color:#000;background-color:#fff}.org-package-status-built-in{color:#483d8b}.org-package-status-dependency{color:#b22222}.org-package-status-disabled{color:red;font-weight:700}.org-package-status-external{color:#483d8b}.org-package-status-held{color:#008b8b}.org-package-status-incompat,.org-package-status-installed{color:#b22222}.org-package-status-unsigned{color:red;font-weight:700}.org-pdf-isearch-batch{background-color:#ff0}.org-pdf-isearch-lazy{background-color:#afeeee}.org-pdf-isearch-match{color:#b0e2ff;background-color:#cd00cd}.org-pdf-occur-document{color:#8b2252}.org-pdf-occur-page{color:#228b22}.org-pdf-view-rectangle{background-color:#b4eeb4}.org-pdf-view-region{background-color:gtk_selection_bg_color}.org-powerline-active0{color:#000;background-color:#bfbfbf}.org-powerline-active1{color:#fff;background-color:#2b2b2b}.org-powerline-active2{color:#fff;background-color:#666}.org-powerline-inactive0{color:#333;background-color:#e5e5e5}.org-powerline-inactive1{color:#333;background-color:#1c1c1c}.org-powerline-inactive2{color:#333;background-color:#333}.org-preprocessor{color:#483d8b}.org-query-replace{color:#b0e2ff;background-color:#cd00cd}.org-rainbow-delimiters-depth-1{color:#ffdead}.org-rainbow-delimiters-depth-2{color:#00bfff}.org-rainbow-delimiters-depth-3{color:#ffdead}.org-rainbow-delimiters-depth-4{color:#00bfff}.org-rainbow-delimiters-depth-5{color:#ffdead}.org-rainbow-delimiters-depth-6{color:#00bfff}.org-rainbow-delimiters-depth-7{color:#ffdead}.org-rainbow-delimiters-depth-8{color:#00bfff}.org-rainbow-delimiters-depth-9{color:#ffdead}.org-rainbow-delimiters-unmatched{color:#88090b}.org-reb-match-0{background-color:#add8e6}.org-reb-match-1{background-color:#7fffd4}.org-reb-match-2{background-color:#00ff7f}.org-reb-match-3{background-color:#ff0}.org-rectangle-preview{background-color:gtk_selection_bg_color}.org-regexp-grouping-backslash,.org-regexp-grouping-construct{font-weight:700}.org-region{background-color:gtk_selection_bg_color}.org-secondary-selection{background-color:#ff0}.org-semantic-highlight-edits,.org-semantic-highlight-func-current-tag{background-color:#e5e5e5}.org-semantic-unmatched-syntax{text-decoration:underline}.org-sgml-namespace{color:#483d8b}.org-sh-escaped-newline{color:#8b2252}.org-sh-heredoc{color:#ee0}.org-sh-quoted-exec{color:#f0f}.org-shadow{color:#7f7f7f}.org-show-paren-match{background-color:#40e0d0}.org-show-paren-mismatch{color:#fff;background-color:#a020f0}.org-sp-pair-overlay,.org-sp-show-pair-enclosing{background-color:#b4eeb4}.org-sp-show-pair-match{background-color:#40e0d0}.org-sp-show-pair-mismatch{color:#fff;background-color:#a020f0}.org-sp-wrap-overlay{background-color:#b4eeb4}.org-sp-wrap-overlay-closing-pair{color:red;background-color:#b4eeb4}.org-sp-wrap-overlay-opening-pair{color:#0f0;background-color:#b4eeb4}.org-sp-wrap-tag-overlay{background-color:#b4eeb4}.org-spaceline-flycheck-error{color:#fc5c94;background-color:#333}.org-spaceline-flycheck-info{color:#8de6f7;background-color:#333}.org-spaceline-flycheck-warning{color:#f3ea98;background-color:#333}.org-spaceline-python-venv{color:#fbf}.org-speedbar-button{color:#008b00}.org-speedbar-directory{color:#00008b}.org-speedbar-file{color:#008b8b}.org-speedbar-highlight{background-color:#0f0}.org-speedbar-selected{color:red;text-decoration:underline}.org-speedbar-separator{color:#fff;background-color:#00f;text-decoration:overline}.org-speedbar-tag{color:brown}.org-string{color:#8b2252}.org-success{color:#228b22;font-weight:700}.org-table-cell{color:#e5e5e5;background-color:#00f}.org-tex-math{color:#8b2252}.org-tool-bar{color:#000;background-color:#bfbfbf}.org-tooltip{color:#000;background-color:#ffffe0}.org-trailing-whitespace{background-color:red}.org-tty-menu-disabled{color:#d3d3d3;background-color:#00f}.org-tty-menu-enabled{color:#ff0;background-color:#00f;font-weight:700}.org-tty-menu-selected{background-color:red}.org-type{color:#228b22}.org-underline{text-decoration:underline}.org-undo-tree-visualizer-active-branch{color:#000;font-weight:700}.org-undo-tree-visualizer-current{color:red}.org-undo-tree-visualizer-default{color:#bebebe}.org-undo-tree-visualizer-register{color:#ff0}.org-undo-tree-visualizer-unmodified{color:#0ff}.org-variable-name{color:sienna}.org-vhlXdefault{background-color:#ff0}.org-warning{color:#ff8c00;font-weight:700}.org-warning-1{color:red;font-weight:700}.org-wgrep{color:#fff;background-color:#228b22}.org-wgrep-delete{color:pink;background-color:#228b22}.org-wgrep-done{color:#00f}.org-wgrep-file{color:#fff;background-color:#228b22}.org-wgrep-reject{color:red;font-weight:700}.org-which-key-command-description{color:#00f}.org-which-key-docstring{color:#b22222}.org-which-key-group-description{color:#a020f0}.org-which-key-highlighted-command{color:#00f;text-decoration:underline}.org-which-key-key{color:#008b8b}.org-which-key-local-map-description{color:#00f}.org-which-key-note,.org-which-key-separator{color:#b22222}.org-which-key-special-key{color:#008b8b;font-weight:700}.org-whitespace-big-indent{color:#b22222;background-color:red}.org-whitespace-empty{color:#b22222;background-color:#ff0}.org-whitespace-hspace{color:#d3d3d3;background-color:#cdc9a5}.org-whitespace-indentation{color:#b22222;background-color:#ff0}.org-whitespace-line{color:violet;background-color:#333}.org-whitespace-newline{color:#d3d3d3}.org-whitespace-space{color:#d3d3d3;background-color:#ffffe0}.org-whitespace-space-after-tab{color:#b22222;background-color:#ff0}.org-whitespace-space-before-tab{color:#b22222;background-color:#ff8c00}.org-whitespace-tab{color:#d3d3d3;background-color:beige}.org-whitespace-trailing{color:#ff0;background-color:red;font-weight:700}.org-widget-button{font-weight:700}.org-widget-button-pressed{color:red}.org-widget-documentation{color:#006400}.org-widget-field{background-color:#d9d9d9}.org-widget-inactive{color:#7f7f7f}.org-widget-single-line-field{background-color:#d9d9d9}.org-window-divider{color:#999}.org-window-divider-first-pixel{color:#ccc}.org-window-divider-last-pixel{color:#666}a{color:inherit;background-color:inherit;font:inherit;text-decoration:inherit}a:hover{text-decoration:underline}body{width:95%;margin:2% auto;font-size:14px;line-height:1.4em;font-family:Georgia,serif;color:#333}@media screen and (min-width:600px){body{font-size:18px}}@media screen and (min-width:910px){body{width:900px}}::-moz-selection{background:#d6edff}::selection{background:#d6edff}p{margin:1em auto}dl,ol,ul{margin:0 auto}.title{margin:.8em auto;color:#000}.subtitle,.title{text-align:center}.subtitle{font-size:1.1em;line-height:1.4;font-weight:700;margin:1em auto}.abstract{margin:auto;width:80%;font-style:italic}.abstract p:last-of-type:before{content:"    ";white-space:pre}.status{font-size:90%;margin:2em auto}[class^=section-number-]{margin-right:.5em}[id^=orgheadline]{clear:both}#footnotes{font-size:90%}.footpara{display:inline;margin:.2em auto}.footdef{margin-bottom:1em}.footdef sup{padding-right:.5em}a{color:#527d9a;text-decoration:none}a:hover{color:#035;border-bottom:1px dotted}figure{padding:0;margin:1em auto;text-align:center}img{max-width:100%;vertical-align:middle}.MathJax_Display{margin:0!important;width:90%!important}h1,h2,h3,h4,h5,h6{color:#a5573e;line-height:1em;font-family:Helvetica,sans-serif}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1em}@media screen and (min-width:600px){h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.3em}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1.1em}}dt{font-weight:700}table{margin:1em auto;border-top:2px solid;border-collapse:collapse}table,thead{border-bottom:2px solid}table td+td,table th+th{border-left:1px solid grey}table tr{border-top:1px solid #d3d3d3}td,th{padding:.3em .6em;vertical-align:middle}caption.t-above{caption-side:top}caption.t-bottom{caption-side:bottom}caption{margin-bottom:.3em}figcaption{margin-top:.3em}th.org-center,th.org-left,th.org-right{text-align:center}td.org-right{text-align:right}td.org-left{text-align:left}td.org-center{text-align:center}blockquote{margin:1em 2em;padding-left:1em;border-left:3px solid #ccc}kbd{background-color:#f7f7f7;font-size:80%;margin:0 .1em;padding:.1em .6em}.todo{background-color:red}.done,.todo{color:#fff;padding:.1em .3em;border-radius:3px;background-clip:padding-box;font-size:80%;font-family:Lucida Console,monospace;line-height:1}.done{background-color:green}.priority{color:orange;font-family:Lucida Console,monospace}#table-of-contents li{clear:both}.tag{font-family:Lucida Console,monospace;font-size:.7em;font-weight:400}.tag span{padding:.3em;float:right;margin-right:.5em;border:1px solid #bbb;border-radius:3px;background-clip:padding-box;color:#333;background-color:#eee;line-height:1}.timestamp{color:#bebebe;font-size:90%}.timestamp-kwd{color:#5f9ea0}.org-right{margin-left:auto;margin-right:0;text-align:right}.org-left{margin-left:0;margin-right:auto;text-align:left}.org-center{margin-left:auto;margin-right:auto;text-align:center}.underline{text-decoration:underline}#postamble p,#preamble p{font-size:90%;margin:.2em}p.verse{margin-left:3%}:not(pre)>code{padding:2px 5px;margin:auto 1px;border:1px solid #ddd;border-radius:3px;background-clip:padding-box;color:#333;font-size:80%}.org-src-container{border:1px solid #ccc;box-shadow:3px 3px 3px #eee;font-family:Lucida Console,monospace;font-size:80%;margin:1em auto;padding:.1em .5em;position:relative}.org-src-container>pre{overflow:auto}.org-src-container>pre:before{display:block;position:absolute;background-color:#b3b3b3;top:0;right:0;padding:0 .5em;border-bottom-left-radius:8px;border:0;color:#fff;font-size:80%}.org-src-container>pre.src-sh:before{content:"sh"}.org-src-container>pre.src-bash:before{content:"bash"}.org-src-container>pre.src-emacs-lisp:before{content:"Emacs Lisp"}.org-src-container>pre.src-R:before{content:"R"}.org-src-container>pre.src-cpp:before{content:"C++"}.org-src-container>pre.src-c:before{content:"C"}.org-src-container>pre.src-html:before{content:"HTML"}.org-src-container>pre.src-javascript:before,.org-src-container>pre.src-js:before{content:"Javascript"}// More languages 0% http://orgmode.org/worg/org-contrib/babel/languages.html .org-src-container>pre.src-abc:before{content:"ABC"}.org-src-container>pre.src-asymptote:before{content:"Asymptote"}.org-src-container>pre.src-awk:before{content:"Awk"}.org-src-container>pre.src-C:before{content:"C"}.org-src-container>pre.src-calc:before{content:"Calc"}.org-src-container>pre.src-clojure:before{content:"Clojure"}.org-src-container>pre.src-comint:before{content:"comint"}.org-src-container>pre.src-css:before{content:"CSS"}.org-src-container>pre.src-D:before{content:"D"}.org-src-container>pre.src-ditaa:before{content:"Ditaa"}.org-src-container>pre.src-dot:before{content:"Dot"}.org-src-container>pre.src-ebnf:before{content:"ebnf"}.org-src-container>pre.src-forth:before{content:"Forth"}.org-src-container>pre.src-F90:before{content:"Fortran"}.org-src-container>pre.src-gnuplot:before{content:"Gnuplot"}.org-src-container>pre.src-haskell:before{content:"Haskell"}.org-src-container>pre.src-io:before{content:"Io"}.org-src-container>pre.src-java:before{content:"Java"}.org-src-container>pre.src-latex:before{content:"LaTeX"}.org-src-container>pre.src-ledger:before{content:"Ledger"}.org-src-container>pre.src-ly:before{content:"Lilypond"}.org-src-container>pre.src-lisp:before{content:"Lisp"}.org-src-container>pre.src-makefile:before{content:"Make"}.org-src-container>pre.src-matlab:before{content:"Matlab"}.org-src-container>pre.src-max:before{content:"Maxima"}.org-src-container>pre.src-mscgen:before{content:"Mscgen"}.org-src-container>pre.src-Caml:before{content:"Objective"}.org-src-container>pre.src-octave:before{content:"Octave"}.org-src-container>pre.src-org:before{content:"Org"}.org-src-container>pre.src-perl:before{content:"Perl"}.org-src-container>pre.src-picolisp:before{content:"Picolisp"}.org-src-container>pre.src-plantuml:before{content:"PlantUML"}.org-src-container>pre.src-python:before{content:"Python"}.org-src-container>pre.src-ruby:before{content:"Ruby"}.org-src-container>pre.src-sass:before{content:"Sass"}.org-src-container>pre.src-scala:before{content:"Scala"}.org-src-container>pre.src-scheme:before{content:"Scheme"}.org-src-container>pre.src-screen:before{content:"Screen"}.org-src-container>pre.src-sed:before{content:"Sed"}.org-src-container>pre.src-shell:before{content:"shell"}.org-src-container>pre.src-shen:before{content:"Shen"}.org-src-container>pre.src-sql:before{content:"SQL"}.org-src-container>pre.src-sqlite:before{content:"SQLite"}.org-src-container>pre.src-stan:before{content:"Stan"}.org-src-container>pre.src-vala:before{content:"Vala"}.org-src-container>pre.src-axiom:before{content:"Axiom"}.org-src-container>pre.src-browser:before{content:"HTML"}.org-src-container>pre.src-cypher:before{content:"Neo4j"}.org-src-container>pre.src-elixir:before{content:"Elixir"}.org-src-container>pre.src-request:before{content:"http"}.org-src-container>pre.src-ipython:before{content:"iPython"}.org-src-container>pre.src-kotlin:before{content:"Kotlin"}.org-src-container>pre.src-Flavored Erlang lfe:before{content:"Lisp"}.org-src-container>pre.src-mongo:before{content:"MongoDB"}.org-src-container>pre.src-prolog:before{content:"Prolog"}.org-src-container>pre.src-rec:before{content:"rec"}.org-src-container>pre.src-ML sml:before{content:"Standard"}.org-src-container>pre.src-Translate translate:before{content:"Google"}.org-src-container>pre.src-typescript:before{content:"Typescript"}.org-src-container>pre.src-rust:before{content:"Rust"}.inlinetask{background:#ffc;border:2px solid grey;margin:10px;padding:10px}#org-div-home-and-up{font-size:70%;text-align:right;white-space:nowrap}.linenr{font-size:90%}.code-highlighted{background-color:#ff0}#bibliography{font-size:90%}#bibliography table{width:100%}.creator{display:block}@media screen and (min-width:600px){.creator{display:inline;float:right}}
    diff --git a/bash/templates/workflow/workflow.css b/bash/templates/workflow/workflow.css
    deleted file mode 100644
    index 0e4f851..0000000
    --- a/bash/templates/workflow/workflow.css
    +++ /dev/null
    @@ -1,49 +0,0 @@
    -/* EuAndreh's additions */
    -
    -#tasks, #bugs {
    -  border-bottom: 5px;
    -}
    -
    -a.header-anchor {
    -  font-size: 0.5em;
    -  opacity: 0.5;
    -}
    -
    -.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO {
    -	color: #fff;
    -	padding: .1em .3em;
    -	border-radius: 3px;
    -	background-clip: padding-box;
    -	font-size: 80%;
    -	font-family: Lucida Console,monospace;
    -	line-height: 1
    -}
    -
    -/*
    -  Replicate colors from:
    -  https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866
    -*/
    -
    -.TODO {
    -	background-color: brown;
    -}
    -
    -.DOING {
    -	background-color: yellowgreen;
    -}
    -
    -.WAITING, .MEETING {
    -	background-color: gray;
    -}
    -
    -.INACTIVE {
    -	background-color: orange;
    -}
    -
    -.NEXT {
    -	background-color: red;
    -}
    -
    -.CANCELLED, .DONE {
    -	background-color: green;
    -}
    -- 
    cgit v1.2.3
    
    
    From b49200ea62370443af5a5d30b2945e7721dff5f8 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 17:04:45 -0300
    Subject: fake-symlink: Make compile-readme.sh parameterized
    
    ---
     bash/templates/Makefile.am                 |  4 ++--
     bash/templates/build-aux/compile-readme.sh | 10 +++++-----
     2 files changed, 7 insertions(+), 7 deletions(-)
    
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index fd5da9d..d2c10b9 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -23,6 +23,6 @@ check-local:
     clean-local:
     	rm -rf $(srcdir)/public/
     
    -public:
    +public: README TODOs.org
     	$(srcdir)/build-aux/generate-tasks-and-bugs.sh
    -	$(srcdir)/build-aux/compile-readme.sh
    +	$(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)'
    diff --git a/bash/templates/build-aux/compile-readme.sh b/bash/templates/build-aux/compile-readme.sh
    index 0a53b49..6a20811 100755
    --- a/bash/templates/build-aux/compile-readme.sh
    +++ b/bash/templates/build-aux/compile-readme.sh
    @@ -1,8 +1,8 @@
     #!/bin/sh -eux
     
    -pandoc -s \
    -       --metadata title='$PROJECT_UC - EuAndreh' \
    -       -c styles.css \
    -       -o public/index.html \
    -       -r markdown \
    +pandoc -s                               \
    +       --metadata title="$1 - EuAndreh" \
    +       -c styles.css                    \
    +       -o public/index.html             \
    +       -r markdown                      \
            README
    -- 
    cgit v1.2.3
    
    
    From db0711a6915f8dcc8f305703de96394c87f2e49f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 17:05:30 -0300
    Subject: manifest.scm: Use texlive instead of texlive-bin
    
    ---
     bash/templates/guix/manifest.scm | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm
    index 030a498..1d962e3 100644
    --- a/bash/templates/guix/manifest.scm
    +++ b/bash/templates/guix/manifest.scm
    @@ -8,7 +8,7 @@
             git
             tar
             gzip
    -        texlive-bin
    +        texlive
             autoconf
             automake
             pkg-config
    -- 
    cgit v1.2.3
    
    
    From 266e85973c3306069b5d3331ba2d711373e7d194 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 17:09:56 -0300
    Subject: fake-symlinks: Makefile.am: Remove README and TODOs.org as target
     dependency to 'public'
    
    ---
     bash/templates/Makefile.am | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index d2c10b9..6d01ebf 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -23,6 +23,6 @@ check-local:
     clean-local:
     	rm -rf $(srcdir)/public/
     
    -public: README TODOs.org
    +public:
     	$(srcdir)/build-aux/generate-tasks-and-bugs.sh
     	$(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)'
    -- 
    cgit v1.2.3
    
    
    From ade045b67835cfb30fc6a720cc68394377fe1869 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 17:24:29 -0300
    Subject: fake-symlinks: Use Autoconf version or preamble.org
    
    ---
     bash/fake-symlinks.sh                             | 10 ++++-----
     bash/templates/..gitignore                        |  3 ++-
     bash/templates/build-aux/workflow/preamble.org    | 25 -----------------------
     bash/templates/build-aux/workflow/preamble.org.in | 25 +++++++++++++++++++++++
     4 files changed, 32 insertions(+), 31 deletions(-)
     delete mode 100644 bash/templates/build-aux/workflow/preamble.org
     create mode 100644 bash/templates/build-aux/workflow/preamble.org.in
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index ef7a353..6470876 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -128,15 +128,15 @@ ln-autotools() {
       envsubst-if-not ..gitignore configure.ac Makefile.am README
     }
     
    -ln-workflow() {
    +ln-build-aux() {
       cp-all build-aux/workflow/vendor/org.css    \
              build-aux/workflow/vendor/htmlize.el \
              build-aux/workflow/workflow.css      \
              build-aux/assert-todos.sh            \
              build-aux/assert-shellcheck.sh       \
    -         build-aux/generate-tasks-and-bugs.sh
    +         build-aux/generate-tasks-and-bugs.sh \
    +         build-aux/workflow/preamble.org.in
       cp-if-not TODOs.org
    -  envsubst-all build-aux/workflow/preamble.org
     }
     
     ln-agpl() {
    @@ -202,7 +202,7 @@ ln-base-autotools-guix-project() {
       ln-env "$1"
       ln-init
     
    -  ln-workflow
    +  ln-build-aux
       ln-guix-container
       ln-git-notes-release
       ln-autotools
    @@ -270,7 +270,7 @@ ln-maybe-ci-build() {
     ln-makefile-only-guix-project() {
       ln-env "$1"
       ln-agpl
    -  ln-workflow
    +  ln-build-aux
       ln-guix-container
       ln-ci
       ln-simple-makefile
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    index 89e1a5d..aa2bcc6 100644
    --- a/bash/templates/..gitignore
    +++ b/bash/templates/..gitignore
    @@ -44,4 +44,5 @@ autom4te.cache
     /tasks-and-bugs.org
     /tasks-and-bugs.html
     /tasks-and-bugs.html~
    -/public/
    \ No newline at end of file
    +/public/
    +/build-aux/workflow/preamble.org
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/workflow/preamble.org b/bash/templates/build-aux/workflow/preamble.org
    deleted file mode 100644
    index 1da69e7..0000000
    --- a/bash/templates/build-aux/workflow/preamble.org
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -#+TITLE: Tasks and bug listing for $PROJECT_UC
    -#+AUTHOR: EuAndreh 
    -#+BIND: org-html-validation-link nil
    -#+BIND: org-html-scripts nil
    -#+BIND: org-html-postamble nil
    -#+BIND: org-export-html-headline-anchor-format nil
    -#+BIND: org-html-doctype "html5"
    -#+OPTIONS: toc:nil html-style:nil num:nil
    -#+HTML_HEAD: 
    -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]]
    -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]]
    -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]]
    -#+MACRO: bug bug\nbsp{}[[#$1][#$1]]
    -#+MACRO: task task\nbsp{}[[#$1][#$1]]
    -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@)
    -
    -Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]].
    -
    -Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]].
    -
    -/Você também pode escrever em português./
    -
    -/Vous pouvez aussi écrire en français./
    -
    -#+TOC: headlines 2
    diff --git a/bash/templates/build-aux/workflow/preamble.org.in b/bash/templates/build-aux/workflow/preamble.org.in
    new file mode 100644
    index 0000000..b2e7df4
    --- /dev/null
    +++ b/bash/templates/build-aux/workflow/preamble.org.in
    @@ -0,0 +1,25 @@
    +#+TITLE: Tasks and bug listing for @PACKAGE_NAME@
    +#+AUTHOR: EuAndreh 
    +#+BIND: org-html-validation-link nil
    +#+BIND: org-html-scripts nil
    +#+BIND: org-html-postamble nil
    +#+BIND: org-export-html-headline-anchor-format nil
    +#+BIND: org-html-doctype "html5"
    +#+OPTIONS: toc:nil html-style:nil num:nil
    +#+HTML_HEAD: 
    +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]]
    +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]]
    +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/@PACKAGE@/commit?id=$1][$1]]
    +#+MACRO: bug bug\nbsp{}[[#$1][#$1]]
    +#+MACRO: task task\nbsp{}[[#$1][#$1]]
    +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@)
    +
    +Tasks, bugs and issues for @PACKAGE_NAME@. See: [[https://@PACKAGE@.euandreh.xyz/][@PACKAGE@.euandreh.xyz]].
    +
    +Register a new one: [[mailto:@PACKAGE_BUGREPORT@?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][@PACKAGE_BUGREPORT@]].
    +
    +/Você também pode escrever em português./
    +
    +/Vous pouvez aussi écrire en français./
    +
    +#+TOC: headlines 2
    -- 
    cgit v1.2.3
    
    
    From e841b191f2ca9786dc177657a85832b50b01061f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 19:22:07 -0300
    Subject: fake-symlinks: Parameterize ci-build.sh
    
    ---
     bash/fake-symlinks.sh                |  9 ++++----
     bash/templates/build-aux/ci-build.sh | 45 ++++++++++++++++++------------------
     build-aux/ci-build.sh                | 13 ++++++-----
     3 files changed, 34 insertions(+), 33 deletions(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 6470876..a1a39b8 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -149,15 +149,15 @@ ln-guix-container() {
     }
     
     ln-ci() {
    -  cp-all build-aux/assert-shellcheck.sh
    +  cp-all build-aux/assert-shellcheck.sh build-aux/ci-build.sh
     
       if [[ -f "$PREFIX/configure.ac" ]]; then
         export AUTOTOOLS_SETUP='./bootstrap && ./configure && '
       else
         export AUTOTOOLS_SETUP=''
       fi
    -  envsubst-all build-aux/ci-build.sh ..git/hooks/pre-push
    -  chmod+x-all  build-aux/ci-build.sh ..git/hooks/pre-push
    +  envsubst-all ..git/hooks/pre-push
    +  chmod+x-all  ..git/hooks/pre-push
     }
     
     ln-git-notes-release() {
    @@ -260,8 +260,7 @@ ln-maybe-pre-push() {
     
     ln-maybe-ci-build() {
       if [[ -f "$PREFIX/Makefile" ]]; then
    -    envsubst-all build-aux/ci-build.sh
    -    chmod+x-all  build-aux/ci-build.sh
    +    cp-all build-aux/ci-build.sh
       fi
       envsubst-all ..git/hooks/pre-push
       chmod+x-all  ..git/hooks/pre-push
    diff --git a/bash/templates/build-aux/ci-build.sh b/bash/templates/build-aux/ci-build.sh
    index a9b9070..ca678ec 100755
    --- a/bash/templates/build-aux/ci-build.sh
    +++ b/bash/templates/build-aux/ci-build.sh
    @@ -1,41 +1,42 @@
     #!/bin/sh -eux
     
    -PREFIX="${DOLLAR}LOGS_PREFIX/$PROJECT"
    -mkdir -p "${DOLLAR}PREFIX"
    -read -r _ SHA _ # oldrev newrev refname
    -FILENAME="${DOLLAR}(date -Is)-${DOLLAR}SHA.log"
    -LOGFILE="${DOLLAR}PREFIX/${DOLLAR}FILENAME"
    -{
    +PACKAGE="$1"
    +LOGS_PREFIX="$2"
     
    -  # exec 2>&1 >(tee -a "${DOLLAR}LOGFILE")
    +PREFIX="$LOGS_PREFIX/$PACKAGE"
    +mkdir -p "$PREFIX"
    +read -r _ SHA _ # oldrev newrev refname
    +FILENAME="$(date -Is)-$SHA.log"
    +LOGFILE="$PREFIX/$FILENAME"
     
    -  echo "Starting CI job at: ${DOLLAR}(date -Is)"
    +{
    +  echo "Starting CI job at: $(date -Is)"
     
       finish() {
    -    STATUS="${DOLLAR}?"
    -    printf "\n\n>>> exit status was %s\n" "${DOLLAR}STATUS"
    -    echo "Finishing CI job at: ${DOLLAR}(date -Is)"
    +    STATUS="$?"
    +    printf "\n\n>>> exit status was %s\n" "$STATUS"
    +    echo "Finishing CI job at: $(date -Is)"
         cd -
         NOTE=$(cat <>> CI logs added as Git note."
       }
       trap finish EXIT
     
       unset GIT_DIR
    -  CLONE="${DOLLAR}(mktemp -d)"
    -  git clone . "${DOLLAR}CLONE"
    -  cd "${DOLLAR}CLONE"
    +  CLONE="$(mktemp -d)"
    +  git clone . "$CLONE"
    +  cd "$CLONE"
       git config --global user.email git@euandre.org
       git config --global user.name 'EuAndreh CI'
     
    -  ./build-aux/with-container.sh '${AUTOTOOLS_SETUP}make clean check distcheck public'
    -  rm -rf /srv/http/$PROJECT/ && mv public/ /srv/http/$PROJECT/
    -} | tee "${DOLLAR}LOGFILE" 2>&1
    +  ./build-aux/with-container.sh './bootstrap && ./configure && make clean check distcheck public'
    +  rm -rf "/srv/http/$PACKAGE/" && mv public/ "/srv/http/$PACKAGE/"
    +} | tee "$LOGFILE" 2>&1
    diff --git a/build-aux/ci-build.sh b/build-aux/ci-build.sh
    index 8636ae0..ca678ec 100755
    --- a/build-aux/ci-build.sh
    +++ b/build-aux/ci-build.sh
    @@ -1,14 +1,15 @@
     #!/bin/sh -eux
     
    -PREFIX="$LOGS_PREFIX/dotfiles"
    +PACKAGE="$1"
    +LOGS_PREFIX="$2"
    +
    +PREFIX="$LOGS_PREFIX/$PACKAGE"
     mkdir -p "$PREFIX"
     read -r _ SHA _ # oldrev newrev refname
     FILENAME="$(date -Is)-$SHA.log"
     LOGFILE="$PREFIX/$FILENAME"
    -{
    -
    -  # exec 2>&1 >(tee -a "$LOGFILE")
     
    +{
       echo "Starting CI job at: $(date -Is)"
     
       finish() {
    @@ -36,6 +37,6 @@ EOF
       git config --global user.email git@euandre.org
       git config --global user.name 'EuAndreh CI'
     
    -  ./build-aux/with-container.sh 'make clean check distcheck public'
    -  rm -rf /srv/http/dotfiles/ && mv public/ /srv/http/dotfiles/
    +  ./build-aux/with-container.sh './bootstrap && ./configure && make clean check distcheck public'
    +  rm -rf "/srv/http/$PACKAGE/" && mv public/ "/srv/http/$PACKAGE/"
     } | tee "$LOGFILE" 2>&1
    -- 
    cgit v1.2.3
    
    
    From e1f8d40f455d966123210125d3936fe4346037fc Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Wed, 16 Dec 2020 19:22:34 -0300
    Subject: fake-symlinks: Use post-receive.sh as hook instead of ci-build.sh
     directly
    
    ---
     bash/fake-symlinks.sh                        | 16 ++++++++--------
     bash/templates/..git/hooks/pre-push          |  6 ++----
     bash/templates/build-aux/git-post-receive.sh |  5 +++++
     bash/templates/build-aux/git-pre-push.sh     |  1 +
     build-aux/git-post-receive.sh                |  5 +++++
     build-aux/git-pre-push.sh                    | 10 ++++++++++
     6 files changed, 31 insertions(+), 12 deletions(-)
     create mode 100755 bash/templates/build-aux/git-post-receive.sh
     create mode 120000 bash/templates/build-aux/git-pre-push.sh
     create mode 100755 build-aux/git-post-receive.sh
     create mode 100755 build-aux/git-pre-push.sh
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index a1a39b8..83bc816 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -149,15 +149,15 @@ ln-guix-container() {
     }
     
     ln-ci() {
    -  cp-all build-aux/assert-shellcheck.sh build-aux/ci-build.sh
    +  cp-all build-aux/assert-shellcheck.sh build-aux/ci-build.sh build-aux/git-post-receive.sh
     
       if [[ -f "$PREFIX/configure.ac" ]]; then
         export AUTOTOOLS_SETUP='./bootstrap && ./configure && '
       else
         export AUTOTOOLS_SETUP=''
       fi
    -  envsubst-all ..git/hooks/pre-push
    -  chmod+x-all  ..git/hooks/pre-push
    +  envsubst-all ..git/hooks/pre-push build-aux/git-pre-push.sh
    +  chmod+x-all  ..git/hooks/pre-push build-aux/git-pre-push.sh
     }
     
     ln-git-notes-release() {
    @@ -254,16 +254,16 @@ ln-generated-readme() {
     }
     
     ln-maybe-pre-push() {
    -  envsubst-all ..git/hooks/pre-push
    -  chmod+x-all  ..git/hooks/pre-push
    +  envsubst-all ..git/hooks/pre-push build-aux/git-pre-push.sh
    +  chmod+x-all  ..git/hooks/pre-push build-aux/git-pre-push.sh
     }
     
     ln-maybe-ci-build() {
       if [[ -f "$PREFIX/Makefile" ]]; then
    -    cp-all build-aux/ci-build.sh
    +    cp-all build-aux/ci-build.sh build-aux/git-post-receive.sh
       fi
    -  envsubst-all ..git/hooks/pre-push
    -  chmod+x-all  ..git/hooks/pre-push
    +  envsubst-all ..git/hooks/pre-push build-aux/git-pre-push.sh
    +  chmod+x-all  ..git/hooks/pre-push build-aux/git-pre-push.sh
     }
     
     ln-makefile-only-guix-project() {
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    index cf56aea..4d21332 100755
    --- a/bash/templates/..git/hooks/pre-push
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -6,7 +6,5 @@ else
       git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/$PROJECT.git/description'
     fi
     
    -${DISABLE_CI}scp build-aux/ci-build.sh git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    -
    -# scp description         arrobaponto.org:/srv/git/$PROJECT.git/description
    -# ${DISABLE_CI}scp build-aux/ci-build.sh arrobaponto.org:/srv/git/$PROJECT.git/hooks/post-receive
    +${DISABLE_CI}scp "$DOTFILES/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    +${DISABLE_CI}scp "$DOTFILES/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    diff --git a/bash/templates/build-aux/git-post-receive.sh b/bash/templates/build-aux/git-post-receive.sh
    new file mode 100755
    index 0000000..eb8fe8f
    --- /dev/null
    +++ b/bash/templates/build-aux/git-post-receive.sh
    @@ -0,0 +1,5 @@
    +#!/bin/sh -eux
    +
    +PACKAGE="$(basename "$PWD" | cut -d. -f1)"
    +LOGS_PREFIX='/data/ci'
    +/data/ci/ci-build.sh "$PACKAGE" "$LOGS_PREFIX"
    diff --git a/bash/templates/build-aux/git-pre-push.sh b/bash/templates/build-aux/git-pre-push.sh
    new file mode 120000
    index 0000000..3a348b9
    --- /dev/null
    +++ b/bash/templates/build-aux/git-pre-push.sh
    @@ -0,0 +1 @@
    +../..git/hooks/pre-push
    \ No newline at end of file
    diff --git a/build-aux/git-post-receive.sh b/build-aux/git-post-receive.sh
    new file mode 100755
    index 0000000..eb8fe8f
    --- /dev/null
    +++ b/build-aux/git-post-receive.sh
    @@ -0,0 +1,5 @@
    +#!/bin/sh -eux
    +
    +PACKAGE="$(basename "$PWD" | cut -d. -f1)"
    +LOGS_PREFIX='/data/ci'
    +/data/ci/ci-build.sh "$PACKAGE" "$LOGS_PREFIX"
    diff --git a/build-aux/git-pre-push.sh b/build-aux/git-pre-push.sh
    new file mode 100755
    index 0000000..4ce0707
    --- /dev/null
    +++ b/build-aux/git-pre-push.sh
    @@ -0,0 +1,10 @@
    +#!/bin/sh -eux
    +
    +if [ -f description ]; then
    +  scp description         git.euandreh.xyz:/data/git/dotfiles.git/description
    +else
    +  git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/dotfiles.git/description'
    +fi
    +
    +scp "/home/andreh/dev/libre/dotfiles/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/dotfiles.git/hooks/post-receive
    +scp "/home/andreh/dev/libre/dotfiles/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/dotfiles.git/hooks/post-receive
    -- 
    cgit v1.2.3
    
    
    From a56877cd5f1ddbd5632afa98d81c6851fafd1ec6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 1 Jan 2021 12:11:19 -0300
    Subject: fake-symlinks: Too many things to describe :/
    
    ---
     bash/fake-symlinks.sh                              |  247 +-
     bash/templates/..git/hooks/pre-push                |   11 +-
     bash/templates/..gitignore                         |    6 +-
     bash/templates/HACKING                             |    5 -
     bash/templates/HACKING.in                          |    5 +
     bash/templates/Makefile.am                         |   36 +-
     bash/templates/README.in                           |   40 +
     bash/templates/_plugins/linter.rb                  |   55 +
     bash/templates/build-aux/assert-todos.sh           |   15 +-
     bash/templates/build-aux/build-sphinx.sh           |   66 -
     bash/templates/build-aux/ci-build.sh               |   42 -
     bash/templates/build-aux/ci/ci-build.sh            |   43 +
     bash/templates/build-aux/ci/git-post-receive.sh    |   13 +
     bash/templates/build-aux/ci/git-pre-push.sh.in     |   18 +
     bash/templates/build-aux/default-extra-dist.am     |    6 +
     bash/templates/build-aux/dev-checks.am             |   17 +
     bash/templates/build-aux/docbook-xsl/AUTHORS       |    4 +
     bash/templates/build-aux/docbook-xsl/COPYING       |   48 +
     bash/templates/build-aux/docbook-xsl/VERSION.xsl   |  115 +
     .../build-aux/docbook-xsl/common/addns.xsl         |  124 +
     bash/templates/build-aux/docbook-xsl/common/af.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/am.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/ar.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/as.xml |  719 ++++
     .../templates/build-aux/docbook-xsl/common/ast.xml |  719 ++++
     .../docbook-xsl/common/autoidx-kimber.xsl          |   43 +
     .../build-aux/docbook-xsl/common/autoidx-kosek.xsl |  153 +
     bash/templates/build-aux/docbook-xsl/common/az.xml |  731 ++++
     bash/templates/build-aux/docbook-xsl/common/bg.xml |  783 ++++
     bash/templates/build-aux/docbook-xsl/common/bn.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/bn_in.xml         |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/bs.xml |  721 ++++
     .../build-aux/docbook-xsl/common/build.xml         |   28 +
     bash/templates/build-aux/docbook-xsl/common/ca.xml |  719 ++++
     .../build-aux/docbook-xsl/common/charmap.xml       |  182 +
     .../build-aux/docbook-xsl/common/charmap.xsl       |  219 +
     .../build-aux/docbook-xsl/common/common.xml        |  638 +++
     .../build-aux/docbook-xsl/common/common.xsl        | 2126 ++++++++++
     bash/templates/build-aux/docbook-xsl/common/cs.xml |  759 ++++
     bash/templates/build-aux/docbook-xsl/common/cy.xml | 1304 ++++++
     bash/templates/build-aux/docbook-xsl/common/da.xml |  723 ++++
     bash/templates/build-aux/docbook-xsl/common/de.xml |  725 ++++
     bash/templates/build-aux/docbook-xsl/common/el.xml |  788 ++++
     bash/templates/build-aux/docbook-xsl/common/en.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/entities.ent      |   65 +
     bash/templates/build-aux/docbook-xsl/common/eo.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/es.xml |  735 ++++
     bash/templates/build-aux/docbook-xsl/common/et.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/eu.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/fa.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/fi.xml |  729 ++++
     bash/templates/build-aux/docbook-xsl/common/fr.xml |  749 ++++
     bash/templates/build-aux/docbook-xsl/common/ga.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/gentext.xsl       |  853 ++++
     bash/templates/build-aux/docbook-xsl/common/gl.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/gu.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/he.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/hi.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/hr.xml |  721 ++++
     bash/templates/build-aux/docbook-xsl/common/hu.xml |  737 ++++
     bash/templates/build-aux/docbook-xsl/common/id.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/insertfile.xsl    |  111 +
     bash/templates/build-aux/docbook-xsl/common/is.xml |  731 ++++
     bash/templates/build-aux/docbook-xsl/common/it.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/ja.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/ka.xml |  759 ++++
     bash/templates/build-aux/docbook-xsl/common/kn.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/ko.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/ky.xml |  791 ++++
     .../build-aux/docbook-xsl/common/l10n.dtd          |   64 +
     .../build-aux/docbook-xsl/common/l10n.xml          |   78 +
     .../build-aux/docbook-xsl/common/l10n.xsl          |  596 +++
     bash/templates/build-aux/docbook-xsl/common/la.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/labels.xsl        |  931 +++++
     bash/templates/build-aux/docbook-xsl/common/lt.xml |  737 ++++
     bash/templates/build-aux/docbook-xsl/common/lv.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/ml.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/mn.xml |  789 ++++
     bash/templates/build-aux/docbook-xsl/common/mr.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/nb.xml | 1288 ++++++
     .../templates/build-aux/docbook-xsl/common/nds.xml |  725 ++++
     bash/templates/build-aux/docbook-xsl/common/nl.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/nn.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/olink.xsl         | 1282 ++++++
     bash/templates/build-aux/docbook-xsl/common/or.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/pa.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/pi.xml |  165 +
     bash/templates/build-aux/docbook-xsl/common/pi.xsl |  344 ++
     bash/templates/build-aux/docbook-xsl/common/pl.xml |  737 ++++
     bash/templates/build-aux/docbook-xsl/common/pt.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/pt_br.xml         | 1288 ++++++
     .../build-aux/docbook-xsl/common/refentry.xml      |  778 ++++
     .../build-aux/docbook-xsl/common/refentry.xsl      | 1350 ++++++
     bash/templates/build-aux/docbook-xsl/common/ro.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/ru.xml |  785 ++++
     bash/templates/build-aux/docbook-xsl/common/sk.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/sl.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/sq.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/sr.xml |  779 ++++
     .../build-aux/docbook-xsl/common/sr_Latn.xml       |  738 ++++
     .../build-aux/docbook-xsl/common/stripns.xsl       |  370 ++
     .../build-aux/docbook-xsl/common/subtitles.xsl     |  179 +
     bash/templates/build-aux/docbook-xsl/common/sv.xml |  723 ++++
     bash/templates/build-aux/docbook-xsl/common/ta.xml |  719 ++++
     .../build-aux/docbook-xsl/common/table.xsl         |  513 +++
     .../docbook-xsl/common/targetdatabase.dtd          |   49 +
     .../build-aux/docbook-xsl/common/targets.xsl       |  336 ++
     bash/templates/build-aux/docbook-xsl/common/te.xml |  719 ++++
     bash/templates/build-aux/docbook-xsl/common/th.xml | 1288 ++++++
     .../build-aux/docbook-xsl/common/titles.xsl        |  852 ++++
     bash/templates/build-aux/docbook-xsl/common/tl.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/tr.xml |  725 ++++
     bash/templates/build-aux/docbook-xsl/common/uk.xml |  785 ++++
     bash/templates/build-aux/docbook-xsl/common/ur.xml |  721 ++++
     .../build-aux/docbook-xsl/common/utility.xml       |  256 ++
     .../build-aux/docbook-xsl/common/utility.xsl       |  288 ++
     bash/templates/build-aux/docbook-xsl/common/vi.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/xh.xml | 1288 ++++++
     bash/templates/build-aux/docbook-xsl/common/zh.xml |  719 ++++
     .../build-aux/docbook-xsl/common/zh_cn.xml         |  719 ++++
     .../build-aux/docbook-xsl/common/zh_tw.xml         |  719 ++++
     bash/templates/build-aux/docbook-xsl/epub/README   |   88 +
     .../build-aux/docbook-xsl/epub/bin/dbtoepub        |   76 +
     .../build-aux/docbook-xsl/epub/bin/lib/docbook.rb  |  227 ++
     .../docbook-xsl/epub/bin/xslt/obfuscate.xsl        |   15 +
     .../build-aux/docbook-xsl/epub/docbook.xsl         | 1835 +++++++++
     bash/templates/build-aux/docbook-xsl/lib/build.xml |   24 +
     bash/templates/build-aux/docbook-xsl/lib/lib.xsl   |  526 +++
     .../build-aux/docbook-xsl/xhtml-1_1/admon.xsl      |  133 +
     .../docbook-xsl/xhtml-1_1/annotations.xsl          |  155 +
     .../docbook-xsl/xhtml-1_1/autoidx-kimber.xsl       |  134 +
     .../docbook-xsl/xhtml-1_1/autoidx-kosek.xsl        |  104 +
     .../build-aux/docbook-xsl/xhtml-1_1/autoidx-ng.xsl |   16 +
     .../build-aux/docbook-xsl/xhtml-1_1/autoidx.xsl    |  825 ++++
     .../build-aux/docbook-xsl/xhtml-1_1/autotoc.xsl    |  708 ++++
     .../docbook-xsl/xhtml-1_1/biblio-iso690.xsl        | 1295 ++++++
     .../build-aux/docbook-xsl/xhtml-1_1/biblio.xsl     | 1364 +++++++
     .../build-aux/docbook-xsl/xhtml-1_1/block.xsl      |  577 +++
     .../build-aux/docbook-xsl/xhtml-1_1/build.xml      |   39 +
     .../build-aux/docbook-xsl/xhtml-1_1/callout.xsl    |  204 +
     .../build-aux/docbook-xsl/xhtml-1_1/changebars.xsl |   73 +
     .../docbook-xsl/xhtml-1_1/chunk-changebars.xsl     |   91 +
     .../build-aux/docbook-xsl/xhtml-1_1/chunk-code.xsl |  678 +++
     .../docbook-xsl/xhtml-1_1/chunk-common.xsl         | 1606 ++++++++
     .../build-aux/docbook-xsl/xhtml-1_1/chunk.xsl      |   48 +
     .../build-aux/docbook-xsl/xhtml-1_1/chunker.xsl    |  311 ++
     .../build-aux/docbook-xsl/xhtml-1_1/chunkfast.xsl  |   64 +
     .../build-aux/docbook-xsl/xhtml-1_1/chunktoc.xsl   |  516 +++
     .../build-aux/docbook-xsl/xhtml-1_1/component.xsl  |  433 ++
     .../build-aux/docbook-xsl/xhtml-1_1/division.xsl   |  207 +
     .../docbook-xsl/xhtml-1_1/docbook.css.xml          |  110 +
     .../build-aux/docbook-xsl/xhtml-1_1/docbook.xsl    |  523 +++
     .../build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl       |  324 ++
     .../build-aux/docbook-xsl/xhtml-1_1/footnote.xsl   |  325 ++
     .../build-aux/docbook-xsl/xhtml-1_1/formal.xsl     |  489 +++
     .../build-aux/docbook-xsl/xhtml-1_1/glossary.xsl   |  598 +++
     .../build-aux/docbook-xsl/xhtml-1_1/graphics.xsl   | 1524 +++++++
     .../build-aux/docbook-xsl/xhtml-1_1/highlight.xsl  |   81 +
     .../build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl   |  316 ++
     .../build-aux/docbook-xsl/xhtml-1_1/html.xsl       |  683 ++++
     .../build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl    |   95 +
     .../build-aux/docbook-xsl/xhtml-1_1/index.xsl      |  257 ++
     .../build-aux/docbook-xsl/xhtml-1_1/info.xsl       |   41 +
     .../build-aux/docbook-xsl/xhtml-1_1/inline.xsl     | 1550 +++++++
     .../build-aux/docbook-xsl/xhtml-1_1/its.xsl        |  103 +
     .../build-aux/docbook-xsl/xhtml-1_1/keywords.xsl   |   31 +
     .../build-aux/docbook-xsl/xhtml-1_1/lists.xsl      | 1206 ++++++
     .../build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl    |   86 +
     .../build-aux/docbook-xsl/xhtml-1_1/manifest.xsl   |   17 +
     .../build-aux/docbook-xsl/xhtml-1_1/math.xsl       |  280 ++
     .../build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl |  171 +
     .../build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl   |   31 +
     .../build-aux/docbook-xsl/xhtml-1_1/param.xsl      |  452 ++
     .../build-aux/docbook-xsl/xhtml-1_1/pi.xsl         | 1230 ++++++
     .../docbook-xsl/xhtml-1_1/profile-chunk-code.xsl   |  660 +++
     .../docbook-xsl/xhtml-1_1/profile-chunk.xsl        |   48 +
     .../docbook-xsl/xhtml-1_1/profile-docbook.xsl      |  496 +++
     .../docbook-xsl/xhtml-1_1/profile-onechunk.xsl     |   31 +
     .../build-aux/docbook-xsl/xhtml-1_1/publishers.xsl |  119 +
     .../build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl   |  434 ++
     .../build-aux/docbook-xsl/xhtml-1_1/refentry.xsl   |  312 ++
     .../build-aux/docbook-xsl/xhtml-1_1/sections.xsl   |  557 +++
     .../build-aux/docbook-xsl/xhtml-1_1/synop.xsl      | 1616 ++++++++
     .../build-aux/docbook-xsl/xhtml-1_1/table.xsl      | 1176 ++++++
     .../build-aux/docbook-xsl/xhtml-1_1/task.xsl       |   69 +
     .../docbook-xsl/xhtml-1_1/titlepage.templates.xsl  | 4297 ++++++++++++++++++++
     .../build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl  | 1111 +++++
     .../build-aux/docbook-xsl/xhtml-1_1/toc.xsl        |  327 ++
     .../build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl   |  383 ++
     .../build-aux/docbook-xsl/xhtml-1_1/xref.xsl       | 1292 ++++++
     bash/templates/build-aux/git-notes-release.sh      |    2 +-
     bash/templates/build-aux/git-post-receive.sh       |    5 -
     bash/templates/build-aux/git-pre-push.sh           |    1 -
     bash/templates/build-aux/guile.am                  |   25 +-
     .../templates/build-aux/html-files-from-sources.am |   23 +
     bash/templates/build-aux/rust.am                   |    9 +
     .../templates/build-aux/sphinx-build-web-assets.sh |   64 +
     .../build-aux/texinfo-build-web-assets.sh          |   54 +
     bash/templates/build-aux/with-guile-env.in         |   10 -
     bash/templates/build-aux/workflow/preamble.org.in  |   10 +-
     bash/templates/configure.ac                        |   21 +-
     bash/templates/m4/links.m4                         |   25 +
     bash/templates/m4/programmer-mode.m4               |   17 +
     bash/templates/rename/basic-channel.scm.in         |   72 +
     build-aux/assert-shellcheck.sh                     |    5 +
     build-aux/ci/ci-build.sh                           |   43 +
     build-aux/ci/git-post-receive.sh                   |   13 +
     build-aux/ci/git-pre-push.sh                       |   18 +
     build-aux/ci/git-pre-push.sh.in                    |   18 +
     209 files changed, 121328 insertions(+), 288 deletions(-)
     mode change 100755 => 120000 bash/templates/..git/hooks/pre-push
     delete mode 100644 bash/templates/HACKING
     create mode 100644 bash/templates/HACKING.in
     create mode 100644 bash/templates/README.in
     create mode 100644 bash/templates/_plugins/linter.rb
     delete mode 100755 bash/templates/build-aux/build-sphinx.sh
     delete mode 100755 bash/templates/build-aux/ci-build.sh
     create mode 100755 bash/templates/build-aux/ci/ci-build.sh
     create mode 100755 bash/templates/build-aux/ci/git-post-receive.sh
     create mode 100755 bash/templates/build-aux/ci/git-pre-push.sh.in
     create mode 100644 bash/templates/build-aux/default-extra-dist.am
     create mode 100644 bash/templates/build-aux/dev-checks.am
     create mode 100644 bash/templates/build-aux/docbook-xsl/AUTHORS
     create mode 100644 bash/templates/build-aux/docbook-xsl/COPYING
     create mode 100644 bash/templates/build-aux/docbook-xsl/VERSION.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/addns.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/af.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/am.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ar.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/as.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ast.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/az.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/bg.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/bn.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/bn_in.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/bs.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/build.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ca.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/charmap.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/charmap.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/common.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/common.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/cs.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/cy.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/da.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/de.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/el.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/en.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/entities.ent
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/eo.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/es.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/et.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/eu.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/fa.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/fi.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/fr.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ga.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/gentext.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/gl.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/gu.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/he.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/hi.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/hr.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/hu.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/id.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/insertfile.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/is.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/it.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ja.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ka.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/kn.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ko.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ky.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/l10n.dtd
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/l10n.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/l10n.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/la.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/labels.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/lt.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/lv.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ml.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/mn.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/mr.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/nb.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/nds.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/nl.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/nn.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/olink.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/or.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/pa.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/pi.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/pi.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/pl.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/pt.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/pt_br.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/refentry.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/refentry.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ro.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ru.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/sk.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/sl.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/sq.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/sr.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/stripns.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/subtitles.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/sv.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ta.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/table.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/targets.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/te.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/th.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/titles.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/tl.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/tr.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/uk.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/ur.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/utility.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/utility.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/vi.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/xh.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/zh.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/zh_cn.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/common/zh_tw.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/epub/README
     create mode 100755 bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub
     create mode 100755 bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb
     create mode 100644 bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/epub/docbook.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/lib/build.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/lib/lib.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx-kimber.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx-kosek.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx-ng.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autotoc.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/biblio-iso690.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/biblio.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/block.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/build.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/callout.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/changebars.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk-changebars.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk-code.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk-common.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunker.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunkfast.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunktoc.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/component.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/division.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/docbook.css.xml
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/docbook.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl
     create mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl
     delete mode 100755 bash/templates/build-aux/git-post-receive.sh
     delete mode 120000 bash/templates/build-aux/git-pre-push.sh
     create mode 100644 bash/templates/build-aux/html-files-from-sources.am
     create mode 100644 bash/templates/build-aux/rust.am
     create mode 100755 bash/templates/build-aux/sphinx-build-web-assets.sh
     create mode 100755 bash/templates/build-aux/texinfo-build-web-assets.sh
     delete mode 100644 bash/templates/build-aux/with-guile-env.in
     create mode 100644 bash/templates/m4/links.m4
     create mode 100644 bash/templates/m4/programmer-mode.m4
     create mode 100644 bash/templates/rename/basic-channel.scm.in
     create mode 100755 build-aux/assert-shellcheck.sh
     create mode 100755 build-aux/ci/ci-build.sh
     create mode 100755 build-aux/ci/git-post-receive.sh
     create mode 100755 build-aux/ci/git-pre-push.sh
     create mode 100755 build-aux/ci/git-pre-push.sh.in
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 83bc816..667d62d 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -27,7 +27,9 @@ for job in pacheco; do
     done
     
     normalize-name() {
    -  if [[ "$1" = ..* ]]; then
    +  if [[ -n "$RENAME_TO" ]]; then
    +    echo "$RENAME_TO"
    +  elif [[ "$1" = ..* ]]; then
         echo "${1:1}"
       else
         echo "$1"
    @@ -36,60 +38,76 @@ normalize-name() {
     
     cp-all() {
       for f in "$@"; do
    -    mkdir -p "$(dirname "$PREFIX/$f")"
    -    cp "$f" "$PREFIX/$(normalize-name "$f")"
    +    OUT="$PREFIX/$(normalize-name "$f")"
    +    mkdir -p "$(dirname "$OUT")"
    +    cp "$f" "$OUT"
       done
     }
     
     cp-if-not() {
       for f in "$@"; do
    -    if [[ ! -f "$PREFIX/$(normalize-name "$f")" ]]; then
    -      mkdir -p "$(dirname "$PREFIX/$f")"
    -      cp "$f" "$PREFIX/$(normalize-name "$f")"
    +    OUT="$PREFIX/$(normalize-name "$f")"
    +    if [[ ! -f "$OUT" ]]; then
    +      cp-all "$f"
         fi
       done
     }
     
     envsubst-all() {
       for f in "$@"; do
    -    mkdir -p "$(dirname "$PREFIX/$(normalize-name "$f")")"
    -    envsubst < "$f" > "$PREFIX/$(normalize-name "$f")"
    +    OUT="$PREFIX/$(normalize-name "$f")"
    +    mkdir -p "$(dirname "$OUT")"
    +    envsubst < "$f" > "$OUT"
    +
    +    if [ -n "$EXECUTABLE" ]; then
    +      chmod +x "$OUT"
    +    fi
       done
     }
     
     envsubst-if-not() {
       for f in "$@"; do
    -    if [[ -n "$RENAME_TO" ]]; then
    -      OUT_FILE="$PREFIX/$RENAME_TO"
    -    else
    -      OUT_FILE="$PREFIX/$(normalize-name "$f")"
    -    fi
    -    if [[ ! -f "$OUT_FILE" ]]; then
    -      mkdir -p "$(dirname "$OUT_FILE")"
    -      envsubst < "$f" > "$OUT_FILE"
    +    OUT="$PREFIX/$(normalize-name "$f")"
    +    if [[ ! -f "$OUT" ]]; then
    +      envsubst-all "$f"
         fi
       done
     }
     
     sed-all() {
       for f in "$@"; do
    -    mkdir -p "$(dirname "$PREFIX/$f")"
    -    sed "s/__PROJECT_UC__/$PROJECT_UC/g" "$f" | sed "s/__PROJECT__/$PROJECT/g" > "$PREFIX/$(normalize-name "$f")"
    -  done
    -}
    +    OUT="$PREFIX/$(normalize-name "$f")"
    +    mkdir -p "$(dirname "$OUT")"
     
    -sed-if-not() {
    -  for f in "$@"; do
    -    if [[ ! -f "$PREFIX/$(normalize-name "$f")" ]]; then
    -      mkdir -p "$(dirname "$PREFIX/$f")"
    -      sed "s/__PROJECT_UC__/$PROJECT_UC/" "$f" > "$PREFIX/$(normalize-name "$f")"
    +    if [ -n "$ENABLE_CI" ]; then
    +      ENABLE_CI_SCRIPT='s/__ENABLE_CI__//g'
    +      TLD_SCRIPT=''
    +    else
    +      ENABLE_CI_SCRIPT='/__ENABLE_CI__/d'
    +      TLD_SCRIPT='s/@TLD@/euandreh.xyz/g'
    +    fi
    +
    +    sed "$f"                                    \
    +        -e "s/__PROJECT_UC__/$PROJECT_UC/g"     \
    +        -e "s/__PROJECT__/$PROJECT/g"           \
    +        -e "s/__MAILING_LIST__/$MAILING_LIST/g" \
    +        -e "$TLD_SCRIPT"                        \
    +        -e "$ENABLE_CI_SCRIPT"                  \
    +        -e "$ENABLE_AUTOTOOLS_SCRIPT"           \
    +        > "$OUT"
    +
    +    if [ -n "$EXECUTABLE" ]; then
    +      chmod +x "$OUT"
         fi
       done
     }
     
    -chmod+x-all() {
    +sed-if-not() {
       for f in "$@"; do
    -    chmod +x "$PREFIX/$(normalize-name "$f")"
    +    OUT="$PREFIX/$(normalize-name "$f")"
    +    if [ ! -f "$OUT" ]; then
    +      sed-all "$f"
    +    fi
       done
     }
     
    @@ -99,10 +117,35 @@ ln-env() {
       export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}"
       export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}"
     
    -  if [[ -f "$PREFIX/Makefile" ]]; then
    -    export DISABLE_CI=''
    +  if [ -f "$PREFIX/Makefile.am" ]; then
    +    export ENABLE_AUTOTOOLS=1
    +  else
    +    export ENABLE_AUTOTOOLS=
    +  fi
    +
    +  if [ -f "$PREFIX/Makefile" ] || [ -f "$PREFIX/Makefile.am" ]; then
    +    export ENABLE_CI=1
    +  else
    +    export ENABLE_CI=
    +  fi
    +
    +  if [ -n "${GUILE_PROJECTS[$PROJECT]}" ]; then
    +    ENABLE_GUILE=1
       else
    -    export DISABLE_CI='# '
    +    ENABLE_GUILE=
    +  fi
    +
    +  if [ -n "${RUST_PROJECT[$PROJECT]}" ]; then
    +    ENABLE_RUST=1
    +  else
    +    ENABLE_RUST=
    +  fi
    +
    +  if [ -f "$PREFIX/guix/pinned-channels.scm" ] &&
    +       [ "$(wc -l < "$PREFIX/guix/pinned-channels.scm")" = 11 ]; then
    +    ENABLE_OVERWRITE_PINNED_CHANNELS=1
    +  else
    +    ENABLE_OVERWRITE_PINNED_CHANNELS=
       fi
     }
     
    @@ -111,21 +154,32 @@ ln-init() {
         red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")"
       fi
     
    -  if [[ ! -d "$PREFIX" ]]; then
    +  if [ ! -d "$PREFIX" ]; then
         git init "$PREFIX"
       fi
     }
     
     ln-autotools() {
       chmod +w "$PREFIX/INSTALL" 2> /dev/null ||:
    -  cp-all AUTHORS bootstrap ChangeLog INSTALL
    +  cp-all AUTHORS                         \
    +         bootstrap                       \
    +         ChangeLog                       \
    +         build-aux/dev-checks.am         \
    +         build-aux/default-extra-dist.am \
    +         m4/links.m4                     \
    +         m4/programmer-mode.m4           \
    +         build-aux/html-files-from-sources.am
    +
    +  # dev-cheks.am: test maintainer mode
    +  # https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html
       cp-if-not description
     
       # assumes:
       # - ln-worflow for .gitignore
       # - ln-git-notes-release for Makefile.am
    -  # - ln-guix-container for Makefile.am
    -  envsubst-if-not ..gitignore configure.ac Makefile.am README
    +  # - ln-guix-files for Makefile.am
    +  envsubst-if-not ..gitignore README.in
    +  sed-if-not configure.ac Makefile.am
     }
     
     ln-build-aux() {
    @@ -134,8 +188,12 @@ ln-build-aux() {
              build-aux/workflow/workflow.css      \
              build-aux/assert-todos.sh            \
              build-aux/assert-shellcheck.sh       \
    -         build-aux/generate-tasks-and-bugs.sh \
    -         build-aux/workflow/preamble.org.in
    +         build-aux/generate-tasks-and-bugs.sh
    +
    +  if [ ! -f "$PREFIX/build-aux/workflow/preamble.org" ]; then
    +    # FIXME: generate preamble.org from preamble.org.in
    +    cp-if-not build-aux/workflow/preamble.org.in
    +  fi
       cp-if-not TODOs.org
     }
     
    @@ -143,21 +201,34 @@ ln-agpl() {
       cp-all COPYING
     }
     
    -ln-guix-container() {
    -  cp-all build-aux/with-container.sh build-aux/assert-shellcheck.sh
    -  cp-if-not guix/pinned-channels.scm guix/manifest.scm
    +ln-guix-files() {
    +  cp-all build-aux/with-container.sh    \
    +         build-aux/assert-shellcheck.sh \
    +         .guix-channel                  \
    +         .guix-authorizations           \
    +         guix/channel/euandreh.key
    +  cp-if-not guix/manifest.scm
    +  if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then
    +    RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp-if-not rename/basic-channel.scm.in
    +  fi
    +  # RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    +  if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then
    +    cp-all guix/pinned-channels.scm
    +  else
    +    cp-if-not guix/pinned-channels.scm
    +  fi
     }
     
     ln-ci() {
    -  cp-all build-aux/assert-shellcheck.sh build-aux/ci-build.sh build-aux/git-post-receive.sh
    -
    -  if [[ -f "$PREFIX/configure.ac" ]]; then
    -    export AUTOTOOLS_SETUP='./bootstrap && ./configure && '
    +  if [ -n "$ENABLE_CI" ]; then
    +    sed-all build-aux/ci/git-pre-push.sh.in
    +    cp-all build-aux/assert-shellcheck.sh \
    +           build-aux/ci/ci-build.sh       \
    +           build-aux/ci/git-post-receive.sh
    +    ln -fs "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push"
       else
    -    export AUTOTOOLS_SETUP=''
    +    EXECUTABLE=1 sed-all ..git/hooks/pre-push
       fi
    -  envsubst-all ..git/hooks/pre-push build-aux/git-pre-push.sh
    -  chmod+x-all  ..git/hooks/pre-push build-aux/git-pre-push.sh
     }
     
     ln-git-notes-release() {
    @@ -166,28 +237,16 @@ ln-git-notes-release() {
     }
     
     ln-dicts() {
    -  cp-all doc/dictionaries/international.txt doc/dictionaries/en.txt
    +  cp-if-not doc/dictionaries/international.txt doc/dictionaries/en.txt
     }
     
     ln-pandoc-index() {
    -  envsubst-all build-aux/compile-readme.sh
    -  chmod+x-all  build-aux/compile-readme.sh
    +  cp-all build-aux/compile-readme.sh
     }
     
    -ln-texinfo() {
    -  envsubst-all HACKING
    -  RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    -  ln-dicts
    -}
    -
    -ln-sphinx() {
    -  ln-dicts
    -  cp-all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico
    -  envsubst-all doc/conf.py.in doc/_templates/layout.html
    -  envsubst-if-not doc/index.rst
    -  sed-all build-aux/build-sphinx.sh
    -  chmod+x-all /build-aux/build-sphinx.sh
    -  cp-if-not doc/i18n-pagenames.json doc/Makefile
    +ln-web-assets-file() {
    +  mkdir -p "$PREFIX/build-aux/"
    +  cp "build-aux/$1-build-web-assets.sh" "$PREFIX/build-aux/build-web-assets.sh"
     }
     
     ln-scribble() {
    @@ -203,7 +262,7 @@ ln-base-autotools-guix-project() {
       ln-init
     
       ln-build-aux
    -  ln-guix-container
    +  ln-guix-files
       ln-git-notes-release
       ln-autotools
       ln-generated-readme
    @@ -211,23 +270,32 @@ ln-base-autotools-guix-project() {
     
       ln-agpl
       ln-ci
    -}
     
    -ln-guile-files() {
    -  if [[ -n "${GUILE_PROJECTS[$PROJECT]}" ]]; then
    -    cp-all build-aux/guile.am build-aux/with-guile-env.in m4/guile.m4 .guix-channel .guix-authorizations guix/channel/euandreh.key
    +  ln-dicts
    +
    +  if [ -n "$ENABLE_GUILE" ]; then
    +    cp-all build-aux/guile.am m4/guile.m4
    +  fi
    +
    +  if [ -n "$ENABLE_RUST" ]; then
    +    cp-all build-aux/rust.am
       fi
     }
     
     ln-texinfo-autotools-guix-project() {
       ln-base-autotools-guix-project "$1"
    -  ln-texinfo
    -  ln-guile-files
    +  RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi
    +  ln-web-assets-file texinfo
    +  rsync -a build-aux/docbook-xsl/ "$PREFIX/build-aux/docbook-xsl/"
     }
     
     ln-sphinx-autotools-guix-project() {
       ln-base-autotools-guix-project "$1"
    -  ln-sphinx
    +  cp-all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico
    +  envsubst-all doc/conf.py.in doc/_templates/layout.html
    +  envsubst-if-not doc/index.rst
    +  # EXECUTABLE=1 sed-all build-aux/build-sphinx.sh
    +  cp-if-not doc/i18n-pagenames.json doc/Makefile
     }
     
     ln-scribble-autotools-guix-project() {
    @@ -253,24 +321,11 @@ ln-generated-readme() {
       fi
     }
     
    -ln-maybe-pre-push() {
    -  envsubst-all ..git/hooks/pre-push build-aux/git-pre-push.sh
    -  chmod+x-all  ..git/hooks/pre-push build-aux/git-pre-push.sh
    -}
    -
    -ln-maybe-ci-build() {
    -  if [[ -f "$PREFIX/Makefile" ]]; then
    -    cp-all build-aux/ci-build.sh build-aux/git-post-receive.sh
    -  fi
    -  envsubst-all ..git/hooks/pre-push build-aux/git-pre-push.sh
    -  chmod+x-all  ..git/hooks/pre-push build-aux/git-pre-push.sh
    -}
    -
     ln-makefile-only-guix-project() {
       ln-env "$1"
       ln-agpl
       ln-build-aux
    -  ln-guix-container
    +  ln-guix-files
       ln-ci
       ln-simple-makefile
     }
    @@ -278,13 +333,15 @@ ln-makefile-only-guix-project() {
     ln-bare-project() {
       ln-env "$1"
       ln-agpl
    -  ln-maybe-pre-push
    -  ln-maybe-ci-build
    +  ln-ci
     }
     
     ln-description-foreign-project() {
       ln-env "$1"
    -  DISABLE_CI='# ' ln-maybe-pre-push
    +  # Foreign projects may have Makefiles and alike, and I don't want
    +  # to have CI files copied to the repository
    +  ENABLE_CI=
    +  ln-ci
     }
     
     declare -A PROJECT_NAMES=(
    @@ -300,6 +357,8 @@ declare -A ML_FOR_PROJECT=(
       [cement]=byopds
       [byopds]=byopds
       [guile-pds]=byopds
    +  [parsecc]=mediator
    +  [parseclj]=mediator
       [x-bindgen]=mediator
       [mediator]=mediator
       [libedn]=mediator
    @@ -319,6 +378,12 @@ declare -A GUILE_PROJECTS=(
       [songbooks]=1
     )
     
    +declare -A RUST_PROJECT=(
    +  [spalc]=1
    +  [libedn]=1
    +  [x-bindgen]=1
    +)
    +
     ln-all() {
       LN_FN="$1"
       shift
    @@ -329,10 +394,10 @@ ln-all() {
     
     ln-all ln-texinfo-autotools-guix-project  guile-quickcheck guile-pds guile-clap cement songbooks
     ln-all ln-sphinx-autotools-guix-project   libedn x-bindgen eq mediator
    -ln-all ln-scribble-autotools-guix-project parsecc
    -ln-all ln-antora-autotools-guix-project   byopds
    +# ln-all ln-scribble-autotools-guix-project
    +ln-all ln-antora-autotools-guix-project   byopds spalc
     ln-all ln-makefile-only-guix-project      vps pires
    -ln-all ln-description-foreign-project     guix
    +ln-all ln-description-foreign-project     guix parsecc
     ln-all ln-bare-project                    parseclj              \
                                               boneco                \
                                               brinquedoteca         \
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    deleted file mode 100755
    index 4d21332..0000000
    --- a/bash/templates/..git/hooks/pre-push
    +++ /dev/null
    @@ -1,10 +0,0 @@
    -#!/bin/sh -eux
    -
    -if [ -f description ]; then
    -  scp description         git.euandreh.xyz:/data/git/$PROJECT.git/description
    -else
    -  git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/$PROJECT.git/description'
    -fi
    -
    -${DISABLE_CI}scp "$DOTFILES/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    -${DISABLE_CI}scp "$DOTFILES/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/$PROJECT.git/hooks/post-receive
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    new file mode 120000
    index 0000000..a54ecd2
    --- /dev/null
    +++ b/bash/templates/..git/hooks/pre-push
    @@ -0,0 +1 @@
    +../../build-aux/ci/git-pre-push.sh.in
    \ No newline at end of file
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    index aa2bcc6..91cd32b 100644
    --- a/bash/templates/..gitignore
    +++ b/bash/templates/..gitignore
    @@ -1,6 +1,6 @@
     # GNU Autotools
     /Makefile.in
    -/with-guile-env
    +/INSTALL
     
     autom4te.cache
     /autoscan.log
    @@ -34,11 +34,13 @@ autom4te.cache
     /build-aux/test-driver
     /build-aux/texinfo.tex
     
    +/build-aux/ci/git-pre-push.sh
    +
     /$PROJECT-*.tar.gz
     /$PROJECT-*.tar.gz.asc
     /$PROJECT-*/
     
    -/doc/$PROJECT.info
    +/doc/dictionaries/all.txt
     
     # TODOs.org
     /tasks-and-bugs.org
    diff --git a/bash/templates/HACKING b/bash/templates/HACKING
    deleted file mode 100644
    index 090c33f..0000000
    --- a/bash/templates/HACKING
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -See the manual for useful hacking information, either by running
    -
    -  info -f doc/$PROJECT.info "Contributing"
    -
    -or by checking the web copy of the manual: https://$PROJECT.euandreh.xyz/Contributing.html
    diff --git a/bash/templates/HACKING.in b/bash/templates/HACKING.in
    new file mode 100644
    index 0000000..f8d72d9
    --- /dev/null
    +++ b/bash/templates/HACKING.in
    @@ -0,0 +1,5 @@
    +See the manual for useful hacking information, either by running
    +
    +  info -f doc/@PACKAGE@.info "Contributing"
    +
    +or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    index 6d01ebf..2bd5d8c 100644
    --- a/bash/templates/Makefile.am
    +++ b/bash/templates/Makefile.am
    @@ -1,28 +1,16 @@
     include $(srcdir)/build-aux/git-notes-release.am
    +include $(srcdir)/build-aux/dev-checks.am
    +include $(srcdir)/build-aux/html-files-from-sources.am
     
    -SOURCES =
    -
    -TESTS =
    -
    -EXTRA_DIST =                \
    -  guix/manifest.scm         \
    -  guix/pinned-channels.scm  \
    -  build-aux/with-container.sh \
    -  description               \
    +EXTRA_DIST =                                       \
    +  guix/manifest.scm                                \
    +  guix/pinned-channels.scm                         \
    +  build-aux/with-container.sh                      \
    +  build-aux/dev-checks.am                          \
    +  build-aux/html-files-from-sources.am             \
    +  guix/channel/xyz/euandreh/__PROJECT__/channel.scm \
    +  description                                      \
       $(TESTS)
     
    -info_TEXINFOS = doc/$PROJECT.texi
    -
    -check-local:
    -	if [ -f $(srcdir)/build-aux/assert-shellcheck.sh ]; then \
    -    echo 'Running non-dist checks';                      \
    -    $(srcdir)/build-aux/assert-shellcheck.sh;              \
    -    $(srcdir)/build-aux/assert-todos.sh;                   \
    -  fi
    -
    -clean-local:
    -	rm -rf $(srcdir)/public/
    -
    -public:
    -	$(srcdir)/build-aux/generate-tasks-and-bugs.sh
    -	$(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)'
    +check-local: check-local-dev-checks
    +clean-local: clean-local-html-files-from-sources
    diff --git a/bash/templates/README.in b/bash/templates/README.in
    new file mode 100644
    index 0000000..cfb24bc
    --- /dev/null
    +++ b/bash/templates/README.in
    @@ -0,0 +1,40 @@
    +# @PACKAGE_NAME@
    +
    +@PACKAGE_DESCRIPTION@
    +
    +## Installation
    +
    +### Requirements
    +
    +pkg-config
    +AC_CHECK_PROG and AM_MISSING in configure.ac
    +
    +### Guix channel
    +
    +@PACKAGE_NAME@ is also available through a Guix channel.
    +
    +To add this channel to your `~/.config/guix/channels.scm`:
    +
    +```scheme
    +(append
    + (list
    +  (channel ...)
    +  (channel
    +   (name '@PACKAGE@)
    +   (url "@PACKAGE_CHANNEL_URL@")
    +   (branch "master")
    +   (introduction
    +    (make-channel-introduction
    +     "26b772cdb5074e93d3112c807ffd4c76f16f039c"
    +     (openpgp-fingerprint
    +      "5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060")))))
    + %default-channels)
    +```
    +
    +## Hacking
    +
    +See the manual for useful hacking information, either by running
    +
    +  info -f doc/@PACKAGE@.info "Contributing"
    +
    +or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html
    \ No newline at end of file
    diff --git a/bash/templates/_plugins/linter.rb b/bash/templates/_plugins/linter.rb
    new file mode 100644
    index 0000000..d5cca56
    --- /dev/null
    +++ b/bash/templates/_plugins/linter.rb
    @@ -0,0 +1,55 @@
    +require 'i18n'
    +
    +module Jekyll
    +  class Linter < Generator
    +    safe true
    +
    +    def slugify(s)
    +      I18n.available_locales = [:pt_BR]
    +      I18n.locale = :pt_BR
    +      I18n.transliterate(s)
    +        .gsub(/[\W]+/, ' ')
    +        .strip
    +        .gsub(/\s\s+/, '-')
    +        .downcase
    +        .gsub(' ', '-')
    +        .gsub('_', '-')
    +    end
    +
    +    def assert_field(document, field)
    +      f = document.data[field]
    +      raise "Undefined '#{field}' for #{document.path}" unless f
    +      f
    +    end
    +
    +    def assert_frontmatter_fields(document)
    +      title = assert_field document, 'title'
    +      layout = assert_field document, 'layout'
    +      date = document.date.strftime('%Y-%m-%d') unless layout == 'page'
    +      slug = assert_field document, 'slug'
    +
    +      if 'post' != layout
    +        raise "Layout mismatch: expected 'post', got '#{layout}' for #{document.path}"
    +      end
    +
    +      unless layout == 'page' then
    +        path = "_posts/#{date}-#{slug}.md"
    +        unless path == document.relative_path then
    +          raise "date/filename mismatch:\ndate+slug: #{path}\nfilename:  #{document.relative_path}"
    +        end
    +      end
    +
    +      if slugify(title) != slug then
    +        puts 'WARNING!'
    +        puts "Filename isn't a slug of the title for '#{document.path}':\nslug:  '#{slug}'\ntitle: '#{slugify(title)}'"
    +        puts "Fix with:\n  mv _posts/#{date}-#{slug}.md _posts/#{date}-#{slugify(title)}.md"
    +      end
    +    end
    +
    +    def generate(site)
    +      site.collections['posts'].docs.each do |document|
    +        assert_frontmatter_fields(document)
    +      end
    +    end
    +  end
    +end
    diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh
    index 73e02d6..3fe513a 100755
    --- a/bash/templates/build-aux/assert-todos.sh
    +++ b/bash/templates/build-aux/assert-todos.sh
    @@ -1,6 +1,6 @@
    -#!/bin/sh -eux
    +#!/bin/sh -eu
     
    -if git grep FIXME | grep -v '^TODOs.org' | grep -v '^build-aux/assert-todos.sh'; then
    +if git grep FIXME | grep -v '^TODOs.org' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then
       echo "Found dangling FIXME markers on the project."
       echo "You should write them down properly on TODOs.org."
       exit 1
    @@ -16,13 +16,18 @@ for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '
         ID_OFFSET=2
       fi
       line_n="$((todo+ID_OFFSET))"
    -  ID="$(sed "${line_n}q;d" TODOs.org)"
    -  if echo "$ID" | grep -q '^:CUSTOM_ID: .*$'; then
    +  ID_LINE="$(sed "${line_n}q;d" TODOs.org)"
    +  if echo "$ID_LINE" | grep -q '^:CUSTOM_ID: .*$'; then
    +    ID="$(echo "$ID_LINE" | awk '{print $2}')"
         if echo "$KNOWN_IDS" | grep -q "$ID"; then
           echo "Duplicated ID: $ID"
           has_error=1
         else
    -      KNOWN_IDS="$KNOWN_IDS $(echo "$ID" | awk '{print $2}')"
    +      if [ -z "$KNOWN_IDS" ]; then
    +        KNOWN_IDS="$ID"
    +      else
    +        KNOWN_IDS="$KNOWN_IDS:$ID"
    +      fi
         fi
       else
         echo "Missing ID for TODO in line $line_n"
    diff --git a/bash/templates/build-aux/build-sphinx.sh b/bash/templates/build-aux/build-sphinx.sh
    deleted file mode 100755
    index 658a705..0000000
    --- a/bash/templates/build-aux/build-sphinx.sh
    +++ /dev/null
    @@ -1,66 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    -
    -OUT='public'
    -PROJECT_UC="__PROJECT_UC__"
    -
    -pushd doc
    -make html
    -popd
    -
    -cp doc/favicon.ico "$OUT"
    -mv doc/_build/html/_static/ "$OUT/_static/"
    -
    -CURRENT_LANG="$(jq -r .current_lang < metadata.json)"
    -LANGS="$(jq -r .langs[] < metadata.json)"
    -TAGS="$(git tag | cat - <(echo master))"
    -
    -for lang in ${LANGS}; do
    -  for tag in ${TAGS}; do
    -    mkdir -p "tmp/$lang/$tag/"
    -    git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- .
    -    git reset .
    -    git checkout .
    -
    -    pushd "tmp/$lang/$tag/doc/"
    -    jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json
    -
    -    RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json      | \
    -                 jq -r 'to_entries[] | [.key, .value] | @csv' | \
    -                 tr -d '\"')"
    -
    -    if [[ "$lang" != "$CURRENT_LANG" ]]; then
    -      for rename in $RENAMES; do
    -        from="$(echo "$rename" | cut -d, -f1)"
    -        to="$(echo "$rename"   | cut -d, -f2)"
    -        mv "${from}.rst" "${to}.rst"
    -        sed -i "s/^   $from$/   $to/" index.rst
    -      done
    -    fi
    -
    -    make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html
    -    popd
    -
    -    mkdir "$OUT/$lang/"
    -
    -    mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/"
    -    pushd "$OUT/$lang/$tag/"
    -    rm -rf _static/
    -    ln -s ../../_static .
    -    popd
    -
    -    mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/"
    -    pushd "$OUT/$lang/$tag/single/"
    -    rm -rf _static/
    -    ln -s ../../../_static .
    -    rm -rf _images/
    -    ln -s ../_images .
    -    popd
    -
    -    mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf"
    -  done
    -done
    -
    -gitstats . "$OUT/gitstats/"
    diff --git a/bash/templates/build-aux/ci-build.sh b/bash/templates/build-aux/ci-build.sh
    deleted file mode 100755
    index ca678ec..0000000
    --- a/bash/templates/build-aux/ci-build.sh
    +++ /dev/null
    @@ -1,42 +0,0 @@
    -#!/bin/sh -eux
    -
    -PACKAGE="$1"
    -LOGS_PREFIX="$2"
    -
    -PREFIX="$LOGS_PREFIX/$PACKAGE"
    -mkdir -p "$PREFIX"
    -read -r _ SHA _ # oldrev newrev refname
    -FILENAME="$(date -Is)-$SHA.log"
    -LOGFILE="$PREFIX/$FILENAME"
    -
    -{
    -  echo "Starting CI job at: $(date -Is)"
    -
    -  finish() {
    -    STATUS="$?"
    -    printf "\n\n>>> exit status was %s\n" "$STATUS"
    -    echo "Finishing CI job at: $(date -Is)"
    -    cd -
    -    NOTE=$(cat <>> CI logs added as Git note."
    -  }
    -  trap finish EXIT
    -
    -  unset GIT_DIR
    -  CLONE="$(mktemp -d)"
    -  git clone . "$CLONE"
    -  cd "$CLONE"
    -  git config --global user.email git@euandre.org
    -  git config --global user.name 'EuAndreh CI'
    -
    -  ./build-aux/with-container.sh './bootstrap && ./configure && make clean check distcheck public'
    -  rm -rf "/srv/http/$PACKAGE/" && mv public/ "/srv/http/$PACKAGE/"
    -} | tee "$LOGFILE" 2>&1
    diff --git a/bash/templates/build-aux/ci/ci-build.sh b/bash/templates/build-aux/ci/ci-build.sh
    new file mode 100755
    index 0000000..62e0f22
    --- /dev/null
    +++ b/bash/templates/build-aux/ci/ci-build.sh
    @@ -0,0 +1,43 @@
    +#!/bin/sh -eux
    +
    +PACKAGE="$1"
    +LOGS_DIR="$2"
    +read -r _ SHA _ # oldrev newrev refname
    +FILENAME="$(date -Is)-$SHA.log"
    +LOGFILE="$LOGS_DIR/$FILENAME"
    +
    +{
    +  echo "Starting CI job at: $(date -Is)"
    +
    +  finish() {
    +    STATUS="$?"
    +    printf "\n\n>>> exit status was %s\n" "$STATUS"
    +    echo "Finishing CI job at: $(date -Is)"
    +    cd -
    +    NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS"
    +  }
    +  trap finish EXIT
    +
    +  unset GIT_DIR
    +  CLONE="$(mktemp -d)"
    +  git clone . "$CLONE"
    +  cd "$CLONE"
    +  git config --global user.email git@euandre.org
    +  git config --global user.name 'EuAndreh CI'
    +
    +  if [ -f ./bootstrap ]; then
    +    ./build-aux/with-container.sh './bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public'
    +  else
    +    ./build-aux/with-container.sh 'make clean check public'
    +  fi
    +  rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete
    +} | tee "$LOGFILE" 2>&1
    diff --git a/bash/templates/build-aux/ci/git-post-receive.sh b/bash/templates/build-aux/ci/git-post-receive.sh
    new file mode 100755
    index 0000000..c78f1ac
    --- /dev/null
    +++ b/bash/templates/build-aux/ci/git-post-receive.sh
    @@ -0,0 +1,13 @@
    +#!/bin/sh -eu
    +
    +for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do
    +  opt="$(eval "echo \$GIT_PUSH_OPTION_$n")"
    +  if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then
    +    printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt"
    +    exit 0
    +  fi
    +done
    +
    +PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix
    +LOGS_DIR="/data/ci/$PACKAGE/logs"
    +"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR"
    diff --git a/bash/templates/build-aux/ci/git-pre-push.sh.in b/bash/templates/build-aux/ci/git-pre-push.sh.in
    new file mode 100755
    index 0000000..9979fff
    --- /dev/null
    +++ b/bash/templates/build-aux/ci/git-pre-push.sh.in
    @@ -0,0 +1,18 @@
    +#!/bin/sh -eux
    +
    +PACKAGE="$(basename "$PWD")"
    +__ENABLE_CI__LOGS_DIR="/data/ci/$PACKAGE/logs"
    +REMOTE_GIT_DIR="/data/git/$PACKAGE.git"
    +
    +DESCRIPTION="$(mktemp)"
    +if [ -f description ]
    +then
    +  cp description "$DESCRIPTION"
    +else
    +  git config euandreh.description > "$DESCRIPTION"
    +fi
    +
    +scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description"
    +__ENABLE_CI__ssh git.@TLD@ mkdir -p "$LOGS_DIR"
    +__ENABLE_CI__scp build-aux/ci/ci-build.sh         "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh"
    +__ENABLE_CI__scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive"
    diff --git a/bash/templates/build-aux/default-extra-dist.am b/bash/templates/build-aux/default-extra-dist.am
    new file mode 100644
    index 0000000..6be406a
    --- /dev/null
    +++ b/bash/templates/build-aux/default-extra-dist.am
    @@ -0,0 +1,6 @@
    +EXTRA_DIST =                  \
    +  guix/manifest.scm           \
    +  guix/pinned-channels.scm    \
    +  build-aux/with-container.sh \
    +  description                 \
    +  $(TESTS)
    diff --git a/bash/templates/build-aux/dev-checks.am b/bash/templates/build-aux/dev-checks.am
    new file mode 100644
    index 0000000..ca1b9d8
    --- /dev/null
    +++ b/bash/templates/build-aux/dev-checks.am
    @@ -0,0 +1,17 @@
    +.PHONY: check-local-dev-checks
    +check-local-dev-checks:
    +	if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then                                      \
    +    echo 'Running PROGRAMMER_MODE checks.';                                        \
    +    $(srcdir)/build-aux/assert-shellcheck.sh                            || exit 1; \
    +    $(srcdir)/build-aux/assert-todos.sh                                 || exit 1; \
    +    if [ "x$(CI_MODE)" = 'xno' ]; then                                             \
    +      echo 'Running CI_MODE checks.';                                              \
    +		  $(GUIX) build -f guix/channel/xyz/euandreh/$(PACKAGE)/channel.scm || exit 1; \
    +    else                                                                           \
    +      echo 'Skipping CI_MODE checks.';                                             \
    +    fi                                                                             \
    +  else                                                                             \
    +    echo 'Skipping PROGRAMMER_MODE checks.';                                       \
    +  fi
    +
    +check-local: check-local-dev-checks
    diff --git a/bash/templates/build-aux/docbook-xsl/AUTHORS b/bash/templates/build-aux/docbook-xsl/AUTHORS
    new file mode 100644
    index 0000000..9c3dcdc
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/AUTHORS
    @@ -0,0 +1,4 @@
    +The DocBook XSL stylesheets are maintained by Norman Walsh,
    +, and members of the DocBook Project,
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/COPYING b/bash/templates/build-aux/docbook-xsl/COPYING
    new file mode 100644
    index 0000000..9553fee
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/COPYING
    @@ -0,0 +1,48 @@
    +Copyright
    +---------
    +Copyright (C) 1999-2007 Norman Walsh
    +Copyright (C) 2003 Jiří Kosek
    +Copyright (C) 2004-2007 Steve Ball
    +Copyright (C) 2005-2014 The DocBook Project
    +Copyright (C) 2011-2012 O'Reilly Media
    +
    +Permission is hereby granted, free of charge, to any person
    +obtaining a copy of this software and associated documentation
    +files (the ``Software''), to deal in the Software without
    +restriction, including without limitation the rights to use,
    +copy, modify, merge, publish, distribute, sublicense, and/or
    +sell copies of the Software, and to permit persons to whom the
    +Software is furnished to do so, subject to the following
    +conditions:
    +
    +The above copyright notice and this permission notice shall be
    +included in all copies or substantial portions of the Software.
    +
    +Except as contained in this notice, the names of individuals
    +credited with contribution to this software shall not be used in
    +advertising or otherwise to promote the sale, use or other
    +dealings in this Software without prior written authorization
    +from the individuals in question.
    +
    +Any stylesheet derived from this Software that is publically
    +distributed will be identified with a different name and the
    +version strings in any derived Software will be changed so that
    +no possibility of confusion between the derived package and this
    +Software will exist.
    +
    +Warranty
    +--------
    +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES
    +OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    +NONINFRINGEMENT.  IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER
    +CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY,
    +WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
    +FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
    +OTHER DEALINGS IN THE SOFTWARE.
    +
    +Contacting the Author
    +---------------------
    +The DocBook XSL stylesheets are maintained by Norman Walsh,
    +, and members of the DocBook Project,
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/VERSION.xsl b/bash/templates/build-aux/docbook-xsl/VERSION.xsl
    new file mode 100644
    index 0000000..2eea4dc
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/VERSION.xsl
    @@ -0,0 +1,115 @@
    + 
    +
    +
    +
    +
    +
    +
    +
    +
    +docbook-xsl
    +1.79.1
    +c2af9a74931353e820685a44b9b1d117d74dc194
    +$Revision: 9732 $
    +$URL: svn+ssh://bobstayton@svn.code.sf.net/p/docbook/code/trunk/xsl/VERSION.xsl $
    +
    +
    +
    +
    +  DocBook
    +  XSL Stylesheets
    +  
    +  
    +  1.79.2
    +
    +  
    +
    +
    +
    +
    +* Major feature enhancements 
    +
    +
    +
    +
    +  
    +  http://sourceforge.net/projects/docbook/
    +  http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.tar.gz?download
    +  http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.zip?download
    +  http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.bz2?download
    +  http://sourceforge.net/project/shownotes.php?release_id={SFRELID}
    +  http://docbook.svn.sourceforge.net/viewvc/docbook/
    +  http://lists.oasis-open.org/archives/docbook-apps/
    +  This is a release with bugfixes and some enhancements.
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +        
    +         You must specify the sf-relid as a parameter.
    +        
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    
    +  
    +
    +
    +
    +
    +
    +  
    +  : 
    +  
    +  
    +  
    +  
    
    +
    +
    +
    +  
    +  : 
    +  
    +  
    +  
    +  
    
    +
    +
    +
    +  
    +  : 
    +  
    +  
    
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/addns.xsl b/bash/templates/build-aux/docbook-xsl/common/addns.xsl
    new file mode 100644
    index 0000000..05647b8
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/addns.xsl
    @@ -0,0 +1,124 @@
    +
    +
    +
    +
    +
    +
    +
    +  
    +    
    +
    +    
    +    
    +      
    +    
    +
    +    
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +  
    +  
    +    
    +  
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +            Warn
    +            
    +            
    +              no @xml:base
    +            
    +            
    +              cannot add @xml:base to node-set root element
    +            
    +          
    +          
    +            Warn
    +            
    +            
    +              no @xml:base
    +            
    +            
    +              relative paths may not work
    +            
    +          
    +        
    +      
    +    
    +    
    +    
    +      
    +        
    +          
    +            
    +            
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +    /
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/af.xml b/bash/templates/build-aux/docbook-xsl/common/af.xml
    new file mode 100644
    index 0000000..63a5a41
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/af.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/am.xml b/bash/templates/build-aux/docbook-xsl/common/am.xml
    new file mode 100644
    index 0000000..30c049a
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/am.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ምልክቶች
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ar.xml b/bash/templates/build-aux/docbook-xsl/common/ar.xml
    new file mode 100644
    index 0000000..744b9cc
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ar.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/as.xml b/bash/templates/build-aux/docbook-xsl/common/as.xml
    new file mode 100644
    index 0000000..b0af387
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/as.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +চিহ্ন
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ast.xml b/bash/templates/build-aux/docbook-xsl/common/ast.xml
    new file mode 100644
    index 0000000..b3f6ad4
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ast.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Símbolos
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl b/bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl
    new file mode 100644
    index 0000000..be1049a
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl
    @@ -0,0 +1,43 @@
    +
    +
    +%common.entities;
    +
    +
    +
    +
    +]>
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +      
    +        ERROR: the 'kimber' index method requires the 
    +        Saxon version 6 or 8 XSLT processor.
    +      
    +    
    +    1
    +  
    +
    +
    +
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl b/bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl
    new file mode 100644
    index 0000000..9f8ae4f
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl
    @@ -0,0 +1,153 @@
    +
    +
    +%common.entities;
    +]>
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +      
    +        ERROR: the 'kosek' index method does not 
    +        work with the xsltproc XSLT processor.
    +      
    +    
    +    1
    +  
    +
    +
    +
    +
    +  
    +  
    +  
    +    
    +      
    +    
    +    
    +    
    +    
    +    
    +      
    +
    +      
    +	
    +	  
    +	
    +	
    +	  
    +	
    +	
    +	  
    +	    No "
    +	    
    +	    " localization of index grouping letters exists
    +	    
    +	      
    +		.
    +	      
    +	      
    +		; using "en".
    +	      
    +	    
    +	  
    +
    +	  
    +	
    +      
    +    
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +      0
    +    
    +  
    +  
    +
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +    
    +    
    +    
    +      
    +
    +      
    +	
    +	  
    +	
    +	
    +	  
    +	
    +	
    +	  
    +	    No "
    +	    
    +	    " localization of index grouping letters exists
    +	    
    +	      
    +		.
    +	      
    +	      
    +		; using "en".
    +	      
    +	    
    +	  
    +
    +	  
    +	
    +      
    +    
    +  
    +  
    +  
    +  
    +  
    +
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/az.xml b/bash/templates/build-aux/docbook-xsl/common/az.xml
    new file mode 100644
    index 0000000..c38ba4f
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/az.xml
    @@ -0,0 +1,731 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +İşarələr
    +A
    +a
    +B
    +b
    +C
    +c
    +Ç
    +ç
    +D
    +d
    +E
    +e
    +e
    +e
    +Ə
    +ə
    +G
    +g
    +Ğ
    +ğ
    +H
    +h
    +X
    +x
    +I
    +ı
    +İ
    +i
    +J
    +j
    +K
    +k
    +Q
    +q
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +Ö
    +ö
    +P
    +p
    +R
    +r
    +S
    +s
    +Ş
    +ş
    +T
    +t
    +U
    +u
    +Ü
    +ü
    +V
    +v
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/bg.xml b/bash/templates/build-aux/docbook-xsl/common/bg.xml
    new file mode 100644
    index 0000000..aa092f4
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/bg.xml
    @@ -0,0 +1,783 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Цифри и знаци
    +А
    +а
    +Б
    +б
    +В
    +в
    +Г
    +г
    +Д
    +д
    +Е
    +е
    +Ж
    +ж
    +З
    +з
    +И
    +и
    +Й
    +й
    +К
    +к
    +Л
    +л
    +М
    +м
    +Н
    +н
    +О
    +о
    +П
    +п
    +Р
    +р
    +С
    +с
    +Т
    +т
    +У
    +у
    +Ф
    +ф
    +Х
    +х
    +Ц
    +ц
    +Ч
    +ч
    +Ш
    +ш
    +Щ
    +щ
    +Ъ
    +ъ
    +Ь
    +ь
    +Ю
    +ю
    +Я
    +я
    +Э
    +э
    +Ы
    +ы
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/bn.xml b/bash/templates/build-aux/docbook-xsl/common/bn.xml
    new file mode 100644
    index 0000000..16f6fad
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/bn.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/bn_in.xml b/bash/templates/build-aux/docbook-xsl/common/bn_in.xml
    new file mode 100644
    index 0000000..81df19d
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/bn_in.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +সংকেত
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/bs.xml b/bash/templates/build-aux/docbook-xsl/common/bs.xml
    new file mode 100644
    index 0000000..733bba8
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/bs.xml
    @@ -0,0 +1,721 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Simboli
    +A
    +a
    +B
    +b
    +C
    +c
    +Ć
    +ć
    +Č
    +č
    +D
    +d
    +Đ
    +đ
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +R
    +r
    +S
    +s
    +Š
    +š
    +T
    +t
    +U
    +u
    +V
    +v
    +Z
    +z
    +Ž
    +ž
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/build.xml b/bash/templates/build-aux/docbook-xsl/common/build.xml
    new file mode 100644
    index 0000000..8926ebc
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/build.xml
    @@ -0,0 +1,28 @@
    +
    +
    +
    +  
    +  
    +
    +  
    +    Adding missing translations from English master localization...
    +    
    +      
    +      
    +      
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +	
    +	
    +      
    +    
    +  
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ca.xml b/bash/templates/build-aux/docbook-xsl/common/ca.xml
    new file mode 100644
    index 0000000..46695d8
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ca.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Símbols
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/charmap.xml b/bash/templates/build-aux/docbook-xsl/common/charmap.xml
    new file mode 100644
    index 0000000..91f318c
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/charmap.xml
    @@ -0,0 +1,182 @@
    +
    +
    +  
    +    Common » Character-Map Template Reference
    +    
    +    
    +  
    +  
    +  
    +    Introduction
    +    
    +This is technical reference documentation for the
    +      character-map templates in the DocBook XSL Stylesheets.
    +
    +    
    +      
    +These templates are defined in a separate file from the set
    +        of “common” templates because some of the common templates
    +        reference DocBook XSL stylesheet parameters, requiring the
    +        entire set of parameters to be imported/included in any
    +        stylesheet that imports/includes the common templates.
    +
    +      
    +The character-map templates don’t import or include
    +        any DocBook XSL stylesheet parameters, so the
    +        character-map templates can be used without importing the
    +        whole set of parameters.
    +
    +    
    +    
    +This is not intended to be user documentation. It is
    +      provided for developers writing customization layers for the
    +      stylesheets.
    +
    +  
    +
    +
    +
    +apply-character-map
    +Applies an XSLT character map
    +
    +
    +<xsl:template name="apply-character-map">
    +<xsl:param name="content"/>
    +<xsl:param name="map.contents"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +This template applies an XSLT character map; that is, it causes certain
    +      individual characters to be substituted with strings of one
    +      or more characters. It is useful mainly for replacing
    +      multiple “special” characters or symbols in the same target
    +      content. It uses the value of
    +      map.contents to do substitution on
    +      content, and then returns the
    +      modified contents.
    +
    +    
    +      
    +This template is a very slightly modified version of
    +        Jeni Tennison’s replace_strings
    +        template in the multiple string replacements section of Dave Pawson’s
    +        XSLT FAQ.
    +
    +      
    +The apply-string-subst-map
    +        template is essentially the same template as the
    +        apply-character-map template; the
    +        only difference is that in the map that
    +        apply-string-subst-map expects, oldstring and newstring attributes are used
    +        instead of character and string attributes.
    +
    +    
    +  Parameters
    +    
    +
    +      content
    +        
    +          
    +The content on which to perform the character-map
    +            substitution.
    +
    +        
    +      
    +      map.contents
    +        
    +          
    +A node set of elements, with each element having
    +            the following attributes:
    +            
    +
    +              
    +                character, a
    +                  character to be replaced
    +              
    +              
    +                string, a
    +                  string with which to replace character
    +              
    +            
    +
    +          
    +
    +        
    +      
    +    
    +
    +  
    +
    +
    +
    +read-character-map
    +Reads in all or part of an XSLT character map
    +
    +
    +<xsl:template name="read-character-map">
    +<xsl:param name="use.subset"/>
    +<xsl:param name="subset.profile"/>
    +<xsl:param name="uri"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +The XSLT 2.0 specification describes character maps and explains how they may be used
    +      to allow a specific character appearing in a text or
    +      attribute node in a final result tree to be substituted by
    +      a specified string of characters during serialization. The
    +      read-character-map template provides a
    +      means for reading and using character maps with XSLT
    +      1.0-based tools.
    +
    +    
    +This template reads the character-map contents from
    +      uri (in full or in part, depending on
    +      the value of the use.subset
    +      parameter), then passes those contents to the
    +      apply-character-map template, along with
    +      content, the data on which to perform
    +      the character substitution.
    +
    +    
    +Using the character map “in part” means that it uses only
    +      those output-character elements that match the
    +      XPath expression given in the value of the
    +      subset.profile parameter. The current
    +      implementation of that capability here relies on the
    +      evaluate extension XSLT function.
    +
    +  Parameters
    +    
    +
    +      use.subset
    +        
    +          
    +Specifies whether to use a subset of the character
    +            map instead of the whole map; boolean
    +            0 or 1
    +
    +        
    +      
    +      subset.profile
    +        
    +          
    +XPath expression that specifies what subset of the
    +            character map to use
    +
    +        
    +      
    +      uri
    +        
    +          
    +URI for a character map
    +
    +        
    +      
    +    
    +
    +  
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/charmap.xsl b/bash/templates/build-aux/docbook-xsl/common/charmap.xsl
    new file mode 100644
    index 0000000..5adc9de
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/charmap.xsl
    @@ -0,0 +1,219 @@
    +
    +
    +
    +
    +
    +  
    +    Common » Character-Map Template Reference
    +    
    +    
    +  
    +  
    +  
    +    Introduction
    +    This is technical reference documentation for the
    +      character-map templates in the DocBook XSL Stylesheets.
    +    
    +      These templates are defined in a separate file from the set
    +        of “common” templates because some of the common templates
    +        reference DocBook XSL stylesheet parameters, requiring the
    +        entire set of parameters to be imported/included in any
    +        stylesheet that imports/includes the common templates.
    +      The character-map templates don’t import or include
    +        any DocBook XSL stylesheet parameters, so the
    +        character-map templates can be used without importing the
    +        whole set of parameters.
    +    
    +    This is not intended to be user documentation. It is
    +      provided for developers writing customization layers for the
    +      stylesheets.
    +  
    +
    +
    +
    +
    +  Applies an XSLT character map
    +  
    +    This template applies an XSLT character map; that is, it causes certain
    +      individual characters to be substituted with strings of one
    +      or more characters. It is useful mainly for replacing
    +      multiple “special” characters or symbols in the same target
    +      content. It uses the value of
    +      map.contents to do substitution on
    +      content, and then returns the
    +      modified contents.
    +    
    +      This template is a very slightly modified version of
    +        Jeni Tennison’s replace_strings
    +        template in the multiple string replacements section of Dave Pawson’s
    +        XSLT FAQ.
    +      The apply-string-subst-map
    +        template is essentially the same template as the
    +        apply-character-map template; the
    +        only difference is that in the map that
    +        apply-string-subst-map expects, oldstring and newstring attributes are used
    +        instead of character and string attributes.
    +    
    +  
    +  
    +    
    +      content
    +        
    +          The content on which to perform the character-map
    +            substitution.
    +        
    +      
    +      map.contents
    +        
    +          A node set of elements, with each element having
    +            the following attributes:
    +            
    +              
    +                character, a
    +                  character to be replaced
    +              
    +              
    +                string, a
    +                  string with which to replace character
    +              
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +
    +  
    +  
    +  
    +    
    +      
    +      
    +      
    +    
    +  
    +  
    +    
    +      
    +        
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +  Reads in all or part of an XSLT character map
    +  
    +    The XSLT 2.0 specification describes character maps and explains how they may be used
    +      to allow a specific character appearing in a text or
    +      attribute node in a final result tree to be substituted by
    +      a specified string of characters during serialization. The
    +      read-character-map template provides a
    +      means for reading and using character maps with XSLT
    +      1.0-based tools.
    +    This template reads the character-map contents from
    +      uri (in full or in part, depending on
    +      the value of the use.subset
    +      parameter), then passes those contents to the
    +      apply-character-map template, along with
    +      content, the data on which to perform
    +      the character substitution.
    +    Using the character map “in part” means that it uses only
    +      those output-character elements that match the
    +      XPath expression given in the value of the
    +      subset.profile parameter. The current
    +      implementation of that capability here relies on the
    +      evaluate extension XSLT function.
    +  
    +  
    +    
    +      use.subset
    +        
    +          Specifies whether to use a subset of the character
    +            map instead of the whole map; boolean
    +            0 or 1
    +        
    +      
    +      subset.profile
    +        
    +          XPath expression that specifies what subset of the
    +            character map to use
    +        
    +      
    +      uri
    +        
    +          URI for a character map
    +        
    +      
    +    
    +  
    +
    +
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +        
    +        
    +          
    +        
    +        
    +        
    +          
    +        
    +        
    +          
    +Error: To process character-map subsets, you must use an XSLT engine
    +that supports the evaluate() XSLT extension function. Your XSLT engine
    +does not support it.
    +          
    +        
    +      
    +    
    +    
    +      
    +      
    +    
    +  
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/common.xml b/bash/templates/build-aux/docbook-xsl/common/common.xml
    new file mode 100644
    index 0000000..150d37c
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/common.xml
    @@ -0,0 +1,638 @@
    +
    +
    +  
    +    Common » Base Template Reference
    +    
    +    
    +  
    +  
    +  
    +    Introduction
    +    
    +This is technical reference documentation for the “base”
    +      set of common templates in the DocBook XSL Stylesheets.
    +
    +    
    +This is not intended to be user documentation. It is
    +      provided for developers writing customization layers for the
    +      stylesheets.
    +
    +  
    +
    +
    +
    +is.component
    +Tests if a given node is a component-level element
    +
    +
    +<xsl:template name="is.component">
    +<xsl:param name="node" select="."/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template returns '1' if the specified node is a component
    +(Chapter, Appendix, etc.), and '0' otherwise.
    +
    +Parameters
    +
    +
    +node
    +
    +
    +The node which is to be tested.
    +
    +
    +
    +
    +
    +Returns
    +
    +This template returns '1' if the specified node is a component
    +(Chapter, Appendix, etc.), and '0' otherwise.
    +
    +
    +
    +
    +
    +is.section
    +Tests if a given node is a section-level element
    +
    +
    +<xsl:template name="is.section">
    +<xsl:param name="node" select="."/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template returns '1' if the specified node is a section
    +(Section, Sect1, Sect2, etc.), and '0' otherwise.
    +
    +Parameters
    +
    +
    +node
    +
    +
    +The node which is to be tested.
    +
    +
    +
    +
    +
    +Returns
    +
    +This template returns '1' if the specified node is a section
    +(Section, Sect1, Sect2, etc.), and '0' otherwise.
    +
    +
    +
    +
    +
    +section.level
    +Returns the hierarchical level of a section
    +
    +
    +<xsl:template name="section.level">
    +<xsl:param name="node" select="."/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template calculates the hierarchical level of a section.
    +The element sect1 is at level 1, sect2 is
    +at level 2, etc.
    +
    +
    +
    +Recursive sections are calculated down to the fifth level.
    +
    +Parameters
    +
    +
    +node
    +
    +
    +The section node for which the level should be calculated.
    +Defaults to the context node.
    +
    +
    +
    +
    +
    +Returns
    +
    +The section level, 1, 2, etc.
    +
    +
    +
    +
    +
    +
    +qanda.section.level
    +Returns the hierarchical level of a QandASet
    +
    +
    +<xsl:template name="qanda.section.level"/>
    +
    +Description
    +
    +This template calculates the hierarchical level of a QandASet.
    +
    +
    +Returns
    +
    +The level, 1, 2, etc.
    +
    +
    +
    +
    +
    +
    +select.mediaobject
    +Selects and processes an appropriate media object from a list
    +
    +
    +<xsl:template name="select.mediaobject">
    +<xsl:param name="olist" select="d:imageobject|d:imageobjectco                      |d:videoobject|d:audioobject|d:textobject"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template takes a list of media objects (usually the
    +children of a mediaobject or inlinemediaobject) and processes
    +the "right" object.
    +
    +
    +
    +This template relies on a template named 
    +"select.mediaobject.index" to determine which object
    +in the list is appropriate.
    +
    +
    +
    +If no acceptable object is located, nothing happens.
    +
    +Parameters
    +
    +
    +olist
    +
    +
    +The node list of potential objects to examine.
    +
    +
    +
    +
    +
    +Returns
    +
    +Calls <xsl:apply-templates> on the selected object.
    +
    +
    +
    +
    +
    +select.mediaobject.index
    +Selects the position of the appropriate media object from a list
    +
    +
    +<xsl:template name="select.mediaobject.index">
    +<xsl:param name="olist" select="d:imageobject|d:imageobjectco                      |d:videoobject|d:audioobject|d:textobject"/>
    +<xsl:param name="count">1</xsl:param>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template takes a list of media objects (usually the
    +children of a mediaobject or inlinemediaobject) and determines
    +the "right" object. It returns the position of that object
    +to be used by the calling template.
    +
    +
    +
    +If the parameter use.role.for.mediaobject
    +is nonzero, then it first checks for an object with
    +a role attribute of the appropriate value.  It takes the first
    +of those.  Otherwise, it takes the first acceptable object
    +through a recursive pass through the list.
    +
    +
    +
    +This template relies on a template named "is.acceptable.mediaobject"
    +to determine if a given object is an acceptable graphic. The semantics
    +of media objects is that the first acceptable graphic should be used.
    +
    +
    +
    +
    +If no acceptable object is located, no index is returned.
    +
    +Parameters
    +
    +
    +olist
    +
    +
    +The node list of potential objects to examine.
    +
    +
    +
    +count
    +
    +
    +The position in the list currently being considered by the 
    +recursive process.
    +
    +
    +
    +
    +
    +Returns
    +
    +Returns the position in the original list of the selected object.
    +
    +
    +
    +
    +
    +is.acceptable.mediaobject
    +Returns '1' if the specified media object is recognized
    +
    +
    +<xsl:template name="is.acceptable.mediaobject">
    +<xsl:param name="object"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template examines a media object and returns '1' if the
    +object is recognized as a graphic.
    +
    +Parameters
    +
    +
    +object
    +
    +
    +The media object to consider.
    +
    +
    +
    +
    +
    +Returns
    +
    +0 or 1
    +
    +
    +
    +
    +
    +check.id.unique
    +Warn users about references to non-unique IDs
    +
    +
    +<xsl:template name="check.id.unique">
    +<xsl:param name="linkend"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +If passed an ID in linkend,
    +check.id.unique prints
    +a warning message to the user if either the ID does not exist or
    +the ID is not unique.
    +
    +
    +
    +
    +
    +check.idref.targets
    +Warn users about incorrectly typed references
    +
    +
    +<xsl:template name="check.idref.targets">
    +<xsl:param name="linkend"/>
    +<xsl:param name="element-list"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +If passed an ID in linkend,
    +check.idref.targets makes sure that the element
    +pointed to by the link is one of the elements listed in
    +element-list and warns the user otherwise.
    +
    +
    +
    +
    +
    +copyright.years
    +Print a set of years with collapsed ranges
    +
    +
    +<xsl:template name="copyright.years">
    +<xsl:param name="years"/>
    +<xsl:param name="print.ranges" select="1"/>
    +<xsl:param name="single.year.ranges" select="0"/>
    +<xsl:param name="firstyear" select="0"/>
    +<xsl:param name="nextyear" select="0"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template prints a list of year elements with consecutive
    +years printed as a range. In other words:
    +
    +
    +<year>1992</year>
    +<year>1993</year>
    +<year>1994</year>
    +
    +
    +is printed 1992-1994, whereas:
    +
    +
    +<year>1992</year>
    +<year>1994</year>
    +
    +
    +is printed 1992, 1994.
    +
    +
    +
    +This template assumes that all the year elements contain only
    +decimal year numbers, that the elements are sorted in increasing
    +numerical order, that there are no duplicates, and that all the years
    +are expressed in full century+year
    +(1999 not 99) notation.
    +
    +Parameters
    +
    +
    +years
    +
    +
    +The initial set of year elements.
    +
    +
    +
    +print.ranges
    +
    +
    +If non-zero, multi-year ranges are collapsed. If zero, all years
    +are printed discretely.
    +
    +
    +
    +single.year.ranges
    +
    +
    +If non-zero, two consecutive years will be printed as a range,
    +otherwise, they will be printed discretely. In other words, a single
    +year range is 1991-1992 but discretely it's
    +1991, 1992.
    +
    +
    +
    +
    +
    +Returns
    +
    +This template returns the formatted list of years.
    +
    +
    +
    +
    +
    +find.path.params
    +Search in a table for the "best" match for the node
    +
    +
    +<xsl:template name="find.path.params">
    +<xsl:param name="node" select="."/>
    +<xsl:param name="table" select="''"/>
    +<xsl:param name="location">
    +    <xsl:call-template name="xpath.location">
    +      <xsl:with-param name="node" select="$node"/>
    +    </xsl:call-template>
    +  </xsl:param>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +This template searches in a table for the value that most-closely
    +(in the typical best-match sense of XSLT) matches the current (element)
    +node location.
    +
    +
    +
    +
    +
    +string.upper
    +Converts a string to all uppercase letters
    +
    +
    +<xsl:template name="string.upper">
    +<xsl:param name="string" select="''"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +Given a string, this template does a language-aware conversion
    +of that string to all uppercase letters, based on the values of the
    +lowercase.alpha and
    +uppercase.alpha gentext keys for the current
    +locale. It affects only those characters found in the values of
    +lowercase.alpha and
    +uppercase.alpha. All other characters are left
    +unchanged.
    +
    +Parameters
    +
    +
    +string
    +
    +
    +The string to convert to uppercase.
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +string.lower
    +Converts a string to all lowercase letters
    +
    +
    +<xsl:template name="string.lower">
    +<xsl:param name="string" select="''"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +
    +Given a string, this template does a language-aware conversion
    +of that string to all lowercase letters, based on the values of the
    +uppercase.alpha and
    +lowercase.alpha gentext keys for the current
    +locale. It affects only those characters found in the values of
    +uppercase.alpha and
    +lowercase.alpha. All other characters are left
    +unchanged.
    +
    +Parameters
    +
    +
    +string
    +
    +
    +The string to convert to lowercase.
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +select.choice.separator
    +Returns localized choice separator
    +
    +
    +<xsl:template name="select.choice.separator"/>
    +
    +Description
    +    
    +This template enables auto-generation of an appropriate
    +    localized "choice" separator (for example, "and" or "or") before
    +    the final item in an inline list (though it could also be useful
    +    for generating choice separators for non-inline lists).
    +
    +    
    +It currently works by evaluating a processing instruction
    +    (PI) of the form <?dbchoice choice="foo"?> :
    +    
    +
    +      
    +        if the value of the choice
    +        pseudo-attribute is "and" or "or", returns a localized "and"
    +        or "or"
    +      
    +      
    +        otherwise returns the literal value of the
    +        choice pseudo-attribute
    +      
    +    
    +
    +    The latter is provided only as a temporary workaround because the
    +    locale files do not currently have translations for the word
    +    or. So if you want to generate a a
    +    logical "or" separator in French (for example), you currently need
    +    to do this:
    +    <?dbchoice choice="ou"?>
    +    
    +
    +    
    +      
    +The dbchoice processing instruction is
    +      an unfortunate hack; support for it may disappear in the future
    +      (particularly if and when a more appropriate means for marking
    +      up "choice" lists becomes available in DocBook).
    +
    +    
    +  
    +
    +
    +
    +evaluate.info.profile
    +Evaluates an info profile
    +
    +
    +<xsl:template name="evaluate.info.profile">
    +<xsl:param name="profile"/>
    +<xsl:param name="info"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +This template evaluates an "info profile" matching the XPath
    +    expression given by the profile
    +    parameter. It relies on the XSLT evaluate()
    +    extension function.
    +
    +
    +    
    +The value of the profile parameter
    +    can include the literal string $info. If found
    +    in the value of the profile parameter, the
    +    literal string $info string is replaced with
    +    the value of the info parameter, which
    +    should be a set of *info nodes; the
    +    expression is then evaluated using the XSLT
    +    evaluate() extension function.
    +
    +  Parameters
    +    
    +
    +       
    +        profile
    +        
    +          
    +A string representing an XPath expression 
    +
    +        
    +      
    +       
    +        info
    +        
    +          
    +A set of *info nodes
    +
    +        
    +      
    +    
    +
    +  Returns
    +    
    +Returns a node (the result of evaluating the
    +    profile parameter)
    +
    +  
    +
    +
    +
    +graphic.format.content-type
    +Returns mimetype for media format
    +
    +
    +<xsl:template name="graphic.format.content-type">
    +<xsl:param name="format"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +This takes as input a 'format' param and returns
    +    a mimetype string.  It uses an xsl:choose after first
    +    converting the input to all uppercase.
    +
    +  
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/common.xsl b/bash/templates/build-aux/docbook-xsl/common/common.xsl
    new file mode 100644
    index 0000000..59f51df
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/common.xsl
    @@ -0,0 +1,2126 @@
    +
    +
    +
    + ]>
    +
    +
    +
    +
    +
    +  
    +    Common » Base Template Reference
    +    
    +    
    +  
    +  
    +  
    +    Introduction
    +    This is technical reference documentation for the “base”
    +      set of common templates in the DocBook XSL Stylesheets.
    +    This is not intended to be user documentation. It is
    +      provided for developers writing customization layers for the
    +      stylesheets.
    +  
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Tests if a given node is a component-level element
    +
    +
    +This template returns '1' if the specified node is a component
    +(Chapter, Appendix, etc.), and '0' otherwise.
    +
    +
    +
    +
    +node
    +
    +The node which is to be tested.
    +
    +
    +
    +
    +
    +
    +This template returns '1' if the specified node is a component
    +(Chapter, Appendix, etc.), and '0' otherwise.
    +
    +
    +
    +
    +  
    +  
    +    1
    +    0
    +  
    +
    +
    +
    +
    +
    +Tests if a given node is a section-level element
    +
    +
    +This template returns '1' if the specified node is a section
    +(Section, Sect1, Sect2, etc.), and '0' otherwise.
    +
    +
    +
    +
    +node
    +
    +The node which is to be tested.
    +
    +
    +
    +
    +
    +
    +This template returns '1' if the specified node is a section
    +(Section, Sect1, Sect2, etc.), and '0' otherwise.
    +
    +
    +
    +
    +  
    +  
    +    1
    +    0
    +  
    +
    +
    +
    +
    +
    +Returns the hierarchical level of a section
    +
    +
    +This template calculates the hierarchical level of a section.
    +The element sect1 is at level 1, sect2 is
    +at level 2, etc.
    +
    +Recursive sections are calculated down to the fifth level.
    +
    +
    +
    +
    +node
    +
    +The section node for which the level should be calculated.
    +Defaults to the context node.
    +
    +
    +
    +
    +
    +
    +The section level, 1, 2, etc.
    +
    +
    +
    +
    +
    +  
    +  
    +    1
    +    2
    +    3
    +    4
    +    5
    +    
    +      
    +        6
    +        5
    +        4
    +        3
    +        2
    +        1
    +      
    +    
    +    
    +      
    +        
    +      
    +    
    +    
    +      
    +        2
    +        3
    +        4
    +        5
    +        5
    +        
    +          
    +            5
    +            4
    +            3
    +            2
    +          
    +        
    +        1
    +      
    +    
    +    1
    +  
    +
    +
    +
    +Returns the hierarchical level of a QandASet
    +
    +
    +This template calculates the hierarchical level of a QandASet.
    +
    +
    +
    +
    +The level, 1, 2, etc.
    +
    +
    +
    +
    +
    +  
    +
    +  
    +    1
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +  
    +
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      1
    +      1
    +      2
    +      3
    +      
    +        
    +          5
    +          4
    +          3
    +          2
    +          1
    +        
    +      
    +    
    +  
    +
    +  
    +
    +
    +
    +
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +    1
    +  
    +
    +
    +
    +  
    +    
    +  
    +  
    +
    +  
    +
    +
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +
    +
    +
    +  
    +    
    +      
    +        
    +          
    +            question
    +            answer
    +            qandadiv
    +            qandaset
    +          
    +        
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +          
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +      
    +        id-
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +          
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +        
    +      
    +    
    +
    +    
    +    
    +    
    +    
    +    
    +      
    +    
    +
    +    
    +      
    +        
    +        
    +          
    +        
    +        
    +          
    +            
    +          
    +        
    +        
    +          
    +            
    +          
    +        
    +        
    +          
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +  
    +  
    +
    +  
    +     
    +  
    +
    +  
    +
    +   [FAMILY Given]
    +
    +
    +
    +  
    +
    +  
    +
    +  
    +    , 
    +  
    +
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +    
    +  
    +
    +  
    +    
    +       
    +    
    +    
    +  
    +
    +  
    +    
    +       
    +    
    +    
    +  
    +
    +  
    +    
    +       
    +    
    +    
    +  
    +
    +  
    +    , 
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +
    +  
    +    
    +    
    +      
    +        
    +      
    +
    +      
    +        
    +          
    +            
    +            
    +          
    +        
    +        
    +          
    +            
    +            
    +          
    +        
    +        
    +          
    +            
    +            
    +          
    +        
    +      
    +
    +      
    +        
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +[
    +]
    +{
    +}
    + 
    + 
    +[
    +]
    +...
    +
    +
    + | 
    +4pi
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +
    +  
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +        
    +      
    +    
    +    
    +      
    +    
    +    
    +  
    +
    +
    +
    +
    +
    +Selects and processes an appropriate media object from a list
    +
    +
    +This template takes a list of media objects (usually the
    +children of a mediaobject or inlinemediaobject) and processes
    +the "right" object.
    +
    +This template relies on a template named 
    +"select.mediaobject.index" to determine which object
    +in the list is appropriate.
    +
    +If no acceptable object is located, nothing happens.
    +
    +
    +
    +
    +olist
    +
    +The node list of potential objects to examine.
    +
    +
    +
    +
    +
    +
    +Calls <xsl:apply-templates> on the selected object.
    +
    +
    +
    +
    +  
    +  
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +  
    +
    +
    +
    +
    +
    +Selects the position of the appropriate media object from a list
    +
    +
    +This template takes a list of media objects (usually the
    +children of a mediaobject or inlinemediaobject) and determines
    +the "right" object. It returns the position of that object
    +to be used by the calling template.
    +
    +If the parameter use.role.for.mediaobject
    +is nonzero, then it first checks for an object with
    +a role attribute of the appropriate value.  It takes the first
    +of those.  Otherwise, it takes the first acceptable object
    +through a recursive pass through the list.
    +
    +This template relies on a template named "is.acceptable.mediaobject"
    +to determine if a given object is an acceptable graphic. The semantics
    +of media objects is that the first acceptable graphic should be used.
    +
    +
    +If no acceptable object is located, no index is returned.
    +
    +
    +
    +
    +olist
    +
    +The node list of potential objects to examine.
    +
    +
    +count
    +
    +The position in the list currently being considered by the 
    +recursive process.
    +
    +
    +
    +
    +
    +
    +Returns the position in the original list of the selected object.
    +
    +
    +
    +
    +  
    +  1
    +
    +  
    +    
    +     
    +      
    +      
    +      
    +         
    +           
    +        
    +      
    +    
    +
    +    
    +      
    +      
    +         
    +           
    +        
    +      
    +    
    +    
    +    
    +      
    +      
    +         
    +           
    +        
    +      
    +    
    +
    +    
    +    
    +       
    +    
    +
    +    
    +      
    +      
    +        
    +    
    +        
    +          
    +            
    +            
    +              1 
    +            
    +            
    +              1 
    +            
    +            
    +            
    +              0 
    +            
    +            
    +            
    +              1 
    +            
    +            
    +            
    +              0
    +            
    +            
    +            
    +              0
    +            
    +            
    +            
    +              1
    +            
    +            
    +            
    +              0
    +            
    +            
    +            
    +               1
    +            
    +            
    +            
    +              
    +                
    +                
    +                  
    +                    
    +                  
    +                
    +                
    +                  
    +                    
    +                  
    +                
    +              
    +            
    +          
    +        
    +    
    +        
    +          
    +            
    +          
    +          
    +            
    +              
    +              
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +Returns '1' if the specified media object is recognized
    +
    +
    +This template examines a media object and returns '1' if the
    +object is recognized as a graphic.
    +
    +
    +
    +
    +object
    +
    +The media object to consider.
    +
    +
    +
    +
    +
    +
    +0 or 1
    +
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +  
    +
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    0
    +    1
    +    1
    +    1
    +    0
    +  
    +
    +
    +
    +  
    +
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +          .
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +        
    +          
    +          .
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +Warn users about references to non-unique IDs
    +
    +If passed an ID in linkend,
    +check.id.unique prints
    +a warning message to the user if either the ID does not exist or
    +the ID is not unique.
    +
    +
    +
    +
    +  
    +  
    +    
    +    
    +
    +    
    +      
    +        Error: no ID for constraint linkend: 
    +        
    +        .
    +      
    +      
    +    
    +
    +    
    +      
    +        Warning: multiple "IDs" for constraint linkend: 
    +        
    +        .
    +      
    +    
    +  
    +
    +
    +
    +Warn users about incorrectly typed references
    +
    +If passed an ID in linkend,
    +check.idref.targets makes sure that the element
    +pointed to by the link is one of the elements listed in
    +element-list and warns the user otherwise.
    +
    +
    +
    +
    +  
    +  
    +  
    +    
    +    
    +
    +    
    +      
    +        
    +          Error: linkend (
    +          
    +          ) points to "
    +          
    +          " not (one of): 
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +    
    +      
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +      
    +      
    +    
    +    
    +      
    +        Unexpected context in procedure.step.numeration: 
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +    
    +  
    +  
    +    
    +  
    +  
    +    
    +      
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +        1
    +      
    +    
    +    
    +      
    +      
    +      
    +        2
    +        
    +          
    +          
    +            
    +              
    +            
    +          
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +    
    +      
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +    loweralpha
    +    lowerroman
    +    upperalpha
    +    upperroman
    +    arabic
    +    arabic
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +            
    +              
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      1.
    +      a.
    +      i.
    +      A.
    +      I.
    +      
    +      
    +        
    +          Unexpected numeration: 
    +          
    +        
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +    circle
    +    square
    +    disc
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +            
    +              
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +Print a set of years with collapsed ranges
    +
    +
    +This template prints a list of year elements with consecutive
    +years printed as a range. In other words:
    +
    +1992
    +1993
    +1994]]>
    +
    +is printed 1992-1994, whereas:
    +
    +1992
    +1994]]>
    +
    +is printed 1992, 1994.
    +
    +This template assumes that all the year elements contain only
    +decimal year numbers, that the elements are sorted in increasing
    +numerical order, that there are no duplicates, and that all the years
    +are expressed in full century+year
    +(1999 not 99) notation.
    +
    +
    +
    +
    +years
    +
    +The initial set of year elements.
    +
    +
    +print.ranges
    +
    +If non-zero, multi-year ranges are collapsed. If zero, all years
    +are printed discretely.
    +
    +
    +single.year.ranges
    +
    +If non-zero, two consecutive years will be printed as a range,
    +otherwise, they will be printed discretely. In other words, a single
    +year range is 1991-1992 but discretely it's
    +1991, 1992.
    +
    +
    +
    +
    +
    +
    +This template returns the formatted list of years.
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +
    +  
    +    
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +          , 
    +          
    +            
    +            
    +            
    +          
    +        
    +      
    +    
    +    
    +      
    +      
    +        
    +          
    +        
    +        
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +          , 
    +          
    +        
    +        
    +          
    +          -
    +          
    +        
    +      
    +    
    +    
    +      
    +      
    +      
    +        , 
    +      
    +      
    +        
    +        
    +        
    +        
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +        
    +        
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +        
    +        
    +        
    +      
    +    
    +    
    +      
    +      
    +        
    +          
    +          , 
    +        
    +        
    +          
    +          , 
    +          
    +          , 
    +        
    +        
    +          
    +          -
    +          
    +          , 
    +        
    +      
    +      
    +        
    +        
    +        
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +Search in a table for the "best" match for the node
    +
    +
    +This template searches in a table for the value that most-closely
    +(in the typical best-match sense of XSLT) matches the current (element)
    +node location.
    +
    +
    +
    +
    +  
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +  
    +    
    +  
    +
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +    
    +      
    +      
    +        
    +      
    +    
    +    
    +      
    +        
    +          
    +            
    +          
    +          
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +    /
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +Converts a string to all uppercase letters
    +
    +
    +Given a string, this template does a language-aware conversion
    +of that string to all uppercase letters, based on the values of the
    +lowercase.alpha and
    +uppercase.alpha gentext keys for the current
    +locale. It affects only those characters found in the values of
    +lowercase.alpha and
    +uppercase.alpha. All other characters are left
    +unchanged.
    +
    +
    +
    +
    +string
    +
    +The string to convert to uppercase.
    +
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +  
    +    
    +      
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +Converts a string to all lowercase letters
    +
    +
    +Given a string, this template does a language-aware conversion
    +of that string to all lowercase letters, based on the values of the
    +uppercase.alpha and
    +lowercase.alpha gentext keys for the current
    +locale. It affects only those characters found in the values of
    +uppercase.alpha and
    +lowercase.alpha. All other characters are left
    +unchanged.
    +
    +
    +
    +
    +string
    +
    +The string to convert to lowercase.
    +
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +  
    +    
    +      
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +  Returns localized choice separator
    +  
    +    This template enables auto-generation of an appropriate
    +    localized "choice" separator (for example, "and" or "or") before
    +    the final item in an inline list (though it could also be useful
    +    for generating choice separators for non-inline lists).
    +    It currently works by evaluating a processing instruction
    +    (PI) of the form <?dbchoice choice="foo"?> :
    +    
    +      
    +        if the value of the choice
    +        pseudo-attribute is "and" or "or", returns a localized "and"
    +        or "or"
    +      
    +      
    +        otherwise returns the literal value of the
    +        choice pseudo-attribute
    +      
    +    
    +    The latter is provided only as a temporary workaround because the
    +    locale files do not currently have translations for the word
    +    or. So if you want to generate a a
    +    logical "or" separator in French (for example), you currently need
    +    to do this:
    +    <?dbchoice choice="ou"?>
    +    
    +    
    +      The dbchoice processing instruction is
    +      an unfortunate hack; support for it may disappear in the future
    +      (particularly if and when a more appropriate means for marking
    +      up "choice" lists becomes available in DocBook).
    +    
    +  
    +
    +
    +  
    +    
    +  
    +  
    +    
    +    
    +    
    +      
    +        
    +      
    +    
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  Evaluates an info profile
    +  
    +    This template evaluates an "info profile" matching the XPath
    +    expression given by the profile
    +    parameter. It relies on the XSLT evaluate()
    +    extension function.
    +
    +    The value of the profile parameter
    +    can include the literal string $info. If found
    +    in the value of the profile parameter, the
    +    literal string $info string is replaced with
    +    the value of the info parameter, which
    +    should be a set of *info nodes; the
    +    expression is then evaluated using the XSLT
    +    evaluate() extension function.
    +  
    +  
    +    
    +       
    +        profile
    +        
    +          A string representing an XPath expression 
    +        
    +      
    +       
    +        info
    +        
    +          A set of *info nodes
    +        
    +      
    +    
    +  
    +
    +  
    +    Returns a node (the result of evaluating the
    +    profile parameter)
    +  
    +
    +  
    +    
    +    
    +    
    +      
    +      
    +        
    +      
    +      
    +      
    +        
    +      
    +      
    +        
    +Error: The "info profiling" mechanism currently requires an XSLT
    +engine that supports the evaluate() XSLT extension function. Your XSLT
    +engine does not support it.
    +
    +      
    +    
    +  
    +
    +
    +
    +  Returns mimetype for media format
    +  
    +    This takes as input a 'format' param and returns
    +    a mimetype string.  It uses an xsl:choose after first
    +    converting the input to all uppercase.
    +  
    +
    +
    +  
    +  
    +  
    +    
    +    
    +    application/postscript
    +    application/pdf
    +    image/png
    +    image/svg+xml
    +    image/jpeg
    +    image/jpeg
    +    image/gif
    +    image/gif
    +    image/gif
    +    audio/acc
    +    audio/mpeg
    +    audio/mpeg
    +    audio/mpeg
    +    audio/mpeg
    +    audio/mp4
    +    audio/mpeg
    +    audio/wav
    +    video/mp4
    +    video/mp4
    +    video/ogg
    +    video/ogg
    +    video/webm
    +    
    +         
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/cs.xml b/bash/templates/build-aux/docbook-xsl/common/cs.xml
    new file mode 100644
    index 0000000..d2bf889
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/cs.xml
    @@ -0,0 +1,759 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symboly
    +A
    +a
    +Á
    +á
    +B
    +b
    +C
    +c
    +Č
    +č
    +D
    +d
    +Ď
    +ď
    +E
    +e
    +É
    +é
    +Ě
    +ě
    +Ë
    +ë
    +F
    +f
    +G
    +g
    +H
    +h
    +Ch
    +ch
    +cH
    +CH
    +I
    +i
    +Í
    +í
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +Ň
    +ň
    +O
    +o
    +Ó
    +ó
    +Ö
    +ö
    +P
    +p
    +Q
    +q
    +R
    +r
    +Ř
    +ř
    +S
    +s
    +Š
    +š
    +T
    +t
    +Ť
    +ť
    +U
    +u
    +Ú
    +ú
    +Ů
    +ů
    +Ü
    +ü
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Ý
    +ý
    +Z
    +z
    +Ž
    +ž
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/cy.xml b/bash/templates/build-aux/docbook-xsl/common/cy.xml
    new file mode 100644
    index 0000000..526f1f4
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/cy.xml
    @@ -0,0 +1,1304 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +Ch
    +ch
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Dd
    +dd
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +Ff
    +ff
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +Ng
    +ng
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +Ll
    +ll
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Ph
    +ph
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +Rh
    +rh
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Th
    +th
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/da.xml b/bash/templates/build-aux/docbook-xsl/common/da.xml
    new file mode 100644
    index 0000000..09c4d16
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/da.xml
    @@ -0,0 +1,723 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +Æ
    +æ
    +Ø
    +ø
    +Å
    +å
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/de.xml b/bash/templates/build-aux/docbook-xsl/common/de.xml
    new file mode 100644
    index 0000000..0542cf0
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/de.xml
    @@ -0,0 +1,725 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbole
    +A
    +a
    +Ä
    +ä
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +Ö
    +ö
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +Ü
    +ü
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/el.xml b/bash/templates/build-aux/docbook-xsl/common/el.xml
    new file mode 100644
    index 0000000..b31f6bb
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/el.xml
    @@ -0,0 +1,788 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Σύμβολα
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +Α
    +α
    +Ά
    +ά
    +Β
    +β
    +Γ
    +γ
    +Δ
    +δ
    +Ε
    +ε
    +Έ
    +έ
    +Ζ
    +ζ
    +Η
    +η
    +Ή
    +ή
    +Θ
    +θ
    +Ι
    +ι
    +Ί
    +ί
    +Ϊ
    +ϊ
    +ΐ
    +Κ
    +κ
    +Λ
    +λ
    +Μ
    +μ
    +Ν
    +ν
    +Ξ
    +ξ
    +Ο
    +ο
    +Ό
    +ό
    +Π
    +π
    +Ρ
    +ρ
    +Σ
    +σ
    +ς
    +Τ
    +τ
    +Υ
    +υ
    +Ύ
    +ύ
    +Ϋ
    +ϋ
    +ΰ
    +Φ
    +φ
    +Χ
    +χ
    +Ψ
    +ψ
    +Ω
    +ω
    +Ώ
    +ώ
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/en.xml b/bash/templates/build-aux/docbook-xsl/common/en.xml
    new file mode 100644
    index 0000000..22b80d7
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/en.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/entities.ent b/bash/templates/build-aux/docbook-xsl/common/entities.ent
    new file mode 100644
    index 0000000..93f2080
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/entities.ent
    @@ -0,0 +1,65 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    normalize.sort.input
    +  
    +
    +
    +
    +  
    +    normalize.sort.output
    +  
    +
    +'>
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/eo.xml b/bash/templates/build-aux/docbook-xsl/common/eo.xml
    new file mode 100644
    index 0000000..ab8cda1
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/eo.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/es.xml b/bash/templates/build-aux/docbook-xsl/common/es.xml
    new file mode 100644
    index 0000000..da47ad1
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/es.xml
    @@ -0,0 +1,735 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Símbolos
    +A
    +a
    +á
    +Á
    +B
    +b
    +C
    +c
    +CH
    +ch
    +D
    +d
    +E
    +e
    +É
    +é
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +Í
    +í
    +J
    +j
    +K
    +k
    +L
    +l
    +LL
    +ll
    +M
    +m
    +N
    +n
    +Ñ
    +ñ
    +O
    +o
    +Ó
    +ó
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +Ú
    +ú
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/et.xml b/bash/templates/build-aux/docbook-xsl/common/et.xml
    new file mode 100644
    index 0000000..dd38ca0
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/et.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/eu.xml b/bash/templates/build-aux/docbook-xsl/common/eu.xml
    new file mode 100644
    index 0000000..a9afa83
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/eu.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/fa.xml b/bash/templates/build-aux/docbook-xsl/common/fa.xml
    new file mode 100644
    index 0000000..6e5882b
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/fa.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +سمبل‌های راهنم
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/fi.xml b/bash/templates/build-aux/docbook-xsl/common/fi.xml
    new file mode 100644
    index 0000000..b0f208a
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/fi.xml
    @@ -0,0 +1,729 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbole
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +Š
    +š
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +Ž
    +ž
    +Å
    +å
    +Ä
    +ä
    +Ö
    +ö
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/fr.xml b/bash/templates/build-aux/docbook-xsl/common/fr.xml
    new file mode 100644
    index 0000000..bb8da6d
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/fr.xml
    @@ -0,0 +1,749 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symboles
    +A
    +a
    +à
    +À
    +â
    +Â
    +Æ
    +æ
    +B
    +b
    +C
    +c
    +ç
    +D
    +d
    +E
    +e
    +ê
    +Ê
    +é
    +É
    +è
    +È
    +ë
    +Ë
    +
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +Î
    +î
    +Ï
    +ï
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +Ö
    +ö
    +Œ
    +œ
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +Ù
    +ù
    +Û
    +û
    +Ü
    +ü
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ga.xml b/bash/templates/build-aux/docbook-xsl/common/ga.xml
    new file mode 100644
    index 0000000..6e72331
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ga.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Siombailí
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/gentext.xsl b/bash/templates/build-aux/docbook-xsl/common/gentext.xsl
    new file mode 100644
    index 0000000..38dc46e
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/gentext.xsl
    @@ -0,0 +1,853 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +  
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +      
    +        
    +        
    +          
    +          .formal
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +  0
    +
    +
    +
    +  
    +
    +
    +
    +
    +  
    +  
    +  
    +
    +  
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +         
    +      
    +      
    +         
    +      
    +      
    +         
    +      
    +      
    +         
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +    
    +    
    +    
    +    
    +  
    +
    +
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +  
    +
    +  
    +
    +  
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +    
    +  
    +
    +  
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +          
    +          
    +        
    +      
    +      
    +        
    +      
    +      
    +        
    +          
    +          
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      object.xref.markup: empty xref template
    +       for linkend="
    +      
    +      " and @xrefstyle="
    +      
    +      "
    +    
    +  
    +
    +  
    +    
    +    
    +    
    +    
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +    
    +      
    +        Xref is only supported to listitems in an
    +         orderedlist: 
    +        
    +      
    +      ???
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +      %n
    +      
    +        
    +          
    +          
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +    
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +
    +  
    +    
    +      
    +      
    +      
    +        
    +          
    +            
    +            
    +            
    +              
    +                
    +                  
    +                
    +                
    +                  
    +                    
    +                    
    +                  
    +                
    +                
    +                  
    +                    
    +                    
    +                  
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +            
    +            
    +            
    +              
    +                
    +                  
    +                
    +                
    +                  
    +                    
    +                  
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +            
    +            
    +            
    +              
    +                
    +                  
    +                
    +                
    +                  
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +            
    +            
    +            
    +              
    +                
    +                  
    +                
    +                
    +                  
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +          
    +            
    +            
    +            
    +              
    +                
    +                  
    +                
    +                
    +                  
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +            
    +            
    +            
    +              
    +                
    +                  
    +                    
    +                      1
    +                    
    +                  
    +                  
    +                    
    +                      
    +                        
    +                      
    +                    
    +                    
    +                      
    +                        
    +                      
    +                    
    +                  
    +                
    +                
    +                  Attempt to use %d in gentext with no referrer!
    +                
    +              
    +            
    +          
    +        
    +        
    +          %
    +        
    +        
    +          %
    +        
    +      
    +      
    +      
    +      
    +        
    +        
    +        
    +        
    +        
    +        
    +        
    +        
    +        
    +        
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +    
    +  
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +  
    +
    +  
    +    
    +      
    +         labelnumber
    +      
    +      
    +         labelname
    +      
    +      
    +         label
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +         quotedtitle
    +      
    +      
    +         title
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +      
    +         nopage
    +      
    +      
    +         pagenumber
    +      
    +      
    +         pageabbrev
    +      
    +      
    +         Page
    +      
    +      
    +         page
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +         nodocname
    +      
    +      
    +         docnamelong
    +      
    +      
    +         docname
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +            
    +              
    +                
    +              
    +              
    +                
    +              
    +            
    +          
    +        
    +      
    +      
    +        %n
    +      
    +      
    +        
    +          
    +          
    +            
    +              
    +                
    +              
    +              
    +                
    +              
    +            
    +          
    +          
    +          
    +          
    +        
    +      
    +    
    +
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        %t
    +      
    +      
    +        
    +          
    +        
    +        %t
    +        
    +          
    +        
    +      
    +    
    +
    +    
    +      
    +        
    +      
    +    
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +          
    +        
    +      
    +      
    +        
    +          
    +          
    +        
    +      
    +      
    +        
    +          
    +          
    +        
    +      
    +      
    +        %p
    +      
    +    
    +
    +  
    +
    +  
    +  
    +    
    +    
    +      
    +        
    +          
    +          
    +        
    +      
    +      
    +        
    +          
    +          
    +        
    +      
    +    
    +
    +  
    +  
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/gl.xml b/bash/templates/build-aux/docbook-xsl/common/gl.xml
    new file mode 100644
    index 0000000..e18e2be
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/gl.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/gu.xml b/bash/templates/build-aux/docbook-xsl/common/gu.xml
    new file mode 100644
    index 0000000..5ab79ed
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/gu.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +સંકેતો
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/he.xml b/bash/templates/build-aux/docbook-xsl/common/he.xml
    new file mode 100644
    index 0000000..35e51ea
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/he.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/hi.xml b/bash/templates/build-aux/docbook-xsl/common/hi.xml
    new file mode 100644
    index 0000000..47be542
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/hi.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +संकेत
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/hr.xml b/bash/templates/build-aux/docbook-xsl/common/hr.xml
    new file mode 100644
    index 0000000..06efe55
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/hr.xml
    @@ -0,0 +1,721 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Oznake
    +A
    +a
    +B
    +b
    +C
    +c
    +Ć
    +ć
    +Č
    +č
    +D
    +d
    +Đ
    +đ
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +R
    +r
    +S
    +s
    +Š
    +š
    +T
    +t
    +U
    +u
    +V
    +v
    +Z
    +z
    +Ž
    +ž
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/hu.xml b/bash/templates/build-aux/docbook-xsl/common/hu.xml
    new file mode 100644
    index 0000000..8dcd565
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/hu.xml
    @@ -0,0 +1,737 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Jelzések
    +A
    +a
    +Á
    +á
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +É
    +é
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +Í
    +í
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +Ó
    +ó
    +Ö
    +ö
    +Ő
    +ő
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +Ú
    +ú
    +Ü
    +ü
    +Ű
    +ű
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/id.xml b/bash/templates/build-aux/docbook-xsl/common/id.xml
    new file mode 100644
    index 0000000..2d7daac
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/id.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Simbol
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/insertfile.xsl b/bash/templates/build-aux/docbook-xsl/common/insertfile.xsl
    new file mode 100644
    index 0000000..94bd049
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/insertfile.xsl
    @@ -0,0 +1,111 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    
    +  
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +  
    +    
    +  
    +  
    +
    +
    +
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/is.xml b/bash/templates/build-aux/docbook-xsl/common/is.xml
    new file mode 100644
    index 0000000..09d86d4
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/is.xml
    @@ -0,0 +1,731 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +tákn
    +A
    +a
    +Á
    +á
    +B
    +b
    +D
    +d
    +Đ
    +ð
    +E
    +e
    +É
    +é
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +Í
    +í
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +Ó
    +ó
    +P
    +p
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +Ú
    +ú
    +V
    +v
    +X
    +x
    +Y
    +y
    +Ý
    +ý
    +Þ
    +þ
    +Æ
    +æ
    +Ö
    +ö
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/it.xml b/bash/templates/build-aux/docbook-xsl/common/it.xml
    new file mode 100644
    index 0000000..714b4db
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/it.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Simboli
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ja.xml b/bash/templates/build-aux/docbook-xsl/common/ja.xml
    new file mode 100644
    index 0000000..9f93c47
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ja.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +シンボル
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ka.xml b/bash/templates/build-aux/docbook-xsl/common/ka.xml
    new file mode 100644
    index 0000000..3b43e46
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ka.xml
    @@ -0,0 +1,759 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +სიმბოლოები
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/kn.xml b/bash/templates/build-aux/docbook-xsl/common/kn.xml
    new file mode 100644
    index 0000000..e088681
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/kn.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ಸಂಕೇತಗಳು
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ko.xml b/bash/templates/build-aux/docbook-xsl/common/ko.xml
    new file mode 100644
    index 0000000..99f3b03
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ko.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ky.xml b/bash/templates/build-aux/docbook-xsl/common/ky.xml
    new file mode 100644
    index 0000000..860210f
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ky.xml
    @@ -0,0 +1,791 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Символдор
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +А
    +а
    +Б
    +б
    +В
    +в
    +Г
    +г
    +Д
    +д
    +Е
    +е
    +Ё
    +ё
    +Ж
    +ж
    +З
    +з
    +И
    +и
    +Й
    +й
    +К
    +к
    +Л
    +л
    +М
    +м
    +Н
    +н
    +Ң
    +ң
    +О
    +о
    +Ө
    +ө
    +П
    +п
    +Р
    +р
    +С
    +с
    +Т
    +т
    +У
    +у
    +Ү
    +ү
    +Ф
    +ф
    +Х
    +х
    +Ц
    +ц
    +Ч
    +ч
    +Ш
    +ш
    +Щ
    +щ
    +Ъ
    +ъ
    +Ы
    +ы
    +Ь
    +ь
    +Э
    +э
    +Ю
    +ю
    +Я
    +я
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/l10n.dtd b/bash/templates/build-aux/docbook-xsl/common/l10n.dtd
    new file mode 100644
    index 0000000..9bf2f66
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/l10n.dtd
    @@ -0,0 +1,64 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    + 
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/l10n.xml b/bash/templates/build-aux/docbook-xsl/common/l10n.xml
    new file mode 100644
    index 0000000..98dae0c
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/l10n.xml
    @@ -0,0 +1,78 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/l10n.xsl b/bash/templates/build-aux/docbook-xsl/common/l10n.xsl
    new file mode 100644
    index 0000000..63a1963
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/l10n.xsl
    @@ -0,0 +1,596 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +
    +      
    +        
    +        
    +        
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +
    +      
    +        
    +        
    +        
    +
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +
    +     
    +    
    +      
    +        
    +      
    +      
    +      
    +        
    +      
    +      
    +      
    +        
    +          No localization exists for "
    +          
    +          " or "
    +          
    +          ". Using default "
    +          
    +          ".
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +
    +      
    +        
    +        
    +        
    +
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +  
    +
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +
    +      
    +        
    +        
    +        
    +
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +  
    +
    +
    +
    +  
    +  
    +    
    +  
    +
    +    
    +    
    +      
    +
    +      
    +
    +      
    +	
    +	  
    +	
    +	
    +	  
    +	
    +	
    +	  
    +	    No "
    +	    
    +	    " localization of "
    +	    
    +	    " exists
    +	    
    +	      
    +		 .
    +	      
    +	      
    +		 ; using "en".
    +	      
    +	    
    +	  
    +	  
    +	    
    +	    
    +	      
    +	    
    +	  
    +	
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +  
    +
    +  
    +    
    +    
    +  
    +
    +
    +
    +   
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  bullet
    +  
    +    
    +  
    +
    +    
    +    
    +      
    +
    +      
    +
    +      
    +	
    +	  
    +	
    +	
    +	  
    +	
    +	
    +	  
    +	    No "
    +	    
    +	    " localization of dingbat 
    +	    
    +	     exists; using "en".
    +	  
    +
    +	    
    +	      
    +	      
    +	    
    +	  
    +	
    +      
    +    
    +  
    +
    +
    +
    +  
    +    startquote
    +  
    +
    +
    +
    +  
    +    endquote
    +  
    +
    +
    +
    +  
    +    nestedstartquote
    +  
    +
    +
    +
    +  
    +    nestedendquote
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +    
    +  
    +  
    +
    +  
    +    
    +        
    +	
    +
    +	  
    +
    +	  
    +	    
    +	      No "
    +	      
    +	      " localization exists.
    +	    
    +	  
    +
    +	  
    +
    +	  
    +	    
    +	      No context named "
    +	      
    +	      " exists in the "
    +	      
    +	      " localization.
    +	    
    +	  
    +
    +	  
    +	    
    +
    +	    
    +	      
    +		
    +	      
    +	      
    +		
    +		  
    +		    
    +		      
    +		      
    +		      
    +		      
    +		      
    +		      
    +		      
    +		      
    +		    
    +		  
    +		  
    +		    
    +		  
    +		  
    +		    
    +		      No template for "
    +		      
    +		      " (or any of its leaves) exists in the context named "
    +		      
    +		      " in the "
    +		      
    +		      " localization.
    +		    
    +		  
    +		
    +	      
    +	    
    +	  
    +	
    +      
    +    
    +    
    +        
    +	
    +
    +	  
    +
    +	  
    +
    +	  
    +	    
    +	      No "
    +	      
    +	      " localization exists.
    +	    
    +	  
    +
    +	  
    +
    +	  
    +
    +	  
    +	    
    +	      No context named "
    +	      
    +	      " exists in the "
    +	      
    +	      " localization.
    +	    
    +	  
    +
    +	  
    +
    +	  
    +	    
    +	      
    +	    
    +	    
    +	      
    +		
    +
    +		
    +		  
    +		    
    +		  
    +		  
    +		    
    +		      
    +			
    +			  
    +			  
    +			  
    +			  
    +			  
    +			  
    +			  
    +			  
    +			
    +		      
    +		      
    +			
    +		      
    +		      
    +			
    +			  No template for "
    +			  
    +			  " (or any of its leaves) exists in the context named "
    +			  
    +			  " in the "
    +			  
    +			  " localization.
    +			
    +		      
    +		    
    +		  
    +		
    +	      
    +	    
    +	  
    +	
    +      
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +      
    +      
    +      
    +      
    +      
    +      
    +      
    +    
    +  
    +  
    +  
    +    1
    +    0
    +  
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/la.xml b/bash/templates/build-aux/docbook-xsl/common/la.xml
    new file mode 100644
    index 0000000..a8ec07e
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/la.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/labels.xsl b/bash/templates/build-aux/docbook-xsl/common/labels.xsl
    new file mode 100644
    index 0000000..2f13227
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/labels.xsl
    @@ -0,0 +1,931 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Provides access to element labels
    +
    +Processing an element in the
    +label.markup mode produces the
    +element label.
    +Trailing punctuation is not added to the label.
    +
    +
    +
    +
    +
    +
    +  
    +
    +  .
    +
    +
    +
    +  
    +  
    +    
    +      Request for label of unexpected element: 
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +          
    +            
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +          
    +            
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +          
    +            
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +        
    +          
    +          
    +            
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +      
    +        
    +      
    +    
    +    
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +          
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +  
    +    
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          label.markup: this can't happen!
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +  
    +  
    +    
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +        
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +        
    +      
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +            
    +          
    +          
    +            
    +            
    +              
    +            
    +          
    +        
    +        
    +          
    +          
    +            
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +
    +  
    +    
    +      
    +    
    +
    +    
    +      
    +        
    +      
    +    
    +
    +    
    +      
    +        
    +      
    +    
    +
    +    
    +      
    +        
    +      
    +       
    +      
    +      
    +    
    +
    +    
    +      
    +        
    +      
    +    
    +
    +    
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +            
    +            
    +              
    +            
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +            
    +            
    +              
    +            
    +          
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +          
    +            
    +            
    +              
    +            
    +          
    +          
    +        
    +        
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      1
    +      a
    +      i
    +      A
    +      I
    +      
    +      
    +        
    +          Unexpected numeration: 
    +          
    +        
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +
    +
    +
    +
    +
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +    0
    +          
    +      
    +    
    +    0
    +  
    +
    +
    +
    +Returns true if $section should be labelled
    +
    +Returns true if the specified section should be labelled.
    +By default, this template returns zero unless 
    +the section level is less than or equal to the value of the
    +$section.autolabel.max.depth parameter, in
    +which case it returns
    +$section.autolabel.
    +Custom stylesheets may override it to get more selective behavior.
    +
    +
    +
    +
    +
    +
    +  
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +    1
    +    
    +
    +  
    +
    +  
    +  
    +
    +  
    +    
    +      
    +        1
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +              
    +        
    +          
    +        
    +        
    +          
    +            Unexpected .autolabel value: 
    +            ; using default.
    +          
    +          
    +        
    +      
    +    
    +  
    +
    +
    +
    +Returns format for autolabel parameters
    +
    +Returns format passed as parameter if non zero. Supported
    +  format are 'arabic' or '1', 'loweralpha' or 'a', 'lowerroman' or 'i', 
    +  'upperlapha' or 'A', 'upperroman' or 'I', 'arabicindic' or '١'.
    +  If its not one of these then 
    +  returns the default format.
    +
    +
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/lt.xml b/bash/templates/build-aux/docbook-xsl/common/lt.xml
    new file mode 100644
    index 0000000..3024f8c
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/lt.xml
    @@ -0,0 +1,737 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Simboliai
    +A
    +a
    +Ą
    +ą
    +B
    +b
    +C
    +c
    +Č
    +č
    +D
    +d
    +E
    +e
    +Ę
    +ę
    +Ė
    +ė
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +Į
    +į
    +Y
    +y
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +R
    +r
    +S
    +s
    +Š
    +š
    +T
    +t
    +U
    +u
    +Ų
    +ų
    +Ū
    +ū
    +V
    +v
    +Z
    +z
    +Ž
    +ž
    +Q
    +q
    +W
    +w
    +X
    +x
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/lv.xml b/bash/templates/build-aux/docbook-xsl/common/lv.xml
    new file mode 100644
    index 0000000..4dcc04f
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/lv.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ml.xml b/bash/templates/build-aux/docbook-xsl/common/ml.xml
    new file mode 100644
    index 0000000..21aa7c3
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/ml.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ചിഹ്നങ്ങള്‍
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/mn.xml b/bash/templates/build-aux/docbook-xsl/common/mn.xml
    new file mode 100644
    index 0000000..a5feeb1
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/mn.xml
    @@ -0,0 +1,789 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Тэмдэгтүүд
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +А
    +а
    +Б
    +б
    +В
    +в
    +Г
    +г
    +Д
    +д
    +Е
    +е
    +Ё
    +ё
    +Ж
    +ж
    +З
    +з
    +И
    +и
    +Й
    +й
    +К
    +к
    +Л
    +л
    +М
    +м
    +Н
    +н
    +О
    +о
    +Ө
    +ө
    +П
    +п
    +Р
    +р
    +С
    +с
    +Т
    +т
    +У
    +у
    +Ү
    +ү
    +Ф
    +ф
    +Х
    +х
    +Ц
    +ц
    +Ч
    +ч
    +Ш
    +ш
    +Щ
    +щ
    +Ъ
    +ъ
    +Ы
    +ы
    +Ь
    +ь
    +Э
    +э
    +Ю
    +ю
    +Я
    +я
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/mr.xml b/bash/templates/build-aux/docbook-xsl/common/mr.xml
    new file mode 100644
    index 0000000..5b99f38
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/mr.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +प्रतीक
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/nb.xml b/bash/templates/build-aux/docbook-xsl/common/nb.xml
    new file mode 100644
    index 0000000..3595210
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/nb.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/nds.xml b/bash/templates/build-aux/docbook-xsl/common/nds.xml
    new file mode 100644
    index 0000000..adea4df
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/nds.xml
    @@ -0,0 +1,725 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbole
    +A
    +a
    +Ä
    +ä
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +Ö
    +ö
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +Ü
    +ü
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/nl.xml b/bash/templates/build-aux/docbook-xsl/common/nl.xml
    new file mode 100644
    index 0000000..175185c
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/nl.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbolen
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/nn.xml b/bash/templates/build-aux/docbook-xsl/common/nn.xml
    new file mode 100644
    index 0000000..1509554
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/nn.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbols
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/olink.xsl b/bash/templates/build-aux/docbook-xsl/common/olink.xsl
    new file mode 100644
    index 0000000..786f842
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/olink.xsl
    @@ -0,0 +1,1282 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +  
    +
    +  
    +    Olink error: 
    +    
    +  
    +
    +
    +
    +
    +  
    +
    +  
    +    Olink warning: 
    +    
    +  
    +
    +
    +
    +
    +  
    +  
    +
    +  
    +    Error: unresolved olink: targetdoc/targetptr = '
    +    
    +    /
    +    
    +    '.
    +  
    +
    +
    +
    +
    +  
    +  
    +  
    +
    +  
    +  
    +
    +  
    +  
    +    
    +      
    +        
    +          
    +        
    +        
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +
    +  
    +    
    +    
    +      
    +        
    +          olinks not processed: must specify a 
    +          $target.database.document parameter
    
    +          when using olinks with targetdoc 
    +          and targetptr attributes.
    +        
    +      
    +    
    +    
    +      
    +        
    +          the targetset element and children in '
    +          
    +          ' should not be in any namespace.
    +        
    +      
    +    
    +    
    +    
    +      
    +        
    +          could not open target database '
    +          
    +          '.
    +        
    +      
    +    
    +    
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +    
    +  
    +    
    +    
    +      
    +      
    +      
    +      
    +      
    +      
    +    
    +  
    +  
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    Olink debug: cases for targetdoc='
    +      
    +      ' and targetptr='
    +      
    +      ' in language '
    +      
    +      '.
    +    
    +  
    +
    +  
    +  
    +    
    +    
    +      
    +        
    +        
    +          
    +            
    +            
    +              Olink debug: CaseA matched.
    +            
    +          
    +          
    +            Olink debug: CaseA NOT matched
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +        
    +        
    +          
    +            
    +            
    +              Olink debug: CaseB matched.
    +            
    +          
    +          
    +            Olink debug: CaseB NOT matched
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +      
    +        
    +        
    +          
    +            
    +            
    +              Olink debug: CaseC matched.
    +            
    +          
    +          
    +            Olink debug: CaseC NOT matched.
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +    
    +      
    +        
    +        
    +          
    +            
    +            
    +              Olink debug: CaseD matched.
    +            
    +          
    +          
    +            Olink debug: CaseD NOT matched
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +
    +      
    +      
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +
    +      
    +        
    +        
    +          
    +            
    +            
    +              Olink debug: CaseE matched.
    +            
    +          
    +          
    +            Olink debug: CaseE NOT matched.
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +      
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +
    +      
    +        
    +        
    +          
    +            
    +            
    +              Olink debug: CaseF matched.
    +            
    +          
    +          
    +            Olink debug: CaseF NOT matched.
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +        
    +        
    +          
    +            Olink debug: CaseB key is the final selection: 
    +            
    +          
    +        
    +      
    +      
    +        
    +        
    +          
    +            Olink debug: CaseA key is the final selection: 
    +            
    +          
    +        
    +      
    +      
    +        
    +        
    +          
    +            Olink debug: CaseC key is the final selection: 
    +            
    +          
    +        
    +      
    +      
    +        
    +        
    +          
    +            Olink debug: CaseD key is the final selection: 
    +            
    +          
    +        
    +      
    +      
    +        
    +        
    +          
    +            Olink debug: CaseF key is the final selection: 
    +            
    +          
    +        
    +      
    +      
    +        
    +        
    +          
    +            Olink debug: CaseE key is the final selection: 
    +            
    +          
    +        
    +      
    +      
    +        
    +          
    +            Olink debug: No case matched for lang '
    +            
    +            '.
    +          
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +        
    +        
    +        
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +  
    +  
    +
    +  
    +  
    +  
    +  
    +    
    +      
    +    
    +    
    +      
    +        
    +        
    +      
    +    
    +    
    +    
    +  
    +
    +
    +
    +  
    +
    +  
    +  
    +
    +
    +
    +
    +  
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +    
    +  
    +    
    +      
    +    
    +  
    +    
    +    
    +      
    +        1
    +        0
    +      
    +    
    +  
    +  
    +    
    +    
    +      
    +        
    +        
    +          
    +            
    +            
    +              
    +              
    +                
    +                  
    +                
    +              
    +              
    +                
    +                  
    +                    
    +                      
    +                      
    +                    
    +                  
    +                
    +                
    +                  
    +                    
    +                      cannot compute relative 
    +                      sitemap path because $current.docid '
    +                      
    +                      ' not found in target database.
    +                    
    +                  
    +                
    +              
    +            
    +            
    +              
    +                
    +                  cannot compute relative 
    +                  sitemap path without $current.docid parameter
    +                
    +              
    +            
    +           
    +          
    +          
    +            
    +              
    +            
    +          
    +          
    +            
    +          
    +        
    +        
    +        
    +          
    +          
    +            
    +              
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +    
    +  
    +    
    +    
    +      
    +        
    +          
    +            1
    +            1
    +            1
    +            0
    +          
    +        
    +        1
    +      
    +    
    +
    +    
    +    
    +      
    +        
    +        
    +          
    +        
    +      
    +      
    +      
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +      
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +    
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +        
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +    
    +      
    +    
    +    
    +      
    +      
    +        
    +          
    +            
    +          
    +        
    +      
    +
    +      
    +        
    +          
    +        
    +      
    +
    +      
    +        
    +          
    +        
    +      
    +
    +      
    +        
    +          
    +            
    +          
    +        
    +        
    +          
    +            
    +          
    +          
    +            
    +          
    +        
    +      
    +
    +      
    +        
    +      
    +
    +      
    +         
    +          
    +        
    +        
    +          
    +            
    +              xrefstyle is '
    +              
    +              '.
    +            
    +          
    +          
    +            
    +              
    +                
    +                  
    +                  
    +                  
    +                  
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +                
    +
    +                
    +                  
    +                    
    +                    
    +                    
    +                  
    +                
    +
    +                
    +                  
    +                    
    +                    
    +                    
    +                    
    +                  
    +                
    +
    +                
    +                  
    +                    
    +                    
    +                    
    +                  
    +                
    +
    +                
    +                  
    +                    
    +                    
    +                    
    +                    
    +                  
    +                
    +
    +                
    +                  
    +                    
    +                    
    +                    
    +                  
    +                
    +
    +                
    +                  
    +                    
    +                    
    +                    
    +                    
    +                  
    +                
    +
    +                
    +                  
    +                    
    +                  
    +                  
    +                    
    +                  
    +                  
    +                    
    +                  
    +                  
    +                    
    +                    
    +                      
    +                        
    +                          no gentext template
    +                           exists for xrefstyle '
    +                          
    +                          ' for element '
    +                          
    +                          ' in language '
    +                          
    +                          ' in context 'xref-number-and-title
    +                          '. Using template without @style.
    +                        
    +                      
    +                    
    +                  
    +                  
    +                    
    +                    
    +                      
    +                        
    +                          no gentext template
    +                           exists for xrefstyle '
    +                          
    +                          ' for element '
    +                          
    +                          ' in language '
    +                          
    +                          ' in context 'xref-number
    +                          '. Using template without @style.
    +                        
    +                      
    +                    
    +                  
    +                  
    +                    
    +                    
    +                      
    +                        
    +                          no gentext template
    +                           exists for xrefstyle '
    +                          
    +                          ' for element '
    +                          
    +                          ' in language '
    +                          
    +                          ' in context 'xref
    +                          '. Using template without @style.
    +                        
    +                      
    +                    
    +                  
    +                  
    +                    
    +                      
    +                        no gentext template
    +                         exists for xrefstyle '
    +                        
    +                        ' for element '
    +                        
    +                        ' in language '
    +                        
    +                        '. Trying '%t'.
    +                      
    +                    
    +                    
    +                  
    +                
    +              
    +            
    +          
    +
    +          
    +            
    +              Olink debug: xrefstyle template is '
    +              
    +              '.
    +            
    +          
    +
    +          
    +            
    +            
    +              
    +                
    +                  
    +                
    +              
    +            
    +            
    +              
    +                
    +              
    +            
    +            
    +              
    +                
    +              
    +            
    +            
    +              
    +                
    +                  
    +                
    +              
    +            
    +          
    +        
    +
    +        
    +
    +          
    +          
    +            
    +              
    +            
    +          
    +
    +          
    +            
    +              1
    +              0
    +            
    +          
    +        
    +          
    +            
    +              
    +              
    +            
    +          
    +        
    +          
    +            
    +              
    +              
    +            
    +          
    +        
    +          
    +            
    +              
    +                 
    +              
    +              
    +                 
    +              
    +              
    +                 
    +              
    +            
    +          
    +        
    +          
    +            
    +              
    +              
    +              
    +            
    +          
    +
    +          
    +            
    +            
    +              
    +                
    +                  
    +                
    +              
    +            
    +            
    +              
    +                
    +                  
    +                
    +              
    +            
    +          
    +        
    +        
    +          
    +        
    +        
    +          
    +            
    +              no generated text for targetdoc/targetptr/lang = '
    +              
    +              '.
    +            
    +          
    +          ????
    +        
    +      
    +    
    +    
    +      
    +        
    +          
    +            no generated text for targetdoc/targetptr/lang = '
    +            
    +            '.
    +          
    +        
    +      
    +      ????
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +  
    +
    +
    +  
    +  
    +    
    +    
    +      
    +    
    +    
    +    
    +      
    +        
    +          cannot locate targetdoc 
    +          
    +           in sitemap
    +        
    +      
    +    
    +    
    +    
    +      
    +      
    +        
    +        /
    +      
    +      
    +      
    +        
    +        
    +      
    +    
    +    
    +    
    +      
    +        ../
    +      
    +      
    +        
    +        
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +        
    +        
    +      
    +    
    +    
    +  
    +      
    +        
    +          
    +        
    +      
    +  
    +      
    +        
    +          
    +            
    +              
    +              
    +              
    +            
    +          
    +          
    +        
    +      
    +  
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +    
    +  
    +
    +  
    +  
    +    
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +        
    +          
    +          
    +          
    +        
    +      
    +      
    +      
    +    
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +  
    +    
    +      
    +      
    +    
    +  
    +
    +  
    +    
    +      
    +    
    +  
    +
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/or.xml b/bash/templates/build-aux/docbook-xsl/common/or.xml
    new file mode 100644
    index 0000000..1124293
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/or.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ପ୍ରତୀକ
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/pa.xml b/bash/templates/build-aux/docbook-xsl/common/pa.xml
    new file mode 100644
    index 0000000..7bde8ba
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/pa.xml
    @@ -0,0 +1,719 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ਚਿੰਨ
    +A
    +a
    +B
    +b
    +C
    +c
    +D
    +d
    +E
    +e
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +M
    +m
    +N
    +n
    +O
    +o
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/pi.xml b/bash/templates/build-aux/docbook-xsl/common/pi.xml
    new file mode 100644
    index 0000000..aa50d13
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/pi.xml
    @@ -0,0 +1,165 @@
    +
    +Common Processing Instruction Reference
    +    
    +    
    +  
    +  
    +    Introduction
    +    
    +This is generated reference documentation for all
    +      user-specifiable processing instructions (PIs) in the
    +      “common” part of the DocBook XSL stylesheets.
    +      
    +        
    +You add these PIs at particular points in a document to
    +          cause specific “exceptions” to formatting/output behavior. To
    +          make global changes in formatting/output behavior across an
    +          entire document, it’s better to do it by setting an
    +          appropriate stylesheet parameter (if there is one).
    +
    +      
    +    
    +
    +  
    +
    +
    +
    +dbchoice_choice
    +Generates a localized choice separator
    +
    +
    +
    +    dbchoice choice="and"|"or"|string"
    +  
    +
    +Description
    +    
    +Use the dbchoice choice PI to
    +      generate an appropriate localized “choice” separator (for
    +      example, and or or)
    +      before the final item in an inline simplelist
    +
    +    
    +      
    +This PI is a less-than-ideal hack; support for it may
    +        disappear in the future (particularly if and when a more
    +        appropriate means for marking up "choice" lists becomes
    +        available in DocBook).
    +
    +    
    +  Parameters
    +    
    +
    +      choice="and"
    +        
    +          
    +generates a localized and separator
    +
    +        
    +      
    +      choice="or"
    +        
    +          
    +generates a localized or separator
    +
    +        
    +      
    +      choice="string"
    +        
    +          
    +generates a literal string separator
    +
    +        
    +      
    +    
    +
    +  
    +
    +
    +
    +dbtimestamp
    +Inserts a date timestamp
    +
    +
    +
    +    dbtimestamp format="formatstring" [padding="0"|"1"]
    +  
    +
    +Description
    +    
    +Use the dbtimestamp PI at any point in a
    +      source document to cause a date timestamp (a formatted
    +      string representing the current date and time) to be
    +      inserted in output of the document.
    +
    +  Parameters
    +    
    +
    +      format="formatstring"
    +        
    +          
    +Specifies format in which the date and time are
    +            output
    +
    +        
    +          
    +For details of the content of the format string,
    +            see Date and time.
    +
    +        
    +        
    +      
    +      padding="0"|"1"
    +        
    +          
    +Specifies padding behavior; if non-zero, padding is is added
    +
    +        
    +      
    +    
    +
    +  
    +
    +
    +
    +dbtex_delims
    +Generates delimiters around embedded TeX equations
    +    in output
    +
    +
    +
    +    dbtex delims="no"|"yes"
    +  
    +
    +Description
    +    
    +Use the dbtex delims PI as a
    +      child of a textobject containing embedded TeX
    +      markup, to cause that markup to be surrounded by
    +      $ delimiter characters in output.
    +
    +      
    +       
    +This feature is useful for print/PDF output only if you
    +       use the obsolete and now unsupported PassiveTeX XSL-FO
    +       engine.
    +
    +      
    +  Parameters
    +    
    +
    +      dbtex delims="no"|"yes"
    +        
    +          
    +Specifies whether delimiters are output
    +
    +        
    +      
    +    
    +
    +  Related Global Parameters
    +    
    +tex.math.delims
    +
    +  
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/pi.xsl b/bash/templates/build-aux/docbook-xsl/common/pi.xsl
    new file mode 100644
    index 0000000..5178194
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/pi.xsl
    @@ -0,0 +1,344 @@
    +
    +
    +
    +
    +
    +Common Processing Instruction Reference
    +    
    +    
    +  
    +  
    +    Introduction
    +    This is generated reference documentation for all
    +      user-specifiable processing instructions (PIs) in the
    +      “common” part of the DocBook XSL stylesheets.
    +      
    +        You add these PIs at particular points in a document to
    +          cause specific “exceptions” to formatting/output behavior. To
    +          make global changes in formatting/output behavior across an
    +          entire document, it’s better to do it by setting an
    +          appropriate stylesheet parameter (if there is one).
    +      
    +    
    +  
    +
    +
    +
    +
    +  Generates a localized choice separator
    +  
    +    Use the dbchoice choice PI to
    +      generate an appropriate localized “choice” separator (for
    +      example, and or or)
    +      before the final item in an inline simplelist
    +    
    +      This PI is a less-than-ideal hack; support for it may
    +        disappear in the future (particularly if and when a more
    +        appropriate means for marking up "choice" lists becomes
    +        available in DocBook).
    +    
    +  
    +  
    +    dbchoice choice="and"|"or"|string"
    +  
    +  
    +    
    +      choice="and"
    +        
    +          generates a localized and separator
    +        
    +      
    +      choice="or"
    +        
    +          generates a localized or separator
    +        
    +      
    +      choice="string"
    +        
    +          generates a literal string separator
    +        
    +      
    +    
    +  
    +
    +
    +  
    +  
    +    
    +    choice
    +  
    +
    +
    +
    +  Inserts a date timestamp
    +  
    +    Use the dbtimestamp PI at any point in a
    +      source document to cause a date timestamp (a formatted
    +      string representing the current date and time) to be
    +      inserted in output of the document.
    +  
    +  
    +    dbtimestamp format="formatstring" [padding="0"|"1"]
    +  
    +  
    +    
    +      format="formatstring"
    +        
    +          Specifies format in which the date and time are
    +            output
    +        
    +          For details of the content of the format string,
    +            see Date and time.
    +        
    +        
    +      
    +      padding="0"|"1"
    +        
    +          Specifies padding behavior; if non-zero, padding is is added
    +        
    +      
    +    
    +  
    +
    +
    +  
    +    
    +      
    +        
    +        format
    +      
    +    
    +    
    +      
    +        
    +      
    +      
    +        
    +          
    +          
    +        
    +      
    +    
    +   
    +  
    +    
    +      
    +        
    +        padding
    +      
    +    
    +    
    +      
    +        
    +      
    +      1
    +    
    +  
    +  
    +    
    +      
    +        
    +      
    +      
    +        
    +        
    +      
    +    
    +  
    +  
    +    
    +      
    +        
    +        
    +        
    +      
    +    
    +    
    +      
    +        Timestamp processing requires XSLT processor with EXSLT date support.
    +      
    +    
    +  
    +
    +
    +
    +  Generates delimiters around embedded TeX equations
    +    in output
    +  
    +    Use the dbtex delims PI as a
    +      child of a textobject containing embedded TeX
    +      markup, to cause that markup to be surrounded by
    +      $ delimiter characters in output.
    +      
    +       This feature is useful for print/PDF output only if you
    +       use the obsolete and now unsupported PassiveTeX XSL-FO
    +       engine.
    +      
    +  
    +  
    +    dbtex delims="no"|"yes"
    +  
    +  
    +    
    +      dbtex delims="no"|"yes"
    +        
    +          Specifies whether delimiters are output
    +        
    +      
    +    
    +  
    +
    +  
    +    tex.math.delims
    +  
    + 
    +
    +
    +  
    +  
    +    
    +    
    +  
    +
    +
    +
    +
    +
    +  
    +  
    +
    +
    +
    +  
    +
    +
    +
    +  
    +  
    +  
    +  
    +    
    +    
    +    
    +      
    +        
    +        
    +      
    +    
    +    
    +      
    +        
    +        
    +        
    +          
    +            
    +          
    +          
    +          
    +            
    +              
    +                
    +                  
    +                  
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                
    +              
    +              
    +                
    +                 
    +                
    +              
    +              
    +                
    +                  
    +                  
    +                
    +              
    +              
    +                0
    +                
    +              
    +              
    +                0
    +                
    +              
    +              
    +                
    +              
    +              
    +                0
    +                
    +              
    +              
    +                0
    +                
    +              
    +              
    +                0
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +              
    +                
    +              
    +            
    +          
    +        
    +      
    +      
    +        
    +          Timestamp processing requires an XSLT processor with support
    +          for the EXSLT node-set() function.
    +        
    +      
    +    
    +  
    +
    +
    +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/pl.xml b/bash/templates/build-aux/docbook-xsl/common/pl.xml
    new file mode 100644
    index 0000000..b682423
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/pl.xml
    @@ -0,0 +1,737 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Symbole
    +A
    +a
    +Ą
    +ą
    +B
    +b
    +C
    +c
    +Ć
    +ć
    +D
    +d
    +E
    +e
    +Ę
    +ę
    +F
    +f
    +G
    +g
    +H
    +h
    +I
    +i
    +J
    +j
    +K
    +k
    +L
    +l
    +Ł
    +ł
    +M
    +m
    +N
    +n
    +Ń
    +ń
    +O
    +o
    +Ó
    +ó
    +P
    +p
    +Q
    +q
    +R
    +r
    +S
    +s
    +Ś
    +ś
    +T
    +t
    +U
    +u
    +V
    +v
    +W
    +w
    +X
    +x
    +Y
    +y
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/pt.xml b/bash/templates/build-aux/docbook-xsl/common/pt.xml
    new file mode 100644
    index 0000000..82dfff4
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/pt.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Símbolos
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/pt_br.xml b/bash/templates/build-aux/docbook-xsl/common/pt_br.xml
    new file mode 100644
    index 0000000..bf773f0
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/pt_br.xml
    @@ -0,0 +1,1288 @@
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Símbolos
    +A
    +a
    +À
    +à
    +Á
    +á
    +Â
    +â
    +Ã
    +ã
    +Ä
    +ä
    +Å
    +å
    +Ā
    +ā
    +Ă
    +ă
    +Ą
    +ą
    +Ǎ
    +ǎ
    +Ǟ
    +ǟ
    +Ǡ
    +ǡ
    +Ǻ
    +ǻ
    +Ȁ
    +ȁ
    +Ȃ
    +ȃ
    +Ȧ
    +ȧ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +B
    +b
    +ƀ
    +Ɓ
    +ɓ
    +Ƃ
    +ƃ
    +
    +
    +
    +
    +
    +
    +C
    +c
    +Ç
    +ç
    +Ć
    +ć
    +Ĉ
    +ĉ
    +Ċ
    +ċ
    +Č
    +č
    +Ƈ
    +ƈ
    +ɕ
    +
    +
    +D
    +d
    +Ď
    +ď
    +Đ
    +đ
    +Ɗ
    +ɗ
    +Ƌ
    +ƌ
    +Dž
    +Dz
    +ȡ
    +ɖ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +E
    +e
    +È
    +è
    +É
    +é
    +Ê
    +ê
    +Ë
    +ë
    +Ē
    +ē
    +Ĕ
    +ĕ
    +Ė
    +ė
    +Ę
    +ę
    +Ě
    +ě
    +Ȅ
    +ȅ
    +Ȇ
    +ȇ
    +Ȩ
    +ȩ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +ế
    +
    +
    +
    +
    +
    +
    +
    +
    +F
    +f
    +Ƒ
    +ƒ
    +
    +
    +G
    +g
    +Ĝ
    +ĝ
    +Ğ
    +ğ
    +Ġ
    +ġ
    +Ģ
    +ģ
    +Ɠ
    +ɠ
    +Ǥ
    +ǥ
    +Ǧ
    +ǧ
    +Ǵ
    +ǵ
    +
    +
    +H
    +h
    +Ĥ
    +ĥ
    +Ħ
    +ħ
    +Ȟ
    +ȟ
    +ɦ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +I
    +i
    +Ì
    +ì
    +Í
    +í
    +Î
    +î
    +Ï
    +ï
    +Ĩ
    +ĩ
    +Ī
    +ī
    +Ĭ
    +ĭ
    +Į
    +į
    +İ
    +Ɨ
    +ɨ
    +Ǐ
    +ǐ
    +Ȉ
    +ȉ
    +Ȋ
    +ȋ
    +
    +
    +
    +
    +
    +
    +
    +
    +J
    +j
    +Ĵ
    +ĵ
    +ǰ
    +ʝ
    +K
    +k
    +Ķ
    +ķ
    +Ƙ
    +ƙ
    +Ǩ
    +ǩ
    +
    +
    +
    +
    +
    +
    +L
    +l
    +Ĺ
    +ĺ
    +Ļ
    +ļ
    +Ľ
    +ľ
    +Ŀ
    +ŀ
    +Ł
    +ł
    +ƚ
    +Lj
    +ȴ
    +ɫ
    +ɬ
    +ɭ
    +
    +
    +
    +
    +
    +
    +
    +
    +M
    +m
    +ɱ
    +
    +ḿ
    +
    +
    +
    +
    +N
    +n
    +Ñ
    +ñ
    +Ń
    +ń
    +Ņ
    +ņ
    +Ň
    +ň
    +Ɲ
    +ɲ
    +ƞ
    +Ƞ
    +Nj
    +Ǹ
    +ǹ
    +ȵ
    +ɳ
    +
    +
    +
    +
    +
    +
    +
    +
    +O
    +o
    +Ò
    +ò
    +Ó
    +ó
    +Ô
    +ô
    +Õ
    +õ
    +Ö
    +ö
    +Ø
    +ø
    +Ō
    +ō
    +Ŏ
    +ŏ
    +Ő
    +ő
    +Ɵ
    +Ơ
    +ơ
    +Ǒ
    +ǒ
    +Ǫ
    +ǫ
    +Ǭ
    +ǭ
    +Ǿ
    +ǿ
    +Ȍ
    +ȍ
    +Ȏ
    +ȏ
    +Ȫ
    +ȫ
    +Ȭ
    +ȭ
    +Ȯ
    +ȯ
    +Ȱ
    +ȱ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +P
    +p
    +Ƥ
    +ƥ
    +
    +
    +
    +
    +Q
    +q
    +ʠ
    +R
    +r
    +Ŕ
    +ŕ
    +Ŗ
    +ŗ
    +Ř
    +ř
    +Ȑ
    +ȑ
    +Ȓ
    +ȓ
    +ɼ
    +ɽ
    +ɾ
    +
    +
    +
    +
    +
    +
    +
    +
    +S
    +s
    +Ś
    +ś
    +Ŝ
    +ŝ
    +Ş
    +ş
    +Š
    +š
    +Ș
    +ș
    +ʂ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +T
    +t
    +Ţ
    +ţ
    +Ť
    +ť
    +Ŧ
    +ŧ
    +ƫ
    +Ƭ
    +ƭ
    +Ʈ
    +ʈ
    +Ț
    +ț
    +ȶ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +U
    +u
    +Ù
    +ù
    +Ú
    +ú
    +Û
    +û
    +Ü
    +ü
    +Ũ
    +ũ
    +Ū
    +ū
    +Ŭ
    +ŭ
    +Ů
    +ů
    +Ű
    +ű
    +Ų
    +ų
    +Ư
    +ư
    +Ǔ
    +ǔ
    +Ǖ
    +ǖ
    +Ǘ
    +ǘ
    +Ǚ
    +ǚ
    +Ǜ
    +ǜ
    +Ȕ
    +ȕ
    +Ȗ
    +ȗ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +V
    +v
    +Ʋ
    +ʋ
    +
    +
    +
    +ṿ
    +W
    +w
    +Ŵ
    +ŵ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +X
    +x
    +
    +
    +
    +
    +Y
    +y
    +Ý
    +ý
    +ÿ
    +Ÿ
    +Ŷ
    +ŷ
    +Ƴ
    +ƴ
    +Ȳ
    +ȳ
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +
    +Z
    +z
    +Ź
    +ź
    +Ż
    +ż
    +Ž
    +ž
    +Ƶ
    +ƶ
    +Ȥ
    +ȥ
    +ʐ
    +ʑ
    +
    +
    +
    +
    +
    +
    +
    +
    \ No newline at end of file
    diff --git a/bash/templates/build-aux/docbook-xsl/common/refentry.xml b/bash/templates/build-aux/docbook-xsl/common/refentry.xml
    new file mode 100644
    index 0000000..99d08b7
    --- /dev/null
    +++ b/bash/templates/build-aux/docbook-xsl/common/refentry.xml
    @@ -0,0 +1,778 @@
    +
    +
    +  
    +    Common » Refentry Metadata Template Reference
    +    
    +    
    +  
    +  
    +  
    +    Introduction
    +    
    +This is technical reference documentation for the “refentry
    +    metadata” templates in the DocBook XSL Stylesheets.
    +
    +    
    +This is not intended to be user documentation. It is provided
    +    for developers writing customization layers for the stylesheets.
    +
    +    
    +      
    +Currently, only the manpages stylesheets make use of these
    +      templates. They are, however, potentially useful elsewhere.
    +
    +    
    +  
    +
    +
    +
    +get.refentry.metadata
    +Gathers metadata from a refentry and its ancestors
    +
    +
    +<xsl:template name="get.refentry.metadata">
    +<xsl:param name="refname"/>
    +<xsl:param name="info"/>
    +<xsl:param name="prefs"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +Reference documentation for particular commands, functions,
    +    etc., is sometimes viewed in isolation from its greater "context". For
    +    example, users view Unix man pages as, well, individual pages, not as
    +    part of a "book" of some kind. Therefore, it is sometimes necessary to
    +    embed "context" information in output for each refentry.
    +
    +
    +    
    +However, one problem is that different users mark up that
    +    context information in different ways. Often (usually), the
    +    context information is not actually part of the content of the
    +    refentry itself, but instead part of the content of a
    +    parent or ancestor element to the refentry. And
    +    even then, DocBook provides a variety of elements that users might
    +    potentially use to mark up the same kind of information. One user
    +    might use the productnumber element to mark up version
    +    information about a particular product, while another might use
    +    the releaseinfo element.
    +
    +
    +    
    +Taking all that in mind, the
    +    get.refentry.metadata template tries to gather
    +    metadata from a refentry element and its ancestor
    +    elements in an intelligent and user-configurable way. The basic
    +    mechanism used in the XPath expressions throughout this stylesheet
    +    is to select the relevant metadata from the *info element that is
    +    closest to the actual refentry – either on the
    +    refentry itself, or on its nearest ancestor.
    +
    +
    +    
    +      
    +The get.refentry.metadata
    +        template is actually just sort of a "driver" template; it
    +        calls other templates that do the actual data collection,
    +        then returns the data as a set.
    +
    +    
    +
    +  Parameters
    +    
    +
    +      
    +        refname
    +        
    +          
    +The first refname in the refentry
    +
    +        
    +      
    +      
    +        info
    +        
    +          
    +A set of info nodes (from a refentry
    +          element and its ancestors)
    +
    +        
    +      
    +      
    +        prefs
    +        
    +          
    +A node containing user preferences (from global
    +          stylesheet parameters)
    +
    +        
    +      
    +    
    +
    +  Returns
    +    
    +Returns a node set with the following elements. The
    +    descriptions are verbatim from the man(7) man
    +    page.
    +    
    +
    +      
    +        title
    +        
    +          
    +the title of the man page (e.g., MAN)
    +
    +        
    +      
    +      
    +        section
    +        
    +          
    +the section number the man page should be placed in (e.g.,
    +          7)
    +
    +        
    +      
    +      
    +        date
    +        
    +          
    +the date of the last revision
    +
    +        
    +      
    +      
    +        source
    +        
    +          
    +the source of the command
    +
    +        
    +      
    +      
    +        manual
    +        
    +          
    +the title of the manual (e.g., Linux
    +          Programmer's Manual)
    +
    +        
    +      
    +    
    +
    +    
    +
    +  
    +
    +
    +
    +get.refentry.title
    +Gets title metadata for a refentry
    +
    +
    +<xsl:template name="get.refentry.title">
    +<xsl:param name="refname"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +The man(7) man page describes this as "the
    +    title of the man page (e.g., MAN). This differs
    +    from refname in that, if the refentry has a
    +    refentrytitle, we use that as the title;
    +    otherwise, we just use first refname in the first
    +    refnamediv in the source.
    +
    +  Parameters
    +    
    +
    +      
    +        refname
    +        
    +          
    +The first refname in the refentry
    +
    +        
    +      
    +    
    +
    +  Returns
    +  
    +Returns a title node.
    +
    +
    +
    +
    +get.refentry.section
    +Gets section metadata for a refentry
    +
    +
    +<xsl:template name="get.refentry.section">
    +<xsl:param name="refname"/>
    +<xsl:param name="quiet" select="0"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +The man(7) man page describes this as "the
    +    section number the man page should be placed in (e.g.,
    +    7)". If we do not find a manvolnum
    +    specified in the source, and we find that the refentry is
    +    for a function, we use the section number 3
    +    ["Library calls (functions within program libraries)"]; otherwise, we
    +    default to using 1 ["Executable programs or shell
    +    commands"].
    +
    +  Parameters
    +    
    +
    +      
    +        refname
    +        
    +          
    +The first refname in the refentry
    +
    +        
    +      
    +      
    +        quiet
    +        
    +          
    +If non-zero, no "missing" message is emitted
    +
    +        
    +      
    +    
    +
    +  Returns
    +  
    +Returns a string representing a section number.
    +
    +
    +
    +
    +get.refentry.date
    +Gets date metadata for a refentry
    +
    +
    +<xsl:template name="get.refentry.date">
    +<xsl:param name="refname"/>
    +<xsl:param name="info"/>
    +<xsl:param name="prefs"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +The man(7) man page describes this as "the
    +    date of the last revision". If we cannot find a date in the source, we
    +    generate one.
    +
    +  Parameters
    +    
    +
    +      
    +        refname
    +        
    +          
    +The first refname in the refentry
    +
    +        
    +      
    +      
    +        info
    +        
    +          
    +A set of info nodes (from a refentry
    +          element and its ancestors)
    +
    +        
    +      
    +      
    +        prefs
    +        
    +          
    +A node containing users preferences (from global stylesheet parameters)
    +
    +        
    +      
    +    
    +
    +  Returns
    +    
    +Returns a date node.
    +
    +  
    +
    +
    +
    +get.refentry.source
    +Gets source metadata for a refentry
    +
    +
    +<xsl:template name="get.refentry.source">
    +<xsl:param name="refname"/>
    +<xsl:param name="info"/>
    +<xsl:param name="prefs"/>
    +  ...
    +</xsl:template>
    +
    +Description
    +    
    +The man(7) man page describes this as "the
    +    source of the command", and provides the following examples:
    +    
    +
    +      
    +        
    +For binaries, use something like: GNU, NET-2, SLS
    +        Distribution, MCC Distribution.
    +
    +      
    +      
    +        
    +For system calls, use the version of the kernel that you are
    +        currently looking at: Linux 0.99.11.
    +
    +      
    +      
    +        
    +For library calls, use the source of the function: GNU, BSD
    +        4.3, Linux DLL 4.4.1.
    +
    +      
    +    
    +
    +    
    +
    +
    +    
    +The solbook(5) man page describes
    +    something very much like what man(7) calls
    +    "source", except that solbook(5) names it
    +    "software" and describes it like this:
    +    
    + +This is the name of the software product that the topic + discussed on the reference page belongs to. For example UNIX + commands are part of the SunOS x.x + release. + +
    +
    + + + +In practice, there are many pages that simply have a version + number in the "source" field. So, it looks like what we have is a + two-part field, + Name Version, + where: + + + + Name + + +product name (e.g., BSD) or org. name (e.g., GNU) + + + + + Version + + +version name + + + + + + Each part is optional. If the Name is a + product name, then the Version is probably + the version of the product. Or there may be no + Name, in which case, if there is a + Version, it is probably the version of the + item itself, not the product it is part of. Or, if the + Name is an organization name, then there + probably will be no Version. + + +
    Parameters + + + + refname + + +The first refname in the refentry + + + + + info + + +A set of info nodes (from a refentry + element and its ancestors) + + + + + prefs + + +A node containing users preferences (from global + stylesheet parameters) + + + + + + Returns + +Returns a source node. + +
    + + + +get.refentry.source.name +Gets source-name metadata for a refentry + + +<xsl:template name="get.refentry.source.name"> +<xsl:param name="refname"/> +<xsl:param name="info"/> +<xsl:param name="prefs"/> + ... +</xsl:template> + +Description + +A "source name" is one part of a (potentially) two-part + Name Version + source field. For more details, see the documentation for the + get.refentry.source template. + + Parameters + + + + refname + + +The first refname in the refentry + + + + + info + + +A set of info nodes (from a refentry + element and its ancestors) + + + + + prefs + + +A node containing users preferences (from global + stylesheet parameters) + + + + + + Returns + +Depending on what output method is used for the + current stylesheet, either returns a text node or possibly an element + node, containing "source name" data. + + + + + +get.refentry.version +Gets version metadata for a refentry + + +<xsl:template name="get.refentry.version"> +<xsl:param name="refname"/> +<xsl:param name="info"/> +<xsl:param name="prefs"/> + ... +</xsl:template> + +Description + +A "version" is one part of a (potentially) two-part + Name Version + source field. For more details, see the documentation for the + get.refentry.source template. + + Parameters + + + + refname + + +The first refname in the refentry + + + + + info + + +A set of info nodes (from a refentry + element and its ancestors) + + + + + prefs + + +A node containing users preferences (from global + stylesheet parameters) + + + + + + Returns + +Depending on what output method is used for the + current stylesheet, either returns a text node or possibly an element + node, containing "version" data. + + + + + +get.refentry.manual +Gets source metadata for a refentry + + +<xsl:template name="get.refentry.manual"> +<xsl:param name="refname"/> +<xsl:param name="info"/> +<xsl:param name="prefs"/> + ... +</xsl:template> + +Description + +The man(7) man page describes this as "the + title of the manual (e.g., Linux Programmer's + Manual)". Here are some examples from existing man pages: + + + + +dpkg utilities + (dpkg-name) + + + + +User Contributed Perl Documentation + (GET) + + + + +GNU Development Tools + (ld) + + + + +Emperor Norton Utilities + (ddate) + + + + +Debian GNU/Linux manual + (faked) + + + + +GIMP Manual Pages + (gimp) + + + + +KDOC Documentation System + (qt2kdoc) + + + + + + + + +The solbook(5) man page describes + something very much like what man(7) calls + "manual", except that solbook(5) names it + "sectdesc" and describes it like this: +
    + +This is the section title of the reference page; for + example User Commands. + +
    +
    + + +
    Parameters + + + + refname + + +The first refname in the refentry + + + + + info + + +A set of info nodes (from a refentry + element and its ancestors) + + + + + prefs + + +A node containing users preferences (from global + stylesheet parameters) + + + + + + Returns + +Returns a manual node. + +
    + + + +get.refentry.metadata.prefs +Gets user preferences for refentry metadata gathering + + +<xsl:template name="get.refentry.metadata.prefs"/> + +Description + +The DocBook XSL stylesheets include several user-configurable + global stylesheet parameters for controlling refentry + metadata gathering. Those parameters are not read directly by the + other refentry metadata-gathering + templates. Instead, they are read only by the + get.refentry.metadata.prefs template, + which assembles them into a structure that is then passed to + the other refentry metadata-gathering + templates. + + + +So the, get.refentry.metadata.prefs + template is the only interface to collecting stylesheet parameters for + controlling refentry metadata gathering. + + Parameters + +There are no local parameters for this template; however, it + does rely on a number of global parameters. + + Returns + +Returns a manual node. + + + + + +set.refentry.metadata +Sets content of a refentry metadata item + + +<xsl:template name="set.refentry.metadata"> +<xsl:param name="refname"/> +<xsl:param name="info"/> +<xsl:param name="contents"/> +<xsl:param name="context"/> +<xsl:param name="preferred"/> + ... +</xsl:template> + +Description + +The set.refentry.metadata template is + called each time a suitable source element is found for a certain + metadata field. + + Parameters + + + + refname + + +The first refname in the refentry + + + + + info + + +A single *info node that contains the selected source element. + + + + + contents + + +A node containing the selected source element. + + + + + context + + +A string describing the metadata context in which the + set.refentry.metadata template was + called: either "date", "source", "version", or "manual". + + + + + + Returns + +Returns formatted contents of a selected source element. + +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/refentry.xsl b/bash/templates/build-aux/docbook-xsl/common/refentry.xsl new file mode 100644 index 0000000..6fd898f --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/refentry.xsl @@ -0,0 +1,1350 @@ + + + + + + + + + Common » Refentry Metadata Template Reference + + + + + + Introduction + This is technical reference documentation for the “refentry + metadata” templates in the DocBook XSL Stylesheets. + This is not intended to be user documentation. It is provided + for developers writing customization layers for the stylesheets. + + Currently, only the manpages stylesheets make use of these + templates. They are, however, potentially useful elsewhere. + + + + + + + Gathers metadata from a refentry and its ancestors + + Reference documentation for particular commands, functions, + etc., is sometimes viewed in isolation from its greater "context". For + example, users view Unix man pages as, well, individual pages, not as + part of a "book" of some kind. Therefore, it is sometimes necessary to + embed "context" information in output for each refentry. + + However, one problem is that different users mark up that + context information in different ways. Often (usually), the + context information is not actually part of the content of the + refentry itself, but instead part of the content of a + parent or ancestor element to the refentry. And + even then, DocBook provides a variety of elements that users might + potentially use to mark up the same kind of information. One user + might use the productnumber element to mark up version + information about a particular product, while another might use + the releaseinfo element. + + Taking all that in mind, the + get.refentry.metadata template tries to gather + metadata from a refentry element and its ancestor + elements in an intelligent and user-configurable way. The basic + mechanism used in the XPath expressions throughout this stylesheet + is to select the relevant metadata from the *info element that is + closest to the actual refentry – either on the + refentry itself, or on its nearest ancestor. + + + The get.refentry.metadata + template is actually just sort of a "driver" template; it + calls other templates that do the actual data collection, + then returns the data as a set. + + + + + + + refname + + The first refname in the refentry + + + + info + + A set of info nodes (from a refentry + element and its ancestors) + + + + prefs + + A node containing user preferences (from global + stylesheet parameters) + + + + + + Returns a node set with the following elements. The + descriptions are verbatim from the man(7) man + page. + + + title + + the title of the man page (e.g., MAN) + + + + section + + the section number the man page should be placed in (e.g., + 7) + + + + date + + the date of the last revision + + + + source + + the source of the command + + + + manual + + the title of the manual (e.g., Linux + Programmer's Manual) + + + + + + + + + + + + <xsl:call-template name="get.refentry.title"> + <xsl:with-param name="refname" select="$refname"/> + </xsl:call-template> + +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + +
    + + + + Gets title metadata for a refentry + + The man(7) man page describes this as "the + title of the man page (e.g., MAN). This differs + from refname in that, if the refentry has a + refentrytitle, we use that as the title; + otherwise, we just use first refname in the first + refnamediv in the source. + + + + + refname + + The first refname in the refentry + + + + + + Returns a title node. + + + + + + + + + + + + + + + + + + Gets section metadata for a refentry + + The man(7) man page describes this as "the + section number the man page should be placed in (e.g., + 7)". If we do not find a manvolnum + specified in the source, and we find that the refentry is + for a function, we use the section number 3 + ["Library calls (functions within program libraries)"]; otherwise, we + default to using 1 ["Executable programs or shell + commands"]. + + + + + refname + + The first refname in the refentry + + + + quiet + + If non-zero, no "missing" message is emitted + + + + + + Returns a string representing a section number. + + + + + + + + + + + + + Note + + meta manvol + + no refentry/refmeta/manvolnum + + + + Note + + meta manvol + + see http://www.docbook.org/tdg5/en/html/manvolnum + + + + + + + + + + Note + + meta manvol + + Setting man section to 3 + + + + + 3 + + + 1 + + + + + + + + + Gets date metadata for a refentry + + The man(7) man page describes this as "the + date of the last revision". If we cannot find a date in the source, we + generate one. + + + + + refname + + The first refname in the refentry + + + + info + + A set of info nodes (from a refentry + element and its ancestors) + + + + prefs + + A node containing users preferences (from global stylesheet parameters) + + + + + + Returns a date node. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Gets source metadata for a refentry + + The man(7) man page describes this as "the + source of the command", and provides the following examples: + + + For binaries, use something like: GNU, NET-2, SLS + Distribution, MCC Distribution. + + + For system calls, use the version of the kernel that you are + currently looking at: Linux 0.99.11. + + + For library calls, use the source of the function: GNU, BSD + 4.3, Linux DLL 4.4.1. + + + + + The solbook(5) man page describes + something very much like what man(7) calls + "source", except that solbook(5) names it + "software" and describes it like this: +
    + This is the name of the software product that the topic + discussed on the reference page belongs to. For example UNIX + commands are part of the SunOS x.x + release. +
    +
    + + In practice, there are many pages that simply have a version + number in the "source" field. So, it looks like what we have is a + two-part field, + Name Version, + where: + + + Name + + product name (e.g., BSD) or org. name (e.g., GNU) + + + + Version + + version name + + + + Each part is optional. If the Name is a + product name, then the Version is probably + the version of the product. Or there may be no + Name, in which case, if there is a + Version, it is probably the version of the + item itself, not the product it is part of. Or, if the + Name is an organization name, then there + probably will be no Version. + +
    + + + + refname + + The first refname in the refentry + + + + info + + A set of info nodes (from a refentry + element and its ancestors) + + + + prefs + + A node containing users preferences (from global + stylesheet parameters) + + + + + + Returns a source node. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warn + + meta source + + using + " + + " + for "source" + + + + + + + + [FIXME: source] + + + Warn + + meta source + + no fallback for source, so inserted a fixme + + + + + + + + + + [FIXME: source] + + + Warn + + meta source + + no source fallback given, so inserted a fixme + + + + + + + + + + Gets source-name metadata for a refentry + + A "source name" is one part of a (potentially) two-part + Name Version + source field. For more details, see the documentation for the + get.refentry.source template. + + + + + refname + + The first refname in the refentry + + + + info + + A set of info nodes (from a refentry + element and its ancestors) + + + + prefs + + A node containing users preferences (from global + stylesheet parameters) + + + + + + Depending on what output method is used for the + current stylesheet, either returns a text node or possibly an element + node, containing "source name" data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + source + + + + + + + + source + productname + + + + + + + + source + productname + + + + + + + + source + productname + + + + + + + + source + productname + + + + + + + + source + productname + + + + + + + + + + + + + Note + + meta source + + no *info/productname or alternative + + + + Note + + meta source + + see http://www.docbook.org/tdg5/en/html/productname + + + + Note + + meta source + + no refentry/refmeta/refmiscinfo@class=source + + + + Note + + meta source + + see http://www.docbook.org/tdg5/en/html/refmiscinfo + + + + + + + Gets version metadata for a refentry + + A "version" is one part of a (potentially) two-part + Name Version + source field. For more details, see the documentation for the + get.refentry.source template. + + + + + refname + + The first refname in the refentry + + + + info + + A set of info nodes (from a refentry + element and its ancestors) + + + + prefs + + A node containing users preferences (from global + stylesheet parameters) + + + + + + Depending on what output method is used for the + current stylesheet, either returns a text node or possibly an element + node, containing "version" data. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + version + + + + + + + + version + productnumber + + + + + + + + version + productnumber + + + + + + + + + + + + + Note + + meta version + + no *info/productnumber or alternative + + + + Note + + meta version + + see http://www.docbook.org/tdg5/en/html/productnumber + + + + Note + + meta version + + no refentry/refmeta/refmiscinfo@class=version + + + + Note + + meta version + + see http://www.docbook.org/tdg5/en/html/refmiscinfo + + + + + + + Gets source metadata for a refentry + + The man(7) man page describes this as "the + title of the manual (e.g., Linux Programmer's + Manual)". Here are some examples from existing man pages: + + + dpkg utilities + (dpkg-name) + + + User Contributed Perl Documentation + (GET) + + + GNU Development Tools + (ld) + + + Emperor Norton Utilities + (ddate) + + + Debian GNU/Linux manual + (faked) + + + GIMP Manual Pages + (gimp) + + + KDOC Documentation System + (qt2kdoc) + + + + + The solbook(5) man page describes + something very much like what man(7) calls + "manual", except that solbook(5) names it + "sectdesc" and describes it like this: +
    + This is the section title of the reference page; for + example User Commands. +
    +
    + +
    + + + + refname + + The first refname in the refentry + + + + info + + A set of info nodes (from a refentry + element and its ancestors) + + + + prefs + + A node containing users preferences (from global + stylesheet parameters) + + + + + + Returns a manual node. + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + manual + + + + + + + + manual + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warn + + meta manual + + using + " + + " + for "manual" + + + + + + + + [FIXME: manual] + + + Warn + + meta manual + + no fallback for manual, so inserted a fixme + + + + + + + + + + [FIXME: manual] + + + Warn + + meta manual + + no manual fallback given, so inserted a fixme + + + + + + + + + + + Note + + meta manual + + no titled ancestor of refentry + + + + Note + + meta manual + + no refentry/refmeta/refmiscinfo@class=manual + + + + Note + + meta manual + + see http://www.docbook.org/tdg5/en/html/refmiscinfo + + + + + + Gets user preferences for refentry metadata gathering + + The DocBook XSL stylesheets include several user-configurable + global stylesheet parameters for controlling refentry + metadata gathering. Those parameters are not read directly by the + other refentry metadata-gathering + templates. Instead, they are read only by the + get.refentry.metadata.prefs template, + which assembles them into a structure that is then passed to + the other refentry metadata-gathering + templates. + + So the, get.refentry.metadata.prefs + template is the only interface to collecting stylesheet parameters for + controlling refentry metadata gathering. + + + There are no local parameters for this template; however, it + does rely on a number of global parameters. + + + Returns a manual node. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Sets content of a refentry metadata item + + The set.refentry.metadata template is + called each time a suitable source element is found for a certain + metadata field. + + + + + refname + + The first refname in the refentry + + + + info + + A single *info node that contains the selected source element. + + + + contents + + A node containing the selected source element. + + + + context + + A string describing the metadata context in which the + set.refentry.metadata template was + called: either "date", "source", "version", or "manual". + + + + + + Returns formatted contents of a selected source element. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ro.xml b/bash/templates/build-aux/docbook-xsl/common/ro.xml new file mode 100644 index 0000000..35cc968 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/ro.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ru.xml b/bash/templates/build-aux/docbook-xsl/common/ru.xml new file mode 100644 index 0000000..e76c7ac --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/ru.xml @@ -0,0 +1,785 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z +А +а +Б +б +В +в +Г +г +Д +д +Е +е +Ё +ё +Ж +ж +З +з +И +и +Й +й +К +к +Л +л +М +м +Н +н +О +о +П +п +Р +р +С +с +Т +т +У +у +Ф +ф +Х +х +Ц +ц +Ч +ч +Ш +ш +Щ +щ +Ъ +ъ +Ы +ы +Ь +ь +Э +э +Ю +ю +Я +я + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sk.xml b/bash/templates/build-aux/docbook-xsl/common/sk.xml new file mode 100644 index 0000000..927221a --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/sk.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sl.xml b/bash/templates/build-aux/docbook-xsl/common/sl.xml new file mode 100644 index 0000000..e474582 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/sl.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sq.xml b/bash/templates/build-aux/docbook-xsl/common/sq.xml new file mode 100644 index 0000000..92554da --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/sq.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sr.xml b/bash/templates/build-aux/docbook-xsl/common/sr.xml new file mode 100644 index 0000000..98b26e1 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/sr.xml @@ -0,0 +1,779 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Симболи +А +а +Б +б +В +в +Г +г +Д +д +Ђ +ђ +Е +е +Ж +ж +З +з +И +и +Ј +ј +К +к +Л +л +Љ +љ +М +м +Н +н +Њ +њ +О +о +П +п +Р +р +С +с +Т +т +Ћ +ћ +У +у +Ф +ф +Х +х +Ц +ц +Ч +ч +Џ +џ +Ш +ш +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +Q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml b/bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml new file mode 100644 index 0000000..1f88905 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml @@ -0,0 +1,738 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Simboli +A +a +B +b +C +c +Č +č +Ć +ć +D +d + + + +Đ +đ +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +LJ +Lj +lj +M +m +N +n +NJ +Nj +nj +O +o +P +p +Q +Q +R +r +S +s +Š +š +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z +Ž +ž + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/stripns.xsl b/bash/templates/build-aux/docbook-xsl/common/stripns.xsl new file mode 100644 index 0000000..dba306e --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/stripns.xsl @@ -0,0 +1,370 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + info + + + objectinfo + + blockinfo + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WARNING: cannot add @xml:base to node + set root element. + Relative paths may not work. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + 1 + 0 + + + + + + Stripping namespace from DocBook 5 document. + It is suggested to use namespaced version of the stylesheets + available in distribution file 'docbook-xsl-ns' + at //http://sourceforge.net/projects/docbook/files/ + which does not require namespace stripping step. + + + + + Processing stripped document. + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/common/subtitles.xsl b/bash/templates/build-aux/docbook-xsl/common/subtitles.xsl new file mode 100644 index 0000000..a6390a1 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/subtitles.xsl @@ -0,0 +1,179 @@ + + + + + + + + + + +Provides access to element subtitles + +Processing an element in the +subtitle.markup mode produces the +subtitle of the element. + + + + + + + + + Request for subtitle of unexpected element: + + + ???SUBTITLE??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/common/sv.xml b/bash/templates/build-aux/docbook-xsl/common/sv.xml new file mode 100644 index 0000000..6c816b8 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/sv.xml @@ -0,0 +1,723 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z +Å +å +Ä +ä +Ö +ö + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ta.xml b/bash/templates/build-aux/docbook-xsl/common/ta.xml new file mode 100644 index 0000000..64e2383 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/ta.xml @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +குறியீடுகள் +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/table.xsl b/bash/templates/build-aux/docbook-xsl/common/table.xsl new file mode 100644 index 0000000..d5c46fe --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/table.xsl @@ -0,0 +1,513 @@ + + + + + + + + + + + 0: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0: + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + +Determine the column number in which a given entry occurs + +If an entry has a +colname or +namest attribute, this template +will determine the number of the column in which the entry should occur. +For other entrys, nothing is returned. + + + +entry + +The entry-element which is to be tested. + + + + + + +This template returns the column number if it can be determined, +or 0 (the empty string) + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd b/bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd new file mode 100644 index 0000000..2ace1e0 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd @@ -0,0 +1,49 @@ + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/common/targets.xsl b/bash/templates/build-aux/docbook-xsl/common/targets.xsl new file mode 100644 index 0000000..aa9430c --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/targets.xsl @@ -0,0 +1,336 @@ + + + + + + + + + + +Collects information for potential cross reference targets + +Processing the root element in the +collect.targets mode produces +a set of target database elements that can be used by +the olink mechanism to resolve external cross references. +The collection process is controlled by the +collect.xref.targets parameter, which can be +yes to collect targets and process +the document for output, only to +only collect the targets, and no +(default) to not collect the targets and only process the document. + + +A targets.filename parameter must be +specified to receive the output if +collect.xref.targets is +set to yes so as to +redirect the target data to a file separate from the +document output. + + + + + + + + + + + Must specify a $targets.filename parameter when + $collect.xref.targets is set to 'yes'. + The xref targets were not collected. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: processing automatic glossary + without a glossary.collection file. + + + + + + Warning: processing automatic glossary but unable to + open glossary.collection file ' + + ' + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    diff --git a/bash/templates/build-aux/docbook-xsl/common/te.xml b/bash/templates/build-aux/docbook-xsl/common/te.xml new file mode 100644 index 0000000..9f72239 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/te.xml @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +చిహ్నములు +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/th.xml b/bash/templates/build-aux/docbook-xsl/common/th.xml new file mode 100644 index 0000000..bd86c8a --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/th.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/titles.xsl b/bash/templates/build-aux/docbook-xsl/common/titles.xsl new file mode 100644 index 0000000..51b1fb0 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/titles.xsl @@ -0,0 +1,852 @@ + + + + + + + + + + +Provides access to element titles + +Processing an element in the +title.markup mode produces the +title of the element. This does not include the label. + + + + + + + + + + + + + + + + + + + + + + + Request for title of element with no title: + + + + (id=" + + ") + + + (xml:id=" + + ") + + + (contained in + + + with id + + + ) + + + + + ???TITLE??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + REFENTRY WITHOUT TITLE??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ERROR: glossdiv missing its required title + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Note + Important + Caution + Warning + Tip + + + + + + + + + + + question + + + + + + + answer + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Endterm points to nonexistent ID: + + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XRef to nonexistent id: + + + + ??? + + + + + + + + + + Endterm points to nonexistent ID: + + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/common/tl.xml b/bash/templates/build-aux/docbook-xsl/common/tl.xml new file mode 100644 index 0000000..4ba7526 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/tl.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/tr.xml b/bash/templates/build-aux/docbook-xsl/common/tr.xml new file mode 100644 index 0000000..a1bb893 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/tr.xml @@ -0,0 +1,725 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Semboller +A +a +B +b +C +c +Ç +ç +D +d +E +e +F +f +G +g +Ğ +ğ +H +h +I +ı +İ +i +J +j +K +k +L +l +M +m +N +n +O +o +Ö +ö +P +p +R +r +S +s +Ş +ş +T +t +U +u +Ü +ü +V +v +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/uk.xml b/bash/templates/build-aux/docbook-xsl/common/uk.xml new file mode 100644 index 0000000..fe0fd63 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/uk.xml @@ -0,0 +1,785 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z +А +а +Б +б +В +в +Г +г +Ґ +ґ +Д +д +Е +е +Є +є +Ж +ж +З +з +И +и +І +і +Ї +ї +Й +й +К +к +Л +л +М +м +Н +н +О +о +П +п +Р +р +С +с +Т +т +У +у +Ф +ф +Х +х +Ц +ц +Ч +ч +Ш +ш +Щ +щ +Ь +ь +Ю +ю +Я +я + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ur.xml b/bash/templates/build-aux/docbook-xsl/common/ur.xml new file mode 100644 index 0000000..46a6a3e --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/ur.xml @@ -0,0 +1,721 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +ا +آ +ب +بھ +پ +پھ +ت +تھ +ٹ +ٹھ +ث +ج +جھ +چ +چھ +ح +خ +د +دھ +ڈ +ڈھ +ذ +ر +رھ +ڑ +ڑھ +ز +ژ +س +ش +ص +ض +ط +ظ +ع +غ +ف +ق +ک +کھ +گ +گھ +ل +لھ +م +مھ +ن +نھ +و +وھ +ہ +ء +ی +ے + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/utility.xml b/bash/templates/build-aux/docbook-xsl/common/utility.xml new file mode 100644 index 0000000..c961340 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/utility.xml @@ -0,0 +1,256 @@ + + + + Common » Utility Template Reference + + + + + + Introduction + +This is technical reference documentation for the + miscellaneous utility templates in the DocBook XSL + Stylesheets. + + + +These templates are defined in a separate file from the set + of “common” templates because some of the common templates + reference DocBook XSL stylesheet parameters, requiring the + entire set of parameters to be imported/included in any + stylesheet that imports/includes the common templates. + + +The utility templates don’t import or include any DocBook + XSL stylesheet parameters, so the utility templates can be used + without importing the whole set of parameters. + + + +This is not intended to be user documentation. It is + provided for developers writing customization layers for the + stylesheets. + + + + + +log.message +Logs/emits formatted notes and warnings + + +<xsl:template name="log.message"> +<xsl:param name="level"/> +<xsl:param name="source"/> +<xsl:param name="context-desc"/> +<xsl:param name="context-desc-field-length">12</xsl:param> +<xsl:param name="context-desc-padded"> + <xsl:if test="not($context-desc = '')"> + <xsl:call-template name="pad-string"> + <xsl:with-param name="leftRight">right</xsl:with-param> + <xsl:with-param name="padVar" select="substring($context-desc, 1, $context-desc-field-length)"/> + <xsl:with-param name="length" select="$context-desc-field-length"/> + </xsl:call-template> + </xsl:if> + </xsl:param> +<xsl:param name="message"/> +<xsl:param name="message-field-length" select="45"/> +<xsl:param name="message-padded"> + <xsl:variable name="spaces-for-blank-level"> + <!-- * if the level field is blank, we'll need to pad out --> + <!-- * the message field with spaces to compensate --> + <xsl:choose> + <xsl:when test="$level = ''"> + <xsl:value-of select="4 + 2"/> + <!-- * 4 = hard-coded length of comment text ("Note" or "Warn") --> + <!-- * + 2 = length of colon-plus-space separator ": " --> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="0"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="spaces-for-blank-context-desc"> + <!-- * if the context-description field is blank, we'll need --> + <!-- * to pad out the message field with spaces to compensate --> + <xsl:choose> + <xsl:when test="$context-desc = ''"> + <xsl:value-of select="$context-desc-field-length + 2"/> + <!-- * + 2 = length of colon-plus-space separator ": " --> + </xsl:when> + <xsl:otherwise> + <xsl:value-of select="0"/> + </xsl:otherwise> + </xsl:choose> + </xsl:variable> + <xsl:variable name="extra-spaces" select="$spaces-for-blank-level + $spaces-for-blank-context-desc"/> + <xsl:call-template name="pad-string"> + <xsl:with-param name="leftRight">right</xsl:with-param> + <xsl:with-param name="padVar" select="substring($message, 1, ($message-field-length + $extra-spaces))"/> + <xsl:with-param name="length" select="$message-field-length + $extra-spaces"/> + </xsl:call-template> + </xsl:param> + ... +</xsl:template> + +Description + +The log.message template is a utility + template for logging/emitting formatted messages – that is, + notes and warnings, along with a given log “level” and an + identifier for the “source” that the message relates to. + + Parameters + + + level + + +Text to log/emit in the message-level field to + indicate the message level + (Note or + Warning) + + + + source + + +Text to log/emit in the source field to identify the + “source” to which the notification/warning relates. + This can be any arbitrary string, but because the + message lacks line and column numbers to identify the + exact part of the source document to which it + relates, the intention is that the value you pass + into the source parameter should + give the user some way to identify the portion of + their source document on which to take potentially + take action in response to the log message (for + example, to edit, change, or add content). + + +So the source value should be, + for example, an ID, book/chapter/article title, title + of some formal object, or even a string giving an + XPath expression. + + + + context-desc + + +Text to log/emit in the context-description field to + describe the context for the message. + + + + context-desc-field-length + + +Specifies length of the context-description field + (in characters); default is 12 + + +If the text specified by the + context-desc parameter is longer + than the number of characters specified in + context-desc-field-length, it is + truncated to context-desc-field-length + (12 characters by default). + + +If the specified text is shorter than + context-desc-field-length, + it is right-padded out to + context-desc-field-length (12 by + default). + + +If no value has been specified for the + context-desc parameter, the field is + left empty and the text of the log message begins with + the value of the message + parameter. + + + + message + + +Text to log/emit in the actual message field + + + + message-field-length + + +Specifies length of the message + field (in characters); default is 45 + + + + + + Returns + +Outputs a message (generally, to standard error). + + + + +get.doc.title +Gets a title from the current document + + +<xsl:template name="get.doc.title"/> + +Description + +The get.doc.title template is a + utility template for returning the first title found in the + current document. + + Returns + +Returns a string containing some identifying title for the + current document . + + + + +pad-string +Right-pads or left-pads a string out to a certain length + + +<xsl:template name="pad-string"> +<xsl:param name="padChar" select="' '"/> +<xsl:param name="leftRight">left</xsl:param> +<xsl:param name="padVar"/> +<xsl:param name="length"/> + ... +</xsl:template> + +Description + +This function takes string padVar and + pads it out in the direction rightLeft to + the string-length length, using string + padChar (a space character by default) as + the padding string (note that padChar can + be a string; it is not limited to just being a single + character). + + + +This function began as a copy of Nate Austin's + prepend-pad function in the Padding + Content section of Dave Pawson's XSLT + FAQ. + + + Returns + +Returns a (padded) string. + + diff --git a/bash/templates/build-aux/docbook-xsl/common/utility.xsl b/bash/templates/build-aux/docbook-xsl/common/utility.xsl new file mode 100644 index 0000000..83ee041 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/utility.xsl @@ -0,0 +1,288 @@ + + + + + + + Common » Utility Template Reference + + + + + + Introduction + This is technical reference documentation for the + miscellaneous utility templates in the DocBook XSL + Stylesheets. + + These templates are defined in a separate file from the set + of “common” templates because some of the common templates + reference DocBook XSL stylesheet parameters, requiring the + entire set of parameters to be imported/included in any + stylesheet that imports/includes the common templates. + The utility templates don’t import or include any DocBook + XSL stylesheet parameters, so the utility templates can be used + without importing the whole set of parameters. + + This is not intended to be user documentation. It is + provided for developers writing customization layers for the + stylesheets. + + + + + + + Logs/emits formatted notes and warnings + + + The log.message template is a utility + template for logging/emitting formatted messages – that is, + notes and warnings, along with a given log “level” and an + identifier for the “source” that the message relates to. + + + + + level + + Text to log/emit in the message-level field to + indicate the message level + (Note or + Warning) + + + source + + Text to log/emit in the source field to identify the + “source” to which the notification/warning relates. + This can be any arbitrary string, but because the + message lacks line and column numbers to identify the + exact part of the source document to which it + relates, the intention is that the value you pass + into the source parameter should + give the user some way to identify the portion of + their source document on which to take potentially + take action in response to the log message (for + example, to edit, change, or add content). + So the source value should be, + for example, an ID, book/chapter/article title, title + of some formal object, or even a string giving an + XPath expression. + + + context-desc + + Text to log/emit in the context-description field to + describe the context for the message. + + + context-desc-field-length + + Specifies length of the context-description field + (in characters); default is 12 + If the text specified by the + context-desc parameter is longer + than the number of characters specified in + context-desc-field-length, it is + truncated to context-desc-field-length + (12 characters by default). + If the specified text is shorter than + context-desc-field-length, + it is right-padded out to + context-desc-field-length (12 by + default). + If no value has been specified for the + context-desc parameter, the field is + left empty and the text of the log message begins with + the value of the message + parameter. + + + message + + Text to log/emit in the actual message field + + + message-field-length + + Specifies length of the message + field (in characters); default is 45 + + + + + + Outputs a message (generally, to standard error). + + + + + + 12 + + + + right + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + right + + + + + + + + + : + + + + : + + + + + + + + + + Gets a title from the current document + + The get.doc.title template is a + utility template for returning the first title found in the + current document. + + + Returns a string containing some identifying title for the + current document . + + + + + + + + + + + + + + + Right-pads or left-pads a string out to a certain length + + This function takes string padVar and + pads it out in the direction rightLeft to + the string-length length, using string + padChar (a space character by default) as + the padding string (note that padChar can + be a string; it is not limited to just being a single + character). + + This function began as a copy of Nate Austin's + prepend-pad function in the Padding + Content section of Dave Pawson's XSLT + FAQ. + + + + Returns a (padded) string. + + + + + + left + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/common/vi.xml b/bash/templates/build-aux/docbook-xsl/common/vi.xml new file mode 100644 index 0000000..6eab6ff --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/vi.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/xh.xml b/bash/templates/build-aux/docbook-xsl/common/xh.xml new file mode 100644 index 0000000..dfdf92f --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/xh.xml @@ -0,0 +1,1288 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Symbols +A +a +À +à +Á +á +Â +â +Ã +ã +Ä +ä +Å +å +Ā +ā +Ă +ă +Ą +ą +Ǎ +ǎ +Ǟ +ǟ +Ǡ +ǡ +Ǻ +ǻ +Ȁ +ȁ +Ȃ +ȃ +Ȧ +ȧ + + + + + + + + + + + + + + + + + + + + + + + + + + + +B +b +ƀ +Ɓ +ɓ +Ƃ +ƃ + + + + + + +C +c +Ç +ç +Ć +ć +Ĉ +ĉ +Ċ +ċ +Č +č +Ƈ +ƈ +ɕ + + +D +d +Ď +ď +Đ +đ +Ɗ +ɗ +Ƌ +ƌ +Dž +Dz +ȡ +ɖ + + + + + + + + + + +E +e +È +è +É +é +Ê +ê +Ë +ë +Ē +ē +Ĕ +ĕ +Ė +ė +Ę +ę +Ě +ě +Ȅ +ȅ +Ȇ +ȇ +Ȩ +ȩ + + + + + + + + + + + + + + + + + +ế + + + + + + + + +F +f +Ƒ +ƒ + + +G +g +Ĝ +ĝ +Ğ +ğ +Ġ +ġ +Ģ +ģ +Ɠ +ɠ +Ǥ +ǥ +Ǧ +ǧ +Ǵ +ǵ + + +H +h +Ĥ +ĥ +Ħ +ħ +Ȟ +ȟ +ɦ + + + + + + + + + + + +I +i +Ì +ì +Í +í +Î +î +Ï +ï +Ĩ +ĩ +Ī +ī +Ĭ +ĭ +Į +į +İ +Ɨ +ɨ +Ǐ +ǐ +Ȉ +ȉ +Ȋ +ȋ + + + + + + + + +J +j +Ĵ +ĵ +ǰ +ʝ +K +k +Ķ +ķ +Ƙ +ƙ +Ǩ +ǩ + + + + + + +L +l +Ĺ +ĺ +Ļ +ļ +Ľ +ľ +Ŀ +ŀ +Ł +ł +ƚ +Lj +ȴ +ɫ +ɬ +ɭ + + + + + + + + +M +m +ɱ + +ḿ + + + + +N +n +Ñ +ñ +Ń +ń +Ņ +ņ +Ň +ň +Ɲ +ɲ +ƞ +Ƞ +Nj +Ǹ +ǹ +ȵ +ɳ + + + + + + + + +O +o +Ò +ò +Ó +ó +Ô +ô +Õ +õ +Ö +ö +Ø +ø +Ō +ō +Ŏ +ŏ +Ő +ő +Ɵ +Ơ +ơ +Ǒ +ǒ +Ǫ +ǫ +Ǭ +ǭ +Ǿ +ǿ +Ȍ +ȍ +Ȏ +ȏ +Ȫ +ȫ +Ȭ +ȭ +Ȯ +ȯ +Ȱ +ȱ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +P +p +Ƥ +ƥ + + + + +Q +q +ʠ +R +r +Ŕ +ŕ +Ŗ +ŗ +Ř +ř +Ȑ +ȑ +Ȓ +ȓ +ɼ +ɽ +ɾ + + + + + + + + +S +s +Ś +ś +Ŝ +ŝ +Ş +ş +Š +š +Ș +ș +ʂ + + + + + + + + + + +T +t +Ţ +ţ +Ť +ť +Ŧ +ŧ +ƫ +Ƭ +ƭ +Ʈ +ʈ +Ț +ț +ȶ + + + + + + + + + +U +u +Ù +ù +Ú +ú +Û +û +Ü +ü +Ũ +ũ +Ū +ū +Ŭ +ŭ +Ů +ů +Ű +ű +Ų +ų +Ư +ư +Ǔ +ǔ +Ǖ +ǖ +Ǘ +ǘ +Ǚ +ǚ +Ǜ +ǜ +Ȕ +ȕ +Ȗ +ȗ + + + + + + + + + + + + + + + + + + + + + + + + +V +v +Ʋ +ʋ + + + +ṿ +W +w +Ŵ +ŵ + + + + + + + + + + + +X +x + + + + +Y +y +Ý +ý +ÿ +Ÿ +Ŷ +ŷ +Ƴ +ƴ +Ȳ +ȳ + + + + + + + + + + + +Z +z +Ź +ź +Ż +ż +Ž +ž +Ƶ +ƶ +Ȥ +ȥ +ʐ +ʑ + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/zh.xml b/bash/templates/build-aux/docbook-xsl/common/zh.xml new file mode 100644 index 0000000..699a3ce --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/zh.xml @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +符号 +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/zh_cn.xml b/bash/templates/build-aux/docbook-xsl/common/zh_cn.xml new file mode 100644 index 0000000..ed1f0dc --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/zh_cn.xml @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +符号 +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/zh_tw.xml b/bash/templates/build-aux/docbook-xsl/common/zh_tw.xml new file mode 100644 index 0000000..3f6004b --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/common/zh_tw.xml @@ -0,0 +1,719 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +符號 +A +a +B +b +C +c +D +d +E +e +F +f +G +g +H +h +I +i +J +j +K +k +L +l +M +m +N +n +O +o +P +p +Q +q +R +r +S +s +T +t +U +u +V +v +W +w +X +x +Y +y +Z +z + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/epub/README b/bash/templates/build-aux/docbook-xsl/epub/README new file mode 100644 index 0000000..5e2587a --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/epub/README @@ -0,0 +1,88 @@ +---------------------------------------------------------------------- + README file for the DocBook XSL Stylesheets +---------------------------------------------------------------------- + +These are XSL stylesheets for transforming DocBook XML document +instances into .epub format. + +.epub is an open standard of the The International Digital Publishing Forum (IDPF), +a the trade and standards association for the digital publishing industry. + +An alpha-quality reference implementation (dbtoepub) for a DocBook to .epub +converter (written in Ruby) is available under bin/. + +From http://idpf.org + What is EPUB, .epub, OPS/OCF & OEB? + + ".epub" is the file extension of an XML format for reflowable digital + books and publications. ".epub" is composed of three open standards, + the Open Publication Structure (OPS), Open Packaging Format (OPF) and + Open Container Format (OCF), produced by the IDPF. "EPUB" allows + publishers to produce and send a single digital publication file + through distribution and offers consumers interoperability between + software/hardware for unencrypted reflowable digital books and other + publications. The Open eBook Publication Structure or "OEB", + originally produced in 1999, is the precursor to OPS. + +---------------------------------------------------------------------- +.epub Constraints +---------------------------------------------------------------------- + +.epub does not support all of the image formats that DocBook supports. +When an image is available in an accepted format, it will be used. The +accepted @formats are: 'GIF','GIF87a','GIF89a','JPEG','JPG','PNG','SVG' +A mime-type for the image will be guessed from the file extension, +which may not work if your file extensions are non-standard. + +Non-supported elements: + * + * , , , with text/XML + @filerefs + * + * in lists (generic XHTML rendering inability) + * (just make your programlistings + siblings, rather than descendents of paras) + +---------------------------------------------------------------------- +dbtoepub Reference Implementation +---------------------------------------------------------------------- + +An alpha-quality DocBook to .epub conversion program, dbtoepub, is provided +in bin/dbtoepub. + +This tool requires: + - 'xsltproc' in your PATH + - 'zip' in your PATH + - Ruby 1.8.4+ + +Windows compatibility has not been extensively tested; bug reports encouraged. +[See http://www.zlatkovic.com/libxml.en.html and http://unxutils.sourceforge.net/] + +$ dbtoepub --help + Usage: dbtoepub [OPTIONS] [DocBook Files] + + dbtoepub converts DocBook and
    s into to .epub files. + + .epub is defined by the IDPF at www.idpf.org and is made up of 3 standards: + - Open Publication Structure (OPS) + - Open Packaging Format (OPF) + - Open Container Format (OCF) + + Specific options: + -d, --debug Show debugging output. + -h, --help Display usage info + -v, --verbose Make output verbose + + +---------------------------------------------------------------------- +Validation +---------------------------------------------------------------------- + +The epubcheck project provides limited validation for .epub documents. +See http://code.google.com/p/epubcheck/ for details. + +---------------------------------------------------------------------- +Copyright information +---------------------------------------------------------------------- +See the accompanying file named COPYING. + diff --git a/bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub b/bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub new file mode 100755 index 0000000..9976f81 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub @@ -0,0 +1,76 @@ +#!/usr/bin/env ruby +# This program converts DocBook documents into .epub files. +# +# Usage: dbtoepub [OPTIONS] [DocBook Files] +# +# .epub is defined by the IDPF at www.idpf.org and is made up of 3 standards: +# - Open Publication Structure (OPS) +# - Open Packaging Format (OPF) +# - Open Container Format (OCF) +# +# Specific options: +# -c, --css [FILE] Use FILE for CSS on generated XHTML. +# -d, --debug Show debugging output. +# -f, --font [OTF FILE] Embed OTF FILE in .epub. +# -h, --help Display usage info. +# -s, --stylesheet [XSL FILE] Use XSL FILE as a customization +# layer (imports epub/docbook.xsl). +# -v, --verbose Make output verbose. + +lib = File.expand_path(File.join(File.dirname(__FILE__), 'lib')) +$LOAD_PATH.unshift(lib) if File.exist?(lib) + +require 'fileutils' +require 'optparse' +require 'tmpdir' + +require 'docbook' + +verbose = false +debug = false +css_file = nil +otf_files = [] +customization_layer = nil +output_file = nil + +#$DEBUG=true + +# Set up the OptionParser +opts = OptionParser.new +opts.banner = "Usage: #{File.basename($0)} [OPTIONS] [DocBook Files] + +#{File.basename($0)} converts DocBook and
    s into to .epub files. + +.epub is defined by the IDPF at www.idpf.org and is made up of 3 standards: +- Open Publication Structure (OPS) +- Open Packaging Format (OPF) +- Open Container Format (OCF) + +Specific options:" +opts.on("-c", "--css [FILE]", "Use FILE for CSS on generated XHTML.") {|f| css_file = f} +opts.on("-d", "--debug", "Show debugging output.") {debug = true; verbose = true} +opts.on("-f", "--font [OTF FILE]", "Embed OTF FILE in .epub.") {|f| otf_files << f} +opts.on("-h", "--help", "Display usage info.") {puts opts.to_s; exit 0} +opts.on("-o", "--output [OUTPUT FILE]", "Output ePub file as OUTPUT FILE.") {|f| output_file = f} +opts.on("-s", "--stylesheet [XSL FILE]", "Use XSL FILE as a customization layer (imports epub/docbook.xsl).") {|f| customization_layer = f} +opts.on("-v", "--verbose", "Make output verbose.") {verbose = true} + +db_files = opts.parse(ARGV) +if db_files.size == 0 + puts opts.to_s + exit 0 +end + +db_files.each {|docbook_file| + dir = File.expand_path(File.join(Dir.tmpdir, ".epubtmp#{Time.now.to_f.to_s}")) + FileUtils.mkdir_p(dir) + e = DocBook::Epub.new(docbook_file, dir, css_file, customization_layer, otf_files) + + if output_file + epub_file = output_file + else + epub_file = File.basename(docbook_file, ".xml") + ".epub" + end + puts "Rendering DocBook file #{docbook_file} to #{epub_file}" if verbose + e.render_to_file(epub_file) +} diff --git a/bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb b/bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb new file mode 100755 index 0000000..14110d6 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb @@ -0,0 +1,227 @@ +require 'fileutils' +require 'rexml/parsers/pullparser' + +module DocBook + + class Epub + CHECKER = "epubcheck" + STYLESHEET = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', "docbook.xsl")) + CALLOUT_PATH = File.join('images', 'callouts') + CALLOUT_FULL_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', CALLOUT_PATH)) + CALLOUT_LIMIT = 15 + CALLOUT_EXT = ".png" + XSLT_PROCESSOR = "xsltproc" + OUTPUT_DIR = ".epubtmp#{Time.now.to_f.to_s}" + MIMETYPE = "application/epub+zip" + META_DIR = "META-INF" + OEBPS_DIR = "OEBPS" + ZIPPER = "zip" + + attr_reader :output_dir + + def initialize(docbook_file, output_dir=OUTPUT_DIR, css_file=nil, customization_layer=nil, embedded_fonts=[]) + @docbook_file = docbook_file + @output_dir = output_dir + @meta_dir = File.join(@output_dir, META_DIR) + @oebps_dir = File.join(@output_dir, OEBPS_DIR) + @css_file = css_file ? File.expand_path(css_file) : css_file + @embedded_fonts = embedded_fonts + @to_delete = [] + + if customization_layer + @stylesheet = File.expand_path(customization_layer) + else + @stylesheet = STYLESHEET + end + + unless File.exist?(@docbook_file) + raise ArgumentError.new("File #{@docbook_file} does not exist") + end + end + + def render_to_file(output_file, verbose=false) + render_to_epub(output_file, verbose) + bundle_epub(output_file, verbose) + cleanup_files(@to_delete) + end + + def self.invalid?(file) + # Obnoxiously, we can't just check for a non-zero output... + cmd = %Q(#{CHECKER} "#{file}") + output = `#{cmd} 2>&1` + + if $?.to_i == 0 + return false + else + STDERR.puts output if $DEBUG + return output + end + end + + private + def render_to_epub(output_file, verbose) + @collapsed_docbook_file = collapse_docbook() + + chunk_quietly = "--stringparam chunk.quietly " + (verbose ? '0' : '1') + callout_path = "--stringparam callout.graphics.path #{CALLOUT_PATH}/" + callout_limit = "--stringparam callout.graphics.number.limit #{CALLOUT_LIMIT}" + callout_ext = "--stringparam callout.graphics.extension #{CALLOUT_EXT}" + html_stylesheet = "--stringparam html.stylesheet #{File.basename(@css_file)}" if @css_file + base = "--stringparam base.dir #{OEBPS_DIR}/" + unless @embedded_fonts.empty? + embedded_fonts = @embedded_fonts.map {|f| File.basename(f)}.join(',') + font = "--stringparam epub.embedded.fonts \"#{embedded_fonts}\"" + end + meta = "--stringparam epub.metainf.dir #{META_DIR}/" + oebps = "--stringparam epub.oebps.dir #{OEBPS_DIR}/" + options = [chunk_quietly, + callout_path, + callout_limit, + callout_ext, + base, + font, + meta, + oebps, + html_stylesheet, + ].join(" ") + # Double-quote stylesheet & file to help Windows cmd.exe + db2epub_cmd = %Q(cd "#{@output_dir}" && #{XSLT_PROCESSOR} #{options} "#{@stylesheet}" "#{@collapsed_docbook_file}") + STDERR.puts db2epub_cmd if $DEBUG + success = system(db2epub_cmd) + raise "Could not render as .epub to #{output_file} (#{db2epub_cmd})" unless success + @to_delete << Dir["#{@meta_dir}/*"] + @to_delete << Dir["#{@oebps_dir}/*"] + end + + def bundle_epub(output_file, verbose) + + quiet = verbose ? "" : "-q" + mimetype_filename = write_mimetype() + meta = File.basename(@meta_dir) + oebps = File.basename(@oebps_dir) + images = copy_images() + csses = copy_csses() + fonts = copy_fonts() + callouts = copy_callouts() + # zip -X -r ../book.epub mimetype META-INF OEBPS + # Double-quote stylesheet & file to help Windows cmd.exe + zip_cmd = %Q(cd "#{@output_dir}" && #{ZIPPER} #{quiet} -X -r "#{File.expand_path(output_file)}" "#{mimetype_filename}" "#{meta}" "#{oebps}") + puts zip_cmd if $DEBUG + success = system(zip_cmd) + raise "Could not bundle into .epub file to #{output_file}" unless success + end + + # Input must be collapsed because REXML couldn't find figures in files that + # were XIncluded or added by ENTITY + # http://sourceforge.net/tracker/?func=detail&aid=2750442&group_id=21935&atid=373747 + def collapse_docbook + # Double-quote stylesheet & file to help Windows cmd.exe + collapsed_file = File.join(File.expand_path(File.dirname(@docbook_file)), + '.collapsed.' + File.basename(@docbook_file)) + entity_collapse_command = %Q(xmllint --loaddtd --noent -o "#{collapsed_file}" "#{@docbook_file}") + entity_success = system(entity_collapse_command) + raise "Could not collapse named entites in #{@docbook_file}" unless entity_success + + xinclude_collapse_command = %Q(xmllint --xinclude -o "#{collapsed_file}" "#{collapsed_file}") + xinclude_success = system(xinclude_collapse_command) + raise "Could not collapse XIncludes in #{@docbook_file}" unless xinclude_success + + @to_delete << collapsed_file + return collapsed_file + end + + def copy_callouts + new_callout_images = [] + if has_callouts? + calloutglob = "#{CALLOUT_FULL_PATH}/*#{CALLOUT_EXT}" + Dir.glob(calloutglob).each {|img| + img_new_filename = File.join(@oebps_dir, CALLOUT_PATH, File.basename(img)) + + # TODO: What to rescue for these two? + FileUtils.mkdir_p(File.dirname(img_new_filename)) + FileUtils.cp(img, img_new_filename) + @to_delete << img_new_filename + new_callout_images << img + } + end + return new_callout_images + end + + def copy_fonts + new_fonts = [] + @embedded_fonts.each {|font_file| + font_new_filename = File.join(@oebps_dir, File.basename(font_file)) + FileUtils.cp(font_file, font_new_filename) + new_fonts << font_file + } + return new_fonts + end + + def copy_csses + if @css_file + css_new_filename = File.join(@oebps_dir, File.basename(@css_file)) + FileUtils.cp(@css_file, css_new_filename) + end + end + + def copy_images + image_references = get_image_refs() + new_images = [] + image_references.each {|img| + # TODO: It'd be cooler if we had a filetype lookup rather than just + # extension + if img =~ /\.(svg|png|gif|jpe?g|xml)/i + img_new_filename = File.join(@oebps_dir, img) + img_full = File.join(File.expand_path(File.dirname(@docbook_file)), img) + + # TODO: What to rescue for these two? + FileUtils.mkdir_p(File.dirname(img_new_filename)) + puts(img_full + ": " + img_new_filename) if $DEBUG + FileUtils.cp(img_full, img_new_filename) + @to_delete << img_new_filename + new_images << img_full + end + } + return new_images + end + + def write_mimetype + mimetype_filename = File.join(@output_dir, "mimetype") + File.open(mimetype_filename, "w") {|f| f.print MIMETYPE} + @to_delete << mimetype_filename + return File.basename(mimetype_filename) + end + + def cleanup_files(file_list) + file_list.flatten.each {|f| + # Yikes + FileUtils.rm_r(f, :force => true ) + } + end + + # Returns an Array of all of the (image) @filerefs in a document + def get_image_refs + parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file)) + image_refs = [] + while parser.has_next? + el = parser.pull + if el.start_element? and (el[0] == "imagedata" or el[0] == "graphic") + image_refs << el[1]['fileref'] + end + end + return image_refs.uniq + end + + # Returns true if the document has code callouts + def has_callouts? + parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file)) + while parser.has_next? + el = parser.pull + if el.start_element? and (el[0] == "calloutlist" or el[0] == "co") + return true + end + end + return false + end + end +end diff --git a/bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl b/bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl new file mode 100644 index 0000000..575bb74 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl @@ -0,0 +1,15 @@ + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/epub/docbook.xsl b/bash/templates/build-aux/docbook-xsl/epub/docbook.xsl new file mode 100644 index 0000000..29d7fc8 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/epub/docbook.xsl @@ -0,0 +1,1835 @@ + + + + + + + + + + 1 + 2 + + book toc,title + + + + + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + / + + + + + + + + ncxtoc + htmltoc + + + + + + 0 + + + + + + + + .png + + + + + + + + + + + + + + + + 1 + + + 1 + + + 1 + + + 1 + + + 0 + + + + + + + + + + + + + + + + + Note + + + namesp. add + + + added namespace before processing + + + + + + + + + Unable to add the namespace from DB4 document, + cannot proceed. + + + + + + + + + ID ' + + ' not found in document. + + + + + + + + + Formatting from + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + urn: + + : + + + + + urn:isbn: + + + + urn:issn: + + + + + + + + + + + + + + + + + + + + + + + + + _ + + + + + + + + + + + + + + + + + + + + + + + + + + ../ + + + + + + + + + + + 2.0 + + + + + + + + + + + + + + + + + + + + + + cover + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1.0 + + + + + + + application/oebps-package+xml + + + + + + + + + + + + + + + + + + + + + + + + + 2005-1 + + + + + + cover + + + + + + + dtb:uid + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Y-m-d + + + + + + + + + + + + + + + + + + : + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + © + + + + + + + + + + + + + + + + + + cover + Cover + + + + + + + + + + + toc + Table of Contents + + + + + + + + + + + + + + + + + + + yes + + + + + + + + + + + + + + + + + + + + + + + + + + + + yes + + no + + + + + + + + + + + + + + + + + + + + + + + + + + + + + application/x-dtbncx+xml + + + + + + + application/xhtml+xml + + + + + + + + + + + + + + + + + + + + + application/xhtml+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + image/gif + + + image/gif + + + image/png + + + image/png + + + image/jpeg + + + image/jpeg + + + image/jpeg + + + image/jpeg + + + image/svg+xml + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + WARNING: mediaobjectco almost certainly will not render as expected in .epub! + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + application/xhtml+xml + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + (missing alt) + + + + + + + + + + + + + + text-align: + + middle + + + + + + + + + + + + + + + + + + + + + + 1 + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + 1 + 1 + 1 + 1 + 1 + + 1 + + 1 + 1 + 1 + 1 + 1 + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No insertfile extension available. + + + + + + + + No insertfile extension available. Use a different processor (with extensions) or turn on $use.extensions and $textinsert.extension (see docs for more). + + + + + + + + + + + + + + + + + + + + + + + + + + + + Cover + + text/css + + img { max-width: 100%; } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + -toc + + + + + + + + + + + + + + + + + + + + + + + + font/opentype + + + + WARNING: OpenType fonts should be supplied! ( + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + clear: both + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + 1 + + + + + + + 1 + 2 + 3 + 4 + 5 + + + + + + + + + + + + + + + + + + + + + + + + 6 + 5 + 4 + 3 + 2 + 1 + + + + + title + + + + + + + + + + + + + + + + + http://www.idpf.org/2007/opf + + + + + + + text/css + + html-css + + + + + + + + + + + + + + + + + + + text/css + + html-css + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/lib/build.xml b/bash/templates/build-aux/docbook-xsl/lib/build.xml new file mode 100644 index 0000000..06180f5 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/lib/build.xml @@ -0,0 +1,24 @@ + + + + + + + + + + + Building XSLT library... + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/lib/lib.xsl b/bash/templates/build-aux/docbook-xsl/lib/lib.xsl new file mode 100644 index 0000000..e65776a --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/lib/lib.xsl @@ -0,0 +1,526 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + http://... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unrecognized unit of measure: + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unrecognized unit of measure: + + . + + + + + + + filename + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl new file mode 100644 index 0000000..bac7463 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl @@ -0,0 +1,133 @@ + + + + + + + 25 + + + + + + + + + + + + + + + + + + note + warning + caution + tip + important + note + + + + + + + + Note + Warning + Caution + Tip + Important + Note + + + + + + + + + +
    + + + + + + + + + + + + + + + : + + + + + + + + + + + +
    + + [{$alt}] + + + + + + + + + +
    + +
    +
    +
    + + +
    + + + + + + + + + + + +

    + + +

    +
    + + +
    +
    + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl new file mode 100644 index 0000000..03f9d81 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + <xsl:copy-of select="$title"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Note + + + namesp. add + + + added namespace before processing + + + + + + + + + Unable to add the namespace from DB4 document, + cannot proceed. + + + + + + + + + ID ' + + ' not found in document. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl new file mode 100644 index 0000000..82faaa4 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl @@ -0,0 +1,324 @@ + + + + + + + + +Walsh +Norman +19992000 +Norman Walsh + + +HTML EBNF Reference + + +
    Introduction + +This is technical reference documentation for the DocBook XSL +Stylesheets; it documents (some of) the parameters, templates, and +other elements of the stylesheets. + +This reference describes the templates and parameters relevant +to formatting EBNF markup. + +This is not intended to be user documentation. +It is provided for developers writing customization layers for the +stylesheets, and for anyone who's interested in how it +works. + +Although I am trying to be thorough, this documentation is known +to be incomplete. Don't forget to read the source, too :-) +
    +
    +
    + + + + + + + background-color: + + + + + 1 + + + + + + EBNF + + for + + + + + + + + + + + + +
    + + +
    + + + background-color: + + + + + + + EBNF productions + +
    +
    +
    + + + + + + + + + + [ + + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + Error: no ID for productionrecap linkend: + + . + + + + + + Warning: multiple "IDs" for productionrecap linkend: + + . + + + + + + + + + + + + + + + + | +
    +
    +
    + + + + + + + + + + + + + + + production + + + + + + + + + Non-terminals with no content must point to + production elements in the current document. + + + Invalid xpointer for empty nt: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ??? + + + + + + + + + + + + + /*  + +  */ +
    +
    + + + + + + + + + constraintdef + + + + + + + + + + + + + + + + : + + + + + + + : + + + + + + + + + +  ] + +
    +
    +
    + + +
    + + + + +
    +
    + + +

    +
    + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl new file mode 100644 index 0000000..ba50093 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl @@ -0,0 +1,325 @@ + + + + + + + + + + + + + #ftn. + + + + + + + + + + + + + + + + + [ + + ] + + + + + + + + + + +ERROR: A footnoteref element has a linkend that points to an element that is not a footnote. +Typically this happens when an id attribute is accidentally applied to the child of a footnote element. +target element: +linkend/id: + + + + + + + + + + + + #ftn. + + + + + + + + + [ + + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # + + + + + + + + + + + + + + + + + [ + + ] + + + + + + + + + + + + + ftn. + + + + + + # + + + + + + + + + + + + + + + + + + + + + [ + + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + +
    +
    + + +
    +
    +

    The following annotations are from this essay. You are seeing + them here because your browser doesn’t support the user-interface + techniques used to make them appear as ‘popups’ on modern browsers.

    +
    + + +
    +
    +
    + + + + + + + + + + + + ftn. + + + + + + + +
    + + +
    +
    + + +
    + + + + +
    +
    + + + + Warning: footnote number may not be generated + correctly; + + unexpected as first child of footnote. + +
    + + + +
    +
    +
    +
    + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl new file mode 100644 index 0000000..0c34c76 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl @@ -0,0 +1,489 @@ + + + + +1 + + + + + + + + + + +
    + + + + + + + + + + +
    + +
    + + + + + +

    + + +

    +

    + + + + + + + +
    +
    + +
    +
    +
    + + + + + + + + + -float + + + + + + + + + +
    + + + + + + + + + + + + + +
    + +
    +
    + +

    + + + +

    +
    +
    +
    + + + + + + + +
    + +

    + + + + + + + + +

    +

    +
    + + + + + + + + + -float + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + before + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + before + + + + + + + + + +
    + + + + + + + + + + + + +
    + +
    + + + +

    + + +

    + +

    + +
    + + + + + +
    +
    + +
    +
    +
    + + + + + + + + + -float + + + + + + + + + +
    + + + + Broken table: tr descendent of CALS Table. + + + + + + + + + + before + + + + + + + + + + + + + + + + + + + + + + + + + Broken table: row descendent of HTML table. + + + + + + + + + + + + + + + + + + + + + + + + before + + + + + + + + + + + + + + + + + + + + + before + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + float: + + ; + + + +
    +
    + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl new file mode 100644 index 0000000..ad0d38c --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl @@ -0,0 +1,598 @@ + + + + + + + + + + + + + + + normalize.sort.input + + + + + + normalize.sort.output + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + +
    +
    + + + +
    + + + + +
    +
    + + + + + + + + + + + + + + + + + + normalize.sort.input + + + + + + normalize.sort.output + + + +
    + + + + + + +
    + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + normalize.sort.input + + + + + + normalize.sort.output + + + + + +
    + + + + + + +
    + + + + + + + + + + +
    +
    +
    + + +

    + + +

    +
    + + + + + + + + +
    + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + ( + + ) + + + + + +
    +
    + +
    + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + ( + + ) + + +
    +
    + +
    + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + +
    +
    +
    + + +
    + + + + + + + + + , + + + + + , + + + + + , + + + + + + + + + + + +
    +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: glosssee @otherterm reference not found: + + + + + + + + + + + + + + +

    +
    +
    + + +
    + + + + + +

    + + + + + + + + + + + + + +

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: glossseealso @otherterm reference not found: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + normalize.sort.input + + + + + + normalize.sort.output + + + + + + + + + + + Warning: processing automatic glossary + without a glossary.collection file. + + + + + + Warning: processing automatic glossary but unable to + open glossary.collection file ' + + ' + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + +
    +
    + + + + + + + + + + + + + + + + + normalize.sort.input + + + + + + normalize.sort.output + + + + +
    + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl new file mode 100644 index 0000000..9f3b91f --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl @@ -0,0 +1,1524 @@ + + + + + + + + + + + + + 1 + + + + + + 1 + + + + + +
    + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 0 + + 1 + 0 + + + + + + 1.0 + 1.0 + + + + 1.0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + px + + + + + + + + + + + px + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + px + + + + + + + + + + + px + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text-align: + + middle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: imagemaps not supported + on scaled images + + + + 0 + + + + + + + + + + + + + text-align: + + middle + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + manufactured viewport for HTML img + + + cellpadding: 0; cellspacing: 0; + + + + + + + + + + + + + height: + + px + + + + + + + + + + + +
    + + + + + background-color: + + + + + background-color: + + + + + + + text-align: + + + + + + + + + +
    +
    + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + calspair + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + , + + , + + + + + + + + + + + + Warning: only calspair or + otherunits='imagemap' supported + in imageobjectco + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text-align: + + middle + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + text-align: + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No insertfile extension available. + + + + + + + Cannot insert + . Check use.extensions and textinsert.extension parameters. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + text-align: + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No insertfile extension available. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No insertfile extension available. + + + + + + + Cannot insert + . Check use.extensions and textinsert.extension parameters. + + + + + + + + +
    + + + + text-align: + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl new file mode 100644 index 0000000..8f46623 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl @@ -0,0 +1,81 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl new file mode 100644 index 0000000..d856d1b --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl @@ -0,0 +1,316 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + +
    + +
    + + + + + + + + + + +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl new file mode 100644 index 0000000..af5404a --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl @@ -0,0 +1,683 @@ + + + + + + + + + left + right + left + + + + + + right + left + right + + + + + + ltr + rtl + ltr + + + + + +div + +0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + # + + + + + + + + + # + + + + + + + + + + + + + + + + + + + bullet + + + + + + + + + bullet + + + © + + + ® + (SM) +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ID recommended on + + + : + + + + ... + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ERROR: no root element for CSS source file' + + '. + + + + + + + + + + + + + + + + + + + + + + + + + + + + ERROR: missing CSS input filename. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl new file mode 100644 index 0000000..288b0f9 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl @@ -0,0 +1,95 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + float: + + left + right + + + + + + + + + + + + + none + none + + ; + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl new file mode 100644 index 0000000..e94e7b7 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl @@ -0,0 +1,257 @@ + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    +
    +
    + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + +
    + + + + +
    + +
    +
    +
    + + +

    + + +

    +
    + + +

    + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + +
    +
    + + + + + + + + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    +
    +
    + + +
    + ( + + + + + + ) +
    +
    + + +
    + ( + + + + + + ) +
    +
    + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl new file mode 100644 index 0000000..e0a18b6 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl @@ -0,0 +1,41 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl new file mode 100644 index 0000000..3f1fe15 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl @@ -0,0 +1,1550 @@ + + + + + + + + + + + + + + + + + + + WARNING: nested link may be undefined in output: + < + + + + + @linkend = ' + + '> + + + @xlink:href = ' + + '> + + + nested inside parent element + + + + + + + + _blank + _top + + + + + + + + + + + + + + 1 + 0 + + + + + + + + + 1 + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XLink to nonexistent id: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + span + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + + + , + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + abbr + + + + + + acronym + + + + + + + + + + + + + + + + + + + + + + + + + + http://example.com/cgi-bin/man.cgi? + + ( + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + SM + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: glossary.collection specified, but there are + + automatic glossaries + + + + + + + + + + + + + + + + + + + + + + + + There's no entry for + + in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Error: no glossentry for glossterm: + + . + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + element + + + + + + + + + + + + + + + + </ + + > + + + & + + ; + + + &# + + ; + + + % + + ; + + + <? + + > + + + <? + + ?> + + + < + + > + + + < + + /> + + + <!-- + + --> + + + + + + + + + + + + + + + + + + + + + + < + + + + + + mailto: + + + + + + > + + + + + + + + + + + + + - + - + - + + + + + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [ + + + + + + + + + + + + + + + + + + + + ] + + + [ + + ] + + + + + + + + + + + + + [ + + + + + + + + + + + + ] + + + [ + + ] + + + + + + + + + + + + +

    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl new file mode 100644 index 0000000..4b82336 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl @@ -0,0 +1,103 @@ + + + + + + its-allowed-characters its-annotators-ref its-line-break-type its-loc-note its-loc-note-ref its-loc-note-type its-loc-quality-issue-comment its-loc-quality-issue-enabled its-loc-quality-issue-profile-ref its-loc-quality-issue-severity its-loc-quality-issue-type its-loc-quality-issues-ref its-loc-quality-rating-profile-ref its-loc-quality-rating-score its-loc-quality-rating-score-threshold its-loc-quality-rating-vote its-loc-quality-rating-vote-threshold its-locale-filter-list its-locale-filter-type its-mt-confidence its-org its-org-ref its-person its-person-ref its-prov-ref its-provenance-records-ref its-rev-org its-rev-org-ref its-rev-person its-rev-person-ref its-rev-tool its-rev-tool-ref its-storage-encoding its-storage-size its-ta-class-ref its-ta-confidence its-ta-ident its-ta-ident-ref its-ta-source its-term its-term-confidence its-term-info-ref its-tool its-tool-ref its-within-text + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Attribute is not recognized as ITS attribute. Ignoring. + + + + + + + + its- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl new file mode 100644 index 0000000..6a1f896 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + + + + + + + , + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl new file mode 100644 index 0000000..9651a43 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl @@ -0,0 +1,1206 @@ + + + + + + + + + + + + compact + + + + + + + + + list-style-type: + + ; + + +
    + + + + + + + + + + +
      + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + circle + disc + square + + + + + + +
  • + + + + + list-style-type: + + + + + + + + + + + +
    + +
    +
    + + + +
    +
  • +
    + + + + + + + compact + + + + + + + + + + + + + + 1 + a + i + A + I + + + + Unexpected numeration: + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + +
      + + + + Strict XHTML does not allow setting @start attribute for lists! + + + + +
    +
    +
    +
    +
    + + + + + + +
  • + + + @override attribute cannot be set in strict XHTML output for listitem: + + + + + + + + +
    + +
    +
    + + + +
    +
  • +
    + + + + + + + + + + + + + + +
    + +
    +
    + + + +
    + + +
    + + + + + + + + + + compact + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + +
    + + + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + + + + + + +

    +
    +
    +
    + + +
    + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    +
    +
    +
    +
    +
    + + + + + + + + + +
    + +
    +
    + + + +
    +
    + + + + + + + + + Simple list + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + Simple list + + + + + + + + + + 1 + + + +
    +
    + + + + + + Simple list + + + + + + + + + + 1 + + + +
    +
    + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + + 1 + + + + + + + + +   + + + + + + + + + + + + + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 1 + 1 + + 1 + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + before + + + + + + + + + +
    + + + + + 0 + 1 + + + + + + + 0 + 1 + + + + + + + + + + + + +
      + + +
    +
    + +
      + + + +
    +
    +
    + + + + +
    +
    + + + + + + + + + + + + +
      + + + +
    +
    + + +
  • + + + + +
  • +
    + + + +
      + + + +
    +
    + + +

    + + + + +

    +
    + + + + + + + + +
    + + + + + + + + + + + + + + + + + + +
    +
    + + +
    + + + + + + + +
    +
    + + + + + + + + + +
    + + + + +
    +
    + + + + + + + + +
    + + + + + + : + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + Callout list + + +
    +
    + +
    + + +
    +
    +
    +
    +
    + + + + + + + + + + + + + + + + +

    + + + + +

    + + + + + +
    + +
    + + + + + +
    +
    +
    +
    +
    + + + + + + + + + +

    + + + + + + + + + + + + + + + + +

    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ??? + + + + + # + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ??? + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl new file mode 100644 index 0000000..a95dcc9 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl @@ -0,0 +1,86 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + filename=" + + " + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl new file mode 100644 index 0000000..183cc0e --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl @@ -0,0 +1,17 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl new file mode 100644 index 0000000..a7dad8b --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl @@ -0,0 +1,280 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unsupported TeX math notation: + + + + + + + + + + + + + \nopagenumbers + + + + + \bye + + + + + + + + + + + + + + + + + + + + + + + + \special{dvi2bitmap outputfile + + } + + + $ + + + + $ + + + \vfill\eject + + + + + + + + + + + + + + + + + + + + + + + + + \special{dvi2bitmap outputfile + + } + + + $$ + + + + $$ + + + \vfill\eject + + + + + + + + + + \documentclass{article} + + \pagestyle{empty} + + \begin{document} + + + + + \end{document} + + + + + + + + + + + + + + + + + + + + + + + + \special{dvi2bitmap outputfile + + } + + + $ + + + + $ + + + \newpage + + + + + + + + + + + + + + + + + + + + + + + + + \special{dvi2bitmap outputfile + + } + + + $$ + + + + $$ + + + \newpage + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + 0 + 1 + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl new file mode 100644 index 0000000..ab9171d --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl @@ -0,0 +1,171 @@ + + + + + + + + + + + + + +Encoding used in generated HTML pages + +This encoding is used in files generated by chunking stylesheet. Currently +only Saxon is able to change output encoding. + + + + + + + + + +Saxon character representation used in generated HTML pages + +This character representation is used in files generated by chunking stylesheet. If +you want to suppress entity references for characters with direct representation +in default.encoding, set this parameter to value native. + + + + + + + + + + + + + + + + + + + + + + + + Chunking isn't supported with + + + + + + + + + + + + + + + Writing + + + for + + + ( + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Can't make chunks with + + 's processor. + + + + + + + + + + + + + + + + Writing + + + for + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Can't make chunks with + + 's processor. + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl new file mode 100644 index 0000000..5925388 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + +1 + + + + # + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl new file mode 100644 index 0000000..9fcc054 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl @@ -0,0 +1,452 @@ + + + + + + +.png + +images/ + + + + + + +/* ====================================================================== + Annotations +*/ + +div.annotation-list { visibility: hidden; + } + +div.annotation-nocss { position: absolute; + visibility: hidden; + } + +div.annotation-popup { position: absolute; + z-index: 4; + visibility: hidden; + padding: 0px; + margin: 2px; + border-style: solid; + border-width: 1px; + width: 200px; + background-color: white; + } + +div.annotation-title { padding: 1px; + font-weight: bold; + border-bottom-style: solid; + border-bottom-width: 1px; + color: white; + background-color: black; + } + +div.annotation-body { padding: 2px; + } + +div.annotation-body p { margin-top: 0px; + padding-top: 0px; + } + +div.annotation-close { position: absolute; + top: 2px; + right: 2px; + } + + +http://cdn.docbook.org/release/xsl/images/annot-close.png +http://cdn.docbook.org/release/xsl/images/annot-open.png + + +http://cdn.docbook.org/release/xsl/script/AnchorPosition.js http://cdn.docbook.org/release/xsl/script/PopupWindow.js + + +A + + +. + + +. +http://cdn.docbook.org/release/xsl/bibliography/bibliography.xml + + +normal + + +60 +.png + + +15 + +images/callouts/ + + +10 +10102 + + + + + + + + + + + + +no + +1 + + + + + + left + before + + + +all + + +docbook.css.xml +no +images/draft.png + +::= + + + + +#F5DCB3 + + +com.example.help +DocBook Online Help Sample +Example provider +1 + + + + + + 1 + 0 + + + + +1 + + + +figure before +example before +equation before +table before +procedure before +task before + + +kr + + + + + + + + + + + +appendix toc,title +article/appendix nop +article toc,title +book toc,title,figure,table,example,equation +chapter toc,title +part toc,title +preface toc,title +qandadiv toc +qandaset toc +reference toc,title +sect1 toc +sect2 toc +sect3 toc +sect4 toc +sect5 toc +section toc +set toc,title + + + + +no + + + + + + + + + + + + + +.html + + +copyright + + + +text/javascript + +text/css +alias.h + + + + + + + +User1 + + +User2 + + + + + + + + + +htmlhelp.chm + + +iso-8859-1 + + + + + +toc.hhc +5 + + +index.hhk +htmlhelp.hhp + +Main + +context.h + + + + + + + + + + + + + +basic + + + + + + + +no + +no +yes +iso-8859-1 + + +en + + + + +5 + + +3 + + + + + + + HTML.manifest + + + + ++ +.gif + +images/ +1 + + +6in + + +no + + + replace + +0 + +I + +90 +10 + + + + + + + + + + + + + + + + + +; + + + + + +. +number + + + + + + + + + + I +index + +. +.!?: + +8 + + + + + 0 + background-color: #E0E0E0 + + + + + + +0 + + + + + +solid + + + 1px + 0.5pt + + +a + + + +solid + + + 1px + 0.5pt + + + + olinkdb.xml +target.db + +tex-math-equations.tex + + + +dl +8 +2 + + + + + + + + + +0 +, +0 +docs +../common/ +index.html +1 +en +index.html + + + + writing-mode + + + + + + + + +: + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl new file mode 100644 index 0000000..c4dd5ae --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl @@ -0,0 +1,1230 @@ + + + + +HTML Processing Instruction Reference + + + + + Introduction + This is generated reference documentation for all + user-specifiable processing instructions (PIs) in the DocBook + XSL stylesheets for HTML output. + + You add these PIs at particular points in a document to + cause specific “exceptions” to formatting/output behavior. To + make global changes in formatting/output behavior across an + entire document, it’s better to do it by setting an + appropriate stylesheet parameter (if there is one). + + + + + + + + + Sets background color for an image + + Use the dbhtml background-color PI before or + after an image (graphic, inlinegraphic, + imagedata, or videodata element) as a + sibling to the element, to set a background color for the + image. + + + dbhtml background-color="color" + + + + background-color="color" + + An HTML color value + + + + + + Background color + + + + + + + + + + + + Sets background color on a CALS table row or table cell + + Use the dbhtml bgcolor PI as child of a CALS table row + or cell to set a background color for that table row or cell. + + + dbhtml bgcolor="color" + + + + bgcolor="color" + + An HTML color value + + + + + + Cell background color + + + + + + + + + + + + Specifies cellpadding in CALS table or qandaset output + + Use the dbhtml cellpadding PI as a child of a + CALS table or qandaset to specify the value + for the HTML cellpadding attribute in the + output HTML table. + + + dbhtml cellpadding="number" + + + + cellpadding="number" + + Specifies the cellpadding + + + + + + html.cellpadding + + + Cell spacing and cell padding, + Q and A formatting + + + + + + + + + + + + Specifies cellspacing in CALS table or qandaset output + + Use the dbhtml cellspacing PI as a child of a + CALS table or qandaset to specify the value + for the HTML cellspacing attribute in the + output HTML table. + + + dbhtml cellspacing="number" + + + + cellspacing="number" + + Specifies the cellspacing + + + + + + html.cellspacing + + + Cell spacing and cell padding, + Q and A formatting + + + + + + + + + + + + Set value of the class attribute for a CALS table row + + Use the dbhtml class PI as a child of a + row to specify a class + attribute and value in the HTML output for that row. + + + dbhtml class="name" + + + + class="name" + + Specifies the class name + + + + + + Table styles in HTML output + + + + + + + + + + + + Specifies a directory name in which to write files + + When chunking output, use the dbhtml dir PI + as a child of a chunk source to cause the output of that + chunk to be written to the specified directory; also, use it + as a child of a mediaobject to specify a + directory into which any long-description files for that + mediaobject will be written. + +The output directory specification is inherited by all +chunks of the descendants of the element. If descendants need +to go to a different directory, then add another +dbhtml dir processing +instruction as a child of the source element +for that chunk, and specify the path relative to the +ancestor path. + +For example, to put most chunk files into +shared +but one chapter into +exception +at the same level, use: + +<book> + <?dbhtml dir="shared"?> + ... + <chapter> + <?dbhtml dir="../exception"?> + </chapter> +</book> + + + + + + dbhtml dir="path" + + + + dir="path" + + Specifies the pathname for the directory + + + + + + base.dir + + + dbhtml dir processing instruction + + + + + + + + + + + + Specifies a filename for a chunk + +When chunking output, use the dbhtml filename + PI as a child of a chunk source to specify a filename for + the output file for that chunk. Include the filename suffix. + +You cannot include a directory path in the filename value, +or your links may not work. Add a +dbhtml dir processing instruction +to specify the output directory. You can also combine the two +specifications in one processing instruction: +dbhtml dir="mydir" filename="myfile.html". + + + + dbhtml filename="filename" + + + + filename="path" + + Specifies the filename for the file + + + + + + use.id.as.filename + + + dbhtml filenames + + + + + + + + + + + + Specifies presentation style for a funcsynopsis + + Use the dbhtml funcsynopsis-style PI as a child of + a funcsynopsis or anywhere within a funcsynopsis + to control the presentation style for output of all + funcprototype instances within that funcsynopsis. + + + dbhtml funcsynopsis-style="kr"|"ansi" + + + + funcsynopsis-style="kr" + + Displays funcprototype output in K&R style + + + funcsynopsis-style="ansi" + + Displays funcprototype output in ANSI style + + + + + + funcsynopsis.style + + + + + + + + + + + + Specifies a path to the location of an image file + + Use the dbhtml img.src.path PI before or + after an image (graphic, + inlinegraphic, imagedata, or + videodata element) as a sibling to the element, + to specify a path to the location of the image; in HTML + output, the value specified for the + img.src.path attribute is prepended to the + filename. + + + dbhtml img.src.path="path" + + + + img.src.path="path" + + Specifies the pathname to prepend to the name of the image file + + + + + + img.src.path + + + Using fileref + + + + + + + + + + + + Specifies the label width for a qandaset + + Use the dbhtml label-width PI as a child of a + qandaset to specify the width of labels. + + + dbhtml label-width="width" + + + + label-width="width" + + Specifies the label width (including units) + + + + + + Q and A formatting + + + + + + + + + + + + Specifies interval for line numbers in verbatims + + Use the dbhtml linenumbering.everyNth PI as a child + of a “verbatim” element – programlisting, + screen, synopsis — to specify + the interval at which lines are numbered. + + + dbhtml linenumbering.everyNth="N" + + + + linenumbering.everyNth="N" + + Specifies numbering interval; a number is output + before every Nth line + + + + + + linenumbering.everyNth + + + Line numbering + + + + + + + + + + + + Specifies separator text for line numbers in verbatims + + Use the dbhtml linenumbering.separator PI as a child + of a “verbatim” element – programlisting, + screen, synopsis — to specify + the separator text output between the line numbers and content. + + + dbhtml linenumbering.separator="text" + + + + linenumbering.separator="text" + + Specifies the text (zero or more characters) + + + + + + linenumbering.separator + + + Line numbering + + + + + + + + + + + + Specifies width for line numbers in verbatims + + Use the dbhtml linenumbering.width PI as a child + of a “verbatim” element – programlisting, + screen, synopsis — to specify + the width set aside for line numbers. + + + dbhtml linenumbering.width="width" + + + + linenumbering.width="width" + + Specifies the width (inluding units) + + + + + + linenumbering.width + + + Line numbering + + + + + + + + + + + + Specifies presentation style for a variablelist or + segmentedlist + + Use the dbhtml list-presentation PI as a child of + a variablelist or segmentedlist to + control the presentation style for the list (to cause it, for + example, to be displayed as a table). + + + dbhtml list-presentation="list"|"table" + + + + list-presentation="list" + + Displays the list as a list + + + list-presentation="table" + + Displays the list as a table + + + + + + + + variablelist.as.table + + + segmentedlist.as.table + + + + + Variable list formatting in HTML + + + + + + + + + + + + Specifies the width of a variablelist or simplelist + + Use the dbhtml list-width PI as a child of a + variablelist or a simplelist presented + as a table, to specify the output width. + + + dbhtml list-width="width" + + + + list-width="width" + + Specifies the output width (including units) + + + + + + Variable list formatting in HTML + + + + + + + + + + + + Specifies the height for a CALS table row + + Use the dbhtml row-height PI as a child of a + row to specify the height of the row. + + + dbhtml row-height="height" + + + + row-height="height" + + Specifies the row height (including units) + + + + + + Row height + + + + + + + + + + + + (obsolete) Sets the starting number on an ordered list + + This PI is obsolete. The intent of + this PI was to provide a means for setting a specific starting + number for an ordered list. Instead of this PI, set a value + for the override attribute on the first + listitem in the list; that will have the same + effect as what this PI was intended for. + + + dbhtml start="character" + + + + start="character" + + Specifies the character to use as the starting + number; use 0-9, a-z, A-Z, or lowercase or uppercase + Roman numerals + + + + + + List starting number + + + + + + + + + + + + Do not chunk any descendants of this element. + + When generating chunked HTML output, adding this PI as the child of an element that contains elements that would normally be generated on separate pages if generating chunked output causes chunking to stop at this point. No descendants of the current element will be split into new HTML pages: +<section> +<title>Configuring pencil</title> +<?dbhtml stop-chunking?> + +... + +</section> + + + + dbhtml stop-chunking + + + Chunking into multiple HTML files + + + + + + Specifies summary for CALS table, variablelist, segmentedlist, or qandaset output + + Use the dbhtml table-summary PI as a child of + a CALS table, variablelist, + segmentedlist, or qandaset to specify + the text for the HTML summary attribute + in the output HTML table. + + + dbhtml table-summary="text" + + + + table-summary="text" + + Specifies the summary text (zero or more characters) + + + + + + Variable list formatting in HTML, + Table summary text + + + + + + + + + + + + Specifies the width for a CALS table + + Use the dbhtml table-width PI as a child of a + CALS table to specify the width of the table in + output. + + + dbhtml table-width="width" + + + + table-width="width" + + Specifies the table width (including units or as a percentage) + + + + + + default.table.width + + + Table width + + + + + + + + + + + + Sets character formatting for terms in a variablelist + + Use the dbhtml term-presentation PI as a child + of a variablelist to set character formatting for + the term output of the list. + + + dbhtml term-presentation="bold"|"italic"|"bold-italic" + + + + term-presentation="bold" + + Specifies that terms are displayed in bold + + + term-presentation="italic" + + Specifies that terms are displayed in italic + + + term-presentation="bold-italic" + + Specifies that terms are displayed in bold-italic + + + + + + Variable list formatting in HTML + + + + + + + + + + + + Specifies separator text among terms in a varlistentry + + Use the dbhtml term-separator PI as a child + of a variablelist to specify the separator text + among term instances. + + + dbhtml term-separator="text" + + + + term-separator="text" + + Specifies the text (zero or more characters) + + + + + + variablelist.term.separator + + + Variable list formatting in HTML + + + + + + + + + + + + Specifies the term width for a variablelist + + Use the dbhtml term-width PI as a child of a + variablelist to specify the width for + term output. + + + dbhtml term-width="width" + + + + term-width="width" + + Specifies the term width (including units) + + + + + + Variable list formatting in HTML + + + + + + + + + + + + Specifies whether a TOC should be generated for a qandaset + + Use the dbhtml toc PI as a child of a + qandaset to specify whether a table of contents + (TOC) is generated for the qandaset. + + + dbhtml toc="0"|"1" + + + + toc="0" + + If zero, no TOC is generated + + + toc="1" + + If 1 (or any non-zero value), + a TOC is generated + + + + + + Q and A list of questions, + Q and A formatting + + + + + + + + + + + + Generates a hyperlinked list of commands + + Use the dbcmdlist PI as the child of any + element (for example, refsynopsisdiv) containing multiple + cmdsynopsis instances; a hyperlinked navigational + “command list” will be generated at the top of output for that + element, enabling users to quickly jump + to each command synopsis. + + + dbcmdlist + + + [No parameters] + + + + + + No cmdsynopsis elements matched dbcmdlist PI, perhaps it's nested too deep? + + +
    + + + +
    +
    + + + Generates a hyperlinked list of functions + + Use the dbfunclist PI as the child of any + element (for example, refsynopsisdiv) containing multiple + funcsynopsis instances; a hyperlinked + navigational “function list” will be generated at the top of + output for that element, enabling users to quickly + jump to to each function synopsis. + + + dbfunclist + + + [No parameters] + + + + + + No funcsynopsis elements matched dbfunclist PI, perhaps it's nested too deep? + + +
    + + + +
    +
    + + + Copies an external well-formed HTML/XML file into current doc + + Use the dbhtml-include href PI anywhere in a + document to cause the contents of the file referenced by the + href pseudo-attribute to be copied/inserted “as + is” into your HTML output at the point in document order + where the PI occurs in the source. + + The referenced file may contain plain text (as long as + it is “wrapped” in an html element — see the + note below) or markup in any arbitrary vocabulary, + including HTML — but it must conform to XML + well-formedness constraints (because the feature in XSLT + 1.0 for opening external files, the + document() function, can only handle + files that meet XML well-formedness constraints). + Among other things, XML well-formedness constraints + require a document to have a single root + element. So if the content you want to + include is plain text or is markup that does + not have a single root element, + wrap the content in an + html element. The stylesheets will + strip out that surrounding html “wrapper” when + they find it, leaving just the content you want to + insert. + + + + dbhtml-include href="URI" + + + + href="URI" + + Specifies the URI for the file to include; the URI + can be, for example, a remote http: + URI, or a local filesystem file: + URI + + + + + + textinsert.extension + + + Inserting external HTML code, + External code files + + + + + + + href + + + + + + + + + + + + + + + + + + + + ERROR: dbhtml-include processing instruction + href has no content. + + + + + + + ERROR: dbhtml-include processing instruction has + missing or empty href value. + + + + + + + + Sets topic name and topic id for context-sensitive HTML Help + + Use the dbhh PI as a child of components + that should be used as targets for context-sensitive help requests. + + + dbhh topicname="name" topicid="id" + + + + topicname="name" + + Specifies a unique string constant that identifies a help topic + + + topicid="id" + + Specifies a unique integer value for the topicname string + + + + + + Context-sensitive help + + + + + + + + + + filename + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + # + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +
    +
    + + + + + + + + + + + + + + + +
    + + + # + + + + + + + + + + + + + + + + + + +
    + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + / + + + + / + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl new file mode 100644 index 0000000..8de497e --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl @@ -0,0 +1,660 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + se + + + + + + + + + + + + + + + bk + + + + + + + + + + + + + + + ar + + + + + + + + + + + + + + + pr + + + + + + + + + + + + + + + ch + + + + + + + + + + + + + + + ap + + + + + + + + + + + + + + + + + + + pt + + + + + + + + + + + + + + + + + + + rn + + + + + + + + + + + + + + + + + + + + + + + + re + + + + + + + + + + + + + + + + + + + co + + + + + + + + + + + s + + + + + + + + + + + + + + + + + + + bi + + + + + + + + + + + + + + + + + + + go + + + + + + + + + + + + + + + + + + + ix + + + + + + + + si + + + + + + + + + + + + + + + + + + + to + + + + + + + + chunk-filename-error- + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Notenamesp. addadded namespace before processing + + + + + + + + + + + + + + + + ID ' + + ' not found in document. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl new file mode 100644 index 0000000..5b3ecc0 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl new file mode 100644 index 0000000..eeffc00 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl @@ -0,0 +1,496 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Element + + in namespace ' + + ' encountered + + in + + + , but no template matches. + + + + < + + > + + </ + + > + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + <xsl:copy-of select="$title"/> + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +Notenamesp. addadded namespace before processing + + + + + + + + + + + + + + + + + ID ' + + ' not found in document. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl new file mode 100644 index 0000000..b86c9c6 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl @@ -0,0 +1,31 @@ + + + + + + + + + + + + + + +1 + + + + # + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl new file mode 100644 index 0000000..f79aa7f --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl @@ -0,0 +1,119 @@ + + + + + +
    + + + + + + + + +
    +
    + + + +
    + + + + + + font-style:italic; font-weight:bold; + + + + + + + + + + +
    +
    + + + + + + + + + + font-style:italic; font-weight:bold; + + + [ + + ] + + + + + + + + + + +
    + + + + + width: 100%; display: table; margin-top: 5px; + + + + +
    + + display: table-row; + +
    + + display: table-cell; width: 15% + + +
    + +
    + + display: table-cell; width: 85% + + +
    + +
    + +
    +
    + + +
    + + + + +
    +
    + + +
    + + + + +
    +
    + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl new file mode 100644 index 0000000..d434d11 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl @@ -0,0 +1,434 @@ + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + +

    +
    + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + +

    +
    + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + +
    + + + + +
    + + + +
    + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + width: 100%; + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1% + + + + + + + + + +
    +
    + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl new file mode 100644 index 0000000..f64f169 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl @@ -0,0 +1,312 @@ + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + +

    +
    + + + + +
    + + + + + + + +
    +
    +
    +
    + + + + + + +
    +
    + + + + + + + + + + + + + + ( + + ) + + + + + + + + + + + +
    + + + + + + + + + + + +

    + + + +

    +
    + +

    + + + + + + + + +

    +
    +
    + +

    + +

    +
    +
    + + + + + + , + + + + + + + + + em-dash + + + + + + + + + + + + em-dash + + + + + + + + + + + + + + + + : + + + + + + + +
    + + + + + +

    + + + + + + + + + + +

    + +
    +
    + + + + + + + + + + + +
    + + + + + + + + + + + + +
    +
    + + + + + + 0 + 1 + + + + 6 + + + + + + + + + + + + +

    + +

    +
    + + + +

    + +

    +
    + + + +

    + +

    +
    + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl new file mode 100644 index 0000000..a7a66c9 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl @@ -0,0 +1,557 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + 2 + 3 + 4 + 5 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 6 + + + + + + + + + + clear: both + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + 1 + + + + + + + 2 + 3 + 4 + 5 + 6 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl new file mode 100644 index 0000000..1389b7c --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl @@ -0,0 +1,1616 @@ + + + + + + + + + + + +
    + +

    + + + + + + + + + + + + + + + + + + + + + + +

    +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + ( + + ) + +   + + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +    
    +    
    +    
    +  
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

    + + +
    + +
    +

    +
    + + + + + + + ( + + + + + + + + + + + + + + + + ) + ; + + + + ... + ) + ; + + + + + + + , + + + ) + ; + + + + + + + + + + + + + + + + + + + + +
    + + + + ; +
    + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + Function synopsis + + + cellspacing: 0; cellpadding: 0; + + + + + + + + + + + +
    + +
     
    + +
    + +
    +
    +
     
    +
    + + + + + + + ( + + + + + + + + + + + + + + + + + ) + ; + +   + + + + + ... + ) + ; + +   + + + + + + + + , + + + ) + ; + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + ; + + + + + + + + + + + + + + + + + + + + + + + + ( + + ) + ; + + + + + + +

    + +

    +
    + + + + + + + ( + + + + + + + + + + + + + + + + void) + ; + + + + ... + ) + ; + + + + + + + , + + + ) + ; + + + + + + + + + + + + + + + + + + + + + ( + + ) + + + + + + + + + Function synopsis + + + cellspacing: 0; cellpadding: 0; + + + + + + + + + + + +
    + +
     
    +
     
    +
    + + + + + + + ( + + + + + + + + + + + + + + + + + void) + ; + +   + + + + + ... + ) + ; + +   + + + + + + + + , + + + ) + ; + + + + + + + + + + + + + + + + + + + + + + ( + + ) + + + + +java + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unrecognized language on + + : + + + + + + + + + + + +
    +
    +
    + + + + + +
    +    
    +    
    +    
    +    
    +       extends
    +      
    +      
    +        
    +      +
    +
    + + implements + + +
    +      +
    +
    + + throws + + +  { +
    + + } +
    +
    + + + + + + + + + , + + + + + + + + + + + + + + + + + + +   + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + + + +    + + + ; + + + + + + + + + +   + + + + + + + + +   + + + + + + + + + + + + + + + + + void  + + + + + + + + + + + + + 0 + + , +
    + + +   + + + +
    + + + + + +
    + + + + + + + + + + + + + + + +    + + + + + + + + + + + + + + + + ( + + + + ) + +
    +     throws  + +
    + + + + + ; +
    + +
    + + + + +
    +    
    +    
    +    
    +    
    +      : 
    +      
    +      
    +        
    +      +
    +
    + + implements + + +
    +      +
    +
    + + throws + + +  { +
    + + } +
    +
    + + + + + + + + , + + + + + + + + + + + + + + +   + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + + + +    + + + ; + + + + + + + + + +   + + + + + + + + +   + + + + + + + + + + + + + + + + + void  + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + +    + + + + + + + + + + ( + + ) + +
    +     throws  + +
    + + + + + ; +
    + +
    + + + + +
    +    
    +    
    +    interface 
    +    
    +    
    +      : 
    +      
    +      
    +        
    +      +
    +
    + + implements + + +
    +      +
    +
    + + throws + + +  { +
    + + } +
    +
    + + + + + + + + , + + + + + + + + + + + + + + +   + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + + + +    + + + ; + + + + + + + + + +   + + + + + + + + +   + + + + + + + + + + + + + + + + + void  + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + +    + + + + + + + + + + ( + + ) + +
    +     raises( + + ) +
    + + + + + ; +
    + +
    + + + + +
    +    
    +    
    +    package 
    +    
    +    ;
    +    
    + + + @ISA = ( + + ); +
    +
    + + +
    +
    + + + + + + + + , + + + + + + + + + + + + + + +   + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + , + + + + + + + + + + + + + +    + + + ; + + + + + + + + + +   + + + + + + + + +   + + + + + + + + + + + + + + + + + void  + + + + + + + + + + + + + + , + + + + + + + + + + + + + + + + + + + + + + + + + sub + + + { ... }; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl new file mode 100644 index 0000000..16e5090 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl @@ -0,0 +1,1176 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + border- + + : + + + + + + ; + + + + + border- + + -width: + + ; + + + + border- + + -style: + + ; + + + + border- + + -color: + + ; + + + + + + + + + + + Error: CALS tables must specify the number of columns. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 100% + + + + + + + + border-collapse: collapse; + + + + + + + + + + + + + + + + + + + + + + + + + + + + + border-collapse: collapse; + + + + + + + + + + + + + + + + + border-collapse: collapse; + + + + + + + + + + + border-collapse: collapse; + + + + + + + + + + + border-collapse: collapse; + + + + + + + + + + + + + + + + + border: none; + + + + + border-collapse: collapse; + + + + + + + 0 + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + 100% + + + + + + + + + + + + + + + + + + + + + + + + No convertLength function available. + + + + + + + + + + + + + + + + + + + + + + + + + + No adjustColumnWidths function available. + + + + + + + + + + + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + text-align: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text-align: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Warning: overlapped row contains content! + + + This row intentionally left blank + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + background-color: + + + + + + + + + + + + + + + + + + + + + + text-align: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + th + th + + th + + td + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 0 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + background-color: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text-align: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + : + + + + + + + + 0: + + + + + + + + + + + + + + + 0 + + : + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + 1 + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + text-align: + + + + + + text-align: + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 1 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl new file mode 100644 index 0000000..1c4750e --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl @@ -0,0 +1,69 @@ + + + + + + + + + + + + + + + before + + + + + + + + +
    + + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl new file mode 100644 index 0000000..2488663 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl @@ -0,0 +1,4297 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + + +
    + + +
    + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + 1 + + + +
    +
    + + + + + + + + + + 1 + + + +
    +
    + +
    +
    + + + + + + + + + + + + + + +
    + +
    +
    + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl new file mode 100644 index 0000000..96ea7cc --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl @@ -0,0 +1,1111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + +
    + + + + + + + + + + + + +
    +
    + + + + + + + + + + + + + +
    + + + + + + + + +
    +
    + + +
    + + + + + + + + +
    +
    +
    +
    + + +
    + + + +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    + + + +

    +
    +

    + + + + + + + + + +

    + + + + + + + + + + + + + + + +
    +
    + + +
    + + + +
    +
    + + +
    + + + +

    Authors

    +
    + + + +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + +
    + + + +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + +   + + +
    + + +

    +
    +
    +
    +
    + + + + +

    Copyright

    +
    + +

    + + + + + + + + copyright + + + + + + + + + +

    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + +

    + + + +

    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + +

    + + + + + + + +

    +
    + + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + +
    + + + +
    +
    +
    + +
    + + + + + + + + +
    +
    +
    +
    + + +

    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + : + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + +
    + + + +
    +
    + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + 3 + 2 + + + + + + + + RevHistory + + + + +
    + + + + + + border-style:solid; width:100%; + + + + + + + revhistory + + + + + + + + + +
    + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + , + + + + + +   + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    +
    +
    + + + + + + +
    +
    +
    + + + + + +

    + + + +

    +
    + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + +

    + + + + + + + + + + + + + + + + + + +

    +
    + + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl new file mode 100644 index 0000000..d235978 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl @@ -0,0 +1,327 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    + + + +
    + + +
    +
    + +
    + + + + + + + + + +
    +
    +
    + + + + + + + + + + + + + + +
    + + + +
    + + +
    +
    + +
    + + + + + + + + + +
    +
    +
    + + + + + + + + +
    + + + + + +
    +
    + + + + + + +
    +
    +
    + + + + + +
    + + +
    + +
    + +
  • + + + +
  • +
    +
    +
    + + + + +
    + + +
    +
    + +
  • + + +
  • +
    +
    +
    + + + + + + + + + + + + + + +
    + + + + + + + + + + + + + + + +
    + + +
    +
    + + +
    + + +
    +
    + + + + + + + + + + + + +
    + + +
    +
    + + + +
    +
    + + + + +
    + + + + +
    + + +
    + +
    + + + +
    +
    + + + + +
    + + +
    + +
    + + + +
    +
    + + + + + Warning: don't know what to generate for + lot that has no children. + + + + +
    + + +
    +
    + + +
    + + +
    +
    + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl new file mode 100644 index 0000000..cfd2ed4 --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl @@ -0,0 +1,383 @@ + + + + + + + + + + + + + + + + + pre + + + + The shade.verbatim parameter is deprecated. + Use CSS instead, + + + for example: pre. + + { background-color: #E0E0E0; } + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + The shade.verbatim parameter is deprecated. + Use CSS instead, + + + for example: pre. + + { background-color: #E0E0E0; } + + + + + + + +
    +            
    +            
    +            
    +              
    +            
    +          
    +
    + +
    + + +

    + + + +

    +
    +
    +
    +
    + + + +
    +            
    +            
    +            
    +          
    +
    + +
    + + +

    + + + +

    +
    +
    +
    +
    +
    +
    + + + + + + + + + + +
    + + +

    + + + +

    +
    +
    + + +
    + + +

    + + + +

    +
    +
    +
    +
    + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Unexpected verbatim environment: + + + + + + + + + + 1 + + + + + + + + + + + + + No numberLines function available. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl new file mode 100644 index 0000000..fb902fc --- /dev/null +++ b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl @@ -0,0 +1,1292 @@ + + + + + +http://docbook.org/xlink/role/olink + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Endterm points to nonexistent ID: + + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ERROR: xref linking to + + has no generated link text. + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + XRef to nonexistent id: + + + ??? + + + + + + + + + + + + + + + + Endterm points to nonexistent ID: + + + + + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + suppress anchor + + + + + + + + + + + removing + + + + + + + + + + + + + + + + + removing + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Don't know what gentext to create for xref to: " + + ", (" + + ") + + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [ + + + + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + No bibliography entry: + + found in + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + [ + + + + + + + + + ] + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Endterm points to nonexistent ID: + + + ??? + + + + + + + + + + + + + Link element has no content and no Endterm. + Nothing to show in the link to + + + ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + Olink debug: root element of target.database ' + + ' is ' + + '. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ERROR: olink using obsolete attributes + @linkmode, @targetdocent, @localinfo are + not supported. + + + + + ERROR: olink is missing linking attributes. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/bash/templates/build-aux/git-notes-release.sh b/bash/templates/build-aux/git-notes-release.sh index ad35eda..487f200 100644 --- a/bash/templates/build-aux/git-notes-release.sh +++ b/bash/templates/build-aux/git-notes-release.sh @@ -48,7 +48,7 @@ EOF git notes append -m "$NOTE" sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - ./configure + ./configure --enable-programmer-mode git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" git commit -m "Update released version $VERSION in channel.scm.in file." diff --git a/bash/templates/build-aux/git-post-receive.sh b/bash/templates/build-aux/git-post-receive.sh deleted file mode 100755 index eb8fe8f..0000000 --- a/bash/templates/build-aux/git-post-receive.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -eux - -PACKAGE="$(basename "$PWD" | cut -d. -f1)" -LOGS_PREFIX='/data/ci' -/data/ci/ci-build.sh "$PACKAGE" "$LOGS_PREFIX" diff --git a/bash/templates/build-aux/git-pre-push.sh b/bash/templates/build-aux/git-pre-push.sh deleted file mode 120000 index 3a348b9..0000000 --- a/bash/templates/build-aux/git-pre-push.sh +++ /dev/null @@ -1 +0,0 @@ -../..git/hooks/pre-push \ No newline at end of file diff --git a/bash/templates/build-aux/guile.am b/bash/templates/build-aux/guile.am index bd31ade..e56b31f 100644 --- a/bash/templates/build-aux/guile.am +++ b/bash/templates/build-aux/guile.am @@ -1,25 +1,16 @@ -moddir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION) -godir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache +guilescmdir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)/xyz/euandreh +guilegodir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache/xyz/euandreh -GOBJECTS = $(SOURCES:%.scm=%.go) +GUILE_OBJECTS = $(SOURCES:.scm=.go) -nobase_dist_mod_DATA = $(SOURCES) $(NOCOMP_SOURCES) -nobase_go_DATA = $(GOBJECTS) +dist_guilescm_DATA = $(SOURCES) +guilego_DATA = $(GUILE_OBJECTS) -# Make sure source files are installed first, so that the mtime of -# installed compiled files is greater than that of installed source -# files. See -# -# for details. -guile_install_go_files = install-nobase-goDATA -$(guile_install_go_files): instal-nobase_dist_modDATA +CLEANFILES = $(GUILE_OBJECTS) -CLEANFILES = $(GOBJECTS) $(TESTS:tests/%.scm=%.log) -GUILE_WARNING = -Wunbound-variable -Warity-mismatch -Wformat SUFFIXES = .scm .go .scm.go: - $(AM_V_GEN)$(top_builddir)/with-guile-env $(GUILD) compile $(GUILE_WARNING) -o "$@" "$<" + $(GUILD) compile -o "$@" "$<" TEST_EXTENSIONS = .scm -AM_SCM_LOG_FLAGS = --no-auto-compile -L "$(top_srcdir)/src" -SCM_LOG_COMPILER = $(top_builddir)/with-guile-env $(GUILE) +SCM_LOG_COMPILER = $(GUILE) -L $(top_srcdir)/src diff --git a/bash/templates/build-aux/html-files-from-sources.am b/bash/templates/build-aux/html-files-from-sources.am new file mode 100644 index 0000000..1561045 --- /dev/null +++ b/bash/templates/build-aux/html-files-from-sources.am @@ -0,0 +1,23 @@ +.PHONY: clean-local-html-files-from-sources +clean-local-html-files-from-sources: + rm -rf public/ OEBPS META-INF/ doc/$(PACKAGE).xml mimetype + +clean-local: clean-local-html-files-from-sources + +LANGS = en +DICTIONARIES = doc/dictionaries/en.txt doc/dictionaries/international.txt +doc/dictionaries/all.txt: $(DICTIONARIES) + cat $(DICTIONARIES) | sort > $@ + + cat $(DICTIONARIES) | diff - $@ || { \ + echo 'Dictionary files are not sorted. To fix it, run:'; \ + echo ' for f in $(DICTIONARIES); do LANG=C.UTF-8 sort -o $$f $$f; done'; \ + touch $(DICTIONARIES); \ + exit 1; \ + } + +public: README TODOs.org $(DOC_SRCS) doc/dictionaries/all.txt + $(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS) + + $(srcdir)/build-aux/generate-tasks-and-bugs.sh + $(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)' diff --git a/bash/templates/build-aux/rust.am b/bash/templates/build-aux/rust.am new file mode 100644 index 0000000..f8f9b0f --- /dev/null +++ b/bash/templates/build-aux/rust.am @@ -0,0 +1,9 @@ +rustfmt: $(RUST_SRC) + if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ + for f in $(RUST_SRC); do \ + $(RUSTFMT) --check $$f || { \ + printf "Unformatted Rust code. To fix it, run:\n rustfmt %s\n" $$f; \ + exit 1; \ + }; \ + done; \ + fi diff --git a/bash/templates/build-aux/sphinx-build-web-assets.sh b/bash/templates/build-aux/sphinx-build-web-assets.sh new file mode 100755 index 0000000..0bf494f --- /dev/null +++ b/bash/templates/build-aux/sphinx-build-web-assets.sh @@ -0,0 +1,64 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" +cd ../ + +OUT='public' +PROJECT_UC="__PROJECT_UC__" + +pushd doc +make html +popd + +cp doc/favicon.ico "$OUT" +mv doc/_build/html/_static/ "$OUT/_static/" + +CURRENT_LANG="$(jq -r .current_lang < metadata.json)" +LANGS="$(jq -r .langs[] < metadata.json)" +TAGS="$(git tag | cat - <(echo master))" + +for lang in ${LANGS}; do + for tag in ${TAGS}; do + mkdir -p "tmp/$lang/$tag/" + git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . + git reset . + git checkout . + + pushd "tmp/$lang/$tag/doc/" + jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json + + RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json | \ + jq -r 'to_entries[] | [.key, .value] | @csv' | \ + tr -d '\"')" + + if [[ "$lang" != "$CURRENT_LANG" ]]; then + for rename in $RENAMES; do + from="$(echo "$rename" | cut -d, -f1)" + to="$(echo "$rename" | cut -d, -f2)" + mv "${from}.rst" "${to}.rst" + sed -i "s/^ $from$/ $to/" index.rst + done + fi + + make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html + popd + + mkdir "$OUT/$lang/" + + mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/" + pushd "$OUT/$lang/$tag/" + rm -rf _static/ + ln -s ../../_static . + popd + + mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/" + pushd "$OUT/$lang/$tag/single/" + rm -rf _static/ + ln -s ../../../_static . + rm -rf _images/ + ln -s ../_images . + popd + + mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" + done +done diff --git a/bash/templates/build-aux/texinfo-build-web-assets.sh b/bash/templates/build-aux/texinfo-build-web-assets.sh new file mode 100755 index 0000000..9980e57 --- /dev/null +++ b/bash/templates/build-aux/texinfo-build-web-assets.sh @@ -0,0 +1,54 @@ +#!/bin/sh -eux + +PACKAGE="$1" +shift + +dictname() { + case "$1" in + en) + echo en_US-large + ;; + *) + echo "Unsupported dictionary type $1" + exit 1 + ;; + esac +} + +OUT="$(mktemp)" +CLONE="$(mktemp -d)" +rsync -a . "$CLONE" +cd "$CLONE" + +for tag in master $(git tag); do + git checkout "$tag" + for lang in "$@"; do + mkdir -p "public/$lang/$tag/" + + make html + mv "doc/$PACKAGE.html/" "public/$lang/$tag/doc/" + + make MAKEINFOFLAGS=--no-split html ps dvi pdf + mv -t "public/$lang/$tag/" "doc/$PACKAGE.dvi" "doc/$PACKAGE.ps" "doc/$PACKAGE.pdf" "doc/$PACKAGE.html" + + makeinfo --docbook "doc/$PACKAGE.texi" -o "$PACKAGE.docbook" + xsltproc build-aux/docbook-xsl/epub/docbook.xsl "$PACKAGE.docbook" + echo "application/epub+zip" > mimetype + zip -0Xq "$PACKAGE.epub" mimetype + zip -Xr9D "$PACKAGE.epub" META-INF OEBPS + mv "$PACKAGE.epub" "public/$lang/$tag/" + + cat doc/dictionaries/international.txt "doc/dictionaries/$lang.txt" > doc/dictionaries/curr.txt + hunspell -u -H -d "$(dictname "$lang")" -p doc/dictionaries/curr.txt "public/$lang/$tag/$PACKAGE.html" | tee -a "$OUT" + done +done + +cd - +rm -rf public/ +mv "$CLONE/public/" public/ + +if [ -s "$OUT" ]; then + echo "Misspelled words detected:" + cat "$OUT" + exit 1 +fi diff --git a/bash/templates/build-aux/with-guile-env.in b/bash/templates/build-aux/with-guile-env.in deleted file mode 100644 index 9dcdebb..0000000 --- a/bash/templates/build-aux/with-guile-env.in +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -abs_top_srcdir="$(cd "@abs_top_srcdir@/src" > /dev/null || exit; pwd)" -abs_top_builddir="$(cd "@abs_top_builddir@/src" > /dev/null || exit; pwd)" - -GUILE_LOAD_COMPILED_PATH="$abs_top_builddir${GUILE_LOAD_COMPILED_PATH:+:}$GUILE_LOAD_COMPILED_PATH" -GUILE_LOAD_PATH="$abs_top_builddir:$abs_top_srcdir${GUILE_LOAD_PATH:+:}:$GUILE_LOAD_PATH" -export GUILE_LOAD_COMPILED_PATH GUILE_LOAD_PATH - -exec "$@" diff --git a/bash/templates/build-aux/workflow/preamble.org.in b/bash/templates/build-aux/workflow/preamble.org.in index b2e7df4..751048e 100644 --- a/bash/templates/build-aux/workflow/preamble.org.in +++ b/bash/templates/build-aux/workflow/preamble.org.in @@ -7,14 +7,14 @@ #+BIND: org-html-doctype "html5" #+OPTIONS: toc:nil html-style:nil num:nil #+HTML_HEAD: -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/@PACKAGE@/commit?id=$1][$1]] +#+MACRO: src [[@PACKAGE_GIT_URL@/$/tree/master/$1][$1]] +#+MACRO: job [[@PACKAGE_CI_URL@/$1][$1]] +#+MACRO: commit commit\nbsp{}[[@PACKAGE_GIT_URL@/commit?id=$1][$1]] #+MACRO: bug bug\nbsp{}[[#$1][#$1]] #+MACRO: task task\nbsp{}[[#$1][#$1]] #+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) -Tasks, bugs and issues for @PACKAGE_NAME@. See: [[https://@PACKAGE@.euandreh.xyz/][@PACKAGE@.euandreh.xyz]]. +Tasks, bugs and issues for @PACKAGE_NAME@. See: [[@PACKAGE_URL@][@PACKAGE_URL@]]. Register a new one: [[mailto:@PACKAGE_BUGREPORT@?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][@PACKAGE_BUGREPORT@]]. @@ -22,4 +22,6 @@ Register a new one: [[mailto:@PACKAGE_BUGREPORT@?subject=BUG%20or%20TASK%3A%20%3 /Vous pouvez aussi écrire en français./ +/Vi povas ankaŭ skribi esperante./ + #+TOC: headlines 2 diff --git a/bash/templates/configure.ac b/bash/templates/configure.ac index 752c066..79079ec 100644 --- a/bash/templates/configure.ac +++ b/bash/templates/configure.ac @@ -1,14 +1,25 @@ AC_PREREQ([2.69]) -AC_INIT([$PROJECT], +AC_INIT([__PROJECT__], [v0.0.0], - [~euandreh/$MAILING_LIST@lists.sr.ht], - [$PROJECT], - [https://$PROJECT.euandreh.xyz]) + [~euandreh/__MAILING_LIST__@lists.sr.ht], + [__PROJECT__], + [https://__PROJECT__.euandreh.xyz]) AC_CONFIG_SRCDIR([FIXME]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AM_INIT_AUTOMAKE([-Wall -Werror parallel-tests subdir-objects]) -AC_CONFIG_FILES([Makefile]) +EU_PROGRAMMER_MODE +AM_MISSING_PROG([GUIX], [guix]) + +TLD="euandreh.xyz" +EU_LINKS + +AC_CONFIG_FILES([Makefile + README + guix/channel/xyz/euandreh/__PROJECT__/channel.scm + build-aux/workflow/preamble.org]) + +AC_CONFIG_FILES([build-aux/ci/git-pre-push.sh], [chmod +x build-aux/ci/git-pre-push.sh]) AC_OUTPUT diff --git a/bash/templates/m4/links.m4 b/bash/templates/m4/links.m4 new file mode 100644 index 0000000..a96fb5f --- /dev/null +++ b/bash/templates/m4/links.m4 @@ -0,0 +1,25 @@ +AC_DEFUN([EU_LINKS], [ + AC_SUBST([TLD]) + + PACKAGE_VERSION_NUMBERS="`echo $PACKAGE_VERSION | cut -c2-`" + AC_SUBST([PACKAGE_VERSION_NUMBERS]) + + PACKAGE_DESCRIPTION="`awk '{print substr(@S|@0, 1, length(@S|@0)-1)}' $srcdir/description`" + AC_SUBST([PACKAGE_DESCRIPTION]) + + PACKAGE_CHANNEL_URL="git://git.$TLD/$PACKAGE/" + AC_SUBST([PACKAGE_CHANNEL_URL]) + + PACKAGE_GIT_URL="https://git.$TLD/$PACKAGE/" + AC_SUBST([PACKAGE_GIT_URL]) + + PACKAGE_CI_URL="https://ci.$TLD/" + AC_SUBST([PACKAGE_CI_URL]) + + PACKAGE_DOC_URL="https://$PACKAGE.$TLD/en/master/" + AC_SUBST([PACKAGE_DOC_URL]) + + if test "$PACKAGE_URL" != "https://$PACKAGE.$TLD"; then + AC_MSG_ERROR(['TLD' variable is out of sync with 'PACKAGE_URL': https://$PACKAGE.$TLD != $PACKAGE_URL]) + fi +]) diff --git a/bash/templates/m4/programmer-mode.m4 b/bash/templates/m4/programmer-mode.m4 new file mode 100644 index 0000000..876b878 --- /dev/null +++ b/bash/templates/m4/programmer-mode.m4 @@ -0,0 +1,17 @@ +AC_DEFUN([EU_PROGRAMMER_MODE], [ + AC_ARG_ENABLE([programmer-mode], + AS_HELP_STRING([--enable-programmer-mode], + [Enables all opt-in configure flags, and requires a full development environment [default=no]. Similar to --enable-maintainer-mode, without changing dependency tracking.]), + [PROGRAMMER_MODE=$enableval], + [PROGRAMMER_MODE=no]) + + AC_SUBST([PROGRAMMER_MODE]) + + AC_ARG_ENABLE([ci-mode], + AS_HELP_STRING([--enable-ci-mode], + [Enables CI-specific flag. Assumes --enable-programmer-mode [default=no].]), + [CI_MODE=$enableval], + [CI_MODE=no]) + + AC_SUBST([CI_MODE]) +]) diff --git a/bash/templates/rename/basic-channel.scm.in b/bash/templates/rename/basic-channel.scm.in new file mode 100644 index 0000000..9ca6e15 --- /dev/null +++ b/bash/templates/rename/basic-channel.scm.in @@ -0,0 +1,72 @@ +(define-module (xyz euandreh @PACKAGE@ channel) + #:use-module ((guix licenses) #:prefix license/) + #:use-module (guix transformations) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages autotools) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages guile) + #:use-module (gnu packages guile-xyz) + #:use-module (gnu packages mail) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages texinfo)) + +(define-public @PACKAGE@ + (package + (name "@PACKAGE@") + (version (car + (string-split (substring "@VERSION@" 1) + #\-))) + (source (origin + (method url-fetch) + (file-name (string-append name "-" version ".tar.gz")) + ;; URI available via: + ;; $ git fetch origin refs/notes/tarballs + ;; $ printf '@PACKAGE_GIT_URL@blob?id=%s' $(git notes --ref=refs/notes/tarballs list @VERSION@) + (uri "@PACKAGE_GIT_URL@blob?id=b6a3b84537adb5cdeccb43bd9e00956f8b55d359") + (sha256 + (base32 "1mraz2d85hgalkdml92x78br31rlbz298r8hf75fcsdlrf7n3d0p")))) + (build-system gnu-build-system) + (inputs + `()) + (native-inputs + `(("pkg-config" ,pkg-config))) + (synopsis "@PACKAGE_DESCRIPTION@") + (description "@PACKAGE_LONG_DESCRIPTION@") + (home-page "@PACKAGE_URL@") + (license license/agpl3+))) + +(define @PACKAGE@-master + (let ((@PACKAGE@-from-master + ((options->transformation + '((with-git-url . "@PACKAGE@=@PACKAGE_CHANNEL_URL@"))) + @PACKAGE@))) + (package + (inherit @PACKAGE@-from-master) + (name "@PACKAGE@-master") + (native-inputs + (append + (package-native-inputs @PACKAGE@) + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("texinfo" ,texinfo))))))) + +(define repository-root + (canonicalize-path + (string-append (current-source-directory) + "/../../../../.."))) + +(define @PACKAGE@-dev + (package + (inherit @PACKAGE@-master) + (source (local-file repository-root + #:recursive? #t + #:select? (git-predicate repository-root))))) + +@PACKAGE@-dev +@PACKAGE@-master diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh new file mode 100755 index 0000000..d07815b --- /dev/null +++ b/build-aux/assert-shellcheck.sh @@ -0,0 +1,5 @@ +#!/bin/sh -eux + +git ls-files -z | \ + xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ + xargs shellcheck diff --git a/build-aux/ci/ci-build.sh b/build-aux/ci/ci-build.sh new file mode 100755 index 0000000..62e0f22 --- /dev/null +++ b/build-aux/ci/ci-build.sh @@ -0,0 +1,43 @@ +#!/bin/sh -eux + +PACKAGE="$1" +LOGS_DIR="$2" +read -r _ SHA _ # oldrev newrev refname +FILENAME="$(date -Is)-$SHA.log" +LOGFILE="$LOGS_DIR/$FILENAME" + +{ + echo "Starting CI job at: $(date -Is)" + + finish() { + STATUS="$?" + printf "\n\n>>> exit status was %s\n" "$STATUS" + echo "Finishing CI job at: $(date -Is)" + cd - + NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" + } + trap finish EXIT + + unset GIT_DIR + CLONE="$(mktemp -d)" + git clone . "$CLONE" + cd "$CLONE" + git config --global user.email git@euandre.org + git config --global user.name 'EuAndreh CI' + + if [ -f ./bootstrap ]; then + ./build-aux/with-container.sh './bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + else + ./build-aux/with-container.sh 'make clean check public' + fi + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete +} | tee "$LOGFILE" 2>&1 diff --git a/build-aux/ci/git-post-receive.sh b/build-aux/ci/git-post-receive.sh new file mode 100755 index 0000000..c78f1ac --- /dev/null +++ b/build-aux/ci/git-post-receive.sh @@ -0,0 +1,13 @@ +#!/bin/sh -eu + +for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do + opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" + if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then + printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" + exit 0 + fi +done + +PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix +LOGS_DIR="/data/ci/$PACKAGE/logs" +"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/build-aux/ci/git-pre-push.sh b/build-aux/ci/git-pre-push.sh new file mode 100755 index 0000000..b7fa20a --- /dev/null +++ b/build-aux/ci/git-pre-push.sh @@ -0,0 +1,18 @@ +#!/bin/sh -eux + +PACKAGE="$(basename "$PWD")" +LOGS_DIR="/data/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/data/git/$PACKAGE.git" + +DESCRIPTION="$(mktemp)" +if [ -f description ] +then + cp description "$DESCRIPTION" +else + git config euandreh.description > "$DESCRIPTION" +fi + +scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" +ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" +scp build-aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" +scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/build-aux/ci/git-pre-push.sh.in b/build-aux/ci/git-pre-push.sh.in new file mode 100755 index 0000000..37e777c --- /dev/null +++ b/build-aux/ci/git-pre-push.sh.in @@ -0,0 +1,18 @@ +#!/bin/sh -eux + +PACKAGE="$(basename "$PWD")" +LOGS_DIR="/data/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/data/git/$PACKAGE.git" + +DESCRIPTION="$(mktemp)" +if [ -f description ] +then + cp description "$DESCRIPTION" +else + git config euandreh.description > "$DESCRIPTION" +fi + +scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description" +ssh git.@TLD@ mkdir -p "$LOGS_DIR" +scp build-aux/ci/ci-build.sh "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh" +scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive" -- cgit v1.2.3 From 1e76da6db1017febd0c53ed3eb628bbdb2037f3d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:12:01 -0300 Subject: Run report-summary job after all cronjobs run --- bash/fake-symlinks.sh | 2 +- bash/templates/cronjob-with-email.sh | 4 ++++ scripts/ad-hoc/report-summary.sh | 8 ++++++++ scripts/cron/annex-job.sh | 4 ++++ scripts/cron/backup-job.sh | 4 ++++ scripts/cron/copy-box-backups-job.sh | 4 ++++ scripts/cron/elfeed-job.sh | 4 ++++ scripts/cron/mbox-archive-job.sh | 4 ++++ scripts/cron/mr-remotes-backup-job.sh | 4 ++++ scripts/cron/nix-search-update-job.sh | 4 ++++ scripts/cron/notmuch-dump-job.sh | 4 ++++ scripts/cron/repo-update-job.sh | 4 ++++ scripts/cron/report-summary-job.sh | 32 ++++++++++++++++++++++++++++++++ 13 files changed, 81 insertions(+), 1 deletion(-) create mode 100755 scripts/ad-hoc/report-summary.sh create mode 100755 scripts/cron/report-summary-job.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 667d62d..023d298 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -13,7 +13,7 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' -for job in annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do +for job in report-summary annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/ad-hoc/${job}.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index ff170c3..0dbb6ac 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s __JOB__\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" diff --git a/scripts/ad-hoc/report-summary.sh b/scripts/ad-hoc/report-summary.sh new file mode 100755 index 0000000..c21b147 --- /dev/null +++ b/scripts/ad-hoc/report-summary.sh @@ -0,0 +1,8 @@ +#!/bin/sh -eux + +F="/tmp/cron-dbg.summary.$(date -I).euandreh.log" +if grep ^1 "$F"; then + echo 'Some report failed for today:' + grep ^1 "$F" + exit 1 +fi diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 4fef635..1d31e8d 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s annex\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 0b74e34..3ec3f56 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" diff --git a/scripts/cron/copy-box-backups-job.sh b/scripts/cron/copy-box-backups-job.sh index 4147c4d..a030154 100755 --- a/scripts/cron/copy-box-backups-job.sh +++ b/scripts/cron/copy-box-backups-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s copy-box-backups\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" diff --git a/scripts/cron/elfeed-job.sh b/scripts/cron/elfeed-job.sh index 7f913c1..b5cb35a 100755 --- a/scripts/cron/elfeed-job.sh +++ b/scripts/cron/elfeed-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s elfeed\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index 8e18e56..07a1983 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s mbox-archive\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index c8e9c85..d1854f8 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s mr-remotes-backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index 4c05472..5e4bf29 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s nix-search-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index 7f66426..a1d48cf 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s notmuch-dump\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 2351b75..652dfe4 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -11,6 +11,10 @@ finish() { STATUS="❌ FAILURE (status $status)" fi + echo "Registering status locally..." + set -x + printf '%s repo-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" diff --git a/scripts/cron/report-summary-job.sh b/scripts/cron/report-summary-job.sh new file mode 100755 index 0000000..31bad1c --- /dev/null +++ b/scripts/cron/report-summary-job.sh @@ -0,0 +1,32 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +LOG_FILE="$(mktemp)" +exec &> >(tee -a "$LOG_FILE") + +finish() { + status=$? + if [[ $status = 0 ]]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi + + echo "Registering status locally..." + set -x + printf '%s report-summary\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + + echo "Sending report email..." + + SUBJECT="Job report on $(hostname): ${STATUS} for report-summary-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' +} +trap finish EXIT + +echo "Starting: $(date -Is)" +~/dev/libre/dotfiles/scripts/ad-hoc/report-summary.sh +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From 527d47e1e6757380dc7dbc5ff409afdbb6226dd9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:12:41 -0300 Subject: Add scripts/ad-hoc/fim as an executable --- bash/aliases.sh | 1 - scripts/ad-hoc/fim | 3 +++ 2 files changed, 3 insertions(+), 1 deletion(-) create mode 100755 scripts/ad-hoc/fim diff --git a/bash/aliases.sh b/bash/aliases.sh index 24f673d..d034ed1 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -19,7 +19,6 @@ alias mm="sync-mail.sh" alias m="sync-mail.sh --fast" alias p='ping euandre.org -c 3' alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" -alias fim="play $DOTFILES/bash/Positive.ogg &> /dev/null" alias mux="tmuxinator start" alias s="git status" alias d="git diff" diff --git a/scripts/ad-hoc/fim b/scripts/ad-hoc/fim new file mode 100755 index 0000000..a13d5ef --- /dev/null +++ b/scripts/ad-hoc/fim @@ -0,0 +1,3 @@ +#!/bin/sh -eu + +play "$DOTFILES/bash/Positive.ogg" &> /dev/null -- cgit v1.2.3 From 5751364aa42e76c02cc92872f195c8920f73264b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:13:10 -0300 Subject: env.sh: Add $GOPATH --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index 51e6ddc..e4a7b5f 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -6,6 +6,7 @@ export INPUTRC=~/.inputrc export BORG_REMOTE_PATH='borg1' export LANG=fr_FR.UTF-8 export LANGUAGE=fr_FR.UTF-8 +export GOPATH="$HOME/dev/go" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From c666a206594019ceaa79187d05d91f4cfa5e3ad1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:13:47 -0300 Subject: ps1.sh: Consider other git statuses --- bash/ps1.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 8b6e1a2..6280f26 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -38,7 +38,7 @@ repo-status() { BRANCH_MARKER="$inner" fi - if grep -q '^[A| ][M|D]' <<< "$DIFF_LINES"; then + if grep -q '^[A|D| ][M|D| ]' <<< "$DIFF_LINES"; then HAS_DIFF=1 fi -- cgit v1.2.3 From cfa18fa7c16b55634622dc0168e096bf5cd32466 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:14:06 -0300 Subject: global gitignore: Add .ogg, .torrent, .checksum --- git/gitignore | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/git/gitignore b/git/gitignore index 60fa782..cd4cf42 100644 --- a/git/gitignore +++ b/git/gitignore @@ -4,4 +4,8 @@ req.http *.swp gemset.nix .ignore -tmp/ \ No newline at end of file +tmp/ +*.ogg +*.torrent +*.checksum +/static/favicon.png \ No newline at end of file -- cgit v1.2.3 From 7719ddea5c4ef9a8878886d792d41221cd86f4bb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:14:46 -0300 Subject: configuration.nix: Add diffoscope package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index d0f01aa..f4107c0 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -123,6 +123,7 @@ in { ## CLI tools + diffoscope bundix poedit bash -- cgit v1.2.3 From e177e89faa9505ef101a5281065b9a207d5c646d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:14:57 -0300 Subject: configuration.nix: Add bmake package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f4107c0..fbb9106 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -148,6 +148,7 @@ in { xclip bc # binary calculator used in nucli gnumake + bmake psmisc # =killall= xorg.xkill gksu # =gksudo= -- cgit v1.2.3 From 90129bee444cd2d12c3f15e28f578a185ab6dc57 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:15:08 -0300 Subject: configuration.nix: Add audacity package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fbb9106..dbb6a52 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -271,6 +271,7 @@ in { ## GUI programs + audacity zbar fractal calibre -- cgit v1.2.3 From 0ce87c8294a47d89255b6c632a8dd805f57ac757 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:15:21 -0300 Subject: configuration.nix: Remove envsubst comment --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dbb6a52..e3e451e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -135,7 +135,7 @@ in { tmux tmuxinator sox # =play= - gettext # =envsubst= + gettext ag gnugrep htop -- cgit v1.2.3 From 1efb2c5ab7f48e0c403e942c8e9fc0a0565a65af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:15:39 -0300 Subject: git-search: Do a shallow clone --- scripts/ad-hoc/git-search | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/git-search b/scripts/ad-hoc/git-search index 8893fed..f28e01e 100755 --- a/scripts/ad-hoc/git-search +++ b/scripts/ad-hoc/git-search @@ -32,7 +32,7 @@ REPOSITORY_URL="${2:-}" mkdir -p /tmp/git-search DIRNAME="$(echo "${REPOSITORY_URL%/}" | rev | cut -d/ -f1 | rev)" if [[ ! -d "/tmp/git-search/${DIRNAME}" ]]; then - git clone "${REPOSITORY_URL}" "/tmp/git-search/${DIRNAME}" + git clone --depth 1 "${REPOSITORY_URL}" "/tmp/git-search/${DIRNAME}" fi pushd "/tmp/git-search/${DIRNAME}" -- cgit v1.2.3 From 93b5dc31ca3a6ee983759c6b002e046779418bee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:15:56 -0300 Subject: scripts/ad-hoc/open: Add more filename patterns --- scripts/ad-hoc/open | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open index e75f076..83e13b0 100755 --- a/scripts/ad-hoc/open +++ b/scripts/ad-hoc/open @@ -2,12 +2,15 @@ set -Eeuo pipefail case "$1" in - http*) + http*|*.svg) firefox "$1" ;; *.pdf) zathura "$1" ;; + *.flac|*.ogg|*.mkv) + vlc "$1" + ;; *) /run/current-system/sw/bin/xdg-open "$1" ;; -- cgit v1.2.3 From f626940689182b6a87f5ba61067019476014d00e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:16:17 -0300 Subject: post.sh: Include podcast and screencast types --- scripts/ad-hoc/post.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/ad-hoc/post.sh b/scripts/ad-hoc/post.sh index a4ed75e..6df0358 100755 --- a/scripts/ad-hoc/post.sh +++ b/scripts/ad-hoc/post.sh @@ -11,8 +11,8 @@ Usage: $0 Arguments: + TYPE The type of the article: article, til, slides, podcast, screencast FULL_TITLE Full title of the pastebin - TYPE The type of the article: article, til, slides Examples: $0 til 'I just learned this' @@ -28,7 +28,7 @@ TYPE="${1:-}" } case "$TYPE" in - article | til) + article | til | podcast | screencast) LAYOUT=post DIR="_${TYPE}s" ;; -- cgit v1.2.3 From a5c56e27b9aa252074ab794a958bdf47ac3a39cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:17:10 -0300 Subject: record-my-screen.sh: Use WebM and siplify script --- scripts/ad-hoc/record-my-screen.sh | 32 ++++++++++++-------------------- 1 file changed, 12 insertions(+), 20 deletions(-) diff --git a/scripts/ad-hoc/record-my-screen.sh b/scripts/ad-hoc/record-my-screen.sh index c7bd728..23bc75e 100755 --- a/scripts/ad-hoc/record-my-screen.sh +++ b/scripts/ad-hoc/record-my-screen.sh @@ -1,8 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -# Taken from: -# https://www.pcsuggest.com/linux-screen-recorder-ffmpeg/ usage() { red "Missing argument $1.\n" @@ -11,11 +9,11 @@ Usage: record-my-screen.sh Arguments: - OUTPUT_PATH Path of the final MKV file + OUTPUT_PATH Path of the final WebM file Examples: - Capture the screen and save it in 'output.mkv' - record-my-screen.sh output.mkv + Capture the screen and save it in 'output.webm' + record-my-screen.sh output.webm EOF } @@ -25,20 +23,14 @@ OUTPUT_PATH="${1:-}" exit 2 } - SCREEN_RESOLUTION="$(xrandr -q --current | grep '[*]' | awk '{print$1}')" -ffmpeg \ - -loglevel error \ - \ - `# audio options` \ - -f pulse \ - -ac 2 \ - -i default \ - \ - `# video options` \ - -f x11grab \ - -s "${SCREEN_RESOLUTION}" \ - -i "${DISPLAY}" \ - \ - "${OUTPUT_PATH}" +ffmpeg \ + -f pulse \ + -i default \ + -f x11grab \ + -s "$SCREEN_RESOLUTION" \ + -i :0 \ + "$OUTPUT_PATH" + +# https://github.com/georgmartius/vid.stab -- cgit v1.2.3 From bf7b857667604af61cca195fae41927d6092abe0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:17:30 -0300 Subject: scripts/ad-hoc/c: Add shebang --- scripts/ad-hoc/c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/ad-hoc/c b/scripts/ad-hoc/c index b31137b..9b22062 100755 --- a/scripts/ad-hoc/c +++ b/scripts/ad-hoc/c @@ -1 +1,3 @@ +#!/bin/sh -eu + tmux send-keys -R \; clear-history -- cgit v1.2.3 From 330a9776b6db4cab21fcce7162e94dc9db954cab Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:17:47 -0300 Subject: Register report-summary-job as a cronjob --- nixos/common.nix | 2 ++ nixos/usurpador.nix | 2 ++ 2 files changed, 4 insertions(+) diff --git a/nixos/common.nix b/nixos/common.nix index e7446b8..75f5fa5 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -8,6 +8,8 @@ let sync-mail = every-x-hours; deliver-queued-mail = every-x-hours; + report-summary-job = "30 13 * * *"; + annex-job = daily-at-12h30min; elfeed-job = daily-at-12h30min; backup-job = daily-at-12h30min; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index b971a0f..f92c063 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -13,6 +13,8 @@ in rec { common.crons.sync-mail common.crons.deliver-queued-mail + common.crons.report-summary-job + common.crons.annex-job common.crons.backup-job common.crons.repo-update-job -- cgit v1.2.3 From e56892c17165eaf8a78516538327e0268d57fc80 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:18:30 -0300 Subject: symlinks.sh: Always recreate ~/tmp/ and ~/tmp/scratch.org --- bash/symlinks.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 5b644b3..6c18bf2 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -22,6 +22,8 @@ ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc ln -f "$HOME/Sync/TODOs.org.txt" "$HOME/annex/TODOs.org" +mkdir -p ~/tmp/ +touch ~/tmp/scratch.org mkdir -p ~/.gnupg ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf -- cgit v1.2.3 From fd858e3e9f552b054059d2e87e13dbbe584fc717 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:19:26 -0300 Subject: pastebin.sh: Update frontmatter values --- scripts/ad-hoc/pastebin.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index 00de6fd..d4c3159 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -62,10 +62,12 @@ title: ${FULL_TITLE} date: ${PASTE_DATE} -layout: pastebin +layout: post lang: en +ref: $SLUG_TITLE + --- \`\`\`FIXME @@ -76,7 +78,7 @@ EOF git reset . git add "$OUT" git commit -m "$0: Auto-add $OUT" -"$(nix-build -A remotePublishScript)/bin/publish.sh" +"$(nix-build -A publishScript)/bin/publish.sh" open "https://euandre.org/pastebin/$(tr '-' '/' <<< "$PASTE_DATE")/$SLUG_TITLE.html" git push git push srht -- cgit v1.2.3 From e6acc282cd4912d74d8ab674d6085484c1562c79 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:19:50 -0300 Subject: fake-symlinks.sh: Copy all torrent files from website to ~/archive/torrent --- bash/fake-symlinks.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 023d298..dcd9225 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -26,6 +26,9 @@ for job in pacheco; do chmod +x "$HOME/annex/bin/cron/${job}-job.sh" done +mkdir -p ~/archive/torrent/ +find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; + normalize-name() { if [[ -n "$RENAME_TO" ]]; then echo "$RENAME_TO" -- cgit v1.2.3 From b8884b74c2ae452088679abefc7b076dfcd457ce Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:20:15 -0300 Subject: fake-symlinks.sh: Remove ShellCheck disable --- bash/fake-symlinks.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index dcd9225..3adfa02 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,5 +1,4 @@ #!/usr/bin/env bash -# shellcheck disable=2043 mkdir -p ~/.tmuxinator -- cgit v1.2.3 From 56e770e8f6e63392b16f170470214685ff35c9e3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:20:33 -0300 Subject: env.sh: Use .config/guix/current over .guix-profile --- bash/env.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index e4a7b5f..97a3fb3 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -11,7 +11,8 @@ export GOPATH="$HOME/dev/go" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -export GUIX_PROFILE="$HOME/.guix-profile" +# FIXME in Guix +export GUIX_PROFILE="$HOME/.config/guix/current" PATH="$PATH:$HOME/tmp/bin" PATH="$PATH:$HOME/dev/libre/others/dinheiros" -- cgit v1.2.3 From 56b47444d8a14ea4e51f493125a1ba462e949b25 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:20:59 -0300 Subject: Add FIXME markers --- bash/fake-symlinks.sh | 4 ++++ scripts/ad-hoc/pastebin.sh | 1 + 2 files changed, 5 insertions(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 3adfa02..b3f2ed6 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -414,4 +414,8 @@ ln-all ln-bare-project parseclj \ cargo2nix-demo \ website +# pushd ~/ +# mr cfg +# FIXME: trap + popd > /dev/null || exit 1 diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index d4c3159..e01f7b3 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +# FIXME: use getopt usage() { red "Missing argument <${1}>.\n" cat < Date: Fri, 1 Jan 2021 12:21:07 -0300 Subject: spacemacs.el: Add stub po-with-temp-buffer function --- spacemacs.el | 3 +++ 1 file changed, 3 insertions(+) diff --git a/spacemacs.el b/spacemacs.el index c077bfb..b51dc44 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -1,3 +1,6 @@ +(defun po-with-temp-buffer (&rest _) + nil) + ;; (defun org-time-add (&rest r) ;; nil) -- cgit v1.2.3 From 99b29d98f3c779f5a54b568398b6595759a778a3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:21:24 -0300 Subject: spacemacs.el: Add keybinding to ~/tmp/scratch.org --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index b51dc44..985d563 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -616,7 +616,7 @@ dump." (setq custom-keybindings '(("M-ç" . euandreh/find-bookmarked-files) ("C-M-y" . helm-show-kill-ring) - ("M-´" . (lambda () (interactive) (find-file "~/annex/txt/Dump.org"))) + ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))))) (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" -- cgit v1.2.3 From a2ba44c12a41a2b1f7d4c59cab79421268ff27e8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 1 Jan 2021 12:21:51 -0300 Subject: tmux.conf: Add FIXME markers --- tmux/tmux.conf | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 46c751c..88bf9e0 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -2,6 +2,14 @@ unbind C-b set -g prefix C-x +# FIXME +# C-x-C-x-C-e Bash +# man bash + +# FIXME +# how to rename the title of a window? +# how to move a pane from one window to another? + # Turn on mouse mode # https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ # https://github.com/tmux/tmux/blob/310f0a960ca64fa3809545badc629c0c166c6cd2/CHANGES#L12 -- cgit v1.2.3 From ad0bca5ec0537f7fc51361140ddb5c50f58c2573 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 6 Jan 2021 11:01:27 -0300 Subject: aliases.sh: Add 'mktorrent' alias including trackers --- bash/aliases.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index d034ed1..8792f79 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -41,3 +41,5 @@ alias grep='grep --color=always' alias td='pushd $(mktemp -d)' # https://linuxhandbook.com/run-alias-as-sudo/ alias sudo='sudo ' + +alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' -- cgit v1.2.3 From e2233b98ccfe286df302b80b74466a2410d38776 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 6 Jan 2021 11:02:11 -0300 Subject: gitignore: Remove gitignore patterns from website repo --- git/gitignore | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/git/gitignore b/git/gitignore index cd4cf42..0497ed3 100644 --- a/git/gitignore +++ b/git/gitignore @@ -2,10 +2,6 @@ playground.clj req.http .postman-ns *.swp -gemset.nix -.ignore -tmp/ -*.ogg -*.torrent -*.checksum -/static/favicon.png \ No newline at end of file +/gemset.nix +/.ignore +/tmp/ \ No newline at end of file -- cgit v1.2.3 From 69b1b9a6d989d1c8f883c25a22ecf51ac58aa063 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 6 Jan 2021 11:02:37 -0300 Subject: configuration.nix: Add mktorrent package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e3e451e..4948466 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -123,6 +123,7 @@ in { ## CLI tools + mktorrent diffoscope bundix poedit -- cgit v1.2.3 From 9e2008181c581fa23a76ba3d770595776ccf8358 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 6 Jan 2021 11:03:14 -0300 Subject: open: Add feh patterns --- scripts/ad-hoc/open | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open index 83e13b0..1135169 100755 --- a/scripts/ad-hoc/open +++ b/scripts/ad-hoc/open @@ -2,6 +2,9 @@ set -Eeuo pipefail case "$1" in + *.ico|*.jpg|*.jpeg|*.png) + feh "$1" + ;; http*|*.svg) firefox "$1" ;; -- cgit v1.2.3 From a399c3631934f4f8ceefe3eea5384675c45b3e88 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 6 Jan 2021 11:03:39 -0300 Subject: spacemacs.el: Uncomment polyfill functions --- spacemacs.el | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 985d563..d02598e 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -1,8 +1,7 @@ -(defun po-with-temp-buffer (&rest _) - nil) +(defun po-with-temp-buffer (&rest _) nil) +(defun evil-set-undo-system (&rest _) nil) -;; (defun org-time-add (&rest r) -;; nil) +;; (defun org-time-add (&rest r) nil) (defun dotspacemacs/layers () "Layer configuration: -- cgit v1.2.3 From 4da379618caa3fed6d80c4df3f53274c27f0c2af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:07:50 -0300 Subject: Add scripts/ad-hoc/clear as alias to c --- scripts/ad-hoc/clear | 1 + 1 file changed, 1 insertion(+) create mode 120000 scripts/ad-hoc/clear diff --git a/scripts/ad-hoc/clear b/scripts/ad-hoc/clear new file mode 120000 index 0000000..3410062 --- /dev/null +++ b/scripts/ad-hoc/clear @@ -0,0 +1 @@ +c \ No newline at end of file -- cgit v1.2.3 From 939edfc227f6a1902c48c3c06e926b06207efbfd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:08:52 -0300 Subject: open: Use VLC to see videos --- scripts/ad-hoc/open | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open index 1135169..c6e31fa 100755 --- a/scripts/ad-hoc/open +++ b/scripts/ad-hoc/open @@ -5,6 +5,9 @@ case "$1" in *.ico|*.jpg|*.jpeg|*.png) feh "$1" ;; + https://www.youtube.com/watch*) + vlc "$1" + ;; http*|*.svg) firefox "$1" ;; -- cgit v1.2.3 From 6b90f31558723e3febd3178ce26c4c2072305248 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:14:33 -0300 Subject: Move from ERC to WeeChat --- spacemacs.el | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/spacemacs.el b/spacemacs.el index d02598e..99f1fe2 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -619,7 +619,6 @@ dump." ("M-SPC" . (lambda () (interactive) (just-one-space -1))))) (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" - "~/annex/bin/misc/erc.el" "~/.quicklisp/slime-helper.el" "~/dev/guix/guix/etc/copyright.el")) @@ -806,6 +805,7 @@ through `notmuch-message-attach-regex'." ;; "annex/txt/archive/Things.old.org" "annex/bin/misc/git/mrconfig.ini" "annex/bin/misc/erc.el" + "annex/bin/misc/weechat/irc.conf" "annex/bin/misc/mail/notmuch-post.sh" "annex/bin/misc/mail/notmuch.el" "tmp/scratch.org" -- cgit v1.2.3 From 4af0b8247587313bbd8e34c96d01e8bab399b424 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:14:57 -0300 Subject: spacemacs: Remove slime-helper.el and copyright.el from custom-el-files --- spacemacs.el | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/spacemacs.el b/spacemacs.el index 99f1fe2..4b23e61 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -618,9 +618,7 @@ dump." ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))))) -(defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el" - "~/.quicklisp/slime-helper.el" - "~/dev/guix/guix/etc/copyright.el")) +(defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el")) (defmacro measure-time (&rest body) "Measure and return the running time of the code block." -- cgit v1.2.3 From d8586e8c537f2d5e1cc0c39ebc7c672b43b17fae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:15:44 -0300 Subject: configuration.nix: Disable virtualbox, start using qemu instead --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4948466..e8d9d59 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -65,7 +65,6 @@ in { time.timeZone = "America/Sao_Paulo"; virtualisation.docker.enable = true; - virtualisation.virtualbox.host.enable = true; fonts.fonts = with pkgs; [ source-code-pro -- cgit v1.2.3 From 0e50b62c5b28507170c3829290ba114606cdf9a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:16:09 -0300 Subject: configuration.nix: Use patched version of entr with better clear --- nixos/configuration.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e8d9d59..7850699 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -106,6 +106,12 @@ in { }); in with pkgs; [ + entr-with-good-clear = pkgs.entr.overrideAttrs (oldAttrs: { + postPatch = '' + substituteInPlace entr.c --replace /usr/bin/clear clear + ${oldAttrs.postPatch} + ''; + }); ## Personal data tools mercurialFull -- cgit v1.2.3 From da00c401f8770d2ff819c3fe192ebd3db8f95c89 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:16:33 -0300 Subject: configuration.nix: Add 'make' alias to bmake package --- nixos/configuration.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7850699..54d3586 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -106,6 +106,11 @@ in { }); in with pkgs; [ + bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/bmake $out/bin/make + ''; + }); entr-with-good-clear = pkgs.entr.overrideAttrs (oldAttrs: { postPatch = '' substituteInPlace entr.c --replace /usr/bin/clear clear -- cgit v1.2.3 From c278d5c1425e3bb39d4336db015dd51e63251e20 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:16:52 -0300 Subject: configuration.nix: Add segregated nu-packages list --- nixos/configuration.nix | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 54d3586..0878ad4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -118,6 +118,15 @@ in { ''; }); + nu-packages = with pkgs; [ + awscli + yubioath-desktop + leiningen + openjdk8 + clojure # =clj= + kubernetes + nssTools # =pk12util= + ]; ## Personal data tools mercurialFull -- cgit v1.2.3 From edc3754a1e14982c09088c3633ff8342cd4797af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:17:24 -0300 Subject: configuration.nix: clean-up packages --- nixos/configuration.nix | 173 ++++++++++++++++++++++-------------------------- 1 file changed, 80 insertions(+), 93 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0878ad4..13241af 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -104,8 +104,6 @@ in { propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [ pkgs.python3Packages.youtube-dl ]; }); - in with pkgs; - [ bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { postInstall = '' ln -s $out/bin/bmake $out/bin/make @@ -127,9 +125,9 @@ in { kubernetes nssTools # =pk12util= ]; - ## Personal data tools - mercurialFull + in with pkgs; [ + ## Personal data tools gitAndTools.git-open gitAndTools.gitFull gitAndTools.git-annex @@ -139,54 +137,39 @@ in { gnupg mr borgbackup + fossil ## CLI tools - + groff # FIXME: Is it a standard? mktorrent diffoscope bundix - poedit bash bash-completion nix-bash-completions youtube-dl wget - vim + vim # FIXME: nvi? tmux tmuxinator sox # =play= gettext - ag gnugrep - htop - gotop rlwrap - awscli jq rq openvpn xclip - bc # binary calculator used in nucli - gnumake - bmake psmisc # =killall= xorg.xkill - gksu # =gksudo= + gksu tree - libxml2 # =xmllint= unzip # used by extract bash function and Clojure go-to-source feh # simplistic image viewer nixUnstable # =nix= - niv - zip - alsaUtils # for xmonad volume commands - nssTools # =pk12util= bind # =dig= rsync - inotify-tools - ncdu - fd - moreutils # =vipe= + moreutils # =vipe=, =sponge= graphviz # =dot= and others graph-easy # ASCII drawings for GraphViz output mkpasswd @@ -194,117 +177,121 @@ in { recutils sqlite trash-cli - qrencode - peek # GIF recorder - entr - fossil + entr-with-good-clear mailutils ffmpeg-full ledger + gnuplot ranger electrum - libressl - help2man - ripgrep-all zathura - gnuplot - vagrant - mrsh - - gnome3.libgnome-keyring - gnome3.gnome-keyring st pavucontrol - # qutebrowser broken + qutebrowser # FIXME: add ad-blocker + firefox # FIXME: Use qutebrowser? But it is Google-based weechat - aerc + mutt # FIXME: replace notmuch in Emacs newsboat acpi + xsel + pinentry ## Mail - notmuch isync - procmail # includes =formail= - - ## Spell checking - - (aspellWithDicts (ps: with ps; [ en eo fr pt_BR ])) - languagetool - - ## Music - - texlive.combined.scheme-full - lilypond - python36Packages.python-ly - lame - frescobaldi - timidityWithEvenMoreFormats - active-quodlibet ## Programming tools - - cachix - nixfmt - niv - sbcl - leiningen - python3 - elixir - openjdk8 - clojure # =clj= perl - dhall - dhall-json - nodePackages.node2nix shellcheck - xsel - nodejs-10_x - ruby - pinentry - nim - autoconf - automake - pkg-config + mrsh + dash - ## Containers and VMs + ## POSIX + bmake-with-alias # gnumake + byacc # bison + bc + pax + flex - kubernetes + ## To be removed + tdesktop # telegram-desktop application + gnome3.libgnome-keyring + gnome3.gnome-keyring + active-quodlibet # FIXME: use cmus, how to edit metadata? + gpodder-with-youtube-dl + transmission-gtk # FIXME: use TUI version + # help2man + # libxml2 # =xmllint= + # libressl + # texlive.combined.scheme-full + # lilypond + # frescobaldi + # zip + # aerc + # cachix + # timidityWithEvenMoreFormats + # python36Packages.python-ly + # lame + # (aspellWithDicts (ps: with ps; [ en eo fr pt_BR ])) + # languagetool + # mercurialFull + # poedit + # ag + # gotop + # htop # FIXME: stick to =top=? + # inotify-tools + # ncdu + # fd + # qrencode + # peek # GIF recorder + # ripgrep-all + # gnome3.gtk-vnc + # trayer + # networkmanagerapplet # FIXME: use =nmtui= instead + # libreoffice + # vagrant + # virtualisation.virtualbox.host.enable = true; + # autoconf + # automake + # pkg-config + # python3 + # elixir + # nixfmt + # niv + # sbcl + # dhall + # dhall-json + # nodePackages.node2nix + # nodejs-10_x + # ruby + # nim + + ## Containers and VMs qemu - gnome3.gtk-vnc ## xmonad - xorg.xmodmap xorg.xmessage - trayer dmenu escrotum xorg.xbacklight - networkmanagerapplet playerctl lightdm fvwm # =xpmroot= haskellPackages.xmobar haskellPackages.yeganesh arandr + alsaUtils # for xmonad volume commands ## GUI programs - audacity zbar fractal calibre - gpodder-with-youtube-dl - firefox - emacs - tdesktop # telegram-desktop application + emacs ag vlc - keepassxc - yubioath-desktop - libreoffice - transmission-gtk - ] ++ localConfiguration.proprietaryPackages; + keepassxc # FIXME: pass? How can pass be used on Android? + ] ++ localConfiguration.proprietaryPackages ++ nu-packages; nixpkgs = { config = { -- cgit v1.2.3 From 285de58ea089709d38775f34d67419f39093fe8c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:17:51 -0300 Subject: configuration.nix: Disable GVFS --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 13241af..dd24d69 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -251,6 +251,7 @@ in { # libreoffice # vagrant # virtualisation.virtualbox.host.enable = true; + # gvfs.enable = true; # autoconf # automake # pkg-config @@ -330,7 +331,6 @@ in { useTLS = true; }; blueman.enable = true; - gvfs.enable = true; # We can see the actual generated crontab at /etc/crontab cron = { -- cgit v1.2.3 From 7fc1c2d189da8a77f666104997664704cb19c49b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:20:29 -0300 Subject: env.sh: Add ~/.local/bin to $PATH --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index 97a3fb3..e070fe5 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -14,6 +14,7 @@ export NIX_BUILD_CORES=0 # FIXME in Guix export GUIX_PROFILE="$HOME/.config/guix/current" +PATH="$PATH:$HOME/.local/bin" PATH="$PATH:$HOME/tmp/bin" PATH="$PATH:$HOME/dev/libre/others/dinheiros" -- cgit v1.2.3 From 2a4d10738a1d7d08ebba9f0fc4a5dbb004fe1382 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:20:44 -0300 Subject: env.sh: Increase priority of personal $PATHs --- bash/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index e070fe5..d81f67f 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -19,5 +19,5 @@ PATH="$PATH:$HOME/tmp/bin" PATH="$PATH:$HOME/dev/libre/others/dinheiros" for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do - PATH="$PATH:$p/ad-hoc:$p/cron" + PATH="$p/ad-hoc:$p/cron:$PATH" done -- cgit v1.2.3 From 311b9731ae5a1162b72684eaf0ddde7c63d9ce99 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:36:11 -0300 Subject: xsession.sh: Start moving out of GNOME --- xmonad/xsession.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh index b25a9a1..a59afb3 100755 --- a/xmonad/xsession.sh +++ b/xmonad/xsession.sh @@ -1 +1,4 @@ xmonad +# FIXME +# http://joost.damad.be/2011/07/x-with-xmonad-without-kdegnome.html +# https://wiki.haskell.org/Xmonad/Config_archive/John_Goerzen's_Configuration -- cgit v1.2.3 From e21ed8eab05dd2745a5317fbea220132667480fc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:36:36 -0300 Subject: hd.sh: Should backup the contents of SSD --- scripts/ad-hoc/hd.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index 91b84d9..181dba5 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -7,6 +7,8 @@ annex.sh rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ +# FIXME +# rsync -avzP --delete "$R:" ~/UTCLOUD/backups/box-ssd/ cd ~/dev/ mr -s -j4 hd -- cgit v1.2.3 From 17c0b5bb921ae0a57863afa653ab2f8a65105611 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:50:52 -0300 Subject: configuration.nix: Add note on ag for emacs --- nixos/configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index dd24d69..4b64c22 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -289,7 +289,8 @@ in { zbar fractal calibre - emacs ag + emacs + ag # Emacs works better with ag over grep vlc keepassxc # FIXME: pass? How can pass be used on Android? ] ++ localConfiguration.proprietaryPackages ++ nu-packages; -- cgit v1.2.3 From c2e222259d9aa57c486a10558ca047d02706f6cc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:51:17 -0300 Subject: nixfmt ./nixos/configuration.nix --- nixos/configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 4b64c22..ad3b57b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -126,7 +126,8 @@ in { nssTools # =pk12util= ]; - in with pkgs; [ + in with pkgs; + [ ## Personal data tools gitAndTools.git-open gitAndTools.gitFull -- cgit v1.2.3 From 5e7ce1d573557834d7cf341f67dcc216b27571b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 08:56:45 -0300 Subject: Add assert-nixfmt and assert-todos to tests.sh --- build-aux/assert-nixfmt.sh | 12 ++++++++++++ build-aux/assert-todos.sh | 7 +++++++ nixos/configuration.nix | 1 + tests.sh | 11 ++++------- 4 files changed, 24 insertions(+), 7 deletions(-) create mode 100755 build-aux/assert-nixfmt.sh create mode 100755 build-aux/assert-todos.sh diff --git a/build-aux/assert-nixfmt.sh b/build-aux/assert-nixfmt.sh new file mode 100755 index 0000000..19c9cd3 --- /dev/null +++ b/build-aux/assert-nixfmt.sh @@ -0,0 +1,12 @@ +#!/bin/sh -eux + +format() { + nixfmt < "$1" | diff - "$1" || { + echo "The file '$1' is unformatted. To fix it, run:" + echo " nixfmt $1" + exit 1 + } +} +export -f format + +find . -type f -name '*.nix' -exec sh -c 'format $0' {} \; diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh new file mode 100755 index 0000000..974862e --- /dev/null +++ b/build-aux/assert-todos.sh @@ -0,0 +1,7 @@ +#!/bin/sh -eux + +if git grep FIXME | grep -Ev '^(bash/templates/)'; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.org." + exit 1 +fi diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ad3b57b..0fc47c2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -196,6 +196,7 @@ in { acpi xsel pinentry + nixfmt ## Mail notmuch diff --git a/tests.sh b/tests.sh index 68d47f4..2aa7d66 100755 --- a/tests.sh +++ b/tests.sh @@ -1,8 +1,5 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" +#!/bin/sh -eux -set -x - -./scripts/assert-nixfmt.sh -./scripts/assert-shellcheck.sh +./build-aux/assert-nixfmt.sh +./build-aux/assert-todos.sh +./build-aux/assert-shellcheck.sh -- cgit v1.2.3 From bc9298ff01f1c8b6abbcd27f4488b9a19f0433a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 09:18:03 -0300 Subject: xmobar-notmuch.sh: Fix ShellCheck and make it POSIX sh --- scripts/ad-hoc/xmobar-notmuch.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh index a0362d3..c8afc01 100755 --- a/scripts/ad-hoc/xmobar-notmuch.sh +++ b/scripts/ad-hoc/xmobar-notmuch.sh @@ -1,8 +1,7 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eu while true; do - echo "mail: $(notmuch count tag:unread AND \(NOT tag:ml OR thread:{tag:track}\))/$(notmuch count tag:inbox)" + printf "mail: %s/%s" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" if grep -q off-line <(acpi -a); then sleep $((60 * 15)) else -- cgit v1.2.3 From b7862ed9ba8afa7acdf168daf385181774a5f9fb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 09:19:40 -0300 Subject: Remove scripts/ad-hoc/sl --- scripts/ad-hoc/sl | 13 ------------- 1 file changed, 13 deletions(-) delete mode 100755 scripts/ad-hoc/sl diff --git a/scripts/ad-hoc/sl b/scripts/ad-hoc/sl deleted file mode 100755 index 2333462..0000000 --- a/scripts/ad-hoc/sl +++ /dev/null @@ -1,13 +0,0 @@ -#!/usr/bin/env bash - -# Taken from: -# https://gir.st/blog/sl-alt.htm - -# sl - prints a mirror image of ls. (C) 2017 Tobias Girstmair, https://gir.st/, GPLv3 - -LEN=$(ls "$@" |wc -L) # get the length of the longest line - -ls "$@" | rev | while read -r line -do - printf "%${LEN}.${LEN}s\\n" "$line" | sed 's/^\(\s\+\)\(\S\+\)/\2\1/' -done \ No newline at end of file -- cgit v1.2.3 From 5e88ed30b459980d6b371c27e86e54d3cc5165db Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 09:20:37 -0300 Subject: xmobar-notmuch.sh: Remove shell redirection --- scripts/ad-hoc/xmobar-notmuch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh index c8afc01..98519bd 100755 --- a/scripts/ad-hoc/xmobar-notmuch.sh +++ b/scripts/ad-hoc/xmobar-notmuch.sh @@ -2,7 +2,7 @@ while true; do printf "mail: %s/%s" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" - if grep -q off-line <(acpi -a); then + if acpi -a | grep -q off-line; then sleep $((60 * 15)) else sleep $((60 * 1)) -- cgit v1.2.3 From 3296e727814ce570f2f209cd0a79ea77ea16575e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 09:21:06 -0300 Subject: Remove git-blame-someone-else --- scripts/ad-hoc/git-blame-someone-else | 21 --------------------- 1 file changed, 21 deletions(-) delete mode 100755 scripts/ad-hoc/git-blame-someone-else diff --git a/scripts/ad-hoc/git-blame-someone-else b/scripts/ad-hoc/git-blame-someone-else deleted file mode 100755 index dd71826..0000000 --- a/scripts/ad-hoc/git-blame-someone-else +++ /dev/null @@ -1,21 +0,0 @@ -#!/usr/bin/env bash - -# Taken from https://github.com/jayphelps/git-blame-someone-else/ - -if [ $# -ne 2 ]; then - >&2 echo "Usage: $0 " - exit 1 -fi - -AUTHOR=$1 -AUTHOR_NAME=$(echo $AUTHOR | perl -wlne '/^(.*?)\s*<.*>$/ and print $1') -AUTHOR_EMAIL=$(echo $AUTHOR | perl -wlne '/^.*\s*<(.*)>$/ and print $1') -COMMIT=$(git rev-parse --short $2) - -{ - GIT_SEQUENCE_EDITOR="sed -i -e 's/^pick $COMMIT/edit $COMMIT/'" git rebase -i $COMMIT~1^^ - GIT_COMMITTER_NAME="$AUTHOR_NAME" GIT_COMMITTER_EMAIL="$AUTHOR_EMAIL" git commit --amend --no-edit --author="$AUTHOR" - # git rebase --continue -} &> /dev/null - -echo "$AUTHOR_NAME is now the author of $COMMIT. You're officially an asshole."; -- cgit v1.2.3 From f29f2b5a9a0eb53dd82b176b7d471dec9641027b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 10:39:45 -0300 Subject: symlinks.sh: Remove ~/.vimrc, so that Vim uses the compatibility mode --- bash/symlinks.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 6c18bf2..f9614c3 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -59,9 +59,6 @@ ln -fs "${DOTFILES}/mercurial/hgrc.ini" ~/.hgrc mkdir -p ~/.config/ranger/ ln -fs "${DOTFILES}/ranger.conf" ~/.config/ranger/rc.conf -## Vim -ln -fs "${DOTFILES}/vimrc.conf" ~/.vimrc - ## nu ln -fs "$HOME/annex/bin/misc/nurc.sh" ~/.nurc -- cgit v1.2.3 From ff08f4a3b6145abc71e8aba67136ec2975a5c5da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 12:46:38 -0300 Subject: Add dmenu-vlc.sh --- scripts/ad-hoc/dmenu-vlc.sh | 9 +++++++++ xmonad/xmonad.hs | 3 +++ 2 files changed, 12 insertions(+) create mode 100755 scripts/ad-hoc/dmenu-vlc.sh diff --git a/scripts/ad-hoc/dmenu-vlc.sh b/scripts/ad-hoc/dmenu-vlc.sh new file mode 100755 index 0000000..c42e26f --- /dev/null +++ b/scripts/ad-hoc/dmenu-vlc.sh @@ -0,0 +1,9 @@ +#!/bin/sh -eu + +URL="$(xsel -bo)" + +res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" + +if [ "$res" = 'yes' ]; then + vlc "$URL" +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 972ba3e..0dd8cfb 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -83,6 +83,9 @@ myKeyPBindings = -- https://stackoverflow.com/questions/25857674/xmonad-vertical-resize-tile-window , ("M-a", sendMessage MirrorExpand) , ("M-z", sendMessage MirrorShrink) + + -- Enqueue link on clipboard in VLC + , ("M-v", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/dmenu-vlc.sh") ] myLayoutHook = -- cgit v1.2.3 From 9db705ffd20ad81a74291d9ae3959bea0b485d22 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 13:25:49 -0300 Subject: xmobar-mpris.sh: Use 'title' metadata over hand-crafting it --- scripts/ad-hoc/xmobar-mpris.sh | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/scripts/ad-hoc/xmobar-mpris.sh b/scripts/ad-hoc/xmobar-mpris.sh index ebdc286..a2af8c4 100755 --- a/scripts/ad-hoc/xmobar-mpris.sh +++ b/scripts/ad-hoc/xmobar-mpris.sh @@ -23,10 +23,7 @@ main() { printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" ;; vlc) - # From URI encoded file:/// -> file name -> without extension -> with decoded URI -> drop timestamp - NAME="$(basename "$(playerctl metadata xesam:url)")" - FILE="$(urldecode "${NAME%.*}" | cut -d' ' -f2-)" - printf "%s: %s\n" "${CUR}" "${FILE}" + printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" ;; *) default_status "${CUR}" -- cgit v1.2.3 From 71b37dae22ba95bcc7f5e440ff8556381b539959 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 13:40:43 -0300 Subject: configuration.nix: network block using hosts file --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 0fc47c2..38adfe5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -47,6 +47,7 @@ in { networking.hostName = localConfiguration.hostName; networking.networkmanager.enable = true; + networking.extraHosts = builtins.readFile (builtins.fetchurl "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn/hosts"); system.autoUpgrade = { enable = true; -- cgit v1.2.3 From 2507e98fda6a896af61fabb5e3be0627a5d011bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 13:42:02 -0300 Subject: configuration.nix: declare networking attribute with an attribute set --- nixos/configuration.nix | 9 ++++++--- 1 file changed, 6 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 38adfe5..f4da786 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -45,9 +45,12 @@ in { }; }; - networking.hostName = localConfiguration.hostName; - networking.networkmanager.enable = true; - networking.extraHosts = builtins.readFile (builtins.fetchurl "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn/hosts"); + networking = { + hostName = localConfiguration.hostName; + networkmanager.enable = true; + extraHosts = builtins.readFile (builtins.fetchurl + "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn/hosts"); + }; system.autoUpgrade = { enable = true; -- cgit v1.2.3 From 1f930070b162f37a0a64077384e8021b827ab789 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 13:42:46 -0300 Subject: configuration.nix: Remove some FIXME markers --- nixos/configuration.nix | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f4da786..a963c6f 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -145,7 +145,7 @@ in { fossil ## CLI tools - groff # FIXME: Is it a standard? + groff mktorrent diffoscope bundix @@ -154,7 +154,7 @@ in { nix-bash-completions youtube-dl wget - vim # FIXME: nvi? + vim tmux tmuxinator sox # =play= @@ -194,9 +194,9 @@ in { pavucontrol qutebrowser # FIXME: add ad-blocker firefox # FIXME: Use qutebrowser? But it is Google-based - weechat - mutt # FIXME: replace notmuch in Emacs - newsboat + weechat # replacing ERC + mutt # replacing notmuch in Emacs # FIXME: make the transition + newsboat # replacing elfeed acpi xsel pinentry @@ -244,7 +244,7 @@ in { # poedit # ag # gotop - # htop # FIXME: stick to =top=? + # htop # FIXME: stick to =top=? check in BSDs # inotify-tools # ncdu # fd @@ -253,7 +253,7 @@ in { # ripgrep-all # gnome3.gtk-vnc # trayer - # networkmanagerapplet # FIXME: use =nmtui= instead + # networkmanagerapplet # nm-applet + trayer -> nmtui # libreoffice # vagrant # virtualisation.virtualbox.host.enable = true; -- cgit v1.2.3 From 68c1de882e104a7724e391996e4c3e2b91bece2b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 16:26:20 -0300 Subject: Use fzf with vi --- bash/util.sh | 7 +++++++ nixos/configuration.nix | 1 + 2 files changed, 8 insertions(+) diff --git a/bash/util.sh b/bash/util.sh index a891739..569462f 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -41,3 +41,10 @@ gen-password() { length="${1-99}" tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: } + +ji() { + f="$(fzf)" + if [ -n "$f" ]; then + vi "$f" + fi +} diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a963c6f..9ae0897 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -155,6 +155,7 @@ in { youtube-dl wget vim + fzf tmux tmuxinator sox # =play= -- cgit v1.2.3 From b4a59c8f6f2c633ffe3955377757aaa45bb9ac6d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 17:14:19 -0300 Subject: Add WIP vlc-playlist-dump.sh cronjob --- nixos/common.nix | 1 + nixos/usurpador.nix | 1 + scripts/cron/vlc-playlist-dump.sh | 18 ++++++++++++++++++ 3 files changed, 20 insertions(+) create mode 100755 scripts/cron/vlc-playlist-dump.sh diff --git a/nixos/common.nix b/nixos/common.nix index 75f5fa5..56f2aac 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -6,6 +6,7 @@ let every-x-hours = "0 * * * *"; pub-crons = { sync-mail = every-x-hours; + vlc-playlist-dump = every-x-hours; deliver-queued-mail = every-x-hours; report-summary-job = "30 13 * * *"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index f92c063..2f4c52e 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -11,6 +11,7 @@ in rec { allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ common.crons.sync-mail + common.crons.vlc-playlist-dump common.crons.deliver-queued-mail common.crons.report-summary-job diff --git a/scripts/cron/vlc-playlist-dump.sh b/scripts/cron/vlc-playlist-dump.sh new file mode 100755 index 0000000..58103a9 --- /dev/null +++ b/scripts/cron/vlc-playlist-dump.sh @@ -0,0 +1,18 @@ +#!/bin/sh -eux + +exec &> /dev/stdout +echo "Starting $(date -Is)" + +# FIXME +# https://duckduckgo.com/?q=vlc+dump+playlist+command+line&ia=web&iai=r1-5&page=1&sexp=%7B%22cdrexp%22%3A%22b%22%2C%22artexp%22%3A%22c%22%2C%22prodexp%22%3A%22b%22%2C%22prdsdexp%22%3A%22c%22%2C%22biaexp%22%3A%22b%22%2C%22msvrtexp%22%3A%22b%22%2C%22bltexp%22%3A%22b%22%7D# if [[ "$(find ~/mbsync/queued-email/ -type f -not -name 'index' | wc -l)" = 0 ]]; then +# echo 'No queued emails found. noop' +# else +# # https://github.com/syl20bnr/spacemacs/issues/4504#issuecomment-232973179 +# emacs -batch \ +# -l ~/.emacs.d/init.el \ +# -l ~/annex/bin/misc/mail/notmuch.el \ +# --eval "(run-hooks 'emacs-startup-hook)" \ +# --eval '(smtpmail-send-queued-mail)' +# fi + +echo "Finishing: $(date -Is)" -- cgit v1.2.3 From f2d6958e259c0ef4f5162f3a17e990330b1b1926 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 17:14:34 -0300 Subject: configuration.nix: Remove unused timidityWithEvenMoreFormats --- nixos/configuration.nix | 7 ------- 1 file changed, 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9ae0897..1e84d31 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -85,13 +85,6 @@ in { sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; }) { }; - timidityWithEvenMoreFormats = pkgs.timidity.overrideAttrs (oldAttrs: { - configureFlags = oldAttrs.configureFlags - ++ [ "--enable-audio=vorbis,flac" ]; - buildInputs = oldAttrs.buildInputs - ++ [ pkgs.libogg pkgs.libvorbis pkgs.flac ]; - }); - noTestAttrs = { doCheck = false; doInstallCheck = false; -- cgit v1.2.3 From f026dd514cd6521918b3e2dfcd39498ad48e7467 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 17:15:10 -0300 Subject: configuration.nix: Sort packages --- nixos/configuration.nix | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1e84d31..1368606 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -147,8 +147,6 @@ in { nix-bash-completions youtube-dl wget - vim - fzf tmux tmuxinator sox # =play= @@ -186,8 +184,6 @@ in { zathura st pavucontrol - qutebrowser # FIXME: add ad-blocker - firefox # FIXME: Use qutebrowser? But it is Google-based weechat # replacing ERC mutt # replacing notmuch in Emacs # FIXME: make the transition newsboat # replacing elfeed @@ -195,6 +191,8 @@ in { xsel pinentry nixfmt + vim + fzf ## Mail notmuch @@ -217,9 +215,6 @@ in { tdesktop # telegram-desktop application gnome3.libgnome-keyring gnome3.gnome-keyring - active-quodlibet # FIXME: use cmus, how to edit metadata? - gpodder-with-youtube-dl - transmission-gtk # FIXME: use TUI version # help2man # libxml2 # =xmllint= # libressl @@ -238,7 +233,7 @@ in { # poedit # ag # gotop - # htop # FIXME: stick to =top=? check in BSDs + # htop # inotify-tools # ncdu # fd @@ -289,10 +284,17 @@ in { zbar fractal calibre - emacs - ag # Emacs works better with ag over grep vlc - keepassxc # FIXME: pass? How can pass be used on Android? + + ## Candidates to be replaced by alternatives + emacs # To be replaced by vi + fzf + ag # Emacs works better with ag over grep + + active-quodlibet # cmus + mutagen + gpodder-with-youtube-dl # podboat? + transmission-gtk # Transmission TUI + keepassxc # pass? How can pass be used on Android? + firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better ] ++ localConfiguration.proprietaryPackages ++ nu-packages; nixpkgs = { -- cgit v1.2.3 From f448d5cf5662edd14380d398c1e98e0e1df1bef2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 17:15:27 -0300 Subject: assert-shellcheck.sh: Include all shebangs while there are still Bash scripts --- build-aux/assert-shellcheck.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh index d07815b..5b6cb91 100755 --- a/build-aux/assert-shellcheck.sh +++ b/build-aux/assert-shellcheck.sh @@ -1,5 +1,5 @@ #!/bin/sh -eux git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ + xargs -0 awk 'FNR==1 && /^#!\// { print FILENAME }' | \ xargs shellcheck -- cgit v1.2.3 From aa173c6e76a959a3999e644828ca4f952d47a3d3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 7 Jan 2021 17:20:20 -0300 Subject: env.sh: Add firefox as $BROWSER --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index d81f67f..bae04e6 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -2,6 +2,7 @@ export R='16686@ch-s010.rsync.net' export EDITOR=vi +export BROWSER=firefox export INPUTRC=~/.inputrc export BORG_REMOTE_PATH='borg1' export LANG=fr_FR.UTF-8 -- cgit v1.2.3 From a3d315dede236a4fb2891913b115c838c1e3b786 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Jan 2021 08:24:32 -0300 Subject: util.sh: Add vi command to history --- bash/util.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/util.sh b/bash/util.sh index 569462f..c040e86 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -45,6 +45,7 @@ gen-password() { ji() { f="$(fzf)" if [ -n "$f" ]; then + history -s vi "$f" vi "$f" fi } -- cgit v1.2.3 From e82e3b9355b894113a289aa3ac42305996dc3f8b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Jan 2021 08:24:45 -0300 Subject: configuration.nix: Add broken nvi commented package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1368606..5c254b7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -193,6 +193,7 @@ in { nixfmt vim fzf + # nvi # broken ## Mail notmuch -- cgit v1.2.3 From 9b54693e1e6cfc02eb31bb76e970c55a9b767a16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Jan 2021 08:25:52 -0300 Subject: xmobar-notmuch.sh: Fix missing newline at the end --- scripts/ad-hoc/xmobar-notmuch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh index 98519bd..f174a8e 100755 --- a/scripts/ad-hoc/xmobar-notmuch.sh +++ b/scripts/ad-hoc/xmobar-notmuch.sh @@ -1,7 +1,7 @@ #!/bin/sh -eu while true; do - printf "mail: %s/%s" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" + printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" if acpi -a | grep -q off-line; then sleep $((60 * 15)) else -- cgit v1.2.3 From 17bebe42902417c4146f1a6dd5fe9d09fa38c555 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Jan 2021 18:18:02 -0300 Subject: x.sh: Remove default-web-browser in favor of $BROWSER --- bash/x.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/x.sh b/bash/x.sh index 04b7c25..350ac4c 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -11,7 +11,6 @@ xdg-mime default vlc.desktop video/x-matroska xdg-mime default vlc.desktop audio/mpeg xdg-mime default vlc.desktop audio/x-flac -xdg-settings set default-web-browser firefox.desktop xdg-mime default firefox.desktop text/html xdg-mime default firefox.desktop text/xml -- cgit v1.2.3 From da91ea61c44dde28cc8436b9318b089c61f57e14 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Jan 2021 18:19:25 -0300 Subject: configuration.nix: Fully remove GNOME --- nixos/configuration.nix | 16 ++++------------ xmonad/xsession.sh | 3 --- 2 files changed, 4 insertions(+), 15 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5c254b7..1377336 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -214,8 +214,6 @@ in { ## To be removed tdesktop # telegram-desktop application - gnome3.libgnome-keyring - gnome3.gnome-keyring # help2man # libxml2 # =xmllint= # libressl @@ -241,7 +239,6 @@ in { # qrencode # peek # GIF recorder # ripgrep-all - # gnome3.gtk-vnc # trayer # networkmanagerapplet # nm-applet + trayer -> nmtui # libreoffice @@ -314,6 +311,7 @@ in { gnupg.agent.enable = true; }; + xdg.portal.enable = true; services = { syncthing = { enable = true; @@ -362,6 +360,9 @@ in { layout = "br"; xkbOptions = "caps:swapescape"; + # Touchpad support + libinput.enable = true; + config = '' Section "Device" Identifier "Intel Graphics" @@ -376,12 +377,9 @@ in { }; desktopManager = { xterm.enable = false; - gnome3.enable = true; }; displayManager = { defaultSession = "none+xmonad"; - # In cases where "none+xmonad" stop working, here's a fallback - # defaultSession = "gnome-xorg"; lightdm.enable = true; @@ -397,16 +395,10 @@ in { }; }; - gnome3 = { - gnome-keyring.enable = true; - sushi.enable = true; # nautilus previewer - }; - pcscd.enable = true; # required by yubioath }; security = { - pam.services.lightdm.enableGnomeKeyring = true; sudo.enable = true; hideProcessInformation = false; }; diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh index a59afb3..b25a9a1 100755 --- a/xmonad/xsession.sh +++ b/xmonad/xsession.sh @@ -1,4 +1 @@ xmonad -# FIXME -# http://joost.damad.be/2011/07/x-with-xmonad-without-kdegnome.html -# https://wiki.haskell.org/Xmonad/Config_archive/John_Goerzen's_Configuration -- cgit v1.2.3 From fe640a3b03efeee94817eed4c34c578db953668d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 9 Jan 2021 18:45:52 -0300 Subject: configuration.nix: Move gnugrep to POSIX section --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1377336..072c24c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -151,7 +151,6 @@ in { tmuxinator sox # =play= gettext - gnugrep rlwrap jq rq @@ -162,7 +161,7 @@ in { gksu tree unzip # used by extract bash function and Clojure go-to-source - feh # simplistic image viewer + feh nixUnstable # =nix= bind # =dig= rsync @@ -211,6 +210,7 @@ in { bc pax flex + gnugrep ## To be removed tdesktop # telegram-desktop application -- cgit v1.2.3 From 0df31329cfa10a57787b460db2e6cb7282bf8df5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 09:35:43 -0300 Subject: os.scm: Copy programs from configuration.nix Next step is go beyond the QEMU VM and test on the hardware itself in order to remove GNOME. --- guix/os.scm | 166 ++++++++++++++++++++++++++++-------------------- nixos/configuration.nix | 18 +++--- 2 files changed, 105 insertions(+), 79 deletions(-) diff --git a/guix/os.scm b/guix/os.scm index 93e460c..6d2cb16 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -18,31 +18,10 @@ (packages (append (map (compose list specification->package+output symbol->string) - '(;; Fonts - font-adobe-source-code-pro - - ;; Base + '(;; Base nss-certs ;; suggested by Guix - help2man ;; used in Guix development - strace - - ;; Emacs - emacs - - ;; emacs-spacemacs-theme - ;; emacs-spaceline - ;; emacs-evil - ;; emacs-evil-collection - ;; CLI tools - vim - curl - wget - autojump - rsync - terraform - - ;; DVCS tools + ;; Personal data tools git git:send-email git-lfs @@ -51,71 +30,118 @@ git-remote-gcrypt git-crypt fossil - diff-so-fancy git-open - - xclip - rlwrap borg + gnupg + + ;; CLI tools + groff + mktorrent + diffoscope bash-completion - vlc youtube-dl - sox ;; SoX - Sound eXchange - jq - calibre - notmuch - isync - xset - blueman - bluez - playerctl - xmessage - qutebrowser - the-silver-searcher - fd - ranger - gettext - openssh - gnupg - nvi + ;;; wget - both already included? + ;;; curl tmux - pinentry-tty ;; pinentry? + ;; tmuxinator + sox ; SoX - Sound eXchange + gettext + rlwrap + jq + ;; rq + openvpn + xclip + psmisc ; killall + xkill + ;; gksu + tree + unzip + feh + bind:utils + rsync + moreutils + graphviz + ;; graph-easy + ;; mkpasswd, is this required? direnv recutils - htop - bind:utils - openssl - zbar + sqlite trash-cli - entr + entr ; need patch mailutils + ffmpeg ledger - - ;; Programming - clojure - - ;; Workstation personal programs - mutt + gnuplot + ranger + electrum + zathura + ;; zathura-ps + ;; zathura-pdf-poppler + ;; zathura-djvu + ;; zathura-cb + ;; zathura-pdf-mupdf + st + pavucontrol weechat + mutt newsboat - keepassxc - gpodder - newsboat - st + acpi + xsel + pinentry + vim + nvi + ;; fzf + autojump - zathura - zathura-ps - zathura-pdf-poppler - zathura-djvu - zathura-cb - ;; zathura-pdf-mupdf + ;; Mail + notmuch + isync + + ;; Programming tools + perl + shellcheck + ;; mrsh + dash + + ;; POSIX + ;; bmake + ;; byacc + ;; pax + flex + ;;; gnugrep - already included? + + ;; Containers and VMs + qemu ;; xmonad + xmodmap + xmessage + dmenu + ;; escrotum + xbacklight + playerctl + ;; lightdm + fvwm ; xpmroot + xmonad ghc ghc-xmonad-contrib xmobar - dmenu - yeganesh)) + yeganesh + arandr + alsa-utils ; for xmonad volume controls + xset + + ;; GUI programs + audacity + zbar + ;; fractal + calibre + vlc + gpodder + qutebrowser + keepassxc + blueman + bluez)) %base-packages)) (services (append diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 072c24c..1ef2dd5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -149,7 +149,7 @@ in { wget tmux tmuxinator - sox # =play= + sox # =play=, SoX - Sound eXchange gettext rlwrap jq @@ -191,8 +191,8 @@ in { pinentry nixfmt vim - fzf # nvi # broken + fzf ## Mail notmuch @@ -421,13 +421,13 @@ in { # From the Guix manual: # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup buildUser = (i: { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = [ "guixbuild" ]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.nologin; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system + "guixbuilder${i}" = { # guixbuilder$i + group = "guixbuild"; # -g guixbuild + extraGroups = [ "guixbuild" ]; # -G guixbuild + home = "/var/empty"; # -d /var/empty + shell = pkgs.nologin; # -s `which nologin` + description = "Guix build user ${i}"; # -c "Guix buid user $i" + isSystemUser = true; # --system }; }); # merge all users -- cgit v1.2.3 From 70b9e03679473d134fd49f815e12a4596af20d32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 10:54:02 -0300 Subject: fake-symlinks.sh: Generate preamble.org from preamble.org.in --- bash/fake-symlinks.sh | 12 +++++++++- bash/templates/build-aux/workflow/preamble.org | 27 +++++++++++++++++++++++ bash/templates/build-aux/workflow/preamble.org.in | 4 ++-- 3 files changed, 40 insertions(+), 3 deletions(-) create mode 100644 bash/templates/build-aux/workflow/preamble.org diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index b3f2ed6..08cc1da 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -28,6 +28,15 @@ done mkdir -p ~/archive/torrent/ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; +sed -e 's/@PACKAGE@/$PROJECT/g' \ + -e 's/@PACKAGE_NAME@/$PROJECT_UC/g' \ + -e 's|@PACKAGE_GIT_URL@|https://git.euandreh.xyz|g' \ + -e 's|@PACKAGE_CI_URL@|https://ci.euandreh.xyz|g' \ + -e 's|@PACKAGE_URL@|https://$PROJECT.euandreh.xyz/|g' \ + -e 's/@TLD@/euandreh.xyz/g' \ + -e 's|@PACKAGE_BUGREPORT@|~euandreh/$MAILING_LIST@lists.sr.ht|g' \ + build-aux/workflow/preamble.org.in > build-aux/workflow/preamble.org + normalize-name() { if [[ -n "$RENAME_TO" ]]; then echo "$RENAME_TO" @@ -193,8 +202,9 @@ ln-build-aux() { build-aux/generate-tasks-and-bugs.sh if [ ! -f "$PREFIX/build-aux/workflow/preamble.org" ]; then - # FIXME: generate preamble.org from preamble.org.in cp-if-not build-aux/workflow/preamble.org.in + else + envsubst-all build-aux/workflow/preamble.org fi cp-if-not TODOs.org } diff --git a/bash/templates/build-aux/workflow/preamble.org b/bash/templates/build-aux/workflow/preamble.org new file mode 100644 index 0000000..a6682c1 --- /dev/null +++ b/bash/templates/build-aux/workflow/preamble.org @@ -0,0 +1,27 @@ +#+TITLE: Tasks and bug listing for $PROJECT_UC +#+AUTHOR: EuAndreh +#+BIND: org-html-validation-link nil +#+BIND: org-html-scripts nil +#+BIND: org-html-postamble nil +#+BIND: org-export-html-headline-anchor-format nil +#+BIND: org-html-doctype "html5" +#+OPTIONS: toc:nil html-style:nil num:nil +#+HTML_HEAD: +#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] +#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] +#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] +#+MACRO: bug bug\nbsp{}[[#$1][#$1]] +#+MACRO: task task\nbsp{}[[#$1][#$1]] +#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) + +Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. + +Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. + +/Você também pode escrever em português./ + +/Vous pouvez aussi écrire en français./ + +/Vi povas ankaŭ skribi esperante./ + +#+TOC: headlines 2 diff --git a/bash/templates/build-aux/workflow/preamble.org.in b/bash/templates/build-aux/workflow/preamble.org.in index 751048e..9a98828 100644 --- a/bash/templates/build-aux/workflow/preamble.org.in +++ b/bash/templates/build-aux/workflow/preamble.org.in @@ -9,12 +9,12 @@ #+HTML_HEAD: #+MACRO: src [[@PACKAGE_GIT_URL@/$/tree/master/$1][$1]] #+MACRO: job [[@PACKAGE_CI_URL@/$1][$1]] -#+MACRO: commit commit\nbsp{}[[@PACKAGE_GIT_URL@/commit?id=$1][$1]] +#+MACRO: commit commit\nbsp{}[[@PACKAGE_GIT_URL@/@PACKAGE@/commit?id=$1][$1]] #+MACRO: bug bug\nbsp{}[[#$1][#$1]] #+MACRO: task task\nbsp{}[[#$1][#$1]] #+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) -Tasks, bugs and issues for @PACKAGE_NAME@. See: [[@PACKAGE_URL@][@PACKAGE_URL@]]. +Tasks, bugs and issues for @PACKAGE_NAME@. See: [[@PACKAGE_URL@][@PACKAGE@.@TLD@]]. Register a new one: [[mailto:@PACKAGE_BUGREPORT@?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][@PACKAGE_BUGREPORT@]]. -- cgit v1.2.3 From e667b642af386c7a74315d01370f10d17a73da4e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 11:02:26 -0300 Subject: fake-symlinks.sh: Conditionally copy Guix channel files --- bash/fake-symlinks.sh | 29 +++++++++++++++++++++-------- 1 file changed, 21 insertions(+), 8 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 08cc1da..b6bba42 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -158,6 +158,12 @@ ln-env() { else ENABLE_OVERWRITE_PINNED_CHANNELS= fi + + if [ -n "${GUIX_PROJECT_NO_CHANNEL[$PROJECT]}" ]; then + ENABLE_GUIX_PROJECT_CHANNEL= + else + ENABLE_GUIX_PROJECT_CHANNEL=1 + fi } ln-init() { @@ -214,16 +220,19 @@ ln-agpl() { } ln-guix-files() { - cp-all build-aux/with-container.sh \ - build-aux/assert-shellcheck.sh \ - .guix-channel \ - .guix-authorizations \ - guix/channel/euandreh.key + cp-all build-aux/with-container.sh \ + build-aux/assert-shellcheck.sh cp-if-not guix/manifest.scm - if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then - RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp-if-not rename/basic-channel.scm.in + + if [ -n "$ENABLE_GUIX_PROJECT_CHANNEL" ]; then + cp-all .guix-channel \ + .guix-authorizations \ + guix/channel/euandreh.key + if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then + RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp-if-not rename/basic-channel.scm.in + fi fi - # RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi + if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then cp-all guix/pinned-channels.scm else @@ -396,6 +405,10 @@ declare -A RUST_PROJECT=( [x-bindgen]=1 ) +declare -A GUIX_PROJECT_NO_CHANNEL=( + [vps]=1 +) + ln-all() { LN_FN="$1" shift -- cgit v1.2.3 From 57b50da606dab8a0fe1de133513c89fd3ec6a0f5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 17:54:02 -0300 Subject: fake-symlinks.sh: Add metadata for Pires project --- bash/fake-symlinks.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index b6bba42..a759e49 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -372,6 +372,7 @@ declare -A PROJECT_NAMES=( [songbooks]=Songbooks [mediator]=Mediator [byopds]=BYOPDS + [pires]=Pires ) declare -A ML_FOR_PROJECT=( @@ -386,6 +387,7 @@ declare -A ML_FOR_PROJECT=( [eq]=mediator [songbooks]=songbooks [guile-clap]=songbooks + [pires]=pires ) declare -A PREFIX_FOR_PROJECT=( -- cgit v1.2.3 From e2ed1f6a8b8b05741450cacb5a2e6fb7284c919c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 17:57:15 -0300 Subject: nixfmt ./nixos/configuration.nix --- nixos/configuration.nix | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1ef2dd5..a3b1a60 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -375,9 +375,7 @@ in { enable = true; enableContribAndExtras = true; }; - desktopManager = { - xterm.enable = false; - }; + desktopManager = { xterm.enable = false; }; displayManager = { defaultSession = "none+xmonad"; @@ -421,13 +419,13 @@ in { # From the Guix manual: # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup buildUser = (i: { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = [ "guixbuild" ]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.nologin; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system + "guixbuilder${i}" = { # guixbuilder$i + group = "guixbuild"; # -g guixbuild + extraGroups = [ "guixbuild" ]; # -G guixbuild + home = "/var/empty"; # -d /var/empty + shell = pkgs.nologin; # -s `which nologin` + description = "Guix build user ${i}"; # -c "Guix buid user $i" + isSystemUser = true; # --system }; }); # merge all users -- cgit v1.2.3 From 66836d599689812c025a4258471d8372bbc3a35d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 17:57:41 -0300 Subject: Fix exit code of assert-nixfmt.sh --- build-aux/assert-nixfmt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-aux/assert-nixfmt.sh b/build-aux/assert-nixfmt.sh index 19c9cd3..5afc8b4 100755 --- a/build-aux/assert-nixfmt.sh +++ b/build-aux/assert-nixfmt.sh @@ -9,4 +9,4 @@ format() { } export -f format -find . -type f -name '*.nix' -exec sh -c 'format $0' {} \; +find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c 'format $1' _ {} \; -- cgit v1.2.3 From 46ee94e69cfab42970a8dddadc388df886dff50f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:46:14 -0300 Subject: ShellCheck assert-nixfmt.sh --- build-aux/assert-nixfmt.sh | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/build-aux/assert-nixfmt.sh b/build-aux/assert-nixfmt.sh index 5afc8b4..6e4d2c6 100755 --- a/build-aux/assert-nixfmt.sh +++ b/build-aux/assert-nixfmt.sh @@ -1,12 +1,10 @@ #!/bin/sh -eux -format() { +# shellcheck disable=2016 +find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' nixfmt < "$1" | diff - "$1" || { - echo "The file '$1' is unformatted. To fix it, run:" + echo "The file \"$1\" is unformatted. To fix it, run:" echo " nixfmt $1" exit 1 } -} -export -f format - -find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c 'format $1' _ {} \; +' _ {} \; -- cgit v1.2.3 From a2fe3a32c43ef5480cb921ef0a57c86877398ff3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:47:19 -0300 Subject: ShellCheck scripts/ad-hoc/fim --- scripts/ad-hoc/fim | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/fim b/scripts/ad-hoc/fim index a13d5ef..ff8e00d 100755 --- a/scripts/ad-hoc/fim +++ b/scripts/ad-hoc/fim @@ -1,3 +1,3 @@ #!/bin/sh -eu -play "$DOTFILES/bash/Positive.ogg" &> /dev/null +play "$DOTFILES/bash/Positive.ogg" 2> /dev/null -- cgit v1.2.3 From 515d94c2330816ebf30c31a5a91d4569ce16578b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:47:50 -0300 Subject: ShellCheck scripts/cron/vlc-playlist-dump.sh --- scripts/cron/vlc-playlist-dump.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cron/vlc-playlist-dump.sh b/scripts/cron/vlc-playlist-dump.sh index 58103a9..d572b7f 100755 --- a/scripts/cron/vlc-playlist-dump.sh +++ b/scripts/cron/vlc-playlist-dump.sh @@ -1,6 +1,6 @@ #!/bin/sh -eux -exec &> /dev/stdout +exec 2> /dev/stdout echo "Starting $(date -Is)" # FIXME -- cgit v1.2.3 From e8df2740c95720e8d80e51120a41db39c562b590 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:48:10 -0300 Subject: tests.sh: Run ShellCheck before assert-todos.sh --- tests.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tests.sh b/tests.sh index 2aa7d66..238f28b 100755 --- a/tests.sh +++ b/tests.sh @@ -1,5 +1,5 @@ #!/bin/sh -eux ./build-aux/assert-nixfmt.sh -./build-aux/assert-todos.sh ./build-aux/assert-shellcheck.sh +./build-aux/assert-todos.sh -- cgit v1.2.3 From 6dfe0094b634423480a4bfc72b97322495f1bb3e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:50:23 -0300 Subject: Don't run ShellCheck on files under bash/templates/ --- build-aux/assert-shellcheck.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh index 5b6cb91..0750546 100755 --- a/build-aux/assert-shellcheck.sh +++ b/build-aux/assert-shellcheck.sh @@ -2,4 +2,5 @@ git ls-files -z | \ xargs -0 awk 'FNR==1 && /^#!\// { print FILENAME }' | \ + grep -v bash/templates/ | \ xargs shellcheck -- cgit v1.2.3 From 85c77d3466b6460ef079c8419d351ee57e57091c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:51:22 -0300 Subject: fake-symlinks.sh: ShellCheck --- bash/fake-symlinks.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a759e49..8bc4a64 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -18,6 +18,7 @@ for job in report-summary annex elfeed backup copy-box-backups repo-update notmu chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" done +# shellcheck disable=2043 for job in pacheco; do prefix="$HOME/annex/bin/ad-hoc" sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" @@ -28,6 +29,7 @@ done mkdir -p ~/archive/torrent/ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; +# shellcheck disable=2016 sed -e 's/@PACKAGE@/$PROJECT/g' \ -e 's/@PACKAGE_NAME@/$PROJECT_UC/g' \ -e 's|@PACKAGE_GIT_URL@|https://git.euandreh.xyz|g' \ -- cgit v1.2.3 From a382fc546ba34606b68e2d13cc0861c04ba93543 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:56:23 -0300 Subject: ShellCheck bash/ps1.sh and scripts/ad-hoc/yt --- bash/ps1.sh | 8 ++++++-- scripts/ad-hoc/yt | 1 + 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 6280f26..989ac1a 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -1,7 +1,8 @@ #!/usr/bin/env bash error-marker() { - if [ $? != 0 ]; then + # shellcheck disable=2181 + if [ "$?" != 0 ]; then redb ' (!!) ' | tr -d '\n' fi } @@ -85,10 +86,13 @@ in-nix-shell() { purpleb "$IN_NIX_SHELL " | tr -d '\n' purple 'nix-shell ' | tr -d '\n' printf '(' + # $name comes from the mkShell declaration + # shellcheck disable=2154 blueb "$name" | tr -d '\n' printf ')' fi } -export PS1='`error-marker`'$(timestamp)' '$(path)' `repo-status``guix-env``in-nix-shell` +PS1='`error-marker`'$(timestamp)' '$(path)' `repo-status``guix-env``in-nix-shell` $ ' +export PS1 diff --git a/scripts/ad-hoc/yt b/scripts/ad-hoc/yt index 97e0f51..5b8c693 100755 --- a/scripts/ad-hoc/yt +++ b/scripts/ad-hoc/yt @@ -5,6 +5,7 @@ set -Eeuo pipefail URL_OR_PATH="${1:-}" [[ -z "${URL_OR_PATH}" ]] && { + # shellcheck disable=2016 echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr exit 2 } -- cgit v1.2.3 From 3a8d53409fac7233d89fa133b06b7fda09464cc4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 18:59:51 -0300 Subject: Move ps1.sh to POSIX sh --- bash/ps1.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 989ac1a..59c7aa5 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -1,6 +1,6 @@ -#!/usr/bin/env bash +#!/bin/sh -error-marker() { +error_marker() { # shellcheck disable=2181 if [ "$?" != 0 ]; then redb ' (!!) ' | tr -d '\n' @@ -15,45 +15,45 @@ path() { yellowb '\w/' | tr -d '\n' } -repo-status() { +repo_status() { inner="$(__git_ps1 "%s")" - if [[ -n "$inner" ]]; then + if [ -n "$inner" ]; then OUT="$(git status --short --branch --porcelain 2>/dev/null)" - BRANCH_LINE="$(head -n 1 <<< "$OUT")" - DIFF_LINES="$(tail -n +2 <<< "$OUT")" + BRANCH_LINE="$(echo "$OUT" | head -n 1)" + DIFF_LINES="$(echo "$OUT" | tail -n +2)" - if grep -q 'ahead' <<< "$BRANCH_LINE"; then + if echo "$BRANCH_LINE" | grep -q 'ahead'; then IS_AHEAD=1 fi - if grep -q 'behind' <<< "$BRANCH_LINE"; then + if echo "$BRANCH_LINE" | grep -q 'behind'; then IS_BEHIND=1 fi - if [[ -n "$IS_AHEAD" ]] && [[ -n "$IS_BEHIND" ]]; then + if [ -n "$IS_AHEAD" ] && [ -n "$IS_BEHIND" ]; then BRANCH_MARKER="^^^ $inner vvv" - elif [[ -n "$IS_AHEAD" ]]; then + elif [ -n "$IS_AHEAD" ]; then BRANCH_MARKER="^ $inner ^" - elif [[ -n "$IS_BEHIND" ]]; then + elif [ -n "$IS_BEHIND" ]; then BRANCH_MARKER="v $inner v" else BRANCH_MARKER="$inner" fi - if grep -q '^[A|D| ][M|D| ]' <<< "$DIFF_LINES"; then + if echo "$DIFF_LINES" | grep -q '^[A|D| ][M|D| ]'; then HAS_DIFF=1 fi - if grep -q '^[?][?]' <<< "$DIFF_LINES"; then + if echo "$DIFF_LINES" | grep -q '^[?][?]'; then HAS_UNTRACKED=1 fi - if [[ -n "$HAS_DIFF" ]]; then + if [ -n "$HAS_DIFF" ]; then COLOR_FN=redb LINE="{$BRANCH_MARKER}" - elif [[ -n "$IS_AHEAD" ]] || [[ -n "$IS_BEHIND" ]]; then + elif [ -n "$IS_AHEAD" ] || [ -n "$IS_BEHIND" ]; then COLOR_FN=bluei LINE="[$BRANCH_MARKER]" - elif [[ -n "$HAS_UNTRACKED" ]]; then + elif [ -n "$HAS_UNTRACKED" ]; then COLOR_FN=lightblue LINE="($BRANCH_MARKER)" else @@ -68,7 +68,7 @@ repo-status() { fi } -guix-env() { +guix_env() { if [ "$GUIX_ENVIRONMENT" != '' ]; then printf '\n' blacki '~> ' | tr -d '\n' @@ -79,7 +79,7 @@ guix-env() { fi } -in-nix-shell() { +in_nix_shell() { if [ "$IN_NIX_SHELL" != '' ]; then printf '\n' blacki '~> ' | tr -d '\n' @@ -93,6 +93,6 @@ in-nix-shell() { fi } -PS1='`error-marker`'$(timestamp)' '$(path)' `repo-status``guix-env``in-nix-shell` +PS1='`error_marker`'$(timestamp)' '$(path)' `repo_status``guix_env``in_nix_shell` $ ' export PS1 -- cgit v1.2.3 From b66a942c3a186120bf094ef1270885eb523f2269 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:04:18 -0300 Subject: Move git-search script to POSIX sh --- scripts/ad-hoc/git-search | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/scripts/ad-hoc/git-search b/scripts/ad-hoc/git-search index f28e01e..9ce0121 100755 --- a/scripts/ad-hoc/git-search +++ b/scripts/ad-hoc/git-search @@ -1,9 +1,10 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux end="\033[0m" red="\033[0;31m" -red() { echo -e "${red}${1}${end}"; } +red() { + printf '%s%s%s' "$red" "$1" "$end" +} usage() { red "Missing argument $1.\n" @@ -26,15 +27,15 @@ EOF REGEX_PATTERN="${1:-}" REPOSITORY_URL="${2:-}" -[[ -z "${REGEX_PATTERN}" ]] && usage 'REGEX_PATTERN' -[[ -z "${REPOSITORY_URL}" ]] && usage 'REPOSITORY_URL' +[ -z "${REGEX_PATTERN}" ] && usage 'REGEX_PATTERN' +[ -z "${REPOSITORY_URL}" ] && usage 'REPOSITORY_URL' mkdir -p /tmp/git-search DIRNAME="$(echo "${REPOSITORY_URL%/}" | rev | cut -d/ -f1 | rev)" -if [[ ! -d "/tmp/git-search/${DIRNAME}" ]]; then +if [ ! -d "/tmp/git-search/${DIRNAME}" ]; then git clone --depth 1 "${REPOSITORY_URL}" "/tmp/git-search/${DIRNAME}" fi -pushd "/tmp/git-search/${DIRNAME}" +cd "/tmp/git-search/${DIRNAME}" shift 3 || shift 2 # when "--" is missing git grep "${REGEX_PATTERN}" "${@}" -- cgit v1.2.3 From e464a04c61221dd7cfb36ead8f313abc8e27a5e2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:04:27 -0300 Subject: Move three-monitors.sh script to POSIX sh --- scripts/ad-hoc/three-monitors.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/three-monitors.sh b/scripts/ad-hoc/three-monitors.sh index d8c4e53..d1ef7c6 100755 --- a/scripts/ad-hoc/three-monitors.sh +++ b/scripts/ad-hoc/three-monitors.sh @@ -1,2 +1,2 @@ -#!/usr/bin/env bash +#!/bin/sh xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left -- cgit v1.2.3 From a489b671f5e06a7f6a9825f02b58dbcd5b858992 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:05:01 -0300 Subject: Move notmuch-dump.sh to POSIX sh --- scripts/ad-hoc/notmuch-dump.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh index 5e0a1c2..4215831 100755 --- a/scripts/ad-hoc/notmuch-dump.sh +++ b/scripts/ad-hoc/notmuch-dump.sh @@ -1,7 +1,6 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux -[[ -f ~/archive/notmuch-archive.today.txt ]] && { +[ -f ~/archive/notmuch-archive.today.txt ] && { mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt } notmuch dump --output ~/archive/notmuch-archive.today.txt -- cgit v1.2.3 From 79df5c1e116c64dabb8a0b4474099b906e0f5384 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:05:49 -0300 Subject: Move repo-update.sh POSIX sh --- scripts/ad-hoc/repo-update.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/repo-update.sh b/scripts/ad-hoc/repo-update.sh index 37606c4..65eb6db 100755 --- a/scripts/ad-hoc/repo-update.sh +++ b/scripts/ad-hoc/repo-update.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eu # shellcheck source=/dev/null . "${HOME}/.ssh/environment" -- cgit v1.2.3 From db2cc530ebc52b1b29ca1d26e1a25b3edca5f6da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:06:06 -0300 Subject: Remove setup-bt.sh --- scripts/ad-hoc/setup-bt.sh | 17 ----------------- 1 file changed, 17 deletions(-) delete mode 100755 scripts/ad-hoc/setup-bt.sh diff --git a/scripts/ad-hoc/setup-bt.sh b/scripts/ad-hoc/setup-bt.sh deleted file mode 100755 index f6d1ac7..0000000 --- a/scripts/ad-hoc/setup-bt.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -# ADDR='00:02:BF:03:B8:9A' -ADDR='41:42:00:00:03:05' - -yellow "Removing the device..." -bluetoothctl -- remove "$ADDR" ||: -yellow "Scanning available devices..." -bluetoothctl --timeout 10 -- scan on -yellow "Pairing device..." -bluetoothctl -- pair "$ADDR" -yellow "Configuring device..." -bluetoothctl -- trust "$ADDR" -yellow "Connecting to the device..." -bluetoothctl -- connect "$ADDR" -green "Done!" -- cgit v1.2.3 From 43d5b728a547690f9a83c3caf78b1211fbbe146c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:06:37 -0300 Subject: Use POSIX sh shebang in gc.sh --- scripts/ad-hoc/gc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/ad-hoc/gc.sh b/scripts/ad-hoc/gc.sh index 4793ff7..bdc0043 100755 --- a/scripts/ad-hoc/gc.sh +++ b/scripts/ad-hoc/gc.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh -eux disk_space() { u | awk '{print $5" "$6}' -- cgit v1.2.3 From b9c6ab24e2ad17177693f020ae58dc576b6dfa8d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:06:54 -0300 Subject: Remove scp.sh --- scripts/ad-hoc/scp.sh | 7 ------- 1 file changed, 7 deletions(-) delete mode 100755 scripts/ad-hoc/scp.sh diff --git a/scripts/ad-hoc/scp.sh b/scripts/ad-hoc/scp.sh deleted file mode 100755 index d21c5d6..0000000 --- a/scripts/ad-hoc/scp.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/usr/bin/env bash - -scp "$DOTFILES/vps/docker-compose.yml" "$SOVEREIGN/docker-compose.yml" -scp "$DOTFILES/vps/push-receive-redeploy.sh" "$SOVEREIGN/push-receive-redeploy.sh" - -scp "$DOTFILES/vps/aliases.sh" "$SOVEREIGN/.bash_aliases" -scp "$DOTFILES/vps/aliases.sh" "$NEXTCLOUD/.bash_aliases" -- cgit v1.2.3 From 489767bca33ce5115214127985156e9825a66ab0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:08:29 -0300 Subject: Use POSIX sh shebang in backup.sh --- scripts/ad-hoc/backup.sh | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh index 8fbb0d5..59b3cd0 100755 --- a/scripts/ad-hoc/backup.sh +++ b/scripts/ad-hoc/backup.sh @@ -1,8 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -set -x +#!/bin/sh -eux # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null -- cgit v1.2.3 From ae210d9dc49a27153981e95a51ee3c959e419506 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:09:33 -0300 Subject: Move record-my-screen.sh to POSIX sh --- scripts/ad-hoc/record-my-screen.sh | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/scripts/ad-hoc/record-my-screen.sh b/scripts/ad-hoc/record-my-screen.sh index 23bc75e..95094b6 100755 --- a/scripts/ad-hoc/record-my-screen.sh +++ b/scripts/ad-hoc/record-my-screen.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - +#!/bin/sh -eux usage() { red "Missing argument $1.\n" @@ -18,7 +16,7 @@ EOF } OUTPUT_PATH="${1:-}" -[[ -z "${OUTPUT_PATH}" ]] && { +[ -z "${OUTPUT_PATH}" ] && { usage 'OUTPUT_PATH' exit 2 } -- cgit v1.2.3 From fb714c1cf7294845731e21962ed3cda7818691d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:10:00 -0300 Subject: Remove bt.sh --- scripts/ad-hoc/b | 1 - scripts/ad-hoc/bt.sh | 9 --------- 2 files changed, 10 deletions(-) delete mode 120000 scripts/ad-hoc/b delete mode 100755 scripts/ad-hoc/bt.sh diff --git a/scripts/ad-hoc/b b/scripts/ad-hoc/b deleted file mode 120000 index 08cf0b0..0000000 --- a/scripts/ad-hoc/b +++ /dev/null @@ -1 +0,0 @@ -bt.sh \ No newline at end of file diff --git a/scripts/ad-hoc/bt.sh b/scripts/ad-hoc/bt.sh deleted file mode 100755 index 4cafe33..0000000 --- a/scripts/ad-hoc/bt.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -# ADDR='00:02:BF:03:B8:9A' -ADDR='41:42:00:00:03:05' - -yellow "Connecting to the device..." -bluetoothctl -- connect "$ADDR" -green "Done!" -- cgit v1.2.3 From df17bfb71d59eedcfd5fa40a24f0d93c5c0da9cc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:11:12 -0300 Subject: Use POSIX sh shebang in dmenu-emoji.sh --- scripts/ad-hoc/dmenu-emoji.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/scripts/ad-hoc/dmenu-emoji.sh b/scripts/ad-hoc/dmenu-emoji.sh index dc29929..e03af07 100755 --- a/scripts/ad-hoc/dmenu-emoji.sh +++ b/scripts/ad-hoc/dmenu-emoji.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env bash -set -euo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" +#!/bin/sh -eux # Derived from: # https://github.com/porras/dmenu-emoji -- cgit v1.2.3 From 2e1edcd0271dff07a637526dc4be88e9b851143c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:11:51 -0300 Subject: Use POSIX sh shebang in open script --- scripts/ad-hoc/open | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open index c6e31fa..9383059 100755 --- a/scripts/ad-hoc/open +++ b/scripts/ad-hoc/open @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux case "$1" in *.ico|*.jpg|*.jpeg|*.png) -- cgit v1.2.3 From 349f8b956ebf372b672c2d6484126d0b3239637a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:12:23 -0300 Subject: Use POSIX sh shebang in git-tarball.sh --- scripts/ad-hoc/git-tarball.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/git-tarball.sh b/scripts/ad-hoc/git-tarball.sh index f1b12df..44055fc 100755 --- a/scripts/ad-hoc/git-tarball.sh +++ b/scripts/ad-hoc/git-tarball.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux REPO="$(basename "$(git rev-parse --show-toplevel)")" BRANCH="$(git rev-parse --abbrev-ref HEAD)" -- cgit v1.2.3 From 743e9d6148253f78a4ab1dc07376340a54d36f16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:17:01 -0300 Subject: Update many scripts to POSIX sh --- scripts/ad-hoc/annex.sh | 6 ++---- scripts/ad-hoc/archive-box.sh | 3 +-- scripts/ad-hoc/brightness.sh | 3 +-- scripts/ad-hoc/copy-box-backups.sh | 4 +--- scripts/ad-hoc/copy-public-key.sh | 7 +++---- scripts/ad-hoc/gc-mail.sh | 2 +- scripts/ad-hoc/hd.sh | 4 +--- scripts/ad-hoc/mbox-archive.sh | 3 +-- scripts/ad-hoc/mr-remotes-backup.sh | 3 +-- scripts/ad-hoc/nix-search-update.sh | 5 ++--- scripts/ad-hoc/notmuch-restore.sh | 3 +-- scripts/ad-hoc/post.sh | 13 ++++++------- scripts/ad-hoc/single-monitor.sh | 2 +- scripts/ad-hoc/zero-brightness.sh | 3 +-- 14 files changed, 23 insertions(+), 38 deletions(-) diff --git a/scripts/ad-hoc/annex.sh b/scripts/ad-hoc/annex.sh index bc84034..555653a 100755 --- a/scripts/ad-hoc/annex.sh +++ b/scripts/ad-hoc/annex.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux # Required for properly running Git Annex, related issue: # https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ @@ -11,6 +10,5 @@ export AWS_SECRET_ACCESS_KEY # shellcheck source=/dev/null . "${HOME}/.ssh/environment" -pushd ~/annex/ +cd ~/annex/ git annex sync -popd diff --git a/scripts/ad-hoc/archive-box.sh b/scripts/ad-hoc/archive-box.sh index 8845e47..64f23e5 100755 --- a/scripts/ad-hoc/archive-box.sh +++ b/scripts/ad-hoc/archive-box.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh index 0af3426..29dc05b 100755 --- a/scripts/ad-hoc/brightness.sh +++ b/scripts/ad-hoc/brightness.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux BRIGHTNESS_DIFF="${1}" diff --git a/scripts/ad-hoc/copy-box-backups.sh b/scripts/ad-hoc/copy-box-backups.sh index df50ac9..92eda65 100755 --- a/scripts/ad-hoc/copy-box-backups.sh +++ b/scripts/ad-hoc/copy-box-backups.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -set -x +#!/bin/sh -eux # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null diff --git a/scripts/ad-hoc/copy-public-key.sh b/scripts/ad-hoc/copy-public-key.sh index a94fbd3..b864b4b 100755 --- a/scripts/ad-hoc/copy-public-key.sh +++ b/scripts/ad-hoc/copy-public-key.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' FILE="$(mktemp)" @@ -13,10 +12,10 @@ gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" cp "${FILE}" ~/dev/libre/website/public-key.txt # Update in euandreh-guix-channel -pushd ~/dev/libre/euandreh-guix-channel/ +cd ~/dev/libre/euandreh-guix-channel/ git checkout keyring cp "${FILE}" euandreh.key -popd +cd - # Update in github: can't be done diff --git a/scripts/ad-hoc/gc-mail.sh b/scripts/ad-hoc/gc-mail.sh index f716220..5952cf7 100755 --- a/scripts/ad-hoc/gc-mail.sh +++ b/scripts/ad-hoc/gc-mail.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh -eux # Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ yellow "Clean up deleted email files" diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index 181dba5..4ce78d5 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -1,6 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -set -x +#!/bin/sh -eux annex.sh diff --git a/scripts/ad-hoc/mbox-archive.sh b/scripts/ad-hoc/mbox-archive.sh index 52ed91d..58360cc 100755 --- a/scripts/ad-hoc/mbox-archive.sh +++ b/scripts/ad-hoc/mbox-archive.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux echo 'TODO: Download MBOX archive of mailing lists, see:' echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' diff --git a/scripts/ad-hoc/mr-remotes-backup.sh b/scripts/ad-hoc/mr-remotes-backup.sh index 6fab1e4..0e37864 100755 --- a/scripts/ad-hoc/mr-remotes-backup.sh +++ b/scripts/ad-hoc/mr-remotes-backup.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux # shellcheck source=/dev/null . "${HOME}/.ssh/environment" diff --git a/scripts/ad-hoc/nix-search-update.sh b/scripts/ad-hoc/nix-search-update.sh index 7a91b0e..3c3b221 100755 --- a/scripts/ad-hoc/nix-search-update.sh +++ b/scripts/ad-hoc/nix-search-update.sh @@ -1,6 +1,5 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux # shellcheck source=/dev/null -source ~/.bash.env +. ~/.bash.env nix search -u lilypond # just a label so the cache can be updated diff --git a/scripts/ad-hoc/notmuch-restore.sh b/scripts/ad-hoc/notmuch-restore.sh index 1f406be..f3dc386 100644 --- a/scripts/ad-hoc/notmuch-restore.sh +++ b/scripts/ad-hoc/notmuch-restore.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux notmuch new notmuch restore --input ~/archive/notmuch-archive.today.txt diff --git a/scripts/ad-hoc/post.sh b/scripts/ad-hoc/post.sh index 6df0358..0d075ab 100755 --- a/scripts/ad-hoc/post.sh +++ b/scripts/ad-hoc/post.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux missing() { red "Missing argument <${1}>.\n" @@ -21,7 +20,7 @@ EOF } TYPE="${1:-}" -[[ -z "$TYPE" ]] && { +[ -z "$TYPE" ] && { missing 'TYPE' usage exit 2 @@ -44,7 +43,7 @@ case "$TYPE" in esac FULL_TITLE="${2:-}" -[[ -z "$FULL_TITLE" ]] && { +[ -z "$FULL_TITLE" ] && { missing 'FULL_TITLE' usage exit 2 @@ -66,14 +65,14 @@ SLUG_TITLE="$(slugify "$FULL_TITLE")" PASTE_DATE="$(date -I)" OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md" -pushd ~/dev/libre/website > /dev/null +cd ~/dev/libre/website -[[ -f "$OUT" ]] && { +[ -f "$OUT" ] && { red "Pastebin named $OUT already exists." exit 1 } -if [[ "$LAYOUT" == 'slides' ]]; then +if [ "$LAYOUT" = 'slides' ]; then cat< "$OUT" --- diff --git a/scripts/ad-hoc/single-monitor.sh b/scripts/ad-hoc/single-monitor.sh index 5b0d03e..83d0455 100755 --- a/scripts/ad-hoc/single-monitor.sh +++ b/scripts/ad-hoc/single-monitor.sh @@ -1,2 +1,2 @@ -#!/usr/bin/env bash +#!/bin/sh -eux xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/ad-hoc/zero-brightness.sh b/scripts/ad-hoc/zero-brightness.sh index ccea46b..a748724 100755 --- a/scripts/ad-hoc/zero-brightness.sh +++ b/scripts/ad-hoc/zero-brightness.sh @@ -1,5 +1,4 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux # base dir for backlight class BASEDIR='/sys/class/backlight/' -- cgit v1.2.3 From cce5e0e8c41eb30dc4e904b79ec71c3f18258633 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:22:45 -0300 Subject: Remove unused files --- docs/README.css | 335 -------------------------------------------- docs/env.sh | 5 - scripts/ad-hoc/import-gg.sh | 8 -- scripts/ad-hoc/sleepsort | 20 --- scripts/ad-hoc/startx | 3 - 5 files changed, 371 deletions(-) delete mode 100644 docs/README.css delete mode 100644 docs/env.sh delete mode 100755 scripts/ad-hoc/import-gg.sh delete mode 100755 scripts/ad-hoc/sleepsort delete mode 100755 scripts/ad-hoc/startx diff --git a/docs/README.css b/docs/README.css deleted file mode 100644 index c744528..0000000 --- a/docs/README.css +++ /dev/null @@ -1,335 +0,0 @@ -/* - * Taken from: - * https://gist.github.com/killercup/5917178 - * Inspired by: - * https://github.com/jerieljan/posaune-pandoc-theme - */ - -/* - * I add this to html files generated with pandoc. - */ - -html { - font-size: 100%; - overflow-y: scroll; - -webkit-text-size-adjust: 100%; - -ms-text-size-adjust: 100%; -} - -body { - color: #444; - font-family: Georgia, Palatino, 'Palatino Linotype', Times, 'Times New Roman', serif; - font-size: 12px; - line-height: 1.7; - padding: 1em; - margin: auto; - max-width: 42em; - background: #fefefe; -} - -a { - color: #0645ad; - text-decoration: none; -} - -a:visited { - color: #0b0080; -} - -a:hover { - color: #06e; -} - -a:active { - color: #faa700; -} - -a:focus { - outline: thin dotted; -} - -*::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -*::selection { - background: rgba(255, 255, 0, 0.3); - color: #000; -} - -a::-moz-selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -a::selection { - background: rgba(255, 255, 0, 0.3); - color: #0645ad; -} - -p { - margin: 1em 0; -} - -img { - max-width: 100%; -} - -h1, h2, h3, h4, h5, h6 { - color: #111; - line-height: 125%; - margin-top: 2em; - font-weight: normal; -} - -h4, h5, h6 { - font-weight: bold; -} - -h1 { - font-size: 2.5em; -} - -h2 { - font-size: 2em; -} - -h3 { - font-size: 1.5em; -} - -h4 { - font-size: 1.2em; -} - -h5 { - font-size: 1em; -} - -h6 { - font-size: 0.9em; -} - -blockquote { - color: #666666; - margin: 0; - padding-left: 3em; - border-left: 0.5em #EEE solid; -} - -hr { - display: block; - height: 2px; - border: 0; - border-top: 1px solid #aaa; - border-bottom: 1px solid #eee; - margin: 1em 0; - padding: 0; -} - -pre, code, kbd, samp { - color: #000; - font-family: monospace, monospace; - _font-family: 'courier new', monospace; - font-size: 0.98em; -} - -pre { - white-space: pre; - white-space: pre-wrap; - word-wrap: break-word; -} - -b, strong { - font-weight: bold; -} - -dfn { - font-style: italic; -} - -ins { - background: #ff9; - color: #000; - text-decoration: none; -} - -mark { - background: #ff0; - color: #000; - font-style: italic; - font-weight: bold; -} - -sub, sup { - font-size: 75%; - line-height: 0; - position: relative; - vertical-align: baseline; -} - -sup { - top: -0.5em; -} - -sub { - bottom: -0.25em; -} - -ul, ol { - margin: 1em 0; - padding: 0 0 0 2em; -} - -li p:last-child { - margin-bottom: 0; -} - -ul ul, ol ol { - margin: .3em 0; -} - -dl { - margin-bottom: 1em; -} - -dt { - font-weight: bold; - margin-bottom: .8em; -} - -dd { - margin: 0 0 .8em 2em; -} - -dd:last-child { - margin-bottom: 0; -} - -img { - border: 0; - -ms-interpolation-mode: bicubic; - vertical-align: middle; -} - -figure { - display: block; - text-align: center; - margin: 1em 0; -} - -figure img { - border: none; - margin: 0 auto; -} - -figcaption { - font-size: 0.8em; - font-style: italic; - margin: 0 0 .8em; -} - -table { - margin-bottom: 2em; - border-bottom: 1px solid #ddd; - border-right: 1px solid #ddd; - border-spacing: 0; - border-collapse: collapse; -} - -table th { - padding: .2em 1em; - background-color: #eee; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; -} - -table td { - padding: .2em 1em; - border-top: 1px solid #ddd; - border-left: 1px solid #ddd; - vertical-align: top; -} - -.author { - font-size: 1.2em; - text-align: center; -} - -@media only screen and (min-width: 480px) { - body { - font-size: 14px; - } -} -@media only screen and (min-width: 768px) { - body { - font-size: 16px; - } -} -@media print { - * { - background: transparent !important; - color: black !important; - filter: none !important; - -ms-filter: none !important; - } - - body { - font-size: 12pt; - max-width: 100%; - } - - a, a:visited { - text-decoration: underline; - } - - hr { - height: 1px; - border: 0; - border-bottom: 1px solid black; - } - - a[href]:after { - content: " (" attr(href) ")"; - } - - abbr[title]:after { - content: " (" attr(title) ")"; - } - - .ir a:after, a[href^="javascript:"]:after, a[href^="#"]:after { - content: ""; - } - - pre, blockquote { - border: 1px solid #999; - padding-right: 1em; - page-break-inside: avoid; - } - - tr, img { - page-break-inside: avoid; - } - - img { - max-width: 100% !important; - } - - @page :left { - margin: 15mm 20mm 15mm 10mm; -} - - @page :right { - margin: 15mm 10mm 15mm 20mm; -} - - p, h2, h3 { - orphans: 3; - widows: 3; - } - - h2, h3 { - page-break-after: avoid; - } -} diff --git a/docs/env.sh b/docs/env.sh deleted file mode 100644 index ee71c37..0000000 --- a/docs/env.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -export SERVER_URL=root@euandre.org -export DOCS_SERVER_PATH="/home/user-data/www/default/dotfiles/" diff --git a/scripts/ad-hoc/import-gg.sh b/scripts/ad-hoc/import-gg.sh deleted file mode 100755 index 1682adc..0000000 --- a/scripts/ad-hoc/import-gg.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -GGROUPS=() - -for group in "${GGROUPS[@]}"; do - mailing-list-import-mbox.sh google "${group}" -done diff --git a/scripts/ad-hoc/sleepsort b/scripts/ad-hoc/sleepsort deleted file mode 100755 index ea20fcb..0000000 --- a/scripts/ad-hoc/sleepsort +++ /dev/null @@ -1,20 +0,0 @@ -#!/usr/bin/env bash - -# Taken from: -# https://www.quora.com/What-is-the-strangest-sorting-algorithm/answer/Nipun-Ramakrishnan - -function f() { - sleep "$1" - echo "$1" -} - -while [ -n "$1" ] -do - f "$1" & - shift -done - -wait - -# example usage: -# sleepsort 5 3 6 3 6 3 1 4 7 diff --git a/scripts/ad-hoc/startx b/scripts/ad-hoc/startx deleted file mode 100755 index cca34a2..0000000 --- a/scripts/ad-hoc/startx +++ /dev/null @@ -1,3 +0,0 @@ -#!/usr/bin/env bash - -sudo systemctl restart display-manager & -- cgit v1.2.3 From 535372eb71e17346d83712f6af6982c88b17d56e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:32:58 -0300 Subject: Move many Bash files under bash/ to POSIX sh --- bash/agents.sh | 2 +- bash/aliases.sh | 7 +++---- bash/bash_profile.sh | 6 +++--- bash/bashrc.sh | 30 +++++++++++++++--------------- bash/env.sh | 2 +- bash/reload.sh | 12 ++++++------ bash/symlinks.sh | 9 ++++----- bash/x.sh | 2 +- bash/youtube.sh | 22 ++++++---------------- 9 files changed, 40 insertions(+), 52 deletions(-) diff --git a/bash/agents.sh b/bash/agents.sh index 4428163..6a008b0 100644 --- a/bash/agents.sh +++ b/bash/agents.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # shellcheck disable=SC2015 # shellcheck disable=SC1090 diff --git a/bash/aliases.sh b/bash/aliases.sh index 8792f79..9571cfc 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh # shellcheck disable=SC2139 unalias -a @@ -25,11 +25,10 @@ alias d="git diff" alias ds="git diff --staged" u() { - pushd ~/annex > /dev/null || exit 1; + cd ~/annex > /dev/null || exit 1; git annex info --fast | grep available; - popd > /dev/null || exit 1; + cd - > /dev/null || exit 1; } -export -f u alias reload="source $DOTFILES/bash/reload.sh" alias rr="source $DOTFILES/bash/reload.sh" diff --git a/bash/bash_profile.sh b/bash/bash_profile.sh index b6e2254..a8642fa 100644 --- a/bash/bash_profile.sh +++ b/bash/bash_profile.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash -# shellcheck disable=SC1090 +#!/bin/sh -source ~/dev/libre/dotfiles/bash/bashrc.sh +# shellcheck disable=SC1090 +. ~/dev/libre/dotfiles/bash/bashrc.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index e03434f..e70c083 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -1,21 +1,21 @@ -#!/usr/bin/env bash +#!/bin/sh # shellcheck disable=SC1090 export DOTFILES=~/dev/libre/dotfiles -source $DOTFILES/bash/config.sh -source $DOTFILES/bash/env.sh -source "$GUIX_PROFILE/etc/profile" -source $DOTFILES/bash/colors.sh -source $DOTFILES/bash/git-prompt.sh -source $DOTFILES/bash/ps1.sh -source $DOTFILES/bash/aliases.sh -source $DOTFILES/bash/util.sh -source $DOTFILES/bash/agents.sh -source $DOTFILES/bash/symlinks.sh -source $DOTFILES/bash/youtube.sh -source "$HOME/annex/bin/misc/env.sh" -source "$HOME/.nurc" +. $DOTFILES/bash/config.sh +. $DOTFILES/bash/env.sh +. "$GUIX_PROFILE/etc/profile" +. $DOTFILES/bash/colors.sh +. $DOTFILES/bash/git-prompt.sh +. $DOTFILES/bash/ps1.sh +. $DOTFILES/bash/aliases.sh +. $DOTFILES/bash/util.sh +. $DOTFILES/bash/agents.sh +. $DOTFILES/bash/symlinks.sh +. $DOTFILES/bash/youtube.sh +. "$HOME/annex/bin/misc/env.sh" +. "$HOME/.nurc" env > ~/.spacemacs.env -declare -px > ~/.bash.env +export -p > ~/.bash.env diff --git a/bash/env.sh b/bash/env.sh index bae04e6..0f84b53 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh export R='16686@ch-s010.rsync.net' export EDITOR=vi diff --git a/bash/reload.sh b/bash/reload.sh index 98bd73a..dbbdf59 100644 --- a/bash/reload.sh +++ b/bash/reload.sh @@ -1,8 +1,8 @@ -#!/usr/bin/env bash +#!/bin/sh # shellcheck disable=SC1090 -source ~/.bashrc -source "$DOTFILES/bash/x.sh" -source "$DOTFILES/bash/mr-execute.sh" -source "$DOTFILES/bash/fake-symlinks.sh" -source ~/annex/bin/misc/tmuxinator-templates.sh +. ~/.bashrc +. "$DOTFILES/bash/x.sh" +. "$DOTFILES/bash/mr-execute.sh" +. "$DOTFILES/bash/fake-symlinks.sh" +. ~/annex/bin/misc/tmuxinator-templates.sh diff --git a/bash/symlinks.sh b/bash/symlinks.sh index f9614c3..75b2807 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -1,13 +1,12 @@ -#!/usr/bin/env bash +#!/bin/sh -function upsert_dir_symlink() { - local from="$1" - local to="$2" +upsert_dir_symlink() { + from="$1" + to="$2" { [ -d "$to" ] || [ -L "$to" ]; } || { ln -s "$from" "$to" } } -export -f upsert_dir_symlink upsert_dir_symlink "$HOME/dev/libre/others/borg/config" ~/.config/borg diff --git a/bash/x.sh b/bash/x.sh index 350ac4c..bfad6da 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh setxkbmap -option esperanto:qwerty xset r rate 225 75 diff --git a/bash/youtube.sh b/bash/youtube.sh index 9288a2a..7897d3e 100644 --- a/bash/youtube.sh +++ b/bash/youtube.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh export DEFAULT_PLAYLIST_END=15 export DEFAULT_INC_STEP=10 @@ -12,41 +12,31 @@ download() { --write-description \ --output "$YT_TEMPLATE" } -export -f download - download_user() { download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" } -export -f download_user - download_channel() { download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" } -export -f download_channel - download_playlist() { download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" } -export -f download_playlist inc_download() { - local fn="$1" - local id="$2" - local step="${3-$DEFAULT_INC_STEP}" + fn="$1" + id="$2" + step="${3-$DEFAULT_INC_STEP}" - local file="$HOME/.yt-db/$id" + file="$HOME/.yt-db/$id" mkdir -p "$HOME/.yt-db" cat "$file" 2> /dev/null - local n_count n_count="$(cat "$file" 2> /dev/null || printf 10)" - local n_count_new="$((n_count + step))" + n_count_new="$((n_count + step))" echo "$n_count_new" > "$file" "$fn" "$id" "$n_count" } - -export -f inc_download -- cgit v1.2.3 From c0d786e07cc925ddc1f4a6d85763a6a1b0623f57 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:35:36 -0300 Subject: Move cronjobs wrappers to POSIX sh --- bash/templates/cronjob-with-email.sh | 53 +++++++++++++++++------------------ scripts/cron/annex-job.sh | 53 +++++++++++++++++------------------ scripts/cron/backup-job.sh | 53 +++++++++++++++++------------------ scripts/cron/copy-box-backups-job.sh | 53 +++++++++++++++++------------------ scripts/cron/elfeed-job.sh | 53 +++++++++++++++++------------------ scripts/cron/mbox-archive-job.sh | 53 +++++++++++++++++------------------ scripts/cron/mr-remotes-backup-job.sh | 53 +++++++++++++++++------------------ scripts/cron/nix-search-update-job.sh | 53 +++++++++++++++++------------------ scripts/cron/notmuch-dump-job.sh | 53 +++++++++++++++++------------------ scripts/cron/repo-update-job.sh | 53 +++++++++++++++++------------------ scripts/cron/report-summary-job.sh | 53 +++++++++++++++++------------------ 11 files changed, 286 insertions(+), 297 deletions(-) diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 0dbb6ac..44ee875 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s __JOB__\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s __JOB__\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/__JOB__.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/__JOB__.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh index 1d31e8d..3d03297 100755 --- a/scripts/cron/annex-job.sh +++ b/scripts/cron/annex-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s annex\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s annex\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/annex.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/annex.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh index 3ec3f56..ef9be7a 100755 --- a/scripts/cron/backup-job.sh +++ b/scripts/cron/backup-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/copy-box-backups-job.sh b/scripts/cron/copy-box-backups-job.sh index a030154..da7e11d 100755 --- a/scripts/cron/copy-box-backups-job.sh +++ b/scripts/cron/copy-box-backups-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s copy-box-backups\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s copy-box-backups\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/copy-box-backups.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/copy-box-backups.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/elfeed-job.sh b/scripts/cron/elfeed-job.sh index b5cb35a..c0c3ac1 100755 --- a/scripts/cron/elfeed-job.sh +++ b/scripts/cron/elfeed-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s elfeed\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s elfeed\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/elfeed.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/elfeed.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh index 07a1983..6474a1d 100755 --- a/scripts/cron/mbox-archive-job.sh +++ b/scripts/cron/mbox-archive-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s mbox-archive\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s mbox-archive\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/mbox-archive.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/mbox-archive.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh index d1854f8..d2cca9b 100755 --- a/scripts/cron/mr-remotes-backup-job.sh +++ b/scripts/cron/mr-remotes-backup-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s mr-remotes-backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s mr-remotes-backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh index 5e4bf29..be4cd94 100755 --- a/scripts/cron/nix-search-update-job.sh +++ b/scripts/cron/nix-search-update-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s nix-search-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s nix-search-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/nix-search-update.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/nix-search-update.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh index a1d48cf..1c32eb6 100755 --- a/scripts/cron/notmuch-dump-job.sh +++ b/scripts/cron/notmuch-dump-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s notmuch-dump\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s notmuch-dump\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh index 652dfe4..8c7eaa0 100755 --- a/scripts/cron/repo-update-job.sh +++ b/scripts/cron/repo-update-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s repo-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s repo-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/repo-update.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/repo-update.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/report-summary-job.sh b/scripts/cron/report-summary-job.sh index 31bad1c..9ee4fbf 100755 --- a/scripts/cron/report-summary-job.sh +++ b/scripts/cron/report-summary-job.sh @@ -1,32 +1,31 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eux LOG_FILE="$(mktemp)" -exec &> >(tee -a "$LOG_FILE") +{ + finish() { + status=$? + if [ $status = 0 ]; then + STATUS="✅ SUCCESS (status $status)" + else + STATUS="❌ FAILURE (status $status)" + fi -finish() { - status=$? - if [[ $status = 0 ]]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi + echo "Registering status locally..." + set -x + printf '%s report-summary\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - echo "Registering status locally..." - set -x - printf '%s report-summary\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" + echo "Sending report email..." - echo "Sending report email..." + SUBJECT="Job report on $(hostname): ${STATUS} for report-summary-job.sh" + gpg -easr eu@euandre.org < "$LOG_FILE" | \ + mail eu@euandre.org \ + -s "$SUBJECT" \ + -a 'From:eu@euandre.org' \ + --content-type 'text/plain; charset=utf-8' + echo 'Mail sent!' + } + trap finish EXIT - SUBJECT="Job report on $(hostname): ${STATUS} for report-summary-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' -} -trap finish EXIT - -echo "Starting: $(date -Is)" -~/dev/libre/dotfiles/scripts/ad-hoc/report-summary.sh -echo "Finishing: $(date -Is)" + echo "Starting: $(date -Is)" + ~/dev/libre/dotfiles/scripts/ad-hoc/report-summary.sh + echo "Finishing: $(date -Is)" +} | tee "$LOG_FILE" 2>&1 -- cgit v1.2.3 From 79530af653da3e9024b7998d3e71d13dd1f91feb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:38:36 -0300 Subject: sync-mail.sh to POSIX sh --- scripts/cron/sync-mail.sh | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index 082bf74..ccf1540 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -1,13 +1,10 @@ -#!/usr/bin/env bash -set -euo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" +#!/bin/sh -eux -exec &> /dev/stdout echo "Starting: $(date -Is)" FAST_RUN="${1:-}" -if [[ "${FAST_RUN}" = "--fast" ]]; then +if [ "${FAST_RUN}" = "--fast" ]; then echo 'Doing fast run' mbsync EuAndreh notmuch new -- cgit v1.2.3 From a345bc68216892cdc9316930d6c32aa765cfc390 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 19:57:30 -0300 Subject: configuration.nix, os.scm: Add dino package --- guix/os.scm | 1 + nixos/configuration.nix | 1 + 2 files changed, 2 insertions(+) diff --git a/guix/os.scm b/guix/os.scm index 6d2cb16..439fa67 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -135,6 +135,7 @@ audacity zbar ;; fractal + dino calibre vlc gpodder diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a3b1a60..1109b1d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -283,6 +283,7 @@ in { fractal calibre vlc + dino ## Candidates to be replaced by alternatives emacs # To be replaced by vi + fzf -- cgit v1.2.3 From 0720180a561f695f561350bf5637e6b3b198b52c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 20:06:22 -0300 Subject: tmux.conf: Enable doing C-x C-e in Bash --- tmux/tmux.conf | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 88bf9e0..b73d5c6 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -2,13 +2,7 @@ unbind C-b set -g prefix C-x -# FIXME -# C-x-C-x-C-e Bash -# man bash - -# FIXME -# how to rename the title of a window? -# how to move a pane from one window to another? +bind-key C-x send-prefix # Turn on mouse mode # https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ -- cgit v1.2.3 From f1578ee18577b74bba0518b82b9abb20ebfd6f86 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 20:06:45 -0300 Subject: tmux.conf: Prefer moving over resizing --- tmux/tmux.conf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index b73d5c6..a52f63e 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -17,16 +17,16 @@ bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" if-shell "uname | grep -q Darwin" "source-file ~/.tmux-macos.conf" "source-file ~/.tmux-gnu-linux.conf" # Moving around panes -bind-key h select-pane -L -bind-key j select-pane -D -bind-key k select-pane -U -bind-key l select-pane -R +bind-key -n C-h select-pane -L +bind-key -n C-j select-pane -D +bind-key -n C-k select-pane -U +bind-key -n C-l select-pane -R # Resizing panes -bind-key -n C-h resize-pane -L 5 -bind-key -n C-j resize-pane -D 5 -bind-key -n C-k resize-pane -U 5 -bind-key -n C-l resize-pane -R 5 +bind-key -n C-M-h resize-pane -L 5 +bind-key -n C-M-j resize-pane -D 5 +bind-key -n C-M-k resize-pane -U 5 +bind-key -n C-M-l resize-pane -R 5 # "C-x m" to actually clear the pane history bind-key m send-keys -R \; clear-history -- cgit v1.2.3 From a8a91c632020259bb34a5485088c2e6d0693e0f9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 10 Jan 2021 20:10:54 -0300 Subject: Remove some FIXME markers --- bash/env.sh | 1 - bash/fake-symlinks.sh | 4 ---- build-aux/assert-todos.sh | 2 +- scripts/ad-hoc/pastebin.sh | 1 - 4 files changed, 1 insertion(+), 7 deletions(-) diff --git a/bash/env.sh b/bash/env.sh index 0f84b53..491f80d 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -12,7 +12,6 @@ export GOPATH="$HOME/dev/go" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -# FIXME in Guix export GUIX_PROFILE="$HOME/.config/guix/current" PATH="$PATH:$HOME/.local/bin" diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 8bc4a64..4e571a1 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -441,8 +441,4 @@ ln-all ln-bare-project parseclj \ cargo2nix-demo \ website -# pushd ~/ -# mr cfg -# FIXME: trap - popd > /dev/null || exit 1 diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index 974862e..5657f7e 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,6 +1,6 @@ #!/bin/sh -eux -if git grep FIXME | grep -Ev '^(bash/templates/)'; then +if git grep FIXME | grep -Ev '^(bash/templates/|build-aux/assert-todos.sh|scripts/ad-hoc/pastebin.sh)'; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." exit 1 diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh index e01f7b3..d4c3159 100755 --- a/scripts/ad-hoc/pastebin.sh +++ b/scripts/ad-hoc/pastebin.sh @@ -1,7 +1,6 @@ #!/usr/bin/env bash set -Eeuo pipefail -# FIXME: use getopt usage() { red "Missing argument <${1}>.\n" cat < Date: Sun, 10 Jan 2021 20:31:32 -0300 Subject: Remove vlc-playlist-dump.sh --- nixos/common.nix | 1 - nixos/usurpador.nix | 1 - scripts/cron/vlc-playlist-dump.sh | 18 ------------------ 3 files changed, 20 deletions(-) delete mode 100755 scripts/cron/vlc-playlist-dump.sh diff --git a/nixos/common.nix b/nixos/common.nix index 56f2aac..75f5fa5 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -6,7 +6,6 @@ let every-x-hours = "0 * * * *"; pub-crons = { sync-mail = every-x-hours; - vlc-playlist-dump = every-x-hours; deliver-queued-mail = every-x-hours; report-summary-job = "30 13 * * *"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 2f4c52e..f92c063 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -11,7 +11,6 @@ in rec { allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ common.crons.sync-mail - common.crons.vlc-playlist-dump common.crons.deliver-queued-mail common.crons.report-summary-job diff --git a/scripts/cron/vlc-playlist-dump.sh b/scripts/cron/vlc-playlist-dump.sh deleted file mode 100755 index d572b7f..0000000 --- a/scripts/cron/vlc-playlist-dump.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -eux - -exec 2> /dev/stdout -echo "Starting $(date -Is)" - -# FIXME -# https://duckduckgo.com/?q=vlc+dump+playlist+command+line&ia=web&iai=r1-5&page=1&sexp=%7B%22cdrexp%22%3A%22b%22%2C%22artexp%22%3A%22c%22%2C%22prodexp%22%3A%22b%22%2C%22prdsdexp%22%3A%22c%22%2C%22biaexp%22%3A%22b%22%2C%22msvrtexp%22%3A%22b%22%2C%22bltexp%22%3A%22b%22%7D# if [[ "$(find ~/mbsync/queued-email/ -type f -not -name 'index' | wc -l)" = 0 ]]; then -# echo 'No queued emails found. noop' -# else -# # https://github.com/syl20bnr/spacemacs/issues/4504#issuecomment-232973179 -# emacs -batch \ -# -l ~/.emacs.d/init.el \ -# -l ~/annex/bin/misc/mail/notmuch.el \ -# --eval "(run-hooks 'emacs-startup-hook)" \ -# --eval '(smtpmail-send-queued-mail)' -# fi - -echo "Finishing: $(date -Is)" -- cgit v1.2.3 From ddb78ddbbe4fdcb2748d4836be491983c25dd475 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 11 Jan 2021 08:26:29 -0300 Subject: configuration.nix: Include social websites in hosts blocking --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 1109b1d..7bd49d4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -49,7 +49,7 @@ in { hostName = localConfiguration.hostName; networkmanager.enable = true; extraHosts = builtins.readFile (builtins.fetchurl - "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn/hosts"); + "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"); }; system.autoUpgrade = { -- cgit v1.2.3 From 2a93fb4db839137cad6dd0a22ea4d19cec501048 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 11 Jan 2021 10:24:24 -0300 Subject: Use scratch.txt over scratch.org --- bash/symlinks.sh | 2 +- spacemacs.el | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 75b2807..46fa798 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -22,7 +22,7 @@ ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc ln -f "$HOME/Sync/TODOs.org.txt" "$HOME/annex/TODOs.org" mkdir -p ~/tmp/ -touch ~/tmp/scratch.org +touch ~/tmp/scratch.txt mkdir -p ~/.gnupg ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf diff --git a/spacemacs.el b/spacemacs.el index 4b23e61..a66702d 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -615,7 +615,7 @@ dump." (setq custom-keybindings '(("M-ç" . euandreh/find-bookmarked-files) ("C-M-y" . helm-show-kill-ring) - ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.org"))) + ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.txt"))) ("M-SPC" . (lambda () (interactive) (just-one-space -1))))) (defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el")) @@ -806,7 +806,7 @@ through `notmuch-message-attach-regex'." "annex/bin/misc/weechat/irc.conf" "annex/bin/misc/mail/notmuch-post.sh" "annex/bin/misc/mail/notmuch.el" - "tmp/scratch.org" + "tmp/scratch.txt" "Sync/playlist.txt" "annex/txt/Meeting Notes.org" "dev/libre/others/dinheiros/money.ledger") -- cgit v1.2.3 From c69a6ef38c3a6e1b7655f654b9f1014a203c4c24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 00:33:49 -0300 Subject: utils.sh: rename ji -> fvi, add cat preview --- bash/util.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/util.sh b/bash/util.sh index c040e86..8777e7b 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -42,8 +42,8 @@ gen-password() { tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: } -ji() { - f="$(fzf)" +fvi() { + f="$(fzf --preview 'cat {}')" if [ -n "$f" ]; then history -s vi "$f" vi "$f" -- cgit v1.2.3 From cc6fbc0268e2211c8f5eecffcfaaa37cdc0f1651 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 00:35:34 -0300 Subject: Prefer neomutt over mutt for the notmuch integration --- bash/aliases.sh | 1 + guix/os.scm | 2 +- nixos/configuration.nix | 2 +- scripts/cron/sync-mail.sh | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 9571cfc..9ccb3a6 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -17,6 +17,7 @@ alias mr="mr -s" alias ncdu="ncdu --color dark" alias mm="sync-mail.sh" alias m="sync-mail.sh --fast" +alias n='neomutt' alias p='ping euandre.org -c 3' alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" alias mux="tmuxinator start" diff --git a/guix/os.scm b/guix/os.scm index 439fa67..6267865 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -83,7 +83,6 @@ st pavucontrol weechat - mutt newsboat acpi xsel @@ -96,6 +95,7 @@ ;; Mail notmuch isync + neomutt ;; Programming tools perl diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 7bd49d4..c7cf160 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -184,7 +184,6 @@ in { st pavucontrol weechat # replacing ERC - mutt # replacing notmuch in Emacs # FIXME: make the transition newsboat # replacing elfeed acpi xsel @@ -197,6 +196,7 @@ in { ## Mail notmuch isync + neomutt ## Programming tools perl diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh index ccf1540..2726cf9 100755 --- a/scripts/cron/sync-mail.sh +++ b/scripts/cron/sync-mail.sh @@ -1,4 +1,4 @@ -#!/bin/sh -eux +#!/bin/sh -eu echo "Starting: $(date -Is)" -- cgit v1.2.3 From b6d463bb23dcfcc215123f8d76de2ef426630843 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 00:36:07 -0300 Subject: configuration.nix: Use patched version of pax --- nixos/configuration.nix | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c7cf160..41d4d21 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -112,6 +112,12 @@ in { ${oldAttrs.postPatch} ''; }); + pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { + postPatch = '' + substituteInPlace ar_io.c --replace 'putenv' '// putenv' + ${({ postPatch = ""; } // oldAttrs).postPatch} + ''; + }); nu-packages = with pkgs; [ awscli @@ -208,7 +214,7 @@ in { bmake-with-alias # gnumake byacc # bison bc - pax + pax-with-good-path flex gnugrep -- cgit v1.2.3 From df0efd8ccbc60e45ae4ecb61f71afb61ee6e02a6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 01:05:44 -0300 Subject: util.sh: Add history to fvi --- bash/util.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/util.sh b/bash/util.sh index 8777e7b..3658c8e 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -42,8 +42,10 @@ gen-password() { tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: } +mkdir -p ~/.local/share/fzf/ +touch ~/.local/share/fzf/fvi fvi() { - f="$(fzf --preview 'cat {}')" + f="$(fzf --preview 'cat {}' --history=$HOME/.local/share/fzf/fvi)" if [ -n "$f" ]; then history -s vi "$f" vi "$f" -- cgit v1.2.3 From 31d63e41add20fa97a7c4ae0f890ef5fb7f23e85 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 01:05:59 -0300 Subject: configuration.nix: Add note on disabling syncthing --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 41d4d21..e7b5fd4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -321,7 +321,7 @@ in { xdg.portal.enable = true; services = { syncthing = { - enable = true; + enable = true; # FIXME measure battery consumption and reconsider user = "andreh"; group = "users"; dataDir = "/home/andreh/.syncthing"; -- cgit v1.2.3 From a16626b440ec2b6463d9ead5081e328e6a0e3cc7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 10:35:32 -0300 Subject: Add deliver-my-enqueued-emails cronjob --- nixos/common.nix | 1 + nixos/usurpador.nix | 1 + scripts/cron/deliver-my-enqueued-emails.sh | 8 ++++++++ 3 files changed, 10 insertions(+) create mode 100755 scripts/cron/deliver-my-enqueued-emails.sh diff --git a/nixos/common.nix b/nixos/common.nix index 75f5fa5..5c8aabc 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -7,6 +7,7 @@ let pub-crons = { sync-mail = every-x-hours; deliver-queued-mail = every-x-hours; + deliver-my-enqueued-emails = every-x-hours; report-summary-job = "30 13 * * *"; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index f92c063..7b2b79c 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -12,6 +12,7 @@ in rec { cronJobs = [ common.crons.sync-mail common.crons.deliver-queued-mail + common.crons.deliver-my-enqueued-emails common.crons.report-summary-job diff --git a/scripts/cron/deliver-my-enqueued-emails.sh b/scripts/cron/deliver-my-enqueued-emails.sh new file mode 100755 index 0000000..ddf0ce9 --- /dev/null +++ b/scripts/cron/deliver-my-enqueued-emails.sh @@ -0,0 +1,8 @@ +#!/bin/sh -eu + +echo "Starting $(date -Is)" + +for f in ~/mbsync/my-queued-emails/*; do + echo "Delivering '$f'..." + ~/annex/bin/misc/mail/dispatch-email.sh "$f" && trash "$f" +done -- cgit v1.2.3 From 388a1823016706155e86e46dd6e9243519f1e035 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 16:01:48 -0300 Subject: util.sh: fvi: Work on git repositories and support setup query string --- bash/util.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/bash/util.sh b/bash/util.sh index 3658c8e..f184723 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -45,7 +45,11 @@ gen-password() { mkdir -p ~/.local/share/fzf/ touch ~/.local/share/fzf/fvi fvi() { - f="$(fzf --preview 'cat {}' --history=$HOME/.local/share/fzf/fvi)" + if [ -n "$(__git_ps1 '')" ]; then + f="$(git ls-files | fzf --query "$1" --preview 'cat {}' --history=$HOME/.local/share/fzf/fvi)" + else + f="$(fzf --query "$1" --preview 'cat {}' --history=$HOME/.local/share/fzf/fvi)" + fi if [ -n "$f" ]; then history -s vi "$f" vi "$f" -- cgit v1.2.3 From 6c6bac245da7b277fe64b4dd8d71633bfb355aa3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 17:34:55 -0300 Subject: configuration.nix: Add calcurse package --- guix/os.scm | 1 + nixos/configuration.nix | 1 + 2 files changed, 2 insertions(+) diff --git a/guix/os.scm b/guix/os.scm index 6267865..f563220 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -91,6 +91,7 @@ nvi ;; fzf autojump + calcurse ;; Mail notmuch diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e7b5fd4..da1f098 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -198,6 +198,7 @@ in { vim # nvi # broken fzf + calcurse # FIXME setup calendar ## Mail notmuch -- cgit v1.2.3 From 12c6812f24d79904ca0581621a3beb44fe0b6216 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 17:44:30 -0300 Subject: Add note on replacing Emacs --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index da1f098..b1e4132 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -293,7 +293,7 @@ in { dino ## Candidates to be replaced by alternatives - emacs # To be replaced by vi + fzf + emacs # To be replaced by vi + fzf. Also missing: replace TODOs.org in projects ag # Emacs works better with ag over grep active-quodlibet # cmus + mutagen -- cgit v1.2.3 From 5d3183979d4f96729adadf921d0f1f8cdbf5e86b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 22:13:57 -0300 Subject: Switch to nvi over vim --- bash/symlinks.sh | 3 +++ nixos/configuration.nix | 3 +-- vi/nexrc.conf | 1 + vimrc.conf | 12 ------------ 4 files changed, 5 insertions(+), 14 deletions(-) create mode 100644 vi/nexrc.conf delete mode 100644 vimrc.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 46fa798..1cb41fc 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -45,6 +45,9 @@ ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs +## vi +ln -fs "$DOTFILES/vi/nexrc.conf" ~/.nexrc + ## xmonad mkdir -p ~/.xmonad ln -fs "$DOTFILES/xmonad/xsession.sh" ~/.xsession diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b1e4132..a4e8145 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -195,8 +195,7 @@ in { xsel pinentry nixfmt - vim - # nvi # broken + # nvi # broken, now using the one from Guix fzf calcurse # FIXME setup calendar diff --git a/vi/nexrc.conf b/vi/nexrc.conf new file mode 100644 index 0000000..ce0e6f2 --- /dev/null +++ b/vi/nexrc.conf @@ -0,0 +1 @@ +" set number diff --git a/vimrc.conf b/vimrc.conf deleted file mode 100644 index 0d3a8a3..0000000 --- a/vimrc.conf +++ /dev/null @@ -1,12 +0,0 @@ -" Taken from: -" https://stackoverflow.com/questions/1878974/redefine-tab-as-4-spaces#1878983 -set tabstop=2 " The width of a TAB is set to 2. - " Still it is a \t. It is just that - " Vim will interpret it to be having - " a width of 2. - -set shiftwidth=2 " Indents will have a width of 2 - -set softtabstop=2 " Sets the number of columns for a TAB - -set expandtab " Expand TABs to spaces -- cgit v1.2.3 From cce34a0fa2e81fa913ee601591ae2f959de1c332 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 22:14:29 -0300 Subject: util.sh: Move to POSIX sh, remove unused merkle-tree function --- bash/util.sh | 23 ++++------------------- 1 file changed, 4 insertions(+), 19 deletions(-) diff --git a/bash/util.sh b/bash/util.sh index f184723..de10bd3 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -1,4 +1,4 @@ -#!/usr/bin/env bash +#!/bin/sh extract () { if [ -f "$1" ] ; then @@ -22,22 +22,7 @@ extract () { fi } -merkle-tree () { - dirname="${1-.}" - pushd "$dirname" > /dev/null || exit 1 - find . -type f | \ - sort | \ - xargs -I{} sha256sum "{}" | \ - sha256sum | \ - awk '{print $1}' - popd > /dev/null || exit 1 -} - -# Taken from: -# https://stackoverflow.com/questions/6250698/how-to-decode-url-encoded-string-in-shell -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - -gen-password() { +genpassword() { length="${1-99}" tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: } @@ -46,9 +31,9 @@ mkdir -p ~/.local/share/fzf/ touch ~/.local/share/fzf/fvi fvi() { if [ -n "$(__git_ps1 '')" ]; then - f="$(git ls-files | fzf --query "$1" --preview 'cat {}' --history=$HOME/.local/share/fzf/fvi)" + f="$(git ls-files | fzf --query "$1" --preview 'cat {}' --history="$HOME/.local/share/fzf/fvi")" else - f="$(fzf --query "$1" --preview 'cat {}' --history=$HOME/.local/share/fzf/fvi)" + f="$(fzf --query "$1" --preview 'cat {}' --history="$HOME/.local/share/fzf/fvi")" fi if [ -n "$f" ]; then history -s vi "$f" -- cgit v1.2.3 From 29e09dbe5b44094003cb38314b29f670cd38bc61 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 12 Jan 2021 22:15:27 -0300 Subject: env.sh: Fix $GUIX_PROFILE --- bash/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/env.sh b/bash/env.sh index 491f80d..fe85aa5 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -12,7 +12,7 @@ export GOPATH="$HOME/dev/go" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -export GUIX_PROFILE="$HOME/.config/guix/current" +export GUIX_PROFILE="$HOME/.guix-profile" PATH="$PATH:$HOME/.local/bin" PATH="$PATH:$HOME/tmp/bin" -- cgit v1.2.3 From aef327663993c65f8b64a588729626debeb3f5e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 18:51:39 -0300 Subject: nexrc.conf: Configure indentation and tabs --- vi/nexrc.conf | 3 +++ 1 file changed, 3 insertions(+) diff --git a/vi/nexrc.conf b/vi/nexrc.conf index ce0e6f2..9a89f01 100644 --- a/vi/nexrc.conf +++ b/vi/nexrc.conf @@ -1 +1,4 @@ " set number +set autoindent +set tabstop=2 +set shiftwidth=2 -- cgit v1.2.3 From 35e56210b0d60cd2cc6fa7699da6cf5d826c7ba6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 18:52:57 -0300 Subject: git mv nexrc.conf exrc.conf --- bash/symlinks.sh | 2 +- vi/exrc.conf | 4 ++++ vi/nexrc.conf | 4 ---- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 vi/exrc.conf delete mode 100644 vi/nexrc.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 1cb41fc..9f18638 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -46,7 +46,7 @@ mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs ## vi -ln -fs "$DOTFILES/vi/nexrc.conf" ~/.nexrc +ln -fs "$DOTFILES/vi/exrc.conf" ~/.exrc ## xmonad mkdir -p ~/.xmonad diff --git a/vi/exrc.conf b/vi/exrc.conf new file mode 100644 index 0000000..9a89f01 --- /dev/null +++ b/vi/exrc.conf @@ -0,0 +1,4 @@ +" set number +set autoindent +set tabstop=2 +set shiftwidth=2 diff --git a/vi/nexrc.conf b/vi/nexrc.conf deleted file mode 100644 index 9a89f01..0000000 --- a/vi/nexrc.conf +++ /dev/null @@ -1,4 +0,0 @@ -" set number -set autoindent -set tabstop=2 -set shiftwidth=2 -- cgit v1.2.3 From e7042ddf7e63666d26c885c98adb96e19faab59f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 20:15:32 -0300 Subject: WIP merge youtube.sh into yt --- bash/bashrc.sh | 1 - bash/youtube.sh | 42 ------------------------------------------ scripts/ad-hoc/yt | 44 ++++++++++++++++++++++++++++++++++++++++++-- 3 files changed, 42 insertions(+), 45 deletions(-) delete mode 100644 bash/youtube.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index e70c083..41fb25f 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -13,7 +13,6 @@ export DOTFILES=~/dev/libre/dotfiles . $DOTFILES/bash/util.sh . $DOTFILES/bash/agents.sh . $DOTFILES/bash/symlinks.sh -. $DOTFILES/bash/youtube.sh . "$HOME/annex/bin/misc/env.sh" . "$HOME/.nurc" diff --git a/bash/youtube.sh b/bash/youtube.sh deleted file mode 100644 index 7897d3e..0000000 --- a/bash/youtube.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh - -export DEFAULT_PLAYLIST_END=15 -export DEFAULT_INC_STEP=10 -export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" - -download() { - youtube-dl "$1" \ - --download-archive ~/archive/youtube-dl-seen.conf \ - --prefer-free-formats \ - --playlist-end "$2" \ - --write-description \ - --output "$YT_TEMPLATE" -} - -download_user() { - download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -download_channel() { - download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -download_playlist() { - download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -inc_download() { - fn="$1" - id="$2" - step="${3-$DEFAULT_INC_STEP}" - - file="$HOME/.yt-db/$id" - mkdir -p "$HOME/.yt-db" - cat "$file" 2> /dev/null - n_count="$(cat "$file" 2> /dev/null || printf 10)" - n_count_new="$((n_count + step))" - - echo "$n_count_new" > "$file" - - "$fn" "$id" "$n_count" -} diff --git a/scripts/ad-hoc/yt b/scripts/ad-hoc/yt index 5b8c693..4489864 100755 --- a/scripts/ad-hoc/yt +++ b/scripts/ad-hoc/yt @@ -1,5 +1,45 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh -eu + +export DEFAULT_PLAYLIST_END=15 +export DEFAULT_INC_STEP=10 +export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" + +download() { + youtube-dl "$1" \ + --download-archive ~/archive/youtube-dl-seen.conf \ + --prefer-free-formats \ + --playlist-end "$2" \ + --write-description \ + --output "$YT_TEMPLATE" +} + +download_user() { + download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" +} + +download_channel() { + download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" +} + +download_playlist() { + download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" +} + +inc_download() { + fn="$1" + id="$2" + step="${3-$DEFAULT_INC_STEP}" + + file="$HOME/.yt-db/$id" + mkdir -p "$HOME/.yt-db" + cat "$file" 2> /dev/null + n_count="$(cat "$file" 2> /dev/null || printf 10)" + n_count_new="$((n_count + step))" + + echo "$n_count_new" > "$file" + + "$fn" "$id" "$n_count" +} # Always downloads video, doesn't look at the download-archive -- cgit v1.2.3 From e5b78a0b9cd69e3134afd5c14aac50f22788ba8e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 20:15:58 -0300 Subject: Remove scripts/ad-hoc/clear alias --- scripts/ad-hoc/clear | 1 - 1 file changed, 1 deletion(-) delete mode 120000 scripts/ad-hoc/clear diff --git a/scripts/ad-hoc/clear b/scripts/ad-hoc/clear deleted file mode 120000 index 3410062..0000000 --- a/scripts/ad-hoc/clear +++ /dev/null @@ -1 +0,0 @@ -c \ No newline at end of file -- cgit v1.2.3 From 2e61364fa95529ab60d2ddd853d345abc9129946 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 20:18:33 -0300 Subject: util.sh: Remove ad-hoc fvi function --- bash/util.sh | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/bash/util.sh b/bash/util.sh index de10bd3..965b690 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -26,17 +26,3 @@ genpassword() { length="${1-99}" tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: } - -mkdir -p ~/.local/share/fzf/ -touch ~/.local/share/fzf/fvi -fvi() { - if [ -n "$(__git_ps1 '')" ]; then - f="$(git ls-files | fzf --query "$1" --preview 'cat {}' --history="$HOME/.local/share/fzf/fvi")" - else - f="$(fzf --query "$1" --preview 'cat {}' --history="$HOME/.local/share/fzf/fvi")" - fi - if [ -n "$f" ]; then - history -s vi "$f" - vi "$f" - fi -} -- cgit v1.2.3 From 13840cd346c05e04bb2ca9ca3e6d313a313c5adb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 20:34:54 -0300 Subject: Merge tmux-gnu-linux.conf into tmux.conf, remove tmux-macos.conf --- bash/symlinks.sh | 2 -- tmux/tmux-gnu-linux.conf | 2 -- tmux/tmux-macos.conf | 2 -- tmux/tmux.conf | 3 ++- 4 files changed, 2 insertions(+), 7 deletions(-) delete mode 100644 tmux/tmux-gnu-linux.conf delete mode 100644 tmux/tmux-macos.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 9f18638..fa1fd38 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -38,8 +38,6 @@ upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER ## tmux ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf -ln -fs "$DOTFILES/tmux/tmux-macos.conf" ~/.tmux-macos.conf -ln -fs "$DOTFILES/tmux/tmux-gnu-linux.conf" ~/.tmux-gnu-linux.conf ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" diff --git a/tmux/tmux-gnu-linux.conf b/tmux/tmux-gnu-linux.conf deleted file mode 100644 index 562974f..0000000 --- a/tmux/tmux-gnu-linux.conf +++ /dev/null @@ -1,2 +0,0 @@ -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" -bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" diff --git a/tmux/tmux-macos.conf b/tmux/tmux-macos.conf deleted file mode 100644 index 6ce3dbd..0000000 --- a/tmux/tmux-macos.conf +++ /dev/null @@ -1,2 +0,0 @@ -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "pbcopy" \; display-message "Copied! Long-live tmux! It works on shitty macOS!" -bind-key y send-keys -X copy-pipe "pbcopy" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" diff --git a/tmux/tmux.conf b/tmux/tmux.conf index a52f63e..3dbe2e5 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -14,7 +14,8 @@ bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" # Holy answer that properly implements copying from tmux! # https://unix.stackexchange.com/a/349020/276661 -if-shell "uname | grep -q Darwin" "source-file ~/.tmux-macos.conf" "source-file ~/.tmux-gnu-linux.conf" +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" +bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" # Moving around panes bind-key -n C-h select-pane -L -- cgit v1.2.3 From 7745c30552ef4329436d9a9992ff5bf630456f22 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 20:36:33 -0300 Subject: Add more complex keybindings to move and resize, freeing simpler keybindings for Bash (readline, actually) and fzf --- tmux/tmux.conf | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 3dbe2e5..c675d96 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -18,16 +18,16 @@ bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -select bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" # Moving around panes -bind-key -n C-h select-pane -L -bind-key -n C-j select-pane -D -bind-key -n C-k select-pane -U -bind-key -n C-l select-pane -R +bind-key -n C-M-h select-pane -L +bind-key -n C-M-j select-pane -D +bind-key -n C-M-k select-pane -U +bind-key -n C-M-l select-pane -R # Resizing panes -bind-key -n C-M-h resize-pane -L 5 -bind-key -n C-M-j resize-pane -D 5 -bind-key -n C-M-k resize-pane -U 5 -bind-key -n C-M-l resize-pane -R 5 +bind-key -n C-M-S-h resize-pane -L 5 +bind-key -n C-M-S-j resize-pane -D 5 +bind-key -n C-M-S-k resize-pane -U 5 +bind-key -n C-M-S-l resize-pane -R 5 # "C-x m" to actually clear the pane history bind-key m send-keys -R \; clear-history -- cgit v1.2.3 From 4ffa33cb92bf72313869af11eabc9ea0860b3012 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 20:42:31 -0300 Subject: tmux.conf: Use correct notation for Shift key --- tmux/tmux.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index c675d96..a15f4e4 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -24,10 +24,10 @@ bind-key -n C-M-k select-pane -U bind-key -n C-M-l select-pane -R # Resizing panes -bind-key -n C-M-S-h resize-pane -L 5 -bind-key -n C-M-S-j resize-pane -D 5 -bind-key -n C-M-S-k resize-pane -U 5 -bind-key -n C-M-S-l resize-pane -R 5 +bind-key -n M-H resize-pane -L 5 +bind-key -n M-J resize-pane -D 5 +bind-key -n M-K resize-pane -U 5 +bind-key -n M-L resize-pane -R 5 # "C-x m" to actually clear the pane history bind-key m send-keys -R \; clear-history -- cgit v1.2.3 From 6e02d629d5b725c9b55a4b0f9211710bd5293e7f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 21:46:59 -0300 Subject: configuration.nix: Remove entr-with-good-clear --- nixos/configuration.nix | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index a4e8145..ee0de46 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -106,12 +106,6 @@ in { ln -s $out/bin/bmake $out/bin/make ''; }); - entr-with-good-clear = pkgs.entr.overrideAttrs (oldAttrs: { - postPatch = '' - substituteInPlace entr.c --replace /usr/bin/clear clear - ${oldAttrs.postPatch} - ''; - }); pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { postPatch = '' substituteInPlace ar_io.c --replace 'putenv' '// putenv' @@ -179,7 +173,7 @@ in { recutils sqlite trash-cli - entr-with-good-clear + entr mailutils ffmpeg-full ledger -- cgit v1.2.3 From aa78c28ea78e07ad7b19bfd7379f69a0a4263ea7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 13 Jan 2021 23:25:09 -0300 Subject: configuration.nix: Use Bash 5 --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ee0de46..e8f317e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -142,7 +142,7 @@ in { mktorrent diffoscope bundix - bash + (pkgs.lib.hiPrio bashInteractive_5) bash-completion nix-bash-completions youtube-dl -- cgit v1.2.3 From 42836528824bf2af998dc387b9ee8d5209579a36 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jan 2021 01:49:10 -0300 Subject: Add bash/fzf.sh --- bash/bashrc.sh | 1 + bash/fzf.sh | 48 ++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 bash/fzf.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 41fb25f..7da22dd 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -9,6 +9,7 @@ export DOTFILES=~/dev/libre/dotfiles . $DOTFILES/bash/colors.sh . $DOTFILES/bash/git-prompt.sh . $DOTFILES/bash/ps1.sh +. $DOTFILES/bash/fzf.sh . $DOTFILES/bash/aliases.sh . $DOTFILES/bash/util.sh . $DOTFILES/bash/agents.sh diff --git a/bash/fzf.sh b/bash/fzf.sh new file mode 100644 index 0000000..0a258a0 --- /dev/null +++ b/bash/fzf.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +# shellcheck source=/dev/null +. "$(fzf-share)/completion.bash" +. "$(fzf-share)/key-bindings.bash" + +# Recover the 'transpose-chars' functionality from readline +# that was overriden by 'keybindings.bash' +# For some reason, patching key-bindings.bash didn't work, so there's +# probably some fzf internal that depends on the key bindings being +# C-t. This hypothesis is reinforced by the fact that the environment +# variable is called $FZF_CTRL_T_OPTS, =/ +# I settled for using C-M-t for transpose-chars. +bind '"\e\C-t": transpose-chars' + +export FZF_TMUX=1 +export FZF_CTRL_T_OPTS=' + --preview "(cat {} || tree -C {}) 2> /dev/null" + --select-1 + --exit-0 +' + +export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"' + +fgrep() { + fn=$(git grep -n "$1" | \ + cut -d: -f -2 | \ + fzf-tmux --preview "echo {} | \ + cut -d: -f1 | \ + xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) ' + (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print } + NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print } + ' %") + if [ -n "$fn" ]; then + f="$(echo "$fn" | cut -d: -f1)" + n="$(echo "$fn" | cut -d: -f2)" + history -s vi "+$n" "$f" + vi "+$n" "$f" + fi +} + +f() { + file="$(git ls-files | fzf-tmux --select-1 --query "$2" --preview 'cat {}')" + if [ -n "$file" ]; then + history -s "$1" "$file" + "$1" "$file" + fi +} -- cgit v1.2.3 From 6caa589b1e3740429c52d52c2badca97177f2377 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jan 2021 09:10:16 -0300 Subject: fzf.sh: Add fzf commands themselves to the Bash history --- bash/fzf.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/fzf.sh b/bash/fzf.sh index 0a258a0..921863c 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -34,6 +34,7 @@ fgrep() { if [ -n "$fn" ]; then f="$(echo "$fn" | cut -d: -f1)" n="$(echo "$fn" | cut -d: -f2)" + history -s fzgrep $@ history -s vi "+$n" "$f" vi "+$n" "$f" fi @@ -42,6 +43,7 @@ fgrep() { f() { file="$(git ls-files | fzf-tmux --select-1 --query "$2" --preview 'cat {}')" if [ -n "$file" ]; then + history -s f $@ history -s "$1" "$file" "$1" "$file" fi -- cgit v1.2.3 From 9d66b371130da441cc9f2e7b5b580942c86d993b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jan 2021 09:11:47 -0300 Subject: fzf.sh: Rename fgrep() to fzgrep() --- bash/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index 921863c..c0bf578 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -22,7 +22,7 @@ export FZF_CTRL_T_OPTS=' export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"' -fgrep() { +fzgrep() { fn=$(git grep -n "$1" | \ cut -d: -f -2 | \ fzf-tmux --preview "echo {} | \ -- cgit v1.2.3 From 13e0b96741a3f3f2254fcc85679a6b567fdccce3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jan 2021 12:03:49 -0300 Subject: configuration.nix: Add file package for better POSIX compliance --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e8f317e..79490e7 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -211,6 +211,7 @@ in { pax-with-good-path flex gnugrep + file ## To be removed tdesktop # telegram-desktop application -- cgit v1.2.3 From 32727356652210f2fd776e685134d6c4bae672dc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jan 2021 14:47:24 -0300 Subject: fake-symlinks: Use restructuredText for TODOs --- bash/fake-symlinks.sh | 31 +- bash/templates/TODOs.org | 12 - bash/templates/TODOs.rst | 12 + .../templates/build-aux/generate-tasks-and-bugs.sh | 21 - bash/templates/build-aux/workflow/TODOs.sh | 14 + bash/templates/build-aux/workflow/preamble.org | 27 - bash/templates/build-aux/workflow/preamble.org.in | 27 - bash/templates/build-aux/workflow/preamble.rst | 18 + .../templates/build-aux/workflow/vendor/htmlize.el | 1884 -------------------- bash/templates/build-aux/workflow/vendor/org.css | 5 - bash/templates/build-aux/workflow/workflow.css | 49 - 11 files changed, 51 insertions(+), 2049 deletions(-) delete mode 100644 bash/templates/TODOs.org create mode 100644 bash/templates/TODOs.rst delete mode 100755 bash/templates/build-aux/generate-tasks-and-bugs.sh create mode 100755 bash/templates/build-aux/workflow/TODOs.sh delete mode 100644 bash/templates/build-aux/workflow/preamble.org delete mode 100644 bash/templates/build-aux/workflow/preamble.org.in create mode 100644 bash/templates/build-aux/workflow/preamble.rst delete mode 100644 bash/templates/build-aux/workflow/vendor/htmlize.el delete mode 100644 bash/templates/build-aux/workflow/vendor/org.css delete mode 100644 bash/templates/build-aux/workflow/workflow.css diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 4e571a1..8cb6ab5 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -29,16 +29,6 @@ done mkdir -p ~/archive/torrent/ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; -# shellcheck disable=2016 -sed -e 's/@PACKAGE@/$PROJECT/g' \ - -e 's/@PACKAGE_NAME@/$PROJECT_UC/g' \ - -e 's|@PACKAGE_GIT_URL@|https://git.euandreh.xyz|g' \ - -e 's|@PACKAGE_CI_URL@|https://ci.euandreh.xyz|g' \ - -e 's|@PACKAGE_URL@|https://$PROJECT.euandreh.xyz/|g' \ - -e 's/@TLD@/euandreh.xyz/g' \ - -e 's|@PACKAGE_BUGREPORT@|~euandreh/$MAILING_LIST@lists.sr.ht|g' \ - build-aux/workflow/preamble.org.in > build-aux/workflow/preamble.org - normalize-name() { if [[ -n "$RENAME_TO" ]]; then echo "$RENAME_TO" @@ -194,7 +184,7 @@ ln-autotools() { cp-if-not description # assumes: - # - ln-worflow for .gitignore + # - ln-workflow for .gitignore # - ln-git-notes-release for Makefile.am # - ln-guix-files for Makefile.am envsubst-if-not ..gitignore README.in @@ -202,19 +192,12 @@ ln-autotools() { } ln-build-aux() { - cp-all build-aux/workflow/vendor/org.css \ - build-aux/workflow/vendor/htmlize.el \ - build-aux/workflow/workflow.css \ - build-aux/assert-todos.sh \ - build-aux/assert-shellcheck.sh \ - build-aux/generate-tasks-and-bugs.sh - - if [ ! -f "$PREFIX/build-aux/workflow/preamble.org" ]; then - cp-if-not build-aux/workflow/preamble.org.in - else - envsubst-all build-aux/workflow/preamble.org - fi - cp-if-not TODOs.org + cp-all build-aux/assert-todos.sh \ + build-aux/assert-shellcheck.sh \ + build-aux/workflow/TODOs.sh \ + cp-all build-aux/workflow/preamble.rst + + cp-if-not TODOs.rst } ln-agpl() { diff --git a/bash/templates/TODOs.org b/bash/templates/TODOs.org deleted file mode 100644 index 4b0c4a9..0000000 --- a/bash/templates/TODOs.org +++ /dev/null @@ -1,12 +0,0 @@ -* Tasks -:PROPERTIES: -:CUSTOM_ID: tasks -:END: -* Bugs -:PROPERTIES: -:CUSTOM_ID: bugs -:END: -* Improvements -* Questions -* Resources -* Scratch diff --git a/bash/templates/TODOs.rst b/bash/templates/TODOs.rst new file mode 100644 index 0000000..4b0c4a9 --- /dev/null +++ b/bash/templates/TODOs.rst @@ -0,0 +1,12 @@ +* Tasks +:PROPERTIES: +:CUSTOM_ID: tasks +:END: +* Bugs +:PROPERTIES: +:CUSTOM_ID: bugs +:END: +* Improvements +* Questions +* Resources +* Scratch diff --git a/bash/templates/build-aux/generate-tasks-and-bugs.sh b/bash/templates/build-aux/generate-tasks-and-bugs.sh deleted file mode 100755 index 1788c18..0000000 --- a/bash/templates/build-aux/generate-tasks-and-bugs.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -eux - -mkdir -p public - -cat build-aux/workflow/vendor/org.css build-aux/workflow/workflow.css > public/styles.css - -sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | \ - head -n -1 | \ - cat build-aux/workflow/preamble.org - > tasks-and-bugs.org - -emacs tasks-and-bugs.org \ - -l build-aux/workflow/vendor/htmlize.el \ - --eval '(setq org-export-allow-bind-keywords t)' \ - -f org-html-export-to-html \ - --batch \ - --kill - -# Add anchor link to bug headers -perl -pe \ - 's|^

    (.*)

    $|

    \2
    #\1

    |' \ - tasks-and-bugs.html > public/tasks-and-bugs.html diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh new file mode 100755 index 0000000..036ce13 --- /dev/null +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -0,0 +1,14 @@ +#!/bin/sh -eux + +mkdir -p public + +export PROJECT_UC="$1" +export PROJECT="$2" +export MAILING_LIST="$3" + +envsubst < build-aux/workflow/preamble.rst | \ + cat - TODOs.rst | \ + pandoc --toc \ + --toc-depth=2 \ + -s --metadata title="$1 - TODOs" \ + -r rst -w html > public/TODOs.html diff --git a/bash/templates/build-aux/workflow/preamble.org b/bash/templates/build-aux/workflow/preamble.org deleted file mode 100644 index a6682c1..0000000 --- a/bash/templates/build-aux/workflow/preamble.org +++ /dev/null @@ -1,27 +0,0 @@ -#+TITLE: Tasks and bug listing for $PROJECT_UC -#+AUTHOR: EuAndreh -#+BIND: org-html-validation-link nil -#+BIND: org-html-scripts nil -#+BIND: org-html-postamble nil -#+BIND: org-export-html-headline-anchor-format nil -#+BIND: org-html-doctype "html5" -#+OPTIONS: toc:nil html-style:nil num:nil -#+HTML_HEAD: -#+MACRO: src [[https://git.euandreh.xyz/$/tree/master/$1][$1]] -#+MACRO: job [[https://ci.euandreh.xyz/$1][$1]] -#+MACRO: commit commit\nbsp{}[[https://git.euandreh.xyz/$PROJECT/commit?id=$1][$1]] -#+MACRO: bug bug\nbsp{}[[#$1][#$1]] -#+MACRO: task task\nbsp{}[[#$1][#$1]] -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) - -Tasks, bugs and issues for $PROJECT_UC. See: [[https://$PROJECT.euandreh.xyz/][$PROJECT.euandreh.xyz]]. - -Register a new one: [[mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][~euandreh/$MAILING_LIST@lists.sr.ht]]. - -/Você também pode escrever em português./ - -/Vous pouvez aussi écrire en français./ - -/Vi povas ankaŭ skribi esperante./ - -#+TOC: headlines 2 diff --git a/bash/templates/build-aux/workflow/preamble.org.in b/bash/templates/build-aux/workflow/preamble.org.in deleted file mode 100644 index 9a98828..0000000 --- a/bash/templates/build-aux/workflow/preamble.org.in +++ /dev/null @@ -1,27 +0,0 @@ -#+TITLE: Tasks and bug listing for @PACKAGE_NAME@ -#+AUTHOR: EuAndreh -#+BIND: org-html-validation-link nil -#+BIND: org-html-scripts nil -#+BIND: org-html-postamble nil -#+BIND: org-export-html-headline-anchor-format nil -#+BIND: org-html-doctype "html5" -#+OPTIONS: toc:nil html-style:nil num:nil -#+HTML_HEAD: -#+MACRO: src [[@PACKAGE_GIT_URL@/$/tree/master/$1][$1]] -#+MACRO: job [[@PACKAGE_CI_URL@/$1][$1]] -#+MACRO: commit commit\nbsp{}[[@PACKAGE_GIT_URL@/@PACKAGE@/commit?id=$1][$1]] -#+MACRO: bug bug\nbsp{}[[#$1][#$1]] -#+MACRO: task task\nbsp{}[[#$1][#$1]] -#+TODO: TODO(!) NEXT(!) WAITING(!) MEETING(!) INACTIVE(!) DOING(!) CANCELLED(@) DONE(@) - -Tasks, bugs and issues for @PACKAGE_NAME@. See: [[@PACKAGE_URL@][@PACKAGE@.@TLD@]]. - -Register a new one: [[mailto:@PACKAGE_BUGREPORT@?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E][@PACKAGE_BUGREPORT@]]. - -/Você também pode escrever em português./ - -/Vous pouvez aussi écrire en français./ - -/Vi povas ankaŭ skribi esperante./ - -#+TOC: headlines 2 diff --git a/bash/templates/build-aux/workflow/preamble.rst b/bash/templates/build-aux/workflow/preamble.rst new file mode 100644 index 0000000..45688aa --- /dev/null +++ b/bash/templates/build-aux/workflow/preamble.rst @@ -0,0 +1,18 @@ +About +===== + +TODOs for $PROJECT_UC. + +See `$PROJECT.euandreh.xyz`_. + +Register a new one: `~euandreh/$MAILING_LIST@lists.sr.ht`_. + +*Você também pode escrever em português.* + +*Vous pouvez aussi écrire en français.* + +*Vi povas ankaŭ skribi esperante.* + +.. _`$PROJECT.euandreh.xyz`: https://$PROJECT.euandreh.xyz/ +.. _`~euandreh/$MAILING_LIST@lists.sr.ht`: mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E + diff --git a/bash/templates/build-aux/workflow/vendor/htmlize.el b/bash/templates/build-aux/workflow/vendor/htmlize.el deleted file mode 100644 index 02f251a..0000000 --- a/bash/templates/build-aux/workflow/vendor/htmlize.el +++ /dev/null @@ -1,1884 +0,0 @@ -;;;; Taken from: -;;;; https://raw.githubusercontent.com/hniksic/emacs-htmlize/release/1.55/htmlize.el - -;;; htmlize.el --- Convert buffer text and decorations to HTML. -*- lexical-binding: t -*- - -;; Copyright (C) 1997-2003,2005,2006,2009,2011,2012,2014,2017,2018 Hrvoje Niksic - -;; Author: Hrvoje Niksic -;; Keywords: hypermedia, extensions -;; Version: 1.55 - -;; This program is free software; you can redistribute it and/or modify -;; it under the terms of the GNU General Public License as published by -;; the Free Software Foundation; either version 2, or (at your option) -;; any later version. - -;; This program is distributed in the hope that it will be useful, -;; but WITHOUT ANY WARRANTY; without even the implied warranty of -;; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -;; GNU General Public License for more details. - -;; You should have received a copy of the GNU General Public License -;; along with this program; see the file COPYING. If not, write to the -;; Free Software Foundation, Inc., 59 Temple Place - Suite 330, -;; Boston, MA 02111-1307, USA. - -;;; Commentary: - -;; This package converts the buffer text and the associated -;; decorations to HTML. Mail to to discuss -;; features and additions. All suggestions are more than welcome. - -;; To use it, just switch to the buffer you want HTML-ized and type -;; `M-x htmlize-buffer'. You will be switched to a new buffer that -;; contains the resulting HTML code. You can edit and inspect this -;; buffer, or you can just save it with C-x C-w. `M-x htmlize-file' -;; will find a file, fontify it, and save the HTML version in -;; FILE.html, without any additional intervention. `M-x -;; htmlize-many-files' allows you to htmlize any number of files in -;; the same manner. `M-x htmlize-many-files-dired' does the same for -;; files marked in a dired buffer. - -;; htmlize supports three types of HTML output, selected by setting -;; `htmlize-output-type': `css', `inline-css', and `font'. In `css' -;; mode, htmlize uses cascading style sheets to specify colors; it -;; generates classes that correspond to Emacs faces and uses ... to color parts of text. In this mode, the -;; produced HTML is valid under the 4.01 strict DTD, as confirmed by -;; the W3C validator. `inline-css' is like `css', except the CSS is -;; put directly in the STYLE attribute of the SPAN element, making it -;; possible to paste the generated HTML into existing HTML documents. -;; In `font' mode, htmlize uses ... to -;; colorize HTML, which is not standard-compliant, but works better in -;; older browsers. `css' mode is the default. - -;; You can also use htmlize from your Emacs Lisp code. When called -;; non-interactively, `htmlize-buffer' and `htmlize-region' will -;; return the resulting HTML buffer, but will not change current -;; buffer or move the point. htmlize will do its best to work on -;; non-windowing Emacs sessions but the result will be limited to -;; colors supported by the terminal. - -;; htmlize aims for compatibility with older Emacs versions. Please -;; let me know if it doesn't work on the version of GNU Emacs that you -;; are using. The package relies on the presence of CL extensions; -;; please don't try to remove that dependency. I see no practical -;; problems with using the full power of the CL extensions, except -;; that one might learn to like them too much. - -;; The latest version is available at: -;; -;; -;; -;; - -;; Thanks go to the many people who have sent reports and contributed -;; comments, suggestions, and fixes. They include Ron Gut, Bob -;; Weiner, Toni Drabik, Peter Breton, Ville Skytta, Thomas Vogels, -;; Juri Linkov, Maciek Pasternacki, and many others. - -;; User quotes: "You sir, are a sick, sick, _sick_ person. :)" -;; -- Bill Perry, author of Emacs/W3 - - -;;; Code: - -(require 'cl) -(eval-when-compile - (defvar font-lock-auto-fontify) - (defvar font-lock-support-mode) - (defvar global-font-lock-mode)) - -(defconst htmlize-version "1.55") - -(defgroup htmlize nil - "Convert buffer text and faces to HTML." - :group 'hypermedia) - -(defcustom htmlize-head-tags "" - "Additional tags to insert within HEAD of the generated document." - :type 'string - :group 'htmlize) - -(defcustom htmlize-output-type 'css - "Output type of generated HTML, one of `css', `inline-css', or `font'. -When set to `css' (the default), htmlize will generate a style sheet -with description of faces, and use it in the HTML document, specifying -the faces in the actual text with . - -When set to `inline-css', the style will be generated as above, but -placed directly in the STYLE attribute of the span ELEMENT: . This makes it easier to paste the resulting HTML to -other documents. - -When set to `font', the properties will be set using layout tags -, , , , and . - -`css' output is normally preferred, but `font' is still useful for -supporting old, pre-CSS browsers, and both `inline-css' and `font' for -easier embedding of colorized text in foreign HTML documents (no style -sheet to carry around)." - :type '(choice (const css) (const inline-css) (const font)) - :group 'htmlize) - -(defcustom htmlize-use-images t - "Whether htmlize generates `img' for images attached to buffer contents." - :type 'boolean - :group 'htmlize) - -(defcustom htmlize-force-inline-images nil - "Non-nil means generate all images inline using data URLs. -Normally htmlize converts image descriptors with :file properties to -relative URIs, and those with :data properties to data URIs. With this -flag set, the images specified as a file name are loaded into memory and -embedded in the HTML as data URIs." - :type 'boolean - :group 'htmlize) - -(defcustom htmlize-max-alt-text 100 - "Maximum size of text to use as ALT text in images. - -Normally when htmlize encounters text covered by the `display' property -that specifies an image, it generates an `alt' attribute containing the -original text. If the text is larger than `htmlize-max-alt-text' characters, -this will not be done." - :type 'integer - :group 'htmlize) - -(defcustom htmlize-transform-image 'htmlize-default-transform-image - "Function called to modify the image descriptor. - -The function is called with the image descriptor found in the buffer and -the text the image is supposed to replace. It should return a (possibly -different) image descriptor property list or a replacement string to use -instead of of the original buffer text. - -Returning nil is the same as returning the original text." - :type 'boolean - :group 'htmlize) - -(defcustom htmlize-generate-hyperlinks t - "Non-nil means auto-generate the links from URLs and mail addresses in buffer. - -This is on by default; set it to nil if you don't want htmlize to -autogenerate such links. Note that this option only turns off automatic -search for contents that looks like URLs and converting them to links. -It has no effect on whether htmlize respects the `htmlize-link' property." - :type 'boolean - :group 'htmlize) - -(defcustom htmlize-hyperlink-style " - a { - color: inherit; - background-color: inherit; - font: inherit; - text-decoration: inherit; - } - a:hover { - text-decoration: underline; - } -" - "The CSS style used for hyperlinks when in CSS mode." - :type 'string - :group 'htmlize) - -(defcustom htmlize-replace-form-feeds t - "Non-nil means replace form feeds in source code with HTML separators. -Form feeds are the ^L characters at line beginnings that are sometimes -used to separate sections of source code. If this variable is set to -`t', form feed characters are replaced with the
    separator. If this -is a string, it specifies the replacement to use. Note that
     is
    -temporarily closed before the separator is inserted, so the default
    -replacement is effectively \"

    \".  If you specify
    -another replacement, don't forget to close and reopen the 
     if you
    -want the output to remain valid HTML.
    -
    -If you need more elaborate processing, set this to nil and use
    -htmlize-after-hook."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-html-charset nil
    -  "The charset declared by the resulting HTML documents.
    -When non-nil, causes htmlize to insert the following in the HEAD section
    -of the generated HTML:
    -
    -  
    -
    -where CHARSET is the value you've set for htmlize-html-charset.  Valid
    -charsets are defined by MIME and include strings like \"iso-8859-1\",
    -\"iso-8859-15\", \"utf-8\", etc.
    -
    -If you are using non-Latin-1 charsets, you might need to set this for
    -your documents to render correctly.  Also, the W3C validator requires
    -submitted HTML documents to declare a charset.  So if you care about
    -validation, you can use this to prevent the validator from bitching.
    -
    -Needless to say, if you set this, you should actually make sure that
    -the buffer is in the encoding you're claiming it is in.  (This is
    -normally achieved by using the correct file coding system for the
    -buffer.)  If you don't understand what that means, you should probably
    -leave this option in its default setting."
    -  :type '(choice (const :tag "Unset" nil)
    -		 string)
    -  :group 'htmlize)
    -
    -(defcustom htmlize-convert-nonascii-to-entities t
    -  "Whether non-ASCII characters should be converted to HTML entities.
    -
    -When this is non-nil, characters with codes in the 128-255 range will be
    -considered Latin 1 and rewritten as \"&#CODE;\".  Characters with codes
    -above 255 will be converted to \"&#UCS;\", where UCS denotes the Unicode
    -code point of the character.  If the code point cannot be determined,
    -the character will be copied unchanged, as would be the case if the
    -option were nil.
    -
    -When the option is nil, the non-ASCII characters are copied to HTML
    -without modification.  In that case, the web server and/or the browser
    -must be set to understand the encoding that was used when saving the
    -buffer.  (You might also want to specify it by setting
    -`htmlize-html-charset'.)
    -
    -Note that in an HTML entity \"&#CODE;\", CODE is always a UCS code point,
    -which has nothing to do with the charset the page is in.  For example,
    -\"©\" *always* refers to the copyright symbol, regardless of charset
    -specified by the META tag or the charset sent by the HTTP server.  In
    -other words, \"©\" is exactly equivalent to \"©\".
    -
    -For most people htmlize will work fine with this option left at the
    -default setting; don't change it unless you know what you're doing."
    -  :type 'sexp
    -  :group 'htmlize)
    -
    -(defcustom htmlize-ignore-face-size 'absolute
    -  "Whether face size should be ignored when generating HTML.
    -If this is nil, face sizes are used.  If set to t, sizes are ignored
    -If set to `absolute', only absolute size specifications are ignored.
    -Please note that font sizes only work with CSS-based output types."
    -  :type '(choice (const :tag "Don't ignore" nil)
    -		 (const :tag "Ignore all" t)
    -		 (const :tag "Ignore absolute" absolute))
    -  :group 'htmlize)
    -
    -(defcustom htmlize-css-name-prefix ""
    -  "The prefix used for CSS names.
    -The CSS names that htmlize generates from face names are often too
    -generic for CSS files; for example, `font-lock-type-face' is transformed
    -to `type'.  Use this variable to add a prefix to the generated names.
    -The string \"htmlize-\" is an example of a reasonable prefix."
    -  :type 'string
    -  :group 'htmlize)
    -
    -(defcustom htmlize-use-rgb-txt t
    -  "Whether `rgb.txt' should be used to convert color names to RGB.
    -
    -This conversion means determining, for instance, that the color
    -\"IndianRed\" corresponds to the (205, 92, 92) RGB triple.  `rgb.txt'
    -is the X color database that maps hundreds of color names to such RGB
    -triples.  When this variable is non-nil, `htmlize' uses `rgb.txt' to
    -look up color names.
    -
    -If this variable is nil, htmlize queries Emacs for RGB components of
    -colors using `color-instance-rgb-components' and `color-values'.
    -This can yield incorrect results on non-true-color displays.
    -
    -If the `rgb.txt' file is not found (which will be the case if you're
    -running Emacs on non-X11 systems), this option is ignored."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defvar htmlize-face-overrides nil
    -  "Overrides for face definitions.
    -
    -Normally face definitions are taken from Emacs settings for fonts
    -in the current frame.  For faces present in this plist, the
    -definitions will be used instead.  Keys in the plist are symbols
    -naming the face and values are the overriding definitions.  For
    -example:
    -
    -  (setq htmlize-face-overrides
    -        '(font-lock-warning-face \"black\"
    -          font-lock-function-name-face \"red\"
    -          font-lock-comment-face \"blue\"
    -          default (:foreground \"dark-green\" :background \"yellow\")))
    -
    -This variable can be also be `let' bound when running `htmlize-buffer'.")
    -
    -(defcustom htmlize-untabify t
    -  "Non-nil means untabify buffer contents during htmlization."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defcustom htmlize-html-major-mode nil
    -  "The mode the newly created HTML buffer will be put in.
    -Set this to nil if you prefer the default (fundamental) mode."
    -  :type '(radio (const :tag "No mode (fundamental)" nil)
    -		 (function-item html-mode)
    -		 (function :tag "User-defined major mode"))
    -  :group 'htmlize)
    -
    -(defcustom htmlize-pre-style nil
    -  "When non-nil, `
    ' tags will be decorated with style
    -information in `font' and `inline-css' modes. This allows a
    -consistent background for captures of regions."
    -  :type 'boolean
    -  :group 'htmlize)
    -
    -(defvar htmlize-before-hook nil
    -  "Hook run before htmlizing a buffer.
    -The hook functions are run in the source buffer (not the resulting HTML
    -buffer).")
    -
    -(defvar htmlize-after-hook nil
    -  "Hook run after htmlizing a buffer.
    -Unlike `htmlize-before-hook', these functions are run in the generated
    -HTML buffer.  You may use them to modify the outlook of the final HTML
    -output.")
    -
    -(defvar htmlize-file-hook nil
    -  "Hook run by `htmlize-file' after htmlizing a file, but before saving it.")
    -
    -(defvar htmlize-buffer-places)
    -
    -;;; Some cross-Emacs compatibility.
    -
    -;; We need a function that efficiently finds the next change of a
    -;; property regardless of whether the change occurred because of a
    -;; text property or an extent/overlay.
    -(defun htmlize-next-change (pos prop &optional limit)
    -  (if prop
    -      (next-single-char-property-change pos prop nil limit)
    -    (next-char-property-change pos limit)))
    -
    -(defun htmlize-overlay-faces-at (pos)
    -  (delq nil (mapcar (lambda (o) (overlay-get o 'face)) (overlays-at pos))))
    -
    -(defun htmlize-next-face-change (pos &optional limit)
    -  ;; (htmlize-next-change pos 'face limit) would skip over entire
    -  ;; overlays that specify the `face' property, even when they
    -  ;; contain smaller text properties that also specify `face'.
    -  ;; Emacs display engine merges those faces, and so must we.
    -  (or limit
    -      (setq limit (point-max)))
    -  (let ((next-prop (next-single-property-change pos 'face nil limit))
    -        (overlay-faces (htmlize-overlay-faces-at pos)))
    -    (while (progn
    -             (setq pos (next-overlay-change pos))
    -             (and (< pos next-prop)
    -                  (equal overlay-faces (htmlize-overlay-faces-at pos)))))
    -    (setq pos (min pos next-prop))
    -    ;; Additionally, we include the entire region that specifies the
    -    ;; `display' property.
    -    (when (get-char-property pos 'display)
    -      (setq pos (next-single-char-property-change pos 'display nil limit)))
    -    pos))
    -
    -(defmacro htmlize-lexlet (&rest letforms)
    -  (declare (indent 1) (debug let))
    -  (if (and (boundp 'lexical-binding)
    -           lexical-binding)
    -      `(let ,@letforms)
    -    ;; cl extensions have a macro implementing lexical let
    -    `(lexical-let ,@letforms)))
    -
    -
    -;;; Transformation of buffer text: HTML escapes, untabification, etc.
    -
    -(defvar htmlize-basic-character-table
    -  ;; Map characters in the 0-127 range to either one-character strings
    -  ;; or to numeric entities.
    -  (let ((table (make-vector 128 ?\0)))
    -    ;; Map characters in the 32-126 range to themselves, others to
    -    ;; &#CODE entities;
    -    (dotimes (i 128)
    -      (setf (aref table i) (if (and (>= i 32) (<= i 126))
    -			       (char-to-string i)
    -			     (format "&#%d;" i))))
    -    ;; Set exceptions manually.
    -    (setf
    -     ;; Don't escape newline, carriage return, and TAB.
    -     (aref table ?\n) "\n"
    -     (aref table ?\r) "\r"
    -     (aref table ?\t) "\t"
    -     ;; Escape &, <, and >.
    -     (aref table ?&) "&"
    -     (aref table ?<) "<"
    -     (aref table ?>) ">"
    -     ;; Not escaping '"' buys us a measurable speedup.  It's only
    -     ;; necessary to quote it for strings used in attribute values,
    -     ;; which htmlize doesn't typically do.
    -     ;(aref table ?\") """
    -     )
    -    table))
    -
    -;; A cache of HTML representation of non-ASCII characters.  Depending
    -;; on the setting of `htmlize-convert-nonascii-to-entities', this maps
    -;; non-ASCII characters to either "&#;" or "" (mapconcat's
    -;; mapper must always return strings).  It's only filled as characters
    -;; are encountered, so that in a buffer with e.g. French text, it will
    -;; only ever contain French accented characters as keys.  It's cleared
    -;; on each entry to htmlize-buffer-1 to allow modifications of
    -;; `htmlize-convert-nonascii-to-entities' to take effect.
    -(defvar htmlize-extended-character-cache (make-hash-table :test 'eq))
    -
    -(defun htmlize-protect-string (string)
    -  "HTML-protect string, escaping HTML metacharacters and I18N chars."
    -  ;; Only protecting strings that actually contain unsafe or non-ASCII
    -  ;; chars removes a lot of unnecessary funcalls and consing.
    -  (if (not (string-match "[^\r\n\t -%'-;=?-~]" string))
    -      string
    -    (mapconcat (lambda (char)
    -		 (cond
    -		  ((< char 128)
    -		   ;; ASCII: use htmlize-basic-character-table.
    -		   (aref htmlize-basic-character-table char))
    -		  ((gethash char htmlize-extended-character-cache)
    -		   ;; We've already seen this char; return the cached
    -		   ;; string.
    -		   )
    -		  ((not htmlize-convert-nonascii-to-entities)
    -		   ;; If conversion to entities is not desired, always
    -		   ;; copy the char literally.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (char-to-string char)))
    -		  ((< char 256)
    -		   ;; Latin 1: no need to call encode-char.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (format "&#%d;" char)))
    -		  ((encode-char char 'ucs)
    -                   ;; Must check if encode-char works for CHAR;
    -                   ;; it fails for Arabic and possibly elsewhere.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (format "&#%d;" (encode-char char 'ucs))))
    -		  (t
    -		   ;; encode-char doesn't work for this char.  Copy it
    -		   ;; unchanged and hope for the best.
    -		   (setf (gethash char htmlize-extended-character-cache)
    -			 (char-to-string char)))))
    -	       string "")))
    -
    -(defun htmlize-attr-escape (string)
    -  ;; Like htmlize-protect-string, but also escapes double-quoted
    -  ;; strings to make it usable in attribute values.
    -  (setq string (htmlize-protect-string string))
    -  (if (not (string-match "\"" string))
    -      string
    -    (mapconcat (lambda (char)
    -                 (if (eql char ?\")
    -                     """
    -                   (char-to-string char)))
    -               string "")))
    -
    -(defsubst htmlize-concat (list)
    -  (if (and (consp list) (null (cdr list)))
    -      ;; Don't create a new string in the common case where the list only
    -      ;; consists of one element.
    -      (car list)
    -    (apply #'concat list)))
    -
    -(defun htmlize-format-link (linkprops text)
    -  (let ((uri (if (stringp linkprops)
    -                 linkprops
    -               (plist-get linkprops :uri)))
    -        (escaped-text (htmlize-protect-string text)))
    -    (if uri
    -        (format "%s" (htmlize-attr-escape uri) escaped-text)
    -      escaped-text)))
    -
    -(defun htmlize-escape-or-link (string)
    -  ;; Escape STRING and/or add hyperlinks.  STRING comes from a
    -  ;; `display' property.
    -  (let ((pos 0) (end (length string)) outlist)
    -    (while (< pos end)
    -      (let* ((link (get-char-property pos 'htmlize-link string))
    -             (next-link-change (next-single-property-change
    -                                pos 'htmlize-link string end))
    -             (chunk (substring string pos next-link-change)))
    -        (push
    -         (cond (link
    -                (htmlize-format-link link chunk))
    -               ((get-char-property 0 'htmlize-literal chunk)
    -                chunk)
    -               (t
    -                (htmlize-protect-string chunk)))
    -         outlist)
    -        (setq pos next-link-change)))
    -    (htmlize-concat (nreverse outlist))))
    -
    -(defun htmlize-display-prop-to-html (display text)
    -  (let (desc)
    -    (cond ((stringp display)
    -           ;; Emacs ignores recursive display properties.
    -           (htmlize-escape-or-link display))
    -          ((not (eq (car-safe display) 'image))
    -           (htmlize-protect-string text))
    -          ((null (setq desc (funcall htmlize-transform-image
    -                                     (cdr display) text)))
    -           (htmlize-escape-or-link text))
    -          ((stringp desc)
    -           (htmlize-escape-or-link desc))
    -          (t
    -           (htmlize-generate-image desc text)))))
    -
    -(defun htmlize-string-to-html (string)
    -  ;; Convert the string to HTML, including images attached as
    -  ;; `display' property and links as `htmlize-link' property.  In a
    -  ;; string without images or links, this is equivalent to
    -  ;; `htmlize-protect-string'.
    -  (let ((pos 0) (end (length string)) outlist)
    -    (while (< pos end)
    -      (let* ((display (get-char-property pos 'display string))
    -             (next-display-change (next-single-property-change
    -                                   pos 'display string end))
    -             (chunk (substring string pos next-display-change)))
    -        (push
    -         (if display
    -             (htmlize-display-prop-to-html display chunk)
    -           (htmlize-escape-or-link chunk))
    -         outlist)
    -        (setq pos next-display-change)))
    -    (htmlize-concat (nreverse outlist))))
    -
    -(defun htmlize-default-transform-image (imgprops _text)
    -  "Default transformation of image descriptor to something usable in HTML.
    -
    -If `htmlize-use-images' is nil, the function always returns nil, meaning
    -use original text.  Otherwise, it tries to find the image for images that
    -specify a file name.  If `htmlize-force-inline-images' is non-nil, it also
    -converts the :file attribute to :data and returns the modified property
    -list."
    -  (when htmlize-use-images
    -    (when (plist-get imgprops :file)
    -      (let ((location (plist-get (cdr (find-image (list imgprops))) :file)))
    -        (when location
    -          (setq imgprops (plist-put (copy-list imgprops) :file location)))))
    -    (if htmlize-force-inline-images
    -        (let ((location (plist-get imgprops :file))
    -              data)
    -          (when location
    -            (with-temp-buffer
    -              (condition-case nil
    -                  (progn
    -                    (insert-file-contents-literally location)
    -                    (setq data (buffer-string)))
    -                (error nil))))
    -          ;; if successful, return the new plist, otherwise return
    -          ;; nil, which will use the original text
    -          (and data
    -               (plist-put (plist-put imgprops :file nil)
    -                          :data data)))
    -      imgprops)))
    -
    -(defun htmlize-alt-text (_imgprops origtext)
    -  (and (/= (length origtext) 0)
    -       (<= (length origtext) htmlize-max-alt-text)
    -       (not (string-match "[\0-\x1f]" origtext))
    -       origtext))
    -
    -(defun htmlize-generate-image (imgprops origtext)
    -  (let* ((alt-text (htmlize-alt-text imgprops origtext))
    -         (alt-attr (if alt-text
    -                       (format " alt=\"%s\"" (htmlize-attr-escape alt-text))
    -                     "")))
    -    (cond ((plist-get imgprops :file)
    -           ;; Try to find the image in image-load-path
    -           (let* ((found-props (cdr (find-image (list imgprops))))
    -                  (file (or (plist-get found-props :file)
    -                            (plist-get imgprops :file))))
    -             (format ""
    -                     (htmlize-attr-escape (file-relative-name file))
    -                     alt-attr)))
    -          ((plist-get imgprops :data)
    -           (format ""
    -                   (or (plist-get imgprops :type) "")
    -                   (base64-encode-string (plist-get imgprops :data))
    -                   alt-attr)))))
    -
    -(defconst htmlize-ellipsis "...")
    -(put-text-property 0 (length htmlize-ellipsis) 'htmlize-ellipsis t htmlize-ellipsis)
    -
    -(defun htmlize-match-inv-spec (inv)
    -  (member* inv buffer-invisibility-spec
    -           :key (lambda (i)
    -                  (if (symbolp i) i (car i)))))
    -
    -(defun htmlize-decode-invisibility-spec (invisible)
    -  ;; Return t, nil, or `ellipsis', depending on how invisible text should be inserted.
    -
    -  (if (not (listp buffer-invisibility-spec))
    -      ;; If buffer-invisibility-spec is not a list, then all
    -      ;; characters with non-nil `invisible' property are visible.
    -      (not invisible)
    -
    -    ;; Otherwise, the value of a non-nil `invisible' property can be:
    -    ;; 1. a symbol -- make the text invisible if it matches
    -    ;;    buffer-invisibility-spec.
    -    ;; 2. a list of symbols -- make the text invisible if
    -    ;;    any symbol in the list matches
    -    ;;    buffer-invisibility-spec.
    -    ;; If the match of buffer-invisibility-spec has a non-nil
    -    ;; CDR, replace the invisible text with an ellipsis.
    -    (let ((match (if (symbolp invisible)
    -                     (htmlize-match-inv-spec invisible)
    -                   (some #'htmlize-match-inv-spec invisible))))
    -      (cond ((null match) t)
    -            ((cdr-safe (car match)) 'ellipsis)
    -            (t nil)))))
    -
    -(defun htmlize-add-before-after-strings (beg end text)
    -  ;; Find overlays specifying before-string and after-string in [beg,
    -  ;; pos).  If any are found, splice them into TEXT and return the new
    -  ;; text.
    -  (let (additions)
    -    (dolist (overlay (overlays-in beg end))
    -      (let ((before (overlay-get overlay 'before-string))
    -            (after (overlay-get overlay 'after-string)))
    -        (when after
    -          (push (cons (- (overlay-end overlay) beg)
    -                      after)
    -                additions))
    -        (when before
    -          (push (cons (- (overlay-start overlay) beg)
    -                      before)
    -                additions))))
    -    (if additions
    -        (let ((textlist nil)
    -              (strpos 0))
    -          (dolist (add (stable-sort additions #'< :key #'car))
    -            (let ((addpos (car add))
    -                  (addtext (cdr add)))
    -              (push (substring text strpos addpos) textlist)
    -              (push addtext textlist)
    -              (setq strpos addpos)))
    -          (push (substring text strpos) textlist)
    -          (apply #'concat (nreverse textlist)))
    -      text)))
    -
    -(defun htmlize-copy-prop (prop beg end string)
    -  ;; Copy the specified property from the specified region of the
    -  ;; buffer to the target string.  We cannot rely on Emacs to copy the
    -  ;; property because we want to handle properties coming from both
    -  ;; text properties and overlays.
    -  (let ((pos beg))
    -    (while (< pos end)
    -      (let ((value (get-char-property pos prop))
    -            (next-change (htmlize-next-change pos prop end)))
    -        (when value
    -          (put-text-property (- pos beg) (- next-change beg)
    -                             prop value string))
    -        (setq pos next-change)))))
    -
    -(defun htmlize-get-text-with-display (beg end)
    -  ;; Like buffer-substring-no-properties, except it copies the
    -  ;; `display' property from the buffer, if found.
    -  (let ((text (buffer-substring-no-properties beg end)))
    -    (htmlize-copy-prop 'display beg end text)
    -    (htmlize-copy-prop 'htmlize-link beg end text)
    -    (setq text (htmlize-add-before-after-strings beg end text))
    -    text))
    -
    -(defun htmlize-buffer-substring-no-invisible (beg end)
    -  ;; Like buffer-substring-no-properties, but don't copy invisible
    -  ;; parts of the region.  Where buffer-substring-no-properties
    -  ;; mandates an ellipsis to be shown, htmlize-ellipsis is inserted.
    -  (let ((pos beg)
    -	visible-list invisible show last-show next-change)
    -    ;; Iterate over the changes in the `invisible' property and filter
    -    ;; out the portions where it's non-nil, i.e. where the text is
    -    ;; invisible.
    -    (while (< pos end)
    -      (setq invisible (get-char-property pos 'invisible)
    -	    next-change (htmlize-next-change pos 'invisible end)
    -            show (htmlize-decode-invisibility-spec invisible))
    -      (cond ((eq show t)
    -	     (push (htmlize-get-text-with-display pos next-change)
    -                   visible-list))
    -            ((and (eq show 'ellipsis)
    -                  (not (eq last-show 'ellipsis))
    -                  ;; Conflate successive ellipses.
    -                  (push htmlize-ellipsis visible-list))))
    -      (setq pos next-change last-show show))
    -    (htmlize-concat (nreverse visible-list))))
    -
    -(defun htmlize-trim-ellipsis (text)
    -  ;; Remove htmlize-ellipses ("...") from the beginning of TEXT if it
    -  ;; starts with it.  It checks for the special property of the
    -  ;; ellipsis so it doesn't work on ordinary text that begins with
    -  ;; "...".
    -  (if (get-text-property 0 'htmlize-ellipsis text)
    -      (substring text (length htmlize-ellipsis))
    -    text))
    -
    -(defconst htmlize-tab-spaces
    -  ;; A table of strings with spaces.  (aref htmlize-tab-spaces 5) is
    -  ;; like (make-string 5 ?\ ), except it doesn't cons.
    -  (let ((v (make-vector 32 nil)))
    -    (dotimes (i (length v))
    -      (setf (aref v i) (make-string i ?\ )))
    -    v))
    -
    -(defun htmlize-untabify-string (text start-column)
    -  "Untabify TEXT, assuming it starts at START-COLUMN."
    -  (let ((column start-column)
    -	(last-match 0)
    -	(chunk-start 0)
    -	chunks match-pos tab-size)
    -    (while (string-match "[\t\n]" text last-match)
    -      (setq match-pos (match-beginning 0))
    -      (cond ((eq (aref text match-pos) ?\t)
    -	     ;; Encountered a tab: create a chunk of text followed by
    -	     ;; the expanded tab.
    -	     (push (substring text chunk-start match-pos) chunks)
    -	     ;; Increase COLUMN by the length of the text we've
    -	     ;; skipped since last tab or newline.  (Encountering
    -	     ;; newline resets it.)
    -	     (incf column (- match-pos last-match))
    -	     ;; Calculate tab size based on tab-width and COLUMN.
    -	     (setq tab-size (- tab-width (% column tab-width)))
    -	     ;; Expand the tab, carefully recreating the `display'
    -	     ;; property if one was on the TAB.
    -             (let ((display (get-text-property match-pos 'display text))
    -                   (expanded-tab (aref htmlize-tab-spaces tab-size)))
    -               (when display
    -                 (put-text-property 0 tab-size 'display display expanded-tab))
    -               (push expanded-tab chunks))
    -	     (incf column tab-size)
    -	     (setq chunk-start (1+ match-pos)))
    -	    (t
    -	     ;; Reset COLUMN at beginning of line.
    -	     (setq column 0)))
    -      (setq last-match (1+ match-pos)))
    -    ;; If no chunks have been allocated, it means there have been no
    -    ;; tabs to expand.  Return TEXT unmodified.
    -    (if (null chunks)
    -	text
    -      (when (< chunk-start (length text))
    -	;; Push the remaining chunk.
    -	(push (substring text chunk-start) chunks))
    -      ;; Generate the output from the available chunks.
    -      (htmlize-concat (nreverse chunks)))))
    -
    -(defun htmlize-extract-text (beg end trailing-ellipsis)
    -  ;; Extract buffer text, sans the invisible parts.  Then
    -  ;; untabify it and escape the HTML metacharacters.
    -  (let ((text (htmlize-buffer-substring-no-invisible beg end)))
    -    (when trailing-ellipsis
    -      (setq text (htmlize-trim-ellipsis text)))
    -    ;; If TEXT ends up empty, don't change trailing-ellipsis.
    -    (when (> (length text) 0)
    -      (setq trailing-ellipsis
    -            (get-text-property (1- (length text))
    -                               'htmlize-ellipsis text)))
    -    (when htmlize-untabify
    -      (setq text (htmlize-untabify-string text (current-column))))
    -    (setq text (htmlize-string-to-html text))
    -    (values text trailing-ellipsis)))
    -
    -(defun htmlize-despam-address (string)
    -  "Replace every occurrence of '@' in STRING with %40.
    -This is used to protect mailto links without modifying their meaning."
    -  ;; Suggested by Ville Skytta.
    -  (while (string-match "@" string)
    -    (setq string (replace-match "%40" nil t string)))
    -  string)
    -
    -(defun htmlize-make-tmp-overlay (beg end props)
    -  (let ((overlay (make-overlay beg end)))
    -    (overlay-put overlay 'htmlize-tmp-overlay t)
    -    (while props
    -      (overlay-put overlay (pop props) (pop props)))
    -    overlay))
    -
    -(defun htmlize-delete-tmp-overlays ()
    -  (dolist (overlay (overlays-in (point-min) (point-max)))
    -    (when (overlay-get overlay 'htmlize-tmp-overlay)
    -      (delete-overlay overlay))))
    -
    -(defun htmlize-make-link-overlay (beg end uri)
    -  (htmlize-make-tmp-overlay beg end `(htmlize-link (:uri ,uri))))
    -
    -(defun htmlize-create-auto-links ()
    -  "Add `htmlize-link' property to all mailto links in the buffer."
    -  (save-excursion
    -    (goto-char (point-min))
    -    (while (re-search-forward
    -            "<\\(\\(mailto:\\)?\\([-=+_.a-zA-Z0-9]+@[-_.a-zA-Z0-9]+\\)\\)>"
    -            nil t)
    -      (let* ((address (match-string 3))
    -             (beg (match-beginning 0)) (end (match-end 0))
    -             (uri (concat "mailto:" (htmlize-despam-address address))))
    -        (htmlize-make-link-overlay beg end uri)))
    -    (goto-char (point-min))
    -    (while (re-search-forward "<\\(\\(URL:\\)?\\([a-zA-Z]+://[^;]+\\)\\)>"
    -                              nil t)
    -      (htmlize-make-link-overlay
    -       (match-beginning 0) (match-end 0) (match-string 3)))))
    -
    -;; Tests for htmlize-create-auto-links:
    -
    -;; 
    -;; 
    -;; 
    -;; 
    -;; 
    -;; 
    -
    -(defun htmlize-shadow-form-feeds ()
    -  (let ((s "\n
    ")) - (put-text-property 0 (length s) 'htmlize-literal t s) - (let ((disp `(display ,s))) - (while (re-search-forward "\n\^L" nil t) - (let* ((beg (match-beginning 0)) - (end (match-end 0)) - (form-feed-pos (1+ beg)) - ;; don't process ^L if invisible or covered by `display' - (show (and (htmlize-decode-invisibility-spec - (get-char-property form-feed-pos 'invisible)) - (not (get-char-property form-feed-pos 'display))))) - (when show - (htmlize-make-tmp-overlay beg end disp))))))) - -(defun htmlize-defang-local-variables () - ;; Juri Linkov reports that an HTML-ized "Local variables" can lead - ;; visiting the HTML to fail with "Local variables list is not - ;; properly terminated". He suggested changing the phrase to - ;; syntactically equivalent HTML that Emacs doesn't recognize. - (goto-char (point-min)) - (while (search-forward "Local Variables:" nil t) - (replace-match "Local Variables:" nil t))) - - -;;; Color handling. - -(defvar htmlize-x-library-search-path - `(,data-directory - "/etc/X11/rgb.txt" - "/usr/share/X11/rgb.txt" - ;; the remainder of this list really belongs in a museum - "/usr/X11R6/lib/X11/" - "/usr/X11R5/lib/X11/" - "/usr/lib/X11R6/X11/" - "/usr/lib/X11R5/X11/" - "/usr/local/X11R6/lib/X11/" - "/usr/local/X11R5/lib/X11/" - "/usr/local/lib/X11R6/X11/" - "/usr/local/lib/X11R5/X11/" - "/usr/X11/lib/X11/" - "/usr/lib/X11/" - "/usr/local/lib/X11/" - "/usr/X386/lib/X11/" - "/usr/x386/lib/X11/" - "/usr/XFree86/lib/X11/" - "/usr/unsupported/lib/X11/" - "/usr/athena/lib/X11/" - "/usr/local/x11r5/lib/X11/" - "/usr/lpp/Xamples/lib/X11/" - "/usr/openwin/lib/X11/" - "/usr/openwin/share/lib/X11/")) - -(defun htmlize-get-color-rgb-hash (&optional rgb-file) - "Return a hash table mapping X color names to RGB values. -The keys in the hash table are X11 color names, and the values are the -#rrggbb RGB specifications, extracted from `rgb.txt'. - -If RGB-FILE is nil, the function will try hard to find a suitable file -in the system directories. - -If no rgb.txt file is found, return nil." - (let ((rgb-file (or rgb-file (locate-file - "rgb.txt" - htmlize-x-library-search-path))) - (hash nil)) - (when rgb-file - (with-temp-buffer - (insert-file-contents rgb-file) - (setq hash (make-hash-table :test 'equal)) - (while (not (eobp)) - (cond ((looking-at "^\\s-*\\([!#]\\|$\\)") - ;; Skip comments and empty lines. - ) - ((looking-at - "[ \t]*\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\([0-9]+\\)[ \t]+\\(.*\\)") - (setf (gethash (downcase (match-string 4)) hash) - (format "#%02x%02x%02x" - (string-to-number (match-string 1)) - (string-to-number (match-string 2)) - (string-to-number (match-string 3))))) - (t - (error - "Unrecognized line in %s: %s" - rgb-file - (buffer-substring (point) (progn (end-of-line) (point)))))) - (forward-line 1)))) - hash)) - -;; Compile the RGB map when loaded. On systems where rgb.txt is -;; missing, the value of the variable will be nil, and rgb.txt will -;; not be used. -(defvar htmlize-color-rgb-hash (htmlize-get-color-rgb-hash)) - -;;; Face handling. - -(defun htmlize-face-color-internal (face fg) - ;; Used only under GNU Emacs. Return the color of FACE, but don't - ;; return "unspecified-fg" or "unspecified-bg". If the face is - ;; `default' and the color is unspecified, look up the color in - ;; frame parameters. - (let* ((function (if fg #'face-foreground #'face-background)) - (color (funcall function face nil t))) - (when (and (eq face 'default) (null color)) - (setq color (cdr (assq (if fg 'foreground-color 'background-color) - (frame-parameters))))) - (when (or (eq color 'unspecified) - (equal color "unspecified-fg") - (equal color "unspecified-bg")) - (setq color nil)) - (when (and (eq face 'default) - (null color)) - ;; Assuming black on white doesn't seem right, but I can't think - ;; of anything better to do. - (setq color (if fg "black" "white"))) - color)) - -(defun htmlize-face-foreground (face) - ;; Return the name of the foreground color of FACE. If FACE does - ;; not specify a foreground color, return nil. - (htmlize-face-color-internal face t)) - -(defun htmlize-face-background (face) - ;; Return the name of the background color of FACE. If FACE does - ;; not specify a background color, return nil. - ;; GNU Emacs. - (htmlize-face-color-internal face nil)) - -;; Convert COLOR to the #RRGGBB string. If COLOR is already in that -;; format, it's left unchanged. - -(defun htmlize-color-to-rgb (color) - (let ((rgb-string nil)) - (cond ((null color) - ;; Ignore nil COLOR because it means that the face is not - ;; specifying any color. Hence (htmlize-color-to-rgb nil) - ;; returns nil. - ) - ((string-match "\\`#" color) - ;; The color is already in #rrggbb format. - (setq rgb-string color)) - ((and htmlize-use-rgb-txt - htmlize-color-rgb-hash) - ;; Use of rgb.txt is requested, and it's available on the - ;; system. Use it. - (setq rgb-string (gethash (downcase color) htmlize-color-rgb-hash))) - (t - ;; We're getting the RGB components from Emacs. - (let ((rgb (mapcar (lambda (arg) - (/ arg 256)) - (color-values color)))) - (when rgb - (setq rgb-string (apply #'format "#%02x%02x%02x" rgb)))))) - ;; If RGB-STRING is still nil, it means the color cannot be found, - ;; for whatever reason. In that case just punt and return COLOR. - ;; Most browsers support a decent set of color names anyway. - (or rgb-string color))) - -;; We store the face properties we care about into an -;; `htmlize-fstruct' type. That way we only have to analyze face -;; properties, which can be time consuming, once per each face. The -;; mapping between Emacs faces and htmlize-fstructs is established by -;; htmlize-make-face-map. The name "fstruct" refers to variables of -;; type `htmlize-fstruct', while the term "face" is reserved for Emacs -;; faces. - -(defstruct htmlize-fstruct - foreground ; foreground color, #rrggbb - background ; background color, #rrggbb - size ; size - boldp ; whether face is bold - italicp ; whether face is italic - underlinep ; whether face is underlined - overlinep ; whether face is overlined - strikep ; whether face is struck through - css-name ; CSS name of face - ) - -(defun htmlize-face-set-from-keyword-attr (fstruct attr value) - ;; For ATTR and VALUE, set the equivalent value in FSTRUCT. - (case attr - (:foreground - (setf (htmlize-fstruct-foreground fstruct) (htmlize-color-to-rgb value))) - (:background - (setf (htmlize-fstruct-background fstruct) (htmlize-color-to-rgb value))) - (:height - (setf (htmlize-fstruct-size fstruct) value)) - (:weight - (when (string-match (symbol-name value) "bold") - (setf (htmlize-fstruct-boldp fstruct) t))) - (:slant - (setf (htmlize-fstruct-italicp fstruct) (or (eq value 'italic) - (eq value 'oblique)))) - (:bold - (setf (htmlize-fstruct-boldp fstruct) value)) - (:italic - (setf (htmlize-fstruct-italicp fstruct) value)) - (:underline - (setf (htmlize-fstruct-underlinep fstruct) value)) - (:overline - (setf (htmlize-fstruct-overlinep fstruct) value)) - (:strike-through - (setf (htmlize-fstruct-strikep fstruct) value)))) - -(defun htmlize-face-size (face) - ;; The size (height) of FACE, taking inheritance into account. - ;; Only works in Emacs 21 and later. - (let* ((face-list (list face)) - (head face-list) - (tail face-list)) - (while head - (let ((inherit (face-attribute (car head) :inherit))) - (cond ((listp inherit) - (setcdr tail (copy-list inherit)) - (setq tail (last tail))) - ((eq inherit 'unspecified)) - (t - (setcdr tail (list inherit)) - (setq tail (cdr tail))))) - (pop head)) - (let ((size-list - (loop - for f in face-list - for h = (face-attribute f :height) - collect (if (eq h 'unspecified) nil h)))) - (reduce 'htmlize-merge-size (cons nil size-list))))) - -(defun htmlize-face-css-name (face) - ;; Generate the css-name property for the given face. Emacs places - ;; no restrictions on the names of symbols that represent faces -- - ;; any characters may be in the name, even control chars. We try - ;; hard to beat the face name into shape, both esthetically and - ;; according to CSS1 specs. - (let ((name (downcase (symbol-name face)))) - (when (string-match "\\`font-lock-" name) - ;; font-lock-FOO-face -> FOO. - (setq name (replace-match "" t t name))) - (when (string-match "-face\\'" name) - ;; Drop the redundant "-face" suffix. - (setq name (replace-match "" t t name))) - (while (string-match "[^-a-zA-Z0-9]" name) - ;; Drop the non-alphanumerics. - (setq name (replace-match "X" t t name))) - (when (string-match "\\`[-0-9]" name) - ;; CSS identifiers may not start with a digit. - (setq name (concat "X" name))) - ;; After these transformations, the face could come out empty. - (when (equal name "") - (setq name "face")) - ;; Apply the prefix. - (concat htmlize-css-name-prefix name))) - -(defun htmlize-face-to-fstruct-1 (face) - "Convert Emacs face FACE to fstruct, internal." - (let ((fstruct (make-htmlize-fstruct - :foreground (htmlize-color-to-rgb - (htmlize-face-foreground face)) - :background (htmlize-color-to-rgb - (htmlize-face-background face))))) - ;; GNU Emacs - (dolist (attr '(:weight :slant :underline :overline :strike-through)) - (let ((value (face-attribute face attr nil t))) - (when (and value (not (eq value 'unspecified))) - (htmlize-face-set-from-keyword-attr fstruct attr value)))) - (let ((size (htmlize-face-size face))) - (unless (eql size 1.0) ; ignore non-spec - (setf (htmlize-fstruct-size fstruct) size))) - (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face)) - fstruct)) - -(defun htmlize-face-to-fstruct (face) - (let* ((face-list (or (and (symbolp face) - (cdr (assq face face-remapping-alist))) - (list face))) - (fstruct (htmlize-merge-faces - (mapcar (lambda (face) - (if (symbolp face) - (or (htmlize-get-override-fstruct face) - (htmlize-face-to-fstruct-1 face)) - (htmlize-attrlist-to-fstruct face))) - (nreverse face-list))))) - (when (symbolp face) - (setf (htmlize-fstruct-css-name fstruct) (htmlize-face-css-name face))) - fstruct)) - -(defmacro htmlize-copy-attr-if-set (attr-list dest source) - ;; Generate code with the following pattern: - ;; (progn - ;; (when (htmlize-fstruct-ATTR source) - ;; (setf (htmlize-fstruct-ATTR dest) (htmlize-fstruct-ATTR source))) - ;; ...) - ;; for the given list of boolean attributes. - (cons 'progn - (loop for attr in attr-list - for attr-sym = (intern (format "htmlize-fstruct-%s" attr)) - collect `(when (,attr-sym ,source) - (setf (,attr-sym ,dest) (,attr-sym ,source)))))) - -(defun htmlize-merge-size (merged next) - ;; Calculate the size of the merge of MERGED and NEXT. - (cond ((null merged) next) - ((integerp next) next) - ((null next) merged) - ((floatp merged) (* merged next)) - ((integerp merged) (round (* merged next))))) - -(defun htmlize-merge-two-faces (merged next) - (htmlize-copy-attr-if-set - (foreground background boldp italicp underlinep overlinep strikep) - merged next) - (setf (htmlize-fstruct-size merged) - (htmlize-merge-size (htmlize-fstruct-size merged) - (htmlize-fstruct-size next))) - merged) - -(defun htmlize-merge-faces (fstruct-list) - (cond ((null fstruct-list) - ;; Nothing to do, return a dummy face. - (make-htmlize-fstruct)) - ((null (cdr fstruct-list)) - ;; Optimize for the common case of a single face, simply - ;; return it. - (car fstruct-list)) - (t - (reduce #'htmlize-merge-two-faces - (cons (make-htmlize-fstruct) fstruct-list))))) - -;; GNU Emacs 20+ supports attribute lists in `face' properties. For -;; example, you can use `(:foreground "red" :weight bold)' as an -;; overlay's "face", or you can even use a list of such lists, etc. -;; We call those "attrlists". -;; -;; htmlize supports attrlist by converting them to fstructs, the same -;; as with regular faces. - -(defun htmlize-attrlist-to-fstruct (attrlist &optional name) - ;; Like htmlize-face-to-fstruct, but accepts an ATTRLIST as input. - (let ((fstruct (make-htmlize-fstruct))) - (cond ((eq (car attrlist) 'foreground-color) - ;; ATTRLIST is (foreground-color . COLOR) - (setf (htmlize-fstruct-foreground fstruct) - (htmlize-color-to-rgb (cdr attrlist)))) - ((eq (car attrlist) 'background-color) - ;; ATTRLIST is (background-color . COLOR) - (setf (htmlize-fstruct-background fstruct) - (htmlize-color-to-rgb (cdr attrlist)))) - (t - ;; ATTRLIST is a plist. - (while attrlist - (let ((attr (pop attrlist)) - (value (pop attrlist))) - (when (and value (not (eq value 'unspecified))) - (htmlize-face-set-from-keyword-attr fstruct attr value)))))) - (setf (htmlize-fstruct-css-name fstruct) (or name "custom")) - fstruct)) - -(defun htmlize-decode-face-prop (prop) - "Turn face property PROP into a list of face-like objects." - ;; PROP can be a symbol naming a face, a string naming such a - ;; symbol, a cons (foreground-color . COLOR) or (background-color - ;; COLOR), a property list (:attr1 val1 :attr2 val2 ...), or a list - ;; of any of those. - ;; - ;; (htmlize-decode-face-prop 'face) -> (face) - ;; (htmlize-decode-face-prop '(face1 face2)) -> (face1 face2) - ;; (htmlize-decode-face-prop '(:attr "val")) -> ((:attr "val")) - ;; (htmlize-decode-face-prop '((:attr "val") face (foreground-color "red"))) - ;; -> ((:attr "val") face (foreground-color "red")) - ;; - ;; Unrecognized atoms or non-face symbols/strings are silently - ;; stripped away. - (cond ((null prop) - nil) - ((symbolp prop) - (and (facep prop) - (list prop))) - ((stringp prop) - (and (facep (intern-soft prop)) - (list prop))) - ((atom prop) - nil) - ((and (symbolp (car prop)) - (eq ?: (aref (symbol-name (car prop)) 0))) - (list prop)) - ((or (eq (car prop) 'foreground-color) - (eq (car prop) 'background-color)) - (list prop)) - (t - (apply #'nconc (mapcar #'htmlize-decode-face-prop prop))))) - -(defun htmlize-get-override-fstruct (face) - (let* ((raw-def (plist-get htmlize-face-overrides face)) - (def (cond ((stringp raw-def) (list :foreground raw-def)) - ((listp raw-def) raw-def) - (t - (error (format (concat "face override must be an " - "attribute list or string, got %s") - raw-def)))))) - (and def - (htmlize-attrlist-to-fstruct def (symbol-name face))))) - -(defun htmlize-make-face-map (faces) - ;; Return a hash table mapping Emacs faces to htmlize's fstructs. - ;; The keys are either face symbols or attrlists, so the test - ;; function must be `equal'. - (let ((face-map (make-hash-table :test 'equal)) - css-names) - (dolist (face faces) - (unless (gethash face face-map) - ;; Haven't seen FACE yet; convert it to an fstruct and cache - ;; it. - (let ((fstruct (htmlize-face-to-fstruct face))) - (setf (gethash face face-map) fstruct) - (let* ((css-name (htmlize-fstruct-css-name fstruct)) - (new-name css-name) - (i 0)) - ;; Uniquify the face's css-name by using NAME-1, NAME-2, - ;; etc. - (while (member new-name css-names) - (setq new-name (format "%s-%s" css-name (incf i)))) - (unless (equal new-name css-name) - (setf (htmlize-fstruct-css-name fstruct) new-name)) - (push new-name css-names))))) - face-map)) - -(defun htmlize-unstringify-face (face) - "If FACE is a string, return it interned, otherwise return it unchanged." - (if (stringp face) - (intern face) - face)) - -(defun htmlize-faces-in-buffer () - "Return a list of faces used in the current buffer. -This is the set of faces specified by the `face' text property and by buffer -overlays that specify `face'." - (let (faces) - ;; Faces used by text properties. - (let ((pos (point-min)) face-prop next) - (while (< pos (point-max)) - (setq face-prop (get-text-property pos 'face) - next (or (next-single-property-change pos 'face) (point-max))) - (setq faces (nunion (htmlize-decode-face-prop face-prop) - faces :test 'equal)) - (setq pos next))) - ;; Faces used by overlays. - (dolist (overlay (overlays-in (point-min) (point-max))) - (let ((face-prop (overlay-get overlay 'face))) - (setq faces (nunion (htmlize-decode-face-prop face-prop) - faces :test 'equal)))) - faces)) - -(if (>= emacs-major-version 25) - (defun htmlize-sorted-overlays-at (pos) - (overlays-at pos t)) - - (defun htmlize-sorted-overlays-at (pos) - ;; Like OVERLAYS-AT with the SORTED argument, for older Emacsen. - (let ((overlays (overlays-at pos))) - (setq overlays (sort* overlays #'< - :key (lambda (o) - (- (overlay-end o) (overlay-start o))))) - (setq overlays - (stable-sort overlays #'< - :key (lambda (o) - (let ((prio (overlay-get o 'priority))) - (if (numberp prio) prio 0))))) - (nreverse overlays)))) - - -;; htmlize-faces-at-point returns the faces in use at point. The -;; faces are sorted by increasing priority, i.e. the last face takes -;; precedence. -;; -;; This returns all the faces in the `face' property and all the faces -;; in the overlays at point. - -(defun htmlize-faces-at-point () - (let (all-faces) - ;; Faces from text properties. - (let ((face-prop (get-text-property (point) 'face))) - ;; we need to reverse the `face' prop because we want - ;; more specific faces to come later - (setq all-faces (nreverse (htmlize-decode-face-prop face-prop)))) - ;; Faces from overlays. - (let ((overlays - ;; Collect overlays at point that specify `face'. - (delete-if-not (lambda (o) - (overlay-get o 'face)) - (nreverse (htmlize-sorted-overlays-at (point))))) - list face-prop) - (dolist (overlay overlays) - (setq face-prop (overlay-get overlay 'face) - list (nconc (htmlize-decode-face-prop face-prop) list))) - ;; Under "Merging Faces" the manual explicitly states - ;; that faces specified by overlays take precedence over - ;; faces specified by text properties. - (setq all-faces (nconc all-faces list))) - all-faces)) - -;; htmlize supports generating HTML in several flavors, some of which -;; use CSS, and others the element. We take an OO approach and -;; define "methods" that indirect to the functions that depend on -;; `htmlize-output-type'. The currently used methods are `doctype', -;; `insert-head', `body-tag', `pre-tag', and `text-markup'. Not all -;; output types define all methods. -;; -;; Methods are called either with (htmlize-method METHOD ARGS...) -;; special form, or by accessing the function with -;; (htmlize-method-function 'METHOD) and calling (funcall FUNCTION). -;; The latter form is useful in tight loops because `htmlize-method' -;; conses. - -(defmacro htmlize-method (method &rest args) - ;; Expand to (htmlize-TYPE-METHOD ...ARGS...). TYPE is the value of - ;; `htmlize-output-type' at run time. - `(funcall (htmlize-method-function ',method) ,@args)) - -(defun htmlize-method-function (method) - ;; Return METHOD's function definition for the current output type. - ;; The returned object can be safely funcalled. - (let ((sym (intern (format "htmlize-%s-%s" htmlize-output-type method)))) - (indirect-function (if (fboundp sym) - sym - (let ((default (intern (concat "htmlize-default-" - (symbol-name method))))) - (if (fboundp default) - default - 'ignore)))))) - -(defvar htmlize-memoization-table (make-hash-table :test 'equal)) - -(defmacro htmlize-memoize (key generator) - "Return the value of GENERATOR, memoized as KEY. -That means that GENERATOR will be evaluated and returned the first time -it's called with the same value of KEY. All other times, the cached -\(memoized) value will be returned." - (let ((value (gensym))) - `(let ((,value (gethash ,key htmlize-memoization-table))) - (unless ,value - (setq ,value ,generator) - (setf (gethash ,key htmlize-memoization-table) ,value)) - ,value))) - -;;; Default methods. - -(defun htmlize-default-doctype () - nil ; no doc-string - ;; Note that the `font' output is technically invalid under this DTD - ;; because the DTD doesn't allow embedding in
    .
    -  ""
    -  )
    -
    -(defun htmlize-default-body-tag (face-map)
    -  nil					; no doc-string
    -  face-map ; shut up the byte-compiler
    -  "")
    -
    -(defun htmlize-default-pre-tag (face-map)
    -  nil					; no doc-string
    -  face-map ; shut up the byte-compiler
    -  "
    ")
    -
    -
    -;;; CSS based output support.
    -
    -;; Internal function; not a method.
    -(defun htmlize-css-specs (fstruct)
    -  (let (result)
    -    (when (htmlize-fstruct-foreground fstruct)
    -      (push (format "color: %s;" (htmlize-fstruct-foreground fstruct))
    -	    result))
    -    (when (htmlize-fstruct-background fstruct)
    -      (push (format "background-color: %s;"
    -		    (htmlize-fstruct-background fstruct))
    -	    result))
    -    (let ((size (htmlize-fstruct-size fstruct)))
    -      (when (and size (not (eq htmlize-ignore-face-size t)))
    -	(cond ((floatp size)
    -	       (push (format "font-size: %d%%;" (* 100 size)) result))
    -	      ((not (eq htmlize-ignore-face-size 'absolute))
    -	       (push (format "font-size: %spt;" (/ size 10.0)) result)))))
    -    (when (htmlize-fstruct-boldp fstruct)
    -      (push "font-weight: bold;" result))
    -    (when (htmlize-fstruct-italicp fstruct)
    -      (push "font-style: italic;" result))
    -    (when (htmlize-fstruct-underlinep fstruct)
    -      (push "text-decoration: underline;" result))
    -    (when (htmlize-fstruct-overlinep fstruct)
    -      (push "text-decoration: overline;" result))
    -    (when (htmlize-fstruct-strikep fstruct)
    -      (push "text-decoration: line-through;" result))
    -    (nreverse result)))
    -
    -(defun htmlize-css-insert-head (buffer-faces face-map)
    -  (insert "    \n"))
    -
    -(defun htmlize-css-text-markup (fstruct-list buffer)
    -  ;; Open the markup needed to insert text colored with FACES into
    -  ;; BUFFER.  Return the function that closes the markup.
    -
    -  ;; In CSS mode, this is easy: just nest the text in one  tag for each face in FSTRUCT-LIST.
    -  (dolist (fstruct fstruct-list)
    -    (princ "" buffer))
    -  (htmlize-lexlet ((fstruct-list fstruct-list) (buffer buffer))
    -    (lambda ()
    -      (dolist (fstruct fstruct-list)
    -        (ignore fstruct)                ; shut up the byte-compiler
    -        (princ "" buffer)))))
    -
    -;; `inline-css' output support.
    -
    -(defun htmlize-inline-css-body-tag (face-map)
    -  (format ""
    -	  (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    -		     " ")))
    -
    -(defun htmlize-inline-css-pre-tag (face-map)
    -  (if htmlize-pre-style
    -      (format "
    "
    -              (mapconcat #'identity (htmlize-css-specs (gethash 'default face-map))
    -                         " "))
    -    (format "
    ")))
    -
    -(defun htmlize-inline-css-text-markup (fstruct-list buffer)
    -  (let* ((merged (htmlize-merge-faces fstruct-list))
    -	 (style (htmlize-memoize
    -		 merged
    -		 (let ((specs (htmlize-css-specs merged)))
    -		   (and specs
    -			(mapconcat #'identity (htmlize-css-specs merged) " "))))))
    -    (when style
    -      (princ "" buffer))
    -    (htmlize-lexlet ((style style) (buffer buffer))
    -      (lambda ()
    -        (when style
    -          (princ "" buffer))))))
    -
    -;;; `font' tag based output support.
    -
    -(defun htmlize-font-body-tag (face-map)
    -  (let ((fstruct (gethash 'default face-map)))
    -    (format ""
    -	    (htmlize-fstruct-foreground fstruct)
    -	    (htmlize-fstruct-background fstruct))))
    -
    -(defun htmlize-font-pre-tag (face-map)
    -  (if htmlize-pre-style
    -      (let ((fstruct (gethash 'default face-map)))
    -        (format "
    "
    -                (htmlize-fstruct-foreground fstruct)
    -                (htmlize-fstruct-background fstruct)))
    -    (format "
    ")))
    -       
    -(defun htmlize-font-text-markup (fstruct-list buffer)
    -  ;; In `font' mode, we use the traditional HTML means of altering
    -  ;; presentation:  tag for colors,  for bold,  for
    -  ;; underline, and  for strike-through.
    -  (let* ((merged (htmlize-merge-faces fstruct-list))
    -	 (markup (htmlize-memoize
    -		  merged
    -		  (cons (concat
    -			 (and (htmlize-fstruct-foreground merged)
    -			      (format "" (htmlize-fstruct-foreground merged)))
    -			 (and (htmlize-fstruct-boldp merged)      "")
    -			 (and (htmlize-fstruct-italicp merged)    "")
    -			 (and (htmlize-fstruct-underlinep merged) "")
    -			 (and (htmlize-fstruct-strikep merged)    ""))
    -			(concat
    -			 (and (htmlize-fstruct-strikep merged)    "")
    -			 (and (htmlize-fstruct-underlinep merged) "")
    -			 (and (htmlize-fstruct-italicp merged)    "")
    -			 (and (htmlize-fstruct-boldp merged)      "")
    -			 (and (htmlize-fstruct-foreground merged) ""))))))
    -    (princ (car markup) buffer)
    -    (htmlize-lexlet ((markup markup) (buffer buffer))
    -      (lambda ()
    -        (princ (cdr markup) buffer)))))
    -
    -(defun htmlize-buffer-1 ()
    -  ;; Internal function; don't call it from outside this file.  Htmlize
    -  ;; current buffer, writing the resulting HTML to a new buffer, and
    -  ;; return it.  Unlike htmlize-buffer, this doesn't change current
    -  ;; buffer or use switch-to-buffer.
    -  (save-excursion
    -    ;; Protect against the hook changing the current buffer.
    -    (save-excursion
    -      (run-hooks 'htmlize-before-hook))
    -    ;; Convince font-lock support modes to fontify the entire buffer
    -    ;; in advance.
    -    (htmlize-ensure-fontified)
    -    (clrhash htmlize-extended-character-cache)
    -    (clrhash htmlize-memoization-table)
    -    ;; It's important that the new buffer inherits default-directory
    -    ;; from the current buffer.
    -    (let ((htmlbuf (generate-new-buffer (if (buffer-file-name)
    -                                            (htmlize-make-file-name
    -                                             (file-name-nondirectory
    -                                              (buffer-file-name)))
    -                                          "*html*")))
    -          (completed nil))
    -      (unwind-protect
    -          (let* ((buffer-faces (htmlize-faces-in-buffer))
    -                 (face-map (htmlize-make-face-map (adjoin 'default buffer-faces)))
    -                 (places (gensym))
    -                 (title (if (buffer-file-name)
    -                            (file-name-nondirectory (buffer-file-name))
    -                          (buffer-name))))
    -            (when htmlize-generate-hyperlinks
    -              (htmlize-create-auto-links))
    -            (when htmlize-replace-form-feeds
    -              (htmlize-shadow-form-feeds))
    -
    -            ;; Initialize HTMLBUF and insert the HTML prolog.
    -            (with-current-buffer htmlbuf
    -              (buffer-disable-undo)
    -              (insert (htmlize-method doctype) ?\n
    -                      (format "\n"
    -                              htmlize-version htmlize-output-type)
    -                      "\n  ")
    -              (put places 'head-start (point-marker))
    -              (insert "\n"
    -                      "    " (htmlize-protect-string title) "\n"
    -                      (if htmlize-html-charset
    -                          (format (concat "    \n")
    -                                  htmlize-html-charset)
    -                        "")
    -                      htmlize-head-tags)
    -              (htmlize-method insert-head buffer-faces face-map)
    -              (insert "  ")
    -              (put places 'head-end (point-marker))
    -              (insert "\n  ")
    -              (put places 'body-start (point-marker))
    -              (insert (htmlize-method body-tag face-map)
    -                      "\n    ")
    -              (put places 'content-start (point-marker))
    -              (insert (htmlize-method pre-tag face-map) "\n"))
    -            (let ((text-markup
    -                   ;; Get the inserter method, so we can funcall it inside
    -                   ;; the loop.  Not calling `htmlize-method' in the loop
    -                   ;; body yields a measurable speed increase.
    -                   (htmlize-method-function 'text-markup))
    -                  ;; Declare variables used in loop body outside the loop
    -                  ;; because it's faster to establish `let' bindings only
    -                  ;; once.
    -                  next-change text face-list trailing-ellipsis
    -                  fstruct-list last-fstruct-list
    -                  (close-markup (lambda ())))
    -              ;; This loop traverses and reads the source buffer, appending
    -              ;; the resulting HTML to HTMLBUF.  This method is fast
    -              ;; because: 1) it doesn't require examining the text
    -              ;; properties char by char (htmlize-next-face-change is used
    -              ;; to move between runs with the same face), and 2) it doesn't
    -              ;; require frequent buffer switches, which are slow because
    -              ;; they rebind all buffer-local vars.
    -              (goto-char (point-min))
    -              (while (not (eobp))
    -                (setq next-change (htmlize-next-face-change (point)))
    -                ;; Get faces in use between (point) and NEXT-CHANGE, and
    -                ;; convert them to fstructs.
    -                (setq face-list (htmlize-faces-at-point)
    -                      fstruct-list (delq nil (mapcar (lambda (f)
    -                                                       (gethash f face-map))
    -                                                     face-list)))
    -                (multiple-value-setq (text trailing-ellipsis)
    -                  (htmlize-extract-text (point) next-change trailing-ellipsis))
    -                ;; Don't bother writing anything if there's no text (this
    -                ;; happens in invisible regions).
    -                (when (> (length text) 0)
    -                  ;; Open the new markup if necessary and insert the text.
    -                  (when (not (equalp fstruct-list last-fstruct-list))
    -                    (funcall close-markup)
    -                    (setq last-fstruct-list fstruct-list
    -                          close-markup (funcall text-markup fstruct-list htmlbuf)))
    -                  (princ text htmlbuf))
    -                (goto-char next-change))
    -
    -              ;; We've gone through the buffer; close the markup from
    -              ;; the last run, if any.
    -              (funcall close-markup))
    -
    -            ;; Insert the epilog and post-process the buffer.
    -            (with-current-buffer htmlbuf
    -              (insert "
    ") - (put places 'content-end (point-marker)) - (insert "\n ") - (put places 'body-end (point-marker)) - (insert "\n\n") - (htmlize-defang-local-variables) - (goto-char (point-min)) - (when htmlize-html-major-mode - ;; What sucks about this is that the minor modes, most notably - ;; font-lock-mode, won't be initialized. Oh well. - (funcall htmlize-html-major-mode)) - (set (make-local-variable 'htmlize-buffer-places) - (symbol-plist places)) - (run-hooks 'htmlize-after-hook) - (buffer-enable-undo)) - (setq completed t) - htmlbuf) - - (when (not completed) - (kill-buffer htmlbuf)) - (htmlize-delete-tmp-overlays))))) - -;; Utility functions. - -(defmacro htmlize-with-fontify-message (&rest body) - ;; When forcing fontification of large buffers in - ;; htmlize-ensure-fontified, inform the user that he is waiting for - ;; font-lock, not for htmlize to finish. - `(progn - (if (> (buffer-size) 65536) - (message "Forcing fontification of %s..." - (buffer-name (current-buffer)))) - ,@body - (if (> (buffer-size) 65536) - (message "Forcing fontification of %s...done" - (buffer-name (current-buffer)))))) - -(defun htmlize-ensure-fontified () - ;; If font-lock is being used, ensure that the "support" modes - ;; actually fontify the buffer. If font-lock is not in use, we - ;; don't care because, except in htmlize-file, we don't force - ;; font-lock on the user. - (when font-lock-mode - ;; In part taken from ps-print-ensure-fontified in GNU Emacs 21. - (when (and (boundp 'jit-lock-mode) - (symbol-value 'jit-lock-mode)) - (htmlize-with-fontify-message - (jit-lock-fontify-now (point-min) (point-max)))) - - (if (fboundp 'font-lock-ensure) - (font-lock-ensure) - ;; Emacs prior to 25.1 - (with-no-warnings - (font-lock-mode 1) - (font-lock-fontify-buffer))))) - - -;;;###autoload -(defun htmlize-buffer (&optional buffer) - "Convert BUFFER to HTML, preserving colors and decorations. - -The generated HTML is available in a new buffer, which is returned. -When invoked interactively, the new buffer is selected in the current -window. The title of the generated document will be set to the buffer's -file name or, if that's not available, to the buffer's name. - -Note that htmlize doesn't fontify your buffers, it only uses the -decorations that are already present. If you don't set up font-lock or -something else to fontify your buffers, the resulting HTML will be -plain. Likewise, if you don't like the choice of colors, fix the mode -that created them, or simply alter the faces it uses." - (interactive) - (let ((htmlbuf (with-current-buffer (or buffer (current-buffer)) - (htmlize-buffer-1)))) - (when (interactive-p) - (switch-to-buffer htmlbuf)) - htmlbuf)) - -;;;###autoload -(defun htmlize-region (beg end) - "Convert the region to HTML, preserving colors and decorations. -See `htmlize-buffer' for details." - (interactive "r") - ;; Don't let zmacs region highlighting end up in HTML. - (when (fboundp 'zmacs-deactivate-region) - (zmacs-deactivate-region)) - (let ((htmlbuf (save-restriction - (narrow-to-region beg end) - (htmlize-buffer-1)))) - (when (interactive-p) - (switch-to-buffer htmlbuf)) - htmlbuf)) - -(defun htmlize-region-for-paste (beg end) - "Htmlize the region and return just the HTML as a string. -This forces the `inline-css' style and only returns the HTML body, -but without the BODY tag. This should make it useful for inserting -the text to another HTML buffer." - (let* ((htmlize-output-type 'inline-css) - (htmlbuf (htmlize-region beg end))) - (unwind-protect - (with-current-buffer htmlbuf - (buffer-substring (plist-get htmlize-buffer-places 'content-start) - (plist-get htmlize-buffer-places 'content-end))) - (kill-buffer htmlbuf)))) - -(defun htmlize-region-save-screenshot (beg end) - "Save the htmlized (see `htmlize-region-for-paste') region in -the kill ring. Uses `inline-css', with style information in -`
    ' tags, so that the rendering of the marked up text
    -approximates the buffer as closely as possible."
    -  (interactive "r")
    -  (let ((htmlize-pre-style t))
    -    (kill-new (htmlize-region-for-paste beg end)))
    -  (deactivate-mark))
    -
    -(defun htmlize-make-file-name (file)
    -  "Make an HTML file name from FILE.
    -
    -In its default implementation, this simply appends `.html' to FILE.
    -This function is called by htmlize to create the buffer file name, and
    -by `htmlize-file' to create the target file name.
    -
    -More elaborate transformations are conceivable, such as changing FILE's
    -extension to `.html' (\"file.c\" -> \"file.html\").  If you want them,
    -overload this function to do it and htmlize will comply."
    -  (concat file ".html"))
    -
    -;; Older implementation of htmlize-make-file-name that changes FILE's
    -;; extension to ".html".
    -;(defun htmlize-make-file-name (file)
    -;  (let ((extension (file-name-extension file))
    -;	(sans-extension (file-name-sans-extension file)))
    -;    (if (or (equal extension "html")
    -;	    (equal extension "htm")
    -;	    (equal sans-extension ""))
    -;	(concat file ".html")
    -;      (concat sans-extension ".html"))))
    -
    -;;;###autoload
    -(defun htmlize-file (file &optional target)
    -  "Load FILE, fontify it, convert it to HTML, and save the result.
    -
    -Contents of FILE are inserted into a temporary buffer, whose major mode
    -is set with `normal-mode' as appropriate for the file type.  The buffer
    -is subsequently fontified with `font-lock' and converted to HTML.  Note
    -that, unlike `htmlize-buffer', this function explicitly turns on
    -font-lock.  If a form of highlighting other than font-lock is desired,
    -please use `htmlize-buffer' directly on buffers so highlighted.
    -
    -Buffers currently visiting FILE are unaffected by this function.  The
    -function does not change current buffer or move the point.
    -
    -If TARGET is specified and names a directory, the resulting file will be
    -saved there instead of to FILE's directory.  If TARGET is specified and
    -does not name a directory, it will be used as output file name."
    -  (interactive (list (read-file-name
    -		      "HTML-ize file: "
    -		      nil nil nil (and (buffer-file-name)
    -				       (file-name-nondirectory
    -					(buffer-file-name))))))
    -  (let ((output-file (if (and target (not (file-directory-p target)))
    -			 target
    -		       (expand-file-name
    -			(htmlize-make-file-name (file-name-nondirectory file))
    -			(or target (file-name-directory file)))))
    -	;; Try to prevent `find-file-noselect' from triggering
    -	;; font-lock because we'll fontify explicitly below.
    -	(font-lock-mode nil)
    -	(font-lock-auto-fontify nil)
    -	(global-font-lock-mode nil)
    -	;; Ignore the size limit for the purposes of htmlization.
    -	(font-lock-maximum-size nil))
    -    (with-temp-buffer
    -      ;; Insert FILE into the temporary buffer.
    -      (insert-file-contents file)
    -      ;; Set the file name so normal-mode and htmlize-buffer-1 pick it
    -      ;; up.  Restore it afterwards so with-temp-buffer's kill-buffer
    -      ;; doesn't complain about killing a modified buffer.
    -      (let ((buffer-file-name file))
    -	;; Set the major mode for the sake of font-lock.
    -	(normal-mode)
    -	;; htmlize the buffer and save the HTML.
    -	(with-current-buffer (htmlize-buffer-1)
    -	  (unwind-protect
    -	      (progn
    -		(run-hooks 'htmlize-file-hook)
    -		(write-region (point-min) (point-max) output-file))
    -	    (kill-buffer (current-buffer)))))))
    -  ;; I haven't decided on a useful return value yet, so just return
    -  ;; nil.
    -  nil)
    -
    -;;;###autoload
    -(defun htmlize-many-files (files &optional target-directory)
    -  "Convert FILES to HTML and save the corresponding HTML versions.
    -
    -FILES should be a list of file names to convert.  This function calls
    -`htmlize-file' on each file; see that function for details.  When
    -invoked interactively, you are prompted for a list of files to convert,
    -terminated with RET.
    -
    -If TARGET-DIRECTORY is specified, the HTML files will be saved to that
    -directory.  Normally, each HTML file is saved to the directory of the
    -corresponding source file."
    -  (interactive
    -   (list
    -    (let (list file)
    -      ;; Use empty string as DEFAULT because setting DEFAULT to nil
    -      ;; defaults to the directory name, which is not what we want.
    -      (while (not (equal (setq file (read-file-name
    -				     "HTML-ize file (RET to finish): "
    -				     (and list (file-name-directory
    -						(car list)))
    -				     "" t))
    -			 ""))
    -	(push file list))
    -      (nreverse list))))
    -  ;; Verify that TARGET-DIRECTORY is indeed a directory.  If it's a
    -  ;; file, htmlize-file will use it as target, and that doesn't make
    -  ;; sense.
    -  (and target-directory
    -       (not (file-directory-p target-directory))
    -       (error "target-directory must name a directory: %s" target-directory))
    -  (dolist (file files)
    -    (htmlize-file file target-directory)))
    -
    -;;;###autoload
    -(defun htmlize-many-files-dired (arg &optional target-directory)
    -  "HTMLize dired-marked files."
    -  (interactive "P")
    -  (htmlize-many-files (dired-get-marked-files nil arg) target-directory))
    -
    -(provide 'htmlize)
    -
    -;; Local Variables:
    -;; byte-compile-warnings: (not cl-functions unresolved obsolete)
    -;; End:
    -
    -;;; htmlize.el ends here
    diff --git a/bash/templates/build-aux/workflow/vendor/org.css b/bash/templates/build-aux/workflow/vendor/org.css
    deleted file mode 100644
    index 138cdba..0000000
    --- a/bash/templates/build-aux/workflow/vendor/org.css
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -/*
    -Taken from:
    -https://gongzhitaao.org/orgcss/org.css
    -*/
    -/*! normalize.css v4.1.1 | MIT License | github.com/necolas/normalize.css */html{font-family:sans-serif;line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}body{margin:0}article,aside,details,figcaption,figure,footer,header,main,menu,nav,section,summary{display:block}audio,canvas,progress,video{display:inline-block}audio:not([controls]){display:none;height:0}progress{vertical-align:baseline}[hidden],template{display:none}a{background-color:transparent;-webkit-text-decoration-skip:objects}a:active,a:hover{outline-width:0}abbr[title]{border-bottom:none;text-decoration:underline;-webkit-text-decoration:underline dotted;text-decoration:underline dotted}b,strong{font-weight:inherit;font-weight:bolder}dfn{font-style:italic}h1{font-size:2em;margin:.67em 0}mark{background-color:#ff0;color:#000}small{font-size:80%}sub,sup{font-size:75%;line-height:0;position:relative;vertical-align:baseline}sub{bottom:-.25em}sup{top:-.5em}img{border-style:none}svg:not(:root){overflow:hidden}code,kbd,pre,samp{font-family:monospace,monospace;font-size:1em}figure{margin:1em 40px}hr{box-sizing:content-box;height:0;overflow:visible}button,input,optgroup,select,textarea{font:inherit;margin:0}optgroup{font-weight:700}button,input{overflow:visible}button,select{text-transform:none}[type=reset],[type=submit],button,html [type=button]{-webkit-appearance:button}[type=button]::-moz-focus-inner,[type=reset]::-moz-focus-inner,[type=submit]::-moz-focus-inner,button::-moz-focus-inner{border-style:none;padding:0}[type=button]:-moz-focusring,[type=reset]:-moz-focusring,[type=submit]:-moz-focusring,button:-moz-focusring{outline:1px dotted ButtonText}fieldset{border:1px solid silver;margin:0 2px;padding:.35em .625em .75em}legend{box-sizing:border-box;color:inherit;display:table;max-width:100%;padding:0;white-space:normal}textarea{overflow:auto}[type=checkbox],[type=radio]{box-sizing:border-box;padding:0}[type=number]::-webkit-inner-spin-button,[type=number]::-webkit-outer-spin-button{height:auto}[type=search]{-webkit-appearance:textfield;outline-offset:-2px}[type=search]::-webkit-search-cancel-button,[type=search]::-webkit-search-decoration{-webkit-appearance:none}::-webkit-input-placeholder{color:inherit;opacity:.54}::-webkit-file-upload-button{-webkit-appearance:button;font:inherit}body{color:#000;background-color:#fff}.org-alert-high{color:#ff8c00;font-weight:700}.org-alert-low{color:#00008b}.org-alert-moderate{color:gold;font-weight:700}.org-alert-saved-fringe{background-color:#f2f2f2}.org-alert-trivial{color:Dark purple}.org-alert-urgent{color:red;font-weight:700}.org-anzu-match-1{color:#000;background-color:#7fffd4}.org-anzu-match-2{color:#000;background-color:#00ff7f}.org-anzu-match-3{color:#000;background-color:#ff0}.org-anzu-mode-line,.org-anzu-mode-line-no-match{color:#008b00;font-weight:700}.org-anzu-replace-highlight{color:#b0e2ff;background-color:#cd00cd}.org-anzu-replace-to{color:red}.org-bbdb-field-name{color:sienna}.org-bbdb-name{color:#00f}.org-bbdb-organization{color:#b22222}.org-beacon-fallback-background{background-color:#000}.org-biblio-results-header{color:#483d8b;font-size:150%;font-weight:700}.org-bold{font-weight:700}.org-bold-italic{font-weight:700;font-style:italic}.org-bookmark-menu-bookmark{font-weight:700}.org-bookmark-menu-heading{color:#228b22}.org-buffer-menu-buffer{font-weight:700}.org-builtin{color:#483d8b}.org-button{color:#3a5fcd;text-decoration:underline}.org-c-annotation{color:#008b8b}.org-cal-china-x-general-holiday{background-color:#228b22}.org-cal-china-x-important-holiday{background-color:#8b0000}.org-calendar-iso-week{color:pink;font-weight:700}.org-calendar-iso-week-header{color:#0ff}.org-calendar-month-header{color:#00f}.org-calendar-today{text-decoration:underline}.org-calendar-weekday-header{color:#008b8b}.org-calendar-weekend-header{color:#b22222}.org-comint-highlight-input{font-weight:700}.org-comint-highlight-prompt{color:#0000cd}.org-comment,.org-comment-delimiter{color:#b22222}.org-compilation-column-number{color:#8b2252}.org-compilation-error{color:red;font-weight:700}.org-compilation-info{color:#228b22;font-weight:700}.org-compilation-line-number{color:#a020f0}.org-compilation-mode-line-exit{color:#228b22;font-weight:700}.org-compilation-mode-line-fail{color:red;font-weight:700}.org-compilation-mode-line-run,.org-compilation-warning{color:#ff8c00;font-weight:700}.org-completions-annotations{font-style:italic}.org-completions-first-difference{font-weight:700}.org-constant{color:#008b8b}.org-cursor{background-color:#eead0e}.org-custom-button{color:#000;background-color:#d3d3d3}.org-custom-button-mouse{color:#000;background-color:#e5e5e5}.org-custom-button-pressed{color:#000;background-color:#d3d3d3}.org-custom-button-pressed-unraised{color:#8b008b;text-decoration:underline}.org-custom-button-unraised{text-decoration:underline}.org-custom-changed{color:#fff;background-color:#00f}.org-custom-comment{background-color:#d9d9d9}.org-custom-comment-tag{color:#00008b}.org-custom-face-tag{color:#00f;font-weight:700}.org-custom-group-subtitle{font-weight:700}.org-custom-group-tag{color:#00f;font-size:120%;font-weight:700}.org-custom-group-tag-1{color:red;font-size:120%;font-weight:700}.org-custom-invalid{color:#ff0;background-color:red}.org-custom-link{color:#3a5fcd;text-decoration:underline}.org-custom-modified{color:#fff;background-color:#00f}.org-custom-rogue{color:pink;background-color:#000}.org-custom-saved{text-decoration:underline}.org-custom-set{color:#00f;background-color:#fff}.org-custom-state{color:#006400}.org-custom-themed{color:#fff;background-color:#00f}.org-custom-variable-button{font-weight:700;text-decoration:underline}.org-custom-variable-tag{color:#00f;font-weight:700}.org-custom-visibility{color:#3a5fcd;font-size:80%;text-decoration:underline}.org-diary{color:red}.org-diary-anniversary{color:#a020f0}.org-diary-time{color:sienna}.org-dired-async-failures{color:red}.org-dired-async-message{color:#ff0}.org-dired-async-mode-message{color:gold}.org-dired-directory{color:#00f}.org-dired-flagged{color:red;font-weight:700}.org-dired-header{color:#228b22}.org-dired-ignored{color:#7f7f7f}.org-dired-mark{color:#008b8b}.org-dired-marked{color:#ff8c00;font-weight:700}.org-dired-perm-write{color:#b22222}.org-dired-symlink{color:#a020f0}.org-dired-warning{color:red;font-weight:700}.org-doc{color:#8b2252}.org-eldoc-highlight-function-argument{font-weight:700}.org-epa-field-body{font-style:italic}.org-epa-field-name,.org-epa-mark{font-weight:700}.org-epa-mark{color:red}.org-epa-string{color:#00008b}.org-epa-validity-disabled{font-style:italic}.org-epa-validity-high{font-weight:700}.org-epa-validity-low,.org-epa-validity-medium{font-style:italic}.org-error{color:red;font-weight:700}.org-escape-glyph{color:brown}.org-evil-ex-commands{font-style:italic;text-decoration:underline}.org-evil-ex-info{color:red;font-style:italic}.org-evil-ex-lazy-highlight{background-color:#afeeee}.org-evil-ex-search{color:#b0e2ff;background-color:#cd00cd}.org-evil-ex-substitute-matches{background-color:#afeeee}.org-evil-ex-substitute-replacement{color:red;text-decoration:underline}.org-ffap{background-color:#b4eeb4}.org-file-name-shadow{color:#7f7f7f}.org-flycheck-error{text-decoration:underline}.org-flycheck-error-list-checker-name{color:#00f}.org-flycheck-error-list-column-number{color:#008b8b}.org-flycheck-error-list-error{color:red;font-weight:700}.org-flycheck-error-list-filename{color:sienna}.org-flycheck-error-list-highlight{background-color:#b4eeb4}.org-flycheck-error-list-id,.org-flycheck-error-list-id-with-explainer{color:#228b22}.org-flycheck-error-list-info{color:#228b22;font-weight:700}.org-flycheck-error-list-line-number{color:#008b8b}.org-flycheck-error-list-warning{color:#ff8c00;font-weight:700}.org-flycheck-fringe-error{color:red;font-weight:700}.org-flycheck-fringe-info{color:#228b22;font-weight:700}.org-flycheck-fringe-warning{color:#ff8c00;font-weight:700}.org-flycheck-info,.org-flycheck-warning,.org-flyspell-duplicate,.org-flyspell-incorrect{text-decoration:underline}.org-fringe{background-color:#f2f2f2}.org-function-name{color:#00f}.org-glyphless-char{font-size:60%}.org-golden-ratio-scroll-highlight-line{color:#fff;background-color:#53868b;font-weight:700}.org-header-line{color:#333;background-color:#e5e5e5}.org-helm-action{text-decoration:underline}.org-helm-bookmark-addressbook{color:tomato}.org-helm-bookmark-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-bookmark-file{color:#00b2ee}.org-helm-bookmark-file-not-found{color:#6c7b8b}.org-helm-bookmark-gnus{color:#f0f}.org-helm-bookmark-info{color:#0f0}.org-helm-bookmark-man{color:#8b5a00}.org-helm-bookmark-w3m{color:#ff0}.org-helm-buffer-archive{color:gold}.org-helm-buffer-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-buffer-file{color:#483d8b}.org-helm-buffer-modified{color:#b22222}.org-helm-buffer-not-saved{color:#ee6363}.org-helm-buffer-process{color:#cd6839}.org-helm-buffer-saved-out{color:red;background-color:#000}.org-helm-buffer-size{color:#708090}.org-helm-candidate-number,.org-helm-candidate-number-suspended{color:#000;background-color:#faffb5}.org-helm-delete-async-message{color:#ff0}.org-helm-etags-file{color:#8b814c;text-decoration:underline}.org-helm-ff-denied{color:red;background-color:#000}.org-helm-ff-directory{color:#8b0000;background-color:#d3d3d3}.org-helm-ff-dirs{color:#00f}.org-helm-ff-dotted-directory{color:#000;background-color:#696969}.org-helm-ff-dotted-symlink-directory{color:#ff8c00;background-color:#696969}.org-helm-ff-executable{color:#0f0}.org-helm-ff-file{color:#483d8b}.org-helm-ff-invalid-symlink{color:#000;background-color:red}.org-helm-ff-pipe{color:#ff0;background-color:#000}.org-helm-ff-prefix{color:#000;background-color:#ff0}.org-helm-ff-socket{color:#ff1493}.org-helm-ff-suid{color:#fff;background-color:red}.org-helm-ff-symlink{color:#b22222}.org-helm-ff-truename{color:#8b2252}.org-helm-grep-cmd-line{color:#228b22}.org-helm-grep-file{color:#8a2be2;text-decoration:underline}.org-helm-grep-finish{color:#0f0}.org-helm-grep-lineno{color:#ff7f00}.org-helm-grep-match{color:#b00000}.org-helm-header{color:#333;background-color:#e5e5e5}.org-helm-header-line-left-margin{color:#000;background-color:#ff0}.org-helm-helper{color:#333;background-color:#e5e5e5}.org-helm-history-deleted{color:#000;background-color:red}.org-helm-history-remote{color:#ff6a6a}.org-helm-lisp-completion-info{color:red}.org-helm-lisp-show-completion{background-color:#2f4f4f}.org-helm-locate-finish{color:#0f0}.org-helm-m-x-key{color:orange;text-decoration:underline}.org-helm-match{color:#b00000}.org-helm-match-item{color:#b0e2ff;background-color:#cd00cd}.org-helm-minibuffer-prompt{color:#0000cd}.org-helm-moccur-buffer{color:#00ced1;text-decoration:underline}.org-helm-non-file-buffer{font-style:italic}.org-helm-prefarg{color:red}.org-helm-resume-need-update{background-color:red}.org-helm-selection{background-color:#097209}.org-helm-selection-line{background-color:#b4eeb4}.org-helm-separator{color:#ffbfb5}.org-helm-source-header{color:#000;background-color:#abd7f0;font-size:130%;font-weight:700}.org-helm-visible-mark{background-color:#d1f5ea}.org-help-argument-name{font-style:italic}.org-highlight{background-color:#b4eeb4}.org-highlight-indent-guides-character{color:#e6e6e6}.org-highlight-indent-guides-even{background-color:#e6e6e6}.org-highlight-indent-guides-odd{background-color:#f3f3f3}.org-highlight-indent-guides-stack-character{color:#ccc}.org-highlight-indent-guides-stack-even{background-color:#ccc}.org-highlight-indent-guides-stack-odd{background-color:#d9d9d9}.org-highlight-indent-guides-top-character{color:#b3b3b3}.org-highlight-indent-guides-top-even{background-color:#b3b3b3}.org-highlight-indent-guides-top-odd{background-color:silver}.org-highlight-numbers-number{color:#008b8b}.org-hl-line{background-color:#b4eeb4}.org-holiday{background-color:pink}.org-hydra-face-amaranth{color:#e52b50;font-weight:700}.org-hydra-face-blue{color:#00f;font-weight:700}.org-hydra-face-pink{color:#ff6eb4;font-weight:700}.org-hydra-face-red{color:red;font-weight:700}.org-hydra-face-teal{color:#367588;font-weight:700}.org-ido-first-match{font-weight:700}.org-ido-incomplete-regexp{color:red;font-weight:700}.org-ido-indicator{color:#ff0;background-color:red}.org-ido-only-match{color:#228b22}.org-ido-subdir{color:red}.org-ido-virtual{color:#483d8b}.org-info-header-node{color:brown;font-weight:700;font-style:italic}.org-info-header-xref{color:#3a5fcd;text-decoration:underline}.org-info-index-match{background-color:#ff0}.org-info-menu-header{font-weight:700}.org-info-menu-star{color:red}.org-info-node{color:brown;font-weight:700;font-style:italic}.org-info-title-1{font-size:172%;font-weight:700}.org-info-title-2{font-size:144%;font-weight:700}.org-info-title-3{font-size:120%;font-weight:700}.org-info-title-4{font-weight:700}.org-info-xref{color:#3a5fcd;text-decoration:underline}.org-isearch{color:#b0e2ff;background-color:#cd00cd}.org-isearch-fail{background-color:#ffc1c1}.org-italic{font-style:italic}.org-keyword{color:#a020f0}.org-lazy-highlight{background-color:#afeeee}.org-link{color:#3a5fcd;text-decoration:underline}.org-link-visited{color:#8b008b;text-decoration:underline}.org-lv-separator{background-color:#ccc}.org-match{background-color:#ff0}.org-mcXcursor-bar{background-color:#000}.org-mcXregion{background-color:gtk_selection_bg_color}.org-me-dired-dim-0{color:#b3b3b3}.org-me-dired-dim-1{color:#7f7f7f}.org-me-dired-executable{color:#0f0}.org-message-cited-text{color:red}.org-message-header-cc{color:#191970}.org-message-header-name{color:#6495ed}.org-message-header-newsgroups{color:#00008b;font-weight:700;font-style:italic}.org-message-header-other{color:#4682b4}.org-message-header-subject{color:navy;font-weight:700}.org-message-header-to{color:#191970;font-weight:700}.org-message-header-xheader{color:#00f}.org-message-mml{color:#228b22}.org-message-separator{color:brown}.org-minibuffer-prompt{color:#0000cd}.org-mm-command-output{color:#cd0000}.org-mode-line{color:#000;background-color:#bfbfbf}.org-mode-line-buffer-id,.org-mode-line-buffer-id-inactive,.org-mode-line-emphasis{font-weight:700}.org-mode-line-inactive{color:#333;background-color:#e5e5e5}.org-mu4e-attach-number{color:sienna;font-weight:700}.org-mu4e-cited-1{color:#483d8b;font-style:italic}.org-mu4e-cited-2{color:#5cacee;font-style:italic}.org-mu4e-cited-3{color:sienna;font-style:italic}.org-mu4e-cited-4{color:#a020f0;font-style:italic}.org-mu4e-cited-5,.org-mu4e-cited-6{color:#b22222;font-style:italic}.org-mu4e-cited-7{color:#228b22;font-style:italic}.org-mu4e-compose-header,.org-mu4e-compose-separator{color:brown;font-style:italic}.org-mu4e-contact{color:sienna}.org-mu4e-context{color:#006400;font-weight:700}.org-mu4e-draft{color:#8b2252}.org-mu4e-flagged{color:#008b8b;font-weight:700}.org-mu4e-footer{color:#b22222}.org-mu4e-forwarded{color:#483d8b}.org-mu4e-header{color:#000;background-color:#fff}.org-mu4e-header-highlight{background-color:#000;font-weight:700;text-decoration:underline}.org-mu4e-header-key{color:#6495ed;font-weight:700}.org-mu4e-header-marks{color:#483d8b}.org-mu4e-header-title,.org-mu4e-header-value{color:#228b22}.org-mu4e-highlight{background-color:#b4eeb4}.org-mu4e-link{color:#3a5fcd;text-decoration:underline}.org-mu4e-modeline{color:#8b4500;font-weight:700}.org-mu4e-moved{color:#b22222;font-style:italic}.org-mu4e-ok{color:#b22222;font-weight:700}.org-mu4e-region-code{background-color:#2f4f4f}.org-mu4e-replied,.org-mu4e-special-header-value{color:#483d8b}.org-mu4e-system{color:#b22222;font-style:italic}.org-mu4e-title{color:#228b22;font-weight:700}.org-mu4e-trashed{color:#b22222;text-decoration:line-through}.org-mu4e-unread{color:#a020f0;font-weight:700}.org-mu4e-url-number{color:#008b8b;font-weight:700}.org-mu4e-view-body{color:#000;background-color:#fff}.org-mu4e-warning{color:red;font-weight:700}.org-next-error{background-color:gtk_selection_bg_color}.org-nobreak-space{color:brown;text-decoration:underline}.org-org-agenda-calendar-event,.org-org-agenda-calendar-sexp{color:#000;background-color:#fff}.org-org-agenda-clocking{background-color:#ff0}.org-org-agenda-column-dateline{background-color:#e5e5e5}.org-org-agenda-current-time{color:#b8860b}.org-org-agenda-date{color:#00f}.org-org-agenda-date-today{color:#00f;font-weight:700;font-style:italic}.org-org-agenda-date-weekend{color:#00f;font-weight:700}.org-org-agenda-diary{color:#000;background-color:#fff}.org-org-agenda-dimmed-todo{color:#7f7f7f}.org-org-agenda-done{color:#228b22}.org-org-agenda-filter-category,.org-org-agenda-filter-effort,.org-org-agenda-filter-regexp,.org-org-agenda-filter-tags{color:#000;background-color:#bfbfbf}.org-org-agenda-restriction-lock{background-color:#eee}.org-org-agenda-structure{color:#00f}.org-org-archived{color:#7f7f7f}.org-org-block{color:#7f7f7f}.org-org-block-begin-line,.org-org-block-end-line{color:#b22222}.org-org-checkbox{font-weight:700}.org-org-checkbox-statistics-done{color:#228b22;font-weight:700}.org-org-checkbox-statistics-todo{color:red;font-weight:700}.org-org-clock-overlay{color:#000;background-color:#d3d3d3}.org-org-code{color:#7f7f7f}.org-org-column,.org-org-column-title{background-color:#e5e5e5}.org-org-column-title{font-weight:700;text-decoration:underline}.org-org-date{color:#bfaf87;text-decoration:underline}.org-org-date-selected{color:red}.org-org-default{color:#000;background-color:#fff}.org-org-document-info{color:#191970}.org-org-document-info-keyword{color:#7f7f7f}.org-org-document-title{color:#191970;font-weight:700}.org-org-done{color:#228b22;font-weight:700}.org-org-drawer{color:#00f}.org-org-ellipsis{color:#b8860b;text-decoration:underline}.org-org-footnote{color:#96b4cd;text-decoration:underline}.org-org-formula{color:#b22222}.org-org-habit-alert{background-color:#f5f946}.org-org-habit-alert-future{background-color:#fafca9}.org-org-habit-clear{background-color:#8270f9}.org-org-habit-clear-future{background-color:#d6e4fc}.org-org-habit-overdue{background-color:#f9372d}.org-org-habit-overdue-future{background-color:#fc9590}.org-org-habit-ready{background-color:#4df946}.org-org-habit-ready-future{background-color:#acfca9}.org-org-headline-done{color:#bc8f8f}.org-org-hide{color:#fff}.org-org-latex-and-related{color:#8b4513}.org-org-level-1{color:#edd1c5}.org-org-level-2{color:#ebebb7}.org-org-level-3{color:#cce8cc}.org-org-level-4{color:#c9deec}.org-org-level-5{color:#dce3e8}.org-org-level-6{color:#dde6dd}.org-org-level-7{color:#e8e8ce}.org-org-level-8{color:#e8dedb}.org-org-link{color:#c5d2dc;text-decoration:underline}.org-org-list-dt{font-weight:700}.org-org-macro{color:#8b4513}.org-org-meta-line{color:#b22222}.org-org-mode-line-clock{color:#000;background-color:#bfbfbf}.org-org-mode-line-clock-overrun{color:#000;background-color:red}.org-org-priority{color:#a020f0}.org-org-quote{color:#7f7f7f}.org-org-ref-acronym{color:#ee7600;text-decoration:underline}.org-org-ref-cite{color:#c3d5c3;text-decoration:underline}.org-org-ref-glossary{color:#8968cd;text-decoration:underline}.org-org-ref-label{color:#8b008b;text-decoration:underline}.org-org-ref-ref{color:#e1cc96;text-decoration:underline}.org-org-scheduled{color:#006400}.org-org-scheduled-previously{color:#b22222}.org-org-scheduled-today{color:#006400}.org-org-sexp-date{color:#a020f0}.org-org-special-keyword{color:#88949f}.org-org-table{color:#00f}.org-org-tag,.org-org-tag-group{font-weight:700}.org-org-target{text-decoration:underline}.org-org-time-grid{color:#b8860b}.org-org-todo{color:red;font-weight:700}.org-org-upcoming-deadline{color:#b22222}.org-org-verbatim,.org-org-verse{color:#7f7f7f}.org-org-warning{color:red;font-weight:700}.org-outline-1{color:#00f}.org-outline-2{color:sienna}.org-outline-3{color:#a020f0}.org-outline-4{color:#b22222}.org-outline-5{color:#228b22}.org-outline-6{color:#008b8b}.org-outline-7{color:#483d8b}.org-outline-8{color:#8b2252}.org-package-description{color:#000;background-color:#fff}.org-package-name{color:#3a5fcd;text-decoration:underline}.org-package-status-avail-obso{color:#b22222}.org-package-status-available{color:#000;background-color:#fff}.org-package-status-built-in{color:#483d8b}.org-package-status-dependency{color:#b22222}.org-package-status-disabled{color:red;font-weight:700}.org-package-status-external{color:#483d8b}.org-package-status-held{color:#008b8b}.org-package-status-incompat,.org-package-status-installed{color:#b22222}.org-package-status-unsigned{color:red;font-weight:700}.org-pdf-isearch-batch{background-color:#ff0}.org-pdf-isearch-lazy{background-color:#afeeee}.org-pdf-isearch-match{color:#b0e2ff;background-color:#cd00cd}.org-pdf-occur-document{color:#8b2252}.org-pdf-occur-page{color:#228b22}.org-pdf-view-rectangle{background-color:#b4eeb4}.org-pdf-view-region{background-color:gtk_selection_bg_color}.org-powerline-active0{color:#000;background-color:#bfbfbf}.org-powerline-active1{color:#fff;background-color:#2b2b2b}.org-powerline-active2{color:#fff;background-color:#666}.org-powerline-inactive0{color:#333;background-color:#e5e5e5}.org-powerline-inactive1{color:#333;background-color:#1c1c1c}.org-powerline-inactive2{color:#333;background-color:#333}.org-preprocessor{color:#483d8b}.org-query-replace{color:#b0e2ff;background-color:#cd00cd}.org-rainbow-delimiters-depth-1{color:#ffdead}.org-rainbow-delimiters-depth-2{color:#00bfff}.org-rainbow-delimiters-depth-3{color:#ffdead}.org-rainbow-delimiters-depth-4{color:#00bfff}.org-rainbow-delimiters-depth-5{color:#ffdead}.org-rainbow-delimiters-depth-6{color:#00bfff}.org-rainbow-delimiters-depth-7{color:#ffdead}.org-rainbow-delimiters-depth-8{color:#00bfff}.org-rainbow-delimiters-depth-9{color:#ffdead}.org-rainbow-delimiters-unmatched{color:#88090b}.org-reb-match-0{background-color:#add8e6}.org-reb-match-1{background-color:#7fffd4}.org-reb-match-2{background-color:#00ff7f}.org-reb-match-3{background-color:#ff0}.org-rectangle-preview{background-color:gtk_selection_bg_color}.org-regexp-grouping-backslash,.org-regexp-grouping-construct{font-weight:700}.org-region{background-color:gtk_selection_bg_color}.org-secondary-selection{background-color:#ff0}.org-semantic-highlight-edits,.org-semantic-highlight-func-current-tag{background-color:#e5e5e5}.org-semantic-unmatched-syntax{text-decoration:underline}.org-sgml-namespace{color:#483d8b}.org-sh-escaped-newline{color:#8b2252}.org-sh-heredoc{color:#ee0}.org-sh-quoted-exec{color:#f0f}.org-shadow{color:#7f7f7f}.org-show-paren-match{background-color:#40e0d0}.org-show-paren-mismatch{color:#fff;background-color:#a020f0}.org-sp-pair-overlay,.org-sp-show-pair-enclosing{background-color:#b4eeb4}.org-sp-show-pair-match{background-color:#40e0d0}.org-sp-show-pair-mismatch{color:#fff;background-color:#a020f0}.org-sp-wrap-overlay{background-color:#b4eeb4}.org-sp-wrap-overlay-closing-pair{color:red;background-color:#b4eeb4}.org-sp-wrap-overlay-opening-pair{color:#0f0;background-color:#b4eeb4}.org-sp-wrap-tag-overlay{background-color:#b4eeb4}.org-spaceline-flycheck-error{color:#fc5c94;background-color:#333}.org-spaceline-flycheck-info{color:#8de6f7;background-color:#333}.org-spaceline-flycheck-warning{color:#f3ea98;background-color:#333}.org-spaceline-python-venv{color:#fbf}.org-speedbar-button{color:#008b00}.org-speedbar-directory{color:#00008b}.org-speedbar-file{color:#008b8b}.org-speedbar-highlight{background-color:#0f0}.org-speedbar-selected{color:red;text-decoration:underline}.org-speedbar-separator{color:#fff;background-color:#00f;text-decoration:overline}.org-speedbar-tag{color:brown}.org-string{color:#8b2252}.org-success{color:#228b22;font-weight:700}.org-table-cell{color:#e5e5e5;background-color:#00f}.org-tex-math{color:#8b2252}.org-tool-bar{color:#000;background-color:#bfbfbf}.org-tooltip{color:#000;background-color:#ffffe0}.org-trailing-whitespace{background-color:red}.org-tty-menu-disabled{color:#d3d3d3;background-color:#00f}.org-tty-menu-enabled{color:#ff0;background-color:#00f;font-weight:700}.org-tty-menu-selected{background-color:red}.org-type{color:#228b22}.org-underline{text-decoration:underline}.org-undo-tree-visualizer-active-branch{color:#000;font-weight:700}.org-undo-tree-visualizer-current{color:red}.org-undo-tree-visualizer-default{color:#bebebe}.org-undo-tree-visualizer-register{color:#ff0}.org-undo-tree-visualizer-unmodified{color:#0ff}.org-variable-name{color:sienna}.org-vhlXdefault{background-color:#ff0}.org-warning{color:#ff8c00;font-weight:700}.org-warning-1{color:red;font-weight:700}.org-wgrep{color:#fff;background-color:#228b22}.org-wgrep-delete{color:pink;background-color:#228b22}.org-wgrep-done{color:#00f}.org-wgrep-file{color:#fff;background-color:#228b22}.org-wgrep-reject{color:red;font-weight:700}.org-which-key-command-description{color:#00f}.org-which-key-docstring{color:#b22222}.org-which-key-group-description{color:#a020f0}.org-which-key-highlighted-command{color:#00f;text-decoration:underline}.org-which-key-key{color:#008b8b}.org-which-key-local-map-description{color:#00f}.org-which-key-note,.org-which-key-separator{color:#b22222}.org-which-key-special-key{color:#008b8b;font-weight:700}.org-whitespace-big-indent{color:#b22222;background-color:red}.org-whitespace-empty{color:#b22222;background-color:#ff0}.org-whitespace-hspace{color:#d3d3d3;background-color:#cdc9a5}.org-whitespace-indentation{color:#b22222;background-color:#ff0}.org-whitespace-line{color:violet;background-color:#333}.org-whitespace-newline{color:#d3d3d3}.org-whitespace-space{color:#d3d3d3;background-color:#ffffe0}.org-whitespace-space-after-tab{color:#b22222;background-color:#ff0}.org-whitespace-space-before-tab{color:#b22222;background-color:#ff8c00}.org-whitespace-tab{color:#d3d3d3;background-color:beige}.org-whitespace-trailing{color:#ff0;background-color:red;font-weight:700}.org-widget-button{font-weight:700}.org-widget-button-pressed{color:red}.org-widget-documentation{color:#006400}.org-widget-field{background-color:#d9d9d9}.org-widget-inactive{color:#7f7f7f}.org-widget-single-line-field{background-color:#d9d9d9}.org-window-divider{color:#999}.org-window-divider-first-pixel{color:#ccc}.org-window-divider-last-pixel{color:#666}a{color:inherit;background-color:inherit;font:inherit;text-decoration:inherit}a:hover{text-decoration:underline}body{width:95%;margin:2% auto;font-size:14px;line-height:1.4em;font-family:Georgia,serif;color:#333}@media screen and (min-width:600px){body{font-size:18px}}@media screen and (min-width:910px){body{width:900px}}::-moz-selection{background:#d6edff}::selection{background:#d6edff}p{margin:1em auto}dl,ol,ul{margin:0 auto}.title{margin:.8em auto;color:#000}.subtitle,.title{text-align:center}.subtitle{font-size:1.1em;line-height:1.4;font-weight:700;margin:1em auto}.abstract{margin:auto;width:80%;font-style:italic}.abstract p:last-of-type:before{content:"    ";white-space:pre}.status{font-size:90%;margin:2em auto}[class^=section-number-]{margin-right:.5em}[id^=orgheadline]{clear:both}#footnotes{font-size:90%}.footpara{display:inline;margin:.2em auto}.footdef{margin-bottom:1em}.footdef sup{padding-right:.5em}a{color:#527d9a;text-decoration:none}a:hover{color:#035;border-bottom:1px dotted}figure{padding:0;margin:1em auto;text-align:center}img{max-width:100%;vertical-align:middle}.MathJax_Display{margin:0!important;width:90%!important}h1,h2,h3,h4,h5,h6{color:#a5573e;line-height:1em;font-family:Helvetica,sans-serif}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1em}@media screen and (min-width:600px){h1{font-size:2em}h2{font-size:1.5em}h3{font-size:1.3em}h1,h2,h3{line-height:1.4em}h4,h5,h6{font-size:1.1em}}dt{font-weight:700}table{margin:1em auto;border-top:2px solid;border-collapse:collapse}table,thead{border-bottom:2px solid}table td+td,table th+th{border-left:1px solid grey}table tr{border-top:1px solid #d3d3d3}td,th{padding:.3em .6em;vertical-align:middle}caption.t-above{caption-side:top}caption.t-bottom{caption-side:bottom}caption{margin-bottom:.3em}figcaption{margin-top:.3em}th.org-center,th.org-left,th.org-right{text-align:center}td.org-right{text-align:right}td.org-left{text-align:left}td.org-center{text-align:center}blockquote{margin:1em 2em;padding-left:1em;border-left:3px solid #ccc}kbd{background-color:#f7f7f7;font-size:80%;margin:0 .1em;padding:.1em .6em}.todo{background-color:red}.done,.todo{color:#fff;padding:.1em .3em;border-radius:3px;background-clip:padding-box;font-size:80%;font-family:Lucida Console,monospace;line-height:1}.done{background-color:green}.priority{color:orange;font-family:Lucida Console,monospace}#table-of-contents li{clear:both}.tag{font-family:Lucida Console,monospace;font-size:.7em;font-weight:400}.tag span{padding:.3em;float:right;margin-right:.5em;border:1px solid #bbb;border-radius:3px;background-clip:padding-box;color:#333;background-color:#eee;line-height:1}.timestamp{color:#bebebe;font-size:90%}.timestamp-kwd{color:#5f9ea0}.org-right{margin-left:auto;margin-right:0;text-align:right}.org-left{margin-left:0;margin-right:auto;text-align:left}.org-center{margin-left:auto;margin-right:auto;text-align:center}.underline{text-decoration:underline}#postamble p,#preamble p{font-size:90%;margin:.2em}p.verse{margin-left:3%}:not(pre)>code{padding:2px 5px;margin:auto 1px;border:1px solid #ddd;border-radius:3px;background-clip:padding-box;color:#333;font-size:80%}.org-src-container{border:1px solid #ccc;box-shadow:3px 3px 3px #eee;font-family:Lucida Console,monospace;font-size:80%;margin:1em auto;padding:.1em .5em;position:relative}.org-src-container>pre{overflow:auto}.org-src-container>pre:before{display:block;position:absolute;background-color:#b3b3b3;top:0;right:0;padding:0 .5em;border-bottom-left-radius:8px;border:0;color:#fff;font-size:80%}.org-src-container>pre.src-sh:before{content:"sh"}.org-src-container>pre.src-bash:before{content:"bash"}.org-src-container>pre.src-emacs-lisp:before{content:"Emacs Lisp"}.org-src-container>pre.src-R:before{content:"R"}.org-src-container>pre.src-cpp:before{content:"C++"}.org-src-container>pre.src-c:before{content:"C"}.org-src-container>pre.src-html:before{content:"HTML"}.org-src-container>pre.src-javascript:before,.org-src-container>pre.src-js:before{content:"Javascript"}// More languages 0% http://orgmode.org/worg/org-contrib/babel/languages.html .org-src-container>pre.src-abc:before{content:"ABC"}.org-src-container>pre.src-asymptote:before{content:"Asymptote"}.org-src-container>pre.src-awk:before{content:"Awk"}.org-src-container>pre.src-C:before{content:"C"}.org-src-container>pre.src-calc:before{content:"Calc"}.org-src-container>pre.src-clojure:before{content:"Clojure"}.org-src-container>pre.src-comint:before{content:"comint"}.org-src-container>pre.src-css:before{content:"CSS"}.org-src-container>pre.src-D:before{content:"D"}.org-src-container>pre.src-ditaa:before{content:"Ditaa"}.org-src-container>pre.src-dot:before{content:"Dot"}.org-src-container>pre.src-ebnf:before{content:"ebnf"}.org-src-container>pre.src-forth:before{content:"Forth"}.org-src-container>pre.src-F90:before{content:"Fortran"}.org-src-container>pre.src-gnuplot:before{content:"Gnuplot"}.org-src-container>pre.src-haskell:before{content:"Haskell"}.org-src-container>pre.src-io:before{content:"Io"}.org-src-container>pre.src-java:before{content:"Java"}.org-src-container>pre.src-latex:before{content:"LaTeX"}.org-src-container>pre.src-ledger:before{content:"Ledger"}.org-src-container>pre.src-ly:before{content:"Lilypond"}.org-src-container>pre.src-lisp:before{content:"Lisp"}.org-src-container>pre.src-makefile:before{content:"Make"}.org-src-container>pre.src-matlab:before{content:"Matlab"}.org-src-container>pre.src-max:before{content:"Maxima"}.org-src-container>pre.src-mscgen:before{content:"Mscgen"}.org-src-container>pre.src-Caml:before{content:"Objective"}.org-src-container>pre.src-octave:before{content:"Octave"}.org-src-container>pre.src-org:before{content:"Org"}.org-src-container>pre.src-perl:before{content:"Perl"}.org-src-container>pre.src-picolisp:before{content:"Picolisp"}.org-src-container>pre.src-plantuml:before{content:"PlantUML"}.org-src-container>pre.src-python:before{content:"Python"}.org-src-container>pre.src-ruby:before{content:"Ruby"}.org-src-container>pre.src-sass:before{content:"Sass"}.org-src-container>pre.src-scala:before{content:"Scala"}.org-src-container>pre.src-scheme:before{content:"Scheme"}.org-src-container>pre.src-screen:before{content:"Screen"}.org-src-container>pre.src-sed:before{content:"Sed"}.org-src-container>pre.src-shell:before{content:"shell"}.org-src-container>pre.src-shen:before{content:"Shen"}.org-src-container>pre.src-sql:before{content:"SQL"}.org-src-container>pre.src-sqlite:before{content:"SQLite"}.org-src-container>pre.src-stan:before{content:"Stan"}.org-src-container>pre.src-vala:before{content:"Vala"}.org-src-container>pre.src-axiom:before{content:"Axiom"}.org-src-container>pre.src-browser:before{content:"HTML"}.org-src-container>pre.src-cypher:before{content:"Neo4j"}.org-src-container>pre.src-elixir:before{content:"Elixir"}.org-src-container>pre.src-request:before{content:"http"}.org-src-container>pre.src-ipython:before{content:"iPython"}.org-src-container>pre.src-kotlin:before{content:"Kotlin"}.org-src-container>pre.src-Flavored Erlang lfe:before{content:"Lisp"}.org-src-container>pre.src-mongo:before{content:"MongoDB"}.org-src-container>pre.src-prolog:before{content:"Prolog"}.org-src-container>pre.src-rec:before{content:"rec"}.org-src-container>pre.src-ML sml:before{content:"Standard"}.org-src-container>pre.src-Translate translate:before{content:"Google"}.org-src-container>pre.src-typescript:before{content:"Typescript"}.org-src-container>pre.src-rust:before{content:"Rust"}.inlinetask{background:#ffc;border:2px solid grey;margin:10px;padding:10px}#org-div-home-and-up{font-size:70%;text-align:right;white-space:nowrap}.linenr{font-size:90%}.code-highlighted{background-color:#ff0}#bibliography{font-size:90%}#bibliography table{width:100%}.creator{display:block}@media screen and (min-width:600px){.creator{display:inline;float:right}}
    diff --git a/bash/templates/build-aux/workflow/workflow.css b/bash/templates/build-aux/workflow/workflow.css
    deleted file mode 100644
    index 0e4f851..0000000
    --- a/bash/templates/build-aux/workflow/workflow.css
    +++ /dev/null
    @@ -1,49 +0,0 @@
    -/* EuAndreh's additions */
    -
    -#tasks, #bugs {
    -  border-bottom: 5px;
    -}
    -
    -a.header-anchor {
    -  font-size: 0.5em;
    -  opacity: 0.5;
    -}
    -
    -.NEXT, .WAITING, .MEETING, .INACTIVE, .DOING, .CANCELLED, .DONE, .TODO {
    -	color: #fff;
    -	padding: .1em .3em;
    -	border-radius: 3px;
    -	background-clip: padding-box;
    -	font-size: 80%;
    -	font-family: Lucida Console,monospace;
    -	line-height: 1
    -}
    -
    -/*
    -  Replicate colors from:
    -  https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866
    -*/
    -
    -.TODO {
    -	background-color: brown;
    -}
    -
    -.DOING {
    -	background-color: yellowgreen;
    -}
    -
    -.WAITING, .MEETING {
    -	background-color: gray;
    -}
    -
    -.INACTIVE {
    -	background-color: orange;
    -}
    -
    -.NEXT {
    -	background-color: red;
    -}
    -
    -.CANCELLED, .DONE {
    -	background-color: green;
    -}
    -- 
    cgit v1.2.3
    
    
    From 98d856011109585433a0ad95a479866af80c895f Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 14:48:34 -0300
    Subject: configuration.nix and os.scm: Add pandoc package
    
    ---
     guix/os.scm             | 5 +++--
     nixos/configuration.nix | 1 +
     2 files changed, 4 insertions(+), 2 deletions(-)
    
    diff --git a/guix/os.scm b/guix/os.scm
    index f563220..4f40996 100644
    --- a/guix/os.scm
    +++ b/guix/os.scm
    @@ -91,12 +91,13 @@
                nvi
                ;; fzf
                autojump
    -	   calcurse
    +           calcurse
    +           pandoc
     
                ;; Mail
                notmuch
                isync
    -	   neomutt
    +           neomutt
     
                ;; Programming tools
                perl
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 79490e7..952b630 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -192,6 +192,7 @@ in {
         # nvi # broken, now using the one from Guix
         fzf
         calcurse # FIXME setup calendar
    +    pandoc
     
         ## Mail
         notmuch
    -- 
    cgit v1.2.3
    
    
    From 9169a1cad9164c19758b5bf38911bc4bdf7a2857 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 14:49:42 -0300
    Subject: tmux.conf: Use C-v as prefix over C-x
    
    ---
     tmux/tmux.conf | 6 ++----
     1 file changed, 2 insertions(+), 4 deletions(-)
    
    diff --git a/tmux/tmux.conf b/tmux/tmux.conf
    index a15f4e4..b685561 100644
    --- a/tmux/tmux.conf
    +++ b/tmux/tmux.conf
    @@ -1,8 +1,6 @@
    -# Instead of using "C-b" as a prefix, use "C-x"
    +# Instead of using "C-b" as a prefix, use "C-v"
     unbind C-b
    -set -g prefix C-x
    -
    -bind-key C-x send-prefix
    +set -g prefix C-v
     
     # Turn on mouse mode
     # https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ
    -- 
    cgit v1.2.3
    
    
    From f3198d641cbb8a77c0be0e06c715e78e44bfc151 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 14:50:14 -0300
    Subject: fzf.sh: Use --select-1 and --exit-0
    
    ---
     bash/fzf.sh | 8 ++++++--
     1 file changed, 6 insertions(+), 2 deletions(-)
    
    diff --git a/bash/fzf.sh b/bash/fzf.sh
    index c0bf578..3340542 100644
    --- a/bash/fzf.sh
    +++ b/bash/fzf.sh
    @@ -11,7 +11,9 @@
     # C-t. This hypothesis is reinforced by the fact that the environment
     # variable is called $FZF_CTRL_T_OPTS, =/
     # I settled for using C-M-t for transpose-chars.
    +# Addendum: do the same for M-c and 'capitalize-word'
     bind '"\e\C-t": transpose-chars'
    +bind '"\e\C-c": capitalize-word'
     
     export FZF_TMUX=1
     export FZF_CTRL_T_OPTS='
    @@ -25,7 +27,9 @@ export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"'
     fzgrep() {
       fn=$(git grep -n "$1" | \
              cut -d: -f -2  | \
    -         fzf-tmux --preview "echo {}       | \
    +         fzf-tmux --select-1 \
    +                  --exit-0   \
    +                  --preview "echo {}       | \
                                    cut -d: -f1 | \
                                    xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) '
                                      (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print }
    @@ -41,7 +45,7 @@ fzgrep() {
     }
     
     f() {
    -  file="$(git ls-files | fzf-tmux --select-1 --query "$2" --preview 'cat {}')"
    +  file="$(git ls-files | fzf-tmux --select-1 --exit-0 --query "$2" --preview 'cat {}')"
       if [ -n "$file" ]; then
         history -s f $@
         history -s "$1" "$file"
    -- 
    cgit v1.2.3
    
    
    From 2c2c54f44ad598b028690a8d4bd2eccef142c597 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 14:51:00 -0300
    Subject: env.sh: Set $LANGUAGE from $LANG
    
    ---
     bash/env.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/env.sh b/bash/env.sh
    index fe85aa5..db519e7 100644
    --- a/bash/env.sh
    +++ b/bash/env.sh
    @@ -6,7 +6,7 @@ export BROWSER=firefox
     export INPUTRC=~/.inputrc
     export BORG_REMOTE_PATH='borg1'
     export LANG=fr_FR.UTF-8
    -export LANGUAGE=fr_FR.UTF-8
    +export LANGUAGE=$LANG
     export GOPATH="$HOME/dev/go"
     
     # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287
    -- 
    cgit v1.2.3
    
    
    From fcf723e04aa792dfaa8f8bf3f29fe859c30e6ab5 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 14:51:20 -0300
    Subject: utils.sh: Add t() function
    
    ---
     bash/util.sh | 4 ++++
     1 file changed, 4 insertions(+)
    
    diff --git a/bash/util.sh b/bash/util.sh
    index 965b690..739ee3a 100644
    --- a/bash/util.sh
    +++ b/bash/util.sh
    @@ -26,3 +26,7 @@ genpassword() {
       length="${1-99}"
       tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||:
     }
    +
    +t() {
    +  expand "$1" -t2 | sponge "$1"
    +}
    -- 
    cgit v1.2.3
    
    
    From c3e64f1fa86c9e4f094885ab20ddcf2c5073592b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 15:00:54 -0300
    Subject: fake-symlinks.sh: FIx cp-all typo
    
    ---
     bash/fake-symlinks.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh
    index 8cb6ab5..5fcca0b 100644
    --- a/bash/fake-symlinks.sh
    +++ b/bash/fake-symlinks.sh
    @@ -195,7 +195,7 @@ ln-build-aux() {
       cp-all build-aux/assert-todos.sh      \
              build-aux/assert-shellcheck.sh \
              build-aux/workflow/TODOs.sh    \
    -         cp-all build-aux/workflow/preamble.rst
    +         build-aux/workflow/preamble.rst
     
       cp-if-not TODOs.rst
     }
    -- 
    cgit v1.2.3
    
    
    From e8990379c83d9a75a9792b7b9a635ab99bd20153 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 16:45:27 -0300
    Subject: Use vim over nvi: nvi is broken for UTF-8 chars
    
    ---
     guix/os.scm             | 3 +--
     nixos/configuration.nix | 2 +-
     vi/exrc.conf            | 1 +
     3 files changed, 3 insertions(+), 3 deletions(-)
    
    diff --git a/guix/os.scm b/guix/os.scm
    index 4f40996..b6953f9 100644
    --- a/guix/os.scm
    +++ b/guix/os.scm
    @@ -87,8 +87,7 @@
                acpi
                xsel
                pinentry
    -           vim
    -           nvi
    +           vim ;; nvi doesn't work on files with UTF-8 chars
                ;; fzf
                autojump
                calcurse
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 952b630..4cc94bb 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -189,7 +189,7 @@ in {
         xsel
         pinentry
         nixfmt
    -    # nvi # broken, now using the one from Guix
    +    vim # nvi doesn't work on files with UTF-8 chars
         fzf
         calcurse # FIXME setup calendar
         pandoc
    diff --git a/vi/exrc.conf b/vi/exrc.conf
    index 9a89f01..9f7e065 100644
    --- a/vi/exrc.conf
    +++ b/vi/exrc.conf
    @@ -1,4 +1,5 @@
     " set number
    +set compatible
     set autoindent
     set tabstop=2
     set shiftwidth=2
    -- 
    cgit v1.2.3
    
    
    From a73edaf898b5556a1fe6c456c1d7659f0c4e3b2c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 16:59:26 -0300
    Subject: config.sh: Add FIXME marker for readline C-M-l
    
    ---
     bash/config.sh | 4 ++++
     1 file changed, 4 insertions(+)
    
    diff --git a/bash/config.sh b/bash/config.sh
    index 8a53999..d39637b 100644
    --- a/bash/config.sh
    +++ b/bash/config.sh
    @@ -51,3 +51,7 @@ shopt -s cmdhist
     # Store history immediately
     # By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable:
     PROMPT_COMMAND='history -a'
    +
    +# FIXME: configure C-M-l readline key
    +# to tmux clear screen
    +# bind -x '"\e\C-l": c'
    -- 
    cgit v1.2.3
    
    
    From e98714e2efde5fce1ad9a3749f0215e5d80012e6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 18:33:12 -0300
    Subject: Revert "Use vim over nvi: nvi is broken for UTF-8 chars"
    
    This reverts commit e8990379c83d9a75a9792b7b9a635ab99bd20153.
    
    Actually, what was broken was the locale setup. As per the Guix manual [0],
    I needed the "glibc-locales" package installed and the $GUIX_LOCPATH configured.
    
    After that, nvi stopped giving a core dump when inserting diacritics.
    
    [0]: https://guix.gnu.org/manual/en/guix.html#Application-Setup
    ---
     bash/env.sh             | 3 +--
     guix/os.scm             | 2 +-
     nixos/configuration.nix | 2 +-
     vi/exrc.conf            | 1 -
     4 files changed, 3 insertions(+), 5 deletions(-)
    
    diff --git a/bash/env.sh b/bash/env.sh
    index db519e7..2babd95 100644
    --- a/bash/env.sh
    +++ b/bash/env.sh
    @@ -5,14 +5,13 @@ export EDITOR=vi
     export BROWSER=firefox
     export INPUTRC=~/.inputrc
     export BORG_REMOTE_PATH='borg1'
    -export LANG=fr_FR.UTF-8
    -export LANGUAGE=$LANG
     export GOPATH="$HOME/dev/go"
     
     # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287
     export NIX_BUILD_CORES=0
     
     export GUIX_PROFILE="$HOME/.guix-profile"
    +export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
     
     PATH="$PATH:$HOME/.local/bin"
     PATH="$PATH:$HOME/tmp/bin"
    diff --git a/guix/os.scm b/guix/os.scm
    index b6953f9..0925425 100644
    --- a/guix/os.scm
    +++ b/guix/os.scm
    @@ -87,7 +87,7 @@
                acpi
                xsel
                pinentry
    -           vim ;; nvi doesn't work on files with UTF-8 chars
    +           nvi
                ;; fzf
                autojump
                calcurse
    diff --git a/nixos/configuration.nix b/nixos/configuration.nix
    index 4cc94bb..952b630 100644
    --- a/nixos/configuration.nix
    +++ b/nixos/configuration.nix
    @@ -189,7 +189,7 @@ in {
         xsel
         pinentry
         nixfmt
    -    vim # nvi doesn't work on files with UTF-8 chars
    +    # nvi # broken, now using the one from Guix
         fzf
         calcurse # FIXME setup calendar
         pandoc
    diff --git a/vi/exrc.conf b/vi/exrc.conf
    index 9f7e065..9a89f01 100644
    --- a/vi/exrc.conf
    +++ b/vi/exrc.conf
    @@ -1,5 +1,4 @@
     " set number
    -set compatible
     set autoindent
     set tabstop=2
     set shiftwidth=2
    -- 
    cgit v1.2.3
    
    
    From 2f96da89aed69a251142e4e0fa1f70d6cc93651a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 18:40:16 -0300
    Subject: post.sh: Remove set -x
    
    ---
     scripts/ad-hoc/post.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/scripts/ad-hoc/post.sh b/scripts/ad-hoc/post.sh
    index 0d075ab..8bd47b7 100755
    --- a/scripts/ad-hoc/post.sh
    +++ b/scripts/ad-hoc/post.sh
    @@ -1,4 +1,4 @@
    -#!/bin/sh -eux
    +#!/bin/sh -eu
     
     missing() {
       red "Missing argument <${1}>.\n"
    -- 
    cgit v1.2.3
    
    
    From 969d84e5a296b4cdb5bc8e151380a0b25f943253 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 18:56:43 -0300
    Subject: fzf.sh: s/fzgrep/fzg/
    
    ---
     bash/fzf.sh | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/bash/fzf.sh b/bash/fzf.sh
    index 3340542..2440339 100644
    --- a/bash/fzf.sh
    +++ b/bash/fzf.sh
    @@ -24,7 +24,7 @@ export FZF_CTRL_T_OPTS='
     
     export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"'
     
    -fzgrep() {
    +fzg() {
       fn=$(git grep -n "$1" | \
              cut -d: -f -2  | \
              fzf-tmux --select-1 \
    -- 
    cgit v1.2.3
    
    
    From a81c9d68b49fc1341e15dd32eefe59e8bd6785b5 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 14 Jan 2021 19:05:32 -0300
    Subject: Remove unused templates/slides.html
    
    ---
     templates/slides.html | 41 -----------------------------------------
     1 file changed, 41 deletions(-)
     delete mode 100644 templates/slides.html
    
    diff --git a/templates/slides.html b/templates/slides.html
    deleted file mode 100644
    index 665890e..0000000
    --- a/templates/slides.html
    +++ /dev/null
    @@ -1,41 +0,0 @@
    -
    -
    -	
    -		
    -		
    -
    -		reveal.js
    -
    -		
    -		
    -		
    -
    -		
    -		
    -	
    -	
    -		
    -
    -
    -
    -
    -
    - - - - - - - - -- cgit v1.2.3 From 2c6e38056a232968495be3e594e8a9829c9313e8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 14 Jan 2021 19:06:20 -0300 Subject: Remove unused .ignore --- .ignore | 1 - 1 file changed, 1 deletion(-) delete mode 100644 .ignore diff --git a/.ignore b/.ignore deleted file mode 100644 index 0fabda6..0000000 --- a/.ignore +++ /dev/null @@ -1 +0,0 @@ -encrypted/borg/ \ No newline at end of file -- cgit v1.2.3 From 19a19c250a4ec9f5d9db1d40b03b29f738ee34a1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 00:21:04 -0300 Subject: channels.scm: Remove songbooks channel --- guix/channels.scm | 9 --------- 1 file changed, 9 deletions(-) diff --git a/guix/channels.scm b/guix/channels.scm index c647855..2af65fb 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -7,15 +7,6 @@ (introduction (make-channel-introduction "641f9388002cd874040938ab1c6da7ac9d0e54ca" - (openpgp-fingerprint - "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) - (channel - (name 'songbooks) - (url "git://git.euandreh.xyz/songbooks") - (branch "master") - (introduction - (make-channel-introduction - "26b772cdb5074e93d3112c807ffd4c76f16f039c" (openpgp-fingerprint "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060"))))) %default-channels) -- cgit v1.2.3 From 94adede129b81929ab50f6aa7dee14f2bf0d0976 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:05:05 -0300 Subject: Merge tests.sh into Makefile --- Makefile | 5 +++-- tests.sh | 5 ----- 2 files changed, 3 insertions(+), 7 deletions(-) delete mode 100755 tests.sh diff --git a/Makefile b/Makefile index 170d46c..6a213e7 100644 --- a/Makefile +++ b/Makefile @@ -1,7 +1,8 @@ .PHONY: check check: - bash scripts/assert-shellcheck.sh - bash scripts/assert-todos.sh + ./build-aux/assert-nixfmt.sh + ./build-aux/assert-shellcheck.sh + ./build-aux/assert-todos.sh .PHONY: clean clean: diff --git a/tests.sh b/tests.sh deleted file mode 100755 index 238f28b..0000000 --- a/tests.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -eux - -./build-aux/assert-nixfmt.sh -./build-aux/assert-shellcheck.sh -./build-aux/assert-todos.sh -- cgit v1.2.3 From 911d7776e84e5098c974f4ff831ef4869e7a3db5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:06:14 -0300 Subject: git mv vi/exrc.conf . --- bash/symlinks.sh | 2 +- exrc.conf | 4 ++++ vi/exrc.conf | 4 ---- 3 files changed, 5 insertions(+), 5 deletions(-) create mode 100644 exrc.conf delete mode 100644 vi/exrc.conf diff --git a/bash/symlinks.sh b/bash/symlinks.sh index fa1fd38..353f3f5 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -44,7 +44,7 @@ mkdir -p "$HOME/.emacs.d/private/layers/" ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs ## vi -ln -fs "$DOTFILES/vi/exrc.conf" ~/.exrc +ln -fs "$DOTFILES/exrc.conf" ~/.exrc ## xmonad mkdir -p ~/.xmonad diff --git a/exrc.conf b/exrc.conf new file mode 100644 index 0000000..9a89f01 --- /dev/null +++ b/exrc.conf @@ -0,0 +1,4 @@ +" set number +set autoindent +set tabstop=2 +set shiftwidth=2 diff --git a/vi/exrc.conf b/vi/exrc.conf deleted file mode 100644 index 9a89f01..0000000 --- a/vi/exrc.conf +++ /dev/null @@ -1,4 +0,0 @@ -" set number -set autoindent -set tabstop=2 -set shiftwidth=2 -- cgit v1.2.3 From b6ef3d732ca72676b67d71e388a990d43bd45305 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:09:21 -0300 Subject: git mv mercurial/hgrc.ini . --- bash/symlinks.sh | 2 +- hgrc.ini | 2 ++ mercurial/hgrc.ini | 2 -- 3 files changed, 3 insertions(+), 3 deletions(-) create mode 100644 hgrc.ini delete mode 100644 mercurial/hgrc.ini diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 353f3f5..38f0aef 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -53,7 +53,7 @@ ln -fs "$DOTFILES/xmonad/xmonad.hs" ~/.xmonad/xmonad.hs ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc ## Mercurial -ln -fs "${DOTFILES}/mercurial/hgrc.ini" ~/.hgrc +ln -fs "${DOTFILES}/hgrc.ini" ~/.hgrc ## ranger mkdir -p ~/.config/ranger/ diff --git a/hgrc.ini b/hgrc.ini new file mode 100644 index 0000000..656f40b --- /dev/null +++ b/hgrc.ini @@ -0,0 +1,2 @@ +[ui] +username = EuAndreh diff --git a/mercurial/hgrc.ini b/mercurial/hgrc.ini deleted file mode 100644 index 656f40b..0000000 --- a/mercurial/hgrc.ini +++ /dev/null @@ -1,2 +0,0 @@ -[ui] -username = EuAndreh -- cgit v1.2.3 From c99ca49f64d95cc074880ade39ebdbe1e6b15562 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:12:12 -0300 Subject: Remove duplicated files under build-aux/ --- build-aux/ci-build.sh | 42 ----------------------------------------- build-aux/ci/git-pre-push.sh | 18 ------------------ build-aux/ci/git-pre-push.sh.in | 0 build-aux/git-post-receive.sh | 5 ----- build-aux/git-pre-push.sh | 10 ---------- 5 files changed, 75 deletions(-) delete mode 100755 build-aux/ci-build.sh delete mode 100755 build-aux/ci/git-pre-push.sh mode change 100755 => 100644 build-aux/ci/git-pre-push.sh.in delete mode 100755 build-aux/git-post-receive.sh delete mode 100755 build-aux/git-pre-push.sh diff --git a/build-aux/ci-build.sh b/build-aux/ci-build.sh deleted file mode 100755 index ca678ec..0000000 --- a/build-aux/ci-build.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -eux - -PACKAGE="$1" -LOGS_PREFIX="$2" - -PREFIX="$LOGS_PREFIX/$PACKAGE" -mkdir -p "$PREFIX" -read -r _ SHA _ # oldrev newrev refname -FILENAME="$(date -Is)-$SHA.log" -LOGFILE="$PREFIX/$FILENAME" - -{ - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>> CI logs added as Git note." - } - trap finish EXIT - - unset GIT_DIR - CLONE="$(mktemp -d)" - git clone . "$CLONE" - cd "$CLONE" - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - - ./build-aux/with-container.sh './bootstrap && ./configure && make clean check distcheck public' - rm -rf "/srv/http/$PACKAGE/" && mv public/ "/srv/http/$PACKAGE/" -} | tee "$LOGFILE" 2>&1 diff --git a/build-aux/ci/git-pre-push.sh b/build-aux/ci/git-pre-push.sh deleted file mode 100755 index b7fa20a..0000000 --- a/build-aux/ci/git-pre-push.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -eux - -PACKAGE="$(basename "$PWD")" -LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" - -DESCRIPTION="$(mktemp)" -if [ -f description ] -then - cp description "$DESCRIPTION" -else - git config euandreh.description > "$DESCRIPTION" -fi - -scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" -ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" -scp build-aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" -scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/build-aux/ci/git-pre-push.sh.in b/build-aux/ci/git-pre-push.sh.in old mode 100755 new mode 100644 diff --git a/build-aux/git-post-receive.sh b/build-aux/git-post-receive.sh deleted file mode 100755 index eb8fe8f..0000000 --- a/build-aux/git-post-receive.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -eux - -PACKAGE="$(basename "$PWD" | cut -d. -f1)" -LOGS_PREFIX='/data/ci' -/data/ci/ci-build.sh "$PACKAGE" "$LOGS_PREFIX" diff --git a/build-aux/git-pre-push.sh b/build-aux/git-pre-push.sh deleted file mode 100755 index 4ce0707..0000000 --- a/build-aux/git-pre-push.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -eux - -if [ -f description ]; then - scp description git.euandreh.xyz:/data/git/dotfiles.git/description -else - git config euandreh.description | ssh git.euandreh.xyz 'cat > /data/git/dotfiles.git/description' -fi - -scp "/home/andreh/dev/libre/dotfiles/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/dotfiles.git/hooks/post-receive -scp "/home/andreh/dev/libre/dotfiles/bash/templates/build-aux/git-post-receive.sh" git.euandreh.xyz:/data/git/dotfiles.git/hooks/post-receive -- cgit v1.2.3 From f347a5844c9261e4feabe6d295d83c89f7fb43e1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:17:35 -0300 Subject: scripts/ad-hoc/yt: ShellCheck --- scripts/ad-hoc/yt | 13 +++++-------- 1 file changed, 5 insertions(+), 8 deletions(-) diff --git a/scripts/ad-hoc/yt b/scripts/ad-hoc/yt index 4489864..2d8de8d 100755 --- a/scripts/ad-hoc/yt +++ b/scripts/ad-hoc/yt @@ -44,13 +44,13 @@ inc_download() { # Always downloads video, doesn't look at the download-archive URL_OR_PATH="${1:-}" -[[ -z "${URL_OR_PATH}" ]] && { +[ -z "${URL_OR_PATH}" ] && { # shellcheck disable=2016 echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr exit 2 } -if [[ -f "${URL_OR_PATH}" ]]; then +if [ -f "${URL_OR_PATH}" ]; then echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr youtube-dl --batch-file "${URL_OR_PATH}" \ --format best \ @@ -74,9 +74,6 @@ else --get-filename)" fi -# if [[ ! -z "${VLC:-}" ]]; then -while IFS=$'\n' read -r file; do - vlc "${file}" - blue "Enqueued ${file} in VLC." -done <<<"${FILES}" -# fi +for f in $FILES; do + vlc "$f" +done -- cgit v1.2.3 From 65d54c64f1f52619e6e1c188c522e5bf0235f9ee Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:17:44 -0300 Subject: fzf.sh: ShellCheck --- bash/fzf.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/fzf.sh b/bash/fzf.sh index 2440339..1cfc040 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -38,6 +38,7 @@ fzg() { if [ -n "$fn" ]; then f="$(echo "$fn" | cut -d: -f1)" n="$(echo "$fn" | cut -d: -f2)" + # shellcheck disable=2068 history -s fzgrep $@ history -s vi "+$n" "$f" vi "+$n" "$f" @@ -47,6 +48,7 @@ fzg() { f() { file="$(git ls-files | fzf-tmux --select-1 --exit-0 --query "$2" --preview 'cat {}')" if [ -n "$file" ]; then + # shellcheck disable=2068 history -s f $@ history -s "$1" "$file" "$1" "$file" -- cgit v1.2.3 From c7d89f85390f591f1988cae3172d637751d36644 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:19:37 -0300 Subject: configuration.nix: Move FIXME markers to TODOs.txt --- nixos/configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 952b630..22ce226 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -191,7 +191,7 @@ in { nixfmt # nvi # broken, now using the one from Guix fzf - calcurse # FIXME setup calendar + calcurse pandoc ## Mail @@ -317,7 +317,7 @@ in { xdg.portal.enable = true; services = { syncthing = { - enable = true; # FIXME measure battery consumption and reconsider + enable = true; user = "andreh"; group = "users"; dataDir = "/home/andreh/.syncthing"; -- cgit v1.2.3 From bc179f84819a6cb68df1558d56b75f37ad3b19c5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:22:38 -0300 Subject: hd.sh: rsync user-data to HD --- scripts/ad-hoc/hd.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh index 4ce78d5..e977aa3 100755 --- a/scripts/ad-hoc/hd.sh +++ b/scripts/ad-hoc/hd.sh @@ -5,8 +5,7 @@ annex.sh rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ -# FIXME -# rsync -avzP --delete "$R:" ~/UTCLOUD/backups/box-ssd/ +rsync -avzP --delete euandre.org:/home/user-data/ ~/UTCLOUD/backups/box-ssd/ cd ~/dev/ mr -s -j4 hd -- cgit v1.2.3 From 09ab7abf8cdedad1f0cdf3cc1e25c0b046a9af7d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:32:31 -0300 Subject: Use C-M-l key binding --- bash/config.sh | 4 +--- tmux/tmux.conf | 5 +++++ 2 files changed, 6 insertions(+), 3 deletions(-) diff --git a/bash/config.sh b/bash/config.sh index d39637b..a8f86cb 100644 --- a/bash/config.sh +++ b/bash/config.sh @@ -52,6 +52,4 @@ shopt -s cmdhist # By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: PROMPT_COMMAND='history -a' -# FIXME: configure C-M-l readline key -# to tmux clear screen -# bind -x '"\e\C-l": c' +bind -x '"\e\C-l": c' diff --git a/tmux/tmux.conf b/tmux/tmux.conf index b685561..3d6e48f 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -67,3 +67,8 @@ set-option -gw xterm-keys on # Display pane numbers for longer # https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q set -g display-panes-time 2500 + +# Hack: duplicated readline config. +# For some reason, the readline keybinding +# works outside of Tmux but not inside it. +bind -n C-M-l send-keys "$DOTFILES/scripts/ad-hoc/c" Enter -- cgit v1.2.3 From 58f5ee615b4972e6b6c8b5eb96e8ded143ba91f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:47:25 -0300 Subject: colors.sh: Move to POSIX sh --- bash/colors.sh | 97 +++++++++++++++++++++++----------------------------------- 1 file changed, 39 insertions(+), 58 deletions(-) diff --git a/bash/colors.sh b/bash/colors.sh index 1730969..7c8cb3e 100644 --- a/bash/colors.sh +++ b/bash/colors.sh @@ -1,5 +1,5 @@ -#!/usr/bin/env bash -# shellcheck disable=1117 disable=1004 disable=2034 disable=2154 +#!/bin/sh +# shellcheck disable=2059 export end="\033[0m" export black="\033[0;30m" @@ -21,98 +21,79 @@ export lightblueb="\033[1;36m" export blacki="\033[0;90m" export bluei="\033[0;94m" - -function black { - echo -e "${black}${1}${end}" +black() { + printf "${black}${1}${end}" } -export -f black -function blackb { - echo -e "${blackb}${1}${end}" +blackb() { + printf "${blackb}${1}${end}" } -export -f blackb -function blacki { - echo -e "${blacki}${1}${end}" +blacki() { + printf "${blacki}${1}${end}" } -export -f blacki -function white { - echo -e "${white}${1}${end}" +white() { + printf "${white}${1}${end}" } -export -f white -function whiteb { - echo -e "${whiteb}${1}${end}" +whiteb() { + printf "${whiteb}${1}${end}" } -export -f whiteb -function red { - echo -e "${red}${1}${end}" +red() { + printf "${red}${1}${end}" } -export -f red -function redb { - echo -e "${redb}${1}${end}" +redb() { + printf "${redb}${1}${end}" } -export -f redb -function green { - echo -e "${green}${1}${end}" +green() { + printf "${green}${1}${end}" } -export -f green -function greenb { - echo -e "${greenb}${1}${end}" +greenb() { + printf "${greenb}${1}${end}" } -export -f greenb -function yellow { - echo -e "${yellow}${1}${end}" +yellow() { + printf "${yellow}${1}${end}" } -export -f yellow -function yellowb { - echo -e "${yellowb}${1}${end}" +yellowb() { + printf "${yellowb}${1}${end}" } -export -f yellowb -function blue { - echo -e "${blue}${1}${end}" +blue() { + printf "${blue}${1}${end}" } -export -f blue -function blueb { - echo -e "${blueb}${1}${end}" +blueb() { + printf "${blueb}${1}${end}" } -export -f blueb -function bluei { - echo -e "${bluei}${1}${end}" +bluei() { + printf "${bluei}${1}${end}" } -export -f bluei -function purple { - echo -e "${purple}${1}${end}" +purple() { + printf "${purple}${1}${end}" } -export -f purple -function purpleb { - echo -e "${purpleb}${1}${end}" +purpleb() { + printf "${purpleb}${1}${end}" } -export -f purpleb -function lightblue { - echo -e "${lightblue}${1}${end}" +lightblue() { + printf "${lightblue}${1}${end}" } -export -f lightblue -function lightblueb { - echo -e "${lightblueb}${1}${end}" +lightblueb() { + printf "${lightblueb}${1}${end}" } -export -f lightblueb -function colors { +colors() { black "black" blackb "blackb" white "white" -- cgit v1.2.3 From 5aa15e5382f2ea59c7754d8e608ca87a80ed6f95 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 08:59:56 -0300 Subject: Remove duplicate LICENSE file --- LICENSE | 661 ---------------------------------------------------------------- 1 file changed, 661 deletions(-) delete mode 100644 LICENSE diff --git a/LICENSE b/LICENSE deleted file mode 100644 index be3f7b2..0000000 --- a/LICENSE +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. -- cgit v1.2.3 From 244d273e46a9c68278d56a2af9de95a2871be849 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 11:38:42 -0300 Subject: tmux.conf: Don't add the clear command to the shell history --- tmux/tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 3d6e48f..52d6b51 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -71,4 +71,4 @@ set -g display-panes-time 2500 # Hack: duplicated readline config. # For some reason, the readline keybinding # works outside of Tmux but not inside it. -bind -n C-M-l send-keys "$DOTFILES/scripts/ad-hoc/c" Enter +bind -n C-M-l send-keys " $DOTFILES/scripts/ad-hoc/c" Enter -- cgit v1.2.3 From 9fe49a80ccefbb3f8deb0ba57306730521369c8f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 22:33:38 -0300 Subject: fzf.sh: Fix command being added to history --- bash/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index 1cfc040..f7640b8 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -39,7 +39,7 @@ fzg() { f="$(echo "$fn" | cut -d: -f1)" n="$(echo "$fn" | cut -d: -f2)" # shellcheck disable=2068 - history -s fzgrep $@ + history -s fzg $@ history -s vi "+$n" "$f" vi "+$n" "$f" fi -- cgit v1.2.3 From 189e39881981ce137147c42d5fb4f221badf1516 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 22:34:02 -0300 Subject: exrc.conf: Add ruler and showmode configurations --- exrc.conf | 2 ++ 1 file changed, 2 insertions(+) diff --git a/exrc.conf b/exrc.conf index 9a89f01..f369a38 100644 --- a/exrc.conf +++ b/exrc.conf @@ -2,3 +2,5 @@ set autoindent set tabstop=2 set shiftwidth=2 +set ruler +set showmode -- cgit v1.2.3 From 3b6b7f68c096ffcf485abb37f78a1e1f26149aa9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 22:34:56 -0300 Subject: dmenu-emoji.sh: Fix script to work from any path --- scripts/ad-hoc/dmenu-emoji.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/scripts/ad-hoc/dmenu-emoji.sh b/scripts/ad-hoc/dmenu-emoji.sh index e03af07..11f8ab4 100755 --- a/scripts/ad-hoc/dmenu-emoji.sh +++ b/scripts/ad-hoc/dmenu-emoji.sh @@ -3,9 +3,11 @@ # Derived from: # https://github.com/porras/dmenu-emoji +LIST="$HOME/dev/libre/dotfiles/scripts/ad-hoc/emoji-list.txt" + dmenu \ -l 20 \ -i \ -p 'Emoji: ' -fn Monospace-18 \ - < emoji-list.txt \ + < "$LIST" \ | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip -- cgit v1.2.3 From c79c9c2d3e542f786390f2a11852abeb0f8518b7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 22:35:23 -0300 Subject: tmux.conf: Change moving keybindings --- tmux/tmux.conf | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index 52d6b51..f2acfa8 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -16,10 +16,10 @@ bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -select bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" # Moving around panes -bind-key -n C-M-h select-pane -L -bind-key -n C-M-j select-pane -D -bind-key -n C-M-k select-pane -U -bind-key -n C-M-l select-pane -R +bind-key -n M-h select-pane -L +bind-key -n M-j select-pane -D +bind-key -n M-k select-pane -U +bind-key -n M-l select-pane -R # Resizing panes bind-key -n M-H resize-pane -L 5 -- cgit v1.2.3 From c0aeaa5f374f861b6ffb558ddf40ab53c27bdb92 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 22:36:28 -0300 Subject: os.scm: Add fzf, openssh, xmodmap and setxkbmap packages --- guix/os.scm | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/guix/os.scm b/guix/os.scm index 0925425..ba0389f 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -88,10 +88,11 @@ xsel pinentry nvi - ;; fzf + go-github-com-junegunn-fzf autojump calcurse pandoc + openssh ;; Mail notmuch @@ -131,6 +132,8 @@ arandr alsa-utils ; for xmonad volume controls xset + xmodmap + setxkbmap ;; GUI programs audacity -- cgit v1.2.3 From 6f345d08c4dd4aa7b9f0bac3488fac9351511343 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 15 Jan 2021 22:42:00 -0300 Subject: fake-symlinks: TODOs.org -> TODOs.rst --- bash/templates/..gitignore | 6 +----- bash/templates/build-aux/assert-todos.sh | 10 +++++----- bash/templates/build-aux/html-files-from-sources.am | 2 +- 3 files changed, 7 insertions(+), 11 deletions(-) diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore index 91cd32b..88a8afc 100644 --- a/bash/templates/..gitignore +++ b/bash/templates/..gitignore @@ -42,9 +42,5 @@ autom4te.cache /doc/dictionaries/all.txt -# TODOs.org -/tasks-and-bugs.org -/tasks-and-bugs.html -/tasks-and-bugs.html~ + /public/ -/build-aux/workflow/preamble.org \ No newline at end of file diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh index 3fe513a..ebed4e8 100755 --- a/bash/templates/build-aux/assert-todos.sh +++ b/bash/templates/build-aux/assert-todos.sh @@ -1,22 +1,22 @@ #!/bin/sh -eu -if git grep FIXME | grep -v '^TODOs.org' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then +if git grep FIXME | grep -v '^TODOs.rst' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.org." + echo "You should write them down properly on TODOs.rst." exit 1 fi KNOWN_IDS='' has_error=0 # shellcheck disable=2013 -for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.org | grep -nE '^\*\* .*$' | cut -d: -f1); do - if sed "${todo}q;d" TODOs.org | grep -qE '^\*\* (CANCELLED|DONE)'; then +for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.rst | grep -nE '^\*\* .*$' | cut -d: -f1); do + if sed "${todo}q;d" TODOs.rst | grep -qE '^\*\* (CANCELLED|DONE)'; then ID_OFFSET=3 else ID_OFFSET=2 fi line_n="$((todo+ID_OFFSET))" - ID_LINE="$(sed "${line_n}q;d" TODOs.org)" + ID_LINE="$(sed "${line_n}q;d" TODOs.rst)" if echo "$ID_LINE" | grep -q '^:CUSTOM_ID: .*$'; then ID="$(echo "$ID_LINE" | awk '{print $2}')" if echo "$KNOWN_IDS" | grep -q "$ID"; then diff --git a/bash/templates/build-aux/html-files-from-sources.am b/bash/templates/build-aux/html-files-from-sources.am index 1561045..3f335ed 100644 --- a/bash/templates/build-aux/html-files-from-sources.am +++ b/bash/templates/build-aux/html-files-from-sources.am @@ -16,7 +16,7 @@ doc/dictionaries/all.txt: $(DICTIONARIES) exit 1; \ } -public: README TODOs.org $(DOC_SRCS) doc/dictionaries/all.txt +public: README TODOs.rst $(DOC_SRCS) doc/dictionaries/all.txt $(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS) $(srcdir)/build-aux/generate-tasks-and-bugs.sh -- cgit v1.2.3 From a0b212cf4210e8623dcd0bf2762b6ec891f46d28 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 01:14:59 -0300 Subject: util.sh: Add task() function --- bash/util.sh | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/bash/util.sh b/bash/util.sh index 739ee3a..a64afae 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -30,3 +30,13 @@ genpassword() { t() { expand "$1" -t2 | sponge "$1" } + +task() { + TITLE="TODO ${1:-FIXME}" + DASHES="$(echo "$TITLE" | sed -e 's/./-/g')" + printf '.. _%s:\n\n%s\n%s\n- TODO in %s\n\n----\n\nFIXME\n' \ + "$(uuidgen)" "$TITLE" "$DASHES" "$(date -I)" | \ + vipe | \ + printf '%s\n\n%s\n%s\n' "$(head -n2 TODOs.rst)" "$(cat -)" "$(tail -n+3 TODOs.rst)" | \ + sponge TODOs.rst +} -- cgit v1.2.3 From 21390ab1f43eb98ee0e0ed8fd6a03fa43aff8746 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 08:31:20 -0300 Subject: tmux.conf: Remove "C-M-l" hack --- tmux/tmux.conf | 5 ----- 1 file changed, 5 deletions(-) diff --git a/tmux/tmux.conf b/tmux/tmux.conf index f2acfa8..866fb9b 100644 --- a/tmux/tmux.conf +++ b/tmux/tmux.conf @@ -67,8 +67,3 @@ set-option -gw xterm-keys on # Display pane numbers for longer # https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q set -g display-panes-time 2500 - -# Hack: duplicated readline config. -# For some reason, the readline keybinding -# works outside of Tmux but not inside it. -bind -n C-M-l send-keys " $DOTFILES/scripts/ad-hoc/c" Enter -- cgit v1.2.3 From 6cd9ab306bdcab3ab14815e44d36bbceee1b6590 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 08:34:57 -0300 Subject: gc-nix.sh: Source colors.sh --- scripts/ad-hoc/gc-nix.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/gc-nix.sh b/scripts/ad-hoc/gc-nix.sh index 99d3ad9..1060909 100755 --- a/scripts/ad-hoc/gc-nix.sh +++ b/scripts/ad-hoc/gc-nix.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +. "$DOTFILES/bash/colors.sh" yellow "Cleaning up the NixOS store" profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) -- cgit v1.2.3 From 6f9e1114122afb047ede8392c1def037c104aac4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 09:03:27 -0300 Subject: fake-symlinks: Add lang metadata and syntax highlighting to the generated TODOs.html --- bash/templates/build-aux/workflow/TODOs.sh | 11 +++++++---- bash/templates/build-aux/workflow/preamble.rst | 2 +- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh index 036ce13..f080001 100755 --- a/bash/templates/build-aux/workflow/TODOs.sh +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -8,7 +8,10 @@ export MAILING_LIST="$3" envsubst < build-aux/workflow/preamble.rst | \ cat - TODOs.rst | \ - pandoc --toc \ - --toc-depth=2 \ - -s --metadata title="$1 - TODOs" \ - -r rst -w html > public/TODOs.html + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$1 - TODOs" \ + --metadata lang=en \ + -r rst -w html > public/TODOs.html diff --git a/bash/templates/build-aux/workflow/preamble.rst b/bash/templates/build-aux/workflow/preamble.rst index 45688aa..87e22ae 100644 --- a/bash/templates/build-aux/workflow/preamble.rst +++ b/bash/templates/build-aux/workflow/preamble.rst @@ -3,7 +3,7 @@ About TODOs for $PROJECT_UC. -See `$PROJECT.euandreh.xyz`_. +See also `$PROJECT.euandreh.xyz`_. Register a new one: `~euandreh/$MAILING_LIST@lists.sr.ht`_. -- cgit v1.2.3 From f62c9713b9c19447d99a908bc29ee1ed57e88821 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 09:07:23 -0300 Subject: fake-symlinks: Add stub "commit" role to preamble.rst --- bash/templates/build-aux/workflow/preamble.rst | 2 ++ 1 file changed, 2 insertions(+) diff --git a/bash/templates/build-aux/workflow/preamble.rst b/bash/templates/build-aux/workflow/preamble.rst index 87e22ae..caa50e6 100644 --- a/bash/templates/build-aux/workflow/preamble.rst +++ b/bash/templates/build-aux/workflow/preamble.rst @@ -16,3 +16,5 @@ Register a new one: `~euandreh/$MAILING_LIST@lists.sr.ht`_. .. _`$PROJECT.euandreh.xyz`: https://$PROJECT.euandreh.xyz/ .. _`~euandreh/$MAILING_LIST@lists.sr.ht`: mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E +.. role:: commit + -- cgit v1.2.3 From a5e9d4ce389a8a1de058386061561320198ea02d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 09:47:20 -0300 Subject: symlinks.sh: TODOs.org.txt -> TODOs.md --- bash/symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 38f0aef..70927ad 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -20,7 +20,7 @@ ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc -ln -f "$HOME/Sync/TODOs.org.txt" "$HOME/annex/TODOs.org" +ln -f "$HOME/Sync/TODOs.md" "$HOME/annex/TODOs.md" mkdir -p ~/tmp/ touch ~/tmp/scratch.txt -- cgit v1.2.3 From 961a8ed4b63a3e25c86b774804c3ab6bcba04dca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 09:49:52 -0300 Subject: Remove personal tmuxinator templates --- tmux/projects/annex.yml | 18 ------------------ tmux/projects/nautilus.yml | 9 --------- 2 files changed, 27 deletions(-) delete mode 100644 tmux/projects/annex.yml delete mode 100644 tmux/projects/nautilus.yml diff --git a/tmux/projects/annex.yml b/tmux/projects/annex.yml deleted file mode 100644 index d61155f..0000000 --- a/tmux/projects/annex.yml +++ /dev/null @@ -1,18 +0,0 @@ -name: annex+home - -windows: - - annex+dotfiles: - root: ~/annex/ - layout: main-vertical - panes: - - misc: - - cd - - dotfiles: - - cd "$DOTFILES" && git status - - sleep 10 - - reload - - website: - - cd ~/dev/libre/website/ - - nix-shell - - annex: - - git status diff --git a/tmux/projects/nautilus.yml b/tmux/projects/nautilus.yml deleted file mode 100644 index 1c4c777..0000000 --- a/tmux/projects/nautilus.yml +++ /dev/null @@ -1,9 +0,0 @@ -name: nautilus-like - -windows: - - nautilus-like: - root: ~/ - layout: main-vertical - panes: - - misc: - - ranger -- cgit v1.2.3 From 2d0c4553ff83d06f991fae9040954d1e76036c21 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 09:51:49 -0300 Subject: git mv tmux/tmux.conf tmux.conf --- bash/fake-symlinks.sh | 6 ----- bash/symlinks.sh | 4 +-- tmux.conf | 69 +++++++++++++++++++++++++++++++++++++++++++++++++++ tmux/tmux.conf | 69 --------------------------------------------------- 4 files changed, 71 insertions(+), 77 deletions(-) create mode 100644 tmux.conf delete mode 100644 tmux/tmux.conf diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 5fcca0b..60c62d8 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,11 +1,5 @@ #!/usr/bin/env bash -mkdir -p ~/.tmuxinator - -for template in "${DOTFILES}"/tmux/projects/*; do - cp "${template}" "${HOME}/.tmuxinator/$(basename "$template")" -done - mkdir -p ~/.mozilla/native-messaging-hosts/ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 70927ad..7d1a0f0 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -34,10 +34,10 @@ ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls MEDIA_PREFIX=/run/media/andreh upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD -upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER +upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER ## tmux -ln -fs "$DOTFILES/tmux/tmux.conf" ~/.tmux.conf +ln -fs "$DOTFILES/tmux.conf" ~/.tmux.conf ## Emacs mkdir -p "$HOME/.emacs.d/private/layers/" diff --git a/tmux.conf b/tmux.conf new file mode 100644 index 0000000..866fb9b --- /dev/null +++ b/tmux.conf @@ -0,0 +1,69 @@ +# Instead of using "C-b" as a prefix, use "C-v" +unbind C-b +set -g prefix C-v + +# Turn on mouse mode +# https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ +# https://github.com/tmux/tmux/blob/310f0a960ca64fa3809545badc629c0c166c6cd2/CHANGES#L12 +set -g mouse on + +# Bind "C-x r" to reload the configuration file +bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" + +# Holy answer that properly implements copying from tmux! +# https://unix.stackexchange.com/a/349020/276661 +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" +bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" + +# Moving around panes +bind-key -n M-h select-pane -L +bind-key -n M-j select-pane -D +bind-key -n M-k select-pane -U +bind-key -n M-l select-pane -R + +# Resizing panes +bind-key -n M-H resize-pane -L 5 +bind-key -n M-J resize-pane -D 5 +bind-key -n M-K resize-pane -U 5 +bind-key -n M-L resize-pane -R 5 + +# "C-x m" to actually clear the pane history +bind-key m send-keys -R \; clear-history + +# Keybinding to activate pane typing sync +# https://stackoverflow.com/questions/25909964/tmux-how-to-toggle-on-and-off-options-with-the-same-key +bind-key b setw synchronize-panes \; display-message "synchronize-panes toggle" + +setw -g mode-keys vi # Move around with vi keys +set-option -g status-key "vi" # Use vi mode for status bar command (like after typing "C-x [" one can search with "/") +set-option -g status-bg "#666666" # Status bar background color +set-option -g status-fg "#aaaaaa" # Status bar foreground color +set-option -g status-left-length 50 # session name in status bar length =[annex]= part +set-option -g history-limit 150000 # How many lines of history to keep + +# Set the panes initial index value to 1 instead of 0 +# 0 is too far from ` ;) +set -g base-index 1 +set-window-option -g pane-base-index 1 + +# Set key to re-order current window to the first position +bind-key P swap-window -t 1 + +# Automatically set window title +set-window-option -g automatic-rename on +set-option -g set-titles on + +# Set "correct term" +# https://wiki.archlinux.org/index.php/Tmux +set -g default-terminal screen-256color + +# No delay for escape key press +# https://mutelight.org/practical-tmux#faster-command-sequences +set -sg escape-time 0 + +# Enable arrow key navigation +set-option -gw xterm-keys on + +# Display pane numbers for longer +# https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q +set -g display-panes-time 2500 diff --git a/tmux/tmux.conf b/tmux/tmux.conf deleted file mode 100644 index 866fb9b..0000000 --- a/tmux/tmux.conf +++ /dev/null @@ -1,69 +0,0 @@ -# Instead of using "C-b" as a prefix, use "C-v" -unbind C-b -set -g prefix C-v - -# Turn on mouse mode -# https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ -# https://github.com/tmux/tmux/blob/310f0a960ca64fa3809545badc629c0c166c6cd2/CHANGES#L12 -set -g mouse on - -# Bind "C-x r" to reload the configuration file -bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" - -# Holy answer that properly implements copying from tmux! -# https://unix.stackexchange.com/a/349020/276661 -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" -bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" - -# Moving around panes -bind-key -n M-h select-pane -L -bind-key -n M-j select-pane -D -bind-key -n M-k select-pane -U -bind-key -n M-l select-pane -R - -# Resizing panes -bind-key -n M-H resize-pane -L 5 -bind-key -n M-J resize-pane -D 5 -bind-key -n M-K resize-pane -U 5 -bind-key -n M-L resize-pane -R 5 - -# "C-x m" to actually clear the pane history -bind-key m send-keys -R \; clear-history - -# Keybinding to activate pane typing sync -# https://stackoverflow.com/questions/25909964/tmux-how-to-toggle-on-and-off-options-with-the-same-key -bind-key b setw synchronize-panes \; display-message "synchronize-panes toggle" - -setw -g mode-keys vi # Move around with vi keys -set-option -g status-key "vi" # Use vi mode for status bar command (like after typing "C-x [" one can search with "/") -set-option -g status-bg "#666666" # Status bar background color -set-option -g status-fg "#aaaaaa" # Status bar foreground color -set-option -g status-left-length 50 # session name in status bar length =[annex]= part -set-option -g history-limit 150000 # How many lines of history to keep - -# Set the panes initial index value to 1 instead of 0 -# 0 is too far from ` ;) -set -g base-index 1 -set-window-option -g pane-base-index 1 - -# Set key to re-order current window to the first position -bind-key P swap-window -t 1 - -# Automatically set window title -set-window-option -g automatic-rename on -set-option -g set-titles on - -# Set "correct term" -# https://wiki.archlinux.org/index.php/Tmux -set -g default-terminal screen-256color - -# No delay for escape key press -# https://mutelight.org/practical-tmux#faster-command-sequences -set -sg escape-time 0 - -# Enable arrow key navigation -set-option -gw xterm-keys on - -# Display pane numbers for longer -# https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q -set -g display-panes-time 2500 -- cgit v1.2.3 From a009875f82102244b915926689a8d4c6b4b2b676 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 10:51:02 -0300 Subject: tmux.conf: Change prefix --- tmux.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/tmux.conf b/tmux.conf index 866fb9b..bd9cdeb 100644 --- a/tmux.conf +++ b/tmux.conf @@ -1,6 +1,6 @@ -# Instead of using "C-b" as a prefix, use "C-v" +# Use personal prefix over "C-b" unbind C-b -set -g prefix C-v +set -g prefix C-s # Turn on mouse mode # https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ -- cgit v1.2.3 From 02e944cd22f94493ae360f0475a4bcb2164521d2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 10:57:36 -0300 Subject: bash/aliases.sh: better use of the "td" alias --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 9ccb3a6..6d8e4b7 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -38,7 +38,7 @@ alias r="source ~/.bashrc" alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" alias grep='grep --color=always' -alias td='pushd $(mktemp -d)' +alias td='vi ~/Sync/TODOs.md' # https://linuxhandbook.com/run-alias-as-sudo/ alias sudo='sudo ' -- cgit v1.2.3 From 5441cc2d0b7d4509705c7840292cb2e821877e51 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 11:08:21 -0300 Subject: tmux.conf: Revert prefix --- tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.conf b/tmux.conf index bd9cdeb..fee8739 100644 --- a/tmux.conf +++ b/tmux.conf @@ -1,6 +1,6 @@ # Use personal prefix over "C-b" unbind C-b -set -g prefix C-s +set -g prefix C-v # Turn on mouse mode # https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ -- cgit v1.2.3 From fe4d97457a790230294b6da3273d6caeaf367257 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 11:11:28 -0300 Subject: scripts/ad-hoc/gc-nix.sh: ShellCheck --- scripts/ad-hoc/gc-nix.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/ad-hoc/gc-nix.sh b/scripts/ad-hoc/gc-nix.sh index 1060909..056c1eb 100755 --- a/scripts/ad-hoc/gc-nix.sh +++ b/scripts/ad-hoc/gc-nix.sh @@ -1,6 +1,7 @@ #!/usr/bin/env bash set -Eeuo pipefail +# shellcheck source=/dev/null . "$DOTFILES/bash/colors.sh" yellow "Cleaning up the NixOS store" -- cgit v1.2.3 From bd646704e89439cfc3440639bf1ca9cd7e783e51 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 11:12:44 -0300 Subject: build-aux/assert-todos.sh: Ignore bash/util.sh --- build-aux/assert-todos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index 5657f7e..9591c26 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,6 +1,6 @@ #!/bin/sh -eux -if git grep FIXME | grep -Ev '^(bash/templates/|build-aux/assert-todos.sh|scripts/ad-hoc/pastebin.sh)'; then +if git grep FIXME | grep -Ev '^(bash/templates/|build-aux/assert-todos.sh|scripts/ad-hoc/pastebin.sh|bash/util.sh)'; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." exit 1 -- cgit v1.2.3 From ff754c71b3ae19ee023d1883176f021d04cd06ef Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 11:16:15 -0300 Subject: bash/symlinks.sh: Remove TODOs.md --- bash/symlinks.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 7d1a0f0..19679a2 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -20,7 +20,6 @@ ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc -ln -f "$HOME/Sync/TODOs.md" "$HOME/annex/TODOs.md" mkdir -p ~/tmp/ touch ~/tmp/scratch.txt -- cgit v1.2.3 From d1ef24543136a714ffd894615febc6c94fe2ec6b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 11:35:17 -0300 Subject: Add scripts/ad-hoc/vlc --- bash/symlinks.sh | 2 +- scripts/ad-hoc/vlc | 21 +++++++++++++++++++++ spacemacs.el | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) create mode 100755 scripts/ad-hoc/vlc diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 19679a2..cd25465 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -20,7 +20,7 @@ ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc -mkdir -p ~/tmp/ +mkdir -p ~/tmp/ ~/archive/vlc/ touch ~/tmp/scratch.txt mkdir -p ~/.gnupg diff --git a/scripts/ad-hoc/vlc b/scripts/ad-hoc/vlc new file mode 100755 index 0000000..8570b53 --- /dev/null +++ b/scripts/ad-hoc/vlc @@ -0,0 +1,21 @@ +#!/bin/sh -eu + +NIX=/run/current-system/sw/bin/vlc +GUIX=/run/current-system/profile/bin/vlc + +if [ -e "$NIX" ]; then + VLC="$NIX" +elif [ -e "$GUIX" ]; then + VLC="$GUIX" +else + echo "Can't guess VLC executable" + exit 1 +fi + +if [ -z "${1:-}" ]; then + "$VLC" +else + "$VLC" "$1" + echo "$1" >> ~/archive/vlc/queue.txt +fi + diff --git a/spacemacs.el b/spacemacs.el index a66702d..8294b1b 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -807,7 +807,7 @@ through `notmuch-message-attach-regex'." "annex/bin/misc/mail/notmuch-post.sh" "annex/bin/misc/mail/notmuch.el" "tmp/scratch.txt" - "Sync/playlist.txt" + "archive/vlc/playlist.txt" "annex/txt/Meeting Notes.org" "dev/libre/others/dinheiros/money.ledger") :action '(("Find file" . (lambda (f) -- cgit v1.2.3 From ae3dca2873fa9707ebbeb351986ee0e9d3b2d6f6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 11:47:42 -0300 Subject: guix/os.scm: Add festival for TTS --- guix/os.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/guix/os.scm b/guix/os.scm index ba0389f..7361cd0 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -93,6 +93,7 @@ calcurse pandoc openssh + festival ;; TTS software ;; Mail notmuch -- cgit v1.2.3 From 9b35ea3e28b0a0497095b3164e0742460cf9d583 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 14:13:04 -0300 Subject: Move from TODOs.rst to TODOs.md --- bash/fake-symlinks.sh | 5 ++- bash/templates/TODOs.md | 12 ++++++ bash/templates/TODOs.rst | 12 ------ bash/templates/build-aux/assert-todos.sh | 10 ++--- .../templates/build-aux/html-files-from-sources.am | 2 +- bash/templates/build-aux/workflow/TODOs.sh | 19 ++++---- bash/templates/build-aux/workflow/preamble.md | 15 +++++++ bash/templates/build-aux/workflow/preamble.rst | 20 --------- bash/templates/build-aux/workflow/style.css | 50 ++++++++++++++++++++++ bash/util.sh | 4 +- 10 files changed, 98 insertions(+), 51 deletions(-) create mode 100644 bash/templates/TODOs.md delete mode 100644 bash/templates/TODOs.rst create mode 100644 bash/templates/build-aux/workflow/preamble.md delete mode 100644 bash/templates/build-aux/workflow/preamble.rst create mode 100644 bash/templates/build-aux/workflow/style.css diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 60c62d8..1790254 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -189,9 +189,10 @@ ln-build-aux() { cp-all build-aux/assert-todos.sh \ build-aux/assert-shellcheck.sh \ build-aux/workflow/TODOs.sh \ - build-aux/workflow/preamble.rst + build-aux/workflow/style.css \ + build-aux/workflow/preamble.md - cp-if-not TODOs.rst + cp-if-not TODOs.md } ln-agpl() { diff --git a/bash/templates/TODOs.md b/bash/templates/TODOs.md new file mode 100644 index 0000000..4b0c4a9 --- /dev/null +++ b/bash/templates/TODOs.md @@ -0,0 +1,12 @@ +* Tasks +:PROPERTIES: +:CUSTOM_ID: tasks +:END: +* Bugs +:PROPERTIES: +:CUSTOM_ID: bugs +:END: +* Improvements +* Questions +* Resources +* Scratch diff --git a/bash/templates/TODOs.rst b/bash/templates/TODOs.rst deleted file mode 100644 index 4b0c4a9..0000000 --- a/bash/templates/TODOs.rst +++ /dev/null @@ -1,12 +0,0 @@ -* Tasks -:PROPERTIES: -:CUSTOM_ID: tasks -:END: -* Bugs -:PROPERTIES: -:CUSTOM_ID: bugs -:END: -* Improvements -* Questions -* Resources -* Scratch diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh index ebed4e8..ce6c95b 100755 --- a/bash/templates/build-aux/assert-todos.sh +++ b/bash/templates/build-aux/assert-todos.sh @@ -1,22 +1,22 @@ #!/bin/sh -eu -if git grep FIXME | grep -v '^TODOs.rst' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then +if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.rst." + echo "You should write them down properly on TODOs.md." exit 1 fi KNOWN_IDS='' has_error=0 # shellcheck disable=2013 -for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.rst | grep -nE '^\*\* .*$' | cut -d: -f1); do - if sed "${todo}q;d" TODOs.rst | grep -qE '^\*\* (CANCELLED|DONE)'; then +for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.md | grep -nE '^\*\* .*$' | cut -d: -f1); do + if sed "${todo}q;d" TODOs.md | grep -qE '^\*\* (CANCELLED|DONE)'; then ID_OFFSET=3 else ID_OFFSET=2 fi line_n="$((todo+ID_OFFSET))" - ID_LINE="$(sed "${line_n}q;d" TODOs.rst)" + ID_LINE="$(sed "${line_n}q;d" TODOs.md)" if echo "$ID_LINE" | grep -q '^:CUSTOM_ID: .*$'; then ID="$(echo "$ID_LINE" | awk '{print $2}')" if echo "$KNOWN_IDS" | grep -q "$ID"; then diff --git a/bash/templates/build-aux/html-files-from-sources.am b/bash/templates/build-aux/html-files-from-sources.am index 3f335ed..db073f3 100644 --- a/bash/templates/build-aux/html-files-from-sources.am +++ b/bash/templates/build-aux/html-files-from-sources.am @@ -16,7 +16,7 @@ doc/dictionaries/all.txt: $(DICTIONARIES) exit 1; \ } -public: README TODOs.rst $(DOC_SRCS) doc/dictionaries/all.txt +public: README TODOs.md $(DOC_SRCS) doc/dictionaries/all.txt $(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS) $(srcdir)/build-aux/generate-tasks-and-bugs.sh diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh index f080001..b8a3f29 100755 --- a/bash/templates/build-aux/workflow/TODOs.sh +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -6,12 +6,13 @@ export PROJECT_UC="$1" export PROJECT="$2" export MAILING_LIST="$3" -envsubst < build-aux/workflow/preamble.rst | \ - cat - TODOs.rst | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$1 - TODOs" \ - --metadata lang=en \ - -r rst -w html > public/TODOs.html +envsubst < build-aux/workflow/preamble.md | \ + cat - TODOs.md | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$1 - TODOs" \ + --metadata lang=en \ + -H build-aux/workflow/style.css \ + -r markdown -w html > public/TODOs.html diff --git a/bash/templates/build-aux/workflow/preamble.md b/bash/templates/build-aux/workflow/preamble.md new file mode 100644 index 0000000..ac75d9d --- /dev/null +++ b/bash/templates/build-aux/workflow/preamble.md @@ -0,0 +1,15 @@ +# About + +TODOs for $PROJECT_UC. + +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). + +Register a new one: +[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E). + +*Você também pode escrever em português*. + +*Vous pouvez aussi écrire en français*. + +*Vi povas ankaŭ skribi esperante*. + diff --git a/bash/templates/build-aux/workflow/preamble.rst b/bash/templates/build-aux/workflow/preamble.rst deleted file mode 100644 index caa50e6..0000000 --- a/bash/templates/build-aux/workflow/preamble.rst +++ /dev/null @@ -1,20 +0,0 @@ -About -===== - -TODOs for $PROJECT_UC. - -See also `$PROJECT.euandreh.xyz`_. - -Register a new one: `~euandreh/$MAILING_LIST@lists.sr.ht`_. - -*Você também pode escrever em português.* - -*Vous pouvez aussi écrire en français.* - -*Vi povas ankaŭ skribi esperante.* - -.. _`$PROJECT.euandreh.xyz`: https://$PROJECT.euandreh.xyz/ -.. _`~euandreh/$MAILING_LIST@lists.sr.ht`: mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E - -.. role:: commit - diff --git a/bash/templates/build-aux/workflow/style.css b/bash/templates/build-aux/workflow/style.css new file mode 100644 index 0000000..b68ff70 --- /dev/null +++ b/bash/templates/build-aux/workflow/style.css @@ -0,0 +1,50 @@ + diff --git a/bash/util.sh b/bash/util.sh index a64afae..79917a6 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -37,6 +37,6 @@ task() { printf '.. _%s:\n\n%s\n%s\n- TODO in %s\n\n----\n\nFIXME\n' \ "$(uuidgen)" "$TITLE" "$DASHES" "$(date -I)" | \ vipe | \ - printf '%s\n\n%s\n%s\n' "$(head -n2 TODOs.rst)" "$(cat -)" "$(tail -n+3 TODOs.rst)" | \ - sponge TODOs.rst + printf '%s\n\n%s\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ + sponge TODOs.md } -- cgit v1.2.3 From f7d6e609c04ba13c9332544e09dbc93a1f7d5339 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 14:47:36 -0300 Subject: bash/util.sh: Change task() to output markdown --- bash/util.sh | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/bash/util.sh b/bash/util.sh index 79917a6..c227da3 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -32,11 +32,10 @@ t() { } task() { - TITLE="TODO ${1:-FIXME}" - DASHES="$(echo "$TITLE" | sed -e 's/./-/g')" - printf '.. _%s:\n\n%s\n%s\n- TODO in %s\n\n----\n\nFIXME\n' \ - "$(uuidgen)" "$TITLE" "$DASHES" "$(date -I)" | \ - vipe | \ - printf '%s\n\n%s\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ + TITLE="${1:-FIXME}" + printf '## %s {#task-%s}\n- TODO in %s\n\n---\n\nFIXME\n' \ + "$TITLE" "$(uuidgen)" "$(date -I)" | \ + vipe | \ + printf '%s\n\n%s\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ sponge TODOs.md } -- cgit v1.2.3 From 13c4a7227424401a4ba75946d6f07a1b0b618292 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 16:16:37 -0300 Subject: fake-symlinks.sh: TODOs.sh: Use Perl to transform TODOs.md --- bash/templates/build-aux/workflow/TODOs.sh | 8 +++++--- bash/templates/build-aux/workflow/style.css | 32 +++++++++-------------------- bash/util.sh | 4 ++-- 3 files changed, 17 insertions(+), 27 deletions(-) diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh index b8a3f29..3ccd57b 100755 --- a/bash/templates/build-aux/workflow/TODOs.sh +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -1,4 +1,4 @@ -#!/bin/sh -eux +#!/bin/sh -eu mkdir -p public @@ -6,8 +6,10 @@ export PROJECT_UC="$1" export PROJECT="$2" export MAILING_LIST="$3" -envsubst < build-aux/workflow/preamble.md | \ - cat - TODOs.md | \ +REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{(#.*?)\}$/## \1<\/span> \2 {\3}\n\3<\/a>\n/' + +envsubst < build-aux/workflow/preamble.md | \ + printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ diff --git a/bash/templates/build-aux/workflow/style.css b/bash/templates/build-aux/workflow/style.css index b68ff70..a4ac27a 100644 --- a/bash/templates/build-aux/workflow/style.css +++ b/bash/templates/build-aux/workflow/style.css @@ -3,48 +3,36 @@ background-color: #ccc; } + a.header-anchor { + opacity: 0.5; + } + /* Replicate colors from: https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866 */ - .TODO::after { - content: "TODO"; + .TODO { color: brown; } - .DOING::after { - content: "DOING"; + .DOING { color: yellowgreen; } - .WAITING::after { - content: "WAITING"; - color: gray; - } - - .MEETING::after { - content: "MEETING"; + .WAITING, .MEETING { color: gray; } - .INACTIVE::after { - content: "INACTIVE"; + .INACTIVE { color: orange; } - .NEXT::after { - content: "NEXT"; + .NEXT { color: red; } - .CANCELLED::after { - content: "CANCELLED"; - color: green; - } - - .DONE::after { - content: "DONE"; + .CANCELLED, .DONE { color: green; } diff --git a/bash/util.sh b/bash/util.sh index c227da3..e9519f5 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -33,9 +33,9 @@ t() { task() { TITLE="${1:-FIXME}" - printf '## %s {#task-%s}\n- TODO in %s\n\n---\n\nFIXME\n' \ + printf '## TODO %s {#task-%s}\n- TODO in %s\n\n---\n\nFIXME\n' \ "$TITLE" "$(uuidgen)" "$(date -I)" | \ vipe | \ - printf '%s\n\n%s\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ + printf '%s\n\n%s\n\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ sponge TODOs.md } -- cgit v1.2.3 From 541106e0f9cfb07d98babdb05660cda0c6ba99f0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 16:46:32 -0300 Subject: scripts/ad-hoc/post.sh: Load colors.sh --- scripts/ad-hoc/post.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/scripts/ad-hoc/post.sh b/scripts/ad-hoc/post.sh index 8bd47b7..25579fa 100755 --- a/scripts/ad-hoc/post.sh +++ b/scripts/ad-hoc/post.sh @@ -1,5 +1,8 @@ #!/bin/sh -eu +# shellcheck source=/dev/null +. "$DOTFILES/bash/colors.sh" + missing() { red "Missing argument <${1}>.\n" } -- cgit v1.2.3 From beeee23e5487ca642a2a8369070258b6e7206dfb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 19:12:13 -0300 Subject: scripts/cron/deliver-my-enqueued-emails.sh: Use find over for loop --- scripts/cron/deliver-my-enqueued-emails.sh | 9 +++------ 1 file changed, 3 insertions(+), 6 deletions(-) diff --git a/scripts/cron/deliver-my-enqueued-emails.sh b/scripts/cron/deliver-my-enqueued-emails.sh index ddf0ce9..371b620 100755 --- a/scripts/cron/deliver-my-enqueued-emails.sh +++ b/scripts/cron/deliver-my-enqueued-emails.sh @@ -1,8 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh -eux echo "Starting $(date -Is)" - -for f in ~/mbsync/my-queued-emails/*; do - echo "Delivering '$f'..." - ~/annex/bin/misc/mail/dispatch-email.sh "$f" && trash "$f" -done +find ~/mbsync/my-queued-emails/ -type f -exec ~/annex/bin/misc/mail/dispatch-email.sh {} && trash {} \; +echo "Done $(date -Is)" -- cgit v1.2.3 From 5852dfbbf00d8f848dc238e9c05a4a2ec7d0e69b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 20:01:46 -0300 Subject: Launch Syncthing manually instead on using the system service --- guix/os.scm | 1 + nixos/configuration.nix | 8 +------- 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/guix/os.scm b/guix/os.scm index 7361cd0..fc62b6a 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -33,6 +33,7 @@ git-open borg gnupg + syncthing ;; CLI tools groff diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 22ce226..557fb96 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -136,6 +136,7 @@ in { mr borgbackup fossil + syncthing ## CLI tools groff @@ -316,13 +317,6 @@ in { xdg.portal.enable = true; services = { - syncthing = { - enable = true; - user = "andreh"; - group = "users"; - dataDir = "/home/andreh/.syncthing"; - }; - flatpak.enable = localConfiguration.enableFlatpak; ssmtp = { enable = true; -- cgit v1.2.3 From 5bb139463a151e0ffa215fc32ca2a8c9cfa6b781 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 22:31:40 -0300 Subject: Makefile: Use sh over relying on shebang --- Makefile | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/Makefile b/Makefile index 6a213e7..5a420d3 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ .PHONY: check check: - ./build-aux/assert-nixfmt.sh - ./build-aux/assert-shellcheck.sh - ./build-aux/assert-todos.sh + sh -eux build-aux/assert-nixfmt.sh + sh -eux build-aux/assert-shellcheck.sh + sh -eux build-aux/assert-todos.sh .PHONY: clean clean: @@ -10,5 +10,5 @@ clean: .PHONY: public public: - bash ./scripts/generate-tasks-and-bugs.sh + sh -eux scripts/generate-tasks-and-bugs.sh pandoc -s --metadata title='dotfiles - EuAndreh' -c styles.css -o public/index.html README.md -- cgit v1.2.3 From 9d3f8b6d808045aefc2aebcd5ab4b032efeddb24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 22:33:16 -0300 Subject: scripts/cron/deliver-my-enqueued-emails.sh: Use explicit subshell --- scripts/cron/deliver-my-enqueued-emails.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/cron/deliver-my-enqueued-emails.sh b/scripts/cron/deliver-my-enqueued-emails.sh index 371b620..9dadf43 100755 --- a/scripts/cron/deliver-my-enqueued-emails.sh +++ b/scripts/cron/deliver-my-enqueued-emails.sh @@ -1,5 +1,5 @@ #!/bin/sh -eux echo "Starting $(date -Is)" -find ~/mbsync/my-queued-emails/ -type f -exec ~/annex/bin/misc/mail/dispatch-email.sh {} && trash {} \; +find ~/mbsync/my-queued-emails/ -type f -exec sh -c '$HOME/annex/bin/misc/mail/dispatch-email.sh "$1" && trash "$1"' _ {} \; echo "Done $(date -Is)" -- cgit v1.2.3 From cabbe11034ff4a11b380a1d9c436161dcb5ea5be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 22:50:41 -0300 Subject: bash/templates/bash/templates/build-aux/docbook-xsl/* into docbook-xsl.tar.gz --- bash/templates/build-aux/docbook-xsl.tar.gz | Bin 0 -> 5181440 bytes bash/templates/build-aux/docbook-xsl/AUTHORS | 4 - bash/templates/build-aux/docbook-xsl/COPYING | 48 - bash/templates/build-aux/docbook-xsl/VERSION.xsl | 115 - .../build-aux/docbook-xsl/common/addns.xsl | 124 - bash/templates/build-aux/docbook-xsl/common/af.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/am.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/ar.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/as.xml | 719 ---- .../templates/build-aux/docbook-xsl/common/ast.xml | 719 ---- .../docbook-xsl/common/autoidx-kimber.xsl | 43 - .../build-aux/docbook-xsl/common/autoidx-kosek.xsl | 153 - bash/templates/build-aux/docbook-xsl/common/az.xml | 731 ---- bash/templates/build-aux/docbook-xsl/common/bg.xml | 783 ---- bash/templates/build-aux/docbook-xsl/common/bn.xml | 1288 ------ .../build-aux/docbook-xsl/common/bn_in.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/bs.xml | 721 ---- .../build-aux/docbook-xsl/common/build.xml | 28 - bash/templates/build-aux/docbook-xsl/common/ca.xml | 719 ---- .../build-aux/docbook-xsl/common/charmap.xml | 182 - .../build-aux/docbook-xsl/common/charmap.xsl | 219 - .../build-aux/docbook-xsl/common/common.xml | 638 --- .../build-aux/docbook-xsl/common/common.xsl | 2126 ---------- bash/templates/build-aux/docbook-xsl/common/cs.xml | 759 ---- bash/templates/build-aux/docbook-xsl/common/cy.xml | 1304 ------ bash/templates/build-aux/docbook-xsl/common/da.xml | 723 ---- bash/templates/build-aux/docbook-xsl/common/de.xml | 725 ---- bash/templates/build-aux/docbook-xsl/common/el.xml | 788 ---- bash/templates/build-aux/docbook-xsl/common/en.xml | 1288 ------ .../build-aux/docbook-xsl/common/entities.ent | 65 - bash/templates/build-aux/docbook-xsl/common/eo.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/es.xml | 735 ---- bash/templates/build-aux/docbook-xsl/common/et.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/eu.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/fa.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/fi.xml | 729 ---- bash/templates/build-aux/docbook-xsl/common/fr.xml | 749 ---- bash/templates/build-aux/docbook-xsl/common/ga.xml | 1288 ------ .../build-aux/docbook-xsl/common/gentext.xsl | 853 ---- bash/templates/build-aux/docbook-xsl/common/gl.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/gu.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/he.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/hi.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/hr.xml | 721 ---- bash/templates/build-aux/docbook-xsl/common/hu.xml | 737 ---- bash/templates/build-aux/docbook-xsl/common/id.xml | 1288 ------ .../build-aux/docbook-xsl/common/insertfile.xsl | 111 - bash/templates/build-aux/docbook-xsl/common/is.xml | 731 ---- bash/templates/build-aux/docbook-xsl/common/it.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/ja.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/ka.xml | 759 ---- bash/templates/build-aux/docbook-xsl/common/kn.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/ko.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/ky.xml | 791 ---- .../build-aux/docbook-xsl/common/l10n.dtd | 64 - .../build-aux/docbook-xsl/common/l10n.xml | 78 - .../build-aux/docbook-xsl/common/l10n.xsl | 596 --- bash/templates/build-aux/docbook-xsl/common/la.xml | 1288 ------ .../build-aux/docbook-xsl/common/labels.xsl | 931 ----- bash/templates/build-aux/docbook-xsl/common/lt.xml | 737 ---- bash/templates/build-aux/docbook-xsl/common/lv.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/ml.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/mn.xml | 789 ---- bash/templates/build-aux/docbook-xsl/common/mr.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/nb.xml | 1288 ------ .../templates/build-aux/docbook-xsl/common/nds.xml | 725 ---- bash/templates/build-aux/docbook-xsl/common/nl.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/nn.xml | 1288 ------ .../build-aux/docbook-xsl/common/olink.xsl | 1282 ------ bash/templates/build-aux/docbook-xsl/common/or.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/pa.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/pi.xml | 165 - bash/templates/build-aux/docbook-xsl/common/pi.xsl | 344 -- bash/templates/build-aux/docbook-xsl/common/pl.xml | 737 ---- bash/templates/build-aux/docbook-xsl/common/pt.xml | 1288 ------ .../build-aux/docbook-xsl/common/pt_br.xml | 1288 ------ .../build-aux/docbook-xsl/common/refentry.xml | 778 ---- .../build-aux/docbook-xsl/common/refentry.xsl | 1350 ------ bash/templates/build-aux/docbook-xsl/common/ro.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/ru.xml | 785 ---- bash/templates/build-aux/docbook-xsl/common/sk.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/sl.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/sq.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/sr.xml | 779 ---- .../build-aux/docbook-xsl/common/sr_Latn.xml | 738 ---- .../build-aux/docbook-xsl/common/stripns.xsl | 370 -- .../build-aux/docbook-xsl/common/subtitles.xsl | 179 - bash/templates/build-aux/docbook-xsl/common/sv.xml | 723 ---- bash/templates/build-aux/docbook-xsl/common/ta.xml | 719 ---- .../build-aux/docbook-xsl/common/table.xsl | 513 --- .../docbook-xsl/common/targetdatabase.dtd | 49 - .../build-aux/docbook-xsl/common/targets.xsl | 336 -- bash/templates/build-aux/docbook-xsl/common/te.xml | 719 ---- bash/templates/build-aux/docbook-xsl/common/th.xml | 1288 ------ .../build-aux/docbook-xsl/common/titles.xsl | 852 ---- bash/templates/build-aux/docbook-xsl/common/tl.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/tr.xml | 725 ---- bash/templates/build-aux/docbook-xsl/common/uk.xml | 785 ---- bash/templates/build-aux/docbook-xsl/common/ur.xml | 721 ---- .../build-aux/docbook-xsl/common/utility.xml | 256 -- .../build-aux/docbook-xsl/common/utility.xsl | 288 -- bash/templates/build-aux/docbook-xsl/common/vi.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/xh.xml | 1288 ------ bash/templates/build-aux/docbook-xsl/common/zh.xml | 719 ---- .../build-aux/docbook-xsl/common/zh_cn.xml | 719 ---- .../build-aux/docbook-xsl/common/zh_tw.xml | 719 ---- bash/templates/build-aux/docbook-xsl/epub/README | 88 - .../build-aux/docbook-xsl/epub/bin/dbtoepub | 76 - .../build-aux/docbook-xsl/epub/bin/lib/docbook.rb | 227 -- .../docbook-xsl/epub/bin/xslt/obfuscate.xsl | 15 - .../build-aux/docbook-xsl/epub/docbook.xsl | 1835 --------- bash/templates/build-aux/docbook-xsl/lib/build.xml | 24 - bash/templates/build-aux/docbook-xsl/lib/lib.xsl | 526 --- .../build-aux/docbook-xsl/xhtml-1_1/admon.xsl | 133 - .../docbook-xsl/xhtml-1_1/annotations.xsl | 155 - .../docbook-xsl/xhtml-1_1/autoidx-kimber.xsl | 134 - .../docbook-xsl/xhtml-1_1/autoidx-kosek.xsl | 104 - .../build-aux/docbook-xsl/xhtml-1_1/autoidx-ng.xsl | 16 - .../build-aux/docbook-xsl/xhtml-1_1/autoidx.xsl | 825 ---- .../build-aux/docbook-xsl/xhtml-1_1/autotoc.xsl | 708 ---- .../docbook-xsl/xhtml-1_1/biblio-iso690.xsl | 1295 ------ .../build-aux/docbook-xsl/xhtml-1_1/biblio.xsl | 1364 ------- .../build-aux/docbook-xsl/xhtml-1_1/block.xsl | 577 --- .../build-aux/docbook-xsl/xhtml-1_1/build.xml | 39 - .../build-aux/docbook-xsl/xhtml-1_1/callout.xsl | 204 - .../build-aux/docbook-xsl/xhtml-1_1/changebars.xsl | 73 - .../docbook-xsl/xhtml-1_1/chunk-changebars.xsl | 91 - .../build-aux/docbook-xsl/xhtml-1_1/chunk-code.xsl | 678 --- .../docbook-xsl/xhtml-1_1/chunk-common.xsl | 1606 -------- .../build-aux/docbook-xsl/xhtml-1_1/chunk.xsl | 48 - .../build-aux/docbook-xsl/xhtml-1_1/chunker.xsl | 311 -- .../build-aux/docbook-xsl/xhtml-1_1/chunkfast.xsl | 64 - .../build-aux/docbook-xsl/xhtml-1_1/chunktoc.xsl | 516 --- .../build-aux/docbook-xsl/xhtml-1_1/component.xsl | 433 -- .../build-aux/docbook-xsl/xhtml-1_1/division.xsl | 207 - .../docbook-xsl/xhtml-1_1/docbook.css.xml | 110 - .../build-aux/docbook-xsl/xhtml-1_1/docbook.xsl | 523 --- .../build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl | 324 -- .../build-aux/docbook-xsl/xhtml-1_1/footnote.xsl | 325 -- .../build-aux/docbook-xsl/xhtml-1_1/formal.xsl | 489 --- .../build-aux/docbook-xsl/xhtml-1_1/glossary.xsl | 598 --- .../build-aux/docbook-xsl/xhtml-1_1/graphics.xsl | 1524 ------- .../build-aux/docbook-xsl/xhtml-1_1/highlight.xsl | 81 - .../build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl | 316 -- .../build-aux/docbook-xsl/xhtml-1_1/html.xsl | 683 ---- .../build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl | 95 - .../build-aux/docbook-xsl/xhtml-1_1/index.xsl | 257 -- .../build-aux/docbook-xsl/xhtml-1_1/info.xsl | 41 - .../build-aux/docbook-xsl/xhtml-1_1/inline.xsl | 1550 ------- .../build-aux/docbook-xsl/xhtml-1_1/its.xsl | 103 - .../build-aux/docbook-xsl/xhtml-1_1/keywords.xsl | 31 - .../build-aux/docbook-xsl/xhtml-1_1/lists.xsl | 1206 ------ .../build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl | 86 - .../build-aux/docbook-xsl/xhtml-1_1/manifest.xsl | 17 - .../build-aux/docbook-xsl/xhtml-1_1/math.xsl | 280 -- .../build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl | 171 - .../build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl | 31 - .../build-aux/docbook-xsl/xhtml-1_1/param.xsl | 452 -- .../build-aux/docbook-xsl/xhtml-1_1/pi.xsl | 1230 ------ .../docbook-xsl/xhtml-1_1/profile-chunk-code.xsl | 660 --- .../docbook-xsl/xhtml-1_1/profile-chunk.xsl | 48 - .../docbook-xsl/xhtml-1_1/profile-docbook.xsl | 496 --- .../docbook-xsl/xhtml-1_1/profile-onechunk.xsl | 31 - .../build-aux/docbook-xsl/xhtml-1_1/publishers.xsl | 119 - .../build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl | 434 -- .../build-aux/docbook-xsl/xhtml-1_1/refentry.xsl | 312 -- .../build-aux/docbook-xsl/xhtml-1_1/sections.xsl | 557 --- .../build-aux/docbook-xsl/xhtml-1_1/synop.xsl | 1616 -------- .../build-aux/docbook-xsl/xhtml-1_1/table.xsl | 1176 ------ .../build-aux/docbook-xsl/xhtml-1_1/task.xsl | 69 - .../docbook-xsl/xhtml-1_1/titlepage.templates.xsl | 4297 -------------------- .../build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl | 1111 ----- .../build-aux/docbook-xsl/xhtml-1_1/toc.xsl | 327 -- .../build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl | 383 -- .../build-aux/docbook-xsl/xhtml-1_1/xref.xsl | 1292 ------ 175 files changed, 120556 deletions(-) create mode 100644 bash/templates/build-aux/docbook-xsl.tar.gz delete mode 100644 bash/templates/build-aux/docbook-xsl/AUTHORS delete mode 100644 bash/templates/build-aux/docbook-xsl/COPYING delete mode 100644 bash/templates/build-aux/docbook-xsl/VERSION.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/addns.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/af.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/am.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ar.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/as.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ast.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/az.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/bg.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/bn.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/bn_in.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/bs.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/build.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ca.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/charmap.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/charmap.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/common.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/common.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/cs.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/cy.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/da.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/de.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/el.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/en.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/entities.ent delete mode 100644 bash/templates/build-aux/docbook-xsl/common/eo.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/es.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/et.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/eu.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/fa.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/fi.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/fr.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ga.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/gentext.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/gl.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/gu.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/he.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/hi.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/hr.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/hu.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/id.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/insertfile.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/is.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/it.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ja.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ka.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/kn.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ko.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ky.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/l10n.dtd delete mode 100644 bash/templates/build-aux/docbook-xsl/common/l10n.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/l10n.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/la.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/labels.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/lt.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/lv.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ml.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/mn.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/mr.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/nb.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/nds.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/nl.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/nn.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/olink.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/or.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/pa.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/pi.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/pi.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/pl.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/pt.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/pt_br.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/refentry.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/refentry.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ro.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ru.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/sk.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/sl.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/sq.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/sr.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/stripns.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/subtitles.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/sv.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ta.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/table.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd delete mode 100644 bash/templates/build-aux/docbook-xsl/common/targets.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/te.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/th.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/titles.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/tl.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/tr.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/uk.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/ur.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/utility.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/utility.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/common/vi.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/xh.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/zh.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/zh_cn.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/common/zh_tw.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/epub/README delete mode 100755 bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub delete mode 100755 bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb delete mode 100644 bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/epub/docbook.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/lib/build.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/lib/lib.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx-kimber.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx-kosek.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx-ng.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autoidx.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/autotoc.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/biblio-iso690.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/biblio.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/block.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/build.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/callout.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/changebars.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk-changebars.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk-code.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk-common.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunk.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunker.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunkfast.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/chunktoc.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/component.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/division.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/docbook.css.xml delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/docbook.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl delete mode 100644 bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl diff --git a/bash/templates/build-aux/docbook-xsl.tar.gz b/bash/templates/build-aux/docbook-xsl.tar.gz new file mode 100644 index 0000000..a7a4ce6 Binary files /dev/null and b/bash/templates/build-aux/docbook-xsl.tar.gz differ diff --git a/bash/templates/build-aux/docbook-xsl/AUTHORS b/bash/templates/build-aux/docbook-xsl/AUTHORS deleted file mode 100644 index 9c3dcdc..0000000 --- a/bash/templates/build-aux/docbook-xsl/AUTHORS +++ /dev/null @@ -1,4 +0,0 @@ -The DocBook XSL stylesheets are maintained by Norman Walsh, -, and members of the DocBook Project, - - diff --git a/bash/templates/build-aux/docbook-xsl/COPYING b/bash/templates/build-aux/docbook-xsl/COPYING deleted file mode 100644 index 9553fee..0000000 --- a/bash/templates/build-aux/docbook-xsl/COPYING +++ /dev/null @@ -1,48 +0,0 @@ -Copyright ---------- -Copyright (C) 1999-2007 Norman Walsh -Copyright (C) 2003 Jiří Kosek -Copyright (C) 2004-2007 Steve Ball -Copyright (C) 2005-2014 The DocBook Project -Copyright (C) 2011-2012 O'Reilly Media - -Permission is hereby granted, free of charge, to any person -obtaining a copy of this software and associated documentation -files (the ``Software''), to deal in the Software without -restriction, including without limitation the rights to use, -copy, modify, merge, publish, distribute, sublicense, and/or -sell copies of the Software, and to permit persons to whom the -Software is furnished to do so, subject to the following -conditions: - -The above copyright notice and this permission notice shall be -included in all copies or substantial portions of the Software. - -Except as contained in this notice, the names of individuals -credited with contribution to this software shall not be used in -advertising or otherwise to promote the sale, use or other -dealings in this Software without prior written authorization -from the individuals in question. - -Any stylesheet derived from this Software that is publically -distributed will be identified with a different name and the -version strings in any derived Software will be changed so that -no possibility of confusion between the derived package and this -Software will exist. - -Warranty --------- -THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, -EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES -OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND -NONINFRINGEMENT. IN NO EVENT SHALL NORMAN WALSH OR ANY OTHER -CONTRIBUTOR BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, -WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING -FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR -OTHER DEALINGS IN THE SOFTWARE. - -Contacting the Author ---------------------- -The DocBook XSL stylesheets are maintained by Norman Walsh, -, and members of the DocBook Project, - diff --git a/bash/templates/build-aux/docbook-xsl/VERSION.xsl b/bash/templates/build-aux/docbook-xsl/VERSION.xsl deleted file mode 100644 index 2eea4dc..0000000 --- a/bash/templates/build-aux/docbook-xsl/VERSION.xsl +++ /dev/null @@ -1,115 +0,0 @@ - - - - - - - - - -docbook-xsl -1.79.1 -c2af9a74931353e820685a44b9b1d117d74dc194 -$Revision: 9732 $ -$URL: svn+ssh://bobstayton@svn.code.sf.net/p/docbook/code/trunk/xsl/VERSION.xsl $ - - - - - DocBook - XSL Stylesheets - - - 1.79.2 - - - - - - -* Major feature enhancements - - - - - - http://sourceforge.net/projects/docbook/ - http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.tar.gz?download - http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.zip?download - http://prdownloads.sourceforge.net/docbook/{DISTRONAME-VERSION}.bz2?download - http://sourceforge.net/project/shownotes.php?release_id={SFRELID} - http://docbook.svn.sourceforge.net/viewvc/docbook/ - http://lists.oasis-open.org/archives/docbook-apps/ - This is a release with bugfixes and some enhancements. - - - - - - - - - - - - - - - - - - - - - - - You must specify the sf-relid as a parameter. - - - - - - - - - - - - - - - - - - : - - - - - - - - - : - - - - - - - - - : - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/addns.xsl b/bash/templates/build-aux/docbook-xsl/common/addns.xsl deleted file mode 100644 index 05647b8..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/addns.xsl +++ /dev/null @@ -1,124 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warn - - - no @xml:base - - - cannot add @xml:base to node-set root element - - - - Warn - - - no @xml:base - - - relative paths may not work - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/af.xml b/bash/templates/build-aux/docbook-xsl/common/af.xml deleted file mode 100644 index 63a5a41..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/af.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/am.xml b/bash/templates/build-aux/docbook-xsl/common/am.xml deleted file mode 100644 index 30c049a..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/am.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ምልክቶች -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ar.xml b/bash/templates/build-aux/docbook-xsl/common/ar.xml deleted file mode 100644 index 744b9cc..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ar.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/as.xml b/bash/templates/build-aux/docbook-xsl/common/as.xml deleted file mode 100644 index b0af387..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/as.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -চিহ্ন -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ast.xml b/bash/templates/build-aux/docbook-xsl/common/ast.xml deleted file mode 100644 index b3f6ad4..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ast.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Símbolos -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl b/bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl deleted file mode 100644 index be1049a..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/autoidx-kimber.xsl +++ /dev/null @@ -1,43 +0,0 @@ - - -%common.entities; - - - - -]> - - - - - - - - - - ERROR: the 'kimber' index method requires the - Saxon version 6 or 8 XSLT processor. - - - 1 - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl b/bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl deleted file mode 100644 index 9f8ae4f..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/autoidx-kosek.xsl +++ /dev/null @@ -1,153 +0,0 @@ - - -%common.entities; -]> - - - - - - - - - - ERROR: the 'kosek' index method does not - work with the xsltproc XSLT processor. - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - No " - - " localization of index grouping letters exists - - - . - - - ; using "en". - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No " - - " localization of index grouping letters exists - - - . - - - ; using "en". - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/az.xml b/bash/templates/build-aux/docbook-xsl/common/az.xml deleted file mode 100644 index c38ba4f..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/az.xml +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -İşarələr -A -a -B -b -C -c -Ç -ç -D -d -E -e -e -e -Ə -ə -G -g -Ğ -ğ -H -h -X -x -I -ı -İ -i -J -j -K -k -Q -q -L -l -M -m -N -n -O -o -Ö -ö -P -p -R -r -S -s -Ş -ş -T -t -U -u -Ü -ü -V -v -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/bg.xml b/bash/templates/build-aux/docbook-xsl/common/bg.xml deleted file mode 100644 index aa092f4..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/bg.xml +++ /dev/null @@ -1,783 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Цифри и знаци -А -а -Б -б -В -в -Г -г -Д -д -Е -е -Ж -ж -З -з -И -и -Й -й -К -к -Л -л -М -м -Н -н -О -о -П -п -Р -р -С -с -Т -т -У -у -Ф -ф -Х -х -Ц -ц -Ч -ч -Ш -ш -Щ -щ -Ъ -ъ -Ь -ь -Ю -ю -Я -я -Э -э -Ы -ы -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/bn.xml b/bash/templates/build-aux/docbook-xsl/common/bn.xml deleted file mode 100644 index 16f6fad..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/bn.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/bn_in.xml b/bash/templates/build-aux/docbook-xsl/common/bn_in.xml deleted file mode 100644 index 81df19d..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/bn_in.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -সংকেত -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/bs.xml b/bash/templates/build-aux/docbook-xsl/common/bs.xml deleted file mode 100644 index 733bba8..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/bs.xml +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simboli -A -a -B -b -C -c -Ć -ć -Č -č -D -d -Đ -đ -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -R -r -S -s -Š -š -T -t -U -u -V -v -Z -z -Ž -ž - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/build.xml b/bash/templates/build-aux/docbook-xsl/common/build.xml deleted file mode 100644 index 8926ebc..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/build.xml +++ /dev/null @@ -1,28 +0,0 @@ - - - - - - - - Adding missing translations from English master localization... - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/ca.xml b/bash/templates/build-aux/docbook-xsl/common/ca.xml deleted file mode 100644 index 46695d8..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ca.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Símbols -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/charmap.xml b/bash/templates/build-aux/docbook-xsl/common/charmap.xml deleted file mode 100644 index 91f318c..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/charmap.xml +++ /dev/null @@ -1,182 +0,0 @@ - - - - Common » Character-Map Template Reference - - - - - - Introduction - -This is technical reference documentation for the - character-map templates in the DocBook XSL Stylesheets. - - - -These templates are defined in a separate file from the set - of “common” templates because some of the common templates - reference DocBook XSL stylesheet parameters, requiring the - entire set of parameters to be imported/included in any - stylesheet that imports/includes the common templates. - - -The character-map templates don’t import or include - any DocBook XSL stylesheet parameters, so the - character-map templates can be used without importing the - whole set of parameters. - - - -This is not intended to be user documentation. It is - provided for developers writing customization layers for the - stylesheets. - - - - - -apply-character-map -Applies an XSLT character map - - -<xsl:template name="apply-character-map"> -<xsl:param name="content"/> -<xsl:param name="map.contents"/> - ... -</xsl:template> - -Description - -This template applies an XSLT character map; that is, it causes certain - individual characters to be substituted with strings of one - or more characters. It is useful mainly for replacing - multiple “special” characters or symbols in the same target - content. It uses the value of - map.contents to do substitution on - content, and then returns the - modified contents. - - - -This template is a very slightly modified version of - Jeni Tennison’s replace_strings - template in the multiple string replacements section of Dave Pawson’s - XSLT FAQ. - - -The apply-string-subst-map - template is essentially the same template as the - apply-character-map template; the - only difference is that in the map that - apply-string-subst-map expects, oldstring and newstring attributes are used - instead of character and string attributes. - - - Parameters - - - content - - -The content on which to perform the character-map - substitution. - - - - map.contents - - -A node set of elements, with each element having - the following attributes: - - - - character, a - character to be replaced - - - string, a - string with which to replace character - - - - - - - - - - - - - -read-character-map -Reads in all or part of an XSLT character map - - -<xsl:template name="read-character-map"> -<xsl:param name="use.subset"/> -<xsl:param name="subset.profile"/> -<xsl:param name="uri"/> - ... -</xsl:template> - -Description - -The XSLT 2.0 specification describes character maps and explains how they may be used - to allow a specific character appearing in a text or - attribute node in a final result tree to be substituted by - a specified string of characters during serialization. The - read-character-map template provides a - means for reading and using character maps with XSLT - 1.0-based tools. - - -This template reads the character-map contents from - uri (in full or in part, depending on - the value of the use.subset - parameter), then passes those contents to the - apply-character-map template, along with - content, the data on which to perform - the character substitution. - - -Using the character map “in part” means that it uses only - those output-character elements that match the - XPath expression given in the value of the - subset.profile parameter. The current - implementation of that capability here relies on the - evaluate extension XSLT function. - - Parameters - - - use.subset - - -Specifies whether to use a subset of the character - map instead of the whole map; boolean - 0 or 1 - - - - subset.profile - - -XPath expression that specifies what subset of the - character map to use - - - - uri - - -URI for a character map - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/charmap.xsl b/bash/templates/build-aux/docbook-xsl/common/charmap.xsl deleted file mode 100644 index 5adc9de..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/charmap.xsl +++ /dev/null @@ -1,219 +0,0 @@ - - - - - - - Common » Character-Map Template Reference - - - - - - Introduction - This is technical reference documentation for the - character-map templates in the DocBook XSL Stylesheets. - - These templates are defined in a separate file from the set - of “common” templates because some of the common templates - reference DocBook XSL stylesheet parameters, requiring the - entire set of parameters to be imported/included in any - stylesheet that imports/includes the common templates. - The character-map templates don’t import or include - any DocBook XSL stylesheet parameters, so the - character-map templates can be used without importing the - whole set of parameters. - - This is not intended to be user documentation. It is - provided for developers writing customization layers for the - stylesheets. - - - - - - Applies an XSLT character map - - This template applies an XSLT character map; that is, it causes certain - individual characters to be substituted with strings of one - or more characters. It is useful mainly for replacing - multiple “special” characters or symbols in the same target - content. It uses the value of - map.contents to do substitution on - content, and then returns the - modified contents. - - This template is a very slightly modified version of - Jeni Tennison’s replace_strings - template in the multiple string replacements section of Dave Pawson’s - XSLT FAQ. - The apply-string-subst-map - template is essentially the same template as the - apply-character-map template; the - only difference is that in the map that - apply-string-subst-map expects, oldstring and newstring attributes are used - instead of character and string attributes. - - - - - content - - The content on which to perform the character-map - substitution. - - - map.contents - - A node set of elements, with each element having - the following attributes: - - - character, a - character to be replaced - - - string, a - string with which to replace character - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Reads in all or part of an XSLT character map - - The XSLT 2.0 specification describes character maps and explains how they may be used - to allow a specific character appearing in a text or - attribute node in a final result tree to be substituted by - a specified string of characters during serialization. The - read-character-map template provides a - means for reading and using character maps with XSLT - 1.0-based tools. - This template reads the character-map contents from - uri (in full or in part, depending on - the value of the use.subset - parameter), then passes those contents to the - apply-character-map template, along with - content, the data on which to perform - the character substitution. - Using the character map “in part” means that it uses only - those output-character elements that match the - XPath expression given in the value of the - subset.profile parameter. The current - implementation of that capability here relies on the - evaluate extension XSLT function. - - - - use.subset - - Specifies whether to use a subset of the character - map instead of the whole map; boolean - 0 or 1 - - - subset.profile - - XPath expression that specifies what subset of the - character map to use - - - uri - - URI for a character map - - - - - - - - - - - - - - - - - - - - - - - -Error: To process character-map subsets, you must use an XSLT engine -that supports the evaluate() XSLT extension function. Your XSLT engine -does not support it. - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/common.xml b/bash/templates/build-aux/docbook-xsl/common/common.xml deleted file mode 100644 index 150d37c..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/common.xml +++ /dev/null @@ -1,638 +0,0 @@ - - - - Common » Base Template Reference - - - - - - Introduction - -This is technical reference documentation for the “base” - set of common templates in the DocBook XSL Stylesheets. - - -This is not intended to be user documentation. It is - provided for developers writing customization layers for the - stylesheets. - - - - - -is.component -Tests if a given node is a component-level element - - -<xsl:template name="is.component"> -<xsl:param name="node" select="."/> - ... -</xsl:template> - -Description - -This template returns '1' if the specified node is a component -(Chapter, Appendix, etc.), and '0' otherwise. - -Parameters - - -node - - -The node which is to be tested. - - - - - -Returns - -This template returns '1' if the specified node is a component -(Chapter, Appendix, etc.), and '0' otherwise. - - - - - -is.section -Tests if a given node is a section-level element - - -<xsl:template name="is.section"> -<xsl:param name="node" select="."/> - ... -</xsl:template> - -Description - -This template returns '1' if the specified node is a section -(Section, Sect1, Sect2, etc.), and '0' otherwise. - -Parameters - - -node - - -The node which is to be tested. - - - - - -Returns - -This template returns '1' if the specified node is a section -(Section, Sect1, Sect2, etc.), and '0' otherwise. - - - - - -section.level -Returns the hierarchical level of a section - - -<xsl:template name="section.level"> -<xsl:param name="node" select="."/> - ... -</xsl:template> - -Description - -This template calculates the hierarchical level of a section. -The element sect1 is at level 1, sect2 is -at level 2, etc. - - - -Recursive sections are calculated down to the fifth level. - -Parameters - - -node - - -The section node for which the level should be calculated. -Defaults to the context node. - - - - - -Returns - -The section level, 1, 2, etc. - - - - - - -qanda.section.level -Returns the hierarchical level of a QandASet - - -<xsl:template name="qanda.section.level"/> - -Description - -This template calculates the hierarchical level of a QandASet. - - -Returns - -The level, 1, 2, etc. - - - - - - -select.mediaobject -Selects and processes an appropriate media object from a list - - -<xsl:template name="select.mediaobject"> -<xsl:param name="olist" select="d:imageobject|d:imageobjectco |d:videoobject|d:audioobject|d:textobject"/> - ... -</xsl:template> - -Description - -This template takes a list of media objects (usually the -children of a mediaobject or inlinemediaobject) and processes -the "right" object. - - - -This template relies on a template named -"select.mediaobject.index" to determine which object -in the list is appropriate. - - - -If no acceptable object is located, nothing happens. - -Parameters - - -olist - - -The node list of potential objects to examine. - - - - - -Returns - -Calls <xsl:apply-templates> on the selected object. - - - - - -select.mediaobject.index -Selects the position of the appropriate media object from a list - - -<xsl:template name="select.mediaobject.index"> -<xsl:param name="olist" select="d:imageobject|d:imageobjectco |d:videoobject|d:audioobject|d:textobject"/> -<xsl:param name="count">1</xsl:param> - ... -</xsl:template> - -Description - -This template takes a list of media objects (usually the -children of a mediaobject or inlinemediaobject) and determines -the "right" object. It returns the position of that object -to be used by the calling template. - - - -If the parameter use.role.for.mediaobject -is nonzero, then it first checks for an object with -a role attribute of the appropriate value. It takes the first -of those. Otherwise, it takes the first acceptable object -through a recursive pass through the list. - - - -This template relies on a template named "is.acceptable.mediaobject" -to determine if a given object is an acceptable graphic. The semantics -of media objects is that the first acceptable graphic should be used. - - - - -If no acceptable object is located, no index is returned. - -Parameters - - -olist - - -The node list of potential objects to examine. - - - -count - - -The position in the list currently being considered by the -recursive process. - - - - - -Returns - -Returns the position in the original list of the selected object. - - - - - -is.acceptable.mediaobject -Returns '1' if the specified media object is recognized - - -<xsl:template name="is.acceptable.mediaobject"> -<xsl:param name="object"/> - ... -</xsl:template> - -Description - -This template examines a media object and returns '1' if the -object is recognized as a graphic. - -Parameters - - -object - - -The media object to consider. - - - - - -Returns - -0 or 1 - - - - - -check.id.unique -Warn users about references to non-unique IDs - - -<xsl:template name="check.id.unique"> -<xsl:param name="linkend"/> - ... -</xsl:template> - -Description - -If passed an ID in linkend, -check.id.unique prints -a warning message to the user if either the ID does not exist or -the ID is not unique. - - - - - -check.idref.targets -Warn users about incorrectly typed references - - -<xsl:template name="check.idref.targets"> -<xsl:param name="linkend"/> -<xsl:param name="element-list"/> - ... -</xsl:template> - -Description - -If passed an ID in linkend, -check.idref.targets makes sure that the element -pointed to by the link is one of the elements listed in -element-list and warns the user otherwise. - - - - - -copyright.years -Print a set of years with collapsed ranges - - -<xsl:template name="copyright.years"> -<xsl:param name="years"/> -<xsl:param name="print.ranges" select="1"/> -<xsl:param name="single.year.ranges" select="0"/> -<xsl:param name="firstyear" select="0"/> -<xsl:param name="nextyear" select="0"/> - ... -</xsl:template> - -Description - -This template prints a list of year elements with consecutive -years printed as a range. In other words: - - -<year>1992</year> -<year>1993</year> -<year>1994</year> - - -is printed 1992-1994, whereas: - - -<year>1992</year> -<year>1994</year> - - -is printed 1992, 1994. - - - -This template assumes that all the year elements contain only -decimal year numbers, that the elements are sorted in increasing -numerical order, that there are no duplicates, and that all the years -are expressed in full century+year -(1999 not 99) notation. - -Parameters - - -years - - -The initial set of year elements. - - - -print.ranges - - -If non-zero, multi-year ranges are collapsed. If zero, all years -are printed discretely. - - - -single.year.ranges - - -If non-zero, two consecutive years will be printed as a range, -otherwise, they will be printed discretely. In other words, a single -year range is 1991-1992 but discretely it's -1991, 1992. - - - - - -Returns - -This template returns the formatted list of years. - - - - - -find.path.params -Search in a table for the "best" match for the node - - -<xsl:template name="find.path.params"> -<xsl:param name="node" select="."/> -<xsl:param name="table" select="''"/> -<xsl:param name="location"> - <xsl:call-template name="xpath.location"> - <xsl:with-param name="node" select="$node"/> - </xsl:call-template> - </xsl:param> - ... -</xsl:template> - -Description - -This template searches in a table for the value that most-closely -(in the typical best-match sense of XSLT) matches the current (element) -node location. - - - - - -string.upper -Converts a string to all uppercase letters - - -<xsl:template name="string.upper"> -<xsl:param name="string" select="''"/> - ... -</xsl:template> - -Description - -Given a string, this template does a language-aware conversion -of that string to all uppercase letters, based on the values of the -lowercase.alpha and -uppercase.alpha gentext keys for the current -locale. It affects only those characters found in the values of -lowercase.alpha and -uppercase.alpha. All other characters are left -unchanged. - -Parameters - - -string - - -The string to convert to uppercase. - - - - - - - - - -string.lower -Converts a string to all lowercase letters - - -<xsl:template name="string.lower"> -<xsl:param name="string" select="''"/> - ... -</xsl:template> - -Description - -Given a string, this template does a language-aware conversion -of that string to all lowercase letters, based on the values of the -uppercase.alpha and -lowercase.alpha gentext keys for the current -locale. It affects only those characters found in the values of -uppercase.alpha and -lowercase.alpha. All other characters are left -unchanged. - -Parameters - - -string - - -The string to convert to lowercase. - - - - - - - - - -select.choice.separator -Returns localized choice separator - - -<xsl:template name="select.choice.separator"/> - -Description - -This template enables auto-generation of an appropriate - localized "choice" separator (for example, "and" or "or") before - the final item in an inline list (though it could also be useful - for generating choice separators for non-inline lists). - - -It currently works by evaluating a processing instruction - (PI) of the form <?dbchoice choice="foo"?> : - - - - if the value of the choice - pseudo-attribute is "and" or "or", returns a localized "and" - or "or" - - - otherwise returns the literal value of the - choice pseudo-attribute - - - - The latter is provided only as a temporary workaround because the - locale files do not currently have translations for the word - or. So if you want to generate a a - logical "or" separator in French (for example), you currently need - to do this: - <?dbchoice choice="ou"?> - - - - -The dbchoice processing instruction is - an unfortunate hack; support for it may disappear in the future - (particularly if and when a more appropriate means for marking - up "choice" lists becomes available in DocBook). - - - - - - -evaluate.info.profile -Evaluates an info profile - - -<xsl:template name="evaluate.info.profile"> -<xsl:param name="profile"/> -<xsl:param name="info"/> - ... -</xsl:template> - -Description - -This template evaluates an "info profile" matching the XPath - expression given by the profile - parameter. It relies on the XSLT evaluate() - extension function. - - - -The value of the profile parameter - can include the literal string $info. If found - in the value of the profile parameter, the - literal string $info string is replaced with - the value of the info parameter, which - should be a set of *info nodes; the - expression is then evaluated using the XSLT - evaluate() extension function. - - Parameters - - - - profile - - -A string representing an XPath expression - - - - - info - - -A set of *info nodes - - - - - - Returns - -Returns a node (the result of evaluating the - profile parameter) - - - - - -graphic.format.content-type -Returns mimetype for media format - - -<xsl:template name="graphic.format.content-type"> -<xsl:param name="format"/> - ... -</xsl:template> - -Description - -This takes as input a 'format' param and returns - a mimetype string. It uses an xsl:choose after first - converting the input to all uppercase. - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/common.xsl b/bash/templates/build-aux/docbook-xsl/common/common.xsl deleted file mode 100644 index 59f51df..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/common.xsl +++ /dev/null @@ -1,2126 +0,0 @@ - - - - ]> - - - - - - - Common » Base Template Reference - - - - - - Introduction - This is technical reference documentation for the “base” - set of common templates in the DocBook XSL Stylesheets. - This is not intended to be user documentation. It is - provided for developers writing customization layers for the - stylesheets. - - - - - - - - - - - - -Tests if a given node is a component-level element - - -This template returns '1' if the specified node is a component -(Chapter, Appendix, etc.), and '0' otherwise. - - - - -node - -The node which is to be tested. - - - - - - -This template returns '1' if the specified node is a component -(Chapter, Appendix, etc.), and '0' otherwise. - - - - - - - 1 - 0 - - - - - - -Tests if a given node is a section-level element - - -This template returns '1' if the specified node is a section -(Section, Sect1, Sect2, etc.), and '0' otherwise. - - - - -node - -The node which is to be tested. - - - - - - -This template returns '1' if the specified node is a section -(Section, Sect1, Sect2, etc.), and '0' otherwise. - - - - - - - 1 - 0 - - - - - - -Returns the hierarchical level of a section - - -This template calculates the hierarchical level of a section. -The element sect1 is at level 1, sect2 is -at level 2, etc. - -Recursive sections are calculated down to the fifth level. - - - - -node - -The section node for which the level should be calculated. -Defaults to the context node. - - - - - - -The section level, 1, 2, etc. - - - - - - - - 1 - 2 - 3 - 4 - 5 - - - 6 - 5 - 4 - 3 - 2 - 1 - - - - - - - - - - 2 - 3 - 4 - 5 - 5 - - - 5 - 4 - 3 - 2 - - - 1 - - - 1 - - - - -Returns the hierarchical level of a QandASet - - -This template calculates the hierarchical level of a QandASet. - - - - -The level, 1, 2, etc. - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - 2 - 3 - - - 5 - 4 - 3 - 2 - 1 - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - question - answer - qandadiv - qandaset - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - id- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [FAMILY Given] - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -[ -] -{ -} - - -[ -] -... - - - | -4pi - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Selects and processes an appropriate media object from a list - - -This template takes a list of media objects (usually the -children of a mediaobject or inlinemediaobject) and processes -the "right" object. - -This template relies on a template named -"select.mediaobject.index" to determine which object -in the list is appropriate. - -If no acceptable object is located, nothing happens. - - - - -olist - -The node list of potential objects to examine. - - - - - - -Calls <xsl:apply-templates> on the selected object. - - - - - - - - - - - - - - - - - - - - - -Selects the position of the appropriate media object from a list - - -This template takes a list of media objects (usually the -children of a mediaobject or inlinemediaobject) and determines -the "right" object. It returns the position of that object -to be used by the calling template. - -If the parameter use.role.for.mediaobject -is nonzero, then it first checks for an object with -a role attribute of the appropriate value. It takes the first -of those. Otherwise, it takes the first acceptable object -through a recursive pass through the list. - -This template relies on a template named "is.acceptable.mediaobject" -to determine if a given object is an acceptable graphic. The semantics -of media objects is that the first acceptable graphic should be used. - - -If no acceptable object is located, no index is returned. - - - - -olist - -The node list of potential objects to examine. - - -count - -The position in the list currently being considered by the -recursive process. - - - - - - -Returns the position in the original list of the selected object. - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - 1 - - - - 0 - - - - 1 - - - - 0 - - - - 0 - - - - 1 - - - - 0 - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Returns '1' if the specified media object is recognized - - -This template examines a media object and returns '1' if the -object is recognized as a graphic. - - - - -object - -The media object to consider. - - - - - - -0 or 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - . - - - - - - - - - - - - . - - - - - - - - - - - - - - - - -Warn users about references to non-unique IDs - -If passed an ID in linkend, -check.id.unique prints -a warning message to the user if either the ID does not exist or -the ID is not unique. - - - - - - - - - - - - Error: no ID for constraint linkend: - - . - - - - - - - Warning: multiple "IDs" for constraint linkend: - - . - - - - - - -Warn users about incorrectly typed references - -If passed an ID in linkend, -check.idref.targets makes sure that the element -pointed to by the link is one of the elements listed in -element-list and warns the user otherwise. - - - - - - - - - - - - - - Error: linkend ( - - ) points to " - - " not (one of): - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unexpected context in procedure.step.numeration: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - 2 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - loweralpha - lowerroman - upperalpha - upperroman - arabic - arabic - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1. - a. - i. - A. - I. - - - - Unexpected numeration: - - - - - - - - - - - - - - - - - - - - - - - - - - circle - square - disc - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Print a set of years with collapsed ranges - - -This template prints a list of year elements with consecutive -years printed as a range. In other words: - -1992 -1993 -1994]]> - -is printed 1992-1994, whereas: - -1992 -1994]]> - -is printed 1992, 1994. - -This template assumes that all the year elements contain only -decimal year numbers, that the elements are sorted in increasing -numerical order, that there are no duplicates, and that all the years -are expressed in full century+year -(1999 not 99) notation. - - - - -years - -The initial set of year elements. - - -print.ranges - -If non-zero, multi-year ranges are collapsed. If zero, all years -are printed discretely. - - -single.year.ranges - -If non-zero, two consecutive years will be printed as a range, -otherwise, they will be printed discretely. In other words, a single -year range is 1991-1992 but discretely it's -1991, 1992. - - - - - - -This template returns the formatted list of years. - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - , - - , - - - - - - - , - - - - - - - - - - - - - - - - -Search in a table for the "best" match for the node - - -This template searches in a table for the value that most-closely -(in the typical best-match sense of XSLT) matches the current (element) -node location. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - -Converts a string to all uppercase letters - - -Given a string, this template does a language-aware conversion -of that string to all uppercase letters, based on the values of the -lowercase.alpha and -uppercase.alpha gentext keys for the current -locale. It affects only those characters found in the values of -lowercase.alpha and -uppercase.alpha. All other characters are left -unchanged. - - - - -string - -The string to convert to uppercase. - - - - - - - - - - - - - - - - - - - - - - - -Converts a string to all lowercase letters - - -Given a string, this template does a language-aware conversion -of that string to all lowercase letters, based on the values of the -uppercase.alpha and -lowercase.alpha gentext keys for the current -locale. It affects only those characters found in the values of -uppercase.alpha and -lowercase.alpha. All other characters are left -unchanged. - - - - -string - -The string to convert to lowercase. - - - - - - - - - - - - - - - - - - - - - - - - Returns localized choice separator - - This template enables auto-generation of an appropriate - localized "choice" separator (for example, "and" or "or") before - the final item in an inline list (though it could also be useful - for generating choice separators for non-inline lists). - It currently works by evaluating a processing instruction - (PI) of the form <?dbchoice choice="foo"?> : - - - if the value of the choice - pseudo-attribute is "and" or "or", returns a localized "and" - or "or" - - - otherwise returns the literal value of the - choice pseudo-attribute - - - The latter is provided only as a temporary workaround because the - locale files do not currently have translations for the word - or. So if you want to generate a a - logical "or" separator in French (for example), you currently need - to do this: - <?dbchoice choice="ou"?> - - - The dbchoice processing instruction is - an unfortunate hack; support for it may disappear in the future - (particularly if and when a more appropriate means for marking - up "choice" lists becomes available in DocBook). - - - - - - - - - - - - - - - - - - - - - - - - - - Evaluates an info profile - - This template evaluates an "info profile" matching the XPath - expression given by the profile - parameter. It relies on the XSLT evaluate() - extension function. - - The value of the profile parameter - can include the literal string $info. If found - in the value of the profile parameter, the - literal string $info string is replaced with - the value of the info parameter, which - should be a set of *info nodes; the - expression is then evaluated using the XSLT - evaluate() extension function. - - - - - profile - - A string representing an XPath expression - - - - info - - A set of *info nodes - - - - - - - Returns a node (the result of evaluating the - profile parameter) - - - - - - - - - - - - - - - - -Error: The "info profiling" mechanism currently requires an XSLT -engine that supports the evaluate() XSLT extension function. Your XSLT -engine does not support it. - - - - - - - - Returns mimetype for media format - - This takes as input a 'format' param and returns - a mimetype string. It uses an xsl:choose after first - converting the input to all uppercase. - - - - - - - - - application/postscript - application/pdf - image/png - image/svg+xml - image/jpeg - image/jpeg - image/gif - image/gif - image/gif - audio/acc - audio/mpeg - audio/mpeg - audio/mpeg - audio/mpeg - audio/mp4 - audio/mpeg - audio/wav - video/mp4 - video/mp4 - video/ogg - video/ogg - video/webm - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/cs.xml b/bash/templates/build-aux/docbook-xsl/common/cs.xml deleted file mode 100644 index d2bf889..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/cs.xml +++ /dev/null @@ -1,759 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symboly -A -a -Á -á -B -b -C -c -Č -č -D -d -Ď -ď -E -e -É -é -Ě -ě -Ë -ë -F -f -G -g -H -h -Ch -ch -cH -CH -I -i -Í -í -J -j -K -k -L -l -M -m -N -n -Ň -ň -O -o -Ó -ó -Ö -ö -P -p -Q -q -R -r -Ř -ř -S -s -Š -š -T -t -Ť -ť -U -u -Ú -ú -Ů -ů -Ü -ü -V -v -W -w -X -x -Y -y -Ý -ý -Z -z -Ž -ž - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/cy.xml b/bash/templates/build-aux/docbook-xsl/common/cy.xml deleted file mode 100644 index 526f1f4..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/cy.xml +++ /dev/null @@ -1,1304 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -Ch -ch -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -Dd -dd -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -Ff -ff -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -Ng -ng -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -Ll -ll -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Ph -ph -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -Rh -rh -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -Th -th -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/da.xml b/bash/templates/build-aux/docbook-xsl/common/da.xml deleted file mode 100644 index 09c4d16..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/da.xml +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -Æ -æ -Ø -ø -Å -å - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/de.xml b/bash/templates/build-aux/docbook-xsl/common/de.xml deleted file mode 100644 index 0542cf0..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/de.xml +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbole -A -a -Ä -ä -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -Ö -ö -P -p -Q -q -R -r -S -s -T -t -U -u -Ü -ü -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/el.xml b/bash/templates/build-aux/docbook-xsl/common/el.xml deleted file mode 100644 index b31f6bb..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/el.xml +++ /dev/null @@ -1,788 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Σύμβολα -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -Α -α -Ά -ά -Β -β -Γ -γ -Δ -δ -Ε -ε -Έ -έ -Ζ -ζ -Η -η -Ή -ή -Θ -θ -Ι -ι -Ί -ί -Ϊ -ϊ -ΐ -Κ -κ -Λ -λ -Μ -μ -Ν -ν -Ξ -ξ -Ο -ο -Ό -ό -Π -π -Ρ -ρ -Σ -σ -ς -Τ -τ -Υ -υ -Ύ -ύ -Ϋ -ϋ -ΰ -Φ -φ -Χ -χ -Ψ -ψ -Ω -ω -Ώ -ώ - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/en.xml b/bash/templates/build-aux/docbook-xsl/common/en.xml deleted file mode 100644 index 22b80d7..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/en.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/entities.ent b/bash/templates/build-aux/docbook-xsl/common/entities.ent deleted file mode 100644 index 93f2080..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/entities.ent +++ /dev/null @@ -1,65 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - normalize.sort.input - - - - - - normalize.sort.output - - -'> - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/eo.xml b/bash/templates/build-aux/docbook-xsl/common/eo.xml deleted file mode 100644 index ab8cda1..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/eo.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/es.xml b/bash/templates/build-aux/docbook-xsl/common/es.xml deleted file mode 100644 index da47ad1..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/es.xml +++ /dev/null @@ -1,735 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Símbolos -A -a -á -Á -B -b -C -c -CH -ch -D -d -E -e -É -é -F -f -G -g -H -h -I -i -Í -í -J -j -K -k -L -l -LL -ll -M -m -N -n -Ñ -ñ -O -o -Ó -ó -P -p -Q -q -R -r -S -s -T -t -U -u -Ú -ú -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/et.xml b/bash/templates/build-aux/docbook-xsl/common/et.xml deleted file mode 100644 index dd38ca0..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/et.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/eu.xml b/bash/templates/build-aux/docbook-xsl/common/eu.xml deleted file mode 100644 index a9afa83..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/eu.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/fa.xml b/bash/templates/build-aux/docbook-xsl/common/fa.xml deleted file mode 100644 index 6e5882b..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/fa.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -سمبل‌های راهنم -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/fi.xml b/bash/templates/build-aux/docbook-xsl/common/fi.xml deleted file mode 100644 index b0f208a..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/fi.xml +++ /dev/null @@ -1,729 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbole -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -Š -š -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -Ž -ž -Å -å -Ä -ä -Ö -ö - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/fr.xml b/bash/templates/build-aux/docbook-xsl/common/fr.xml deleted file mode 100644 index bb8da6d..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/fr.xml +++ /dev/null @@ -1,749 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symboles -A -a -à -À -â - -Æ -æ -B -b -C -c -ç -D -d -E -e -ê -Ê -é -É -è -È -ë -Ë - -F -f -G -g -H -h -I -i -Î -î -Ï -ï -J -j -K -k -L -l -M -m -N -n -O -o -Ö -ö -Œ -œ -P -p -Q -q -R -r -S -s -T -t -U -u -Ù -ù -Û -û -Ü -ü -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ga.xml b/bash/templates/build-aux/docbook-xsl/common/ga.xml deleted file mode 100644 index 6e72331..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ga.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Siombailí -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/gentext.xsl b/bash/templates/build-aux/docbook-xsl/common/gentext.xsl deleted file mode 100644 index 38dc46e..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/gentext.xsl +++ /dev/null @@ -1,853 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - .formal - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - object.xref.markup: empty xref template - for linkend=" - - " and @xrefstyle=" - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - Xref is only supported to listitems in an - orderedlist: - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - %n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - Attempt to use %d in gentext with no referrer! - - - - - - - % - - - % - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - labelnumber - - - labelname - - - label - - - - - - - - quotedtitle - - - title - - - - - - - - - - - - - - nopage - - - pagenumber - - - pageabbrev - - - Page - - - page - - - - - - - - - - - nodocname - - - docnamelong - - - docname - - - - - - - - - - - - - - - - - - - - - - %n - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %t - - - - - - %t - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - %p - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/gl.xml b/bash/templates/build-aux/docbook-xsl/common/gl.xml deleted file mode 100644 index e18e2be..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/gl.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/gu.xml b/bash/templates/build-aux/docbook-xsl/common/gu.xml deleted file mode 100644 index 5ab79ed..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/gu.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -સંકેતો -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/he.xml b/bash/templates/build-aux/docbook-xsl/common/he.xml deleted file mode 100644 index 35e51ea..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/he.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/hi.xml b/bash/templates/build-aux/docbook-xsl/common/hi.xml deleted file mode 100644 index 47be542..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/hi.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -संकेत -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/hr.xml b/bash/templates/build-aux/docbook-xsl/common/hr.xml deleted file mode 100644 index 06efe55..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/hr.xml +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Oznake -A -a -B -b -C -c -Ć -ć -Č -č -D -d -Đ -đ -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -R -r -S -s -Š -š -T -t -U -u -V -v -Z -z -Ž -ž - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/hu.xml b/bash/templates/build-aux/docbook-xsl/common/hu.xml deleted file mode 100644 index 8dcd565..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/hu.xml +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Jelzések -A -a -Á -á -B -b -C -c -D -d -E -e -É -é -F -f -G -g -H -h -I -i -Í -í -J -j -K -k -L -l -M -m -N -n -O -o -Ó -ó -Ö -ö -Ő -ő -P -p -Q -q -R -r -S -s -T -t -U -u -Ú -ú -Ü -ü -Ű -ű -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/id.xml b/bash/templates/build-aux/docbook-xsl/common/id.xml deleted file mode 100644 index 2d7daac..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/id.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simbol -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/insertfile.xsl b/bash/templates/build-aux/docbook-xsl/common/insertfile.xsl deleted file mode 100644 index 94bd049..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/insertfile.xsl +++ /dev/null @@ -1,111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/is.xml b/bash/templates/build-aux/docbook-xsl/common/is.xml deleted file mode 100644 index 09d86d4..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/is.xml +++ /dev/null @@ -1,731 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -tákn -A -a -Á -á -B -b -D -d -Đ -ð -E -e -É -é -F -f -G -g -H -h -I -i -Í -í -J -j -K -k -L -l -M -m -N -n -O -o -Ó -ó -P -p -R -r -S -s -T -t -U -u -Ú -ú -V -v -X -x -Y -y -Ý -ý -Þ -þ -Æ -æ -Ö -ö - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/it.xml b/bash/templates/build-aux/docbook-xsl/common/it.xml deleted file mode 100644 index 714b4db..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/it.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simboli -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ja.xml b/bash/templates/build-aux/docbook-xsl/common/ja.xml deleted file mode 100644 index 9f93c47..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ja.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -シンボル -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ka.xml b/bash/templates/build-aux/docbook-xsl/common/ka.xml deleted file mode 100644 index 3b43e46..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ka.xml +++ /dev/null @@ -1,759 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -სიმბოლოები -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/kn.xml b/bash/templates/build-aux/docbook-xsl/common/kn.xml deleted file mode 100644 index e088681..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/kn.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ಸಂಕೇತಗಳು -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ko.xml b/bash/templates/build-aux/docbook-xsl/common/ko.xml deleted file mode 100644 index 99f3b03..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ko.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ky.xml b/bash/templates/build-aux/docbook-xsl/common/ky.xml deleted file mode 100644 index 860210f..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ky.xml +++ /dev/null @@ -1,791 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Символдор -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -А -а -Б -б -В -в -Г -г -Д -д -Е -е -Ё -ё -Ж -ж -З -з -И -и -Й -й -К -к -Л -л -М -м -Н -н -Ң -ң -О -о -Ө -ө -П -п -Р -р -С -с -Т -т -У -у -Ү -ү -Ф -ф -Х -х -Ц -ц -Ч -ч -Ш -ш -Щ -щ -Ъ -ъ -Ы -ы -Ь -ь -Э -э -Ю -ю -Я -я - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/l10n.dtd b/bash/templates/build-aux/docbook-xsl/common/l10n.dtd deleted file mode 100644 index 9bf2f66..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/l10n.dtd +++ /dev/null @@ -1,64 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/l10n.xml b/bash/templates/build-aux/docbook-xsl/common/l10n.xml deleted file mode 100644 index 98dae0c..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/l10n.xml +++ /dev/null @@ -1,78 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/l10n.xsl b/bash/templates/build-aux/docbook-xsl/common/l10n.xsl deleted file mode 100644 index 63a1963..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/l10n.xsl +++ /dev/null @@ -1,596 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No localization exists for " - - " or " - - ". Using default " - - ". - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No " - - " localization of " - - " exists - - - . - - - ; using "en". - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - bullet - - - - - - - - - - - - - - - - - - - - No " - - " localization of dingbat - - exists; using "en". - - - - - - - - - - - - - - - - startquote - - - - - - endquote - - - - - - nestedstartquote - - - - - - nestedendquote - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No " - - " localization exists. - - - - - - - - No context named " - - " exists in the " - - " localization. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No template for " - - " (or any of its leaves) exists in the context named " - - " in the " - - " localization. - - - - - - - - - - - - - - - - - - - - No " - - " localization exists. - - - - - - - - - - No context named " - - " exists in the " - - " localization. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No template for " - - " (or any of its leaves) exists in the context named " - - " in the " - - " localization. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 0 - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/la.xml b/bash/templates/build-aux/docbook-xsl/common/la.xml deleted file mode 100644 index a8ec07e..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/la.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/labels.xsl b/bash/templates/build-aux/docbook-xsl/common/labels.xsl deleted file mode 100644 index 2f13227..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/labels.xsl +++ /dev/null @@ -1,931 +0,0 @@ - - - - - - - - - - -Provides access to element labels - -Processing an element in the -label.markup mode produces the -element label. -Trailing punctuation is not added to the label. - - - - - - - - - . - - - - - - - Request for label of unexpected element: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - label.markup: this can't happen! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - a - i - A - I - - - - Unexpected numeration: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - 0 - - - - -Returns true if $section should be labelled - -Returns true if the specified section should be labelled. -By default, this template returns zero unless -the section level is less than or equal to the value of the -$section.autolabel.max.depth parameter, in -which case it returns -$section.autolabel. -Custom stylesheets may override it to get more selective behavior. - - - - - - - - - - - - - - - 1 - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - Unexpected .autolabel value: - ; using default. - - - - - - - - - -Returns format for autolabel parameters - -Returns format passed as parameter if non zero. Supported - format are 'arabic' or '1', 'loweralpha' or 'a', 'lowerroman' or 'i', - 'upperlapha' or 'A', 'upperroman' or 'I', 'arabicindic' or '١'. - If its not one of these then - returns the default format. - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/lt.xml b/bash/templates/build-aux/docbook-xsl/common/lt.xml deleted file mode 100644 index 3024f8c..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/lt.xml +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simboliai -A -a -Ą -ą -B -b -C -c -Č -č -D -d -E -e -Ę -ę -Ė -ė -F -f -G -g -H -h -I -i -Į -į -Y -y -J -j -K -k -L -l -M -m -N -n -O -o -P -p -R -r -S -s -Š -š -T -t -U -u -Ų -ų -Ū -ū -V -v -Z -z -Ž -ž -Q -q -W -w -X -x - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/lv.xml b/bash/templates/build-aux/docbook-xsl/common/lv.xml deleted file mode 100644 index 4dcc04f..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/lv.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ml.xml b/bash/templates/build-aux/docbook-xsl/common/ml.xml deleted file mode 100644 index 21aa7c3..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ml.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ചിഹ്നങ്ങള്‍ -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/mn.xml b/bash/templates/build-aux/docbook-xsl/common/mn.xml deleted file mode 100644 index a5feeb1..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/mn.xml +++ /dev/null @@ -1,789 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Тэмдэгтүүд -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -А -а -Б -б -В -в -Г -г -Д -д -Е -е -Ё -ё -Ж -ж -З -з -И -и -Й -й -К -к -Л -л -М -м -Н -н -О -о -Ө -ө -П -п -Р -р -С -с -Т -т -У -у -Ү -ү -Ф -ф -Х -х -Ц -ц -Ч -ч -Ш -ш -Щ -щ -Ъ -ъ -Ы -ы -Ь -ь -Э -э -Ю -ю -Я -я - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/mr.xml b/bash/templates/build-aux/docbook-xsl/common/mr.xml deleted file mode 100644 index 5b99f38..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/mr.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -प्रतीक -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/nb.xml b/bash/templates/build-aux/docbook-xsl/common/nb.xml deleted file mode 100644 index 3595210..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/nb.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/nds.xml b/bash/templates/build-aux/docbook-xsl/common/nds.xml deleted file mode 100644 index adea4df..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/nds.xml +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbole -A -a -Ä -ä -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -Ö -ö -P -p -Q -q -R -r -S -s -T -t -U -u -Ü -ü -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/nl.xml b/bash/templates/build-aux/docbook-xsl/common/nl.xml deleted file mode 100644 index 175185c..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/nl.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbolen -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/nn.xml b/bash/templates/build-aux/docbook-xsl/common/nn.xml deleted file mode 100644 index 1509554..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/nn.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/olink.xsl b/bash/templates/build-aux/docbook-xsl/common/olink.xsl deleted file mode 100644 index 786f842..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/olink.xsl +++ /dev/null @@ -1,1282 +0,0 @@ - - - - - - - - - - - - - - - Olink error: - - - - - - - - - - Olink warning: - - - - - - - - - - - Error: unresolved olink: targetdoc/targetptr = ' - - / - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - olinks not processed: must specify a - $target.database.document parameter - when using olinks with targetdoc - and targetptr attributes. - - - - - - - the targetset element and children in ' - - ' should not be in any namespace. - - - - - - - - could not open target database ' - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Olink debug: cases for targetdoc=' - - ' and targetptr=' - - ' in language ' - - '. - - - - - - - - - - - - - - Olink debug: CaseA matched. - - - - Olink debug: CaseA NOT matched - - - - - - - - - - - - - - - - Olink debug: CaseB matched. - - - - Olink debug: CaseB NOT matched - - - - - - - - - - - - - - - - - Olink debug: CaseC matched. - - - - Olink debug: CaseC NOT matched. - - - - - - - - - - - - - - - - - Olink debug: CaseD matched. - - - - Olink debug: CaseD NOT matched - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Olink debug: CaseE matched. - - - - Olink debug: CaseE NOT matched. - - - - - - - - - - - - - - - - - - - - - - - - - - - - Olink debug: CaseF matched. - - - - Olink debug: CaseF NOT matched. - - - - - - - - - - - - - - Olink debug: CaseB key is the final selection: - - - - - - - - - Olink debug: CaseA key is the final selection: - - - - - - - - - Olink debug: CaseC key is the final selection: - - - - - - - - - Olink debug: CaseD key is the final selection: - - - - - - - - - Olink debug: CaseF key is the final selection: - - - - - - - - - Olink debug: CaseE key is the final selection: - - - - - - - - Olink debug: No case matched for lang ' - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cannot compute relative - sitemap path because $current.docid ' - - ' not found in target database. - - - - - - - - - cannot compute relative - sitemap path without $current.docid parameter - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - 1 - 0 - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - xrefstyle is ' - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - no gentext template - exists for xrefstyle ' - - ' for element ' - - ' in language ' - - ' in context 'xref-number-and-title - '. Using template without @style. - - - - - - - - - - no gentext template - exists for xrefstyle ' - - ' for element ' - - ' in language ' - - ' in context 'xref-number - '. Using template without @style. - - - - - - - - - - no gentext template - exists for xrefstyle ' - - ' for element ' - - ' in language ' - - ' in context 'xref - '. Using template without @style. - - - - - - - - no gentext template - exists for xrefstyle ' - - ' for element ' - - ' in language ' - - '. Trying '%t'. - - - - - - - - - - - - Olink debug: xrefstyle template is ' - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - no generated text for targetdoc/targetptr/lang = ' - - '. - - - ???? - - - - - - - - no generated text for targetdoc/targetptr/lang = ' - - '. - - - - ???? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - cannot locate targetdoc - - in sitemap - - - - - - - - - / - - - - - - - - - - - ../ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/or.xml b/bash/templates/build-aux/docbook-xsl/common/or.xml deleted file mode 100644 index 1124293..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/or.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ପ୍ରତୀକ -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/pa.xml b/bash/templates/build-aux/docbook-xsl/common/pa.xml deleted file mode 100644 index 7bde8ba..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/pa.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -ਚਿੰਨ -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/pi.xml b/bash/templates/build-aux/docbook-xsl/common/pi.xml deleted file mode 100644 index aa50d13..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/pi.xml +++ /dev/null @@ -1,165 +0,0 @@ - -Common Processing Instruction Reference - - - - - Introduction - -This is generated reference documentation for all - user-specifiable processing instructions (PIs) in the - “common” part of the DocBook XSL stylesheets. - - -You add these PIs at particular points in a document to - cause specific “exceptions” to formatting/output behavior. To - make global changes in formatting/output behavior across an - entire document, it’s better to do it by setting an - appropriate stylesheet parameter (if there is one). - - - - - - - - -dbchoice_choice -Generates a localized choice separator - - - - dbchoice choice="and"|"or"|string" - - -Description - -Use the dbchoice choice PI to - generate an appropriate localized “choice” separator (for - example, and or or) - before the final item in an inline simplelist - - - -This PI is a less-than-ideal hack; support for it may - disappear in the future (particularly if and when a more - appropriate means for marking up "choice" lists becomes - available in DocBook). - - - Parameters - - - choice="and" - - -generates a localized and separator - - - - choice="or" - - -generates a localized or separator - - - - choice="string" - - -generates a literal string separator - - - - - - - - - -dbtimestamp -Inserts a date timestamp - - - - dbtimestamp format="formatstring" [padding="0"|"1"] - - -Description - -Use the dbtimestamp PI at any point in a - source document to cause a date timestamp (a formatted - string representing the current date and time) to be - inserted in output of the document. - - Parameters - - - format="formatstring" - - -Specifies format in which the date and time are - output - - - -For details of the content of the format string, - see Date and time. - - - - - padding="0"|"1" - - -Specifies padding behavior; if non-zero, padding is is added - - - - - - - - - -dbtex_delims -Generates delimiters around embedded TeX equations - in output - - - - dbtex delims="no"|"yes" - - -Description - -Use the dbtex delims PI as a - child of a textobject containing embedded TeX - markup, to cause that markup to be surrounded by - $ delimiter characters in output. - - - -This feature is useful for print/PDF output only if you - use the obsolete and now unsupported PassiveTeX XSL-FO - engine. - - - Parameters - - - dbtex delims="no"|"yes" - - -Specifies whether delimiters are output - - - - - - Related Global Parameters - -tex.math.delims - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/pi.xsl b/bash/templates/build-aux/docbook-xsl/common/pi.xsl deleted file mode 100644 index 5178194..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/pi.xsl +++ /dev/null @@ -1,344 +0,0 @@ - - - - - -Common Processing Instruction Reference - - - - - Introduction - This is generated reference documentation for all - user-specifiable processing instructions (PIs) in the - “common” part of the DocBook XSL stylesheets. - - You add these PIs at particular points in a document to - cause specific “exceptions” to formatting/output behavior. To - make global changes in formatting/output behavior across an - entire document, it’s better to do it by setting an - appropriate stylesheet parameter (if there is one). - - - - - - - - Generates a localized choice separator - - Use the dbchoice choice PI to - generate an appropriate localized “choice” separator (for - example, and or or) - before the final item in an inline simplelist - - This PI is a less-than-ideal hack; support for it may - disappear in the future (particularly if and when a more - appropriate means for marking up "choice" lists becomes - available in DocBook). - - - - dbchoice choice="and"|"or"|string" - - - - choice="and" - - generates a localized and separator - - - choice="or" - - generates a localized or separator - - - choice="string" - - generates a literal string separator - - - - - - - - - - choice - - - - - Inserts a date timestamp - - Use the dbtimestamp PI at any point in a - source document to cause a date timestamp (a formatted - string representing the current date and time) to be - inserted in output of the document. - - - dbtimestamp format="formatstring" [padding="0"|"1"] - - - - format="formatstring" - - Specifies format in which the date and time are - output - - For details of the content of the format string, - see Date and time. - - - - padding="0"|"1" - - Specifies padding behavior; if non-zero, padding is is added - - - - - - - - - - - format - - - - - - - - - - - - - - - - - - - padding - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - Timestamp processing requires XSLT processor with EXSLT date support. - - - - - - - Generates delimiters around embedded TeX equations - in output - - Use the dbtex delims PI as a - child of a textobject containing embedded TeX - markup, to cause that markup to be surrounded by - $ delimiter characters in output. - - This feature is useful for print/PDF output only if you - use the obsolete and now unsupported PassiveTeX XSL-FO - engine. - - - - dbtex delims="no"|"yes" - - - - dbtex delims="no"|"yes" - - Specifies whether delimiters are output - - - - - - - tex.math.delims - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - 0 - - - - - - - 0 - - - - 0 - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - Timestamp processing requires an XSLT processor with support - for the EXSLT node-set() function. - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/pl.xml b/bash/templates/build-aux/docbook-xsl/common/pl.xml deleted file mode 100644 index b682423..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/pl.xml +++ /dev/null @@ -1,737 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbole -A -a -Ą -ą -B -b -C -c -Ć -ć -D -d -E -e -Ę -ę -F -f -G -g -H -h -I -i -J -j -K -k -L -l -Ł -ł -M -m -N -n -Ń -ń -O -o -Ó -ó -P -p -Q -q -R -r -S -s -Ś -ś -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -Ź -ź -Ż -ż - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/pt.xml b/bash/templates/build-aux/docbook-xsl/common/pt.xml deleted file mode 100644 index 82dfff4..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/pt.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Símbolos -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/pt_br.xml b/bash/templates/build-aux/docbook-xsl/common/pt_br.xml deleted file mode 100644 index bf773f0..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/pt_br.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Símbolos -A -a -À -à -Á -á - -â -à -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/refentry.xml b/bash/templates/build-aux/docbook-xsl/common/refentry.xml deleted file mode 100644 index 99d08b7..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/refentry.xml +++ /dev/null @@ -1,778 +0,0 @@ - - - - Common » Refentry Metadata Template Reference - - - - - - Introduction - -This is technical reference documentation for the “refentry - metadata” templates in the DocBook XSL Stylesheets. - - -This is not intended to be user documentation. It is provided - for developers writing customization layers for the stylesheets. - - - -Currently, only the manpages stylesheets make use of these - templates. They are, however, potentially useful elsewhere. - - - - - - -get.refentry.metadata -Gathers metadata from a refentry and its ancestors - - -<xsl:template name="get.refentry.metadata"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="prefs"/> - ... -</xsl:template> - -Description - -Reference documentation for particular commands, functions, - etc., is sometimes viewed in isolation from its greater "context". For - example, users view Unix man pages as, well, individual pages, not as - part of a "book" of some kind. Therefore, it is sometimes necessary to - embed "context" information in output for each refentry. - - - -However, one problem is that different users mark up that - context information in different ways. Often (usually), the - context information is not actually part of the content of the - refentry itself, but instead part of the content of a - parent or ancestor element to the refentry. And - even then, DocBook provides a variety of elements that users might - potentially use to mark up the same kind of information. One user - might use the productnumber element to mark up version - information about a particular product, while another might use - the releaseinfo element. - - - -Taking all that in mind, the - get.refentry.metadata template tries to gather - metadata from a refentry element and its ancestor - elements in an intelligent and user-configurable way. The basic - mechanism used in the XPath expressions throughout this stylesheet - is to select the relevant metadata from the *info element that is - closest to the actual refentry – either on the - refentry itself, or on its nearest ancestor. - - - - -The get.refentry.metadata - template is actually just sort of a "driver" template; it - calls other templates that do the actual data collection, - then returns the data as a set. - - - - Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A set of info nodes (from a refentry - element and its ancestors) - - - - - prefs - - -A node containing user preferences (from global - stylesheet parameters) - - - - - - Returns - -Returns a node set with the following elements. The - descriptions are verbatim from the man(7) man - page. - - - - title - - -the title of the man page (e.g., MAN) - - - - - section - - -the section number the man page should be placed in (e.g., - 7) - - - - - date - - -the date of the last revision - - - - - source - - -the source of the command - - - - - manual - - -the title of the manual (e.g., Linux - Programmer's Manual) - - - - - - - - - - - -get.refentry.title -Gets title metadata for a refentry - - -<xsl:template name="get.refentry.title"> -<xsl:param name="refname"/> - ... -</xsl:template> - -Description - -The man(7) man page describes this as "the - title of the man page (e.g., MAN). This differs - from refname in that, if the refentry has a - refentrytitle, we use that as the title; - otherwise, we just use first refname in the first - refnamediv in the source. - - Parameters - - - - refname - - -The first refname in the refentry - - - - - - Returns - -Returns a title node. - - - - -get.refentry.section -Gets section metadata for a refentry - - -<xsl:template name="get.refentry.section"> -<xsl:param name="refname"/> -<xsl:param name="quiet" select="0"/> - ... -</xsl:template> - -Description - -The man(7) man page describes this as "the - section number the man page should be placed in (e.g., - 7)". If we do not find a manvolnum - specified in the source, and we find that the refentry is - for a function, we use the section number 3 - ["Library calls (functions within program libraries)"]; otherwise, we - default to using 1 ["Executable programs or shell - commands"]. - - Parameters - - - - refname - - -The first refname in the refentry - - - - - quiet - - -If non-zero, no "missing" message is emitted - - - - - - Returns - -Returns a string representing a section number. - - - - -get.refentry.date -Gets date metadata for a refentry - - -<xsl:template name="get.refentry.date"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="prefs"/> - ... -</xsl:template> - -Description - -The man(7) man page describes this as "the - date of the last revision". If we cannot find a date in the source, we - generate one. - - Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A set of info nodes (from a refentry - element and its ancestors) - - - - - prefs - - -A node containing users preferences (from global stylesheet parameters) - - - - - - Returns - -Returns a date node. - - - - - -get.refentry.source -Gets source metadata for a refentry - - -<xsl:template name="get.refentry.source"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="prefs"/> - ... -</xsl:template> - -Description - -The man(7) man page describes this as "the - source of the command", and provides the following examples: - - - - -For binaries, use something like: GNU, NET-2, SLS - Distribution, MCC Distribution. - - - - -For system calls, use the version of the kernel that you are - currently looking at: Linux 0.99.11. - - - - -For library calls, use the source of the function: GNU, BSD - 4.3, Linux DLL 4.4.1. - - - - - - - - -The solbook(5) man page describes - something very much like what man(7) calls - "source", except that solbook(5) names it - "software" and describes it like this: -
    - -This is the name of the software product that the topic - discussed on the reference page belongs to. For example UNIX - commands are part of the SunOS x.x - release. - -
    -
    - - - -In practice, there are many pages that simply have a version - number in the "source" field. So, it looks like what we have is a - two-part field, - Name Version, - where: - - - - Name - - -product name (e.g., BSD) or org. name (e.g., GNU) - - - - - Version - - -version name - - - - - - Each part is optional. If the Name is a - product name, then the Version is probably - the version of the product. Or there may be no - Name, in which case, if there is a - Version, it is probably the version of the - item itself, not the product it is part of. Or, if the - Name is an organization name, then there - probably will be no Version. - - -
    Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A set of info nodes (from a refentry - element and its ancestors) - - - - - prefs - - -A node containing users preferences (from global - stylesheet parameters) - - - - - - Returns - -Returns a source node. - -
    - - - -get.refentry.source.name -Gets source-name metadata for a refentry - - -<xsl:template name="get.refentry.source.name"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="prefs"/> - ... -</xsl:template> - -Description - -A "source name" is one part of a (potentially) two-part - Name Version - source field. For more details, see the documentation for the - get.refentry.source template. - - Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A set of info nodes (from a refentry - element and its ancestors) - - - - - prefs - - -A node containing users preferences (from global - stylesheet parameters) - - - - - - Returns - -Depending on what output method is used for the - current stylesheet, either returns a text node or possibly an element - node, containing "source name" data. - - - - - -get.refentry.version -Gets version metadata for a refentry - - -<xsl:template name="get.refentry.version"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="prefs"/> - ... -</xsl:template> - -Description - -A "version" is one part of a (potentially) two-part - Name Version - source field. For more details, see the documentation for the - get.refentry.source template. - - Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A set of info nodes (from a refentry - element and its ancestors) - - - - - prefs - - -A node containing users preferences (from global - stylesheet parameters) - - - - - - Returns - -Depending on what output method is used for the - current stylesheet, either returns a text node or possibly an element - node, containing "version" data. - - - - - -get.refentry.manual -Gets source metadata for a refentry - - -<xsl:template name="get.refentry.manual"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="prefs"/> - ... -</xsl:template> - -Description - -The man(7) man page describes this as "the - title of the manual (e.g., Linux Programmer's - Manual)". Here are some examples from existing man pages: - - - - -dpkg utilities - (dpkg-name) - - - - -User Contributed Perl Documentation - (GET) - - - - -GNU Development Tools - (ld) - - - - -Emperor Norton Utilities - (ddate) - - - - -Debian GNU/Linux manual - (faked) - - - - -GIMP Manual Pages - (gimp) - - - - -KDOC Documentation System - (qt2kdoc) - - - - - - - - -The solbook(5) man page describes - something very much like what man(7) calls - "manual", except that solbook(5) names it - "sectdesc" and describes it like this: -
    - -This is the section title of the reference page; for - example User Commands. - -
    -
    - - -
    Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A set of info nodes (from a refentry - element and its ancestors) - - - - - prefs - - -A node containing users preferences (from global - stylesheet parameters) - - - - - - Returns - -Returns a manual node. - -
    - - - -get.refentry.metadata.prefs -Gets user preferences for refentry metadata gathering - - -<xsl:template name="get.refentry.metadata.prefs"/> - -Description - -The DocBook XSL stylesheets include several user-configurable - global stylesheet parameters for controlling refentry - metadata gathering. Those parameters are not read directly by the - other refentry metadata-gathering - templates. Instead, they are read only by the - get.refentry.metadata.prefs template, - which assembles them into a structure that is then passed to - the other refentry metadata-gathering - templates. - - - -So the, get.refentry.metadata.prefs - template is the only interface to collecting stylesheet parameters for - controlling refentry metadata gathering. - - Parameters - -There are no local parameters for this template; however, it - does rely on a number of global parameters. - - Returns - -Returns a manual node. - - - - - -set.refentry.metadata -Sets content of a refentry metadata item - - -<xsl:template name="set.refentry.metadata"> -<xsl:param name="refname"/> -<xsl:param name="info"/> -<xsl:param name="contents"/> -<xsl:param name="context"/> -<xsl:param name="preferred"/> - ... -</xsl:template> - -Description - -The set.refentry.metadata template is - called each time a suitable source element is found for a certain - metadata field. - - Parameters - - - - refname - - -The first refname in the refentry - - - - - info - - -A single *info node that contains the selected source element. - - - - - contents - - -A node containing the selected source element. - - - - - context - - -A string describing the metadata context in which the - set.refentry.metadata template was - called: either "date", "source", "version", or "manual". - - - - - - Returns - -Returns formatted contents of a selected source element. - -
    diff --git a/bash/templates/build-aux/docbook-xsl/common/refentry.xsl b/bash/templates/build-aux/docbook-xsl/common/refentry.xsl deleted file mode 100644 index 6fd898f..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/refentry.xsl +++ /dev/null @@ -1,1350 +0,0 @@ - - - - - - - - - Common » Refentry Metadata Template Reference - - - - - - Introduction - This is technical reference documentation for the “refentry - metadata” templates in the DocBook XSL Stylesheets. - This is not intended to be user documentation. It is provided - for developers writing customization layers for the stylesheets. - - Currently, only the manpages stylesheets make use of these - templates. They are, however, potentially useful elsewhere. - - - - - - - Gathers metadata from a refentry and its ancestors - - Reference documentation for particular commands, functions, - etc., is sometimes viewed in isolation from its greater "context". For - example, users view Unix man pages as, well, individual pages, not as - part of a "book" of some kind. Therefore, it is sometimes necessary to - embed "context" information in output for each refentry. - - However, one problem is that different users mark up that - context information in different ways. Often (usually), the - context information is not actually part of the content of the - refentry itself, but instead part of the content of a - parent or ancestor element to the refentry. And - even then, DocBook provides a variety of elements that users might - potentially use to mark up the same kind of information. One user - might use the productnumber element to mark up version - information about a particular product, while another might use - the releaseinfo element. - - Taking all that in mind, the - get.refentry.metadata template tries to gather - metadata from a refentry element and its ancestor - elements in an intelligent and user-configurable way. The basic - mechanism used in the XPath expressions throughout this stylesheet - is to select the relevant metadata from the *info element that is - closest to the actual refentry – either on the - refentry itself, or on its nearest ancestor. - - - The get.refentry.metadata - template is actually just sort of a "driver" template; it - calls other templates that do the actual data collection, - then returns the data as a set. - - - - - - - refname - - The first refname in the refentry - - - - info - - A set of info nodes (from a refentry - element and its ancestors) - - - - prefs - - A node containing user preferences (from global - stylesheet parameters) - - - - - - Returns a node set with the following elements. The - descriptions are verbatim from the man(7) man - page. - - - title - - the title of the man page (e.g., MAN) - - - - section - - the section number the man page should be placed in (e.g., - 7) - - - - date - - the date of the last revision - - - - source - - the source of the command - - - - manual - - the title of the manual (e.g., Linux - Programmer's Manual) - - - - - - - - - - - - <xsl:call-template name="get.refentry.title"> - <xsl:with-param name="refname" select="$refname"/> - </xsl:call-template> - -
    - - - -
    - - - - - - - - - - - - - - - - - - - - - -
    - - - - Gets title metadata for a refentry - - The man(7) man page describes this as "the - title of the man page (e.g., MAN). This differs - from refname in that, if the refentry has a - refentrytitle, we use that as the title; - otherwise, we just use first refname in the first - refnamediv in the source. - - - - - refname - - The first refname in the refentry - - - - - - Returns a title node. - - - - - - - - - - - - - - - - - - Gets section metadata for a refentry - - The man(7) man page describes this as "the - section number the man page should be placed in (e.g., - 7)". If we do not find a manvolnum - specified in the source, and we find that the refentry is - for a function, we use the section number 3 - ["Library calls (functions within program libraries)"]; otherwise, we - default to using 1 ["Executable programs or shell - commands"]. - - - - - refname - - The first refname in the refentry - - - - quiet - - If non-zero, no "missing" message is emitted - - - - - - Returns a string representing a section number. - - - - - - - - - - - - - Note - - meta manvol - - no refentry/refmeta/manvolnum - - - - Note - - meta manvol - - see http://www.docbook.org/tdg5/en/html/manvolnum - - - - - - - - - - Note - - meta manvol - - Setting man section to 3 - - - - - 3 - - - 1 - - - - - - - - - Gets date metadata for a refentry - - The man(7) man page describes this as "the - date of the last revision". If we cannot find a date in the source, we - generate one. - - - - - refname - - The first refname in the refentry - - - - info - - A set of info nodes (from a refentry - element and its ancestors) - - - - prefs - - A node containing users preferences (from global stylesheet parameters) - - - - - - Returns a date node. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Gets source metadata for a refentry - - The man(7) man page describes this as "the - source of the command", and provides the following examples: - - - For binaries, use something like: GNU, NET-2, SLS - Distribution, MCC Distribution. - - - For system calls, use the version of the kernel that you are - currently looking at: Linux 0.99.11. - - - For library calls, use the source of the function: GNU, BSD - 4.3, Linux DLL 4.4.1. - - - - - The solbook(5) man page describes - something very much like what man(7) calls - "source", except that solbook(5) names it - "software" and describes it like this: -
    - This is the name of the software product that the topic - discussed on the reference page belongs to. For example UNIX - commands are part of the SunOS x.x - release. -
    -
    - - In practice, there are many pages that simply have a version - number in the "source" field. So, it looks like what we have is a - two-part field, - Name Version, - where: - - - Name - - product name (e.g., BSD) or org. name (e.g., GNU) - - - - Version - - version name - - - - Each part is optional. If the Name is a - product name, then the Version is probably - the version of the product. Or there may be no - Name, in which case, if there is a - Version, it is probably the version of the - item itself, not the product it is part of. Or, if the - Name is an organization name, then there - probably will be no Version. - -
    - - - - refname - - The first refname in the refentry - - - - info - - A set of info nodes (from a refentry - element and its ancestors) - - - - prefs - - A node containing users preferences (from global - stylesheet parameters) - - - - - - Returns a source node. - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warn - - meta source - - using - " - - " - for "source" - - - - - - - - [FIXME: source] - - - Warn - - meta source - - no fallback for source, so inserted a fixme - - - - - - - - - - [FIXME: source] - - - Warn - - meta source - - no source fallback given, so inserted a fixme - - - - - - - - - - Gets source-name metadata for a refentry - - A "source name" is one part of a (potentially) two-part - Name Version - source field. For more details, see the documentation for the - get.refentry.source template. - - - - - refname - - The first refname in the refentry - - - - info - - A set of info nodes (from a refentry - element and its ancestors) - - - - prefs - - A node containing users preferences (from global - stylesheet parameters) - - - - - - Depending on what output method is used for the - current stylesheet, either returns a text node or possibly an element - node, containing "source name" data. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - source - - - - - - - - source - productname - - - - - - - - source - productname - - - - - - - - source - productname - - - - - - - - source - productname - - - - - - - - source - productname - - - - - - - - - - - - - Note - - meta source - - no *info/productname or alternative - - - - Note - - meta source - - see http://www.docbook.org/tdg5/en/html/productname - - - - Note - - meta source - - no refentry/refmeta/refmiscinfo@class=source - - - - Note - - meta source - - see http://www.docbook.org/tdg5/en/html/refmiscinfo - - - - - - - Gets version metadata for a refentry - - A "version" is one part of a (potentially) two-part - Name Version - source field. For more details, see the documentation for the - get.refentry.source template. - - - - - refname - - The first refname in the refentry - - - - info - - A set of info nodes (from a refentry - element and its ancestors) - - - - prefs - - A node containing users preferences (from global - stylesheet parameters) - - - - - - Depending on what output method is used for the - current stylesheet, either returns a text node or possibly an element - node, containing "version" data. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - version - - - - - - - - version - productnumber - - - - - - - - version - productnumber - - - - - - - - - - - - - Note - - meta version - - no *info/productnumber or alternative - - - - Note - - meta version - - see http://www.docbook.org/tdg5/en/html/productnumber - - - - Note - - meta version - - no refentry/refmeta/refmiscinfo@class=version - - - - Note - - meta version - - see http://www.docbook.org/tdg5/en/html/refmiscinfo - - - - - - - Gets source metadata for a refentry - - The man(7) man page describes this as "the - title of the manual (e.g., Linux Programmer's - Manual)". Here are some examples from existing man pages: - - - dpkg utilities - (dpkg-name) - - - User Contributed Perl Documentation - (GET) - - - GNU Development Tools - (ld) - - - Emperor Norton Utilities - (ddate) - - - Debian GNU/Linux manual - (faked) - - - GIMP Manual Pages - (gimp) - - - KDOC Documentation System - (qt2kdoc) - - - - - The solbook(5) man page describes - something very much like what man(7) calls - "manual", except that solbook(5) names it - "sectdesc" and describes it like this: -
    - This is the section title of the reference page; for - example User Commands. -
    -
    - -
    - - - - refname - - The first refname in the refentry - - - - info - - A set of info nodes (from a refentry - element and its ancestors) - - - - prefs - - A node containing users preferences (from global - stylesheet parameters) - - - - - - Returns a manual node. - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - manual - - - - - - - - manual - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warn - - meta manual - - using - " - - " - for "manual" - - - - - - - - [FIXME: manual] - - - Warn - - meta manual - - no fallback for manual, so inserted a fixme - - - - - - - - - - [FIXME: manual] - - - Warn - - meta manual - - no manual fallback given, so inserted a fixme - - - - - - - - - - - Note - - meta manual - - no titled ancestor of refentry - - - - Note - - meta manual - - no refentry/refmeta/refmiscinfo@class=manual - - - - Note - - meta manual - - see http://www.docbook.org/tdg5/en/html/refmiscinfo - - - - - - Gets user preferences for refentry metadata gathering - - The DocBook XSL stylesheets include several user-configurable - global stylesheet parameters for controlling refentry - metadata gathering. Those parameters are not read directly by the - other refentry metadata-gathering - templates. Instead, they are read only by the - get.refentry.metadata.prefs template, - which assembles them into a structure that is then passed to - the other refentry metadata-gathering - templates. - - So the, get.refentry.metadata.prefs - template is the only interface to collecting stylesheet parameters for - controlling refentry metadata gathering. - - - There are no local parameters for this template; however, it - does rely on a number of global parameters. - - - Returns a manual node. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Sets content of a refentry metadata item - - The set.refentry.metadata template is - called each time a suitable source element is found for a certain - metadata field. - - - - - refname - - The first refname in the refentry - - - - info - - A single *info node that contains the selected source element. - - - - contents - - A node containing the selected source element. - - - - context - - A string describing the metadata context in which the - set.refentry.metadata template was - called: either "date", "source", "version", or "manual". - - - - - - Returns formatted contents of a selected source element. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/bash/templates/build-aux/docbook-xsl/common/ro.xml b/bash/templates/build-aux/docbook-xsl/common/ro.xml deleted file mode 100644 index 35cc968..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ro.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ru.xml b/bash/templates/build-aux/docbook-xsl/common/ru.xml deleted file mode 100644 index e76c7ac..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ru.xml +++ /dev/null @@ -1,785 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -А -а -Б -б -В -в -Г -г -Д -д -Е -е -Ё -ё -Ж -ж -З -з -И -и -Й -й -К -к -Л -л -М -м -Н -н -О -о -П -п -Р -р -С -с -Т -т -У -у -Ф -ф -Х -х -Ц -ц -Ч -ч -Ш -ш -Щ -щ -Ъ -ъ -Ы -ы -Ь -ь -Э -э -Ю -ю -Я -я - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sk.xml b/bash/templates/build-aux/docbook-xsl/common/sk.xml deleted file mode 100644 index 927221a..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/sk.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sl.xml b/bash/templates/build-aux/docbook-xsl/common/sl.xml deleted file mode 100644 index e474582..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/sl.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sq.xml b/bash/templates/build-aux/docbook-xsl/common/sq.xml deleted file mode 100644 index 92554da..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/sq.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sr.xml b/bash/templates/build-aux/docbook-xsl/common/sr.xml deleted file mode 100644 index 98b26e1..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/sr.xml +++ /dev/null @@ -1,779 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Симболи -А -а -Б -б -В -в -Г -г -Д -д -Ђ -ђ -Е -е -Ж -ж -З -з -И -и -Ј -ј -К -к -Л -л -Љ -љ -М -м -Н -н -Њ -њ -О -о -П -п -Р -р -С -с -Т -т -Ћ -ћ -У -у -Ф -ф -Х -х -Ц -ц -Ч -ч -Џ -џ -Ш -ш -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -Q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml b/bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml deleted file mode 100644 index 1f88905..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/sr_Latn.xml +++ /dev/null @@ -1,738 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Simboli -A -a -B -b -C -c -Č -č -Ć -ć -D -d - - - -Đ -đ -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -LJ -Lj -lj -M -m -N -n -NJ -Nj -nj -O -o -P -p -Q -Q -R -r -S -s -Š -š -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -Ž -ž - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/stripns.xsl b/bash/templates/build-aux/docbook-xsl/common/stripns.xsl deleted file mode 100644 index dba306e..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/stripns.xsl +++ /dev/null @@ -1,370 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - info - - - objectinfo - - blockinfo - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WARNING: cannot add @xml:base to node - set root element. - Relative paths may not work. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - - - - - - - 1 - 0 - - - - - - Stripping namespace from DocBook 5 document. - It is suggested to use namespaced version of the stylesheets - available in distribution file 'docbook-xsl-ns' - at //http://sourceforge.net/projects/docbook/files/ - which does not require namespace stripping step. - - - - - Processing stripped document. - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/subtitles.xsl b/bash/templates/build-aux/docbook-xsl/common/subtitles.xsl deleted file mode 100644 index a6390a1..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/subtitles.xsl +++ /dev/null @@ -1,179 +0,0 @@ - - - - - - - - - - -Provides access to element subtitles - -Processing an element in the -subtitle.markup mode produces the -subtitle of the element. - - - - - - - - - Request for subtitle of unexpected element: - - - ???SUBTITLE??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/sv.xml b/bash/templates/build-aux/docbook-xsl/common/sv.xml deleted file mode 100644 index 6c816b8..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/sv.xml +++ /dev/null @@ -1,723 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -Å -å -Ä -ä -Ö -ö - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ta.xml b/bash/templates/build-aux/docbook-xsl/common/ta.xml deleted file mode 100644 index 64e2383..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ta.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -குறியீடுகள் -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/table.xsl b/bash/templates/build-aux/docbook-xsl/common/table.xsl deleted file mode 100644 index d5c46fe..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/table.xsl +++ /dev/null @@ -1,513 +0,0 @@ - - - - - - - - - - - 0: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0: - - - : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - -Determine the column number in which a given entry occurs - -If an entry has a -colname or -namest attribute, this template -will determine the number of the column in which the entry should occur. -For other entrys, nothing is returned. - - - -entry - -The entry-element which is to be tested. - - - - - - -This template returns the column number if it can be determined, -or 0 (the empty string) - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd b/bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd deleted file mode 100644 index 2ace1e0..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/targetdatabase.dtd +++ /dev/null @@ -1,49 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/targets.xsl b/bash/templates/build-aux/docbook-xsl/common/targets.xsl deleted file mode 100644 index aa9430c..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/targets.xsl +++ /dev/null @@ -1,336 +0,0 @@ - - - - - - - - - - -Collects information for potential cross reference targets - -Processing the root element in the -collect.targets mode produces -a set of target database elements that can be used by -the olink mechanism to resolve external cross references. -The collection process is controlled by the -collect.xref.targets parameter, which can be -yes to collect targets and process -the document for output, only to -only collect the targets, and no -(default) to not collect the targets and only process the document. - - -A targets.filename parameter must be -specified to receive the output if -collect.xref.targets is -set to yes so as to -redirect the target data to a file separate from the -document output. - - - - - - - - - - - Must specify a $targets.filename parameter when - $collect.xref.targets is set to 'yes'. - The xref targets were not collected. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: processing automatic glossary - without a glossary.collection file. - - - - - - Warning: processing automatic glossary but unable to - open glossary.collection file ' - - ' - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    diff --git a/bash/templates/build-aux/docbook-xsl/common/te.xml b/bash/templates/build-aux/docbook-xsl/common/te.xml deleted file mode 100644 index 9f72239..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/te.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -చిహ్నములు -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/th.xml b/bash/templates/build-aux/docbook-xsl/common/th.xml deleted file mode 100644 index bd86c8a..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/th.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/titles.xsl b/bash/templates/build-aux/docbook-xsl/common/titles.xsl deleted file mode 100644 index 51b1fb0..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/titles.xsl +++ /dev/null @@ -1,852 +0,0 @@ - - - - - - - - - - -Provides access to element titles - -Processing an element in the -title.markup mode produces the -title of the element. This does not include the label. - - - - - - - - - - - - - - - - - - - - - - - Request for title of element with no title: - - - - (id=" - - ") - - - (xml:id=" - - ") - - - (contained in - - - with id - - - ) - - - - - ???TITLE??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - REFENTRY WITHOUT TITLE??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: glossdiv missing its required title - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Note - Important - Caution - Warning - Tip - - - - - - - - - - - question - - - - - - - answer - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Endterm points to nonexistent ID: - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XRef to nonexistent id: - - - - ??? - - - - - - - - - - Endterm points to nonexistent ID: - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/tl.xml b/bash/templates/build-aux/docbook-xsl/common/tl.xml deleted file mode 100644 index 4ba7526..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/tl.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/tr.xml b/bash/templates/build-aux/docbook-xsl/common/tr.xml deleted file mode 100644 index a1bb893..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/tr.xml +++ /dev/null @@ -1,725 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Semboller -A -a -B -b -C -c -Ç -ç -D -d -E -e -F -f -G -g -Ğ -ğ -H -h -I -ı -İ -i -J -j -K -k -L -l -M -m -N -n -O -o -Ö -ö -P -p -R -r -S -s -Ş -ş -T -t -U -u -Ü -ü -V -v -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/uk.xml b/bash/templates/build-aux/docbook-xsl/common/uk.xml deleted file mode 100644 index fe0fd63..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/uk.xml +++ /dev/null @@ -1,785 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z -А -а -Б -б -В -в -Г -г -Ґ -ґ -Д -д -Е -е -Є -є -Ж -ж -З -з -И -и -І -і -Ї -ї -Й -й -К -к -Л -л -М -м -Н -н -О -о -П -п -Р -р -С -с -Т -т -У -у -Ф -ф -Х -х -Ц -ц -Ч -ч -Ш -ш -Щ -щ -Ь -ь -Ю -ю -Я -я - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/ur.xml b/bash/templates/build-aux/docbook-xsl/common/ur.xml deleted file mode 100644 index 46a6a3e..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/ur.xml +++ /dev/null @@ -1,721 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -ا -آ -ب -بھ -پ -پھ -ت -تھ -ٹ -ٹھ -ث -ج -جھ -چ -چھ -ح -خ -د -دھ -ڈ -ڈھ -ذ -ر -رھ -ڑ -ڑھ -ز -ژ -س -ش -ص -ض -ط -ظ -ع -غ -ف -ق -ک -کھ -گ -گھ -ل -لھ -م -مھ -ن -نھ -و -وھ -ہ -ء -ی -ے - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/utility.xml b/bash/templates/build-aux/docbook-xsl/common/utility.xml deleted file mode 100644 index c961340..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/utility.xml +++ /dev/null @@ -1,256 +0,0 @@ - - - - Common » Utility Template Reference - - - - - - Introduction - -This is technical reference documentation for the - miscellaneous utility templates in the DocBook XSL - Stylesheets. - - - -These templates are defined in a separate file from the set - of “common” templates because some of the common templates - reference DocBook XSL stylesheet parameters, requiring the - entire set of parameters to be imported/included in any - stylesheet that imports/includes the common templates. - - -The utility templates don’t import or include any DocBook - XSL stylesheet parameters, so the utility templates can be used - without importing the whole set of parameters. - - - -This is not intended to be user documentation. It is - provided for developers writing customization layers for the - stylesheets. - - - - - -log.message -Logs/emits formatted notes and warnings - - -<xsl:template name="log.message"> -<xsl:param name="level"/> -<xsl:param name="source"/> -<xsl:param name="context-desc"/> -<xsl:param name="context-desc-field-length">12</xsl:param> -<xsl:param name="context-desc-padded"> - <xsl:if test="not($context-desc = '')"> - <xsl:call-template name="pad-string"> - <xsl:with-param name="leftRight">right</xsl:with-param> - <xsl:with-param name="padVar" select="substring($context-desc, 1, $context-desc-field-length)"/> - <xsl:with-param name="length" select="$context-desc-field-length"/> - </xsl:call-template> - </xsl:if> - </xsl:param> -<xsl:param name="message"/> -<xsl:param name="message-field-length" select="45"/> -<xsl:param name="message-padded"> - <xsl:variable name="spaces-for-blank-level"> - <!-- * if the level field is blank, we'll need to pad out --> - <!-- * the message field with spaces to compensate --> - <xsl:choose> - <xsl:when test="$level = ''"> - <xsl:value-of select="4 + 2"/> - <!-- * 4 = hard-coded length of comment text ("Note" or "Warn") --> - <!-- * + 2 = length of colon-plus-space separator ": " --> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="0"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="spaces-for-blank-context-desc"> - <!-- * if the context-description field is blank, we'll need --> - <!-- * to pad out the message field with spaces to compensate --> - <xsl:choose> - <xsl:when test="$context-desc = ''"> - <xsl:value-of select="$context-desc-field-length + 2"/> - <!-- * + 2 = length of colon-plus-space separator ": " --> - </xsl:when> - <xsl:otherwise> - <xsl:value-of select="0"/> - </xsl:otherwise> - </xsl:choose> - </xsl:variable> - <xsl:variable name="extra-spaces" select="$spaces-for-blank-level + $spaces-for-blank-context-desc"/> - <xsl:call-template name="pad-string"> - <xsl:with-param name="leftRight">right</xsl:with-param> - <xsl:with-param name="padVar" select="substring($message, 1, ($message-field-length + $extra-spaces))"/> - <xsl:with-param name="length" select="$message-field-length + $extra-spaces"/> - </xsl:call-template> - </xsl:param> - ... -</xsl:template> - -Description - -The log.message template is a utility - template for logging/emitting formatted messages – that is, - notes and warnings, along with a given log “level” and an - identifier for the “source” that the message relates to. - - Parameters - - - level - - -Text to log/emit in the message-level field to - indicate the message level - (Note or - Warning) - - - - source - - -Text to log/emit in the source field to identify the - “source” to which the notification/warning relates. - This can be any arbitrary string, but because the - message lacks line and column numbers to identify the - exact part of the source document to which it - relates, the intention is that the value you pass - into the source parameter should - give the user some way to identify the portion of - their source document on which to take potentially - take action in response to the log message (for - example, to edit, change, or add content). - - -So the source value should be, - for example, an ID, book/chapter/article title, title - of some formal object, or even a string giving an - XPath expression. - - - - context-desc - - -Text to log/emit in the context-description field to - describe the context for the message. - - - - context-desc-field-length - - -Specifies length of the context-description field - (in characters); default is 12 - - -If the text specified by the - context-desc parameter is longer - than the number of characters specified in - context-desc-field-length, it is - truncated to context-desc-field-length - (12 characters by default). - - -If the specified text is shorter than - context-desc-field-length, - it is right-padded out to - context-desc-field-length (12 by - default). - - -If no value has been specified for the - context-desc parameter, the field is - left empty and the text of the log message begins with - the value of the message - parameter. - - - - message - - -Text to log/emit in the actual message field - - - - message-field-length - - -Specifies length of the message - field (in characters); default is 45 - - - - - - Returns - -Outputs a message (generally, to standard error). - - - - -get.doc.title -Gets a title from the current document - - -<xsl:template name="get.doc.title"/> - -Description - -The get.doc.title template is a - utility template for returning the first title found in the - current document. - - Returns - -Returns a string containing some identifying title for the - current document . - - - - -pad-string -Right-pads or left-pads a string out to a certain length - - -<xsl:template name="pad-string"> -<xsl:param name="padChar" select="' '"/> -<xsl:param name="leftRight">left</xsl:param> -<xsl:param name="padVar"/> -<xsl:param name="length"/> - ... -</xsl:template> - -Description - -This function takes string padVar and - pads it out in the direction rightLeft to - the string-length length, using string - padChar (a space character by default) as - the padding string (note that padChar can - be a string; it is not limited to just being a single - character). - - - -This function began as a copy of Nate Austin's - prepend-pad function in the Padding - Content section of Dave Pawson's XSLT - FAQ. - - - Returns - -Returns a (padded) string. - - diff --git a/bash/templates/build-aux/docbook-xsl/common/utility.xsl b/bash/templates/build-aux/docbook-xsl/common/utility.xsl deleted file mode 100644 index 83ee041..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/utility.xsl +++ /dev/null @@ -1,288 +0,0 @@ - - - - - - - Common » Utility Template Reference - - - - - - Introduction - This is technical reference documentation for the - miscellaneous utility templates in the DocBook XSL - Stylesheets. - - These templates are defined in a separate file from the set - of “common” templates because some of the common templates - reference DocBook XSL stylesheet parameters, requiring the - entire set of parameters to be imported/included in any - stylesheet that imports/includes the common templates. - The utility templates don’t import or include any DocBook - XSL stylesheet parameters, so the utility templates can be used - without importing the whole set of parameters. - - This is not intended to be user documentation. It is - provided for developers writing customization layers for the - stylesheets. - - - - - - - Logs/emits formatted notes and warnings - - - The log.message template is a utility - template for logging/emitting formatted messages – that is, - notes and warnings, along with a given log “level” and an - identifier for the “source” that the message relates to. - - - - - level - - Text to log/emit in the message-level field to - indicate the message level - (Note or - Warning) - - - source - - Text to log/emit in the source field to identify the - “source” to which the notification/warning relates. - This can be any arbitrary string, but because the - message lacks line and column numbers to identify the - exact part of the source document to which it - relates, the intention is that the value you pass - into the source parameter should - give the user some way to identify the portion of - their source document on which to take potentially - take action in response to the log message (for - example, to edit, change, or add content). - So the source value should be, - for example, an ID, book/chapter/article title, title - of some formal object, or even a string giving an - XPath expression. - - - context-desc - - Text to log/emit in the context-description field to - describe the context for the message. - - - context-desc-field-length - - Specifies length of the context-description field - (in characters); default is 12 - If the text specified by the - context-desc parameter is longer - than the number of characters specified in - context-desc-field-length, it is - truncated to context-desc-field-length - (12 characters by default). - If the specified text is shorter than - context-desc-field-length, - it is right-padded out to - context-desc-field-length (12 by - default). - If no value has been specified for the - context-desc parameter, the field is - left empty and the text of the log message begins with - the value of the message - parameter. - - - message - - Text to log/emit in the actual message field - - - message-field-length - - Specifies length of the message - field (in characters); default is 45 - - - - - - Outputs a message (generally, to standard error). - - - - - - 12 - - - - right - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - right - - - - - - - - - : - - - - : - - - - - - - - - - Gets a title from the current document - - The get.doc.title template is a - utility template for returning the first title found in the - current document. - - - Returns a string containing some identifying title for the - current document . - - - - - - - - - - - - - - - Right-pads or left-pads a string out to a certain length - - This function takes string padVar and - pads it out in the direction rightLeft to - the string-length length, using string - padChar (a space character by default) as - the padding string (note that padChar can - be a string; it is not limited to just being a single - character). - - This function began as a copy of Nate Austin's - prepend-pad function in the Padding - Content section of Dave Pawson's XSLT - FAQ. - - - - Returns a (padded) string. - - - - - - left - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/common/vi.xml b/bash/templates/build-aux/docbook-xsl/common/vi.xml deleted file mode 100644 index 6eab6ff..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/vi.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/xh.xml b/bash/templates/build-aux/docbook-xsl/common/xh.xml deleted file mode 100644 index dfdf92f..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/xh.xml +++ /dev/null @@ -1,1288 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Symbols -A -a -À -à -Á -á -Â -â -Ã -ã -Ä -ä -Å -å -Ā -ā -Ă -ă -Ą -ą -Ǎ -ǎ -Ǟ -ǟ -Ǡ -ǡ -Ǻ -ǻ -Ȁ -ȁ -Ȃ -ȃ -Ȧ -ȧ - - - - - - - - - - - - - - - - - - - - - - - - - - - -B -b -ƀ -Ɓ -ɓ -Ƃ -ƃ - - - - - - -C -c -Ç -ç -Ć -ć -Ĉ -ĉ -Ċ -ċ -Č -č -Ƈ -ƈ -ɕ - - -D -d -Ď -ď -Đ -đ -Ɗ -ɗ -Ƌ -ƌ -Dž -Dz -ȡ -ɖ - - - - - - - - - - -E -e -È -è -É -é -Ê -ê -Ë -ë -Ē -ē -Ĕ -ĕ -Ė -ė -Ę -ę -Ě -ě -Ȅ -ȅ -Ȇ -ȇ -Ȩ -ȩ - - - - - - - - - - - - - - - - - -ế - - - - - - - - -F -f -Ƒ -ƒ - - -G -g -Ĝ -ĝ -Ğ -ğ -Ġ -ġ -Ģ -ģ -Ɠ -ɠ -Ǥ -ǥ -Ǧ -ǧ -Ǵ -ǵ - - -H -h -Ĥ -ĥ -Ħ -ħ -Ȟ -ȟ -ɦ - - - - - - - - - - - -I -i -Ì -ì -Í -í -Î -î -Ï -ï -Ĩ -ĩ -Ī -ī -Ĭ -ĭ -Į -į -İ -Ɨ -ɨ -Ǐ -ǐ -Ȉ -ȉ -Ȋ -ȋ - - - - - - - - -J -j -Ĵ -ĵ -ǰ -ʝ -K -k -Ķ -ķ -Ƙ -ƙ -Ǩ -ǩ - - - - - - -L -l -Ĺ -ĺ -Ļ -ļ -Ľ -ľ -Ŀ -ŀ -Ł -ł -ƚ -Lj -ȴ -ɫ -ɬ -ɭ - - - - - - - - -M -m -ɱ - -ḿ - - - - -N -n -Ñ -ñ -Ń -ń -Ņ -ņ -Ň -ň -Ɲ -ɲ -ƞ -Ƞ -Nj -Ǹ -ǹ -ȵ -ɳ - - - - - - - - -O -o -Ò -ò -Ó -ó -Ô -ô -Õ -õ -Ö -ö -Ø -ø -Ō -ō -Ŏ -ŏ -Ő -ő -Ɵ -Ơ -ơ -Ǒ -ǒ -Ǫ -ǫ -Ǭ -ǭ -Ǿ -ǿ -Ȍ -ȍ -Ȏ -ȏ -Ȫ -ȫ -Ȭ -ȭ -Ȯ -ȯ -Ȱ -ȱ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -P -p -Ƥ -ƥ - - - - -Q -q -ʠ -R -r -Ŕ -ŕ -Ŗ -ŗ -Ř -ř -Ȑ -ȑ -Ȓ -ȓ -ɼ -ɽ -ɾ - - - - - - - - -S -s -Ś -ś -Ŝ -ŝ -Ş -ş -Š -š -Ș -ș -ʂ - - - - - - - - - - -T -t -Ţ -ţ -Ť -ť -Ŧ -ŧ -ƫ -Ƭ -ƭ -Ʈ -ʈ -Ț -ț -ȶ - - - - - - - - - -U -u -Ù -ù -Ú -ú -Û -û -Ü -ü -Ũ -ũ -Ū -ū -Ŭ -ŭ -Ů -ů -Ű -ű -Ų -ų -Ư -ư -Ǔ -ǔ -Ǖ -ǖ -Ǘ -ǘ -Ǚ -ǚ -Ǜ -ǜ -Ȕ -ȕ -Ȗ -ȗ - - - - - - - - - - - - - - - - - - - - - - - - -V -v -Ʋ -ʋ - - - -ṿ -W -w -Ŵ -ŵ - - - - - - - - - - - -X -x - - - - -Y -y -Ý -ý -ÿ -Ÿ -Ŷ -ŷ -Ƴ -ƴ -Ȳ -ȳ - - - - - - - - - - - -Z -z -Ź -ź -Ż -ż -Ž -ž -Ƶ -ƶ -Ȥ -ȥ -ʐ -ʑ - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/zh.xml b/bash/templates/build-aux/docbook-xsl/common/zh.xml deleted file mode 100644 index 699a3ce..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/zh.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -符号 -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/zh_cn.xml b/bash/templates/build-aux/docbook-xsl/common/zh_cn.xml deleted file mode 100644 index ed1f0dc..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/zh_cn.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -符号 -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/common/zh_tw.xml b/bash/templates/build-aux/docbook-xsl/common/zh_tw.xml deleted file mode 100644 index 3f6004b..0000000 --- a/bash/templates/build-aux/docbook-xsl/common/zh_tw.xml +++ /dev/null @@ -1,719 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -符號 -A -a -B -b -C -c -D -d -E -e -F -f -G -g -H -h -I -i -J -j -K -k -L -l -M -m -N -n -O -o -P -p -Q -q -R -r -S -s -T -t -U -u -V -v -W -w -X -x -Y -y -Z -z - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/epub/README b/bash/templates/build-aux/docbook-xsl/epub/README deleted file mode 100644 index 5e2587a..0000000 --- a/bash/templates/build-aux/docbook-xsl/epub/README +++ /dev/null @@ -1,88 +0,0 @@ ----------------------------------------------------------------------- - README file for the DocBook XSL Stylesheets ----------------------------------------------------------------------- - -These are XSL stylesheets for transforming DocBook XML document -instances into .epub format. - -.epub is an open standard of the The International Digital Publishing Forum (IDPF), -a the trade and standards association for the digital publishing industry. - -An alpha-quality reference implementation (dbtoepub) for a DocBook to .epub -converter (written in Ruby) is available under bin/. - -From http://idpf.org - What is EPUB, .epub, OPS/OCF & OEB? - - ".epub" is the file extension of an XML format for reflowable digital - books and publications. ".epub" is composed of three open standards, - the Open Publication Structure (OPS), Open Packaging Format (OPF) and - Open Container Format (OCF), produced by the IDPF. "EPUB" allows - publishers to produce and send a single digital publication file - through distribution and offers consumers interoperability between - software/hardware for unencrypted reflowable digital books and other - publications. The Open eBook Publication Structure or "OEB", - originally produced in 1999, is the precursor to OPS. - ----------------------------------------------------------------------- -.epub Constraints ----------------------------------------------------------------------- - -.epub does not support all of the image formats that DocBook supports. -When an image is available in an accepted format, it will be used. The -accepted @formats are: 'GIF','GIF87a','GIF89a','JPEG','JPG','PNG','SVG' -A mime-type for the image will be guessed from the file extension, -which may not work if your file extensions are non-standard. - -Non-supported elements: - * - * , , , with text/XML - @filerefs - * - * in lists (generic XHTML rendering inability) - * (just make your programlistings - siblings, rather than descendents of paras) - ----------------------------------------------------------------------- -dbtoepub Reference Implementation ----------------------------------------------------------------------- - -An alpha-quality DocBook to .epub conversion program, dbtoepub, is provided -in bin/dbtoepub. - -This tool requires: - - 'xsltproc' in your PATH - - 'zip' in your PATH - - Ruby 1.8.4+ - -Windows compatibility has not been extensively tested; bug reports encouraged. -[See http://www.zlatkovic.com/libxml.en.html and http://unxutils.sourceforge.net/] - -$ dbtoepub --help - Usage: dbtoepub [OPTIONS] [DocBook Files] - - dbtoepub converts DocBook and
    s into to .epub files. - - .epub is defined by the IDPF at www.idpf.org and is made up of 3 standards: - - Open Publication Structure (OPS) - - Open Packaging Format (OPF) - - Open Container Format (OCF) - - Specific options: - -d, --debug Show debugging output. - -h, --help Display usage info - -v, --verbose Make output verbose - - ----------------------------------------------------------------------- -Validation ----------------------------------------------------------------------- - -The epubcheck project provides limited validation for .epub documents. -See http://code.google.com/p/epubcheck/ for details. - ----------------------------------------------------------------------- -Copyright information ----------------------------------------------------------------------- -See the accompanying file named COPYING. - diff --git a/bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub b/bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub deleted file mode 100755 index 9976f81..0000000 --- a/bash/templates/build-aux/docbook-xsl/epub/bin/dbtoepub +++ /dev/null @@ -1,76 +0,0 @@ -#!/usr/bin/env ruby -# This program converts DocBook documents into .epub files. -# -# Usage: dbtoepub [OPTIONS] [DocBook Files] -# -# .epub is defined by the IDPF at www.idpf.org and is made up of 3 standards: -# - Open Publication Structure (OPS) -# - Open Packaging Format (OPF) -# - Open Container Format (OCF) -# -# Specific options: -# -c, --css [FILE] Use FILE for CSS on generated XHTML. -# -d, --debug Show debugging output. -# -f, --font [OTF FILE] Embed OTF FILE in .epub. -# -h, --help Display usage info. -# -s, --stylesheet [XSL FILE] Use XSL FILE as a customization -# layer (imports epub/docbook.xsl). -# -v, --verbose Make output verbose. - -lib = File.expand_path(File.join(File.dirname(__FILE__), 'lib')) -$LOAD_PATH.unshift(lib) if File.exist?(lib) - -require 'fileutils' -require 'optparse' -require 'tmpdir' - -require 'docbook' - -verbose = false -debug = false -css_file = nil -otf_files = [] -customization_layer = nil -output_file = nil - -#$DEBUG=true - -# Set up the OptionParser -opts = OptionParser.new -opts.banner = "Usage: #{File.basename($0)} [OPTIONS] [DocBook Files] - -#{File.basename($0)} converts DocBook and
    s into to .epub files. - -.epub is defined by the IDPF at www.idpf.org and is made up of 3 standards: -- Open Publication Structure (OPS) -- Open Packaging Format (OPF) -- Open Container Format (OCF) - -Specific options:" -opts.on("-c", "--css [FILE]", "Use FILE for CSS on generated XHTML.") {|f| css_file = f} -opts.on("-d", "--debug", "Show debugging output.") {debug = true; verbose = true} -opts.on("-f", "--font [OTF FILE]", "Embed OTF FILE in .epub.") {|f| otf_files << f} -opts.on("-h", "--help", "Display usage info.") {puts opts.to_s; exit 0} -opts.on("-o", "--output [OUTPUT FILE]", "Output ePub file as OUTPUT FILE.") {|f| output_file = f} -opts.on("-s", "--stylesheet [XSL FILE]", "Use XSL FILE as a customization layer (imports epub/docbook.xsl).") {|f| customization_layer = f} -opts.on("-v", "--verbose", "Make output verbose.") {verbose = true} - -db_files = opts.parse(ARGV) -if db_files.size == 0 - puts opts.to_s - exit 0 -end - -db_files.each {|docbook_file| - dir = File.expand_path(File.join(Dir.tmpdir, ".epubtmp#{Time.now.to_f.to_s}")) - FileUtils.mkdir_p(dir) - e = DocBook::Epub.new(docbook_file, dir, css_file, customization_layer, otf_files) - - if output_file - epub_file = output_file - else - epub_file = File.basename(docbook_file, ".xml") + ".epub" - end - puts "Rendering DocBook file #{docbook_file} to #{epub_file}" if verbose - e.render_to_file(epub_file) -} diff --git a/bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb b/bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb deleted file mode 100755 index 14110d6..0000000 --- a/bash/templates/build-aux/docbook-xsl/epub/bin/lib/docbook.rb +++ /dev/null @@ -1,227 +0,0 @@ -require 'fileutils' -require 'rexml/parsers/pullparser' - -module DocBook - - class Epub - CHECKER = "epubcheck" - STYLESHEET = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', "docbook.xsl")) - CALLOUT_PATH = File.join('images', 'callouts') - CALLOUT_FULL_PATH = File.expand_path(File.join(File.dirname(__FILE__), '..', '..', '..', CALLOUT_PATH)) - CALLOUT_LIMIT = 15 - CALLOUT_EXT = ".png" - XSLT_PROCESSOR = "xsltproc" - OUTPUT_DIR = ".epubtmp#{Time.now.to_f.to_s}" - MIMETYPE = "application/epub+zip" - META_DIR = "META-INF" - OEBPS_DIR = "OEBPS" - ZIPPER = "zip" - - attr_reader :output_dir - - def initialize(docbook_file, output_dir=OUTPUT_DIR, css_file=nil, customization_layer=nil, embedded_fonts=[]) - @docbook_file = docbook_file - @output_dir = output_dir - @meta_dir = File.join(@output_dir, META_DIR) - @oebps_dir = File.join(@output_dir, OEBPS_DIR) - @css_file = css_file ? File.expand_path(css_file) : css_file - @embedded_fonts = embedded_fonts - @to_delete = [] - - if customization_layer - @stylesheet = File.expand_path(customization_layer) - else - @stylesheet = STYLESHEET - end - - unless File.exist?(@docbook_file) - raise ArgumentError.new("File #{@docbook_file} does not exist") - end - end - - def render_to_file(output_file, verbose=false) - render_to_epub(output_file, verbose) - bundle_epub(output_file, verbose) - cleanup_files(@to_delete) - end - - def self.invalid?(file) - # Obnoxiously, we can't just check for a non-zero output... - cmd = %Q(#{CHECKER} "#{file}") - output = `#{cmd} 2>&1` - - if $?.to_i == 0 - return false - else - STDERR.puts output if $DEBUG - return output - end - end - - private - def render_to_epub(output_file, verbose) - @collapsed_docbook_file = collapse_docbook() - - chunk_quietly = "--stringparam chunk.quietly " + (verbose ? '0' : '1') - callout_path = "--stringparam callout.graphics.path #{CALLOUT_PATH}/" - callout_limit = "--stringparam callout.graphics.number.limit #{CALLOUT_LIMIT}" - callout_ext = "--stringparam callout.graphics.extension #{CALLOUT_EXT}" - html_stylesheet = "--stringparam html.stylesheet #{File.basename(@css_file)}" if @css_file - base = "--stringparam base.dir #{OEBPS_DIR}/" - unless @embedded_fonts.empty? - embedded_fonts = @embedded_fonts.map {|f| File.basename(f)}.join(',') - font = "--stringparam epub.embedded.fonts \"#{embedded_fonts}\"" - end - meta = "--stringparam epub.metainf.dir #{META_DIR}/" - oebps = "--stringparam epub.oebps.dir #{OEBPS_DIR}/" - options = [chunk_quietly, - callout_path, - callout_limit, - callout_ext, - base, - font, - meta, - oebps, - html_stylesheet, - ].join(" ") - # Double-quote stylesheet & file to help Windows cmd.exe - db2epub_cmd = %Q(cd "#{@output_dir}" && #{XSLT_PROCESSOR} #{options} "#{@stylesheet}" "#{@collapsed_docbook_file}") - STDERR.puts db2epub_cmd if $DEBUG - success = system(db2epub_cmd) - raise "Could not render as .epub to #{output_file} (#{db2epub_cmd})" unless success - @to_delete << Dir["#{@meta_dir}/*"] - @to_delete << Dir["#{@oebps_dir}/*"] - end - - def bundle_epub(output_file, verbose) - - quiet = verbose ? "" : "-q" - mimetype_filename = write_mimetype() - meta = File.basename(@meta_dir) - oebps = File.basename(@oebps_dir) - images = copy_images() - csses = copy_csses() - fonts = copy_fonts() - callouts = copy_callouts() - # zip -X -r ../book.epub mimetype META-INF OEBPS - # Double-quote stylesheet & file to help Windows cmd.exe - zip_cmd = %Q(cd "#{@output_dir}" && #{ZIPPER} #{quiet} -X -r "#{File.expand_path(output_file)}" "#{mimetype_filename}" "#{meta}" "#{oebps}") - puts zip_cmd if $DEBUG - success = system(zip_cmd) - raise "Could not bundle into .epub file to #{output_file}" unless success - end - - # Input must be collapsed because REXML couldn't find figures in files that - # were XIncluded or added by ENTITY - # http://sourceforge.net/tracker/?func=detail&aid=2750442&group_id=21935&atid=373747 - def collapse_docbook - # Double-quote stylesheet & file to help Windows cmd.exe - collapsed_file = File.join(File.expand_path(File.dirname(@docbook_file)), - '.collapsed.' + File.basename(@docbook_file)) - entity_collapse_command = %Q(xmllint --loaddtd --noent -o "#{collapsed_file}" "#{@docbook_file}") - entity_success = system(entity_collapse_command) - raise "Could not collapse named entites in #{@docbook_file}" unless entity_success - - xinclude_collapse_command = %Q(xmllint --xinclude -o "#{collapsed_file}" "#{collapsed_file}") - xinclude_success = system(xinclude_collapse_command) - raise "Could not collapse XIncludes in #{@docbook_file}" unless xinclude_success - - @to_delete << collapsed_file - return collapsed_file - end - - def copy_callouts - new_callout_images = [] - if has_callouts? - calloutglob = "#{CALLOUT_FULL_PATH}/*#{CALLOUT_EXT}" - Dir.glob(calloutglob).each {|img| - img_new_filename = File.join(@oebps_dir, CALLOUT_PATH, File.basename(img)) - - # TODO: What to rescue for these two? - FileUtils.mkdir_p(File.dirname(img_new_filename)) - FileUtils.cp(img, img_new_filename) - @to_delete << img_new_filename - new_callout_images << img - } - end - return new_callout_images - end - - def copy_fonts - new_fonts = [] - @embedded_fonts.each {|font_file| - font_new_filename = File.join(@oebps_dir, File.basename(font_file)) - FileUtils.cp(font_file, font_new_filename) - new_fonts << font_file - } - return new_fonts - end - - def copy_csses - if @css_file - css_new_filename = File.join(@oebps_dir, File.basename(@css_file)) - FileUtils.cp(@css_file, css_new_filename) - end - end - - def copy_images - image_references = get_image_refs() - new_images = [] - image_references.each {|img| - # TODO: It'd be cooler if we had a filetype lookup rather than just - # extension - if img =~ /\.(svg|png|gif|jpe?g|xml)/i - img_new_filename = File.join(@oebps_dir, img) - img_full = File.join(File.expand_path(File.dirname(@docbook_file)), img) - - # TODO: What to rescue for these two? - FileUtils.mkdir_p(File.dirname(img_new_filename)) - puts(img_full + ": " + img_new_filename) if $DEBUG - FileUtils.cp(img_full, img_new_filename) - @to_delete << img_new_filename - new_images << img_full - end - } - return new_images - end - - def write_mimetype - mimetype_filename = File.join(@output_dir, "mimetype") - File.open(mimetype_filename, "w") {|f| f.print MIMETYPE} - @to_delete << mimetype_filename - return File.basename(mimetype_filename) - end - - def cleanup_files(file_list) - file_list.flatten.each {|f| - # Yikes - FileUtils.rm_r(f, :force => true ) - } - end - - # Returns an Array of all of the (image) @filerefs in a document - def get_image_refs - parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file)) - image_refs = [] - while parser.has_next? - el = parser.pull - if el.start_element? and (el[0] == "imagedata" or el[0] == "graphic") - image_refs << el[1]['fileref'] - end - end - return image_refs.uniq - end - - # Returns true if the document has code callouts - def has_callouts? - parser = REXML::Parsers::PullParser.new(File.new(@collapsed_docbook_file)) - while parser.has_next? - el = parser.pull - if el.start_element? and (el[0] == "calloutlist" or el[0] == "co") - return true - end - end - return false - end - end -end diff --git a/bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl b/bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl deleted file mode 100644 index 575bb74..0000000 --- a/bash/templates/build-aux/docbook-xsl/epub/bin/xslt/obfuscate.xsl +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/epub/docbook.xsl b/bash/templates/build-aux/docbook-xsl/epub/docbook.xsl deleted file mode 100644 index 29d7fc8..0000000 --- a/bash/templates/build-aux/docbook-xsl/epub/docbook.xsl +++ /dev/null @@ -1,1835 +0,0 @@ - - - - - - - - - - 1 - 2 - - book toc,title - - - - - 4 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - - / - - - - - - - - ncxtoc - htmltoc - - - - - - 0 - - - - - - - - .png - - - - - - - - - - - - - - - - 1 - - - 1 - - - 1 - - - 1 - - - 0 - - - - - - - - - - - - - - - - - Note - - - namesp. add - - - added namespace before processing - - - - - - - - - Unable to add the namespace from DB4 document, - cannot proceed. - - - - - - - - - ID ' - - ' not found in document. - - - - - - - - - Formatting from - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - urn: - - : - - - - - urn:isbn: - - - - urn:issn: - - - - - - - - - - - - - - - - - - - - - - - - - _ - - - - - - - - - - - - - - - - - - - - - - - - - - ../ - - - - - - - - - - - 2.0 - - - - - - - - - - - - - - - - - - - - - - cover - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1.0 - - - - - - - application/oebps-package+xml - - - - - - - - - - - - - - - - - - - - - - - - - 2005-1 - - - - - - cover - - - - - - - dtb:uid - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Y-m-d - - - - - - - - - - - - - - - - - - : - - - - - - - - : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - © - - - - - - - - - - - - - - - - - - cover - Cover - - - - - - - - - - - toc - Table of Contents - - - - - - - - - - - - - - - - - - - yes - - - - - - - - - - - - - - - - - - - - - - - - - - - - yes - - no - - - - - - - - - - - - - - - - - - - - - - - - - - - - - application/x-dtbncx+xml - - - - - - - application/xhtml+xml - - - - - - - - - - - - - - - - - - - - - application/xhtml+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - image/gif - - - image/gif - - - image/png - - - image/png - - - image/jpeg - - - image/jpeg - - - image/jpeg - - - image/jpeg - - - image/svg+xml - - - image/svg+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - WARNING: mediaobjectco almost certainly will not render as expected in .epub! - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - application/xhtml+xml - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - (missing alt) - - - - - - - - - - - - - - text-align: - - middle - - - - - - - - - - - - - - - - - - - - - - 1 - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - 1 - 1 - 1 - 1 - 1 - 1 - - 1 - - 1 - 1 - 1 - 1 - 1 - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No insertfile extension available. - - - - - - - - No insertfile extension available. Use a different processor (with extensions) or turn on $use.extensions and $textinsert.extension (see docs for more). - - - - - - - - - - - - - - - - - - - - - - - - - - - - Cover - - text/css - - img { max-width: 100%; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -toc - - - - - - - - - - - - - - - - - - - - - - - - font/opentype - - - - WARNING: OpenType fonts should be supplied! ( - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 - - - - - - - - - - clear: both - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - 1 - - - - - - - 1 - 2 - 3 - 4 - 5 - - - - - - - - - - - - - - - - - - - - - - - - 6 - 5 - 4 - 3 - 2 - 1 - - - - - title - - - - - - - - - - - - - - - - - http://www.idpf.org/2007/opf - - - - - - - text/css - - html-css - - - - - - - - - - - - - - - - - - - text/css - - html-css - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/lib/build.xml b/bash/templates/build-aux/docbook-xsl/lib/build.xml deleted file mode 100644 index 06180f5..0000000 --- a/bash/templates/build-aux/docbook-xsl/lib/build.xml +++ /dev/null @@ -1,24 +0,0 @@ - - - - - - - - - - - Building XSLT library... - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/lib/lib.xsl b/bash/templates/build-aux/docbook-xsl/lib/lib.xsl deleted file mode 100644 index e65776a..0000000 --- a/bash/templates/build-aux/docbook-xsl/lib/lib.xsl +++ /dev/null @@ -1,526 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - http://... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unrecognized unit of measure: - - . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unrecognized unit of measure: - - . - - - - - - - filename - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl deleted file mode 100644 index bac7463..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/admon.xsl +++ /dev/null @@ -1,133 +0,0 @@ - - - - - - - 25 - - - - - - - - - - - - - - - - - - note - warning - caution - tip - important - note - - - - - - - - Note - Warning - Caution - Tip - Important - Note - - - - - - - - - -
    - - - - - - - - - - - - - - - : - - - - - - - - - - - -
    - - [{$alt}] - - - - - - - - - -
    - -
    -
    -
    - - -
    - - - - - - - - - - - -

    - - -

    -
    - - -
    -
    - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl deleted file mode 100644 index 03f9d81..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/annotations.xsl +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - <xsl:copy-of select="$title"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Note - - - namesp. add - - - added namespace before processing - - - - - - - - - Unable to add the namespace from DB4 document, - cannot proceed. - - - - - - - - - ID ' - - ' not found in document. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl deleted file mode 100644 index 82faaa4..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/ebnf.xsl +++ /dev/null @@ -1,324 +0,0 @@ - - - - - - - - -Walsh -Norman -19992000 -Norman Walsh - - -HTML EBNF Reference - - -
    Introduction - -This is technical reference documentation for the DocBook XSL -Stylesheets; it documents (some of) the parameters, templates, and -other elements of the stylesheets. - -This reference describes the templates and parameters relevant -to formatting EBNF markup. - -This is not intended to be user documentation. -It is provided for developers writing customization layers for the -stylesheets, and for anyone who's interested in how it -works. - -Although I am trying to be thorough, this documentation is known -to be incomplete. Don't forget to read the source, too :-) -
    -
    -
    - - - - - - - background-color: - - - - - 1 - - - - - - EBNF - - for - - - - - - - - - - - - -
    - - -
    - - - background-color: - - - - - - - EBNF productions - -
    -
    -
    - - - - - - - - - - [ - - ] - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - Error: no ID for productionrecap linkend: - - . - - - - - - Warning: multiple "IDs" for productionrecap linkend: - - . - - - - - - - - - - - - - - - - | -
    -
    -
    - - - - - - - - - - - - - - - production - - - - - - - - - Non-terminals with no content must point to - production elements in the current document. - - - Invalid xpointer for empty nt: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ??? - - - - - - - - - - - - - /*  - -  */ -
    -
    - - - - - - - - - constraintdef - - - - - - - - - - - - - - - - : - - - - - - - : - - - - - - - - - -  ] - -
    -
    -
    - - -
    - - - - -
    -
    - - -

    -
    - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl deleted file mode 100644 index ba50093..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/footnote.xsl +++ /dev/null @@ -1,325 +0,0 @@ - - - - - - - - - - - - - #ftn. - - - - - - - - - - - - - - - - - [ - - ] - - - - - - - - - - -ERROR: A footnoteref element has a linkend that points to an element that is not a footnote. -Typically this happens when an id attribute is accidentally applied to the child of a footnote element. -target element: -linkend/id: - - - - - - - - - - - - #ftn. - - - - - - - - - [ - - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - - - - - - - - - [ - - ] - - - - - - - - - - - - - ftn. - - - - - - # - - - - - - - - - - - - - - - - - - - - - [ - - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - -
    -
    - - -
    -
    -

    The following annotations are from this essay. You are seeing - them here because your browser doesn’t support the user-interface - techniques used to make them appear as ‘popups’ on modern browsers.

    -
    - - -
    -
    -
    - - - - - - - - - - - - ftn. - - - - - - - -
    - - -
    -
    - - -
    - - - - -
    -
    - - - - Warning: footnote number may not be generated - correctly; - - unexpected as first child of footnote. - -
    - - - -
    -
    -
    -
    - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl deleted file mode 100644 index 0c34c76..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/formal.xsl +++ /dev/null @@ -1,489 +0,0 @@ - - - - -1 - - - - - - - - - - -
    - - - - - - - - - - -
    - -
    - - - - - -

    - - -

    -

    - - - - - - - -
    -
    - -
    -
    -
    - - - - - - - - - -float - - - - - - - - - -
    - - - - - - - - - - - - - -
    - -
    -
    - -

    - - - -

    -
    -
    -
    - - - - - - - -
    - -

    - - - - - - - - -

    -

    -
    - - - - - - - - - -float - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - before - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - before - - - - - - - - - -
    - - - - - - - - - - - - -
    - -
    - - - -

    - - -

    - -

    - -
    - - - - - -
    -
    - -
    -
    -
    - - - - - - - - - -float - - - - - - - - - -
    - - - - Broken table: tr descendent of CALS Table. - - - - - - - - - - before - - - - - - - - - - - - - - - - - - - - - - - - - Broken table: row descendent of HTML table. - - - - - - - - - - - - - - - - - - - - - - - - before - - - - - - - - - - - - - - - - - - - - - before - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - float: - - ; - - - -
    -
    - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl deleted file mode 100644 index ad0d38c..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/glossary.xsl +++ /dev/null @@ -1,598 +0,0 @@ - - - - - - - - - - - - - - - normalize.sort.input - - - - - - normalize.sort.output - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - -
    -
    - - - -
    - - - - -
    -
    - - - - - - - - - - - - - - - - - - normalize.sort.input - - - - - - normalize.sort.output - - - -
    - - - - - - -
    - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - - normalize.sort.input - - - - - - normalize.sort.output - - - - - -
    - - - - - - -
    - - - - - - - - - - -
    -
    -
    - - -

    - - -

    -
    - - - - - - - - -
    - - - - 0 - 1 - - - - - - - 0 - 1 - - - - - - - - ( - - ) - - - - - -
    -
    - -
    - - - - 0 - 1 - - - - - - - 0 - 1 - - - - - - - - ( - - ) - - -
    -
    - -
    - - - - 0 - 1 - - - - - - - 0 - 1 - - - - - - -
    -
    -
    - - -
    - - - - - - - - - , - - - - - , - - - - - , - - - - - - - - - - - -
    -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: glosssee @otherterm reference not found: - - - - - - - - - - - - - - -

    -
    -
    - - -
    - - - - - -

    - - - - - - - - - - - - - -

    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: glossseealso @otherterm reference not found: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - normalize.sort.input - - - - - - normalize.sort.output - - - - - - - - - - - Warning: processing automatic glossary - without a glossary.collection file. - - - - - - Warning: processing automatic glossary but unable to - open glossary.collection file ' - - ' - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - -
    -
    - - - - - - - - - - - - - - - - - normalize.sort.input - - - - - - normalize.sort.output - - - - -
    - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl deleted file mode 100644 index 9f3b91f..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/graphics.xsl +++ /dev/null @@ -1,1524 +0,0 @@ - - - - - - - - - - - - - 1 - - - - - - 1 - - - - - -
    - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 0 - - 1 - 0 - - - - - - 1.0 - 1.0 - - - - 1.0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - px - - - - - - - - - - - px - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - px - - - - - - - - - - - px - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text-align: - - middle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: imagemaps not supported - on scaled images - - - - 0 - - - - - - - - - - - - - text-align: - - middle - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - manufactured viewport for HTML img - - - cellpadding: 0; cellspacing: 0; - - - - - - - - - - - - - height: - - px - - - - - - - - - - - -
    - - - - - background-color: - - - - - background-color: - - - - - - - text-align: - - - - - - - - - -
    -
    - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - calspair - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - , - - , - - - - - - - - - - - - Warning: only calspair or - otherunits='imagemap' supported - in imageobjectco - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text-align: - - middle - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - text-align: - - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No insertfile extension available. - - - - - - - Cannot insert - . Check use.extensions and textinsert.extension parameters. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - text-align: - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No insertfile extension available. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No insertfile extension available. - - - - - - - Cannot insert - . Check use.extensions and textinsert.extension parameters. - - - - - - - - -
    - - - - text-align: - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl deleted file mode 100644 index 8f46623..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/highlight.xsl +++ /dev/null @@ -1,81 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl deleted file mode 100644 index d856d1b..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html-rtf.xsl +++ /dev/null @@ -1,316 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - -
    - - - - - - - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - -
    - -
    - - - - - - - - - - -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl deleted file mode 100644 index af5404a..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/html.xsl +++ /dev/null @@ -1,683 +0,0 @@ - - - - - - - - - left - right - left - - - - - - right - left - right - - - - - - ltr - rtl - ltr - - - - - -div - -0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - # - - - - - - - - - # - - - - - - - - - - - - - - - - - - - bullet - - - - - - - - - bullet - - - © - - - ® - (SM) -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ID recommended on - - - : - - - - ... - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: no root element for CSS source file' - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: missing CSS input filename. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl deleted file mode 100644 index 288b0f9..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/htmltbl.xsl +++ /dev/null @@ -1,95 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - float: - - left - right - - - - - - - - - - - - - none - none - - ; - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl deleted file mode 100644 index e94e7b7..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/index.xsl +++ /dev/null @@ -1,257 +0,0 @@ - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    -
    -
    - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - - -
    - - - - -
    - -
    -
    -
    - - -

    - - -

    -
    - - -

    - - -

    -
    - - - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - -
    -
    - - - - - - - - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    -
    -
    - - -
    - ( - - - - - - ) -
    -
    - - -
    - ( - - - - - - ) -
    -
    - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl deleted file mode 100644 index e0a18b6..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/info.xsl +++ /dev/null @@ -1,41 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl deleted file mode 100644 index 3f1fe15..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/inline.xsl +++ /dev/null @@ -1,1550 +0,0 @@ - - - - - - - - - - - - - - - - - - - WARNING: nested link may be undefined in output: - < - - - - - @linkend = ' - - '> - - - @xlink:href = ' - - '> - - - nested inside parent element - - - - - - - - _blank - _top - - - - - - - - - - - - - - 1 - 0 - - - - - - - - - 1 - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XLink to nonexistent id: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - span - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ( - - ) - - - - - - - - - - - , - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - abbr - - - - - - acronym - - - - - - - - - - - - - - - - - - - - - - - - - - http://example.com/cgi-bin/man.cgi? - - ( - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - SM - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: glossary.collection specified, but there are - - automatic glossaries - - - - - - - - - - - - - - - - - - - - - - - - There's no entry for - - in - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Error: no glossentry for glossterm: - - . - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - element - - - - - - - - - - - - - - - - </ - - > - - - & - - ; - - - &# - - ; - - - % - - ; - - - <? - - > - - - <? - - ?> - - - < - - > - - - < - - /> - - - <!-- - - --> - - - - - - - - - - - - - - - - - - - - - - < - - - - - - mailto: - - - - - - > - - - - - - - - - - - + - - - - - - - - + - - - - - - - - - - - - - - - - - - - ( - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ - - - - - - - - - - - - - - - - - - - - ] - - - [ - - ] - - - - - - - - - - - - - [ - - - - - - - - - - - - ] - - - [ - - ] - - - - - - - - - - - - -

    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl deleted file mode 100644 index 4b82336..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/its.xsl +++ /dev/null @@ -1,103 +0,0 @@ - - - - - - its-allowed-characters its-annotators-ref its-line-break-type its-loc-note its-loc-note-ref its-loc-note-type its-loc-quality-issue-comment its-loc-quality-issue-enabled its-loc-quality-issue-profile-ref its-loc-quality-issue-severity its-loc-quality-issue-type its-loc-quality-issues-ref its-loc-quality-rating-profile-ref its-loc-quality-rating-score its-loc-quality-rating-score-threshold its-loc-quality-rating-vote its-loc-quality-rating-vote-threshold its-locale-filter-list its-locale-filter-type its-mt-confidence its-org its-org-ref its-person its-person-ref its-prov-ref its-provenance-records-ref its-rev-org its-rev-org-ref its-rev-person its-rev-person-ref its-rev-tool its-rev-tool-ref its-storage-encoding its-storage-size its-ta-class-ref its-ta-confidence its-ta-ident its-ta-ident-ref its-ta-source its-term its-term-confidence its-term-info-ref its-tool its-tool-ref its-within-text - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Attribute is not recognized as ITS attribute. Ignoring. - - - - - - - - its- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl deleted file mode 100644 index 6a1f896..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/keywords.xsl +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - - - - - - - , - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl deleted file mode 100644 index 9651a43..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/lists.xsl +++ /dev/null @@ -1,1206 +0,0 @@ - - - - - - - - - - - - compact - - - - - - - - - list-style-type: - - ; - - -
    - - - - - - - - - - -
      - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - circle - disc - square - - - - - - -
  • - - - - - list-style-type: - - - - - - - - - - - -
    - -
    -
    - - - -
    -
  • -
    - - - - - - - compact - - - - - - - - - - - - - - 1 - a - i - A - I - - - - Unexpected numeration: - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - -
      - - - - Strict XHTML does not allow setting @start attribute for lists! - - - - -
    -
    -
    -
    -
    - - - - - - -
  • - - - @override attribute cannot be set in strict XHTML output for listitem: - - - - - - - - -
    - -
    -
    - - - -
    -
  • -
    - - - - - - - - - - - - - - -
    - -
    -
    - - - -
    - - -
    - - - - - - - - - - compact - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - -
    - - - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - -

    - - - - - - - - - - - - - - -

    -
    -
    -
    - - -
    - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    -
    -
    -
    -
    -
    - - - - - - - - - -
    - -
    -
    - - - -
    -
    - - - - - - - - - Simple list - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - Simple list - - - - - - - - - - 1 - - - -
    -
    - - - - - - Simple list - - - - - - - - - - 1 - - - -
    -
    - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - - 1 - - - - - - - - -   - - - - - - - - - - - - - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 1 - 1 - - 1 - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - before - - - - - - - - - -
    - - - - - 0 - 1 - - - - - - - 0 - 1 - - - - - - - - - - - - -
      - - -
    -
    - -
      - - - -
    -
    -
    - - - - -
    -
    - - - - - - - - - - - - -
      - - - -
    -
    - - -
  • - - - - -
  • -
    - - - -
      - - - -
    -
    - - -

    - - - - -

    -
    - - - - - - - - -
    - - - - - - - - - - - - - - - - - - -
    -
    - - -
    - - - - - - - -
    -
    - - - - - - - - - -
    - - - - -
    -
    - - - - - - - - -
    - - - - - - : - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - Callout list - - -
    -
    - -
    - - -
    -
    -
    -
    -
    - - - - - - - - - - - - - - - - -

    - - - - -

    - - - - - -
    - -
    - - - - - -
    -
    -
    -
    -
    - - - - - - - - - -

    - - - - - - - - - - - - - - - - -

    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ??? - - - - - # - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ??? - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl deleted file mode 100644 index a95dcc9..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/maketoc.xsl +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - filename=" - - " - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl deleted file mode 100644 index 183cc0e..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/manifest.xsl +++ /dev/null @@ -1,17 +0,0 @@ - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl deleted file mode 100644 index a7dad8b..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/math.xsl +++ /dev/null @@ -1,280 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unsupported TeX math notation: - - - - - - - - - - - - - \nopagenumbers - - - - - \bye - - - - - - - - - - - - - - - - - - - - - - - - \special{dvi2bitmap outputfile - - } - - - $ - - - - $ - - - \vfill\eject - - - - - - - - - - - - - - - - - - - - - - - - - \special{dvi2bitmap outputfile - - } - - - $$ - - - - $$ - - - \vfill\eject - - - - - - - - - - \documentclass{article} - - \pagestyle{empty} - - \begin{document} - - - - - \end{document} - - - - - - - - - - - - - - - - - - - - - - - - \special{dvi2bitmap outputfile - - } - - - $ - - - - $ - - - \newpage - - - - - - - - - - - - - - - - - - - - - - - - - \special{dvi2bitmap outputfile - - } - - - $$ - - - - $$ - - - \newpage - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - 0 - 1 - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl deleted file mode 100644 index ab9171d..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/oldchunker.xsl +++ /dev/null @@ -1,171 +0,0 @@ - - - - - - - - - - - - - -Encoding used in generated HTML pages - -This encoding is used in files generated by chunking stylesheet. Currently -only Saxon is able to change output encoding. - - - - - - - - - -Saxon character representation used in generated HTML pages - -This character representation is used in files generated by chunking stylesheet. If -you want to suppress entity references for characters with direct representation -in default.encoding, set this parameter to value native. - - - - - - - - - - - - - - - - - - - - - - - - Chunking isn't supported with - - - - - - - - - - - - - - - Writing - - - for - - - ( - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Can't make chunks with - - 's processor. - - - - - - - - - - - - - - - - Writing - - - for - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Can't make chunks with - - 's processor. - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl deleted file mode 100644 index 5925388..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/onechunk.xsl +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - -1 - - - - # - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl deleted file mode 100644 index 9fcc054..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/param.xsl +++ /dev/null @@ -1,452 +0,0 @@ - - - - - - -.png - -images/ - - - - - - -/* ====================================================================== - Annotations -*/ - -div.annotation-list { visibility: hidden; - } - -div.annotation-nocss { position: absolute; - visibility: hidden; - } - -div.annotation-popup { position: absolute; - z-index: 4; - visibility: hidden; - padding: 0px; - margin: 2px; - border-style: solid; - border-width: 1px; - width: 200px; - background-color: white; - } - -div.annotation-title { padding: 1px; - font-weight: bold; - border-bottom-style: solid; - border-bottom-width: 1px; - color: white; - background-color: black; - } - -div.annotation-body { padding: 2px; - } - -div.annotation-body p { margin-top: 0px; - padding-top: 0px; - } - -div.annotation-close { position: absolute; - top: 2px; - right: 2px; - } - - -http://cdn.docbook.org/release/xsl/images/annot-close.png -http://cdn.docbook.org/release/xsl/images/annot-open.png - - -http://cdn.docbook.org/release/xsl/script/AnchorPosition.js http://cdn.docbook.org/release/xsl/script/PopupWindow.js - - -A - - -. - - -. -http://cdn.docbook.org/release/xsl/bibliography/bibliography.xml - - -normal - - -60 -.png - - -15 - -images/callouts/ - - -10 -10102 - - - - - - - - - - - - -no - -1 - - - - - - left - before - - - -all - - -docbook.css.xml -no -images/draft.png - -::= - - - - -#F5DCB3 - - -com.example.help -DocBook Online Help Sample -Example provider -1 - - - - - - 1 - 0 - - - - -1 - - - -figure before -example before -equation before -table before -procedure before -task before - - -kr - - - - - - - - - - - -appendix toc,title -article/appendix nop -article toc,title -book toc,title,figure,table,example,equation -chapter toc,title -part toc,title -preface toc,title -qandadiv toc -qandaset toc -reference toc,title -sect1 toc -sect2 toc -sect3 toc -sect4 toc -sect5 toc -section toc -set toc,title - - - - -no - - - - - - - - - - - - - -.html - - -copyright - - - -text/javascript - -text/css -alias.h - - - - - - - -User1 - - -User2 - - - - - - - - - -htmlhelp.chm - - -iso-8859-1 - - - - - -toc.hhc -5 - - -index.hhk -htmlhelp.hhp - -Main - -context.h - - - - - - - - - - - - - -basic - - - - - - - -no - -no -yes -iso-8859-1 - - -en - - - - -5 - - -3 - - - - - - - HTML.manifest - - - - -+ -.gif - -images/ -1 - - -6in - - -no - - - replace - -0 - -I - -90 -10 - - - - - - - - - - - - - - - - - -; - - - - - -. -number - - - - - - - - - - I -index - -. -.!?: - -8 - - - - - 0 - background-color: #E0E0E0 - - - - - - -0 - - - - - -solid - - - 1px - 0.5pt - - -a - - - -solid - - - 1px - 0.5pt - - - - olinkdb.xml -target.db - -tex-math-equations.tex - - - -dl -8 -2 - - - - - - - - - -0 -, -0 -docs -../common/ -index.html -1 -en -index.html - - - - writing-mode - - - - - - - - -: - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl deleted file mode 100644 index c4dd5ae..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/pi.xsl +++ /dev/null @@ -1,1230 +0,0 @@ - - - - -HTML Processing Instruction Reference - - - - - Introduction - This is generated reference documentation for all - user-specifiable processing instructions (PIs) in the DocBook - XSL stylesheets for HTML output. - - You add these PIs at particular points in a document to - cause specific “exceptions” to formatting/output behavior. To - make global changes in formatting/output behavior across an - entire document, it’s better to do it by setting an - appropriate stylesheet parameter (if there is one). - - - - - - - - - Sets background color for an image - - Use the dbhtml background-color PI before or - after an image (graphic, inlinegraphic, - imagedata, or videodata element) as a - sibling to the element, to set a background color for the - image. - - - dbhtml background-color="color" - - - - background-color="color" - - An HTML color value - - - - - - Background color - - - - - - - - - - - - Sets background color on a CALS table row or table cell - - Use the dbhtml bgcolor PI as child of a CALS table row - or cell to set a background color for that table row or cell. - - - dbhtml bgcolor="color" - - - - bgcolor="color" - - An HTML color value - - - - - - Cell background color - - - - - - - - - - - - Specifies cellpadding in CALS table or qandaset output - - Use the dbhtml cellpadding PI as a child of a - CALS table or qandaset to specify the value - for the HTML cellpadding attribute in the - output HTML table. - - - dbhtml cellpadding="number" - - - - cellpadding="number" - - Specifies the cellpadding - - - - - - html.cellpadding - - - Cell spacing and cell padding, - Q and A formatting - - - - - - - - - - - - Specifies cellspacing in CALS table or qandaset output - - Use the dbhtml cellspacing PI as a child of a - CALS table or qandaset to specify the value - for the HTML cellspacing attribute in the - output HTML table. - - - dbhtml cellspacing="number" - - - - cellspacing="number" - - Specifies the cellspacing - - - - - - html.cellspacing - - - Cell spacing and cell padding, - Q and A formatting - - - - - - - - - - - - Set value of the class attribute for a CALS table row - - Use the dbhtml class PI as a child of a - row to specify a class - attribute and value in the HTML output for that row. - - - dbhtml class="name" - - - - class="name" - - Specifies the class name - - - - - - Table styles in HTML output - - - - - - - - - - - - Specifies a directory name in which to write files - - When chunking output, use the dbhtml dir PI - as a child of a chunk source to cause the output of that - chunk to be written to the specified directory; also, use it - as a child of a mediaobject to specify a - directory into which any long-description files for that - mediaobject will be written. - -The output directory specification is inherited by all -chunks of the descendants of the element. If descendants need -to go to a different directory, then add another -dbhtml dir processing -instruction as a child of the source element -for that chunk, and specify the path relative to the -ancestor path. - -For example, to put most chunk files into -shared -but one chapter into -exception -at the same level, use: - -<book> - <?dbhtml dir="shared"?> - ... - <chapter> - <?dbhtml dir="../exception"?> - </chapter> -</book> - - - - - - dbhtml dir="path" - - - - dir="path" - - Specifies the pathname for the directory - - - - - - base.dir - - - dbhtml dir processing instruction - - - - - - - - - - - - Specifies a filename for a chunk - -When chunking output, use the dbhtml filename - PI as a child of a chunk source to specify a filename for - the output file for that chunk. Include the filename suffix. - -You cannot include a directory path in the filename value, -or your links may not work. Add a -dbhtml dir processing instruction -to specify the output directory. You can also combine the two -specifications in one processing instruction: -dbhtml dir="mydir" filename="myfile.html". - - - - dbhtml filename="filename" - - - - filename="path" - - Specifies the filename for the file - - - - - - use.id.as.filename - - - dbhtml filenames - - - - - - - - - - - - Specifies presentation style for a funcsynopsis - - Use the dbhtml funcsynopsis-style PI as a child of - a funcsynopsis or anywhere within a funcsynopsis - to control the presentation style for output of all - funcprototype instances within that funcsynopsis. - - - dbhtml funcsynopsis-style="kr"|"ansi" - - - - funcsynopsis-style="kr" - - Displays funcprototype output in K&R style - - - funcsynopsis-style="ansi" - - Displays funcprototype output in ANSI style - - - - - - funcsynopsis.style - - - - - - - - - - - - Specifies a path to the location of an image file - - Use the dbhtml img.src.path PI before or - after an image (graphic, - inlinegraphic, imagedata, or - videodata element) as a sibling to the element, - to specify a path to the location of the image; in HTML - output, the value specified for the - img.src.path attribute is prepended to the - filename. - - - dbhtml img.src.path="path" - - - - img.src.path="path" - - Specifies the pathname to prepend to the name of the image file - - - - - - img.src.path - - - Using fileref - - - - - - - - - - - - Specifies the label width for a qandaset - - Use the dbhtml label-width PI as a child of a - qandaset to specify the width of labels. - - - dbhtml label-width="width" - - - - label-width="width" - - Specifies the label width (including units) - - - - - - Q and A formatting - - - - - - - - - - - - Specifies interval for line numbers in verbatims - - Use the dbhtml linenumbering.everyNth PI as a child - of a “verbatim” element – programlisting, - screen, synopsis — to specify - the interval at which lines are numbered. - - - dbhtml linenumbering.everyNth="N" - - - - linenumbering.everyNth="N" - - Specifies numbering interval; a number is output - before every Nth line - - - - - - linenumbering.everyNth - - - Line numbering - - - - - - - - - - - - Specifies separator text for line numbers in verbatims - - Use the dbhtml linenumbering.separator PI as a child - of a “verbatim” element – programlisting, - screen, synopsis — to specify - the separator text output between the line numbers and content. - - - dbhtml linenumbering.separator="text" - - - - linenumbering.separator="text" - - Specifies the text (zero or more characters) - - - - - - linenumbering.separator - - - Line numbering - - - - - - - - - - - - Specifies width for line numbers in verbatims - - Use the dbhtml linenumbering.width PI as a child - of a “verbatim” element – programlisting, - screen, synopsis — to specify - the width set aside for line numbers. - - - dbhtml linenumbering.width="width" - - - - linenumbering.width="width" - - Specifies the width (inluding units) - - - - - - linenumbering.width - - - Line numbering - - - - - - - - - - - - Specifies presentation style for a variablelist or - segmentedlist - - Use the dbhtml list-presentation PI as a child of - a variablelist or segmentedlist to - control the presentation style for the list (to cause it, for - example, to be displayed as a table). - - - dbhtml list-presentation="list"|"table" - - - - list-presentation="list" - - Displays the list as a list - - - list-presentation="table" - - Displays the list as a table - - - - - - - - variablelist.as.table - - - segmentedlist.as.table - - - - - Variable list formatting in HTML - - - - - - - - - - - - Specifies the width of a variablelist or simplelist - - Use the dbhtml list-width PI as a child of a - variablelist or a simplelist presented - as a table, to specify the output width. - - - dbhtml list-width="width" - - - - list-width="width" - - Specifies the output width (including units) - - - - - - Variable list formatting in HTML - - - - - - - - - - - - Specifies the height for a CALS table row - - Use the dbhtml row-height PI as a child of a - row to specify the height of the row. - - - dbhtml row-height="height" - - - - row-height="height" - - Specifies the row height (including units) - - - - - - Row height - - - - - - - - - - - - (obsolete) Sets the starting number on an ordered list - - This PI is obsolete. The intent of - this PI was to provide a means for setting a specific starting - number for an ordered list. Instead of this PI, set a value - for the override attribute on the first - listitem in the list; that will have the same - effect as what this PI was intended for. - - - dbhtml start="character" - - - - start="character" - - Specifies the character to use as the starting - number; use 0-9, a-z, A-Z, or lowercase or uppercase - Roman numerals - - - - - - List starting number - - - - - - - - - - - - Do not chunk any descendants of this element. - - When generating chunked HTML output, adding this PI as the child of an element that contains elements that would normally be generated on separate pages if generating chunked output causes chunking to stop at this point. No descendants of the current element will be split into new HTML pages: -<section> -<title>Configuring pencil</title> -<?dbhtml stop-chunking?> - -... - -</section> - - - - dbhtml stop-chunking - - - Chunking into multiple HTML files - - - - - - Specifies summary for CALS table, variablelist, segmentedlist, or qandaset output - - Use the dbhtml table-summary PI as a child of - a CALS table, variablelist, - segmentedlist, or qandaset to specify - the text for the HTML summary attribute - in the output HTML table. - - - dbhtml table-summary="text" - - - - table-summary="text" - - Specifies the summary text (zero or more characters) - - - - - - Variable list formatting in HTML, - Table summary text - - - - - - - - - - - - Specifies the width for a CALS table - - Use the dbhtml table-width PI as a child of a - CALS table to specify the width of the table in - output. - - - dbhtml table-width="width" - - - - table-width="width" - - Specifies the table width (including units or as a percentage) - - - - - - default.table.width - - - Table width - - - - - - - - - - - - Sets character formatting for terms in a variablelist - - Use the dbhtml term-presentation PI as a child - of a variablelist to set character formatting for - the term output of the list. - - - dbhtml term-presentation="bold"|"italic"|"bold-italic" - - - - term-presentation="bold" - - Specifies that terms are displayed in bold - - - term-presentation="italic" - - Specifies that terms are displayed in italic - - - term-presentation="bold-italic" - - Specifies that terms are displayed in bold-italic - - - - - - Variable list formatting in HTML - - - - - - - - - - - - Specifies separator text among terms in a varlistentry - - Use the dbhtml term-separator PI as a child - of a variablelist to specify the separator text - among term instances. - - - dbhtml term-separator="text" - - - - term-separator="text" - - Specifies the text (zero or more characters) - - - - - - variablelist.term.separator - - - Variable list formatting in HTML - - - - - - - - - - - - Specifies the term width for a variablelist - - Use the dbhtml term-width PI as a child of a - variablelist to specify the width for - term output. - - - dbhtml term-width="width" - - - - term-width="width" - - Specifies the term width (including units) - - - - - - Variable list formatting in HTML - - - - - - - - - - - - Specifies whether a TOC should be generated for a qandaset - - Use the dbhtml toc PI as a child of a - qandaset to specify whether a table of contents - (TOC) is generated for the qandaset. - - - dbhtml toc="0"|"1" - - - - toc="0" - - If zero, no TOC is generated - - - toc="1" - - If 1 (or any non-zero value), - a TOC is generated - - - - - - Q and A list of questions, - Q and A formatting - - - - - - - - - - - - Generates a hyperlinked list of commands - - Use the dbcmdlist PI as the child of any - element (for example, refsynopsisdiv) containing multiple - cmdsynopsis instances; a hyperlinked navigational - “command list” will be generated at the top of output for that - element, enabling users to quickly jump - to each command synopsis. - - - dbcmdlist - - - [No parameters] - - - - - - No cmdsynopsis elements matched dbcmdlist PI, perhaps it's nested too deep? - - -
    - - - -
    -
    - - - Generates a hyperlinked list of functions - - Use the dbfunclist PI as the child of any - element (for example, refsynopsisdiv) containing multiple - funcsynopsis instances; a hyperlinked - navigational “function list” will be generated at the top of - output for that element, enabling users to quickly - jump to to each function synopsis. - - - dbfunclist - - - [No parameters] - - - - - - No funcsynopsis elements matched dbfunclist PI, perhaps it's nested too deep? - - -
    - - - -
    -
    - - - Copies an external well-formed HTML/XML file into current doc - - Use the dbhtml-include href PI anywhere in a - document to cause the contents of the file referenced by the - href pseudo-attribute to be copied/inserted “as - is” into your HTML output at the point in document order - where the PI occurs in the source. - - The referenced file may contain plain text (as long as - it is “wrapped” in an html element — see the - note below) or markup in any arbitrary vocabulary, - including HTML — but it must conform to XML - well-formedness constraints (because the feature in XSLT - 1.0 for opening external files, the - document() function, can only handle - files that meet XML well-formedness constraints). - Among other things, XML well-formedness constraints - require a document to have a single root - element. So if the content you want to - include is plain text or is markup that does - not have a single root element, - wrap the content in an - html element. The stylesheets will - strip out that surrounding html “wrapper” when - they find it, leaving just the content you want to - insert. - - - - dbhtml-include href="URI" - - - - href="URI" - - Specifies the URI for the file to include; the URI - can be, for example, a remote http: - URI, or a local filesystem file: - URI - - - - - - textinsert.extension - - - Inserting external HTML code, - External code files - - - - - - - href - - - - - - - - - - - - - - - - - - - - ERROR: dbhtml-include processing instruction - href has no content. - - - - - - - ERROR: dbhtml-include processing instruction has - missing or empty href value. - - - - - - - - Sets topic name and topic id for context-sensitive HTML Help - - Use the dbhh PI as a child of components - that should be used as targets for context-sensitive help requests. - - - dbhh topicname="name" topicid="id" - - - - topicname="name" - - Specifies a unique string constant that identifies a help topic - - - topicid="id" - - Specifies a unique integer value for the topicname string - - - - - - Context-sensitive help - - - - - - - - - - filename - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - # - - - - - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    - - - - - - - - - - - - - - - -
    - - - # - - - - - - - - - - - - - - - - - - -
    - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - / - - - - / - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl deleted file mode 100644 index 8de497e..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk-code.xsl +++ /dev/null @@ -1,660 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - se - - - - - - - - - - - - - - - bk - - - - - - - - - - - - - - - ar - - - - - - - - - - - - - - - pr - - - - - - - - - - - - - - - ch - - - - - - - - - - - - - - - ap - - - - - - - - - - - - - - - - - - - pt - - - - - - - - - - - - - - - - - - - rn - - - - - - - - - - - - - - - - - - - - - - - - re - - - - - - - - - - - - - - - - - - - co - - - - - - - - - - - s - - - - - - - - - - - - - - - - - - - bi - - - - - - - - - - - - - - - - - - - go - - - - - - - - - - - - - - - - - - - ix - - - - - - - - si - - - - - - - - - - - - - - - - - - - to - - - - - - - - chunk-filename-error- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Notenamesp. addadded namespace before processing - - - - - - - - - - - - - - - - ID ' - - ' not found in document. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl deleted file mode 100644 index 5b3ecc0..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-chunk.xsl +++ /dev/null @@ -1,48 +0,0 @@ - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl deleted file mode 100644 index eeffc00..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-docbook.xsl +++ /dev/null @@ -1,496 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Element - - in namespace ' - - ' encountered - - in - - - , but no template matches. - - - - < - - > - - </ - - > - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - <xsl:copy-of select="$title"/> - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -Notenamesp. addadded namespace before processing - - - - - - - - - - - - - - - - - ID ' - - ' not found in document. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl deleted file mode 100644 index b86c9c6..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/profile-onechunk.xsl +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - - - - - - - - - -1 - - - - # - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl deleted file mode 100644 index f79aa7f..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/publishers.xsl +++ /dev/null @@ -1,119 +0,0 @@ - - - - - -
    - - - - - - - - -
    -
    - - - -
    - - - - - - font-style:italic; font-weight:bold; - - - - - - - - - - -
    -
    - - - - - - - - - - font-style:italic; font-weight:bold; - - - [ - - ] - - - - - - - - - - -
    - - - - - width: 100%; display: table; margin-top: 5px; - - - - -
    - - display: table-row; - -
    - - display: table-cell; width: 15% - - -
    - -
    - - display: table-cell; width: 85% - - -
    - -
    - -
    -
    - - -
    - - - - -
    -
    - - -
    - - - - -
    -
    - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl deleted file mode 100644 index d434d11..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/qandaset.xsl +++ /dev/null @@ -1,434 +0,0 @@ - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - -

    -
    - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - -

    -
    - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - -
    -
    - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - -
    - - - - -
    - - - -
    - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - width: 100%; - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1% - - - - - - - - - -
    -
    - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl deleted file mode 100644 index f64f169..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/refentry.xsl +++ /dev/null @@ -1,312 +0,0 @@ - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - -

    -
    - - - - -
    - - - - - - - -
    -
    -
    -
    - - - - - - -
    -
    - - - - - - - - - - - - - - ( - - ) - - - - - - - - - - - -
    - - - - - - - - - - - -

    - - - -

    -
    - -

    - - - - - - - - -

    -
    -
    - -

    - -

    -
    -
    - - - - - - , - - - - - - - - - em-dash - - - - - - - - - - - - em-dash - - - - - - - - - - - - - - - - : - - - - - - - -
    - - - - - -

    - - - - - - - - - - -

    - -
    -
    - - - - - - - - - - - -
    - - - - - - - - - - - - -
    -
    - - - - - - 0 - 1 - - - - 6 - - - - - - - - - - - - -

    - -

    -
    - - - -

    - -

    -
    - - - -

    - -

    -
    - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl deleted file mode 100644 index a7a66c9..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/sections.xsl +++ /dev/null @@ -1,557 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - 2 - 3 - 4 - 5 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 6 - - - - - - - - - - clear: both - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - 1 - - - - - - - 2 - 3 - 4 - 5 - 6 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl deleted file mode 100644 index 1389b7c..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/synop.xsl +++ /dev/null @@ -1,1616 +0,0 @@ - - - - - - - - - - - -
    - -

    - - - - - - - - - - - - - - - - - - - - - - -

    -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - ( - - ) - -   - - - - - - - - - - - - - - - - - - - ( - - ) - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -    
    -    
    -    
    -  
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -

    - - -
    - -
    -

    -
    - - - - - - - ( - - - - - - - - - - - - - - - - ) - ; - - - - ... - ) - ; - - - - - - - , - - - ) - ; - - - - - - - - - - - - - - - - - - - - -
    - - - - ; -
    - - - - - - - - - - - - - - - - - - ( - - ) - - - - - - - - - Function synopsis - - - cellspacing: 0; cellpadding: 0; - - - - - - - - - - - -
    - -
     
    - -
    - -
    -
    -
     
    -
    - - - - - - - ( - - - - - - - - - - - - - - - - - ) - ; - -   - - - - - ... - ) - ; - -   - - - - - - - - , - - - ) - ; - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - ; - - - - - - - - - - - - - - - - - - - - - - - - ( - - ) - ; - - - - - - -

    - -

    -
    - - - - - - - ( - - - - - - - - - - - - - - - - void) - ; - - - - ... - ) - ; - - - - - - - , - - - ) - ; - - - - - - - - - - - - - - - - - - - - - ( - - ) - - - - - - - - - Function synopsis - - - cellspacing: 0; cellpadding: 0; - - - - - - - - - - - -
    - -
     
    -
     
    -
    - - - - - - - ( - - - - - - - - - - - - - - - - - void) - ; - -   - - - - - ... - ) - ; - -   - - - - - - - - , - - - ) - ; - - - - - - - - - - - - - - - - - - - - - - ( - - ) - - - - -java - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unrecognized language on - - : - - - - - - - - - - - -
    -
    -
    - - - - - -
    -    
    -    
    -    
    -    
    -       extends
    -      
    -      
    -        
    -      -
    -
    - - implements - - -
    -      -
    -
    - - throws - - -  { -
    - - } -
    -
    - - - - - - - - - , - - - - - - - - - - - - - - - - - - -   - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - - - -    - - - ; - - - - - - - - - -   - - - - - - - - -   - - - - - - - - - - - - - - - - - void  - - - - - - - - - - - - - 0 - - , -
    - - -   - - - -
    - - - - - -
    - - - - - - - - - - - - - - - -    - - - - - - - - - - - - - - - - ( - - - - ) - -
    -     throws  - -
    - - - - - ; -
    - -
    - - - - -
    -    
    -    
    -    
    -    
    -      : 
    -      
    -      
    -        
    -      -
    -
    - - implements - - -
    -      -
    -
    - - throws - - -  { -
    - - } -
    -
    - - - - - - - - , - - - - - - - - - - - - - - -   - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - - - -    - - - ; - - - - - - - - - -   - - - - - - - - -   - - - - - - - - - - - - - - - - - void  - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - ( - - ) - -
    -     throws  - -
    - - - - - ; -
    - -
    - - - - -
    -    
    -    
    -    interface 
    -    
    -    
    -      : 
    -      
    -      
    -        
    -      -
    -
    - - implements - - -
    -      -
    -
    - - throws - - -  { -
    - - } -
    -
    - - - - - - - - , - - - - - - - - - - - - - - -   - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - - - -    - - - ; - - - - - - - - - -   - - - - - - - - -   - - - - - - - - - - - - - - - - - void  - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - -    - - - - - - - - - - ( - - ) - -
    -     raises( - - ) -
    - - - - - ; -
    - -
    - - - - -
    -    
    -    
    -    package 
    -    
    -    ;
    -    
    - - - @ISA = ( - - ); -
    -
    - - -
    -
    - - - - - - - - , - - - - - - - - - - - - - - -   - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - , - - - - - - - - - - - - - -    - - - ; - - - - - - - - - -   - - - - - - - - -   - - - - - - - - - - - - - - - - - void  - - - - - - - - - - - - - - , - - - - - - - - - - - - - - - - - - - - - - - - - sub - - - { ... }; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl deleted file mode 100644 index 16e5090..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/table.xsl +++ /dev/null @@ -1,1176 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - border- - - : - - - - - - ; - - - - - border- - - -width: - - ; - - - - border- - - -style: - - ; - - - - border- - - -color: - - ; - - - - - - - - - - - Error: CALS tables must specify the number of columns. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 100% - - - - - - - - border-collapse: collapse; - - - - - - - - - - - - - - - - - - - - - - - - - - - - - border-collapse: collapse; - - - - - - - - - - - - - - - - - border-collapse: collapse; - - - - - - - - - - - border-collapse: collapse; - - - - - - - - - - - border-collapse: collapse; - - - - - - - - - - - - - - - - - border: none; - - - - - border-collapse: collapse; - - - - - - - 0 - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - 100% - - - - - - - - - - - - - - - - - - - - - - - - No convertLength function available. - - - - - - - - - - - - - - - - - - - - - - - - - - No adjustColumnWidths function available. - - - - - - - - - - - - - - - - - - - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - text-align: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text-align: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Warning: overlapped row contains content! - - - This row intentionally left blank - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - background-color: - - - - - - - - - - - - - - - - - - - - - - text-align: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - th - th - - th - - td - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 0 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - background-color: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text-align: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - : - - - - - - - - 0: - - - - - - - - - - - - - - - 0 - - : - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - 1 - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text-align: - - - - - - text-align: - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - 1 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl deleted file mode 100644 index 1c4750e..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/task.xsl +++ /dev/null @@ -1,69 +0,0 @@ - - - - - - - - - - - - - - - before - - - - - - - - -
    - - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl deleted file mode 100644 index 2488663..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.templates.xsl +++ /dev/null @@ -1,4297 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - - -
    - - -
    - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - 1 - - - -
    -
    - - - - - - - - - - 1 - - - -
    -
    - -
    -
    - - - - - - - - - - - - - - -
    - -
    -
    - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl deleted file mode 100644 index 96ea7cc..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/titlepage.xsl +++ /dev/null @@ -1,1111 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - -
    - - - - - - - - - - - - -
    -
    - - - - - - - - - - - - - -
    - - - - - - - - -
    -
    - - -
    - - - - - - - - -
    -
    -
    -
    - - -
    - - - -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    - - - -

    -
    -

    - - - - - - - - - -

    - - - - - - - - - - - - - - - -
    -
    - - -
    - - - -
    -
    - - -
    - - - -

    Authors

    -
    - - - -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - - - -
    -
    -
    - - - - - - - - - - -
    - - - -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - -   - - -
    - - -

    -
    -
    -
    -
    - - - - -

    Copyright

    -
    - -

    - - - - - - - - copyright - - - - - - - - - -

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - -

    - - - -

    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - -

    - - - - - - - -

    -
    - - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - -
    - - - -
    -
    -
    - -
    - - - - - - - - -
    -
    -
    -
    - - -

    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - - : - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - -
    - - - -
    -
    - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - - - 3 - 2 - - - - - - - - RevHistory - - - - -
    - - - - - - border-style:solid; width:100%; - - - - - - - revhistory - - - - - - - - - -
    - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - , - - - - - -   - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -
    -
    - - - - - - -
    -
    -
    - - - - - -

    - - - -

    -
    - - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - -

    - - - - - - - - - - - - - - - - - - -

    -
    - - - - - - - - - - -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl deleted file mode 100644 index d235978..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/toc.xsl +++ /dev/null @@ -1,327 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    - - - -
    - - -
    -
    - -
    - - - - - - - - - -
    -
    -
    - - - - - - - - - - - - - - -
    - - - -
    - - -
    -
    - -
    - - - - - - - - - -
    -
    -
    - - - - - - - - -
    - - - - - -
    -
    - - - - - - -
    -
    -
    - - - - - -
    - - -
    - -
    - -
  • - - - -
  • -
    -
    -
    - - - - -
    - - -
    -
    - -
  • - - -
  • -
    -
    -
    - - - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - - -
    -
    - - -
    - - -
    -
    - - - - - - - - - - - - -
    - - -
    -
    - - - -
    -
    - - - - -
    - - - - -
    - - -
    - -
    - - - -
    -
    - - - - -
    - - -
    - -
    - - - -
    -
    - - - - - Warning: don't know what to generate for - lot that has no children. - - - - -
    - - -
    -
    - - -
    - - -
    -
    - - - - - \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl deleted file mode 100644 index cfd2ed4..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/verbatim.xsl +++ /dev/null @@ -1,383 +0,0 @@ - - - - - - - - - - - - - - - - - pre - - - - The shade.verbatim parameter is deprecated. - Use CSS instead, - - - for example: pre. - - { background-color: #E0E0E0; } - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - The shade.verbatim parameter is deprecated. - Use CSS instead, - - - for example: pre. - - { background-color: #E0E0E0; } - - - - - - - -
    -            
    -            
    -            
    -              
    -            
    -          
    -
    - -
    - - -

    - - - -

    -
    -
    -
    -
    - - - -
    -            
    -            
    -            
    -          
    -
    - -
    - - -

    - - - -

    -
    -
    -
    -
    -
    -
    - - - - - - - - - - -
    - - -

    - - - -

    -
    -
    - - -
    - - -

    - - - -

    -
    -
    -
    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Unexpected verbatim environment: - - - - - - - - - - 1 - - - - - - - - - - - - - No numberLines function available. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    \ No newline at end of file diff --git a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl b/bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl deleted file mode 100644 index fb902fc..0000000 --- a/bash/templates/build-aux/docbook-xsl/xhtml-1_1/xref.xsl +++ /dev/null @@ -1,1292 +0,0 @@ - - - - - -http://docbook.org/xlink/role/olink - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Endterm points to nonexistent ID: - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: xref linking to - - has no generated link text. - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - XRef to nonexistent id: - - - ??? - - - - - - - - - - - - - - - - Endterm points to nonexistent ID: - - - - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - suppress anchor - - - - - - - - - - - removing - - - - - - - - - - - - - - - - - removing - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Don't know what gentext to create for xref to: " - - ", (" - - ") - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ - - - - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - No bibliography entry: - - found in - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - [ - - - - - - - - - ] - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Endterm points to nonexistent ID: - - - ??? - - - - - - - - - - - - - Link element has no content and no Endterm. - Nothing to show in the link to - - - ??? - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - Olink debug: root element of target.database ' - - ' is ' - - '. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - ERROR: olink using obsolete attributes - @linkmode, @targetdocent, @localinfo are - not supported. - - - - - ERROR: olink is missing linking attributes. - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - \ No newline at end of file -- cgit v1.2.3 From f501b160d63597c4d55fb2e0ecbbcd1158f6d4ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 22:55:27 -0300 Subject: Remove unused git/gitlab-ci.yml --- git/gitlab-ci.yml | 45 --------------------------------------------- 1 file changed, 45 deletions(-) delete mode 100644 git/gitlab-ci.yml diff --git a/git/gitlab-ci.yml b/git/gitlab-ci.yml deleted file mode 100644 index a04f709..0000000 --- a/git/gitlab-ci.yml +++ /dev/null @@ -1,45 +0,0 @@ -image: clojure:lein-2.7.0 -stages: - - test - - pages - -lint: - stage: test - before_script: - - lein deps - script: - - lein lint - cache: - key: maven-cache - paths: - - $HOME/.m2 - -test: - stage: test - before_script: - - lein deps - script: - - lein test - cache: - key: maven-cache - paths: - - $HOME/.m2 - -pages: - stage: pages - image: nixos/nix:2.0.4 - coverage: '/ALL FILES.*?(\d+\.\d+)/' - script: - - nix-shell -p leiningen --run "lein docs" - - nix-build -A proseDocs - - cp result/index.html public/ - artifacts: - paths: - - public - only: - - master - cache: - key: global-shared-cache - paths: - - $HOME/.m2 - - /nix/store/ -- cgit v1.2.3 From 4c7a9f5bf3563781d8093ffe86896057eab84265 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 23:09:32 -0300 Subject: bash/fzf.sh: Add v() fn --- bash/aliases.sh | 1 - bash/fzf.sh | 19 +++++++++++++++++++ 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 6d8e4b7..97e22a5 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -38,7 +38,6 @@ alias r="source ~/.bashrc" alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" alias grep='grep --color=always' -alias td='vi ~/Sync/TODOs.md' # https://linuxhandbook.com/run-alias-as-sudo/ alias sudo='sudo ' diff --git a/bash/fzf.sh b/bash/fzf.sh index f7640b8..8894c9b 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -54,3 +54,22 @@ f() { "$1" "$file" fi } + +V_FILES=' +Sync/TODOs.md +annex/txt/things.md +tmp/scratch.txt +annex/bin/misc/git/mrconfig.ini +archive/vlc/playlist.txt +dev/libre/others/dinheiros/money.ledger +' + +v() { + f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" + if [ -n "$f" ]; then + history -s v $@ + history -s vi "$f" + echo "$f" + vi "$HOME/$f" + fi +} -- cgit v1.2.3 From fd7644780a83e1c0f467ccc74a7a3e22a586414f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 16 Jan 2021 23:56:38 -0300 Subject: bash/fake-symlinks.sh: Use docbook-xsl.tar.gz --- bash/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 1790254..b8c66df 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -287,7 +287,7 @@ ln-texinfo-autotools-guix-project() { ln-base-autotools-guix-project "$1" RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi ln-web-assets-file texinfo - rsync -a build-aux/docbook-xsl/ "$PREFIX/build-aux/docbook-xsl/" + cp-all build-aux/docbook-xsl.tar.gz } ln-sphinx-autotools-guix-project() { -- cgit v1.2.3 From 7bbb4eb8b33d5628b367ece868f6edaa693ab2bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 00:50:27 -0300 Subject: sbclrc.lisp: Move quicklisp diretory to ~/dev/quicklisp --- sbclrc.lisp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sbclrc.lisp b/sbclrc.lisp index 3a931d0..df7f57a 100644 --- a/sbclrc.lisp +++ b/sbclrc.lisp @@ -1,6 +1,6 @@ ;;; The following lines added by ql:add-to-init-file: #-quicklisp -(let ((quicklisp-init (merge-pathnames "quicklisp/setup.lisp" +(let ((quicklisp-init (merge-pathnames "dev/quicklisp/setup.lisp" (user-homedir-pathname)))) (when (probe-file quicklisp-init) (load quicklisp-init))) -- cgit v1.2.3 From ad51519d6833edd03a1faf4fdf3b729616c7ce53 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 01:35:43 -0300 Subject: Add infokey symlink --- bash/symlinks.sh | 2 ++ infokey | 2 ++ 2 files changed, 4 insertions(+) create mode 100644 infokey diff --git a/bash/symlinks.sh b/bash/symlinks.sh index cd25465..47c3ef5 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -68,3 +68,5 @@ ln -fs "$DOTFILES/guix/channels.scm" ~/.config/guix/channels.scm mkdir -p ~/.config/vdirsyncer/ ~/.config/khal ln -fs "$HOME/annex/bin/misc/pimutils/vdirsyncer.conf" ~/.config/vdirsyncer/config ln -fs "$HOME/annex/bin/misc/pimutils/khal.conf" ~/.config/khal/config + +ln -fs "$DOTFILES/infokey" ~/.infokey diff --git a/infokey b/infokey new file mode 100644 index 0000000..f78b9a7 --- /dev/null +++ b/infokey @@ -0,0 +1,2 @@ +^e down-line +^y up-line -- cgit v1.2.3 From 71352857186d33cf2727ad7b62d317f180a11a2d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 15:51:20 -0300 Subject: fake-symlinks: Stop relying on Pandoc markdown for TODOs.sh --- bash/templates/build-aux/workflow/TODOs.sh | 6 ++++-- bash/templates/build-aux/workflow/style.css | 2 +- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh index 3ccd57b..58fbd3c 100755 --- a/bash/templates/build-aux/workflow/TODOs.sh +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -6,7 +6,7 @@ export PROJECT_UC="$1" export PROJECT="$2" export MAILING_LIST="$3" -REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{(#.*?)\}$/## \1<\/span> \2 {\3}\n\3<\/a>\n/' +REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' envsubst < build-aux/workflow/preamble.md | \ printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ @@ -17,4 +17,6 @@ envsubst < build-aux/workflow/preamble.md | \ --metadata title="$1 - TODOs" \ --metadata lang=en \ -H build-aux/workflow/style.css \ - -r markdown -w html > public/TODOs.html + -r markdown \ + -w html \ + > public/TODOs.html diff --git a/bash/templates/build-aux/workflow/style.css b/bash/templates/build-aux/workflow/style.css index a4ac27a..ac0144c 100644 --- a/bash/templates/build-aux/workflow/style.css +++ b/bash/templates/build-aux/workflow/style.css @@ -3,7 +3,7 @@ background-color: #ccc; } - a.header-anchor { + span.header-anchor { opacity: 0.5; } -- cgit v1.2.3 From ea9d5e8ae290172cbbaf304014b5821cde1f2735 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 15:55:57 -0300 Subject: fake-symlinks: Add space after __ENABLE_CI__ marker --- bash/fake-symlinks.sh | 4 ++-- bash/templates/build-aux/ci/git-pre-push.sh.in | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index b8c66df..e70d5e2 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -77,10 +77,10 @@ sed-all() { mkdir -p "$(dirname "$OUT")" if [ -n "$ENABLE_CI" ]; then - ENABLE_CI_SCRIPT='s/__ENABLE_CI__//g' + ENABLE_CI_SCRIPT='s/__ENABLE_CI__ //g' TLD_SCRIPT='' else - ENABLE_CI_SCRIPT='/__ENABLE_CI__/d' + ENABLE_CI_SCRIPT='/__ENABLE_CI__ /d' TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' fi diff --git a/bash/templates/build-aux/ci/git-pre-push.sh.in b/bash/templates/build-aux/ci/git-pre-push.sh.in index 9979fff..d102d60 100755 --- a/bash/templates/build-aux/ci/git-pre-push.sh.in +++ b/bash/templates/build-aux/ci/git-pre-push.sh.in @@ -1,7 +1,7 @@ #!/bin/sh -eux PACKAGE="$(basename "$PWD")" -__ENABLE_CI__LOGS_DIR="/data/ci/$PACKAGE/logs" +__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" REMOTE_GIT_DIR="/data/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" @@ -13,6 +13,6 @@ else fi scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description" -__ENABLE_CI__ssh git.@TLD@ mkdir -p "$LOGS_DIR" -__ENABLE_CI__scp build-aux/ci/ci-build.sh "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh" -__ENABLE_CI__scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive" +__ENABLE_CI__ ssh git.@TLD@ mkdir -p "$LOGS_DIR" +__ENABLE_CI__ scp build-aux/ci/ci-build.sh "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh" +__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive" -- cgit v1.2.3 From dcac0a622c25054dd3664aaa8be950ed9ba2c493 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 15:56:33 -0300 Subject: bash/fzf.sh: ShellCheck --- bash/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index 8894c9b..d9c3603 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -67,7 +67,7 @@ dev/libre/others/dinheiros/money.ledger v() { f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" if [ -n "$f" ]; then - history -s v $@ + history -s v "$@" history -s vi "$f" echo "$f" vi "$HOME/$f" -- cgit v1.2.3 From 60d3974e99ea199df09374d7a17f455ec6388efd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 16:00:40 -0300 Subject: build-aux/assert-todos.sh: Exclude docbook-xsl.tar.gz --- build-aux/assert-todos.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index 9591c26..f02a1b8 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,6 +1,7 @@ -#!/bin/sh -eux +#!/bin/sh -eu -if git grep FIXME | grep -Ev '^(bash/templates/|build-aux/assert-todos.sh|scripts/ad-hoc/pastebin.sh|bash/util.sh)'; then +EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/ad-hoc/pastebin.sh|bash/util.sh|docbook-xsl.tar.gz)' +if git grep FIXME | grep -Ev "$EXCLUDE"; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." exit 1 -- cgit v1.2.3 From 54804f0e1b8528e21fccd558ed5a057532deb9ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 16:02:37 -0300 Subject: Use stock build-aux/assert-shellcheck.sh --- build-aux/assert-shellcheck.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh index 0750546..d07815b 100755 --- a/build-aux/assert-shellcheck.sh +++ b/build-aux/assert-shellcheck.sh @@ -1,6 +1,5 @@ #!/bin/sh -eux git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\// { print FILENAME }' | \ - grep -v bash/templates/ | \ + xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ xargs shellcheck -- cgit v1.2.3 From b9afb5179fd0d55f9a4f90e1d3077a7fbc44898a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 16:17:14 -0300 Subject: bashrc.sh: Stop generating ~/.spacemacs.env file --- bash/bashrc.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/bash/bashrc.sh b/bash/bashrc.sh index 7da22dd..a3bef19 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -17,5 +17,4 @@ export DOTFILES=~/dev/libre/dotfiles . "$HOME/annex/bin/misc/env.sh" . "$HOME/.nurc" -env > ~/.spacemacs.env export -p > ~/.bash.env -- cgit v1.2.3 From 98ce9eb4fdb41c11662ff13481b8d50188952237 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 16:17:54 -0300 Subject: Stop generating ~/.bash.env, remove nix-search-update-job.sh --- bash/bashrc.sh | 2 -- bash/fake-symlinks.sh | 2 +- nixos/common.nix | 1 - nixos/usurpador.nix | 1 - scripts/ad-hoc/nix-search-update.sh | 5 ----- scripts/cron/nix-search-update-job.sh | 31 ------------------------------- 6 files changed, 1 insertion(+), 41 deletions(-) delete mode 100755 scripts/ad-hoc/nix-search-update.sh delete mode 100755 scripts/cron/nix-search-update-job.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh index a3bef19..f00940c 100644 --- a/bash/bashrc.sh +++ b/bash/bashrc.sh @@ -16,5 +16,3 @@ export DOTFILES=~/dev/libre/dotfiles . $DOTFILES/bash/symlinks.sh . "$HOME/annex/bin/misc/env.sh" . "$HOME/.nurc" - -export -p > ~/.bash.env diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index e70d5e2..160e317 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -6,7 +6,7 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' -for job in report-summary annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive nix-search-update mr-remotes-backup; do +for job in report-summary annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/ad-hoc/${job}.sh" chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" diff --git a/nixos/common.nix b/nixos/common.nix index 5c8aabc..4e194dc 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -18,7 +18,6 @@ let notmuch-dump-job = daily-at-12h30min; mbox-archive-job = daily-at-12h30min; copy-box-backups-job = daily-at-12h30min; - nix-search-update-job = daily-at-12h30min; mr-remotes-backup-job = daily-at-12h30min; }; priv-crons = { pacheco-job = "0 12 5 * *"; }; diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index 7b2b79c..fbe2997 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -22,7 +22,6 @@ in rec { common.crons.notmuch-dump-job common.crons.mbox-archive-job common.crons.copy-box-backups-job - common.crons.nix-search-update-job common.crons.mr-remotes-backup-job ]; } diff --git a/scripts/ad-hoc/nix-search-update.sh b/scripts/ad-hoc/nix-search-update.sh deleted file mode 100755 index 3c3b221..0000000 --- a/scripts/ad-hoc/nix-search-update.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -eux - -# shellcheck source=/dev/null -. ~/.bash.env -nix search -u lilypond # just a label so the cache can be updated diff --git a/scripts/cron/nix-search-update-job.sh b/scripts/cron/nix-search-update-job.sh deleted file mode 100755 index be4cd94..0000000 --- a/scripts/cron/nix-search-update-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s nix-search-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for nix-search-update-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/nix-search-update.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 -- cgit v1.2.3 From aeaf38a1206ca041bde05e7530c45f1cb5d759ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 17:47:24 -0300 Subject: bash/fzf.sh: readline > fzf --- bash/fzf.sh | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index d9c3603..7c593a2 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -2,18 +2,9 @@ # shellcheck source=/dev/null . "$(fzf-share)/completion.bash" -. "$(fzf-share)/key-bindings.bash" - -# Recover the 'transpose-chars' functionality from readline -# that was overriden by 'keybindings.bash' -# For some reason, patching key-bindings.bash didn't work, so there's -# probably some fzf internal that depends on the key bindings being -# C-t. This hypothesis is reinforced by the fact that the environment -# variable is called $FZF_CTRL_T_OPTS, =/ -# I settled for using C-M-t for transpose-chars. -# Addendum: do the same for M-c and 'capitalize-word' -bind '"\e\C-t": transpose-chars' -bind '"\e\C-c": capitalize-word' +# Disable fzf key-bindings +# readline > fzf +# . "$(fzf-share)/key-bindings.bash" export FZF_TMUX=1 export FZF_CTRL_T_OPTS=' -- cgit v1.2.3 From 020151165d80eeae4184a05a09d5134ec44b9622 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 18:45:48 -0300 Subject: Remove unused scripts git-search, git-tarball.sh, guix-env.sh and burn-nixos.sh: Now I'd rather do manually what those scripts automate. notmuch-dump.sh, notmuch-restore.sh: Stop relying on notmuch so much, trying to stick to mail folders --- scripts/ad-hoc/burn-nixos.sh | 48 --------------------------------------- scripts/ad-hoc/git-search | 41 --------------------------------- scripts/ad-hoc/git-tarball.sh | 6 ----- scripts/ad-hoc/guix-env.sh | 8 ------- scripts/ad-hoc/notmuch-dump.sh | 6 ----- scripts/ad-hoc/notmuch-restore.sh | 4 ---- 6 files changed, 113 deletions(-) delete mode 100644 scripts/ad-hoc/burn-nixos.sh delete mode 100755 scripts/ad-hoc/git-search delete mode 100755 scripts/ad-hoc/git-tarball.sh delete mode 100755 scripts/ad-hoc/guix-env.sh delete mode 100755 scripts/ad-hoc/notmuch-dump.sh delete mode 100644 scripts/ad-hoc/notmuch-restore.sh diff --git a/scripts/ad-hoc/burn-nixos.sh b/scripts/ad-hoc/burn-nixos.sh deleted file mode 100644 index 85ce6cd..0000000 --- a/scripts/ad-hoc/burn-nixos.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -usage() { - red "Missing argument $1.\n" - cat < - - Arguments: - NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html - USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. - -Examples: - Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: - NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' - burn.sh "\$NIXOS_URL" /dev/sdb -EOF -} - -NIXOS_URL="${1:-}" -USB_STICK="${2:-}" -ISO_PATH='/tmp/nixos.iso' - -[[ -z "${NIXOS_URL}" ]] && { - usage 'NIXOS_URL' - exit 2 -} - -[[ -z "${USB_STICK}" ]] && { - usage 'USB_STICK' - exit 2 -} - -yellow "Downloading NixOS ISO..." -wget -cO "${ISO_PATH}" "${NIXOS_URL}" -wget -cO "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" -diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { - red "SHA256 didn't match!" - exit 1 -} -green "Done. SHA256 match." - -yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." -umount "${USB_STICK}1" ||: -blue "$(du -hs /tmp/nixos.iso)" -sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress -green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." diff --git a/scripts/ad-hoc/git-search b/scripts/ad-hoc/git-search deleted file mode 100755 index 9ce0121..0000000 --- a/scripts/ad-hoc/git-search +++ /dev/null @@ -1,41 +0,0 @@ -#!/bin/sh -eux - -end="\033[0m" -red="\033[0;31m" -red() { - printf '%s%s%s' "$red" "$1" "$end" -} - -usage() { - red "Missing argument $1.\n" - cat < - - Arguments: - REGEX_PATTERN Regular expression that "git grep" can search - REPOSITORY_URL URL address that "git clone" can download the repository from - -Examples: - Searching "make get-git" in cgit repository: - git search 'make get-git' https://git.zx2c4.com/cgit/ - git search 'make get-git' https://git.zx2c4.com/cgit/ -- \$(git rev-list --all) -EOF - exit 2 -} - - -REGEX_PATTERN="${1:-}" -REPOSITORY_URL="${2:-}" -[ -z "${REGEX_PATTERN}" ] && usage 'REGEX_PATTERN' -[ -z "${REPOSITORY_URL}" ] && usage 'REPOSITORY_URL' - -mkdir -p /tmp/git-search -DIRNAME="$(echo "${REPOSITORY_URL%/}" | rev | cut -d/ -f1 | rev)" -if [ ! -d "/tmp/git-search/${DIRNAME}" ]; then - git clone --depth 1 "${REPOSITORY_URL}" "/tmp/git-search/${DIRNAME}" -fi -cd "/tmp/git-search/${DIRNAME}" - -shift 3 || shift 2 # when "--" is missing -git grep "${REGEX_PATTERN}" "${@}" diff --git a/scripts/ad-hoc/git-tarball.sh b/scripts/ad-hoc/git-tarball.sh deleted file mode 100755 index 44055fc..0000000 --- a/scripts/ad-hoc/git-tarball.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux - -REPO="$(basename "$(git rev-parse --show-toplevel)")" -BRANCH="$(git rev-parse --abbrev-ref HEAD)" - -git archive --prefix="${REPO}-${BRANCH}/" -o "./${REPO}.tar.gz" "${BRANCH}" diff --git a/scripts/ad-hoc/guix-env.sh b/scripts/ad-hoc/guix-env.sh deleted file mode 100755 index e8a273b..0000000 --- a/scripts/ad-hoc/guix-env.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh - -if [ "$1" != "--really" ]; then - exec guix environment --ad-hoc bash -- bash -- "$0" --really "$@" -fi -shift - -# Processing continues -echo noop >&2 diff --git a/scripts/ad-hoc/notmuch-dump.sh b/scripts/ad-hoc/notmuch-dump.sh deleted file mode 100755 index 4215831..0000000 --- a/scripts/ad-hoc/notmuch-dump.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux - -[ -f ~/archive/notmuch-archive.today.txt ] && { - mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt -} -notmuch dump --output ~/archive/notmuch-archive.today.txt diff --git a/scripts/ad-hoc/notmuch-restore.sh b/scripts/ad-hoc/notmuch-restore.sh deleted file mode 100644 index f3dc386..0000000 --- a/scripts/ad-hoc/notmuch-restore.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -eux - -notmuch new -notmuch restore --input ~/archive/notmuch-archive.today.txt -- cgit v1.2.3 From bede9b3d35c3d385504d3cc661c60066a8099dfe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 19:31:20 -0300 Subject: Move cron scripts into cron/, remove ad-hoc subfolder --- .gitignore | 6 +- bash/env.sh | 8 +- bash/fake-symlinks.sh | 18 +- bash/templates/cronjob-with-email.sh | 2 +- build-aux/assert-todos.sh | 2 +- cron/annex.sh | 14 + cron/archive-box.sh | 53 + cron/backup.sh | 37 + cron/copy-box-backups.sh | 7 + cron/elfeed.sh | 48 + cron/mbox-archive.sh | 6 + cron/mr-remotes-backup.sh | 7 + cron/repo-update.sh | 6 + cron/report-summary.sh | 8 + scripts/ad-hoc/annex.sh | 14 - scripts/ad-hoc/archive-box.sh | 51 - scripts/ad-hoc/backup.sh | 37 - scripts/ad-hoc/brightness.sh | 29 - scripts/ad-hoc/c | 3 - scripts/ad-hoc/copy-box-backups.sh | 7 - scripts/ad-hoc/copy-public-key.sh | 23 - scripts/ad-hoc/dmenu-emoji.sh | 13 - scripts/ad-hoc/dmenu-vlc.sh | 9 - scripts/ad-hoc/elfeed.js | 19 - scripts/ad-hoc/elfeed.sh | 48 - scripts/ad-hoc/emoji-list.txt | 1432 ---------------------------- scripts/ad-hoc/export-keys.sh | 35 - scripts/ad-hoc/fim | 3 - scripts/ad-hoc/gc-mail.sh | 6 - scripts/ad-hoc/gc-nix.sh | 18 - scripts/ad-hoc/gc.sh | 42 - scripts/ad-hoc/hd.sh | 11 - scripts/ad-hoc/mailing-list-import-mbox.sh | 116 --- scripts/ad-hoc/mbox-archive.sh | 4 - scripts/ad-hoc/mr-remotes-backup.sh | 7 - scripts/ad-hoc/open | 22 - scripts/ad-hoc/package-lock.json | 33 - scripts/ad-hoc/pastebin.sh | 85 -- scripts/ad-hoc/post.sh | 120 --- scripts/ad-hoc/record-my-screen.sh | 34 - scripts/ad-hoc/repo-update.sh | 6 - scripts/ad-hoc/report-summary.sh | 8 - scripts/ad-hoc/rotate-mpris-player.sh | 28 - scripts/ad-hoc/single-monitor.sh | 2 - scripts/ad-hoc/three-monitors.sh | 2 - scripts/ad-hoc/vlc | 21 - scripts/ad-hoc/xdg-open | 1 - scripts/ad-hoc/xmobar-mpris.sh | 43 - scripts/ad-hoc/xmobar-notmuch.sh | 10 - scripts/ad-hoc/yt | 79 -- scripts/ad-hoc/zero-brightness.sh | 10 - scripts/brightness.sh | 29 + scripts/c | 3 + scripts/copy-public-key.sh | 23 + scripts/cron/annex-job.sh | 31 - scripts/cron/backup-job.sh | 31 - scripts/cron/copy-box-backups-job.sh | 31 - scripts/cron/deliver-my-enqueued-emails.sh | 5 - scripts/cron/deliver-queued-mail.sh | 18 - scripts/cron/elfeed-job.sh | 31 - scripts/cron/mbox-archive-job.sh | 31 - scripts/cron/mr-remotes-backup-job.sh | 31 - scripts/cron/notmuch-dump-job.sh | 31 - scripts/cron/repo-update-job.sh | 31 - scripts/cron/report-summary-job.sh | 31 - scripts/cron/sync-mail.sh | 21 - scripts/dmenu-emoji.sh | 13 + scripts/dmenu-vlc.sh | 9 + scripts/emoji-list.txt | 1432 ++++++++++++++++++++++++++++ scripts/export-keys.sh | 35 + scripts/fim | 3 + scripts/gc-mail.sh | 6 + scripts/gc-nix.sh | 18 + scripts/gc.sh | 42 + scripts/hd.sh | 11 + scripts/mailing-list-import-mbox.sh | 116 +++ scripts/open | 22 + scripts/pastebin.sh | 85 ++ scripts/post.sh | 120 +++ scripts/record-my-screen.sh | 34 + scripts/rotate-mpris-player.sh | 28 + scripts/single-monitor.sh | 2 + scripts/three-monitors.sh | 2 + scripts/vlc | 21 + scripts/xdg-open | 1 + scripts/xmobar-mpris.sh | 43 + scripts/xmobar-notmuch.sh | 10 + scripts/yt | 79 ++ scripts/zero-brightness.sh | 10 + xmonad/xmobar.hs | 4 +- xmonad/xmonad.hs | 16 +- 91 files changed, 2407 insertions(+), 2786 deletions(-) create mode 100755 cron/annex.sh create mode 100755 cron/archive-box.sh create mode 100755 cron/backup.sh create mode 100755 cron/copy-box-backups.sh create mode 100755 cron/elfeed.sh create mode 100755 cron/mbox-archive.sh create mode 100755 cron/mr-remotes-backup.sh create mode 100755 cron/repo-update.sh create mode 100755 cron/report-summary.sh delete mode 100755 scripts/ad-hoc/annex.sh delete mode 100755 scripts/ad-hoc/archive-box.sh delete mode 100755 scripts/ad-hoc/backup.sh delete mode 100755 scripts/ad-hoc/brightness.sh delete mode 100755 scripts/ad-hoc/c delete mode 100755 scripts/ad-hoc/copy-box-backups.sh delete mode 100755 scripts/ad-hoc/copy-public-key.sh delete mode 100755 scripts/ad-hoc/dmenu-emoji.sh delete mode 100755 scripts/ad-hoc/dmenu-vlc.sh delete mode 100644 scripts/ad-hoc/elfeed.js delete mode 100755 scripts/ad-hoc/elfeed.sh delete mode 100755 scripts/ad-hoc/emoji-list.txt delete mode 100755 scripts/ad-hoc/export-keys.sh delete mode 100755 scripts/ad-hoc/fim delete mode 100755 scripts/ad-hoc/gc-mail.sh delete mode 100755 scripts/ad-hoc/gc-nix.sh delete mode 100755 scripts/ad-hoc/gc.sh delete mode 100755 scripts/ad-hoc/hd.sh delete mode 100755 scripts/ad-hoc/mailing-list-import-mbox.sh delete mode 100755 scripts/ad-hoc/mbox-archive.sh delete mode 100755 scripts/ad-hoc/mr-remotes-backup.sh delete mode 100755 scripts/ad-hoc/open delete mode 100644 scripts/ad-hoc/package-lock.json delete mode 100755 scripts/ad-hoc/pastebin.sh delete mode 100755 scripts/ad-hoc/post.sh delete mode 100755 scripts/ad-hoc/record-my-screen.sh delete mode 100755 scripts/ad-hoc/repo-update.sh delete mode 100755 scripts/ad-hoc/report-summary.sh delete mode 100755 scripts/ad-hoc/rotate-mpris-player.sh delete mode 100755 scripts/ad-hoc/single-monitor.sh delete mode 100755 scripts/ad-hoc/three-monitors.sh delete mode 100755 scripts/ad-hoc/vlc delete mode 120000 scripts/ad-hoc/xdg-open delete mode 100755 scripts/ad-hoc/xmobar-mpris.sh delete mode 100755 scripts/ad-hoc/xmobar-notmuch.sh delete mode 100755 scripts/ad-hoc/yt delete mode 100755 scripts/ad-hoc/zero-brightness.sh create mode 100755 scripts/brightness.sh create mode 100755 scripts/c create mode 100755 scripts/copy-public-key.sh delete mode 100755 scripts/cron/annex-job.sh delete mode 100755 scripts/cron/backup-job.sh delete mode 100755 scripts/cron/copy-box-backups-job.sh delete mode 100755 scripts/cron/deliver-my-enqueued-emails.sh delete mode 100755 scripts/cron/deliver-queued-mail.sh delete mode 100755 scripts/cron/elfeed-job.sh delete mode 100755 scripts/cron/mbox-archive-job.sh delete mode 100755 scripts/cron/mr-remotes-backup-job.sh delete mode 100755 scripts/cron/notmuch-dump-job.sh delete mode 100755 scripts/cron/repo-update-job.sh delete mode 100755 scripts/cron/report-summary-job.sh delete mode 100755 scripts/cron/sync-mail.sh create mode 100755 scripts/dmenu-emoji.sh create mode 100755 scripts/dmenu-vlc.sh create mode 100755 scripts/emoji-list.txt create mode 100755 scripts/export-keys.sh create mode 100755 scripts/fim create mode 100755 scripts/gc-mail.sh create mode 100755 scripts/gc-nix.sh create mode 100755 scripts/gc.sh create mode 100755 scripts/hd.sh create mode 100755 scripts/mailing-list-import-mbox.sh create mode 100755 scripts/open create mode 100755 scripts/pastebin.sh create mode 100755 scripts/post.sh create mode 100755 scripts/record-my-screen.sh create mode 100755 scripts/rotate-mpris-player.sh create mode 100755 scripts/single-monitor.sh create mode 100755 scripts/three-monitors.sh create mode 100755 scripts/vlc create mode 120000 scripts/xdg-open create mode 100755 scripts/xmobar-mpris.sh create mode 100755 scripts/xmobar-notmuch.sh create mode 100755 scripts/yt create mode 100755 scripts/zero-brightness.sh diff --git a/.gitignore b/.gitignore index 258e7a4..92c38ca 100644 --- a/.gitignore +++ b/.gitignore @@ -1,6 +1,2 @@ -mail/offlineimap.pyc -tam_required /result - -/scripts/ad-hoc/node_modules/ -/scripts/package-lock.json \ No newline at end of file +/cron/generated/ diff --git a/bash/env.sh b/bash/env.sh index 2babd95..8a7b45b 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -13,10 +13,4 @@ export NIX_BUILD_CORES=0 export GUIX_PROFILE="$HOME/.guix-profile" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -PATH="$PATH:$HOME/.local/bin" -PATH="$PATH:$HOME/tmp/bin" -PATH="$PATH:$HOME/dev/libre/others/dinheiros" - -for p in "${DOTFILES}/scripts" "$HOME/annex/bin"; do - PATH="$p/ad-hoc:$p/cron:$PATH" -done +PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$HOME/annex/bin/scripts:$HOME/annex/bin/cron:$PATH" diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 160e317..4dc7866 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -6,18 +6,20 @@ cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messagin pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' -for job in report-summary annex elfeed backup copy-box-backups repo-update notmuch-dump mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" - chmod +x "$HOME/dev/libre/dotfiles/scripts/ad-hoc/${job}.sh" - chmod +x "$HOME/dev/libre/dotfiles/scripts/cron/${job}-job.sh" +mkdir -p "$DOTFILES/cron/generated/" +for job in report-summary annex elfeed backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/generated/${job}-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/${job}.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/generated/${job}-job.sh" done +mkdir -p "$HOME/annex/bin/cron/generated/" # shellcheck disable=2043 for job in pacheco; do - prefix="$HOME/annex/bin/ad-hoc" - sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" - chmod +x "$HOME/annex/bin/ad-hoc/${job}.sh" - chmod +x "$HOME/annex/bin/cron/${job}-job.sh" + prefix="$HOME/annex/bin/cron" + sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/generated/${job}-job.sh" + chmod +x "$HOME/annex/bin/cron/${job}.sh" + chmod +x "$HOME/annex/bin/cron/generated/${job}-job.sh" done mkdir -p ~/archive/torrent/ diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 44ee875..9f6e0ac 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -26,6 +26,6 @@ LOG_FILE="$(mktemp)" trap finish EXIT echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/__JOB__.sh + ~/dev/libre/dotfiles/cron/__JOB__.sh echo "Finishing: $(date -Is)" } | tee "$LOG_FILE" 2>&1 diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index f02a1b8..2af84fe 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,6 +1,6 @@ #!/bin/sh -eu -EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/ad-hoc/pastebin.sh|bash/util.sh|docbook-xsl.tar.gz)' +EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|bash/util.sh|docbook-xsl.tar.gz)' if git grep FIXME | grep -Ev "$EXCLUDE"; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." diff --git a/cron/annex.sh b/cron/annex.sh new file mode 100755 index 0000000..555653a --- /dev/null +++ b/cron/annex.sh @@ -0,0 +1,14 @@ +#!/bin/sh -eux + +# Required for properly running Git Annex, related issue: +# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ +export LANG=C.UTF-8 +AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" +AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" +export AWS_ACCESS_KEY_ID +export AWS_SECRET_ACCESS_KEY +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" + +cd ~/annex/ +git annex sync diff --git a/cron/archive-box.sh b/cron/archive-box.sh new file mode 100755 index 0000000..f6d8150 --- /dev/null +++ b/cron/archive-box.sh @@ -0,0 +1,53 @@ +#!/bin/sh -eux + +# FIXME + +# Derived from ArchiveBox: +# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 +QUERY=$(cat < ArchiveBox.conf +[SERVER_CONFIG] +SECRET_KEY = c2.o66u!7!tdfohba7r7w!qhgb9.+1hmjtg_lfvebucus6pow3 +SAVE_MEDIA=False +EOF +sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i archivebox/archivebox add + +# Start server with: +# $ cd "$HOME/UTCLOUD/archive-box/" +# $ docker run -v $PWD:/data -it -p 8000:8000 archivebox/archivebox diff --git a/cron/backup.sh b/cron/backup.sh new file mode 100755 index 0000000..59b3cd0 --- /dev/null +++ b/cron/backup.sh @@ -0,0 +1,37 @@ +#!/bin/sh -eux + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" > /dev/null +BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" +export BORG_PASSPHRASE +R='16686@ch-s010.rsync.net' +export BORG_REMOTE_PATH='borg1' + +# env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' +# borg init -e repokey-blake2 $R:desktop-borg + +borg create \ + --exclude ~/mbsync/.notmuch/ \ + --exclude ~/gPodder/Downloads \ + --verbose \ + --stats \ + --progress \ + --compression lzma,6 \ + "$R:desktop-borg::{hostname}-{now}-job" \ + ~/Sync/ \ + ~/BigSync/ \ + ~/mbsync/ \ + ~/archive/ \ + ~/.mozilla/ \ + ~/.config/quodlibet/ \ + ~/gPodder/ \ + ~/dev/libre/website/ \ + ~/.elfeed/ + # add folders to be backed up here + +# borg prune --keep-last 60 --verbose "$R:desktop-borg" + +cd ~/dev/libre/others/borg/ +git add . +git commit -m 'JOB: automated update of borg config files after backup.sh' +git push origin master diff --git a/cron/copy-box-backups.sh b/cron/copy-box-backups.sh new file mode 100755 index 0000000..92eda65 --- /dev/null +++ b/cron/copy-box-backups.sh @@ -0,0 +1,7 @@ +#!/bin/sh -eux + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" > /dev/null +R='16686@ch-s010.rsync.net' + +ssh euandre.org rsync -avzP --delete-after /home/user-data/backup/ "$R:box-duplicity/" diff --git a/cron/elfeed.sh b/cron/elfeed.sh new file mode 100755 index 0000000..fd6c2c7 --- /dev/null +++ b/cron/elfeed.sh @@ -0,0 +1,48 @@ +#!/usr/bin/env bash +set -Eeuo pipefail +cd "$(dirname "${BASH_SOURCE[0]}")" + +QUERY=$(cat < ~/.elfeed/ril.xml + +timeout 120 \ + emacs \ + -batch \ + -l ~/.emacs.d/init.el \ + --eval "(run-hooks 'emacs-startup-hook)" \ + --eval '(euandreh/elfeed-batch-update)' diff --git a/cron/mbox-archive.sh b/cron/mbox-archive.sh new file mode 100755 index 0000000..a12281e --- /dev/null +++ b/cron/mbox-archive.sh @@ -0,0 +1,6 @@ +#!/bin/sh -eux + +# FIXME + +echo 'TODO: Download MBOX archive of mailing lists, see:' +echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' diff --git a/cron/mr-remotes-backup.sh b/cron/mr-remotes-backup.sh new file mode 100755 index 0000000..0e37864 --- /dev/null +++ b/cron/mr-remotes-backup.sh @@ -0,0 +1,7 @@ +#!/bin/sh -eux + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" +cd ~/dev/libre/ +mr -s push rsyncnet +mr -s push gitlab diff --git a/cron/repo-update.sh b/cron/repo-update.sh new file mode 100755 index 0000000..65eb6db --- /dev/null +++ b/cron/repo-update.sh @@ -0,0 +1,6 @@ +#!/bin/sh -eu + +# shellcheck source=/dev/null +. "${HOME}/.ssh/environment" +cd "${HOME}" +mr -s safeupdate diff --git a/cron/report-summary.sh b/cron/report-summary.sh new file mode 100755 index 0000000..c21b147 --- /dev/null +++ b/cron/report-summary.sh @@ -0,0 +1,8 @@ +#!/bin/sh -eux + +F="/tmp/cron-dbg.summary.$(date -I).euandreh.log" +if grep ^1 "$F"; then + echo 'Some report failed for today:' + grep ^1 "$F" + exit 1 +fi diff --git a/scripts/ad-hoc/annex.sh b/scripts/ad-hoc/annex.sh deleted file mode 100755 index 555653a..0000000 --- a/scripts/ad-hoc/annex.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -eux - -# Required for properly running Git Annex, related issue: -# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ -export LANG=C.UTF-8 -AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" -AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" -export AWS_ACCESS_KEY_ID -export AWS_SECRET_ACCESS_KEY -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" - -cd ~/annex/ -git annex sync diff --git a/scripts/ad-hoc/archive-box.sh b/scripts/ad-hoc/archive-box.sh deleted file mode 100755 index 64f23e5..0000000 --- a/scripts/ad-hoc/archive-box.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/bin/sh -eux - -# Derived from ArchiveBox: -# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 -QUERY=$(cat < ArchiveBox.conf -[SERVER_CONFIG] -SECRET_KEY = c2.o66u!7!tdfohba7r7w!qhgb9.+1hmjtg_lfvebucus6pow3 -SAVE_MEDIA=False -EOF -sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i archivebox/archivebox add - -# Start server with: -# $ cd "$HOME/UTCLOUD/archive-box/" -# $ docker run -v $PWD:/data -it -p 8000:8000 archivebox/archivebox diff --git a/scripts/ad-hoc/backup.sh b/scripts/ad-hoc/backup.sh deleted file mode 100755 index 59b3cd0..0000000 --- a/scripts/ad-hoc/backup.sh +++ /dev/null @@ -1,37 +0,0 @@ -#!/bin/sh -eux - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" > /dev/null -BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" -export BORG_PASSPHRASE -R='16686@ch-s010.rsync.net' -export BORG_REMOTE_PATH='borg1' - -# env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' -# borg init -e repokey-blake2 $R:desktop-borg - -borg create \ - --exclude ~/mbsync/.notmuch/ \ - --exclude ~/gPodder/Downloads \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - "$R:desktop-borg::{hostname}-{now}-job" \ - ~/Sync/ \ - ~/BigSync/ \ - ~/mbsync/ \ - ~/archive/ \ - ~/.mozilla/ \ - ~/.config/quodlibet/ \ - ~/gPodder/ \ - ~/dev/libre/website/ \ - ~/.elfeed/ - # add folders to be backed up here - -# borg prune --keep-last 60 --verbose "$R:desktop-borg" - -cd ~/dev/libre/others/borg/ -git add . -git commit -m 'JOB: automated update of borg config files after backup.sh' -git push origin master diff --git a/scripts/ad-hoc/brightness.sh b/scripts/ad-hoc/brightness.sh deleted file mode 100755 index 29dc05b..0000000 --- a/scripts/ad-hoc/brightness.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -eux - -BRIGHTNESS_DIFF="${1}" - -# base dir for backlight class -BASEDIR='/sys/class/backlight/' - -# get the backlight handler -HANDLER="${BASEDIR}$(ls "${BASEDIR}")" - -# get current brightness -OLD_BRIGHTNESS="$(cat "${HANDLER}/brightness")" - -# get max brightness -MAX_BRIGHTNESS="$(cat "${HANDLER}/max_brightness")" - -# get current brightness % -OLD_BRIGHTNESS_P=$(( 100 * "${OLD_BRIGHTNESS}" / "${MAX_BRIGHTNESS}" )) - -# calculate new brightness %, bounded by 0 100 range -NEW_BRIGHTNESS_P=$(("${OLD_BRIGHTNESS_P}" + "${BRIGHTNESS_DIFF}")) -NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" > 100 ? 100 : "${NEW_BRIGHTNESS_P}")) -NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) - -# calculate new brightness value -NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) - -# set the new brightness value -echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/scripts/ad-hoc/c b/scripts/ad-hoc/c deleted file mode 100755 index 9b22062..0000000 --- a/scripts/ad-hoc/c +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -eu - -tmux send-keys -R \; clear-history diff --git a/scripts/ad-hoc/copy-box-backups.sh b/scripts/ad-hoc/copy-box-backups.sh deleted file mode 100755 index 92eda65..0000000 --- a/scripts/ad-hoc/copy-box-backups.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -eux - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" > /dev/null -R='16686@ch-s010.rsync.net' - -ssh euandre.org rsync -avzP --delete-after /home/user-data/backup/ "$R:box-duplicity/" diff --git a/scripts/ad-hoc/copy-public-key.sh b/scripts/ad-hoc/copy-public-key.sh deleted file mode 100755 index b864b4b..0000000 --- a/scripts/ad-hoc/copy-public-key.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -eux - -FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' -FILE="$(mktemp)" - -gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" - -# Update keyserver -# gpg --send-keys "${FINGERPRINT}" - -# Add to website -cp "${FILE}" ~/dev/libre/website/public-key.txt - -# Update in euandreh-guix-channel -cd ~/dev/libre/euandreh-guix-channel/ -git checkout keyring -cp "${FILE}" euandreh.key -cd - - -# Update in github: can't be done - -# Clean up -rm "${FILE}" diff --git a/scripts/ad-hoc/dmenu-emoji.sh b/scripts/ad-hoc/dmenu-emoji.sh deleted file mode 100755 index 11f8ab4..0000000 --- a/scripts/ad-hoc/dmenu-emoji.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -eux - -# Derived from: -# https://github.com/porras/dmenu-emoji - -LIST="$HOME/dev/libre/dotfiles/scripts/ad-hoc/emoji-list.txt" - -dmenu \ - -l 20 \ - -i \ - -p 'Emoji: ' -fn Monospace-18 \ - < "$LIST" \ - | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip diff --git a/scripts/ad-hoc/dmenu-vlc.sh b/scripts/ad-hoc/dmenu-vlc.sh deleted file mode 100755 index c42e26f..0000000 --- a/scripts/ad-hoc/dmenu-vlc.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -eu - -URL="$(xsel -bo)" - -res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" - -if [ "$res" = 'yes' ]; then - vlc "$URL" -fi diff --git a/scripts/ad-hoc/elfeed.js b/scripts/ad-hoc/elfeed.js deleted file mode 100644 index 54ed7ab..0000000 --- a/scripts/ad-hoc/elfeed.js +++ /dev/null @@ -1,19 +0,0 @@ -const fs = require("fs"); -const rss = require("rss"); - -const items = JSON.parse(fs.readFileSync(0, "utf-8")); - -const feed = new rss({ - title: "EuAndreh RIL title", - description: "EuAndreh RIL description", -}); - -items.forEach(({ title, url }) => - feed.item({ - title, - url - })); - -const xml = feed.xml({indent: true}); - -console.log(xml); diff --git a/scripts/ad-hoc/elfeed.sh b/scripts/ad-hoc/elfeed.sh deleted file mode 100755 index fd6c2c7..0000000 --- a/scripts/ad-hoc/elfeed.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -QUERY=$(cat < ~/.elfeed/ril.xml - -timeout 120 \ - emacs \ - -batch \ - -l ~/.emacs.d/init.el \ - --eval "(run-hooks 'emacs-startup-hook)" \ - --eval '(euandreh/elfeed-batch-update)' diff --git a/scripts/ad-hoc/emoji-list.txt b/scripts/ad-hoc/emoji-list.txt deleted file mode 100755 index 06b5a58..0000000 --- a/scripts/ad-hoc/emoji-list.txt +++ /dev/null @@ -1,1432 +0,0 @@ -grinning face 😀 -smiling face with open mouth 😃 -smiling face with open mouth & smiling eyes 😄 -grinning face with smiling eyes 😁 -smiling face with open mouth & closed eyes 😆 -smiling face with open mouth & cold sweat 😅 -face with tears of joy 😂 -rolling on the floor laughing 🤣 -smiling face ☺️ -smiling face with smiling eyes 😊 -smiling face with halo 😇 -slightly smiling face 🙂 -upside-down face 🙃 -winking face 😉 -relieved face 😌 -smiling face with heart-eyes 😍 -face blowing a kiss 😘 -kissing face 😗 -kissing face with smiling eyes 😙 -kissing face with closed eyes 😚 -face savouring delicious food 😋 -face with stuck-out tongue & winking eye 😜 -face with stuck-out tongue & closed eyes 😝 -face with stuck-out tongue 😛 -money-mouth face 🤑 -hugging face 🤗 -nerd face 🤓 -smiling face with sunglasses 😎 -clown face 🤡 -cowboy hat face 🤠 -smirking face 😏 -unamused face 😒 -disappointed face 😞 -pensive face 😔 -worried face 😟 -confused face 😕 -slightly frowning face 🙁 -frowning face ☹️ -persevering face 😣 -confounded face 😖 -tired face 😫 -weary face 😩 -face with steam from nose 😤 -angry face 😠 -pouting face 😡 -face without mouth 😶 -neutral face 😐 -expressionless face 😑 -hushed face 😯 -frowning face with open mouth 😦 -anguished face 😧 -face with open mouth 😮 -astonished face 😲 -dizzy face 😵 -flushed face 😳 -face screaming in fear 😱 -fearful face 😨 -face with open mouth & cold sweat 😰 -crying face 😢 -disappointed but relieved face 😥 -drooling face 🤤 -loudly crying face 😭 -face with cold sweat 😓 -sleepy face 😪 -sleeping face 😴 -face with rolling eyes 🙄 -thinking face 🤔 -lying face 🤥 -grimacing face 😬 -zipper-mouth face 🤐 -nauseated face 🤢 -sneezing face 🤧 -face with medical mask 😷 -face with thermometer 🤒 -face with head-bandage 🤕 -smiling face with horns 😈 -angry face with horns 👿 -ogre 👹 -goblin 👺 -pile of poo 💩 -ghost 👻 -skull 💀 -skull and crossbones ☠️ -alien 👽 -alien monster 👾 -robot face 🤖 -jack-o-lantern 🎃 -smiling cat face with open mouth 😺 -grinning cat face with smiling eyes 😸 -cat face with tears of joy 😹 -smiling cat face with heart-eyes 😻 -cat face with wry smile 😼 -kissing cat face with closed eyes 😽 -weary cat face 🙀 -crying cat face 😿 -pouting cat face 😾 -open hands 👐 -raising hands 🙌 -clapping hands 👏 -folded hands 🙏 -handshake 🤝 -thumbs up 👍 -thumbs down 👎 -oncoming fist 👊 -raised fist ✊ -left-facing fist 🤛 -right-facing fist 🤜 -crossed fingers 🤞 -victory hand ✌️ -sign of the horns 🤘 -OK hand 👌 -backhand index pointing left 👈 -backhand index pointing right 👉 -backhand index pointing up 👆 -backhand index pointing down 👇 -index pointing up ☝️ -raised hand ✋ -raised back of hand 🤚 -raised hand with fingers splayed 🖐 -vulcan salute 🖖 -waving hand 👋 -call me hand 🤙 -flexed biceps 💪 -middle finger 🖕 -writing hand ✍️ -selfie 🤳 -nail polish 💅 -ring 💍 -lipstick 💄 -kiss mark 💋 -mouth 👄 -tongue 👅 -ear 👂 -nose 👃 -footprints 👣 -eye 👁 -eyes 👀 -speaking head 🗣 -bust in silhouette 👤 -busts in silhouette 👥 -baby 👶 -boy 👦 -girl 👧 -man 👨 -woman 👩 -blond-haired woman 👱‍♀ -blond-haired person 👱 -old man 👴 -old woman 👵 -man with Chinese cap 👲 -woman wearing turban 👳‍♀ -person wearing turban 👳 -woman police officer 👮‍♀ -police officer 👮 -woman construction worker 👷‍♀ -construction worker 👷 -woman guard 💂‍♀ -guard 💂 -woman detective 🕵️‍♀️ -detective 🕵 -woman health worker 👩‍⚕ -man health worker 👨‍⚕ -woman farmer 👩‍🌾 -man farmer 👨‍🌾 -woman cook 👩‍🍳 -man cook 👨‍🍳 -woman student 👩‍🎓 -man student 👨‍🎓 -woman singer 👩‍🎤 -man singer 👨‍🎤 -woman teacher 👩‍🏫 -man teacher 👨‍🏫 -woman factory worker 👩‍🏭 -man factory worker 👨‍🏭 -woman technologist 👩‍💻 -man technologist 👨‍💻 -woman office worker 👩‍💼 -man office worker 👨‍💼 -woman mechanic 👩‍🔧 -man mechanic 👨‍🔧 -woman scientist 👩‍🔬 -man scientist 👨‍🔬 -woman artist 👩‍🎨 -man artist 👨‍🎨 -woman firefighter 👩‍🚒 -man firefighter 👨‍🚒 -woman pilot 👩‍✈ -man pilot 👨‍✈ -woman astronaut 👩‍🚀 -man astronaut 👨‍🚀 -woman judge 👩‍⚖ -man judge 👨‍⚖ -Mrs. Claus 🤶 -Santa Claus 🎅 -princess 👸 -prince 🤴 -bride with veil 👰 -man in tuxedo 🤵 -baby angel 👼 -pregnant woman 🤰 -woman bowing 🙇‍♀ -person bowing 🙇 -person tipping hand 💁 -man tipping hand 💁‍♂ -person gesturing NO 🙅 -man gesturing NO 🙅‍♂ -person gesturing OK 🙆 -man gesturing OK 🙆‍♂ -person raising hand 🙋 -man raising hand 🙋‍♂ -woman facepalming 🤦‍♀ -man facepalming 🤦‍♂ -woman shrugging 🤷‍♀ -man shrugging 🤷‍♂ -person pouting 🙎 -man pouting 🙎‍♂ -person frowning 🙍 -man frowning 🙍‍♂ -person getting haircut 💇 -man getting haircut 💇‍♂ -person getting massage 💆 -man getting massage 💆‍♂ -man in business suit levitating 🕴 -woman dancing 💃 -man dancing 🕺 -people with bunny ears partying 👯 -men with bunny ears partying 👯‍♂ -woman walking 🚶‍♀ -person walking 🚶 -woman running 🏃‍♀ -person running 🏃 -man and woman holding hands 👫 -two women holding hands 👭 -two men holding hands 👬 -couple with heart 💑 -couple with heart: woman woman 👩‍❤️‍👩 -couple with heart: man man 👨‍❤️‍👨 -kiss 💏 -kiss: woman woman 👩‍❤️‍💋‍👩 -kiss: man man 👨‍❤️‍💋‍👨 -family 👪 -family: man woman girl 👨‍👩‍👧 -family: man woman girl boy 👨‍👩‍👧‍👦 -family: man woman boy boy 👨‍👩‍👦‍👦 -family: man woman girl girl 👨‍👩‍👧‍👧 -family: woman woman boy 👩‍👩‍👦 -family: woman woman girl 👩‍👩‍👧 -family: woman woman girl boy 👩‍👩‍👧‍👦 -family: woman woman boy boy 👩‍👩‍👦‍👦 -family: woman woman girl girl 👩‍👩‍👧‍👧 -family: man man boy 👨‍👨‍👦 -family: man man girl 👨‍👨‍👧 -family: man man girl boy 👨‍👨‍👧‍👦 -family: man man boy boy 👨‍👨‍👦‍👦 -family: man man girl girl 👨‍👨‍👧‍👧 -family: woman boy 👩‍👦 -family: woman girl 👩‍👧 -family: woman girl boy 👩‍👧‍👦 -family: woman boy boy 👩‍👦‍👦 -family: woman girl girl 👩‍👧‍👧 -family: man boy 👨‍👦 -family: man girl 👨‍👧 -family: man girl boy 👨‍👧‍👦 -family: man boy boy 👨‍👦‍👦 -family: man girl girl 👨‍👧‍👧 -woman’s clothes 👚 -t-shirt 👕 -jeans 👖 -necktie 👔 -dress 👗 -bikini 👙 -kimono 👘 -high-heeled shoe 👠 -woman’s sandal 👡 -woman’s boot 👢 -man’s shoe 👞 -running shoe 👟 -woman’s hat 👒 -top hat 🎩 -graduation cap 🎓 -crown 👑 -rescue worker’s helmet ⛑ -school backpack 🎒 -clutch bag 👝 -purse 👛 -handbag 👜 -briefcase 💼 -glasses 👓 -sunglasses 🕶 -closed umbrella 🌂 -umbrella ☂️ -dog face 🐶 -cat face 🐱 -mouse face 🐭 -hamster face 🐹 -rabbit face 🐰 -fox face 🦊 -bear face 🐻 -panda face 🐼 -koala 🐨 -tiger face 🐯 -lion face 🦁 -cow face 🐮 -pig face 🐷 -pig nose 🐽 -frog face 🐸 -monkey face 🐵 -see-no-evil monkey 🙈 -hear-no-evil monkey 🙉 -speak-no-evil monkey 🙊 -monkey 🐒 -chicken 🐔 -penguin 🐧 -bird 🐦 -baby chick 🐤 -hatching chick 🐣 -front-facing baby chick 🐥 -duck 🦆 -eagle 🦅 -owl 🦉 -bat 🦇 -wolf face 🐺 -boar 🐗 -horse face 🐴 -unicorn face 🦄 -honeybee 🐝 -bug 🐛 -butterfly 🦋 -snail 🐌 -spiral shell 🐚 -lady beetle 🐞 -ant 🐜 -spider 🕷 -spider web 🕸 -turtle 🐢 -snake 🐍 -lizard 🦎 -scorpion 🦂 -crab 🦀 -squid 🦑 -octopus 🐙 -shrimp 🦐 -tropical fish 🐠 -fish 🐟 -blowfish 🐡 -dolphin 🐬 -shark 🦈 -spouting whale 🐳 -whale 🐋 -crocodile 🐊 -leopard 🐆 -tiger 🐅 -water buffalo 🐃 -ox 🐂 -cow 🐄 -deer 🦌 -camel 🐪 -two-hump camel 🐫 -elephant 🐘 -rhinoceros 🦏 -gorilla 🦍 -horse 🐎 -pig 🐖 -goat 🐐 -ram 🐏 -sheep 🐑 -dog 🐕 -poodle 🐩 -cat 🐈 -rooster 🐓 -turkey 🦃 -dove 🕊 -rabbit 🐇 -mouse 🐁 -rat 🐀 -chipmunk 🐿 -paw prints 🐾 -dragon 🐉 -dragon face 🐲 -cactus 🌵 -Christmas tree 🎄 -evergreen tree 🌲 -deciduous tree 🌳 -palm tree 🌴 -seedling 🌱 -herb 🌿 -shamrock ☘️ -four leaf clover 🍀 -pine decoration 🎍 -tanabata tree 🎋 -leaf fluttering in wind 🍃 -fallen leaf 🍂 -maple leaf 🍁 -mushroom 🍄 -sheaf of rice 🌾 -bouquet 💐 -tulip 🌷 -rose 🌹 -wilted flower 🥀 -sunflower 🌻 -blossom 🌼 -cherry blossom 🌸 -hibiscus 🌺 -globe showing Americas 🌎 -globe showing Europe-Africa 🌍 -globe showing Asia-Australia 🌏 -full moon 🌕 -waning gibbous moon 🌖 -last quarter moon 🌗 -waning crescent moon 🌘 -new moon 🌑 -waxing crescent moon 🌒 -first quarter moon 🌓 -waxing gibbous moon 🌔 -new moon face 🌚 -full moon with face 🌝 -sun with face 🌞 -first quarter moon with face 🌛 -last quarter moon with face 🌜 -crescent moon 🌙 -dizzy 💫 -white medium star ⭐️ -glowing star 🌟 -sparkles ✨ -high voltage ⚡️ -fire 🔥 -collision 💥 -comet ☄ -sun ☀️ -sun behind small cloud 🌤 -sun behind cloud ⛅️ -sun behind large cloud 🌥 -sun behind rain cloud 🌦 -rainbow 🌈 -cloud ☁️ -cloud with rain 🌧 -cloud with lightning and rain ⛈ -cloud with lightning 🌩 -cloud with snow 🌨 -snowman ☃️ -snowman without snow ⛄️ -snowflake ❄️ -wind face 🌬 -dashing away 💨 -tornado 🌪 -fog 🌫 -water wave 🌊 -droplet 💧 -sweat droplets 💦 -umbrella with rain drops ☔️ -green apple 🍏 -red apple 🍎 -pear 🍐 -tangerine 🍊 -lemon 🍋 -banana 🍌 -watermelon 🍉 -grapes 🍇 -strawberry 🍓 -melon 🍈 -cherries 🍒 -peach 🍑 -pineapple 🍍 -kiwi fruit 🥝 -avocado 🥑 -tomato 🍅 -eggplant 🍆 -cucumber 🥒 -carrot 🥕 -ear of corn 🌽 -hot pepper 🌶 -potato 🥔 -roasted sweet potato 🍠 -chestnut 🌰 -peanuts 🥜 -honey pot 🍯 -croissant 🥐 -bread 🍞 -baguette bread 🥖 -cheese wedge 🧀 -egg 🥚 -cooking 🍳 -bacon 🥓 -pancakes 🥞 -fried shrimp 🍤 -poultry leg 🍗 -meat on bone 🍖 -pizza 🍕 -hot dog 🌭 -hamburger 🍔 -french fries 🍟 -stuffed flatbread 🥙 -taco 🌮 -burrito 🌯 -green salad 🥗 -shallow pan of food 🥘 -spaghetti 🍝 -steaming bowl 🍜 -pot of food 🍲 -fish cake with swirl 🍥 -sushi 🍣 -bento box 🍱 -curry rice 🍛 -cooked rice 🍚 -rice ball 🍙 -rice cracker 🍘 -oden 🍢 -dango 🍡 -shaved ice 🍧 -ice cream 🍨 -soft ice cream 🍦 -shortcake 🍰 -birthday cake 🎂 -custard 🍮 -lollipop 🍭 -candy 🍬 -chocolate bar 🍫 -popcorn 🍿 -doughnut 🍩 -cookie 🍪 -glass of milk 🥛 -baby bottle 🍼 -hot beverage ☕️ -teacup without handle 🍵 -sake 🍶 -beer mug 🍺 -clinking beer mugs 🍻 -clinking glasses 🥂 -wine glass 🍷 -tumbler glass 🥃 -cocktail glass 🍸 -tropical drink 🍹 -bottle with popping cork 🍾 -spoon 🥄 -fork and knife 🍴 -fork and knife with plate 🍽 -soccer ball ⚽️ -basketball 🏀 -american football 🏈 -baseball ⚾️ -tennis 🎾 -volleyball 🏐 -rugby football 🏉 -pool 8 ball 🎱 -ping pong 🏓 -badminton 🏸 -goal net 🥅 -ice hockey 🏒 -field hockey 🏑 -cricket 🏏 -flag in hole ⛳️ -bow and arrow 🏹 -fishing pole 🎣 -boxing glove 🥊 -martial arts uniform 🥋 -ice skate ⛸ -skis 🎿 -skier ⛷ -snowboarder 🏂 -woman lifting weights 🏋️‍♀️ -person lifting weights 🏋 -person fencing 🤺 -women wrestling 🤼‍♀ -men wrestling 🤼‍♂ -woman cartwheeling 🤸‍♀ -man cartwheeling 🤸‍♂ -woman bouncing ball ⛹️‍♀️ -person bouncing ball ⛹ -woman playing handball 🤾‍♀ -man playing handball 🤾‍♂ -woman golfing 🏌️‍♀️ -person golfing 🏌 -woman surfing 🏄‍♀ -person surfing 🏄 -woman swimming 🏊‍♀ -person swimming 🏊 -woman playing water polo 🤽‍♀ -man playing water polo 🤽‍♂ -woman rowing boat 🚣‍♀ -person rowing boat 🚣 -horse racing 🏇 -woman biking 🚴‍♀ -person biking 🚴 -woman mountain biking 🚵‍♀ -person mountain biking 🚵 -running shirt 🎽 -sports medal 🏅 -military medal 🎖 -1st place medal 🥇 -2nd place medal 🥈 -3rd place medal 🥉 -trophy 🏆 -rosette 🏵 -reminder ribbon 🎗 -ticket 🎫 -admission tickets 🎟 -circus tent 🎪 -woman juggling 🤹‍♀ -man juggling 🤹‍♂ -performing arts 🎭 -artist palette 🎨 -clapper board 🎬 -microphone 🎤 -headphone 🎧 -musical score 🎼 -musical keyboard 🎹 -drum 🥁 -saxophone 🎷 -trumpet 🎺 -guitar 🎸 -violin 🎻 -game die 🎲 -direct hit 🎯 -bowling 🎳 -video game 🎮 -slot machine 🎰 -automobile 🚗 -taxi 🚕 -sport utility vehicle 🚙 -bus 🚌 -trolleybus 🚎 -racing car 🏎 -police car 🚓 -ambulance 🚑 -fire engine 🚒 -minibus 🚐 -delivery truck 🚚 -articulated lorry 🚛 -tractor 🚜 -kick scooter 🛴 -bicycle 🚲 -motor scooter 🛵 -motorcycle 🏍 -police car light 🚨 -oncoming police car 🚔 -oncoming bus 🚍 -oncoming automobile 🚘 -oncoming taxi 🚖 -aerial tramway 🚡 -mountain cableway 🚠 -suspension railway 🚟 -railway car 🚃 -tram car 🚋 -mountain railway 🚞 -monorail 🚝 -high-speed train 🚄 -high-speed train with bullet nose 🚅 -light rail 🚈 -locomotive 🚂 -train 🚆 -metro 🚇 -tram 🚊 -station 🚉 -helicopter 🚁 -small airplane 🛩 -airplane ✈️ -airplane departure 🛫 -airplane arrival 🛬 -rocket 🚀 -satellite 🛰 -seat 💺 -canoe 🛶 -sailboat ⛵️ -motor boat 🛥 -speedboat 🚤 -passenger ship 🛳 -ferry ⛴ -ship 🚢 -anchor ⚓️ -construction 🚧 -fuel pump ⛽️ -bus stop 🚏 -vertical traffic light 🚦 -horizontal traffic light 🚥 -world map 🗺 -moai 🗿 -Statue of Liberty 🗽 -fountain ⛲️ -Tokyo tower 🗼 -castle 🏰 -Japanese castle 🏯 -stadium 🏟 -ferris wheel 🎡 -roller coaster 🎢 -carousel horse 🎠 -umbrella on ground ⛱ -beach with umbrella 🏖 -desert island 🏝 -mountain ⛰ -snow-capped mountain 🏔 -mount fuji 🗻 -volcano 🌋 -desert 🏜 -camping 🏕 -tent ⛺️ -railway track 🛤 -motorway 🛣 -building construction 🏗 -factory 🏭 -house 🏠 -house with garden 🏡 -house 🏘 -derelict house 🏚 -office building 🏢 -department store 🏬 -Japanese post office 🏣 -post office 🏤 -hospital 🏥 -bank 🏦 -hotel 🏨 -convenience store 🏪 -school 🏫 -love hotel 🏩 -wedding 💒 -classical building 🏛 -church ⛪️ -mosque 🕌 -synagogue 🕍 -kaaba 🕋 -shinto shrine ⛩ -map of Japan 🗾 -moon viewing ceremony 🎑 -national park 🏞 -sunrise 🌅 -sunrise over mountains 🌄 -shooting star 🌠 -sparkler 🎇 -fireworks 🎆 -sunset 🌇 -cityscape at dusk 🌆 -cityscape 🏙 -night with stars 🌃 -milky way 🌌 -bridge at night 🌉 -foggy 🌁 -watch ⌚️ -mobile phone 📱 -mobile phone with arrow 📲 -laptop computer 💻 -keyboard ⌨️ -desktop computer 🖥 -printer 🖨 -computer mouse 🖱 -trackball 🖲 -joystick 🕹 -clamp 🗜 -computer disk 💽 -floppy disk 💾 -optical disk 💿 -dvd 📀 -videocassette 📼 -camera 📷 -camera with flash 📸 -video camera 📹 -movie camera 🎥 -film projector 📽 -film frames 🎞 -telephone receiver 📞 -telephone ☎️ -pager 📟 -fax machine 📠 -television 📺 -radio 📻 -studio microphone 🎙 -level slider 🎚 -control knobs 🎛 -stopwatch ⏱ -timer clock ⏲ -alarm clock ⏰ -mantelpiece clock 🕰 -hourglass ⌛️ -hourglass with flowing sand ⏳ -satellite antenna 📡 -battery 🔋 -electric plug 🔌 -light bulb 💡 -flashlight 🔦 -candle 🕯 -wastebasket 🗑 -oil drum 🛢 -money with wings 💸 -dollar banknote 💵 -yen banknote 💴 -euro banknote 💶 -pound banknote 💷 -money bag 💰 -credit card 💳 -gem stone 💎 -balance scale ⚖️ -wrench 🔧 -hammer 🔨 -hammer and pick ⚒ -hammer and wrench 🛠 -pick ⛏ -nut and bolt 🔩 -gear ⚙️ -chains ⛓ -pistol 🔫 -bomb 💣 -kitchen knife 🔪 -dagger 🗡 -crossed swords ⚔️ -shield 🛡 -cigarette 🚬 -coffin ⚰️ -funeral urn ⚱️ -amphora 🏺 -crystal ball 🔮 -prayer beads 📿 -barber pole 💈 -alembic ⚗️ -telescope 🔭 -microscope 🔬 -hole 🕳 -pill 💊 -syringe 💉 -thermometer 🌡 -toilet 🚽 -potable water 🚰 -shower 🚿 -bathtub 🛁 -person taking bath 🛀 -bellhop bell 🛎 -key 🔑 -old key 🗝 -door 🚪 -couch and lamp 🛋 -bed 🛏 -person in bed 🛌 -framed picture 🖼 -shopping bags 🛍 -shopping cart 🛒 -wrapped gift 🎁 -balloon 🎈 -carp streamer 🎏 -ribbon 🎀 -confetti ball 🎊 -party popper 🎉 -Japanese dolls 🎎 -red paper lantern 🏮 -wind chime 🎐 -envelope ✉️ -envelope with arrow 📩 -incoming envelope 📨 -e-mail 📧 -love letter 💌 -inbox tray 📥 -outbox tray 📤 -package 📦 -label 🏷 -closed mailbox with lowered flag 📪 -closed mailbox with raised flag 📫 -open mailbox with raised flag 📬 -open mailbox with lowered flag 📭 -postbox 📮 -postal horn 📯 -scroll 📜 -page with curl 📃 -page facing up 📄 -bookmark tabs 📑 -bar chart 📊 -chart increasing 📈 -chart decreasing 📉 -spiral notepad 🗒 -spiral calendar 🗓 -tear-off calendar 📆 -calendar 📅 -card index 📇 -card file box 🗃 -ballot box with ballot 🗳 -file cabinet 🗄 -clipboard 📋 -file folder 📁 -open file folder 📂 -card index dividers 🗂 -rolled-up newspaper 🗞 -newspaper 📰 -notebook 📓 -notebook with decorative cover 📔 -ledger 📒 -closed book 📕 -green book 📗 -blue book 📘 -orange book 📙 -books 📚 -open book 📖 -bookmark 🔖 -link 🔗 -paperclip 📎 -linked paperclips 🖇 -triangular ruler 📐 -straight ruler 📏 -pushpin 📌 -round pushpin 📍 -scissors ✂️ -pen 🖊 -fountain pen 🖋 -black nib ✒️ -paintbrush 🖌 -crayon 🖍 -memo 📝 -pencil ✏️ -left-pointing magnifying glass 🔍 -right-pointing magnifying glass 🔎 -locked with pen 🔏 -locked with key 🔐 -locked 🔒 -unlocked 🔓 -red heart ❤️ -yellow heart 💛 -green heart 💚 -blue heart 💙 -purple heart 💜 -black heart 🖤 -broken heart 💔 -heavy heart exclamation ❣️ -two hearts 💕 -revolving hearts 💞 -beating heart 💓 -growing heart 💗 -sparkling heart 💖 -heart with arrow 💘 -heart with ribbon 💝 -heart decoration 💟 -peace symbol ☮️ -latin cross ✝️ -star and crescent ☪️ -om 🕉 -wheel of dharma ☸️ -star of David ✡️ -dotted six-pointed star 🔯 -menorah 🕎 -yin yang ☯️ -orthodox cross ☦️ -place of worship 🛐 -Ophiuchus ⛎ -Aries ♈️ -Taurus ♉️ -Gemini ♊️ -Cancer ♋️ -Leo ♌️ -Virgo ♍️ -Libra ♎️ -Scorpius ♏️ -Sagittarius ♐️ -Capricorn ♑️ -Aquarius ♒️ -Pisces ♓️ -ID button 🆔 -atom symbol ⚛️ -Japanese “acceptable” button 🉑 -radioactive ☢️ -biohazard ☣️ -mobile phone off 📴 -vibration mode 📳 -Japanese “not free of charge” button 🈶 -Japanese “free of charge” button 🈚️ -Japanese “application” button 🈸 -Japanese “open for business” button 🈺 -Japanese “monthly amount” button 🈷️ -eight-pointed star ✴️ -VS button 🆚 -white flower 💮 -Japanese “bargain” button 🉐 -Japanese “secret” button ㊙️ -Japanese “congratulations” button ㊗️ -Japanese “passing grade” button 🈴 -Japanese “no vacancy” button 🈵 -Japanese “discount” button 🈹 -Japanese “prohibited” button 🈲 -A button (blood type) 🅰️ -B button (blood type) 🅱️ -AB button (blood type) 🆎 -CL button 🆑 -O button (blood type) 🅾️ -SOS button 🆘 -cross mark ❌ -heavy large circle ⭕️ -stop sign 🛑 -no entry ⛔️ -name badge 📛 -prohibited 🚫 -hundred points 💯 -anger symbol 💢 -hot springs ♨️ -no pedestrians 🚷 -no littering 🚯 -no bicycles 🚳 -non-potable water 🚱 -no one under eighteen 🔞 -no mobile phones 📵 -no smoking 🚭 -exclamation mark ❗️ -white exclamation mark ❕ -question mark ❓ -white question mark ❔ -double exclamation mark ‼️ -exclamation question mark ⁉️ -dim button 🔅 -bright button 🔆 -part alternation mark 〽️ -warning ⚠️ -children crossing 🚸 -trident emblem 🔱 -fleur-de-lis ⚜️ -Japanese symbol for beginner 🔰 -recycling symbol ♻️ -white heavy check mark ✅ -Japanese “reserved” button 🈯️ -chart increasing with yen 💹 -sparkle ❇️ -eight-spoked asterisk ✳️ -cross mark button ❎ -globe with meridians 🌐 -diamond with a dot 💠 -circled M Ⓜ️ -cyclone 🌀 -zzz 💤 -ATM sign 🏧 -water closet 🚾 -wheelchair symbol ♿️ -P button 🅿️ -Japanese “vacancy” button 🈳 -Japanese “service charge” button 🈂️ -passport control 🛂 -customs 🛃 -baggage claim 🛄 -left luggage 🛅 -men’s room 🚹 -women’s room 🚺 -baby symbol 🚼 -restroom 🚻 -litter in bin sign 🚮 -cinema 🎦 -antenna bars 📶 -Japanese “here” button 🈁 -input symbols 🔣 -information ℹ️ -input latin letters 🔤 -input latin lowercase 🔡 -input latin uppercase 🔠 -NG button 🆖 -OK button 🆗 -UP! button 🆙 -COOL button 🆒 -NEW button 🆕 -FREE button 🆓 -keycap: 0 0️⃣ -keycap: 1 1️⃣ -keycap: 2 2️⃣ -keycap: 3 3️⃣ -keycap: 4 4️⃣ -keycap: 5 5️⃣ -keycap: 6 6️⃣ -keycap: 7 7️⃣ -keycap: 8 8️⃣ -keycap: 9 9️⃣ -keycap 10 🔟 -input numbers 🔢 -keycap: # #️⃣ -keycap: * *️⃣ -play button ▶️ -pause button ⏸ -play or pause button ⏯ -stop button ⏹ -record button ⏺ -next track button ⏭ -last track button ⏮ -fast-forward button ⏩ -fast reverse button ⏪ -fast up button ⏫ -fast down button ⏬ -reverse button ◀️ -up button 🔼 -down button 🔽 -right arrow ➡️ -left arrow ⬅️ -up arrow ⬆️ -down arrow ⬇️ -up-right arrow ↗️ -down-right arrow ↘️ -down-left arrow ↙️ -up-left arrow ↖️ -up-down arrow ↕️ -left-right arrow ↔️ -left arrow curving right ↪️ -right arrow curving left ↩️ -right arrow curving up ⤴️ -right arrow curving down ⤵️ -shuffle tracks button 🔀 -repeat button 🔁 -repeat single button 🔂 -anticlockwise arrows button 🔄 -clockwise vertical arrows 🔃 -musical note 🎵 -musical notes 🎶 -heavy plus sign ➕ -heavy minus sign ➖ -heavy division sign ➗ -heavy multiplication x ✖️ -heavy dollar sign 💲 -currency exchange 💱 -trade mark ™️ -copyright ©️ -registered ®️ -wavy dash 〰️ -curly loop ➰ -double curly loop ➿ -END arrow 🔚 -BACK arrow 🔙 -ON! arrow 🔛 -TOP arrow 🔝 -SOON arrow 🔜 -heavy check mark ✔️ -ballot box with check ☑️ -radio button 🔘 -white circle ⚪️ -black circle ⚫️ -red circle 🔴 -blue circle 🔵 -red triangle pointed up 🔺 -red triangle pointed down 🔻 -small orange diamond 🔸 -small blue diamond 🔹 -large orange diamond 🔶 -large blue diamond 🔷 -white square button 🔳 -black square button 🔲 -black small square ▪️ -white small square ▫️ -black medium-small square ◾️ -white medium-small square ◽️ -black medium square ◼️ -white medium square ◻️ -black large square ⬛️ -white large square ⬜️ -speaker low volume 🔈 -muted speaker 🔇 -speaker medium volume 🔉 -speaker high volume 🔊 -bell 🔔 -bell with slash 🔕 -megaphone 📣 -loudspeaker 📢 -eye in speech bubble 👁‍🗨 -speech balloon 💬 -thought balloon 💭 -right anger bubble 🗯 -spade suit ♠️ -club suit ♣️ -heart suit ♥️ -diamond suit ♦️ -joker 🃏 -flower playing cards 🎴 -mahjong red dragon 🀄️ -one o’clock 🕐 -two o’clock 🕑 -three o’clock 🕒 -four o’clock 🕓 -five o’clock 🕔 -six o’clock 🕕 -seven o’clock 🕖 -eight o’clock 🕗 -nine o’clock 🕘 -ten o’clock 🕙 -eleven o’clock 🕚 -twelve o’clock 🕛 -one-thirty 🕜 -two-thirty 🕝 -three-thirty 🕞 -four-thirty 🕟 -five-thirty 🕠 -six-thirty 🕡 -seven-thirty 🕢 -eight-thirty 🕣 -nine-thirty 🕤 -ten-thirty 🕥 -eleven-thirty 🕦 -twelve-thirty 🕧 -white flag 🏳️ -black flag 🏴 -chequered flag 🏁 -triangular flag 🚩 -rainbow flag 🏳️‍🌈 -Afghanistan 🇦🇫 -Åland Islands 🇦🇽 -Albania 🇦🇱 -Algeria 🇩🇿 -American Samoa 🇦🇸 -Andorra 🇦🇩 -Angola 🇦🇴 -Anguilla 🇦🇮 -Antarctica 🇦🇶 -Antigua & Barbuda 🇦🇬 -Argentina 🇦🇷 -Armenia 🇦🇲 -Aruba 🇦🇼 -Australia 🇦🇺 -Austria 🇦🇹 -Azerbaijan 🇦🇿 -Bahamas 🇧🇸 -Bahrain 🇧🇭 -Bangladesh 🇧🇩 -Barbados 🇧🇧 -Belarus 🇧🇾 -Belgium 🇧🇪 -Belize 🇧🇿 -Benin 🇧🇯 -Bermuda 🇧🇲 -Bhutan 🇧🇹 -Bolivia 🇧🇴 -Caribbean Netherlands 🇧🇶 -Bosnia & Herzegovina 🇧🇦 -Botswana 🇧🇼 -Brazil 🇧🇷 -British Indian Ocean Territory 🇮🇴 -British Virgin Islands 🇻🇬 -Brunei 🇧🇳 -Bulgaria 🇧🇬 -Burkina Faso 🇧🇫 -Burundi 🇧🇮 -Cape Verde 🇨🇻 -Cambodia 🇰🇭 -Cameroon 🇨🇲 -Canada 🇨🇦 -Canary Islands 🇮🇨 -Cayman Islands 🇰🇾 -Central African Republic 🇨🇫 -Chad 🇹🇩 -Chile 🇨🇱 -China 🇨🇳 -Christmas Island 🇨🇽 -Cocos (Keeling) Islands 🇨🇨 -Colombia 🇨🇴 -Comoros 🇰🇲 -Congo - Brazzaville 🇨🇬 -Congo - Kinshasa 🇨🇩 -Cook Islands 🇨🇰 -Costa Rica 🇨🇷 -Côte d’Ivoire 🇨🇮 -Croatia 🇭🇷 -Cuba 🇨🇺 -Curaçao 🇨🇼 -Cyprus 🇨🇾 -Czech Republic 🇨🇿 -Denmark 🇩🇰 -Djibouti 🇩🇯 -Dominica 🇩🇲 -Dominican Republic 🇩🇴 -Ecuador 🇪🇨 -Egypt 🇪🇬 -El Salvador 🇸🇻 -Equatorial Guinea 🇬🇶 -Eritrea 🇪🇷 -Estonia 🇪🇪 -Ethiopia 🇪🇹 -European Union 🇪🇺 -Falkland Islands 🇫🇰 -Faroe Islands 🇫🇴 -Fiji 🇫🇯 -Finland 🇫🇮 -France 🇫🇷 -French Guiana 🇬🇫 -French Polynesia 🇵🇫 -French Southern Territories 🇹🇫 -Gabon 🇬🇦 -Gambia 🇬🇲 -Georgia 🇬🇪 -Germany 🇩🇪 -Ghana 🇬🇭 -Gibraltar 🇬🇮 -Greece 🇬🇷 -Greenland 🇬🇱 -Grenada 🇬🇩 -Guadeloupe 🇬🇵 -Guam 🇬🇺 -Guatemala 🇬🇹 -Guernsey 🇬🇬 -Guinea 🇬🇳 -Guinea-Bissau 🇬🇼 -Guyana 🇬🇾 -Haiti 🇭🇹 -Honduras 🇭🇳 -Hong Kong SAR China 🇭🇰 -Hungary 🇭🇺 -Iceland 🇮🇸 -India 🇮🇳 -Indonesia 🇮🇩 -Iran 🇮🇷 -Iraq 🇮🇶 -Ireland 🇮🇪 -Isle of Man 🇮🇲 -Israel 🇮🇱 -Italy 🇮🇹 -Jamaica 🇯🇲 -Japan 🇯🇵 -crossed flags 🎌 -Jersey 🇯🇪 -Jordan 🇯🇴 -Kazakhstan 🇰🇿 -Kenya 🇰🇪 -Kiribati 🇰🇮 -Kosovo 🇽🇰 -Kuwait 🇰🇼 -Kyrgyzstan 🇰🇬 -Laos 🇱🇦 -Latvia 🇱🇻 -Lebanon 🇱🇧 -Lesotho 🇱🇸 -Liberia 🇱🇷 -Libya 🇱🇾 -Liechtenstein 🇱🇮 -Lithuania 🇱🇹 -Luxembourg 🇱🇺 -Macau SAR China 🇲🇴 -Macedonia 🇲🇰 -Madagascar 🇲🇬 -Malawi 🇲🇼 -Malaysia 🇲🇾 -Maldives 🇲🇻 -Mali 🇲🇱 -Malta 🇲🇹 -Marshall Islands 🇲🇭 -Martinique 🇲🇶 -Mauritania 🇲🇷 -Mauritius 🇲🇺 -Mayotte 🇾🇹 -Mexico 🇲🇽 -Micronesia 🇫🇲 -Moldova 🇲🇩 -Monaco 🇲🇨 -Mongolia 🇲🇳 -Montenegro 🇲🇪 -Montserrat 🇲🇸 -Morocco 🇲🇦 -Mozambique 🇲🇿 -Myanmar (Burma) 🇲🇲 -Namibia 🇳🇦 -Nauru 🇳🇷 -Nepal 🇳🇵 -Netherlands 🇳🇱 -New Caledonia 🇳🇨 -New Zealand 🇳🇿 -Nicaragua 🇳🇮 -Niger 🇳🇪 -Nigeria 🇳🇬 -Niue 🇳🇺 -Norfolk Island 🇳🇫 -Northern Mariana Islands 🇲🇵 -North Korea 🇰🇵 -Norway 🇳🇴 -Oman 🇴🇲 -Pakistan 🇵🇰 -Palau 🇵🇼 -Palestinian Territories 🇵🇸 -Panama 🇵🇦 -Papua New Guinea 🇵🇬 -Paraguay 🇵🇾 -Peru 🇵🇪 -Philippines 🇵🇭 -Pitcairn Islands 🇵🇳 -Poland 🇵🇱 -Portugal 🇵🇹 -Puerto Rico 🇵🇷 -Qatar 🇶🇦 -Réunion 🇷🇪 -Romania 🇷🇴 -Russia 🇷🇺 -Rwanda 🇷🇼 -St. Barthélemy 🇧🇱 -St. Helena 🇸🇭 -St. Kitts & Nevis 🇰🇳 -St. Lucia 🇱🇨 -St. Pierre & Miquelon 🇵🇲 -St. Vincent & Grenadines 🇻🇨 -Samoa 🇼🇸 -San Marino 🇸🇲 -São Tomé & Príncipe 🇸🇹 -Saudi Arabia 🇸🇦 -Senegal 🇸🇳 -Serbia 🇷🇸 -Seychelles 🇸🇨 -Sierra Leone 🇸🇱 -Singapore 🇸🇬 -Sint Maarten 🇸🇽 -Slovakia 🇸🇰 -Slovenia 🇸🇮 -Solomon Islands 🇸🇧 -Somalia 🇸🇴 -South Africa 🇿🇦 -South Georgia & South Sandwich Islands 🇬🇸 -South Korea 🇰🇷 -South Sudan 🇸🇸 -Spain 🇪🇸 -Sri Lanka 🇱🇰 -Sudan 🇸🇩 -Suriname 🇸🇷 -Swaziland 🇸🇿 -Sweden 🇸🇪 -Switzerland 🇨🇭 -Syria 🇸🇾 -Taiwan 🇹🇼 -Tajikistan 🇹🇯 -Tanzania 🇹🇿 -Thailand 🇹🇭 -Timor-Leste 🇹🇱 -Togo 🇹🇬 -Tokelau 🇹🇰 -Tonga 🇹🇴 -Trinidad & Tobago 🇹🇹 -Tunisia 🇹🇳 -Turkey 🇹🇷 -Turkmenistan 🇹🇲 -Turks & Caicos Islands 🇹🇨 -Tuvalu 🇹🇻 -Uganda 🇺🇬 -Ukraine 🇺🇦 -United Arab Emirates 🇦🇪 -United Kingdom 🇬🇧 -United States 🇺🇸 -U.S. Virgin Islands 🇻🇮 -Uruguay 🇺🇾 -Uzbekistan 🇺🇿 -Vanuatu 🇻🇺 -Vatican City 🇻🇦 -Venezuela 🇻🇪 -Vietnam 🇻🇳 -Wallis & Futuna 🇼🇫 -Western Sahara 🇪🇭 -Yemen 🇾🇪 -Zambia 🇿🇲 -Zimbabwe 🇿🇼 diff --git a/scripts/ad-hoc/export-keys.sh b/scripts/ad-hoc/export-keys.sh deleted file mode 100755 index 5807dbc..0000000 --- a/scripts/ad-hoc/export-keys.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -yellow "Exporting public key..." -gpg --export --armor -a EuAndreh > keys.gpg -green "Done." - -yellow "Exporting private key..." -read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r -gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg -green "Done." - -yellow "Exporting ownertrust..." -gpg --export-ownertrust > trust.txt -green "Done." - -yellow "Creating tar with key pair and trust content..." -tar -cvf EuAndreh.tar keys.gpg trust.txt -green "Done." - -yellow "Encrypting tar file..." -read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r -gpg --cipher-algo AES256 -c EuAndreh.tar -green "Done." - -yellow "Removing traces of private key..." -shred trust.txt -rm trust.txt -shred keys.gpg -rm keys.gpg -shred EuAndreh.tar -rm EuAndreh.tar -green "Done." - -blue "File 'EuAndreh.tar.gpg' created!" diff --git a/scripts/ad-hoc/fim b/scripts/ad-hoc/fim deleted file mode 100755 index ff8e00d..0000000 --- a/scripts/ad-hoc/fim +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -eu - -play "$DOTFILES/bash/Positive.ogg" 2> /dev/null diff --git a/scripts/ad-hoc/gc-mail.sh b/scripts/ad-hoc/gc-mail.sh deleted file mode 100755 index 5952cf7..0000000 --- a/scripts/ad-hoc/gc-mail.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux - -# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ -yellow "Clean up deleted email files" -notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -notmuch new diff --git a/scripts/ad-hoc/gc-nix.sh b/scripts/ad-hoc/gc-nix.sh deleted file mode 100755 index 056c1eb..0000000 --- a/scripts/ad-hoc/gc-nix.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -# shellcheck source=/dev/null -. "$DOTFILES/bash/colors.sh" -yellow "Cleaning up the NixOS store" - -profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) - -for p in "${profiles[@]}"; do - sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" -done - -# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= -nix-env --delete-generations old - -nix-store --gc -nix-collect-garbage -d diff --git a/scripts/ad-hoc/gc.sh b/scripts/ad-hoc/gc.sh deleted file mode 100755 index bdc0043..0000000 --- a/scripts/ad-hoc/gc.sh +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -eux - -disk_space() { - u | awk '{print $5" "$6}' -} - -before=$(disk_space) - -gc-nix.sh - -yellow "Cleaning up Guix store" - -guix gc - - -yellow "Cleaning up up the Trash and /tmp folders" - -sudo rm -rf ~/.local/share/Trash/files/* -# https://askubuntu.com/a/609396 -sudo find /tmp -type f -atime +10 -delete - - -yellow "Erasing docker images" - -echo y | docker system prune -a -docker rmi "$(docker images -a -q)" -docker rm "$(docker ps -a -f status=exited -q)" - -docker stop "$(docker ps -a -q)" -docker rm "$(docker ps -a -q)" - -echo y | docker volume prune -echo y | docker container prune - -gc-mail.sh - -after=$(disk_space) - -green "Done." -green "Disk space before and after:" -blue " before: ${before}" -blue " after: ${after}" diff --git a/scripts/ad-hoc/hd.sh b/scripts/ad-hoc/hd.sh deleted file mode 100755 index e977aa3..0000000 --- a/scripts/ad-hoc/hd.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -eux - -annex.sh - -rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ -rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ -rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ -rsync -avzP --delete euandre.org:/home/user-data/ ~/UTCLOUD/backups/box-ssd/ - -cd ~/dev/ -mr -s -j4 hd diff --git a/scripts/ad-hoc/mailing-list-import-mbox.sh b/scripts/ad-hoc/mailing-list-import-mbox.sh deleted file mode 100755 index d69c42f..0000000 --- a/scripts/ad-hoc/mailing-list-import-mbox.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p bash wget mb2md -# shellcheck shell=bash -set -Eeuo pipefail - -MAILING_LIST_PROVIDER="${1:-}" -MAILING_LIST_NAME="${2:-}" -GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' -OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" -TMP_DIR="$HOME/tmp/mbox-import" -usage() { - cat < - - Arguments - MAILING_LIST_NAME The name of the mailing list, e.g.: info-guix. - MAILING_LIST_PROVIDER The name of the host of the mailing list, e.g.: gnu. - Supported providers: - 'gnu' for GNU mailing lists - 'google' for Google Groups - -Examples: - Download and import into mbsync the MBOX archive from info-guix mailing-list: - mailing-list-import-mbox.sh gnu info-guix - - Download and import into mbsync the contents for lisp-br Google Groups: - mailing-list-import-mbox.sh google lisp-br -EOF -} - -gnu_mailing_list_import() { - mkdir -p "${TMP_DIR}" - pushd "${TMP_DIR}" - - # Subscribe to the mailing list - local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" - local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail "$recipient" \ - -s "$subject" \ - -aFrom:mailing-list@euandre.org <<<'' - - # Download existing archive as MBOX files - wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" - - # Concatenate all MBOX files into as single MBOX file - cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" - - # Transform the MBOX file into a MailDir format and put it on the right place - mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" - popd -} - -google_groups_import() { - [[ -f ~/dev/misc/google-group-crawler/crawler.sh ]] || { - red "Missing ${HOME}/dev/misc/google-group-crawler/crawler.sh file." - red "Clone it before importing Google Groups emails." - exit 1 - } - mkdir -p "${TMP_DIR}" - pushd "${TMP_DIR}" - - # Subscribe to the mailing list - local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" - local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' - - # Download existing messages into MBOX Files - CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" - export _GROUP="${MAILING_LIST_NAME}" - ~/dev/misc/google-group-crawler/crawler.sh -sh > "${CRAWLER_FILE}" - bash "${CRAWLER_FILE}" - - cat "${MAILING_LIST_NAME}/mbox/"* > "${MAILING_LIST_NAME}.all.mbox" - - echo before - echo mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" - echo after - popd -} - -main() { - [[ -z "${MAILING_LIST_PROVIDER}" ]] && { - red "Missing input argument 'MAILING_LIST_PROVIDER'.\n" - usage - exit 2 - } - - [[ -z "${MAILING_LIST_NAME}" ]] && { - red "Missing input argument 'MAILING_LIST_NAME'.\n" - usage - exit 2 - } - - case "${MAILING_LIST_PROVIDER}" in - "gnu") - gnu_mailing_list_import - ;; - "google") - google_groups_import - ;; - *) - red "Unsupported mailing list provider '${MAILING_LIST_PROVIDER}'." - usage - exit 2 - ;; - esac - - echo "${MAILING_LIST_PROVIDER} ${MAILING_LIST_NAME}" >> ~/annex/txt/mailing-list-subscriptions.txt - - green "Done." - yellow "Make sure to add the correct tagging rules for notmuch post-hook!" - blue "Remember to sync new changes by running sync-mail.sh!" -} - -main "$@" diff --git a/scripts/ad-hoc/mbox-archive.sh b/scripts/ad-hoc/mbox-archive.sh deleted file mode 100755 index 58360cc..0000000 --- a/scripts/ad-hoc/mbox-archive.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -eux - -echo 'TODO: Download MBOX archive of mailing lists, see:' -echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' diff --git a/scripts/ad-hoc/mr-remotes-backup.sh b/scripts/ad-hoc/mr-remotes-backup.sh deleted file mode 100755 index 0e37864..0000000 --- a/scripts/ad-hoc/mr-remotes-backup.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -eux - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" -cd ~/dev/libre/ -mr -s push rsyncnet -mr -s push gitlab diff --git a/scripts/ad-hoc/open b/scripts/ad-hoc/open deleted file mode 100755 index 9383059..0000000 --- a/scripts/ad-hoc/open +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -eux - -case "$1" in - *.ico|*.jpg|*.jpeg|*.png) - feh "$1" - ;; - https://www.youtube.com/watch*) - vlc "$1" - ;; - http*|*.svg) - firefox "$1" - ;; - *.pdf) - zathura "$1" - ;; - *.flac|*.ogg|*.mkv) - vlc "$1" - ;; - *) - /run/current-system/sw/bin/xdg-open "$1" - ;; -esac diff --git a/scripts/ad-hoc/package-lock.json b/scripts/ad-hoc/package-lock.json deleted file mode 100644 index 29925e3..0000000 --- a/scripts/ad-hoc/package-lock.json +++ /dev/null @@ -1,33 +0,0 @@ -{ - "requires": true, - "lockfileVersion": 1, - "dependencies": { - "mime-db": { - "version": "1.25.0", - "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.25.0.tgz", - "integrity": "sha1-wY29fHOl2/b0SgJNwNFloeexw5I=" - }, - "mime-types": { - "version": "2.1.13", - "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.13.tgz", - "integrity": "sha1-4HqqnGxrmnyjASxpADrSWjnpKog=", - "requires": { - "mime-db": "~1.25.0" - } - }, - "rss": { - "version": "1.2.2", - "resolved": "https://registry.npmjs.org/rss/-/rss-1.2.2.tgz", - "integrity": "sha1-UKFpiHYTgTOnT5oF0r3I240nqSE=", - "requires": { - "mime-types": "2.1.13", - "xml": "1.0.1" - } - }, - "xml": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/xml/-/xml-1.0.1.tgz", - "integrity": "sha1-eLpyAgApxbyHuKgaPPzXS0ovweU=" - } - } -} diff --git a/scripts/ad-hoc/pastebin.sh b/scripts/ad-hoc/pastebin.sh deleted file mode 100755 index d4c3159..0000000 --- a/scripts/ad-hoc/pastebin.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -usage() { - red "Missing argument <${1}>.\n" - cat < [-|FILE] - - Reads contents from [FILE], from stdin if '-' is given, and opens the - editor on the content. - - Arguments: - FULL_TITLE Full title of the pastebin - -Examples: - pastebin.sh 'My example pastebin title' - pastebin.sh 'My example pastebin title' - < file - cat file | pastebin.sh 'My example pastebin title' - -EOF -} - -FULL_TITLE="${1:-}" -[[ -z "$FULL_TITLE" ]] && { - usage 'FULL_TITLE' - exit 2 -} - -# Derived from: -# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 -slugify() { - echo "$1" | \ - tr '[:upper:]' '[:lower:]' | \ - perl -ne 'tr/\000-\177//cd; - s/[^\w\s-]//g; - s/^\s+|\s+$//g; - s/[-\s]+/-/g; - print;' -} - -SLUG_TITLE="$(slugify "$FULL_TITLE")" -PASTE_DATE="$(date -I)" -OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" -if [[ -n "${2:-}" ]]; then - shift - CONTENT=$(cat "$@") -else - CONTENT='FIXME' -fi - -pushd ~/dev/libre/website > /dev/null - -[[ -f "$OUT" ]] && { - red "Pastebin named $OUT already exists." - exit 1 -} - -cat < "$OUT" ---- - -title: ${FULL_TITLE} - -date: ${PASTE_DATE} - -layout: post - -lang: en - -ref: $SLUG_TITLE - ---- - -\`\`\`FIXME -$CONTENT -\`\`\` -EOF - -git reset . -git add "$OUT" -git commit -m "$0: Auto-add $OUT" -"$(nix-build -A publishScript)/bin/publish.sh" -open "https://euandre.org/pastebin/$(tr '-' '/' <<< "$PASTE_DATE")/$SLUG_TITLE.html" -git push -git push srht -popd > /dev/null diff --git a/scripts/ad-hoc/post.sh b/scripts/ad-hoc/post.sh deleted file mode 100755 index 25579fa..0000000 --- a/scripts/ad-hoc/post.sh +++ /dev/null @@ -1,120 +0,0 @@ -#!/bin/sh -eu - -# shellcheck source=/dev/null -. "$DOTFILES/bash/colors.sh" - -missing() { - red "Missing argument <${1}>.\n" -} - -usage() { - cat < - - Arguments: - TYPE The type of the article: article, til, slides, podcast, screencast - FULL_TITLE Full title of the pastebin - -Examples: - $0 til 'I just learned this' - $0 article 'My example article title' -EOF -} - -TYPE="${1:-}" -[ -z "$TYPE" ] && { - missing 'TYPE' - usage - exit 2 -} - -case "$TYPE" in - article | til | podcast | screencast) - LAYOUT=post - DIR="_${TYPE}s" - ;; - slides) - LAYOUT=slides - DIR=_slides - ;; - *) - red "Invalid type '$TYPE'" - usage - exit 2 - ;; -esac - -FULL_TITLE="${2:-}" -[ -z "$FULL_TITLE" ] && { - missing 'FULL_TITLE' - usage - exit 2 -} - -# Derived from: -# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 -slugify() { - echo "$1" | \ - tr '[:upper:]' '[:lower:]' | \ - perl -ne 'tr/\000-\177//cd; - s/[^\w\s-]//g; - s/^\s+|\s+$//g; - s/[-\s]+/-/g; - print;' -} - -SLUG_TITLE="$(slugify "$FULL_TITLE")" -PASTE_DATE="$(date -I)" -OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md" - -cd ~/dev/libre/website - -[ -f "$OUT" ] && { - red "Pastebin named $OUT already exists." - exit 1 -} - -if [ "$LAYOUT" = 'slides' ]; then - cat< "$OUT" ---- - -title: $FULL_TITLE - -date: $PASTE_DATE - -layout: $LAYOUT - -lang: en - -ref: $SLUG_TITLE - ---- - ---- - -## Thank you! - -References: - -1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %}) -2. [prose version of this presentation]({% link _articles/$PASTE_DATE-$SLUG_TITLE.md %}) -EOF - "$0" article "$FULL_TITLE" - else - cat < "$OUT" ---- - -title: $FULL_TITLE - -date: $PASTE_DATE - -layout: $LAYOUT - -lang: en - -ref: $SLUG_TITLE - ---- -EOF -fi diff --git a/scripts/ad-hoc/record-my-screen.sh b/scripts/ad-hoc/record-my-screen.sh deleted file mode 100755 index 95094b6..0000000 --- a/scripts/ad-hoc/record-my-screen.sh +++ /dev/null @@ -1,34 +0,0 @@ -#!/bin/sh -eux - -usage() { - red "Missing argument $1.\n" - cat < - - Arguments: - OUTPUT_PATH Path of the final WebM file - -Examples: - Capture the screen and save it in 'output.webm' - record-my-screen.sh output.webm -EOF -} - -OUTPUT_PATH="${1:-}" -[ -z "${OUTPUT_PATH}" ] && { - usage 'OUTPUT_PATH' - exit 2 -} - -SCREEN_RESOLUTION="$(xrandr -q --current | grep '[*]' | awk '{print$1}')" - -ffmpeg \ - -f pulse \ - -i default \ - -f x11grab \ - -s "$SCREEN_RESOLUTION" \ - -i :0 \ - "$OUTPUT_PATH" - -# https://github.com/georgmartius/vid.stab diff --git a/scripts/ad-hoc/repo-update.sh b/scripts/ad-hoc/repo-update.sh deleted file mode 100755 index 65eb6db..0000000 --- a/scripts/ad-hoc/repo-update.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eu - -# shellcheck source=/dev/null -. "${HOME}/.ssh/environment" -cd "${HOME}" -mr -s safeupdate diff --git a/scripts/ad-hoc/report-summary.sh b/scripts/ad-hoc/report-summary.sh deleted file mode 100755 index c21b147..0000000 --- a/scripts/ad-hoc/report-summary.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -eux - -F="/tmp/cron-dbg.summary.$(date -I).euandreh.log" -if grep ^1 "$F"; then - echo 'Some report failed for today:' - grep ^1 "$F" - exit 1 -fi diff --git a/scripts/ad-hoc/rotate-mpris-player.sh b/scripts/ad-hoc/rotate-mpris-player.sh deleted file mode 100755 index 863501e..0000000 --- a/scripts/ad-hoc/rotate-mpris-player.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -mkdir -p "${HOME}/.cache/andreh/" -CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" -AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" -CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" - -pick_first() { - echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" -} - -if [[ "${CURRENT_PLAYER}" = "" ]]; then - pick_first -elif ! echo "${AVAILABLE_PLAYERS}" | grep -q "${CURRENT_PLAYER}"; then - # Unknown $CURRENT_PLAYER, pick anyone - pick_first -else - INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" - LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" - if [[ "${INDEX}" = "${LENGTH}" ]]; then - # Reached the end of the $AVAILABLE_PLAYERS list, wrapping - pick_first - else - # Get the next player instead - echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" - fi -fi diff --git a/scripts/ad-hoc/single-monitor.sh b/scripts/ad-hoc/single-monitor.sh deleted file mode 100755 index 83d0455..0000000 --- a/scripts/ad-hoc/single-monitor.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -eux -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/ad-hoc/three-monitors.sh b/scripts/ad-hoc/three-monitors.sh deleted file mode 100755 index d1ef7c6..0000000 --- a/scripts/ad-hoc/three-monitors.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/scripts/ad-hoc/vlc b/scripts/ad-hoc/vlc deleted file mode 100755 index 8570b53..0000000 --- a/scripts/ad-hoc/vlc +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -eu - -NIX=/run/current-system/sw/bin/vlc -GUIX=/run/current-system/profile/bin/vlc - -if [ -e "$NIX" ]; then - VLC="$NIX" -elif [ -e "$GUIX" ]; then - VLC="$GUIX" -else - echo "Can't guess VLC executable" - exit 1 -fi - -if [ -z "${1:-}" ]; then - "$VLC" -else - "$VLC" "$1" - echo "$1" >> ~/archive/vlc/queue.txt -fi - diff --git a/scripts/ad-hoc/xdg-open b/scripts/ad-hoc/xdg-open deleted file mode 120000 index ce4a72b..0000000 --- a/scripts/ad-hoc/xdg-open +++ /dev/null @@ -1 +0,0 @@ -open \ No newline at end of file diff --git a/scripts/ad-hoc/xmobar-mpris.sh b/scripts/ad-hoc/xmobar-mpris.sh deleted file mode 100755 index a2af8c4..0000000 --- a/scripts/ad-hoc/xmobar-mpris.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -CUR_PATH="${HOME}/.cache/andreh/mpris-player.txt" - -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - -default_status() { - CUR="${1}" - printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" -} - -main() { - CUR="$(cat "${CUR_PATH}")" - if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then - printf "%s\n" "${CUR}" - else - case "${CUR}" in - cmus) - default_status "${CUR}" - ;; - firefox*) - printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" - ;; - vlc) - printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" - ;; - *) - default_status "${CUR}" - ;; - esac - fi -} -export -f main - -mkdir -p "$(dirname "${CUR_PATH}")" -touch "${CUR_PATH}" - -while true -do - main - sleep 1 -done diff --git a/scripts/ad-hoc/xmobar-notmuch.sh b/scripts/ad-hoc/xmobar-notmuch.sh deleted file mode 100755 index f174a8e..0000000 --- a/scripts/ad-hoc/xmobar-notmuch.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -eu - -while true; do - printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" - if acpi -a | grep -q off-line; then - sleep $((60 * 15)) - else - sleep $((60 * 1)) - fi -done diff --git a/scripts/ad-hoc/yt b/scripts/ad-hoc/yt deleted file mode 100755 index 2d8de8d..0000000 --- a/scripts/ad-hoc/yt +++ /dev/null @@ -1,79 +0,0 @@ -#!/bin/sh -eu - -export DEFAULT_PLAYLIST_END=15 -export DEFAULT_INC_STEP=10 -export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" - -download() { - youtube-dl "$1" \ - --download-archive ~/archive/youtube-dl-seen.conf \ - --prefer-free-formats \ - --playlist-end "$2" \ - --write-description \ - --output "$YT_TEMPLATE" -} - -download_user() { - download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -download_channel() { - download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -download_playlist() { - download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -inc_download() { - fn="$1" - id="$2" - step="${3-$DEFAULT_INC_STEP}" - - file="$HOME/.yt-db/$id" - mkdir -p "$HOME/.yt-db" - cat "$file" 2> /dev/null - n_count="$(cat "$file" 2> /dev/null || printf 10)" - n_count_new="$((n_count + step))" - - echo "$n_count_new" > "$file" - - "$fn" "$id" "$n_count" -} - -# Always downloads video, doesn't look at the download-archive - -URL_OR_PATH="${1:-}" -[ -z "${URL_OR_PATH}" ] && { - # shellcheck disable=2016 - echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr - exit 2 -} - -if [ -f "${URL_OR_PATH}" ]; then - echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr - youtube-dl --batch-file "${URL_OR_PATH}" \ - --format best \ - --output "${YT_TEMPLATE}" \ - --write-description \ - 1>&2 - FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --format best \ - --get-filename)" -else - echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr - youtube-dl "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --format best \ - --write-description \ - 1>&2 - FILES="$(youtube-dl "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --format best \ - --get-filename)" -fi - -for f in $FILES; do - vlc "$f" -done diff --git a/scripts/ad-hoc/zero-brightness.sh b/scripts/ad-hoc/zero-brightness.sh deleted file mode 100755 index a748724..0000000 --- a/scripts/ad-hoc/zero-brightness.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -eux - -# base dir for backlight class -BASEDIR='/sys/class/backlight/' - -# get the backlight handler -HANDLER="${BASEDIR}$(ls "${BASEDIR}")" - -# set the new brightness value -echo 0 > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/scripts/brightness.sh b/scripts/brightness.sh new file mode 100755 index 0000000..29dc05b --- /dev/null +++ b/scripts/brightness.sh @@ -0,0 +1,29 @@ +#!/bin/sh -eux + +BRIGHTNESS_DIFF="${1}" + +# base dir for backlight class +BASEDIR='/sys/class/backlight/' + +# get the backlight handler +HANDLER="${BASEDIR}$(ls "${BASEDIR}")" + +# get current brightness +OLD_BRIGHTNESS="$(cat "${HANDLER}/brightness")" + +# get max brightness +MAX_BRIGHTNESS="$(cat "${HANDLER}/max_brightness")" + +# get current brightness % +OLD_BRIGHTNESS_P=$(( 100 * "${OLD_BRIGHTNESS}" / "${MAX_BRIGHTNESS}" )) + +# calculate new brightness %, bounded by 0 100 range +NEW_BRIGHTNESS_P=$(("${OLD_BRIGHTNESS_P}" + "${BRIGHTNESS_DIFF}")) +NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" > 100 ? 100 : "${NEW_BRIGHTNESS_P}")) +NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) + +# calculate new brightness value +NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) + +# set the new brightness value +echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/scripts/c b/scripts/c new file mode 100755 index 0000000..9b22062 --- /dev/null +++ b/scripts/c @@ -0,0 +1,3 @@ +#!/bin/sh -eu + +tmux send-keys -R \; clear-history diff --git a/scripts/copy-public-key.sh b/scripts/copy-public-key.sh new file mode 100755 index 0000000..b864b4b --- /dev/null +++ b/scripts/copy-public-key.sh @@ -0,0 +1,23 @@ +#!/bin/sh -eux + +FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' +FILE="$(mktemp)" + +gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" + +# Update keyserver +# gpg --send-keys "${FINGERPRINT}" + +# Add to website +cp "${FILE}" ~/dev/libre/website/public-key.txt + +# Update in euandreh-guix-channel +cd ~/dev/libre/euandreh-guix-channel/ +git checkout keyring +cp "${FILE}" euandreh.key +cd - + +# Update in github: can't be done + +# Clean up +rm "${FILE}" diff --git a/scripts/cron/annex-job.sh b/scripts/cron/annex-job.sh deleted file mode 100755 index 3d03297..0000000 --- a/scripts/cron/annex-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s annex\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for annex-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/annex.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/backup-job.sh b/scripts/cron/backup-job.sh deleted file mode 100755 index ef9be7a..0000000 --- a/scripts/cron/backup-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for backup-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/backup.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/copy-box-backups-job.sh b/scripts/cron/copy-box-backups-job.sh deleted file mode 100755 index da7e11d..0000000 --- a/scripts/cron/copy-box-backups-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s copy-box-backups\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for copy-box-backups-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/copy-box-backups.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/deliver-my-enqueued-emails.sh b/scripts/cron/deliver-my-enqueued-emails.sh deleted file mode 100755 index 9dadf43..0000000 --- a/scripts/cron/deliver-my-enqueued-emails.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -eux - -echo "Starting $(date -Is)" -find ~/mbsync/my-queued-emails/ -type f -exec sh -c '$HOME/annex/bin/misc/mail/dispatch-email.sh "$1" && trash "$1"' _ {} \; -echo "Done $(date -Is)" diff --git a/scripts/cron/deliver-queued-mail.sh b/scripts/cron/deliver-queued-mail.sh deleted file mode 100755 index 0dde65a..0000000 --- a/scripts/cron/deliver-queued-mail.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -exec &> /dev/stdout -echo "Starting $(date -Is)" - -if [[ "$(find ~/mbsync/queued-email/ -type f -not -name 'index' | wc -l)" = 0 ]]; then - echo 'No queued emails found. noop' -else - # https://github.com/syl20bnr/spacemacs/issues/4504#issuecomment-232973179 - emacs -batch \ - -l ~/.emacs.d/init.el \ - -l ~/annex/bin/misc/mail/notmuch.el \ - --eval "(run-hooks 'emacs-startup-hook)" \ - --eval '(smtpmail-send-queued-mail)' -fi - -echo "Finishing: $(date -Is)" diff --git a/scripts/cron/elfeed-job.sh b/scripts/cron/elfeed-job.sh deleted file mode 100755 index c0c3ac1..0000000 --- a/scripts/cron/elfeed-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s elfeed\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for elfeed-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/elfeed.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/mbox-archive-job.sh b/scripts/cron/mbox-archive-job.sh deleted file mode 100755 index 6474a1d..0000000 --- a/scripts/cron/mbox-archive-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s mbox-archive\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for mbox-archive-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/mbox-archive.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/mr-remotes-backup-job.sh b/scripts/cron/mr-remotes-backup-job.sh deleted file mode 100755 index d2cca9b..0000000 --- a/scripts/cron/mr-remotes-backup-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s mr-remotes-backup\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for mr-remotes-backup-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/mr-remotes-backup.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/notmuch-dump-job.sh b/scripts/cron/notmuch-dump-job.sh deleted file mode 100755 index 1c32eb6..0000000 --- a/scripts/cron/notmuch-dump-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s notmuch-dump\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for notmuch-dump-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/notmuch-dump.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/repo-update-job.sh b/scripts/cron/repo-update-job.sh deleted file mode 100755 index 8c7eaa0..0000000 --- a/scripts/cron/repo-update-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s repo-update\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for repo-update-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/repo-update.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/report-summary-job.sh b/scripts/cron/report-summary-job.sh deleted file mode 100755 index 9ee4fbf..0000000 --- a/scripts/cron/report-summary-job.sh +++ /dev/null @@ -1,31 +0,0 @@ -#!/bin/sh -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s report-summary\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for report-summary-job.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/scripts/ad-hoc/report-summary.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/scripts/cron/sync-mail.sh b/scripts/cron/sync-mail.sh deleted file mode 100755 index 2726cf9..0000000 --- a/scripts/cron/sync-mail.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -eu - -echo "Starting: $(date -Is)" - -FAST_RUN="${1:-}" - -if [ "${FAST_RUN}" = "--fast" ]; then - echo 'Doing fast run' - mbsync EuAndreh - notmuch new -else - echo 'Doing normal (slow) run' - notmuch new - mbsync EuAndreh & - mbsync Nubank & - mbsync Gmail & - wait - notmuch new -fi - -echo "Finishing: $(date -Is)" diff --git a/scripts/dmenu-emoji.sh b/scripts/dmenu-emoji.sh new file mode 100755 index 0000000..2177ac8 --- /dev/null +++ b/scripts/dmenu-emoji.sh @@ -0,0 +1,13 @@ +#!/bin/sh -eux + +# Derived from: +# https://github.com/porras/dmenu-emoji + +LIST="$HOME/dev/libre/dotfiles/scripts/emoji-list.txt" + +dmenu \ + -l 20 \ + -i \ + -p 'Emoji: ' -fn Monospace-18 \ + < "$LIST" \ + | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip diff --git a/scripts/dmenu-vlc.sh b/scripts/dmenu-vlc.sh new file mode 100755 index 0000000..c42e26f --- /dev/null +++ b/scripts/dmenu-vlc.sh @@ -0,0 +1,9 @@ +#!/bin/sh -eu + +URL="$(xsel -bo)" + +res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" + +if [ "$res" = 'yes' ]; then + vlc "$URL" +fi diff --git a/scripts/emoji-list.txt b/scripts/emoji-list.txt new file mode 100755 index 0000000..06b5a58 --- /dev/null +++ b/scripts/emoji-list.txt @@ -0,0 +1,1432 @@ +grinning face 😀 +smiling face with open mouth 😃 +smiling face with open mouth & smiling eyes 😄 +grinning face with smiling eyes 😁 +smiling face with open mouth & closed eyes 😆 +smiling face with open mouth & cold sweat 😅 +face with tears of joy 😂 +rolling on the floor laughing 🤣 +smiling face ☺️ +smiling face with smiling eyes 😊 +smiling face with halo 😇 +slightly smiling face 🙂 +upside-down face 🙃 +winking face 😉 +relieved face 😌 +smiling face with heart-eyes 😍 +face blowing a kiss 😘 +kissing face 😗 +kissing face with smiling eyes 😙 +kissing face with closed eyes 😚 +face savouring delicious food 😋 +face with stuck-out tongue & winking eye 😜 +face with stuck-out tongue & closed eyes 😝 +face with stuck-out tongue 😛 +money-mouth face 🤑 +hugging face 🤗 +nerd face 🤓 +smiling face with sunglasses 😎 +clown face 🤡 +cowboy hat face 🤠 +smirking face 😏 +unamused face 😒 +disappointed face 😞 +pensive face 😔 +worried face 😟 +confused face 😕 +slightly frowning face 🙁 +frowning face ☹️ +persevering face 😣 +confounded face 😖 +tired face 😫 +weary face 😩 +face with steam from nose 😤 +angry face 😠 +pouting face 😡 +face without mouth 😶 +neutral face 😐 +expressionless face 😑 +hushed face 😯 +frowning face with open mouth 😦 +anguished face 😧 +face with open mouth 😮 +astonished face 😲 +dizzy face 😵 +flushed face 😳 +face screaming in fear 😱 +fearful face 😨 +face with open mouth & cold sweat 😰 +crying face 😢 +disappointed but relieved face 😥 +drooling face 🤤 +loudly crying face 😭 +face with cold sweat 😓 +sleepy face 😪 +sleeping face 😴 +face with rolling eyes 🙄 +thinking face 🤔 +lying face 🤥 +grimacing face 😬 +zipper-mouth face 🤐 +nauseated face 🤢 +sneezing face 🤧 +face with medical mask 😷 +face with thermometer 🤒 +face with head-bandage 🤕 +smiling face with horns 😈 +angry face with horns 👿 +ogre 👹 +goblin 👺 +pile of poo 💩 +ghost 👻 +skull 💀 +skull and crossbones ☠️ +alien 👽 +alien monster 👾 +robot face 🤖 +jack-o-lantern 🎃 +smiling cat face with open mouth 😺 +grinning cat face with smiling eyes 😸 +cat face with tears of joy 😹 +smiling cat face with heart-eyes 😻 +cat face with wry smile 😼 +kissing cat face with closed eyes 😽 +weary cat face 🙀 +crying cat face 😿 +pouting cat face 😾 +open hands 👐 +raising hands 🙌 +clapping hands 👏 +folded hands 🙏 +handshake 🤝 +thumbs up 👍 +thumbs down 👎 +oncoming fist 👊 +raised fist ✊ +left-facing fist 🤛 +right-facing fist 🤜 +crossed fingers 🤞 +victory hand ✌️ +sign of the horns 🤘 +OK hand 👌 +backhand index pointing left 👈 +backhand index pointing right 👉 +backhand index pointing up 👆 +backhand index pointing down 👇 +index pointing up ☝️ +raised hand ✋ +raised back of hand 🤚 +raised hand with fingers splayed 🖐 +vulcan salute 🖖 +waving hand 👋 +call me hand 🤙 +flexed biceps 💪 +middle finger 🖕 +writing hand ✍️ +selfie 🤳 +nail polish 💅 +ring 💍 +lipstick 💄 +kiss mark 💋 +mouth 👄 +tongue 👅 +ear 👂 +nose 👃 +footprints 👣 +eye 👁 +eyes 👀 +speaking head 🗣 +bust in silhouette 👤 +busts in silhouette 👥 +baby 👶 +boy 👦 +girl 👧 +man 👨 +woman 👩 +blond-haired woman 👱‍♀ +blond-haired person 👱 +old man 👴 +old woman 👵 +man with Chinese cap 👲 +woman wearing turban 👳‍♀ +person wearing turban 👳 +woman police officer 👮‍♀ +police officer 👮 +woman construction worker 👷‍♀ +construction worker 👷 +woman guard 💂‍♀ +guard 💂 +woman detective 🕵️‍♀️ +detective 🕵 +woman health worker 👩‍⚕ +man health worker 👨‍⚕ +woman farmer 👩‍🌾 +man farmer 👨‍🌾 +woman cook 👩‍🍳 +man cook 👨‍🍳 +woman student 👩‍🎓 +man student 👨‍🎓 +woman singer 👩‍🎤 +man singer 👨‍🎤 +woman teacher 👩‍🏫 +man teacher 👨‍🏫 +woman factory worker 👩‍🏭 +man factory worker 👨‍🏭 +woman technologist 👩‍💻 +man technologist 👨‍💻 +woman office worker 👩‍💼 +man office worker 👨‍💼 +woman mechanic 👩‍🔧 +man mechanic 👨‍🔧 +woman scientist 👩‍🔬 +man scientist 👨‍🔬 +woman artist 👩‍🎨 +man artist 👨‍🎨 +woman firefighter 👩‍🚒 +man firefighter 👨‍🚒 +woman pilot 👩‍✈ +man pilot 👨‍✈ +woman astronaut 👩‍🚀 +man astronaut 👨‍🚀 +woman judge 👩‍⚖ +man judge 👨‍⚖ +Mrs. Claus 🤶 +Santa Claus 🎅 +princess 👸 +prince 🤴 +bride with veil 👰 +man in tuxedo 🤵 +baby angel 👼 +pregnant woman 🤰 +woman bowing 🙇‍♀ +person bowing 🙇 +person tipping hand 💁 +man tipping hand 💁‍♂ +person gesturing NO 🙅 +man gesturing NO 🙅‍♂ +person gesturing OK 🙆 +man gesturing OK 🙆‍♂ +person raising hand 🙋 +man raising hand 🙋‍♂ +woman facepalming 🤦‍♀ +man facepalming 🤦‍♂ +woman shrugging 🤷‍♀ +man shrugging 🤷‍♂ +person pouting 🙎 +man pouting 🙎‍♂ +person frowning 🙍 +man frowning 🙍‍♂ +person getting haircut 💇 +man getting haircut 💇‍♂ +person getting massage 💆 +man getting massage 💆‍♂ +man in business suit levitating 🕴 +woman dancing 💃 +man dancing 🕺 +people with bunny ears partying 👯 +men with bunny ears partying 👯‍♂ +woman walking 🚶‍♀ +person walking 🚶 +woman running 🏃‍♀ +person running 🏃 +man and woman holding hands 👫 +two women holding hands 👭 +two men holding hands 👬 +couple with heart 💑 +couple with heart: woman woman 👩‍❤️‍👩 +couple with heart: man man 👨‍❤️‍👨 +kiss 💏 +kiss: woman woman 👩‍❤️‍💋‍👩 +kiss: man man 👨‍❤️‍💋‍👨 +family 👪 +family: man woman girl 👨‍👩‍👧 +family: man woman girl boy 👨‍👩‍👧‍👦 +family: man woman boy boy 👨‍👩‍👦‍👦 +family: man woman girl girl 👨‍👩‍👧‍👧 +family: woman woman boy 👩‍👩‍👦 +family: woman woman girl 👩‍👩‍👧 +family: woman woman girl boy 👩‍👩‍👧‍👦 +family: woman woman boy boy 👩‍👩‍👦‍👦 +family: woman woman girl girl 👩‍👩‍👧‍👧 +family: man man boy 👨‍👨‍👦 +family: man man girl 👨‍👨‍👧 +family: man man girl boy 👨‍👨‍👧‍👦 +family: man man boy boy 👨‍👨‍👦‍👦 +family: man man girl girl 👨‍👨‍👧‍👧 +family: woman boy 👩‍👦 +family: woman girl 👩‍👧 +family: woman girl boy 👩‍👧‍👦 +family: woman boy boy 👩‍👦‍👦 +family: woman girl girl 👩‍👧‍👧 +family: man boy 👨‍👦 +family: man girl 👨‍👧 +family: man girl boy 👨‍👧‍👦 +family: man boy boy 👨‍👦‍👦 +family: man girl girl 👨‍👧‍👧 +woman’s clothes 👚 +t-shirt 👕 +jeans 👖 +necktie 👔 +dress 👗 +bikini 👙 +kimono 👘 +high-heeled shoe 👠 +woman’s sandal 👡 +woman’s boot 👢 +man’s shoe 👞 +running shoe 👟 +woman’s hat 👒 +top hat 🎩 +graduation cap 🎓 +crown 👑 +rescue worker’s helmet ⛑ +school backpack 🎒 +clutch bag 👝 +purse 👛 +handbag 👜 +briefcase 💼 +glasses 👓 +sunglasses 🕶 +closed umbrella 🌂 +umbrella ☂️ +dog face 🐶 +cat face 🐱 +mouse face 🐭 +hamster face 🐹 +rabbit face 🐰 +fox face 🦊 +bear face 🐻 +panda face 🐼 +koala 🐨 +tiger face 🐯 +lion face 🦁 +cow face 🐮 +pig face 🐷 +pig nose 🐽 +frog face 🐸 +monkey face 🐵 +see-no-evil monkey 🙈 +hear-no-evil monkey 🙉 +speak-no-evil monkey 🙊 +monkey 🐒 +chicken 🐔 +penguin 🐧 +bird 🐦 +baby chick 🐤 +hatching chick 🐣 +front-facing baby chick 🐥 +duck 🦆 +eagle 🦅 +owl 🦉 +bat 🦇 +wolf face 🐺 +boar 🐗 +horse face 🐴 +unicorn face 🦄 +honeybee 🐝 +bug 🐛 +butterfly 🦋 +snail 🐌 +spiral shell 🐚 +lady beetle 🐞 +ant 🐜 +spider 🕷 +spider web 🕸 +turtle 🐢 +snake 🐍 +lizard 🦎 +scorpion 🦂 +crab 🦀 +squid 🦑 +octopus 🐙 +shrimp 🦐 +tropical fish 🐠 +fish 🐟 +blowfish 🐡 +dolphin 🐬 +shark 🦈 +spouting whale 🐳 +whale 🐋 +crocodile 🐊 +leopard 🐆 +tiger 🐅 +water buffalo 🐃 +ox 🐂 +cow 🐄 +deer 🦌 +camel 🐪 +two-hump camel 🐫 +elephant 🐘 +rhinoceros 🦏 +gorilla 🦍 +horse 🐎 +pig 🐖 +goat 🐐 +ram 🐏 +sheep 🐑 +dog 🐕 +poodle 🐩 +cat 🐈 +rooster 🐓 +turkey 🦃 +dove 🕊 +rabbit 🐇 +mouse 🐁 +rat 🐀 +chipmunk 🐿 +paw prints 🐾 +dragon 🐉 +dragon face 🐲 +cactus 🌵 +Christmas tree 🎄 +evergreen tree 🌲 +deciduous tree 🌳 +palm tree 🌴 +seedling 🌱 +herb 🌿 +shamrock ☘️ +four leaf clover 🍀 +pine decoration 🎍 +tanabata tree 🎋 +leaf fluttering in wind 🍃 +fallen leaf 🍂 +maple leaf 🍁 +mushroom 🍄 +sheaf of rice 🌾 +bouquet 💐 +tulip 🌷 +rose 🌹 +wilted flower 🥀 +sunflower 🌻 +blossom 🌼 +cherry blossom 🌸 +hibiscus 🌺 +globe showing Americas 🌎 +globe showing Europe-Africa 🌍 +globe showing Asia-Australia 🌏 +full moon 🌕 +waning gibbous moon 🌖 +last quarter moon 🌗 +waning crescent moon 🌘 +new moon 🌑 +waxing crescent moon 🌒 +first quarter moon 🌓 +waxing gibbous moon 🌔 +new moon face 🌚 +full moon with face 🌝 +sun with face 🌞 +first quarter moon with face 🌛 +last quarter moon with face 🌜 +crescent moon 🌙 +dizzy 💫 +white medium star ⭐️ +glowing star 🌟 +sparkles ✨ +high voltage ⚡️ +fire 🔥 +collision 💥 +comet ☄ +sun ☀️ +sun behind small cloud 🌤 +sun behind cloud ⛅️ +sun behind large cloud 🌥 +sun behind rain cloud 🌦 +rainbow 🌈 +cloud ☁️ +cloud with rain 🌧 +cloud with lightning and rain ⛈ +cloud with lightning 🌩 +cloud with snow 🌨 +snowman ☃️ +snowman without snow ⛄️ +snowflake ❄️ +wind face 🌬 +dashing away 💨 +tornado 🌪 +fog 🌫 +water wave 🌊 +droplet 💧 +sweat droplets 💦 +umbrella with rain drops ☔️ +green apple 🍏 +red apple 🍎 +pear 🍐 +tangerine 🍊 +lemon 🍋 +banana 🍌 +watermelon 🍉 +grapes 🍇 +strawberry 🍓 +melon 🍈 +cherries 🍒 +peach 🍑 +pineapple 🍍 +kiwi fruit 🥝 +avocado 🥑 +tomato 🍅 +eggplant 🍆 +cucumber 🥒 +carrot 🥕 +ear of corn 🌽 +hot pepper 🌶 +potato 🥔 +roasted sweet potato 🍠 +chestnut 🌰 +peanuts 🥜 +honey pot 🍯 +croissant 🥐 +bread 🍞 +baguette bread 🥖 +cheese wedge 🧀 +egg 🥚 +cooking 🍳 +bacon 🥓 +pancakes 🥞 +fried shrimp 🍤 +poultry leg 🍗 +meat on bone 🍖 +pizza 🍕 +hot dog 🌭 +hamburger 🍔 +french fries 🍟 +stuffed flatbread 🥙 +taco 🌮 +burrito 🌯 +green salad 🥗 +shallow pan of food 🥘 +spaghetti 🍝 +steaming bowl 🍜 +pot of food 🍲 +fish cake with swirl 🍥 +sushi 🍣 +bento box 🍱 +curry rice 🍛 +cooked rice 🍚 +rice ball 🍙 +rice cracker 🍘 +oden 🍢 +dango 🍡 +shaved ice 🍧 +ice cream 🍨 +soft ice cream 🍦 +shortcake 🍰 +birthday cake 🎂 +custard 🍮 +lollipop 🍭 +candy 🍬 +chocolate bar 🍫 +popcorn 🍿 +doughnut 🍩 +cookie 🍪 +glass of milk 🥛 +baby bottle 🍼 +hot beverage ☕️ +teacup without handle 🍵 +sake 🍶 +beer mug 🍺 +clinking beer mugs 🍻 +clinking glasses 🥂 +wine glass 🍷 +tumbler glass 🥃 +cocktail glass 🍸 +tropical drink 🍹 +bottle with popping cork 🍾 +spoon 🥄 +fork and knife 🍴 +fork and knife with plate 🍽 +soccer ball ⚽️ +basketball 🏀 +american football 🏈 +baseball ⚾️ +tennis 🎾 +volleyball 🏐 +rugby football 🏉 +pool 8 ball 🎱 +ping pong 🏓 +badminton 🏸 +goal net 🥅 +ice hockey 🏒 +field hockey 🏑 +cricket 🏏 +flag in hole ⛳️ +bow and arrow 🏹 +fishing pole 🎣 +boxing glove 🥊 +martial arts uniform 🥋 +ice skate ⛸ +skis 🎿 +skier ⛷ +snowboarder 🏂 +woman lifting weights 🏋️‍♀️ +person lifting weights 🏋 +person fencing 🤺 +women wrestling 🤼‍♀ +men wrestling 🤼‍♂ +woman cartwheeling 🤸‍♀ +man cartwheeling 🤸‍♂ +woman bouncing ball ⛹️‍♀️ +person bouncing ball ⛹ +woman playing handball 🤾‍♀ +man playing handball 🤾‍♂ +woman golfing 🏌️‍♀️ +person golfing 🏌 +woman surfing 🏄‍♀ +person surfing 🏄 +woman swimming 🏊‍♀ +person swimming 🏊 +woman playing water polo 🤽‍♀ +man playing water polo 🤽‍♂ +woman rowing boat 🚣‍♀ +person rowing boat 🚣 +horse racing 🏇 +woman biking 🚴‍♀ +person biking 🚴 +woman mountain biking 🚵‍♀ +person mountain biking 🚵 +running shirt 🎽 +sports medal 🏅 +military medal 🎖 +1st place medal 🥇 +2nd place medal 🥈 +3rd place medal 🥉 +trophy 🏆 +rosette 🏵 +reminder ribbon 🎗 +ticket 🎫 +admission tickets 🎟 +circus tent 🎪 +woman juggling 🤹‍♀ +man juggling 🤹‍♂ +performing arts 🎭 +artist palette 🎨 +clapper board 🎬 +microphone 🎤 +headphone 🎧 +musical score 🎼 +musical keyboard 🎹 +drum 🥁 +saxophone 🎷 +trumpet 🎺 +guitar 🎸 +violin 🎻 +game die 🎲 +direct hit 🎯 +bowling 🎳 +video game 🎮 +slot machine 🎰 +automobile 🚗 +taxi 🚕 +sport utility vehicle 🚙 +bus 🚌 +trolleybus 🚎 +racing car 🏎 +police car 🚓 +ambulance 🚑 +fire engine 🚒 +minibus 🚐 +delivery truck 🚚 +articulated lorry 🚛 +tractor 🚜 +kick scooter 🛴 +bicycle 🚲 +motor scooter 🛵 +motorcycle 🏍 +police car light 🚨 +oncoming police car 🚔 +oncoming bus 🚍 +oncoming automobile 🚘 +oncoming taxi 🚖 +aerial tramway 🚡 +mountain cableway 🚠 +suspension railway 🚟 +railway car 🚃 +tram car 🚋 +mountain railway 🚞 +monorail 🚝 +high-speed train 🚄 +high-speed train with bullet nose 🚅 +light rail 🚈 +locomotive 🚂 +train 🚆 +metro 🚇 +tram 🚊 +station 🚉 +helicopter 🚁 +small airplane 🛩 +airplane ✈️ +airplane departure 🛫 +airplane arrival 🛬 +rocket 🚀 +satellite 🛰 +seat 💺 +canoe 🛶 +sailboat ⛵️ +motor boat 🛥 +speedboat 🚤 +passenger ship 🛳 +ferry ⛴ +ship 🚢 +anchor ⚓️ +construction 🚧 +fuel pump ⛽️ +bus stop 🚏 +vertical traffic light 🚦 +horizontal traffic light 🚥 +world map 🗺 +moai 🗿 +Statue of Liberty 🗽 +fountain ⛲️ +Tokyo tower 🗼 +castle 🏰 +Japanese castle 🏯 +stadium 🏟 +ferris wheel 🎡 +roller coaster 🎢 +carousel horse 🎠 +umbrella on ground ⛱ +beach with umbrella 🏖 +desert island 🏝 +mountain ⛰ +snow-capped mountain 🏔 +mount fuji 🗻 +volcano 🌋 +desert 🏜 +camping 🏕 +tent ⛺️ +railway track 🛤 +motorway 🛣 +building construction 🏗 +factory 🏭 +house 🏠 +house with garden 🏡 +house 🏘 +derelict house 🏚 +office building 🏢 +department store 🏬 +Japanese post office 🏣 +post office 🏤 +hospital 🏥 +bank 🏦 +hotel 🏨 +convenience store 🏪 +school 🏫 +love hotel 🏩 +wedding 💒 +classical building 🏛 +church ⛪️ +mosque 🕌 +synagogue 🕍 +kaaba 🕋 +shinto shrine ⛩ +map of Japan 🗾 +moon viewing ceremony 🎑 +national park 🏞 +sunrise 🌅 +sunrise over mountains 🌄 +shooting star 🌠 +sparkler 🎇 +fireworks 🎆 +sunset 🌇 +cityscape at dusk 🌆 +cityscape 🏙 +night with stars 🌃 +milky way 🌌 +bridge at night 🌉 +foggy 🌁 +watch ⌚️ +mobile phone 📱 +mobile phone with arrow 📲 +laptop computer 💻 +keyboard ⌨️ +desktop computer 🖥 +printer 🖨 +computer mouse 🖱 +trackball 🖲 +joystick 🕹 +clamp 🗜 +computer disk 💽 +floppy disk 💾 +optical disk 💿 +dvd 📀 +videocassette 📼 +camera 📷 +camera with flash 📸 +video camera 📹 +movie camera 🎥 +film projector 📽 +film frames 🎞 +telephone receiver 📞 +telephone ☎️ +pager 📟 +fax machine 📠 +television 📺 +radio 📻 +studio microphone 🎙 +level slider 🎚 +control knobs 🎛 +stopwatch ⏱ +timer clock ⏲ +alarm clock ⏰ +mantelpiece clock 🕰 +hourglass ⌛️ +hourglass with flowing sand ⏳ +satellite antenna 📡 +battery 🔋 +electric plug 🔌 +light bulb 💡 +flashlight 🔦 +candle 🕯 +wastebasket 🗑 +oil drum 🛢 +money with wings 💸 +dollar banknote 💵 +yen banknote 💴 +euro banknote 💶 +pound banknote 💷 +money bag 💰 +credit card 💳 +gem stone 💎 +balance scale ⚖️ +wrench 🔧 +hammer 🔨 +hammer and pick ⚒ +hammer and wrench 🛠 +pick ⛏ +nut and bolt 🔩 +gear ⚙️ +chains ⛓ +pistol 🔫 +bomb 💣 +kitchen knife 🔪 +dagger 🗡 +crossed swords ⚔️ +shield 🛡 +cigarette 🚬 +coffin ⚰️ +funeral urn ⚱️ +amphora 🏺 +crystal ball 🔮 +prayer beads 📿 +barber pole 💈 +alembic ⚗️ +telescope 🔭 +microscope 🔬 +hole 🕳 +pill 💊 +syringe 💉 +thermometer 🌡 +toilet 🚽 +potable water 🚰 +shower 🚿 +bathtub 🛁 +person taking bath 🛀 +bellhop bell 🛎 +key 🔑 +old key 🗝 +door 🚪 +couch and lamp 🛋 +bed 🛏 +person in bed 🛌 +framed picture 🖼 +shopping bags 🛍 +shopping cart 🛒 +wrapped gift 🎁 +balloon 🎈 +carp streamer 🎏 +ribbon 🎀 +confetti ball 🎊 +party popper 🎉 +Japanese dolls 🎎 +red paper lantern 🏮 +wind chime 🎐 +envelope ✉️ +envelope with arrow 📩 +incoming envelope 📨 +e-mail 📧 +love letter 💌 +inbox tray 📥 +outbox tray 📤 +package 📦 +label 🏷 +closed mailbox with lowered flag 📪 +closed mailbox with raised flag 📫 +open mailbox with raised flag 📬 +open mailbox with lowered flag 📭 +postbox 📮 +postal horn 📯 +scroll 📜 +page with curl 📃 +page facing up 📄 +bookmark tabs 📑 +bar chart 📊 +chart increasing 📈 +chart decreasing 📉 +spiral notepad 🗒 +spiral calendar 🗓 +tear-off calendar 📆 +calendar 📅 +card index 📇 +card file box 🗃 +ballot box with ballot 🗳 +file cabinet 🗄 +clipboard 📋 +file folder 📁 +open file folder 📂 +card index dividers 🗂 +rolled-up newspaper 🗞 +newspaper 📰 +notebook 📓 +notebook with decorative cover 📔 +ledger 📒 +closed book 📕 +green book 📗 +blue book 📘 +orange book 📙 +books 📚 +open book 📖 +bookmark 🔖 +link 🔗 +paperclip 📎 +linked paperclips 🖇 +triangular ruler 📐 +straight ruler 📏 +pushpin 📌 +round pushpin 📍 +scissors ✂️ +pen 🖊 +fountain pen 🖋 +black nib ✒️ +paintbrush 🖌 +crayon 🖍 +memo 📝 +pencil ✏️ +left-pointing magnifying glass 🔍 +right-pointing magnifying glass 🔎 +locked with pen 🔏 +locked with key 🔐 +locked 🔒 +unlocked 🔓 +red heart ❤️ +yellow heart 💛 +green heart 💚 +blue heart 💙 +purple heart 💜 +black heart 🖤 +broken heart 💔 +heavy heart exclamation ❣️ +two hearts 💕 +revolving hearts 💞 +beating heart 💓 +growing heart 💗 +sparkling heart 💖 +heart with arrow 💘 +heart with ribbon 💝 +heart decoration 💟 +peace symbol ☮️ +latin cross ✝️ +star and crescent ☪️ +om 🕉 +wheel of dharma ☸️ +star of David ✡️ +dotted six-pointed star 🔯 +menorah 🕎 +yin yang ☯️ +orthodox cross ☦️ +place of worship 🛐 +Ophiuchus ⛎ +Aries ♈️ +Taurus ♉️ +Gemini ♊️ +Cancer ♋️ +Leo ♌️ +Virgo ♍️ +Libra ♎️ +Scorpius ♏️ +Sagittarius ♐️ +Capricorn ♑️ +Aquarius ♒️ +Pisces ♓️ +ID button 🆔 +atom symbol ⚛️ +Japanese “acceptable” button 🉑 +radioactive ☢️ +biohazard ☣️ +mobile phone off 📴 +vibration mode 📳 +Japanese “not free of charge” button 🈶 +Japanese “free of charge” button 🈚️ +Japanese “application” button 🈸 +Japanese “open for business” button 🈺 +Japanese “monthly amount” button 🈷️ +eight-pointed star ✴️ +VS button 🆚 +white flower 💮 +Japanese “bargain” button 🉐 +Japanese “secret” button ㊙️ +Japanese “congratulations” button ㊗️ +Japanese “passing grade” button 🈴 +Japanese “no vacancy” button 🈵 +Japanese “discount” button 🈹 +Japanese “prohibited” button 🈲 +A button (blood type) 🅰️ +B button (blood type) 🅱️ +AB button (blood type) 🆎 +CL button 🆑 +O button (blood type) 🅾️ +SOS button 🆘 +cross mark ❌ +heavy large circle ⭕️ +stop sign 🛑 +no entry ⛔️ +name badge 📛 +prohibited 🚫 +hundred points 💯 +anger symbol 💢 +hot springs ♨️ +no pedestrians 🚷 +no littering 🚯 +no bicycles 🚳 +non-potable water 🚱 +no one under eighteen 🔞 +no mobile phones 📵 +no smoking 🚭 +exclamation mark ❗️ +white exclamation mark ❕ +question mark ❓ +white question mark ❔ +double exclamation mark ‼️ +exclamation question mark ⁉️ +dim button 🔅 +bright button 🔆 +part alternation mark 〽️ +warning ⚠️ +children crossing 🚸 +trident emblem 🔱 +fleur-de-lis ⚜️ +Japanese symbol for beginner 🔰 +recycling symbol ♻️ +white heavy check mark ✅ +Japanese “reserved” button 🈯️ +chart increasing with yen 💹 +sparkle ❇️ +eight-spoked asterisk ✳️ +cross mark button ❎ +globe with meridians 🌐 +diamond with a dot 💠 +circled M Ⓜ️ +cyclone 🌀 +zzz 💤 +ATM sign 🏧 +water closet 🚾 +wheelchair symbol ♿️ +P button 🅿️ +Japanese “vacancy” button 🈳 +Japanese “service charge” button 🈂️ +passport control 🛂 +customs 🛃 +baggage claim 🛄 +left luggage 🛅 +men’s room 🚹 +women’s room 🚺 +baby symbol 🚼 +restroom 🚻 +litter in bin sign 🚮 +cinema 🎦 +antenna bars 📶 +Japanese “here” button 🈁 +input symbols 🔣 +information ℹ️ +input latin letters 🔤 +input latin lowercase 🔡 +input latin uppercase 🔠 +NG button 🆖 +OK button 🆗 +UP! button 🆙 +COOL button 🆒 +NEW button 🆕 +FREE button 🆓 +keycap: 0 0️⃣ +keycap: 1 1️⃣ +keycap: 2 2️⃣ +keycap: 3 3️⃣ +keycap: 4 4️⃣ +keycap: 5 5️⃣ +keycap: 6 6️⃣ +keycap: 7 7️⃣ +keycap: 8 8️⃣ +keycap: 9 9️⃣ +keycap 10 🔟 +input numbers 🔢 +keycap: # #️⃣ +keycap: * *️⃣ +play button ▶️ +pause button ⏸ +play or pause button ⏯ +stop button ⏹ +record button ⏺ +next track button ⏭ +last track button ⏮ +fast-forward button ⏩ +fast reverse button ⏪ +fast up button ⏫ +fast down button ⏬ +reverse button ◀️ +up button 🔼 +down button 🔽 +right arrow ➡️ +left arrow ⬅️ +up arrow ⬆️ +down arrow ⬇️ +up-right arrow ↗️ +down-right arrow ↘️ +down-left arrow ↙️ +up-left arrow ↖️ +up-down arrow ↕️ +left-right arrow ↔️ +left arrow curving right ↪️ +right arrow curving left ↩️ +right arrow curving up ⤴️ +right arrow curving down ⤵️ +shuffle tracks button 🔀 +repeat button 🔁 +repeat single button 🔂 +anticlockwise arrows button 🔄 +clockwise vertical arrows 🔃 +musical note 🎵 +musical notes 🎶 +heavy plus sign ➕ +heavy minus sign ➖ +heavy division sign ➗ +heavy multiplication x ✖️ +heavy dollar sign 💲 +currency exchange 💱 +trade mark ™️ +copyright ©️ +registered ®️ +wavy dash 〰️ +curly loop ➰ +double curly loop ➿ +END arrow 🔚 +BACK arrow 🔙 +ON! arrow 🔛 +TOP arrow 🔝 +SOON arrow 🔜 +heavy check mark ✔️ +ballot box with check ☑️ +radio button 🔘 +white circle ⚪️ +black circle ⚫️ +red circle 🔴 +blue circle 🔵 +red triangle pointed up 🔺 +red triangle pointed down 🔻 +small orange diamond 🔸 +small blue diamond 🔹 +large orange diamond 🔶 +large blue diamond 🔷 +white square button 🔳 +black square button 🔲 +black small square ▪️ +white small square ▫️ +black medium-small square ◾️ +white medium-small square ◽️ +black medium square ◼️ +white medium square ◻️ +black large square ⬛️ +white large square ⬜️ +speaker low volume 🔈 +muted speaker 🔇 +speaker medium volume 🔉 +speaker high volume 🔊 +bell 🔔 +bell with slash 🔕 +megaphone 📣 +loudspeaker 📢 +eye in speech bubble 👁‍🗨 +speech balloon 💬 +thought balloon 💭 +right anger bubble 🗯 +spade suit ♠️ +club suit ♣️ +heart suit ♥️ +diamond suit ♦️ +joker 🃏 +flower playing cards 🎴 +mahjong red dragon 🀄️ +one o’clock 🕐 +two o’clock 🕑 +three o’clock 🕒 +four o’clock 🕓 +five o’clock 🕔 +six o’clock 🕕 +seven o’clock 🕖 +eight o’clock 🕗 +nine o’clock 🕘 +ten o’clock 🕙 +eleven o’clock 🕚 +twelve o’clock 🕛 +one-thirty 🕜 +two-thirty 🕝 +three-thirty 🕞 +four-thirty 🕟 +five-thirty 🕠 +six-thirty 🕡 +seven-thirty 🕢 +eight-thirty 🕣 +nine-thirty 🕤 +ten-thirty 🕥 +eleven-thirty 🕦 +twelve-thirty 🕧 +white flag 🏳️ +black flag 🏴 +chequered flag 🏁 +triangular flag 🚩 +rainbow flag 🏳️‍🌈 +Afghanistan 🇦🇫 +Åland Islands 🇦🇽 +Albania 🇦🇱 +Algeria 🇩🇿 +American Samoa 🇦🇸 +Andorra 🇦🇩 +Angola 🇦🇴 +Anguilla 🇦🇮 +Antarctica 🇦🇶 +Antigua & Barbuda 🇦🇬 +Argentina 🇦🇷 +Armenia 🇦🇲 +Aruba 🇦🇼 +Australia 🇦🇺 +Austria 🇦🇹 +Azerbaijan 🇦🇿 +Bahamas 🇧🇸 +Bahrain 🇧🇭 +Bangladesh 🇧🇩 +Barbados 🇧🇧 +Belarus 🇧🇾 +Belgium 🇧🇪 +Belize 🇧🇿 +Benin 🇧🇯 +Bermuda 🇧🇲 +Bhutan 🇧🇹 +Bolivia 🇧🇴 +Caribbean Netherlands 🇧🇶 +Bosnia & Herzegovina 🇧🇦 +Botswana 🇧🇼 +Brazil 🇧🇷 +British Indian Ocean Territory 🇮🇴 +British Virgin Islands 🇻🇬 +Brunei 🇧🇳 +Bulgaria 🇧🇬 +Burkina Faso 🇧🇫 +Burundi 🇧🇮 +Cape Verde 🇨🇻 +Cambodia 🇰🇭 +Cameroon 🇨🇲 +Canada 🇨🇦 +Canary Islands 🇮🇨 +Cayman Islands 🇰🇾 +Central African Republic 🇨🇫 +Chad 🇹🇩 +Chile 🇨🇱 +China 🇨🇳 +Christmas Island 🇨🇽 +Cocos (Keeling) Islands 🇨🇨 +Colombia 🇨🇴 +Comoros 🇰🇲 +Congo - Brazzaville 🇨🇬 +Congo - Kinshasa 🇨🇩 +Cook Islands 🇨🇰 +Costa Rica 🇨🇷 +Côte d’Ivoire 🇨🇮 +Croatia 🇭🇷 +Cuba 🇨🇺 +Curaçao 🇨🇼 +Cyprus 🇨🇾 +Czech Republic 🇨🇿 +Denmark 🇩🇰 +Djibouti 🇩🇯 +Dominica 🇩🇲 +Dominican Republic 🇩🇴 +Ecuador 🇪🇨 +Egypt 🇪🇬 +El Salvador 🇸🇻 +Equatorial Guinea 🇬🇶 +Eritrea 🇪🇷 +Estonia 🇪🇪 +Ethiopia 🇪🇹 +European Union 🇪🇺 +Falkland Islands 🇫🇰 +Faroe Islands 🇫🇴 +Fiji 🇫🇯 +Finland 🇫🇮 +France 🇫🇷 +French Guiana 🇬🇫 +French Polynesia 🇵🇫 +French Southern Territories 🇹🇫 +Gabon 🇬🇦 +Gambia 🇬🇲 +Georgia 🇬🇪 +Germany 🇩🇪 +Ghana 🇬🇭 +Gibraltar 🇬🇮 +Greece 🇬🇷 +Greenland 🇬🇱 +Grenada 🇬🇩 +Guadeloupe 🇬🇵 +Guam 🇬🇺 +Guatemala 🇬🇹 +Guernsey 🇬🇬 +Guinea 🇬🇳 +Guinea-Bissau 🇬🇼 +Guyana 🇬🇾 +Haiti 🇭🇹 +Honduras 🇭🇳 +Hong Kong SAR China 🇭🇰 +Hungary 🇭🇺 +Iceland 🇮🇸 +India 🇮🇳 +Indonesia 🇮🇩 +Iran 🇮🇷 +Iraq 🇮🇶 +Ireland 🇮🇪 +Isle of Man 🇮🇲 +Israel 🇮🇱 +Italy 🇮🇹 +Jamaica 🇯🇲 +Japan 🇯🇵 +crossed flags 🎌 +Jersey 🇯🇪 +Jordan 🇯🇴 +Kazakhstan 🇰🇿 +Kenya 🇰🇪 +Kiribati 🇰🇮 +Kosovo 🇽🇰 +Kuwait 🇰🇼 +Kyrgyzstan 🇰🇬 +Laos 🇱🇦 +Latvia 🇱🇻 +Lebanon 🇱🇧 +Lesotho 🇱🇸 +Liberia 🇱🇷 +Libya 🇱🇾 +Liechtenstein 🇱🇮 +Lithuania 🇱🇹 +Luxembourg 🇱🇺 +Macau SAR China 🇲🇴 +Macedonia 🇲🇰 +Madagascar 🇲🇬 +Malawi 🇲🇼 +Malaysia 🇲🇾 +Maldives 🇲🇻 +Mali 🇲🇱 +Malta 🇲🇹 +Marshall Islands 🇲🇭 +Martinique 🇲🇶 +Mauritania 🇲🇷 +Mauritius 🇲🇺 +Mayotte 🇾🇹 +Mexico 🇲🇽 +Micronesia 🇫🇲 +Moldova 🇲🇩 +Monaco 🇲🇨 +Mongolia 🇲🇳 +Montenegro 🇲🇪 +Montserrat 🇲🇸 +Morocco 🇲🇦 +Mozambique 🇲🇿 +Myanmar (Burma) 🇲🇲 +Namibia 🇳🇦 +Nauru 🇳🇷 +Nepal 🇳🇵 +Netherlands 🇳🇱 +New Caledonia 🇳🇨 +New Zealand 🇳🇿 +Nicaragua 🇳🇮 +Niger 🇳🇪 +Nigeria 🇳🇬 +Niue 🇳🇺 +Norfolk Island 🇳🇫 +Northern Mariana Islands 🇲🇵 +North Korea 🇰🇵 +Norway 🇳🇴 +Oman 🇴🇲 +Pakistan 🇵🇰 +Palau 🇵🇼 +Palestinian Territories 🇵🇸 +Panama 🇵🇦 +Papua New Guinea 🇵🇬 +Paraguay 🇵🇾 +Peru 🇵🇪 +Philippines 🇵🇭 +Pitcairn Islands 🇵🇳 +Poland 🇵🇱 +Portugal 🇵🇹 +Puerto Rico 🇵🇷 +Qatar 🇶🇦 +Réunion 🇷🇪 +Romania 🇷🇴 +Russia 🇷🇺 +Rwanda 🇷🇼 +St. Barthélemy 🇧🇱 +St. Helena 🇸🇭 +St. Kitts & Nevis 🇰🇳 +St. Lucia 🇱🇨 +St. Pierre & Miquelon 🇵🇲 +St. Vincent & Grenadines 🇻🇨 +Samoa 🇼🇸 +San Marino 🇸🇲 +São Tomé & Príncipe 🇸🇹 +Saudi Arabia 🇸🇦 +Senegal 🇸🇳 +Serbia 🇷🇸 +Seychelles 🇸🇨 +Sierra Leone 🇸🇱 +Singapore 🇸🇬 +Sint Maarten 🇸🇽 +Slovakia 🇸🇰 +Slovenia 🇸🇮 +Solomon Islands 🇸🇧 +Somalia 🇸🇴 +South Africa 🇿🇦 +South Georgia & South Sandwich Islands 🇬🇸 +South Korea 🇰🇷 +South Sudan 🇸🇸 +Spain 🇪🇸 +Sri Lanka 🇱🇰 +Sudan 🇸🇩 +Suriname 🇸🇷 +Swaziland 🇸🇿 +Sweden 🇸🇪 +Switzerland 🇨🇭 +Syria 🇸🇾 +Taiwan 🇹🇼 +Tajikistan 🇹🇯 +Tanzania 🇹🇿 +Thailand 🇹🇭 +Timor-Leste 🇹🇱 +Togo 🇹🇬 +Tokelau 🇹🇰 +Tonga 🇹🇴 +Trinidad & Tobago 🇹🇹 +Tunisia 🇹🇳 +Turkey 🇹🇷 +Turkmenistan 🇹🇲 +Turks & Caicos Islands 🇹🇨 +Tuvalu 🇹🇻 +Uganda 🇺🇬 +Ukraine 🇺🇦 +United Arab Emirates 🇦🇪 +United Kingdom 🇬🇧 +United States 🇺🇸 +U.S. Virgin Islands 🇻🇮 +Uruguay 🇺🇾 +Uzbekistan 🇺🇿 +Vanuatu 🇻🇺 +Vatican City 🇻🇦 +Venezuela 🇻🇪 +Vietnam 🇻🇳 +Wallis & Futuna 🇼🇫 +Western Sahara 🇪🇭 +Yemen 🇾🇪 +Zambia 🇿🇲 +Zimbabwe 🇿🇼 diff --git a/scripts/export-keys.sh b/scripts/export-keys.sh new file mode 100755 index 0000000..5807dbc --- /dev/null +++ b/scripts/export-keys.sh @@ -0,0 +1,35 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +yellow "Exporting public key..." +gpg --export --armor -a EuAndreh > keys.gpg +green "Done." + +yellow "Exporting private key..." +read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r +gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg +green "Done." + +yellow "Exporting ownertrust..." +gpg --export-ownertrust > trust.txt +green "Done." + +yellow "Creating tar with key pair and trust content..." +tar -cvf EuAndreh.tar keys.gpg trust.txt +green "Done." + +yellow "Encrypting tar file..." +read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r +gpg --cipher-algo AES256 -c EuAndreh.tar +green "Done." + +yellow "Removing traces of private key..." +shred trust.txt +rm trust.txt +shred keys.gpg +rm keys.gpg +shred EuAndreh.tar +rm EuAndreh.tar +green "Done." + +blue "File 'EuAndreh.tar.gpg' created!" diff --git a/scripts/fim b/scripts/fim new file mode 100755 index 0000000..ff8e00d --- /dev/null +++ b/scripts/fim @@ -0,0 +1,3 @@ +#!/bin/sh -eu + +play "$DOTFILES/bash/Positive.ogg" 2> /dev/null diff --git a/scripts/gc-mail.sh b/scripts/gc-mail.sh new file mode 100755 index 0000000..5952cf7 --- /dev/null +++ b/scripts/gc-mail.sh @@ -0,0 +1,6 @@ +#!/bin/sh -eux + +# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ +yellow "Clean up deleted email files" +notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" +notmuch new diff --git a/scripts/gc-nix.sh b/scripts/gc-nix.sh new file mode 100755 index 0000000..056c1eb --- /dev/null +++ b/scripts/gc-nix.sh @@ -0,0 +1,18 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +# shellcheck source=/dev/null +. "$DOTFILES/bash/colors.sh" +yellow "Cleaning up the NixOS store" + +profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) + +for p in "${profiles[@]}"; do + sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" +done + +# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= +nix-env --delete-generations old + +nix-store --gc +nix-collect-garbage -d diff --git a/scripts/gc.sh b/scripts/gc.sh new file mode 100755 index 0000000..bdc0043 --- /dev/null +++ b/scripts/gc.sh @@ -0,0 +1,42 @@ +#!/bin/sh -eux + +disk_space() { + u | awk '{print $5" "$6}' +} + +before=$(disk_space) + +gc-nix.sh + +yellow "Cleaning up Guix store" + +guix gc + + +yellow "Cleaning up up the Trash and /tmp folders" + +sudo rm -rf ~/.local/share/Trash/files/* +# https://askubuntu.com/a/609396 +sudo find /tmp -type f -atime +10 -delete + + +yellow "Erasing docker images" + +echo y | docker system prune -a +docker rmi "$(docker images -a -q)" +docker rm "$(docker ps -a -f status=exited -q)" + +docker stop "$(docker ps -a -q)" +docker rm "$(docker ps -a -q)" + +echo y | docker volume prune +echo y | docker container prune + +gc-mail.sh + +after=$(disk_space) + +green "Done." +green "Disk space before and after:" +blue " before: ${before}" +blue " after: ${after}" diff --git a/scripts/hd.sh b/scripts/hd.sh new file mode 100755 index 0000000..e977aa3 --- /dev/null +++ b/scripts/hd.sh @@ -0,0 +1,11 @@ +#!/bin/sh -eux + +annex.sh + +rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ +rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ +rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ +rsync -avzP --delete euandre.org:/home/user-data/ ~/UTCLOUD/backups/box-ssd/ + +cd ~/dev/ +mr -s -j4 hd diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh new file mode 100755 index 0000000..d69c42f --- /dev/null +++ b/scripts/mailing-list-import-mbox.sh @@ -0,0 +1,116 @@ +#!/usr/bin/env nix-shell +#!nix-shell -i bash -p bash wget mb2md +# shellcheck shell=bash +set -Eeuo pipefail + +MAILING_LIST_PROVIDER="${1:-}" +MAILING_LIST_NAME="${2:-}" +GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' +OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" +TMP_DIR="$HOME/tmp/mbox-import" +usage() { + cat < + + Arguments + MAILING_LIST_NAME The name of the mailing list, e.g.: info-guix. + MAILING_LIST_PROVIDER The name of the host of the mailing list, e.g.: gnu. + Supported providers: + 'gnu' for GNU mailing lists + 'google' for Google Groups + +Examples: + Download and import into mbsync the MBOX archive from info-guix mailing-list: + mailing-list-import-mbox.sh gnu info-guix + + Download and import into mbsync the contents for lisp-br Google Groups: + mailing-list-import-mbox.sh google lisp-br +EOF +} + +gnu_mailing_list_import() { + mkdir -p "${TMP_DIR}" + pushd "${TMP_DIR}" + + # Subscribe to the mailing list + local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" + local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" + mail "$recipient" \ + -s "$subject" \ + -aFrom:mailing-list@euandre.org <<<'' + + # Download existing archive as MBOX files + wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" + + # Concatenate all MBOX files into as single MBOX file + cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" + + # Transform the MBOX file into a MailDir format and put it on the right place + mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" + popd +} + +google_groups_import() { + [[ -f ~/dev/misc/google-group-crawler/crawler.sh ]] || { + red "Missing ${HOME}/dev/misc/google-group-crawler/crawler.sh file." + red "Clone it before importing Google Groups emails." + exit 1 + } + mkdir -p "${TMP_DIR}" + pushd "${TMP_DIR}" + + # Subscribe to the mailing list + local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" + local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" + mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' + + # Download existing messages into MBOX Files + CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" + export _GROUP="${MAILING_LIST_NAME}" + ~/dev/misc/google-group-crawler/crawler.sh -sh > "${CRAWLER_FILE}" + bash "${CRAWLER_FILE}" + + cat "${MAILING_LIST_NAME}/mbox/"* > "${MAILING_LIST_NAME}.all.mbox" + + echo before + echo mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" + echo after + popd +} + +main() { + [[ -z "${MAILING_LIST_PROVIDER}" ]] && { + red "Missing input argument 'MAILING_LIST_PROVIDER'.\n" + usage + exit 2 + } + + [[ -z "${MAILING_LIST_NAME}" ]] && { + red "Missing input argument 'MAILING_LIST_NAME'.\n" + usage + exit 2 + } + + case "${MAILING_LIST_PROVIDER}" in + "gnu") + gnu_mailing_list_import + ;; + "google") + google_groups_import + ;; + *) + red "Unsupported mailing list provider '${MAILING_LIST_PROVIDER}'." + usage + exit 2 + ;; + esac + + echo "${MAILING_LIST_PROVIDER} ${MAILING_LIST_NAME}" >> ~/annex/txt/mailing-list-subscriptions.txt + + green "Done." + yellow "Make sure to add the correct tagging rules for notmuch post-hook!" + blue "Remember to sync new changes by running sync-mail.sh!" +} + +main "$@" diff --git a/scripts/open b/scripts/open new file mode 100755 index 0000000..9383059 --- /dev/null +++ b/scripts/open @@ -0,0 +1,22 @@ +#!/bin/sh -eux + +case "$1" in + *.ico|*.jpg|*.jpeg|*.png) + feh "$1" + ;; + https://www.youtube.com/watch*) + vlc "$1" + ;; + http*|*.svg) + firefox "$1" + ;; + *.pdf) + zathura "$1" + ;; + *.flac|*.ogg|*.mkv) + vlc "$1" + ;; + *) + /run/current-system/sw/bin/xdg-open "$1" + ;; +esac diff --git a/scripts/pastebin.sh b/scripts/pastebin.sh new file mode 100755 index 0000000..d4c3159 --- /dev/null +++ b/scripts/pastebin.sh @@ -0,0 +1,85 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +usage() { + red "Missing argument <${1}>.\n" + cat < [-|FILE] + + Reads contents from [FILE], from stdin if '-' is given, and opens the + editor on the content. + + Arguments: + FULL_TITLE Full title of the pastebin + +Examples: + pastebin.sh 'My example pastebin title' + pastebin.sh 'My example pastebin title' - < file + cat file | pastebin.sh 'My example pastebin title' - +EOF +} + +FULL_TITLE="${1:-}" +[[ -z "$FULL_TITLE" ]] && { + usage 'FULL_TITLE' + exit 2 +} + +# Derived from: +# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 +slugify() { + echo "$1" | \ + tr '[:upper:]' '[:lower:]' | \ + perl -ne 'tr/\000-\177//cd; + s/[^\w\s-]//g; + s/^\s+|\s+$//g; + s/[-\s]+/-/g; + print;' +} + +SLUG_TITLE="$(slugify "$FULL_TITLE")" +PASTE_DATE="$(date -I)" +OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" +if [[ -n "${2:-}" ]]; then + shift + CONTENT=$(cat "$@") +else + CONTENT='FIXME' +fi + +pushd ~/dev/libre/website > /dev/null + +[[ -f "$OUT" ]] && { + red "Pastebin named $OUT already exists." + exit 1 +} + +cat < "$OUT" +--- + +title: ${FULL_TITLE} + +date: ${PASTE_DATE} + +layout: post + +lang: en + +ref: $SLUG_TITLE + +--- + +\`\`\`FIXME +$CONTENT +\`\`\` +EOF + +git reset . +git add "$OUT" +git commit -m "$0: Auto-add $OUT" +"$(nix-build -A publishScript)/bin/publish.sh" +open "https://euandre.org/pastebin/$(tr '-' '/' <<< "$PASTE_DATE")/$SLUG_TITLE.html" +git push +git push srht +popd > /dev/null diff --git a/scripts/post.sh b/scripts/post.sh new file mode 100755 index 0000000..25579fa --- /dev/null +++ b/scripts/post.sh @@ -0,0 +1,120 @@ +#!/bin/sh -eu + +# shellcheck source=/dev/null +. "$DOTFILES/bash/colors.sh" + +missing() { + red "Missing argument <${1}>.\n" +} + +usage() { + cat < + + Arguments: + TYPE The type of the article: article, til, slides, podcast, screencast + FULL_TITLE Full title of the pastebin + +Examples: + $0 til 'I just learned this' + $0 article 'My example article title' +EOF +} + +TYPE="${1:-}" +[ -z "$TYPE" ] && { + missing 'TYPE' + usage + exit 2 +} + +case "$TYPE" in + article | til | podcast | screencast) + LAYOUT=post + DIR="_${TYPE}s" + ;; + slides) + LAYOUT=slides + DIR=_slides + ;; + *) + red "Invalid type '$TYPE'" + usage + exit 2 + ;; +esac + +FULL_TITLE="${2:-}" +[ -z "$FULL_TITLE" ] && { + missing 'FULL_TITLE' + usage + exit 2 +} + +# Derived from: +# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 +slugify() { + echo "$1" | \ + tr '[:upper:]' '[:lower:]' | \ + perl -ne 'tr/\000-\177//cd; + s/[^\w\s-]//g; + s/^\s+|\s+$//g; + s/[-\s]+/-/g; + print;' +} + +SLUG_TITLE="$(slugify "$FULL_TITLE")" +PASTE_DATE="$(date -I)" +OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md" + +cd ~/dev/libre/website + +[ -f "$OUT" ] && { + red "Pastebin named $OUT already exists." + exit 1 +} + +if [ "$LAYOUT" = 'slides' ]; then + cat< "$OUT" +--- + +title: $FULL_TITLE + +date: $PASTE_DATE + +layout: $LAYOUT + +lang: en + +ref: $SLUG_TITLE + +--- + +--- + +## Thank you! + +References: + +1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %}) +2. [prose version of this presentation]({% link _articles/$PASTE_DATE-$SLUG_TITLE.md %}) +EOF + "$0" article "$FULL_TITLE" + else + cat < "$OUT" +--- + +title: $FULL_TITLE + +date: $PASTE_DATE + +layout: $LAYOUT + +lang: en + +ref: $SLUG_TITLE + +--- +EOF +fi diff --git a/scripts/record-my-screen.sh b/scripts/record-my-screen.sh new file mode 100755 index 0000000..95094b6 --- /dev/null +++ b/scripts/record-my-screen.sh @@ -0,0 +1,34 @@ +#!/bin/sh -eux + +usage() { + red "Missing argument $1.\n" + cat < + + Arguments: + OUTPUT_PATH Path of the final WebM file + +Examples: + Capture the screen and save it in 'output.webm' + record-my-screen.sh output.webm +EOF +} + +OUTPUT_PATH="${1:-}" +[ -z "${OUTPUT_PATH}" ] && { + usage 'OUTPUT_PATH' + exit 2 +} + +SCREEN_RESOLUTION="$(xrandr -q --current | grep '[*]' | awk '{print$1}')" + +ffmpeg \ + -f pulse \ + -i default \ + -f x11grab \ + -s "$SCREEN_RESOLUTION" \ + -i :0 \ + "$OUTPUT_PATH" + +# https://github.com/georgmartius/vid.stab diff --git a/scripts/rotate-mpris-player.sh b/scripts/rotate-mpris-player.sh new file mode 100755 index 0000000..863501e --- /dev/null +++ b/scripts/rotate-mpris-player.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +mkdir -p "${HOME}/.cache/andreh/" +CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" +AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" +CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" + +pick_first() { + echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" +} + +if [[ "${CURRENT_PLAYER}" = "" ]]; then + pick_first +elif ! echo "${AVAILABLE_PLAYERS}" | grep -q "${CURRENT_PLAYER}"; then + # Unknown $CURRENT_PLAYER, pick anyone + pick_first +else + INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" + LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" + if [[ "${INDEX}" = "${LENGTH}" ]]; then + # Reached the end of the $AVAILABLE_PLAYERS list, wrapping + pick_first + else + # Get the next player instead + echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" + fi +fi diff --git a/scripts/single-monitor.sh b/scripts/single-monitor.sh new file mode 100755 index 0000000..83d0455 --- /dev/null +++ b/scripts/single-monitor.sh @@ -0,0 +1,2 @@ +#!/bin/sh -eux +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/three-monitors.sh b/scripts/three-monitors.sh new file mode 100755 index 0000000..d1ef7c6 --- /dev/null +++ b/scripts/three-monitors.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/scripts/vlc b/scripts/vlc new file mode 100755 index 0000000..8570b53 --- /dev/null +++ b/scripts/vlc @@ -0,0 +1,21 @@ +#!/bin/sh -eu + +NIX=/run/current-system/sw/bin/vlc +GUIX=/run/current-system/profile/bin/vlc + +if [ -e "$NIX" ]; then + VLC="$NIX" +elif [ -e "$GUIX" ]; then + VLC="$GUIX" +else + echo "Can't guess VLC executable" + exit 1 +fi + +if [ -z "${1:-}" ]; then + "$VLC" +else + "$VLC" "$1" + echo "$1" >> ~/archive/vlc/queue.txt +fi + diff --git a/scripts/xdg-open b/scripts/xdg-open new file mode 120000 index 0000000..ce4a72b --- /dev/null +++ b/scripts/xdg-open @@ -0,0 +1 @@ +open \ No newline at end of file diff --git a/scripts/xmobar-mpris.sh b/scripts/xmobar-mpris.sh new file mode 100755 index 0000000..a2af8c4 --- /dev/null +++ b/scripts/xmobar-mpris.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +CUR_PATH="${HOME}/.cache/andreh/mpris-player.txt" + +urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +default_status() { + CUR="${1}" + printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" +} + +main() { + CUR="$(cat "${CUR_PATH}")" + if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then + printf "%s\n" "${CUR}" + else + case "${CUR}" in + cmus) + default_status "${CUR}" + ;; + firefox*) + printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" + ;; + vlc) + printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" + ;; + *) + default_status "${CUR}" + ;; + esac + fi +} +export -f main + +mkdir -p "$(dirname "${CUR_PATH}")" +touch "${CUR_PATH}" + +while true +do + main + sleep 1 +done diff --git a/scripts/xmobar-notmuch.sh b/scripts/xmobar-notmuch.sh new file mode 100755 index 0000000..f174a8e --- /dev/null +++ b/scripts/xmobar-notmuch.sh @@ -0,0 +1,10 @@ +#!/bin/sh -eu + +while true; do + printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" + if acpi -a | grep -q off-line; then + sleep $((60 * 15)) + else + sleep $((60 * 1)) + fi +done diff --git a/scripts/yt b/scripts/yt new file mode 100755 index 0000000..2d8de8d --- /dev/null +++ b/scripts/yt @@ -0,0 +1,79 @@ +#!/bin/sh -eu + +export DEFAULT_PLAYLIST_END=15 +export DEFAULT_INC_STEP=10 +export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" + +download() { + youtube-dl "$1" \ + --download-archive ~/archive/youtube-dl-seen.conf \ + --prefer-free-formats \ + --playlist-end "$2" \ + --write-description \ + --output "$YT_TEMPLATE" +} + +download_user() { + download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" +} + +download_channel() { + download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" +} + +download_playlist() { + download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" +} + +inc_download() { + fn="$1" + id="$2" + step="${3-$DEFAULT_INC_STEP}" + + file="$HOME/.yt-db/$id" + mkdir -p "$HOME/.yt-db" + cat "$file" 2> /dev/null + n_count="$(cat "$file" 2> /dev/null || printf 10)" + n_count_new="$((n_count + step))" + + echo "$n_count_new" > "$file" + + "$fn" "$id" "$n_count" +} + +# Always downloads video, doesn't look at the download-archive + +URL_OR_PATH="${1:-}" +[ -z "${URL_OR_PATH}" ] && { + # shellcheck disable=2016 + echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr + exit 2 +} + +if [ -f "${URL_OR_PATH}" ]; then + echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr + youtube-dl --batch-file "${URL_OR_PATH}" \ + --format best \ + --output "${YT_TEMPLATE}" \ + --write-description \ + 1>&2 + FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --format best \ + --get-filename)" +else + echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr + youtube-dl "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --format best \ + --write-description \ + 1>&2 + FILES="$(youtube-dl "${URL_OR_PATH}" \ + --output "${YT_TEMPLATE}" \ + --format best \ + --get-filename)" +fi + +for f in $FILES; do + vlc "$f" +done diff --git a/scripts/zero-brightness.sh b/scripts/zero-brightness.sh new file mode 100755 index 0000000..a748724 --- /dev/null +++ b/scripts/zero-brightness.sh @@ -0,0 +1,10 @@ +#!/bin/sh -eux + +# base dir for backlight class +BASEDIR='/sys/class/backlight/' + +# get the backlight handler +HANDLER="${BASEDIR}$(ls "${BASEDIR}")" + +# set the new brightness value +echo 0 > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index bbbeffa..828ab1b 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -18,8 +18,8 @@ Config { "-h", "green", "-l", "red"] 10 - , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-mpris.sh" "mpris" - , Run CommandReader "~/dev/libre/dotfiles/scripts/ad-hoc/xmobar-notmuch.sh" "notmuch" + , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-mpris.sh" "mpris" + , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-notmuch.sh" "notmuch" ] , template = " %date% | %default:Master%| %mpris% } { | %notmuch% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 0dd8cfb..1e9a2bd 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -40,21 +40,21 @@ myKeyPBindings = , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5-") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) previous") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) play-pause") - , ("S-", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/rotate-mpris-player.sh") + , ("S-", spawn "~/dev/libre/dotfiles/scripts/rotate-mpris-player.sh") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") -- Brightness - , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh -10") - , ("S-", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/zero-brightness.sh") - , ("", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/brightness.sh +10") + , ("", spawn "~/dev/libre/dotfiles/scripts/brightness.sh -10") + , ("S-", spawn "~/dev/libre/dotfiles/scripts/zero-brightness.sh") + , ("", spawn "~/dev/libre/dotfiles/scripts/brightness.sh +10") -- yeganesh launcher , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") -- yeganesh emoji - , ("M-o", spawnHere "~/dev/libre/dotfiles/scripts/ad-hoc/dmenu-emoji.sh") + , ("M-o", spawnHere "~/dev/libre/dotfiles/scripts/dmenu-emoji.sh") -- Lock screen , ("C-M-l", spawn "dm-tool switch-to-greeter") @@ -65,10 +65,10 @@ myKeyPBindings = , ("C-M-", spawn "escrotum ~/Bureau/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup - , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/single-monitor.sh") + , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/single-monitor.sh") -- xrandr three monitor setup - , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/three-monitors.sh") + , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/three-monitors.sh") -- restart network , ("M-x", spawn "gksudo -S systemctl restart NetworkManager") @@ -85,7 +85,7 @@ myKeyPBindings = , ("M-z", sendMessage MirrorShrink) -- Enqueue link on clipboard in VLC - , ("M-v", spawn "~/dev/libre/dotfiles/scripts/ad-hoc/dmenu-vlc.sh") + , ("M-v", spawn "~/dev/libre/dotfiles/scripts/dmenu-vlc.sh") ] myLayoutHook = -- cgit v1.2.3 From 1da6391f992e790407dabbb56df96590addeca20 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 19:35:50 -0300 Subject: Move xmonad/xmobar scripts into xmonad/scripts/ --- bash/env.sh | 2 +- scripts/brightness.sh | 29 - scripts/dmenu-emoji.sh | 13 - scripts/dmenu-vlc.sh | 9 - scripts/emoji-list.txt | 1432 --------------------------------- scripts/rotate-mpris-player.sh | 28 - scripts/single-monitor.sh | 2 - scripts/three-monitors.sh | 2 - scripts/xmobar-mpris.sh | 43 - scripts/xmobar-notmuch.sh | 10 - scripts/zero-brightness.sh | 10 - xmonad/scripts/brightness.sh | 29 + xmonad/scripts/dmenu-emoji.sh | 13 + xmonad/scripts/dmenu-vlc.sh | 9 + xmonad/scripts/emoji-list.txt | 1432 +++++++++++++++++++++++++++++++++ xmonad/scripts/rotate-mpris-player.sh | 28 + xmonad/scripts/single-monitor.sh | 2 + xmonad/scripts/three-monitors.sh | 2 + xmonad/scripts/xmobar-mpris.sh | 43 + xmonad/scripts/xmobar-notmuch.sh | 10 + xmonad/scripts/zero-brightness.sh | 10 + xmonad/xmobar.hs | 4 +- xmonad/xmonad.hs | 16 +- 23 files changed, 1589 insertions(+), 1589 deletions(-) delete mode 100755 scripts/brightness.sh delete mode 100755 scripts/dmenu-emoji.sh delete mode 100755 scripts/dmenu-vlc.sh delete mode 100755 scripts/emoji-list.txt delete mode 100755 scripts/rotate-mpris-player.sh delete mode 100755 scripts/single-monitor.sh delete mode 100755 scripts/three-monitors.sh delete mode 100755 scripts/xmobar-mpris.sh delete mode 100755 scripts/xmobar-notmuch.sh delete mode 100755 scripts/zero-brightness.sh create mode 100755 xmonad/scripts/brightness.sh create mode 100755 xmonad/scripts/dmenu-emoji.sh create mode 100755 xmonad/scripts/dmenu-vlc.sh create mode 100755 xmonad/scripts/emoji-list.txt create mode 100755 xmonad/scripts/rotate-mpris-player.sh create mode 100755 xmonad/scripts/single-monitor.sh create mode 100755 xmonad/scripts/three-monitors.sh create mode 100755 xmonad/scripts/xmobar-mpris.sh create mode 100755 xmonad/scripts/xmobar-notmuch.sh create mode 100755 xmonad/scripts/zero-brightness.sh diff --git a/bash/env.sh b/bash/env.sh index 8a7b45b..019a1e2 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -13,4 +13,4 @@ export NIX_BUILD_CORES=0 export GUIX_PROFILE="$HOME/.guix-profile" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$HOME/annex/bin/scripts:$HOME/annex/bin/cron:$PATH" +PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$HOME/annex/bin/scripts:$HOME/annex/bin/cron:$PATH" diff --git a/scripts/brightness.sh b/scripts/brightness.sh deleted file mode 100755 index 29dc05b..0000000 --- a/scripts/brightness.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -eux - -BRIGHTNESS_DIFF="${1}" - -# base dir for backlight class -BASEDIR='/sys/class/backlight/' - -# get the backlight handler -HANDLER="${BASEDIR}$(ls "${BASEDIR}")" - -# get current brightness -OLD_BRIGHTNESS="$(cat "${HANDLER}/brightness")" - -# get max brightness -MAX_BRIGHTNESS="$(cat "${HANDLER}/max_brightness")" - -# get current brightness % -OLD_BRIGHTNESS_P=$(( 100 * "${OLD_BRIGHTNESS}" / "${MAX_BRIGHTNESS}" )) - -# calculate new brightness %, bounded by 0 100 range -NEW_BRIGHTNESS_P=$(("${OLD_BRIGHTNESS_P}" + "${BRIGHTNESS_DIFF}")) -NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" > 100 ? 100 : "${NEW_BRIGHTNESS_P}")) -NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) - -# calculate new brightness value -NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) - -# set the new brightness value -echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/scripts/dmenu-emoji.sh b/scripts/dmenu-emoji.sh deleted file mode 100755 index 2177ac8..0000000 --- a/scripts/dmenu-emoji.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -eux - -# Derived from: -# https://github.com/porras/dmenu-emoji - -LIST="$HOME/dev/libre/dotfiles/scripts/emoji-list.txt" - -dmenu \ - -l 20 \ - -i \ - -p 'Emoji: ' -fn Monospace-18 \ - < "$LIST" \ - | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip diff --git a/scripts/dmenu-vlc.sh b/scripts/dmenu-vlc.sh deleted file mode 100755 index c42e26f..0000000 --- a/scripts/dmenu-vlc.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -eu - -URL="$(xsel -bo)" - -res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" - -if [ "$res" = 'yes' ]; then - vlc "$URL" -fi diff --git a/scripts/emoji-list.txt b/scripts/emoji-list.txt deleted file mode 100755 index 06b5a58..0000000 --- a/scripts/emoji-list.txt +++ /dev/null @@ -1,1432 +0,0 @@ -grinning face 😀 -smiling face with open mouth 😃 -smiling face with open mouth & smiling eyes 😄 -grinning face with smiling eyes 😁 -smiling face with open mouth & closed eyes 😆 -smiling face with open mouth & cold sweat 😅 -face with tears of joy 😂 -rolling on the floor laughing 🤣 -smiling face ☺️ -smiling face with smiling eyes 😊 -smiling face with halo 😇 -slightly smiling face 🙂 -upside-down face 🙃 -winking face 😉 -relieved face 😌 -smiling face with heart-eyes 😍 -face blowing a kiss 😘 -kissing face 😗 -kissing face with smiling eyes 😙 -kissing face with closed eyes 😚 -face savouring delicious food 😋 -face with stuck-out tongue & winking eye 😜 -face with stuck-out tongue & closed eyes 😝 -face with stuck-out tongue 😛 -money-mouth face 🤑 -hugging face 🤗 -nerd face 🤓 -smiling face with sunglasses 😎 -clown face 🤡 -cowboy hat face 🤠 -smirking face 😏 -unamused face 😒 -disappointed face 😞 -pensive face 😔 -worried face 😟 -confused face 😕 -slightly frowning face 🙁 -frowning face ☹️ -persevering face 😣 -confounded face 😖 -tired face 😫 -weary face 😩 -face with steam from nose 😤 -angry face 😠 -pouting face 😡 -face without mouth 😶 -neutral face 😐 -expressionless face 😑 -hushed face 😯 -frowning face with open mouth 😦 -anguished face 😧 -face with open mouth 😮 -astonished face 😲 -dizzy face 😵 -flushed face 😳 -face screaming in fear 😱 -fearful face 😨 -face with open mouth & cold sweat 😰 -crying face 😢 -disappointed but relieved face 😥 -drooling face 🤤 -loudly crying face 😭 -face with cold sweat 😓 -sleepy face 😪 -sleeping face 😴 -face with rolling eyes 🙄 -thinking face 🤔 -lying face 🤥 -grimacing face 😬 -zipper-mouth face 🤐 -nauseated face 🤢 -sneezing face 🤧 -face with medical mask 😷 -face with thermometer 🤒 -face with head-bandage 🤕 -smiling face with horns 😈 -angry face with horns 👿 -ogre 👹 -goblin 👺 -pile of poo 💩 -ghost 👻 -skull 💀 -skull and crossbones ☠️ -alien 👽 -alien monster 👾 -robot face 🤖 -jack-o-lantern 🎃 -smiling cat face with open mouth 😺 -grinning cat face with smiling eyes 😸 -cat face with tears of joy 😹 -smiling cat face with heart-eyes 😻 -cat face with wry smile 😼 -kissing cat face with closed eyes 😽 -weary cat face 🙀 -crying cat face 😿 -pouting cat face 😾 -open hands 👐 -raising hands 🙌 -clapping hands 👏 -folded hands 🙏 -handshake 🤝 -thumbs up 👍 -thumbs down 👎 -oncoming fist 👊 -raised fist ✊ -left-facing fist 🤛 -right-facing fist 🤜 -crossed fingers 🤞 -victory hand ✌️ -sign of the horns 🤘 -OK hand 👌 -backhand index pointing left 👈 -backhand index pointing right 👉 -backhand index pointing up 👆 -backhand index pointing down 👇 -index pointing up ☝️ -raised hand ✋ -raised back of hand 🤚 -raised hand with fingers splayed 🖐 -vulcan salute 🖖 -waving hand 👋 -call me hand 🤙 -flexed biceps 💪 -middle finger 🖕 -writing hand ✍️ -selfie 🤳 -nail polish 💅 -ring 💍 -lipstick 💄 -kiss mark 💋 -mouth 👄 -tongue 👅 -ear 👂 -nose 👃 -footprints 👣 -eye 👁 -eyes 👀 -speaking head 🗣 -bust in silhouette 👤 -busts in silhouette 👥 -baby 👶 -boy 👦 -girl 👧 -man 👨 -woman 👩 -blond-haired woman 👱‍♀ -blond-haired person 👱 -old man 👴 -old woman 👵 -man with Chinese cap 👲 -woman wearing turban 👳‍♀ -person wearing turban 👳 -woman police officer 👮‍♀ -police officer 👮 -woman construction worker 👷‍♀ -construction worker 👷 -woman guard 💂‍♀ -guard 💂 -woman detective 🕵️‍♀️ -detective 🕵 -woman health worker 👩‍⚕ -man health worker 👨‍⚕ -woman farmer 👩‍🌾 -man farmer 👨‍🌾 -woman cook 👩‍🍳 -man cook 👨‍🍳 -woman student 👩‍🎓 -man student 👨‍🎓 -woman singer 👩‍🎤 -man singer 👨‍🎤 -woman teacher 👩‍🏫 -man teacher 👨‍🏫 -woman factory worker 👩‍🏭 -man factory worker 👨‍🏭 -woman technologist 👩‍💻 -man technologist 👨‍💻 -woman office worker 👩‍💼 -man office worker 👨‍💼 -woman mechanic 👩‍🔧 -man mechanic 👨‍🔧 -woman scientist 👩‍🔬 -man scientist 👨‍🔬 -woman artist 👩‍🎨 -man artist 👨‍🎨 -woman firefighter 👩‍🚒 -man firefighter 👨‍🚒 -woman pilot 👩‍✈ -man pilot 👨‍✈ -woman astronaut 👩‍🚀 -man astronaut 👨‍🚀 -woman judge 👩‍⚖ -man judge 👨‍⚖ -Mrs. Claus 🤶 -Santa Claus 🎅 -princess 👸 -prince 🤴 -bride with veil 👰 -man in tuxedo 🤵 -baby angel 👼 -pregnant woman 🤰 -woman bowing 🙇‍♀ -person bowing 🙇 -person tipping hand 💁 -man tipping hand 💁‍♂ -person gesturing NO 🙅 -man gesturing NO 🙅‍♂ -person gesturing OK 🙆 -man gesturing OK 🙆‍♂ -person raising hand 🙋 -man raising hand 🙋‍♂ -woman facepalming 🤦‍♀ -man facepalming 🤦‍♂ -woman shrugging 🤷‍♀ -man shrugging 🤷‍♂ -person pouting 🙎 -man pouting 🙎‍♂ -person frowning 🙍 -man frowning 🙍‍♂ -person getting haircut 💇 -man getting haircut 💇‍♂ -person getting massage 💆 -man getting massage 💆‍♂ -man in business suit levitating 🕴 -woman dancing 💃 -man dancing 🕺 -people with bunny ears partying 👯 -men with bunny ears partying 👯‍♂ -woman walking 🚶‍♀ -person walking 🚶 -woman running 🏃‍♀ -person running 🏃 -man and woman holding hands 👫 -two women holding hands 👭 -two men holding hands 👬 -couple with heart 💑 -couple with heart: woman woman 👩‍❤️‍👩 -couple with heart: man man 👨‍❤️‍👨 -kiss 💏 -kiss: woman woman 👩‍❤️‍💋‍👩 -kiss: man man 👨‍❤️‍💋‍👨 -family 👪 -family: man woman girl 👨‍👩‍👧 -family: man woman girl boy 👨‍👩‍👧‍👦 -family: man woman boy boy 👨‍👩‍👦‍👦 -family: man woman girl girl 👨‍👩‍👧‍👧 -family: woman woman boy 👩‍👩‍👦 -family: woman woman girl 👩‍👩‍👧 -family: woman woman girl boy 👩‍👩‍👧‍👦 -family: woman woman boy boy 👩‍👩‍👦‍👦 -family: woman woman girl girl 👩‍👩‍👧‍👧 -family: man man boy 👨‍👨‍👦 -family: man man girl 👨‍👨‍👧 -family: man man girl boy 👨‍👨‍👧‍👦 -family: man man boy boy 👨‍👨‍👦‍👦 -family: man man girl girl 👨‍👨‍👧‍👧 -family: woman boy 👩‍👦 -family: woman girl 👩‍👧 -family: woman girl boy 👩‍👧‍👦 -family: woman boy boy 👩‍👦‍👦 -family: woman girl girl 👩‍👧‍👧 -family: man boy 👨‍👦 -family: man girl 👨‍👧 -family: man girl boy 👨‍👧‍👦 -family: man boy boy 👨‍👦‍👦 -family: man girl girl 👨‍👧‍👧 -woman’s clothes 👚 -t-shirt 👕 -jeans 👖 -necktie 👔 -dress 👗 -bikini 👙 -kimono 👘 -high-heeled shoe 👠 -woman’s sandal 👡 -woman’s boot 👢 -man’s shoe 👞 -running shoe 👟 -woman’s hat 👒 -top hat 🎩 -graduation cap 🎓 -crown 👑 -rescue worker’s helmet ⛑ -school backpack 🎒 -clutch bag 👝 -purse 👛 -handbag 👜 -briefcase 💼 -glasses 👓 -sunglasses 🕶 -closed umbrella 🌂 -umbrella ☂️ -dog face 🐶 -cat face 🐱 -mouse face 🐭 -hamster face 🐹 -rabbit face 🐰 -fox face 🦊 -bear face 🐻 -panda face 🐼 -koala 🐨 -tiger face 🐯 -lion face 🦁 -cow face 🐮 -pig face 🐷 -pig nose 🐽 -frog face 🐸 -monkey face 🐵 -see-no-evil monkey 🙈 -hear-no-evil monkey 🙉 -speak-no-evil monkey 🙊 -monkey 🐒 -chicken 🐔 -penguin 🐧 -bird 🐦 -baby chick 🐤 -hatching chick 🐣 -front-facing baby chick 🐥 -duck 🦆 -eagle 🦅 -owl 🦉 -bat 🦇 -wolf face 🐺 -boar 🐗 -horse face 🐴 -unicorn face 🦄 -honeybee 🐝 -bug 🐛 -butterfly 🦋 -snail 🐌 -spiral shell 🐚 -lady beetle 🐞 -ant 🐜 -spider 🕷 -spider web 🕸 -turtle 🐢 -snake 🐍 -lizard 🦎 -scorpion 🦂 -crab 🦀 -squid 🦑 -octopus 🐙 -shrimp 🦐 -tropical fish 🐠 -fish 🐟 -blowfish 🐡 -dolphin 🐬 -shark 🦈 -spouting whale 🐳 -whale 🐋 -crocodile 🐊 -leopard 🐆 -tiger 🐅 -water buffalo 🐃 -ox 🐂 -cow 🐄 -deer 🦌 -camel 🐪 -two-hump camel 🐫 -elephant 🐘 -rhinoceros 🦏 -gorilla 🦍 -horse 🐎 -pig 🐖 -goat 🐐 -ram 🐏 -sheep 🐑 -dog 🐕 -poodle 🐩 -cat 🐈 -rooster 🐓 -turkey 🦃 -dove 🕊 -rabbit 🐇 -mouse 🐁 -rat 🐀 -chipmunk 🐿 -paw prints 🐾 -dragon 🐉 -dragon face 🐲 -cactus 🌵 -Christmas tree 🎄 -evergreen tree 🌲 -deciduous tree 🌳 -palm tree 🌴 -seedling 🌱 -herb 🌿 -shamrock ☘️ -four leaf clover 🍀 -pine decoration 🎍 -tanabata tree 🎋 -leaf fluttering in wind 🍃 -fallen leaf 🍂 -maple leaf 🍁 -mushroom 🍄 -sheaf of rice 🌾 -bouquet 💐 -tulip 🌷 -rose 🌹 -wilted flower 🥀 -sunflower 🌻 -blossom 🌼 -cherry blossom 🌸 -hibiscus 🌺 -globe showing Americas 🌎 -globe showing Europe-Africa 🌍 -globe showing Asia-Australia 🌏 -full moon 🌕 -waning gibbous moon 🌖 -last quarter moon 🌗 -waning crescent moon 🌘 -new moon 🌑 -waxing crescent moon 🌒 -first quarter moon 🌓 -waxing gibbous moon 🌔 -new moon face 🌚 -full moon with face 🌝 -sun with face 🌞 -first quarter moon with face 🌛 -last quarter moon with face 🌜 -crescent moon 🌙 -dizzy 💫 -white medium star ⭐️ -glowing star 🌟 -sparkles ✨ -high voltage ⚡️ -fire 🔥 -collision 💥 -comet ☄ -sun ☀️ -sun behind small cloud 🌤 -sun behind cloud ⛅️ -sun behind large cloud 🌥 -sun behind rain cloud 🌦 -rainbow 🌈 -cloud ☁️ -cloud with rain 🌧 -cloud with lightning and rain ⛈ -cloud with lightning 🌩 -cloud with snow 🌨 -snowman ☃️ -snowman without snow ⛄️ -snowflake ❄️ -wind face 🌬 -dashing away 💨 -tornado 🌪 -fog 🌫 -water wave 🌊 -droplet 💧 -sweat droplets 💦 -umbrella with rain drops ☔️ -green apple 🍏 -red apple 🍎 -pear 🍐 -tangerine 🍊 -lemon 🍋 -banana 🍌 -watermelon 🍉 -grapes 🍇 -strawberry 🍓 -melon 🍈 -cherries 🍒 -peach 🍑 -pineapple 🍍 -kiwi fruit 🥝 -avocado 🥑 -tomato 🍅 -eggplant 🍆 -cucumber 🥒 -carrot 🥕 -ear of corn 🌽 -hot pepper 🌶 -potato 🥔 -roasted sweet potato 🍠 -chestnut 🌰 -peanuts 🥜 -honey pot 🍯 -croissant 🥐 -bread 🍞 -baguette bread 🥖 -cheese wedge 🧀 -egg 🥚 -cooking 🍳 -bacon 🥓 -pancakes 🥞 -fried shrimp 🍤 -poultry leg 🍗 -meat on bone 🍖 -pizza 🍕 -hot dog 🌭 -hamburger 🍔 -french fries 🍟 -stuffed flatbread 🥙 -taco 🌮 -burrito 🌯 -green salad 🥗 -shallow pan of food 🥘 -spaghetti 🍝 -steaming bowl 🍜 -pot of food 🍲 -fish cake with swirl 🍥 -sushi 🍣 -bento box 🍱 -curry rice 🍛 -cooked rice 🍚 -rice ball 🍙 -rice cracker 🍘 -oden 🍢 -dango 🍡 -shaved ice 🍧 -ice cream 🍨 -soft ice cream 🍦 -shortcake 🍰 -birthday cake 🎂 -custard 🍮 -lollipop 🍭 -candy 🍬 -chocolate bar 🍫 -popcorn 🍿 -doughnut 🍩 -cookie 🍪 -glass of milk 🥛 -baby bottle 🍼 -hot beverage ☕️ -teacup without handle 🍵 -sake 🍶 -beer mug 🍺 -clinking beer mugs 🍻 -clinking glasses 🥂 -wine glass 🍷 -tumbler glass 🥃 -cocktail glass 🍸 -tropical drink 🍹 -bottle with popping cork 🍾 -spoon 🥄 -fork and knife 🍴 -fork and knife with plate 🍽 -soccer ball ⚽️ -basketball 🏀 -american football 🏈 -baseball ⚾️ -tennis 🎾 -volleyball 🏐 -rugby football 🏉 -pool 8 ball 🎱 -ping pong 🏓 -badminton 🏸 -goal net 🥅 -ice hockey 🏒 -field hockey 🏑 -cricket 🏏 -flag in hole ⛳️ -bow and arrow 🏹 -fishing pole 🎣 -boxing glove 🥊 -martial arts uniform 🥋 -ice skate ⛸ -skis 🎿 -skier ⛷ -snowboarder 🏂 -woman lifting weights 🏋️‍♀️ -person lifting weights 🏋 -person fencing 🤺 -women wrestling 🤼‍♀ -men wrestling 🤼‍♂ -woman cartwheeling 🤸‍♀ -man cartwheeling 🤸‍♂ -woman bouncing ball ⛹️‍♀️ -person bouncing ball ⛹ -woman playing handball 🤾‍♀ -man playing handball 🤾‍♂ -woman golfing 🏌️‍♀️ -person golfing 🏌 -woman surfing 🏄‍♀ -person surfing 🏄 -woman swimming 🏊‍♀ -person swimming 🏊 -woman playing water polo 🤽‍♀ -man playing water polo 🤽‍♂ -woman rowing boat 🚣‍♀ -person rowing boat 🚣 -horse racing 🏇 -woman biking 🚴‍♀ -person biking 🚴 -woman mountain biking 🚵‍♀ -person mountain biking 🚵 -running shirt 🎽 -sports medal 🏅 -military medal 🎖 -1st place medal 🥇 -2nd place medal 🥈 -3rd place medal 🥉 -trophy 🏆 -rosette 🏵 -reminder ribbon 🎗 -ticket 🎫 -admission tickets 🎟 -circus tent 🎪 -woman juggling 🤹‍♀ -man juggling 🤹‍♂ -performing arts 🎭 -artist palette 🎨 -clapper board 🎬 -microphone 🎤 -headphone 🎧 -musical score 🎼 -musical keyboard 🎹 -drum 🥁 -saxophone 🎷 -trumpet 🎺 -guitar 🎸 -violin 🎻 -game die 🎲 -direct hit 🎯 -bowling 🎳 -video game 🎮 -slot machine 🎰 -automobile 🚗 -taxi 🚕 -sport utility vehicle 🚙 -bus 🚌 -trolleybus 🚎 -racing car 🏎 -police car 🚓 -ambulance 🚑 -fire engine 🚒 -minibus 🚐 -delivery truck 🚚 -articulated lorry 🚛 -tractor 🚜 -kick scooter 🛴 -bicycle 🚲 -motor scooter 🛵 -motorcycle 🏍 -police car light 🚨 -oncoming police car 🚔 -oncoming bus 🚍 -oncoming automobile 🚘 -oncoming taxi 🚖 -aerial tramway 🚡 -mountain cableway 🚠 -suspension railway 🚟 -railway car 🚃 -tram car 🚋 -mountain railway 🚞 -monorail 🚝 -high-speed train 🚄 -high-speed train with bullet nose 🚅 -light rail 🚈 -locomotive 🚂 -train 🚆 -metro 🚇 -tram 🚊 -station 🚉 -helicopter 🚁 -small airplane 🛩 -airplane ✈️ -airplane departure 🛫 -airplane arrival 🛬 -rocket 🚀 -satellite 🛰 -seat 💺 -canoe 🛶 -sailboat ⛵️ -motor boat 🛥 -speedboat 🚤 -passenger ship 🛳 -ferry ⛴ -ship 🚢 -anchor ⚓️ -construction 🚧 -fuel pump ⛽️ -bus stop 🚏 -vertical traffic light 🚦 -horizontal traffic light 🚥 -world map 🗺 -moai 🗿 -Statue of Liberty 🗽 -fountain ⛲️ -Tokyo tower 🗼 -castle 🏰 -Japanese castle 🏯 -stadium 🏟 -ferris wheel 🎡 -roller coaster 🎢 -carousel horse 🎠 -umbrella on ground ⛱ -beach with umbrella 🏖 -desert island 🏝 -mountain ⛰ -snow-capped mountain 🏔 -mount fuji 🗻 -volcano 🌋 -desert 🏜 -camping 🏕 -tent ⛺️ -railway track 🛤 -motorway 🛣 -building construction 🏗 -factory 🏭 -house 🏠 -house with garden 🏡 -house 🏘 -derelict house 🏚 -office building 🏢 -department store 🏬 -Japanese post office 🏣 -post office 🏤 -hospital 🏥 -bank 🏦 -hotel 🏨 -convenience store 🏪 -school 🏫 -love hotel 🏩 -wedding 💒 -classical building 🏛 -church ⛪️ -mosque 🕌 -synagogue 🕍 -kaaba 🕋 -shinto shrine ⛩ -map of Japan 🗾 -moon viewing ceremony 🎑 -national park 🏞 -sunrise 🌅 -sunrise over mountains 🌄 -shooting star 🌠 -sparkler 🎇 -fireworks 🎆 -sunset 🌇 -cityscape at dusk 🌆 -cityscape 🏙 -night with stars 🌃 -milky way 🌌 -bridge at night 🌉 -foggy 🌁 -watch ⌚️ -mobile phone 📱 -mobile phone with arrow 📲 -laptop computer 💻 -keyboard ⌨️ -desktop computer 🖥 -printer 🖨 -computer mouse 🖱 -trackball 🖲 -joystick 🕹 -clamp 🗜 -computer disk 💽 -floppy disk 💾 -optical disk 💿 -dvd 📀 -videocassette 📼 -camera 📷 -camera with flash 📸 -video camera 📹 -movie camera 🎥 -film projector 📽 -film frames 🎞 -telephone receiver 📞 -telephone ☎️ -pager 📟 -fax machine 📠 -television 📺 -radio 📻 -studio microphone 🎙 -level slider 🎚 -control knobs 🎛 -stopwatch ⏱ -timer clock ⏲ -alarm clock ⏰ -mantelpiece clock 🕰 -hourglass ⌛️ -hourglass with flowing sand ⏳ -satellite antenna 📡 -battery 🔋 -electric plug 🔌 -light bulb 💡 -flashlight 🔦 -candle 🕯 -wastebasket 🗑 -oil drum 🛢 -money with wings 💸 -dollar banknote 💵 -yen banknote 💴 -euro banknote 💶 -pound banknote 💷 -money bag 💰 -credit card 💳 -gem stone 💎 -balance scale ⚖️ -wrench 🔧 -hammer 🔨 -hammer and pick ⚒ -hammer and wrench 🛠 -pick ⛏ -nut and bolt 🔩 -gear ⚙️ -chains ⛓ -pistol 🔫 -bomb 💣 -kitchen knife 🔪 -dagger 🗡 -crossed swords ⚔️ -shield 🛡 -cigarette 🚬 -coffin ⚰️ -funeral urn ⚱️ -amphora 🏺 -crystal ball 🔮 -prayer beads 📿 -barber pole 💈 -alembic ⚗️ -telescope 🔭 -microscope 🔬 -hole 🕳 -pill 💊 -syringe 💉 -thermometer 🌡 -toilet 🚽 -potable water 🚰 -shower 🚿 -bathtub 🛁 -person taking bath 🛀 -bellhop bell 🛎 -key 🔑 -old key 🗝 -door 🚪 -couch and lamp 🛋 -bed 🛏 -person in bed 🛌 -framed picture 🖼 -shopping bags 🛍 -shopping cart 🛒 -wrapped gift 🎁 -balloon 🎈 -carp streamer 🎏 -ribbon 🎀 -confetti ball 🎊 -party popper 🎉 -Japanese dolls 🎎 -red paper lantern 🏮 -wind chime 🎐 -envelope ✉️ -envelope with arrow 📩 -incoming envelope 📨 -e-mail 📧 -love letter 💌 -inbox tray 📥 -outbox tray 📤 -package 📦 -label 🏷 -closed mailbox with lowered flag 📪 -closed mailbox with raised flag 📫 -open mailbox with raised flag 📬 -open mailbox with lowered flag 📭 -postbox 📮 -postal horn 📯 -scroll 📜 -page with curl 📃 -page facing up 📄 -bookmark tabs 📑 -bar chart 📊 -chart increasing 📈 -chart decreasing 📉 -spiral notepad 🗒 -spiral calendar 🗓 -tear-off calendar 📆 -calendar 📅 -card index 📇 -card file box 🗃 -ballot box with ballot 🗳 -file cabinet 🗄 -clipboard 📋 -file folder 📁 -open file folder 📂 -card index dividers 🗂 -rolled-up newspaper 🗞 -newspaper 📰 -notebook 📓 -notebook with decorative cover 📔 -ledger 📒 -closed book 📕 -green book 📗 -blue book 📘 -orange book 📙 -books 📚 -open book 📖 -bookmark 🔖 -link 🔗 -paperclip 📎 -linked paperclips 🖇 -triangular ruler 📐 -straight ruler 📏 -pushpin 📌 -round pushpin 📍 -scissors ✂️ -pen 🖊 -fountain pen 🖋 -black nib ✒️ -paintbrush 🖌 -crayon 🖍 -memo 📝 -pencil ✏️ -left-pointing magnifying glass 🔍 -right-pointing magnifying glass 🔎 -locked with pen 🔏 -locked with key 🔐 -locked 🔒 -unlocked 🔓 -red heart ❤️ -yellow heart 💛 -green heart 💚 -blue heart 💙 -purple heart 💜 -black heart 🖤 -broken heart 💔 -heavy heart exclamation ❣️ -two hearts 💕 -revolving hearts 💞 -beating heart 💓 -growing heart 💗 -sparkling heart 💖 -heart with arrow 💘 -heart with ribbon 💝 -heart decoration 💟 -peace symbol ☮️ -latin cross ✝️ -star and crescent ☪️ -om 🕉 -wheel of dharma ☸️ -star of David ✡️ -dotted six-pointed star 🔯 -menorah 🕎 -yin yang ☯️ -orthodox cross ☦️ -place of worship 🛐 -Ophiuchus ⛎ -Aries ♈️ -Taurus ♉️ -Gemini ♊️ -Cancer ♋️ -Leo ♌️ -Virgo ♍️ -Libra ♎️ -Scorpius ♏️ -Sagittarius ♐️ -Capricorn ♑️ -Aquarius ♒️ -Pisces ♓️ -ID button 🆔 -atom symbol ⚛️ -Japanese “acceptable” button 🉑 -radioactive ☢️ -biohazard ☣️ -mobile phone off 📴 -vibration mode 📳 -Japanese “not free of charge” button 🈶 -Japanese “free of charge” button 🈚️ -Japanese “application” button 🈸 -Japanese “open for business” button 🈺 -Japanese “monthly amount” button 🈷️ -eight-pointed star ✴️ -VS button 🆚 -white flower 💮 -Japanese “bargain” button 🉐 -Japanese “secret” button ㊙️ -Japanese “congratulations” button ㊗️ -Japanese “passing grade” button 🈴 -Japanese “no vacancy” button 🈵 -Japanese “discount” button 🈹 -Japanese “prohibited” button 🈲 -A button (blood type) 🅰️ -B button (blood type) 🅱️ -AB button (blood type) 🆎 -CL button 🆑 -O button (blood type) 🅾️ -SOS button 🆘 -cross mark ❌ -heavy large circle ⭕️ -stop sign 🛑 -no entry ⛔️ -name badge 📛 -prohibited 🚫 -hundred points 💯 -anger symbol 💢 -hot springs ♨️ -no pedestrians 🚷 -no littering 🚯 -no bicycles 🚳 -non-potable water 🚱 -no one under eighteen 🔞 -no mobile phones 📵 -no smoking 🚭 -exclamation mark ❗️ -white exclamation mark ❕ -question mark ❓ -white question mark ❔ -double exclamation mark ‼️ -exclamation question mark ⁉️ -dim button 🔅 -bright button 🔆 -part alternation mark 〽️ -warning ⚠️ -children crossing 🚸 -trident emblem 🔱 -fleur-de-lis ⚜️ -Japanese symbol for beginner 🔰 -recycling symbol ♻️ -white heavy check mark ✅ -Japanese “reserved” button 🈯️ -chart increasing with yen 💹 -sparkle ❇️ -eight-spoked asterisk ✳️ -cross mark button ❎ -globe with meridians 🌐 -diamond with a dot 💠 -circled M Ⓜ️ -cyclone 🌀 -zzz 💤 -ATM sign 🏧 -water closet 🚾 -wheelchair symbol ♿️ -P button 🅿️ -Japanese “vacancy” button 🈳 -Japanese “service charge” button 🈂️ -passport control 🛂 -customs 🛃 -baggage claim 🛄 -left luggage 🛅 -men’s room 🚹 -women’s room 🚺 -baby symbol 🚼 -restroom 🚻 -litter in bin sign 🚮 -cinema 🎦 -antenna bars 📶 -Japanese “here” button 🈁 -input symbols 🔣 -information ℹ️ -input latin letters 🔤 -input latin lowercase 🔡 -input latin uppercase 🔠 -NG button 🆖 -OK button 🆗 -UP! button 🆙 -COOL button 🆒 -NEW button 🆕 -FREE button 🆓 -keycap: 0 0️⃣ -keycap: 1 1️⃣ -keycap: 2 2️⃣ -keycap: 3 3️⃣ -keycap: 4 4️⃣ -keycap: 5 5️⃣ -keycap: 6 6️⃣ -keycap: 7 7️⃣ -keycap: 8 8️⃣ -keycap: 9 9️⃣ -keycap 10 🔟 -input numbers 🔢 -keycap: # #️⃣ -keycap: * *️⃣ -play button ▶️ -pause button ⏸ -play or pause button ⏯ -stop button ⏹ -record button ⏺ -next track button ⏭ -last track button ⏮ -fast-forward button ⏩ -fast reverse button ⏪ -fast up button ⏫ -fast down button ⏬ -reverse button ◀️ -up button 🔼 -down button 🔽 -right arrow ➡️ -left arrow ⬅️ -up arrow ⬆️ -down arrow ⬇️ -up-right arrow ↗️ -down-right arrow ↘️ -down-left arrow ↙️ -up-left arrow ↖️ -up-down arrow ↕️ -left-right arrow ↔️ -left arrow curving right ↪️ -right arrow curving left ↩️ -right arrow curving up ⤴️ -right arrow curving down ⤵️ -shuffle tracks button 🔀 -repeat button 🔁 -repeat single button 🔂 -anticlockwise arrows button 🔄 -clockwise vertical arrows 🔃 -musical note 🎵 -musical notes 🎶 -heavy plus sign ➕ -heavy minus sign ➖ -heavy division sign ➗ -heavy multiplication x ✖️ -heavy dollar sign 💲 -currency exchange 💱 -trade mark ™️ -copyright ©️ -registered ®️ -wavy dash 〰️ -curly loop ➰ -double curly loop ➿ -END arrow 🔚 -BACK arrow 🔙 -ON! arrow 🔛 -TOP arrow 🔝 -SOON arrow 🔜 -heavy check mark ✔️ -ballot box with check ☑️ -radio button 🔘 -white circle ⚪️ -black circle ⚫️ -red circle 🔴 -blue circle 🔵 -red triangle pointed up 🔺 -red triangle pointed down 🔻 -small orange diamond 🔸 -small blue diamond 🔹 -large orange diamond 🔶 -large blue diamond 🔷 -white square button 🔳 -black square button 🔲 -black small square ▪️ -white small square ▫️ -black medium-small square ◾️ -white medium-small square ◽️ -black medium square ◼️ -white medium square ◻️ -black large square ⬛️ -white large square ⬜️ -speaker low volume 🔈 -muted speaker 🔇 -speaker medium volume 🔉 -speaker high volume 🔊 -bell 🔔 -bell with slash 🔕 -megaphone 📣 -loudspeaker 📢 -eye in speech bubble 👁‍🗨 -speech balloon 💬 -thought balloon 💭 -right anger bubble 🗯 -spade suit ♠️ -club suit ♣️ -heart suit ♥️ -diamond suit ♦️ -joker 🃏 -flower playing cards 🎴 -mahjong red dragon 🀄️ -one o’clock 🕐 -two o’clock 🕑 -three o’clock 🕒 -four o’clock 🕓 -five o’clock 🕔 -six o’clock 🕕 -seven o’clock 🕖 -eight o’clock 🕗 -nine o’clock 🕘 -ten o’clock 🕙 -eleven o’clock 🕚 -twelve o’clock 🕛 -one-thirty 🕜 -two-thirty 🕝 -three-thirty 🕞 -four-thirty 🕟 -five-thirty 🕠 -six-thirty 🕡 -seven-thirty 🕢 -eight-thirty 🕣 -nine-thirty 🕤 -ten-thirty 🕥 -eleven-thirty 🕦 -twelve-thirty 🕧 -white flag 🏳️ -black flag 🏴 -chequered flag 🏁 -triangular flag 🚩 -rainbow flag 🏳️‍🌈 -Afghanistan 🇦🇫 -Åland Islands 🇦🇽 -Albania 🇦🇱 -Algeria 🇩🇿 -American Samoa 🇦🇸 -Andorra 🇦🇩 -Angola 🇦🇴 -Anguilla 🇦🇮 -Antarctica 🇦🇶 -Antigua & Barbuda 🇦🇬 -Argentina 🇦🇷 -Armenia 🇦🇲 -Aruba 🇦🇼 -Australia 🇦🇺 -Austria 🇦🇹 -Azerbaijan 🇦🇿 -Bahamas 🇧🇸 -Bahrain 🇧🇭 -Bangladesh 🇧🇩 -Barbados 🇧🇧 -Belarus 🇧🇾 -Belgium 🇧🇪 -Belize 🇧🇿 -Benin 🇧🇯 -Bermuda 🇧🇲 -Bhutan 🇧🇹 -Bolivia 🇧🇴 -Caribbean Netherlands 🇧🇶 -Bosnia & Herzegovina 🇧🇦 -Botswana 🇧🇼 -Brazil 🇧🇷 -British Indian Ocean Territory 🇮🇴 -British Virgin Islands 🇻🇬 -Brunei 🇧🇳 -Bulgaria 🇧🇬 -Burkina Faso 🇧🇫 -Burundi 🇧🇮 -Cape Verde 🇨🇻 -Cambodia 🇰🇭 -Cameroon 🇨🇲 -Canada 🇨🇦 -Canary Islands 🇮🇨 -Cayman Islands 🇰🇾 -Central African Republic 🇨🇫 -Chad 🇹🇩 -Chile 🇨🇱 -China 🇨🇳 -Christmas Island 🇨🇽 -Cocos (Keeling) Islands 🇨🇨 -Colombia 🇨🇴 -Comoros 🇰🇲 -Congo - Brazzaville 🇨🇬 -Congo - Kinshasa 🇨🇩 -Cook Islands 🇨🇰 -Costa Rica 🇨🇷 -Côte d’Ivoire 🇨🇮 -Croatia 🇭🇷 -Cuba 🇨🇺 -Curaçao 🇨🇼 -Cyprus 🇨🇾 -Czech Republic 🇨🇿 -Denmark 🇩🇰 -Djibouti 🇩🇯 -Dominica 🇩🇲 -Dominican Republic 🇩🇴 -Ecuador 🇪🇨 -Egypt 🇪🇬 -El Salvador 🇸🇻 -Equatorial Guinea 🇬🇶 -Eritrea 🇪🇷 -Estonia 🇪🇪 -Ethiopia 🇪🇹 -European Union 🇪🇺 -Falkland Islands 🇫🇰 -Faroe Islands 🇫🇴 -Fiji 🇫🇯 -Finland 🇫🇮 -France 🇫🇷 -French Guiana 🇬🇫 -French Polynesia 🇵🇫 -French Southern Territories 🇹🇫 -Gabon 🇬🇦 -Gambia 🇬🇲 -Georgia 🇬🇪 -Germany 🇩🇪 -Ghana 🇬🇭 -Gibraltar 🇬🇮 -Greece 🇬🇷 -Greenland 🇬🇱 -Grenada 🇬🇩 -Guadeloupe 🇬🇵 -Guam 🇬🇺 -Guatemala 🇬🇹 -Guernsey 🇬🇬 -Guinea 🇬🇳 -Guinea-Bissau 🇬🇼 -Guyana 🇬🇾 -Haiti 🇭🇹 -Honduras 🇭🇳 -Hong Kong SAR China 🇭🇰 -Hungary 🇭🇺 -Iceland 🇮🇸 -India 🇮🇳 -Indonesia 🇮🇩 -Iran 🇮🇷 -Iraq 🇮🇶 -Ireland 🇮🇪 -Isle of Man 🇮🇲 -Israel 🇮🇱 -Italy 🇮🇹 -Jamaica 🇯🇲 -Japan 🇯🇵 -crossed flags 🎌 -Jersey 🇯🇪 -Jordan 🇯🇴 -Kazakhstan 🇰🇿 -Kenya 🇰🇪 -Kiribati 🇰🇮 -Kosovo 🇽🇰 -Kuwait 🇰🇼 -Kyrgyzstan 🇰🇬 -Laos 🇱🇦 -Latvia 🇱🇻 -Lebanon 🇱🇧 -Lesotho 🇱🇸 -Liberia 🇱🇷 -Libya 🇱🇾 -Liechtenstein 🇱🇮 -Lithuania 🇱🇹 -Luxembourg 🇱🇺 -Macau SAR China 🇲🇴 -Macedonia 🇲🇰 -Madagascar 🇲🇬 -Malawi 🇲🇼 -Malaysia 🇲🇾 -Maldives 🇲🇻 -Mali 🇲🇱 -Malta 🇲🇹 -Marshall Islands 🇲🇭 -Martinique 🇲🇶 -Mauritania 🇲🇷 -Mauritius 🇲🇺 -Mayotte 🇾🇹 -Mexico 🇲🇽 -Micronesia 🇫🇲 -Moldova 🇲🇩 -Monaco 🇲🇨 -Mongolia 🇲🇳 -Montenegro 🇲🇪 -Montserrat 🇲🇸 -Morocco 🇲🇦 -Mozambique 🇲🇿 -Myanmar (Burma) 🇲🇲 -Namibia 🇳🇦 -Nauru 🇳🇷 -Nepal 🇳🇵 -Netherlands 🇳🇱 -New Caledonia 🇳🇨 -New Zealand 🇳🇿 -Nicaragua 🇳🇮 -Niger 🇳🇪 -Nigeria 🇳🇬 -Niue 🇳🇺 -Norfolk Island 🇳🇫 -Northern Mariana Islands 🇲🇵 -North Korea 🇰🇵 -Norway 🇳🇴 -Oman 🇴🇲 -Pakistan 🇵🇰 -Palau 🇵🇼 -Palestinian Territories 🇵🇸 -Panama 🇵🇦 -Papua New Guinea 🇵🇬 -Paraguay 🇵🇾 -Peru 🇵🇪 -Philippines 🇵🇭 -Pitcairn Islands 🇵🇳 -Poland 🇵🇱 -Portugal 🇵🇹 -Puerto Rico 🇵🇷 -Qatar 🇶🇦 -Réunion 🇷🇪 -Romania 🇷🇴 -Russia 🇷🇺 -Rwanda 🇷🇼 -St. Barthélemy 🇧🇱 -St. Helena 🇸🇭 -St. Kitts & Nevis 🇰🇳 -St. Lucia 🇱🇨 -St. Pierre & Miquelon 🇵🇲 -St. Vincent & Grenadines 🇻🇨 -Samoa 🇼🇸 -San Marino 🇸🇲 -São Tomé & Príncipe 🇸🇹 -Saudi Arabia 🇸🇦 -Senegal 🇸🇳 -Serbia 🇷🇸 -Seychelles 🇸🇨 -Sierra Leone 🇸🇱 -Singapore 🇸🇬 -Sint Maarten 🇸🇽 -Slovakia 🇸🇰 -Slovenia 🇸🇮 -Solomon Islands 🇸🇧 -Somalia 🇸🇴 -South Africa 🇿🇦 -South Georgia & South Sandwich Islands 🇬🇸 -South Korea 🇰🇷 -South Sudan 🇸🇸 -Spain 🇪🇸 -Sri Lanka 🇱🇰 -Sudan 🇸🇩 -Suriname 🇸🇷 -Swaziland 🇸🇿 -Sweden 🇸🇪 -Switzerland 🇨🇭 -Syria 🇸🇾 -Taiwan 🇹🇼 -Tajikistan 🇹🇯 -Tanzania 🇹🇿 -Thailand 🇹🇭 -Timor-Leste 🇹🇱 -Togo 🇹🇬 -Tokelau 🇹🇰 -Tonga 🇹🇴 -Trinidad & Tobago 🇹🇹 -Tunisia 🇹🇳 -Turkey 🇹🇷 -Turkmenistan 🇹🇲 -Turks & Caicos Islands 🇹🇨 -Tuvalu 🇹🇻 -Uganda 🇺🇬 -Ukraine 🇺🇦 -United Arab Emirates 🇦🇪 -United Kingdom 🇬🇧 -United States 🇺🇸 -U.S. Virgin Islands 🇻🇮 -Uruguay 🇺🇾 -Uzbekistan 🇺🇿 -Vanuatu 🇻🇺 -Vatican City 🇻🇦 -Venezuela 🇻🇪 -Vietnam 🇻🇳 -Wallis & Futuna 🇼🇫 -Western Sahara 🇪🇭 -Yemen 🇾🇪 -Zambia 🇿🇲 -Zimbabwe 🇿🇼 diff --git a/scripts/rotate-mpris-player.sh b/scripts/rotate-mpris-player.sh deleted file mode 100755 index 863501e..0000000 --- a/scripts/rotate-mpris-player.sh +++ /dev/null @@ -1,28 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -mkdir -p "${HOME}/.cache/andreh/" -CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" -AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" -CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" - -pick_first() { - echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" -} - -if [[ "${CURRENT_PLAYER}" = "" ]]; then - pick_first -elif ! echo "${AVAILABLE_PLAYERS}" | grep -q "${CURRENT_PLAYER}"; then - # Unknown $CURRENT_PLAYER, pick anyone - pick_first -else - INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" - LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" - if [[ "${INDEX}" = "${LENGTH}" ]]; then - # Reached the end of the $AVAILABLE_PLAYERS list, wrapping - pick_first - else - # Get the next player instead - echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" - fi -fi diff --git a/scripts/single-monitor.sh b/scripts/single-monitor.sh deleted file mode 100755 index 83d0455..0000000 --- a/scripts/single-monitor.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -eux -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/scripts/three-monitors.sh b/scripts/three-monitors.sh deleted file mode 100755 index d1ef7c6..0000000 --- a/scripts/three-monitors.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/scripts/xmobar-mpris.sh b/scripts/xmobar-mpris.sh deleted file mode 100755 index a2af8c4..0000000 --- a/scripts/xmobar-mpris.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -CUR_PATH="${HOME}/.cache/andreh/mpris-player.txt" - -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - -default_status() { - CUR="${1}" - printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" -} - -main() { - CUR="$(cat "${CUR_PATH}")" - if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then - printf "%s\n" "${CUR}" - else - case "${CUR}" in - cmus) - default_status "${CUR}" - ;; - firefox*) - printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" - ;; - vlc) - printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" - ;; - *) - default_status "${CUR}" - ;; - esac - fi -} -export -f main - -mkdir -p "$(dirname "${CUR_PATH}")" -touch "${CUR_PATH}" - -while true -do - main - sleep 1 -done diff --git a/scripts/xmobar-notmuch.sh b/scripts/xmobar-notmuch.sh deleted file mode 100755 index f174a8e..0000000 --- a/scripts/xmobar-notmuch.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -eu - -while true; do - printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" - if acpi -a | grep -q off-line; then - sleep $((60 * 15)) - else - sleep $((60 * 1)) - fi -done diff --git a/scripts/zero-brightness.sh b/scripts/zero-brightness.sh deleted file mode 100755 index a748724..0000000 --- a/scripts/zero-brightness.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -eux - -# base dir for backlight class -BASEDIR='/sys/class/backlight/' - -# get the backlight handler -HANDLER="${BASEDIR}$(ls "${BASEDIR}")" - -# set the new brightness value -echo 0 > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/xmonad/scripts/brightness.sh b/xmonad/scripts/brightness.sh new file mode 100755 index 0000000..29dc05b --- /dev/null +++ b/xmonad/scripts/brightness.sh @@ -0,0 +1,29 @@ +#!/bin/sh -eux + +BRIGHTNESS_DIFF="${1}" + +# base dir for backlight class +BASEDIR='/sys/class/backlight/' + +# get the backlight handler +HANDLER="${BASEDIR}$(ls "${BASEDIR}")" + +# get current brightness +OLD_BRIGHTNESS="$(cat "${HANDLER}/brightness")" + +# get max brightness +MAX_BRIGHTNESS="$(cat "${HANDLER}/max_brightness")" + +# get current brightness % +OLD_BRIGHTNESS_P=$(( 100 * "${OLD_BRIGHTNESS}" / "${MAX_BRIGHTNESS}" )) + +# calculate new brightness %, bounded by 0 100 range +NEW_BRIGHTNESS_P=$(("${OLD_BRIGHTNESS_P}" + "${BRIGHTNESS_DIFF}")) +NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" > 100 ? 100 : "${NEW_BRIGHTNESS_P}")) +NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) + +# calculate new brightness value +NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) + +# set the new brightness value +echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/xmonad/scripts/dmenu-emoji.sh b/xmonad/scripts/dmenu-emoji.sh new file mode 100755 index 0000000..fef7835 --- /dev/null +++ b/xmonad/scripts/dmenu-emoji.sh @@ -0,0 +1,13 @@ +#!/bin/sh -eux + +# Derived from: +# https://github.com/porras/dmenu-emoji + +LIST="$HOME/dev/libre/dotfiles/xmonad/scripts/emoji-list.txt" + +dmenu \ + -l 20 \ + -i \ + -p 'Emoji: ' -fn Monospace-18 \ + < "$LIST" \ + | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip diff --git a/xmonad/scripts/dmenu-vlc.sh b/xmonad/scripts/dmenu-vlc.sh new file mode 100755 index 0000000..c42e26f --- /dev/null +++ b/xmonad/scripts/dmenu-vlc.sh @@ -0,0 +1,9 @@ +#!/bin/sh -eu + +URL="$(xsel -bo)" + +res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" + +if [ "$res" = 'yes' ]; then + vlc "$URL" +fi diff --git a/xmonad/scripts/emoji-list.txt b/xmonad/scripts/emoji-list.txt new file mode 100755 index 0000000..06b5a58 --- /dev/null +++ b/xmonad/scripts/emoji-list.txt @@ -0,0 +1,1432 @@ +grinning face 😀 +smiling face with open mouth 😃 +smiling face with open mouth & smiling eyes 😄 +grinning face with smiling eyes 😁 +smiling face with open mouth & closed eyes 😆 +smiling face with open mouth & cold sweat 😅 +face with tears of joy 😂 +rolling on the floor laughing 🤣 +smiling face ☺️ +smiling face with smiling eyes 😊 +smiling face with halo 😇 +slightly smiling face 🙂 +upside-down face 🙃 +winking face 😉 +relieved face 😌 +smiling face with heart-eyes 😍 +face blowing a kiss 😘 +kissing face 😗 +kissing face with smiling eyes 😙 +kissing face with closed eyes 😚 +face savouring delicious food 😋 +face with stuck-out tongue & winking eye 😜 +face with stuck-out tongue & closed eyes 😝 +face with stuck-out tongue 😛 +money-mouth face 🤑 +hugging face 🤗 +nerd face 🤓 +smiling face with sunglasses 😎 +clown face 🤡 +cowboy hat face 🤠 +smirking face 😏 +unamused face 😒 +disappointed face 😞 +pensive face 😔 +worried face 😟 +confused face 😕 +slightly frowning face 🙁 +frowning face ☹️ +persevering face 😣 +confounded face 😖 +tired face 😫 +weary face 😩 +face with steam from nose 😤 +angry face 😠 +pouting face 😡 +face without mouth 😶 +neutral face 😐 +expressionless face 😑 +hushed face 😯 +frowning face with open mouth 😦 +anguished face 😧 +face with open mouth 😮 +astonished face 😲 +dizzy face 😵 +flushed face 😳 +face screaming in fear 😱 +fearful face 😨 +face with open mouth & cold sweat 😰 +crying face 😢 +disappointed but relieved face 😥 +drooling face 🤤 +loudly crying face 😭 +face with cold sweat 😓 +sleepy face 😪 +sleeping face 😴 +face with rolling eyes 🙄 +thinking face 🤔 +lying face 🤥 +grimacing face 😬 +zipper-mouth face 🤐 +nauseated face 🤢 +sneezing face 🤧 +face with medical mask 😷 +face with thermometer 🤒 +face with head-bandage 🤕 +smiling face with horns 😈 +angry face with horns 👿 +ogre 👹 +goblin 👺 +pile of poo 💩 +ghost 👻 +skull 💀 +skull and crossbones ☠️ +alien 👽 +alien monster 👾 +robot face 🤖 +jack-o-lantern 🎃 +smiling cat face with open mouth 😺 +grinning cat face with smiling eyes 😸 +cat face with tears of joy 😹 +smiling cat face with heart-eyes 😻 +cat face with wry smile 😼 +kissing cat face with closed eyes 😽 +weary cat face 🙀 +crying cat face 😿 +pouting cat face 😾 +open hands 👐 +raising hands 🙌 +clapping hands 👏 +folded hands 🙏 +handshake 🤝 +thumbs up 👍 +thumbs down 👎 +oncoming fist 👊 +raised fist ✊ +left-facing fist 🤛 +right-facing fist 🤜 +crossed fingers 🤞 +victory hand ✌️ +sign of the horns 🤘 +OK hand 👌 +backhand index pointing left 👈 +backhand index pointing right 👉 +backhand index pointing up 👆 +backhand index pointing down 👇 +index pointing up ☝️ +raised hand ✋ +raised back of hand 🤚 +raised hand with fingers splayed 🖐 +vulcan salute 🖖 +waving hand 👋 +call me hand 🤙 +flexed biceps 💪 +middle finger 🖕 +writing hand ✍️ +selfie 🤳 +nail polish 💅 +ring 💍 +lipstick 💄 +kiss mark 💋 +mouth 👄 +tongue 👅 +ear 👂 +nose 👃 +footprints 👣 +eye 👁 +eyes 👀 +speaking head 🗣 +bust in silhouette 👤 +busts in silhouette 👥 +baby 👶 +boy 👦 +girl 👧 +man 👨 +woman 👩 +blond-haired woman 👱‍♀ +blond-haired person 👱 +old man 👴 +old woman 👵 +man with Chinese cap 👲 +woman wearing turban 👳‍♀ +person wearing turban 👳 +woman police officer 👮‍♀ +police officer 👮 +woman construction worker 👷‍♀ +construction worker 👷 +woman guard 💂‍♀ +guard 💂 +woman detective 🕵️‍♀️ +detective 🕵 +woman health worker 👩‍⚕ +man health worker 👨‍⚕ +woman farmer 👩‍🌾 +man farmer 👨‍🌾 +woman cook 👩‍🍳 +man cook 👨‍🍳 +woman student 👩‍🎓 +man student 👨‍🎓 +woman singer 👩‍🎤 +man singer 👨‍🎤 +woman teacher 👩‍🏫 +man teacher 👨‍🏫 +woman factory worker 👩‍🏭 +man factory worker 👨‍🏭 +woman technologist 👩‍💻 +man technologist 👨‍💻 +woman office worker 👩‍💼 +man office worker 👨‍💼 +woman mechanic 👩‍🔧 +man mechanic 👨‍🔧 +woman scientist 👩‍🔬 +man scientist 👨‍🔬 +woman artist 👩‍🎨 +man artist 👨‍🎨 +woman firefighter 👩‍🚒 +man firefighter 👨‍🚒 +woman pilot 👩‍✈ +man pilot 👨‍✈ +woman astronaut 👩‍🚀 +man astronaut 👨‍🚀 +woman judge 👩‍⚖ +man judge 👨‍⚖ +Mrs. Claus 🤶 +Santa Claus 🎅 +princess 👸 +prince 🤴 +bride with veil 👰 +man in tuxedo 🤵 +baby angel 👼 +pregnant woman 🤰 +woman bowing 🙇‍♀ +person bowing 🙇 +person tipping hand 💁 +man tipping hand 💁‍♂ +person gesturing NO 🙅 +man gesturing NO 🙅‍♂ +person gesturing OK 🙆 +man gesturing OK 🙆‍♂ +person raising hand 🙋 +man raising hand 🙋‍♂ +woman facepalming 🤦‍♀ +man facepalming 🤦‍♂ +woman shrugging 🤷‍♀ +man shrugging 🤷‍♂ +person pouting 🙎 +man pouting 🙎‍♂ +person frowning 🙍 +man frowning 🙍‍♂ +person getting haircut 💇 +man getting haircut 💇‍♂ +person getting massage 💆 +man getting massage 💆‍♂ +man in business suit levitating 🕴 +woman dancing 💃 +man dancing 🕺 +people with bunny ears partying 👯 +men with bunny ears partying 👯‍♂ +woman walking 🚶‍♀ +person walking 🚶 +woman running 🏃‍♀ +person running 🏃 +man and woman holding hands 👫 +two women holding hands 👭 +two men holding hands 👬 +couple with heart 💑 +couple with heart: woman woman 👩‍❤️‍👩 +couple with heart: man man 👨‍❤️‍👨 +kiss 💏 +kiss: woman woman 👩‍❤️‍💋‍👩 +kiss: man man 👨‍❤️‍💋‍👨 +family 👪 +family: man woman girl 👨‍👩‍👧 +family: man woman girl boy 👨‍👩‍👧‍👦 +family: man woman boy boy 👨‍👩‍👦‍👦 +family: man woman girl girl 👨‍👩‍👧‍👧 +family: woman woman boy 👩‍👩‍👦 +family: woman woman girl 👩‍👩‍👧 +family: woman woman girl boy 👩‍👩‍👧‍👦 +family: woman woman boy boy 👩‍👩‍👦‍👦 +family: woman woman girl girl 👩‍👩‍👧‍👧 +family: man man boy 👨‍👨‍👦 +family: man man girl 👨‍👨‍👧 +family: man man girl boy 👨‍👨‍👧‍👦 +family: man man boy boy 👨‍👨‍👦‍👦 +family: man man girl girl 👨‍👨‍👧‍👧 +family: woman boy 👩‍👦 +family: woman girl 👩‍👧 +family: woman girl boy 👩‍👧‍👦 +family: woman boy boy 👩‍👦‍👦 +family: woman girl girl 👩‍👧‍👧 +family: man boy 👨‍👦 +family: man girl 👨‍👧 +family: man girl boy 👨‍👧‍👦 +family: man boy boy 👨‍👦‍👦 +family: man girl girl 👨‍👧‍👧 +woman’s clothes 👚 +t-shirt 👕 +jeans 👖 +necktie 👔 +dress 👗 +bikini 👙 +kimono 👘 +high-heeled shoe 👠 +woman’s sandal 👡 +woman’s boot 👢 +man’s shoe 👞 +running shoe 👟 +woman’s hat 👒 +top hat 🎩 +graduation cap 🎓 +crown 👑 +rescue worker’s helmet ⛑ +school backpack 🎒 +clutch bag 👝 +purse 👛 +handbag 👜 +briefcase 💼 +glasses 👓 +sunglasses 🕶 +closed umbrella 🌂 +umbrella ☂️ +dog face 🐶 +cat face 🐱 +mouse face 🐭 +hamster face 🐹 +rabbit face 🐰 +fox face 🦊 +bear face 🐻 +panda face 🐼 +koala 🐨 +tiger face 🐯 +lion face 🦁 +cow face 🐮 +pig face 🐷 +pig nose 🐽 +frog face 🐸 +monkey face 🐵 +see-no-evil monkey 🙈 +hear-no-evil monkey 🙉 +speak-no-evil monkey 🙊 +monkey 🐒 +chicken 🐔 +penguin 🐧 +bird 🐦 +baby chick 🐤 +hatching chick 🐣 +front-facing baby chick 🐥 +duck 🦆 +eagle 🦅 +owl 🦉 +bat 🦇 +wolf face 🐺 +boar 🐗 +horse face 🐴 +unicorn face 🦄 +honeybee 🐝 +bug 🐛 +butterfly 🦋 +snail 🐌 +spiral shell 🐚 +lady beetle 🐞 +ant 🐜 +spider 🕷 +spider web 🕸 +turtle 🐢 +snake 🐍 +lizard 🦎 +scorpion 🦂 +crab 🦀 +squid 🦑 +octopus 🐙 +shrimp 🦐 +tropical fish 🐠 +fish 🐟 +blowfish 🐡 +dolphin 🐬 +shark 🦈 +spouting whale 🐳 +whale 🐋 +crocodile 🐊 +leopard 🐆 +tiger 🐅 +water buffalo 🐃 +ox 🐂 +cow 🐄 +deer 🦌 +camel 🐪 +two-hump camel 🐫 +elephant 🐘 +rhinoceros 🦏 +gorilla 🦍 +horse 🐎 +pig 🐖 +goat 🐐 +ram 🐏 +sheep 🐑 +dog 🐕 +poodle 🐩 +cat 🐈 +rooster 🐓 +turkey 🦃 +dove 🕊 +rabbit 🐇 +mouse 🐁 +rat 🐀 +chipmunk 🐿 +paw prints 🐾 +dragon 🐉 +dragon face 🐲 +cactus 🌵 +Christmas tree 🎄 +evergreen tree 🌲 +deciduous tree 🌳 +palm tree 🌴 +seedling 🌱 +herb 🌿 +shamrock ☘️ +four leaf clover 🍀 +pine decoration 🎍 +tanabata tree 🎋 +leaf fluttering in wind 🍃 +fallen leaf 🍂 +maple leaf 🍁 +mushroom 🍄 +sheaf of rice 🌾 +bouquet 💐 +tulip 🌷 +rose 🌹 +wilted flower 🥀 +sunflower 🌻 +blossom 🌼 +cherry blossom 🌸 +hibiscus 🌺 +globe showing Americas 🌎 +globe showing Europe-Africa 🌍 +globe showing Asia-Australia 🌏 +full moon 🌕 +waning gibbous moon 🌖 +last quarter moon 🌗 +waning crescent moon 🌘 +new moon 🌑 +waxing crescent moon 🌒 +first quarter moon 🌓 +waxing gibbous moon 🌔 +new moon face 🌚 +full moon with face 🌝 +sun with face 🌞 +first quarter moon with face 🌛 +last quarter moon with face 🌜 +crescent moon 🌙 +dizzy 💫 +white medium star ⭐️ +glowing star 🌟 +sparkles ✨ +high voltage ⚡️ +fire 🔥 +collision 💥 +comet ☄ +sun ☀️ +sun behind small cloud 🌤 +sun behind cloud ⛅️ +sun behind large cloud 🌥 +sun behind rain cloud 🌦 +rainbow 🌈 +cloud ☁️ +cloud with rain 🌧 +cloud with lightning and rain ⛈ +cloud with lightning 🌩 +cloud with snow 🌨 +snowman ☃️ +snowman without snow ⛄️ +snowflake ❄️ +wind face 🌬 +dashing away 💨 +tornado 🌪 +fog 🌫 +water wave 🌊 +droplet 💧 +sweat droplets 💦 +umbrella with rain drops ☔️ +green apple 🍏 +red apple 🍎 +pear 🍐 +tangerine 🍊 +lemon 🍋 +banana 🍌 +watermelon 🍉 +grapes 🍇 +strawberry 🍓 +melon 🍈 +cherries 🍒 +peach 🍑 +pineapple 🍍 +kiwi fruit 🥝 +avocado 🥑 +tomato 🍅 +eggplant 🍆 +cucumber 🥒 +carrot 🥕 +ear of corn 🌽 +hot pepper 🌶 +potato 🥔 +roasted sweet potato 🍠 +chestnut 🌰 +peanuts 🥜 +honey pot 🍯 +croissant 🥐 +bread 🍞 +baguette bread 🥖 +cheese wedge 🧀 +egg 🥚 +cooking 🍳 +bacon 🥓 +pancakes 🥞 +fried shrimp 🍤 +poultry leg 🍗 +meat on bone 🍖 +pizza 🍕 +hot dog 🌭 +hamburger 🍔 +french fries 🍟 +stuffed flatbread 🥙 +taco 🌮 +burrito 🌯 +green salad 🥗 +shallow pan of food 🥘 +spaghetti 🍝 +steaming bowl 🍜 +pot of food 🍲 +fish cake with swirl 🍥 +sushi 🍣 +bento box 🍱 +curry rice 🍛 +cooked rice 🍚 +rice ball 🍙 +rice cracker 🍘 +oden 🍢 +dango 🍡 +shaved ice 🍧 +ice cream 🍨 +soft ice cream 🍦 +shortcake 🍰 +birthday cake 🎂 +custard 🍮 +lollipop 🍭 +candy 🍬 +chocolate bar 🍫 +popcorn 🍿 +doughnut 🍩 +cookie 🍪 +glass of milk 🥛 +baby bottle 🍼 +hot beverage ☕️ +teacup without handle 🍵 +sake 🍶 +beer mug 🍺 +clinking beer mugs 🍻 +clinking glasses 🥂 +wine glass 🍷 +tumbler glass 🥃 +cocktail glass 🍸 +tropical drink 🍹 +bottle with popping cork 🍾 +spoon 🥄 +fork and knife 🍴 +fork and knife with plate 🍽 +soccer ball ⚽️ +basketball 🏀 +american football 🏈 +baseball ⚾️ +tennis 🎾 +volleyball 🏐 +rugby football 🏉 +pool 8 ball 🎱 +ping pong 🏓 +badminton 🏸 +goal net 🥅 +ice hockey 🏒 +field hockey 🏑 +cricket 🏏 +flag in hole ⛳️ +bow and arrow 🏹 +fishing pole 🎣 +boxing glove 🥊 +martial arts uniform 🥋 +ice skate ⛸ +skis 🎿 +skier ⛷ +snowboarder 🏂 +woman lifting weights 🏋️‍♀️ +person lifting weights 🏋 +person fencing 🤺 +women wrestling 🤼‍♀ +men wrestling 🤼‍♂ +woman cartwheeling 🤸‍♀ +man cartwheeling 🤸‍♂ +woman bouncing ball ⛹️‍♀️ +person bouncing ball ⛹ +woman playing handball 🤾‍♀ +man playing handball 🤾‍♂ +woman golfing 🏌️‍♀️ +person golfing 🏌 +woman surfing 🏄‍♀ +person surfing 🏄 +woman swimming 🏊‍♀ +person swimming 🏊 +woman playing water polo 🤽‍♀ +man playing water polo 🤽‍♂ +woman rowing boat 🚣‍♀ +person rowing boat 🚣 +horse racing 🏇 +woman biking 🚴‍♀ +person biking 🚴 +woman mountain biking 🚵‍♀ +person mountain biking 🚵 +running shirt 🎽 +sports medal 🏅 +military medal 🎖 +1st place medal 🥇 +2nd place medal 🥈 +3rd place medal 🥉 +trophy 🏆 +rosette 🏵 +reminder ribbon 🎗 +ticket 🎫 +admission tickets 🎟 +circus tent 🎪 +woman juggling 🤹‍♀ +man juggling 🤹‍♂ +performing arts 🎭 +artist palette 🎨 +clapper board 🎬 +microphone 🎤 +headphone 🎧 +musical score 🎼 +musical keyboard 🎹 +drum 🥁 +saxophone 🎷 +trumpet 🎺 +guitar 🎸 +violin 🎻 +game die 🎲 +direct hit 🎯 +bowling 🎳 +video game 🎮 +slot machine 🎰 +automobile 🚗 +taxi 🚕 +sport utility vehicle 🚙 +bus 🚌 +trolleybus 🚎 +racing car 🏎 +police car 🚓 +ambulance 🚑 +fire engine 🚒 +minibus 🚐 +delivery truck 🚚 +articulated lorry 🚛 +tractor 🚜 +kick scooter 🛴 +bicycle 🚲 +motor scooter 🛵 +motorcycle 🏍 +police car light 🚨 +oncoming police car 🚔 +oncoming bus 🚍 +oncoming automobile 🚘 +oncoming taxi 🚖 +aerial tramway 🚡 +mountain cableway 🚠 +suspension railway 🚟 +railway car 🚃 +tram car 🚋 +mountain railway 🚞 +monorail 🚝 +high-speed train 🚄 +high-speed train with bullet nose 🚅 +light rail 🚈 +locomotive 🚂 +train 🚆 +metro 🚇 +tram 🚊 +station 🚉 +helicopter 🚁 +small airplane 🛩 +airplane ✈️ +airplane departure 🛫 +airplane arrival 🛬 +rocket 🚀 +satellite 🛰 +seat 💺 +canoe 🛶 +sailboat ⛵️ +motor boat 🛥 +speedboat 🚤 +passenger ship 🛳 +ferry ⛴ +ship 🚢 +anchor ⚓️ +construction 🚧 +fuel pump ⛽️ +bus stop 🚏 +vertical traffic light 🚦 +horizontal traffic light 🚥 +world map 🗺 +moai 🗿 +Statue of Liberty 🗽 +fountain ⛲️ +Tokyo tower 🗼 +castle 🏰 +Japanese castle 🏯 +stadium 🏟 +ferris wheel 🎡 +roller coaster 🎢 +carousel horse 🎠 +umbrella on ground ⛱ +beach with umbrella 🏖 +desert island 🏝 +mountain ⛰ +snow-capped mountain 🏔 +mount fuji 🗻 +volcano 🌋 +desert 🏜 +camping 🏕 +tent ⛺️ +railway track 🛤 +motorway 🛣 +building construction 🏗 +factory 🏭 +house 🏠 +house with garden 🏡 +house 🏘 +derelict house 🏚 +office building 🏢 +department store 🏬 +Japanese post office 🏣 +post office 🏤 +hospital 🏥 +bank 🏦 +hotel 🏨 +convenience store 🏪 +school 🏫 +love hotel 🏩 +wedding 💒 +classical building 🏛 +church ⛪️ +mosque 🕌 +synagogue 🕍 +kaaba 🕋 +shinto shrine ⛩ +map of Japan 🗾 +moon viewing ceremony 🎑 +national park 🏞 +sunrise 🌅 +sunrise over mountains 🌄 +shooting star 🌠 +sparkler 🎇 +fireworks 🎆 +sunset 🌇 +cityscape at dusk 🌆 +cityscape 🏙 +night with stars 🌃 +milky way 🌌 +bridge at night 🌉 +foggy 🌁 +watch ⌚️ +mobile phone 📱 +mobile phone with arrow 📲 +laptop computer 💻 +keyboard ⌨️ +desktop computer 🖥 +printer 🖨 +computer mouse 🖱 +trackball 🖲 +joystick 🕹 +clamp 🗜 +computer disk 💽 +floppy disk 💾 +optical disk 💿 +dvd 📀 +videocassette 📼 +camera 📷 +camera with flash 📸 +video camera 📹 +movie camera 🎥 +film projector 📽 +film frames 🎞 +telephone receiver 📞 +telephone ☎️ +pager 📟 +fax machine 📠 +television 📺 +radio 📻 +studio microphone 🎙 +level slider 🎚 +control knobs 🎛 +stopwatch ⏱ +timer clock ⏲ +alarm clock ⏰ +mantelpiece clock 🕰 +hourglass ⌛️ +hourglass with flowing sand ⏳ +satellite antenna 📡 +battery 🔋 +electric plug 🔌 +light bulb 💡 +flashlight 🔦 +candle 🕯 +wastebasket 🗑 +oil drum 🛢 +money with wings 💸 +dollar banknote 💵 +yen banknote 💴 +euro banknote 💶 +pound banknote 💷 +money bag 💰 +credit card 💳 +gem stone 💎 +balance scale ⚖️ +wrench 🔧 +hammer 🔨 +hammer and pick ⚒ +hammer and wrench 🛠 +pick ⛏ +nut and bolt 🔩 +gear ⚙️ +chains ⛓ +pistol 🔫 +bomb 💣 +kitchen knife 🔪 +dagger 🗡 +crossed swords ⚔️ +shield 🛡 +cigarette 🚬 +coffin ⚰️ +funeral urn ⚱️ +amphora 🏺 +crystal ball 🔮 +prayer beads 📿 +barber pole 💈 +alembic ⚗️ +telescope 🔭 +microscope 🔬 +hole 🕳 +pill 💊 +syringe 💉 +thermometer 🌡 +toilet 🚽 +potable water 🚰 +shower 🚿 +bathtub 🛁 +person taking bath 🛀 +bellhop bell 🛎 +key 🔑 +old key 🗝 +door 🚪 +couch and lamp 🛋 +bed 🛏 +person in bed 🛌 +framed picture 🖼 +shopping bags 🛍 +shopping cart 🛒 +wrapped gift 🎁 +balloon 🎈 +carp streamer 🎏 +ribbon 🎀 +confetti ball 🎊 +party popper 🎉 +Japanese dolls 🎎 +red paper lantern 🏮 +wind chime 🎐 +envelope ✉️ +envelope with arrow 📩 +incoming envelope 📨 +e-mail 📧 +love letter 💌 +inbox tray 📥 +outbox tray 📤 +package 📦 +label 🏷 +closed mailbox with lowered flag 📪 +closed mailbox with raised flag 📫 +open mailbox with raised flag 📬 +open mailbox with lowered flag 📭 +postbox 📮 +postal horn 📯 +scroll 📜 +page with curl 📃 +page facing up 📄 +bookmark tabs 📑 +bar chart 📊 +chart increasing 📈 +chart decreasing 📉 +spiral notepad 🗒 +spiral calendar 🗓 +tear-off calendar 📆 +calendar 📅 +card index 📇 +card file box 🗃 +ballot box with ballot 🗳 +file cabinet 🗄 +clipboard 📋 +file folder 📁 +open file folder 📂 +card index dividers 🗂 +rolled-up newspaper 🗞 +newspaper 📰 +notebook 📓 +notebook with decorative cover 📔 +ledger 📒 +closed book 📕 +green book 📗 +blue book 📘 +orange book 📙 +books 📚 +open book 📖 +bookmark 🔖 +link 🔗 +paperclip 📎 +linked paperclips 🖇 +triangular ruler 📐 +straight ruler 📏 +pushpin 📌 +round pushpin 📍 +scissors ✂️ +pen 🖊 +fountain pen 🖋 +black nib ✒️ +paintbrush 🖌 +crayon 🖍 +memo 📝 +pencil ✏️ +left-pointing magnifying glass 🔍 +right-pointing magnifying glass 🔎 +locked with pen 🔏 +locked with key 🔐 +locked 🔒 +unlocked 🔓 +red heart ❤️ +yellow heart 💛 +green heart 💚 +blue heart 💙 +purple heart 💜 +black heart 🖤 +broken heart 💔 +heavy heart exclamation ❣️ +two hearts 💕 +revolving hearts 💞 +beating heart 💓 +growing heart 💗 +sparkling heart 💖 +heart with arrow 💘 +heart with ribbon 💝 +heart decoration 💟 +peace symbol ☮️ +latin cross ✝️ +star and crescent ☪️ +om 🕉 +wheel of dharma ☸️ +star of David ✡️ +dotted six-pointed star 🔯 +menorah 🕎 +yin yang ☯️ +orthodox cross ☦️ +place of worship 🛐 +Ophiuchus ⛎ +Aries ♈️ +Taurus ♉️ +Gemini ♊️ +Cancer ♋️ +Leo ♌️ +Virgo ♍️ +Libra ♎️ +Scorpius ♏️ +Sagittarius ♐️ +Capricorn ♑️ +Aquarius ♒️ +Pisces ♓️ +ID button 🆔 +atom symbol ⚛️ +Japanese “acceptable” button 🉑 +radioactive ☢️ +biohazard ☣️ +mobile phone off 📴 +vibration mode 📳 +Japanese “not free of charge” button 🈶 +Japanese “free of charge” button 🈚️ +Japanese “application” button 🈸 +Japanese “open for business” button 🈺 +Japanese “monthly amount” button 🈷️ +eight-pointed star ✴️ +VS button 🆚 +white flower 💮 +Japanese “bargain” button 🉐 +Japanese “secret” button ㊙️ +Japanese “congratulations” button ㊗️ +Japanese “passing grade” button 🈴 +Japanese “no vacancy” button 🈵 +Japanese “discount” button 🈹 +Japanese “prohibited” button 🈲 +A button (blood type) 🅰️ +B button (blood type) 🅱️ +AB button (blood type) 🆎 +CL button 🆑 +O button (blood type) 🅾️ +SOS button 🆘 +cross mark ❌ +heavy large circle ⭕️ +stop sign 🛑 +no entry ⛔️ +name badge 📛 +prohibited 🚫 +hundred points 💯 +anger symbol 💢 +hot springs ♨️ +no pedestrians 🚷 +no littering 🚯 +no bicycles 🚳 +non-potable water 🚱 +no one under eighteen 🔞 +no mobile phones 📵 +no smoking 🚭 +exclamation mark ❗️ +white exclamation mark ❕ +question mark ❓ +white question mark ❔ +double exclamation mark ‼️ +exclamation question mark ⁉️ +dim button 🔅 +bright button 🔆 +part alternation mark 〽️ +warning ⚠️ +children crossing 🚸 +trident emblem 🔱 +fleur-de-lis ⚜️ +Japanese symbol for beginner 🔰 +recycling symbol ♻️ +white heavy check mark ✅ +Japanese “reserved” button 🈯️ +chart increasing with yen 💹 +sparkle ❇️ +eight-spoked asterisk ✳️ +cross mark button ❎ +globe with meridians 🌐 +diamond with a dot 💠 +circled M Ⓜ️ +cyclone 🌀 +zzz 💤 +ATM sign 🏧 +water closet 🚾 +wheelchair symbol ♿️ +P button 🅿️ +Japanese “vacancy” button 🈳 +Japanese “service charge” button 🈂️ +passport control 🛂 +customs 🛃 +baggage claim 🛄 +left luggage 🛅 +men’s room 🚹 +women’s room 🚺 +baby symbol 🚼 +restroom 🚻 +litter in bin sign 🚮 +cinema 🎦 +antenna bars 📶 +Japanese “here” button 🈁 +input symbols 🔣 +information ℹ️ +input latin letters 🔤 +input latin lowercase 🔡 +input latin uppercase 🔠 +NG button 🆖 +OK button 🆗 +UP! button 🆙 +COOL button 🆒 +NEW button 🆕 +FREE button 🆓 +keycap: 0 0️⃣ +keycap: 1 1️⃣ +keycap: 2 2️⃣ +keycap: 3 3️⃣ +keycap: 4 4️⃣ +keycap: 5 5️⃣ +keycap: 6 6️⃣ +keycap: 7 7️⃣ +keycap: 8 8️⃣ +keycap: 9 9️⃣ +keycap 10 🔟 +input numbers 🔢 +keycap: # #️⃣ +keycap: * *️⃣ +play button ▶️ +pause button ⏸ +play or pause button ⏯ +stop button ⏹ +record button ⏺ +next track button ⏭ +last track button ⏮ +fast-forward button ⏩ +fast reverse button ⏪ +fast up button ⏫ +fast down button ⏬ +reverse button ◀️ +up button 🔼 +down button 🔽 +right arrow ➡️ +left arrow ⬅️ +up arrow ⬆️ +down arrow ⬇️ +up-right arrow ↗️ +down-right arrow ↘️ +down-left arrow ↙️ +up-left arrow ↖️ +up-down arrow ↕️ +left-right arrow ↔️ +left arrow curving right ↪️ +right arrow curving left ↩️ +right arrow curving up ⤴️ +right arrow curving down ⤵️ +shuffle tracks button 🔀 +repeat button 🔁 +repeat single button 🔂 +anticlockwise arrows button 🔄 +clockwise vertical arrows 🔃 +musical note 🎵 +musical notes 🎶 +heavy plus sign ➕ +heavy minus sign ➖ +heavy division sign ➗ +heavy multiplication x ✖️ +heavy dollar sign 💲 +currency exchange 💱 +trade mark ™️ +copyright ©️ +registered ®️ +wavy dash 〰️ +curly loop ➰ +double curly loop ➿ +END arrow 🔚 +BACK arrow 🔙 +ON! arrow 🔛 +TOP arrow 🔝 +SOON arrow 🔜 +heavy check mark ✔️ +ballot box with check ☑️ +radio button 🔘 +white circle ⚪️ +black circle ⚫️ +red circle 🔴 +blue circle 🔵 +red triangle pointed up 🔺 +red triangle pointed down 🔻 +small orange diamond 🔸 +small blue diamond 🔹 +large orange diamond 🔶 +large blue diamond 🔷 +white square button 🔳 +black square button 🔲 +black small square ▪️ +white small square ▫️ +black medium-small square ◾️ +white medium-small square ◽️ +black medium square ◼️ +white medium square ◻️ +black large square ⬛️ +white large square ⬜️ +speaker low volume 🔈 +muted speaker 🔇 +speaker medium volume 🔉 +speaker high volume 🔊 +bell 🔔 +bell with slash 🔕 +megaphone 📣 +loudspeaker 📢 +eye in speech bubble 👁‍🗨 +speech balloon 💬 +thought balloon 💭 +right anger bubble 🗯 +spade suit ♠️ +club suit ♣️ +heart suit ♥️ +diamond suit ♦️ +joker 🃏 +flower playing cards 🎴 +mahjong red dragon 🀄️ +one o’clock 🕐 +two o’clock 🕑 +three o’clock 🕒 +four o’clock 🕓 +five o’clock 🕔 +six o’clock 🕕 +seven o’clock 🕖 +eight o’clock 🕗 +nine o’clock 🕘 +ten o’clock 🕙 +eleven o’clock 🕚 +twelve o’clock 🕛 +one-thirty 🕜 +two-thirty 🕝 +three-thirty 🕞 +four-thirty 🕟 +five-thirty 🕠 +six-thirty 🕡 +seven-thirty 🕢 +eight-thirty 🕣 +nine-thirty 🕤 +ten-thirty 🕥 +eleven-thirty 🕦 +twelve-thirty 🕧 +white flag 🏳️ +black flag 🏴 +chequered flag 🏁 +triangular flag 🚩 +rainbow flag 🏳️‍🌈 +Afghanistan 🇦🇫 +Åland Islands 🇦🇽 +Albania 🇦🇱 +Algeria 🇩🇿 +American Samoa 🇦🇸 +Andorra 🇦🇩 +Angola 🇦🇴 +Anguilla 🇦🇮 +Antarctica 🇦🇶 +Antigua & Barbuda 🇦🇬 +Argentina 🇦🇷 +Armenia 🇦🇲 +Aruba 🇦🇼 +Australia 🇦🇺 +Austria 🇦🇹 +Azerbaijan 🇦🇿 +Bahamas 🇧🇸 +Bahrain 🇧🇭 +Bangladesh 🇧🇩 +Barbados 🇧🇧 +Belarus 🇧🇾 +Belgium 🇧🇪 +Belize 🇧🇿 +Benin 🇧🇯 +Bermuda 🇧🇲 +Bhutan 🇧🇹 +Bolivia 🇧🇴 +Caribbean Netherlands 🇧🇶 +Bosnia & Herzegovina 🇧🇦 +Botswana 🇧🇼 +Brazil 🇧🇷 +British Indian Ocean Territory 🇮🇴 +British Virgin Islands 🇻🇬 +Brunei 🇧🇳 +Bulgaria 🇧🇬 +Burkina Faso 🇧🇫 +Burundi 🇧🇮 +Cape Verde 🇨🇻 +Cambodia 🇰🇭 +Cameroon 🇨🇲 +Canada 🇨🇦 +Canary Islands 🇮🇨 +Cayman Islands 🇰🇾 +Central African Republic 🇨🇫 +Chad 🇹🇩 +Chile 🇨🇱 +China 🇨🇳 +Christmas Island 🇨🇽 +Cocos (Keeling) Islands 🇨🇨 +Colombia 🇨🇴 +Comoros 🇰🇲 +Congo - Brazzaville 🇨🇬 +Congo - Kinshasa 🇨🇩 +Cook Islands 🇨🇰 +Costa Rica 🇨🇷 +Côte d’Ivoire 🇨🇮 +Croatia 🇭🇷 +Cuba 🇨🇺 +Curaçao 🇨🇼 +Cyprus 🇨🇾 +Czech Republic 🇨🇿 +Denmark 🇩🇰 +Djibouti 🇩🇯 +Dominica 🇩🇲 +Dominican Republic 🇩🇴 +Ecuador 🇪🇨 +Egypt 🇪🇬 +El Salvador 🇸🇻 +Equatorial Guinea 🇬🇶 +Eritrea 🇪🇷 +Estonia 🇪🇪 +Ethiopia 🇪🇹 +European Union 🇪🇺 +Falkland Islands 🇫🇰 +Faroe Islands 🇫🇴 +Fiji 🇫🇯 +Finland 🇫🇮 +France 🇫🇷 +French Guiana 🇬🇫 +French Polynesia 🇵🇫 +French Southern Territories 🇹🇫 +Gabon 🇬🇦 +Gambia 🇬🇲 +Georgia 🇬🇪 +Germany 🇩🇪 +Ghana 🇬🇭 +Gibraltar 🇬🇮 +Greece 🇬🇷 +Greenland 🇬🇱 +Grenada 🇬🇩 +Guadeloupe 🇬🇵 +Guam 🇬🇺 +Guatemala 🇬🇹 +Guernsey 🇬🇬 +Guinea 🇬🇳 +Guinea-Bissau 🇬🇼 +Guyana 🇬🇾 +Haiti 🇭🇹 +Honduras 🇭🇳 +Hong Kong SAR China 🇭🇰 +Hungary 🇭🇺 +Iceland 🇮🇸 +India 🇮🇳 +Indonesia 🇮🇩 +Iran 🇮🇷 +Iraq 🇮🇶 +Ireland 🇮🇪 +Isle of Man 🇮🇲 +Israel 🇮🇱 +Italy 🇮🇹 +Jamaica 🇯🇲 +Japan 🇯🇵 +crossed flags 🎌 +Jersey 🇯🇪 +Jordan 🇯🇴 +Kazakhstan 🇰🇿 +Kenya 🇰🇪 +Kiribati 🇰🇮 +Kosovo 🇽🇰 +Kuwait 🇰🇼 +Kyrgyzstan 🇰🇬 +Laos 🇱🇦 +Latvia 🇱🇻 +Lebanon 🇱🇧 +Lesotho 🇱🇸 +Liberia 🇱🇷 +Libya 🇱🇾 +Liechtenstein 🇱🇮 +Lithuania 🇱🇹 +Luxembourg 🇱🇺 +Macau SAR China 🇲🇴 +Macedonia 🇲🇰 +Madagascar 🇲🇬 +Malawi 🇲🇼 +Malaysia 🇲🇾 +Maldives 🇲🇻 +Mali 🇲🇱 +Malta 🇲🇹 +Marshall Islands 🇲🇭 +Martinique 🇲🇶 +Mauritania 🇲🇷 +Mauritius 🇲🇺 +Mayotte 🇾🇹 +Mexico 🇲🇽 +Micronesia 🇫🇲 +Moldova 🇲🇩 +Monaco 🇲🇨 +Mongolia 🇲🇳 +Montenegro 🇲🇪 +Montserrat 🇲🇸 +Morocco 🇲🇦 +Mozambique 🇲🇿 +Myanmar (Burma) 🇲🇲 +Namibia 🇳🇦 +Nauru 🇳🇷 +Nepal 🇳🇵 +Netherlands 🇳🇱 +New Caledonia 🇳🇨 +New Zealand 🇳🇿 +Nicaragua 🇳🇮 +Niger 🇳🇪 +Nigeria 🇳🇬 +Niue 🇳🇺 +Norfolk Island 🇳🇫 +Northern Mariana Islands 🇲🇵 +North Korea 🇰🇵 +Norway 🇳🇴 +Oman 🇴🇲 +Pakistan 🇵🇰 +Palau 🇵🇼 +Palestinian Territories 🇵🇸 +Panama 🇵🇦 +Papua New Guinea 🇵🇬 +Paraguay 🇵🇾 +Peru 🇵🇪 +Philippines 🇵🇭 +Pitcairn Islands 🇵🇳 +Poland 🇵🇱 +Portugal 🇵🇹 +Puerto Rico 🇵🇷 +Qatar 🇶🇦 +Réunion 🇷🇪 +Romania 🇷🇴 +Russia 🇷🇺 +Rwanda 🇷🇼 +St. Barthélemy 🇧🇱 +St. Helena 🇸🇭 +St. Kitts & Nevis 🇰🇳 +St. Lucia 🇱🇨 +St. Pierre & Miquelon 🇵🇲 +St. Vincent & Grenadines 🇻🇨 +Samoa 🇼🇸 +San Marino 🇸🇲 +São Tomé & Príncipe 🇸🇹 +Saudi Arabia 🇸🇦 +Senegal 🇸🇳 +Serbia 🇷🇸 +Seychelles 🇸🇨 +Sierra Leone 🇸🇱 +Singapore 🇸🇬 +Sint Maarten 🇸🇽 +Slovakia 🇸🇰 +Slovenia 🇸🇮 +Solomon Islands 🇸🇧 +Somalia 🇸🇴 +South Africa 🇿🇦 +South Georgia & South Sandwich Islands 🇬🇸 +South Korea 🇰🇷 +South Sudan 🇸🇸 +Spain 🇪🇸 +Sri Lanka 🇱🇰 +Sudan 🇸🇩 +Suriname 🇸🇷 +Swaziland 🇸🇿 +Sweden 🇸🇪 +Switzerland 🇨🇭 +Syria 🇸🇾 +Taiwan 🇹🇼 +Tajikistan 🇹🇯 +Tanzania 🇹🇿 +Thailand 🇹🇭 +Timor-Leste 🇹🇱 +Togo 🇹🇬 +Tokelau 🇹🇰 +Tonga 🇹🇴 +Trinidad & Tobago 🇹🇹 +Tunisia 🇹🇳 +Turkey 🇹🇷 +Turkmenistan 🇹🇲 +Turks & Caicos Islands 🇹🇨 +Tuvalu 🇹🇻 +Uganda 🇺🇬 +Ukraine 🇺🇦 +United Arab Emirates 🇦🇪 +United Kingdom 🇬🇧 +United States 🇺🇸 +U.S. Virgin Islands 🇻🇮 +Uruguay 🇺🇾 +Uzbekistan 🇺🇿 +Vanuatu 🇻🇺 +Vatican City 🇻🇦 +Venezuela 🇻🇪 +Vietnam 🇻🇳 +Wallis & Futuna 🇼🇫 +Western Sahara 🇪🇭 +Yemen 🇾🇪 +Zambia 🇿🇲 +Zimbabwe 🇿🇼 diff --git a/xmonad/scripts/rotate-mpris-player.sh b/xmonad/scripts/rotate-mpris-player.sh new file mode 100755 index 0000000..863501e --- /dev/null +++ b/xmonad/scripts/rotate-mpris-player.sh @@ -0,0 +1,28 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +mkdir -p "${HOME}/.cache/andreh/" +CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" +AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" +CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" + +pick_first() { + echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" +} + +if [[ "${CURRENT_PLAYER}" = "" ]]; then + pick_first +elif ! echo "${AVAILABLE_PLAYERS}" | grep -q "${CURRENT_PLAYER}"; then + # Unknown $CURRENT_PLAYER, pick anyone + pick_first +else + INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" + LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" + if [[ "${INDEX}" = "${LENGTH}" ]]; then + # Reached the end of the $AVAILABLE_PLAYERS list, wrapping + pick_first + else + # Get the next player instead + echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" + fi +fi diff --git a/xmonad/scripts/single-monitor.sh b/xmonad/scripts/single-monitor.sh new file mode 100755 index 0000000..83d0455 --- /dev/null +++ b/xmonad/scripts/single-monitor.sh @@ -0,0 +1,2 @@ +#!/bin/sh -eux +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/xmonad/scripts/three-monitors.sh b/xmonad/scripts/three-monitors.sh new file mode 100755 index 0000000..d1ef7c6 --- /dev/null +++ b/xmonad/scripts/three-monitors.sh @@ -0,0 +1,2 @@ +#!/bin/sh +xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/xmonad/scripts/xmobar-mpris.sh b/xmonad/scripts/xmobar-mpris.sh new file mode 100755 index 0000000..a2af8c4 --- /dev/null +++ b/xmonad/scripts/xmobar-mpris.sh @@ -0,0 +1,43 @@ +#!/usr/bin/env bash +set -Eeuo pipefail + +CUR_PATH="${HOME}/.cache/andreh/mpris-player.txt" + +urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } + +default_status() { + CUR="${1}" + printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" +} + +main() { + CUR="$(cat "${CUR_PATH}")" + if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then + printf "%s\n" "${CUR}" + else + case "${CUR}" in + cmus) + default_status "${CUR}" + ;; + firefox*) + printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" + ;; + vlc) + printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" + ;; + *) + default_status "${CUR}" + ;; + esac + fi +} +export -f main + +mkdir -p "$(dirname "${CUR_PATH}")" +touch "${CUR_PATH}" + +while true +do + main + sleep 1 +done diff --git a/xmonad/scripts/xmobar-notmuch.sh b/xmonad/scripts/xmobar-notmuch.sh new file mode 100755 index 0000000..f174a8e --- /dev/null +++ b/xmonad/scripts/xmobar-notmuch.sh @@ -0,0 +1,10 @@ +#!/bin/sh -eu + +while true; do + printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" + if acpi -a | grep -q off-line; then + sleep $((60 * 15)) + else + sleep $((60 * 1)) + fi +done diff --git a/xmonad/scripts/zero-brightness.sh b/xmonad/scripts/zero-brightness.sh new file mode 100755 index 0000000..a748724 --- /dev/null +++ b/xmonad/scripts/zero-brightness.sh @@ -0,0 +1,10 @@ +#!/bin/sh -eux + +# base dir for backlight class +BASEDIR='/sys/class/backlight/' + +# get the backlight handler +HANDLER="${BASEDIR}$(ls "${BASEDIR}")" + +# set the new brightness value +echo 0 > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 828ab1b..459fe9d 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -18,8 +18,8 @@ Config { "-h", "green", "-l", "red"] 10 - , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-mpris.sh" "mpris" - , Run CommandReader "~/dev/libre/dotfiles/scripts/xmobar-notmuch.sh" "notmuch" + , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-mpris.sh" "mpris" + , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notmuch.sh" "notmuch" ] , template = " %date% | %default:Master%| %mpris% } { | %notmuch% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 1e9a2bd..c206842 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -40,21 +40,21 @@ myKeyPBindings = , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5-") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) previous") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) play-pause") - , ("S-", spawn "~/dev/libre/dotfiles/scripts/rotate-mpris-player.sh") + , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/rotate-mpris-player.sh") , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") -- Brightness - , ("", spawn "~/dev/libre/dotfiles/scripts/brightness.sh -10") - , ("S-", spawn "~/dev/libre/dotfiles/scripts/zero-brightness.sh") - , ("", spawn "~/dev/libre/dotfiles/scripts/brightness.sh +10") + , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh -10") + , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/zero-brightness.sh") + , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh +10") -- yeganesh launcher , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") -- yeganesh emoji - , ("M-o", spawnHere "~/dev/libre/dotfiles/scripts/dmenu-emoji.sh") + , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh") -- Lock screen , ("C-M-l", spawn "dm-tool switch-to-greeter") @@ -65,10 +65,10 @@ myKeyPBindings = , ("C-M-", spawn "escrotum ~/Bureau/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup - , ("C-M-1", spawn "~/dev/libre/dotfiles/scripts/single-monitor.sh") + , ("C-M-1", spawn "~/dev/libre/dotfiles/xmonad/scripts/single-monitor.sh") -- xrandr three monitor setup - , ("C-M-3", spawn "~/dev/libre/dotfiles/scripts/three-monitors.sh") + , ("C-M-3", spawn "~/dev/libre/dotfiles/xmonad/scripts/three-monitors.sh") -- restart network , ("M-x", spawn "gksudo -S systemctl restart NetworkManager") @@ -85,7 +85,7 @@ myKeyPBindings = , ("M-z", sendMessage MirrorShrink) -- Enqueue link on clipboard in VLC - , ("M-v", spawn "~/dev/libre/dotfiles/scripts/dmenu-vlc.sh") + , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vlc.sh") ] myLayoutHook = -- cgit v1.2.3 From 6db2e8bdf90302d351f012793424a973db8adc83 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 19:37:09 -0300 Subject: README: org-mode to markdown --- README.md | 98 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ README.org | 65 ----------------------------------------- 2 files changed, 98 insertions(+), 65 deletions(-) create mode 100644 README.md delete mode 100644 README.org diff --git a/README.md b/README.md new file mode 100644 index 0000000..8e0def9 --- /dev/null +++ b/README.md @@ -0,0 +1,98 @@ +# dotfiles - EuAndreh\'s personal repository + +## Instructions - setting up a new NixOS installation + +### 1. Prepare the USB stick + +Get the link for the [NixOS ISO +image](https://nixos.org/nixos/download.html) (prefer the KDE image for +easy network connection) and burn it to the USB stick (check the device +with `lsblk`): + +``` {.shell} +NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' +wget https://euandre.org/dotfiles/nixos/burn.sh +chmod +x burn.sh +./burn.sh "${NIXOS_URL}" /dev/sdb +``` + +### 2. Performing a fresh install + +Put the USB stick in the new laptop and boot from it. + +First we need to get the internet connection working. Check that the +wireless interface name is actually `wlp2s0` or something else (use +`ip a` of `ifconfig` for that), and use `wpa_supplicant` to perform the +connection: + +``` {.shell} +wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) +``` + +Now we need to also double check the driver name with `lsblk`. We\'ll +assume it\'s `/dev/sda`. + +After that all we need is to download the installation script and run it +with the correct arguments: + +``` {.shell} +curl https://euandre.org/dotfiles/nixos/install.sh > install.sh +chmod +x install.sh +LAPTOP_NAME='velhinho-nixos' +sudo ./install.sh "${LAPTOP_NAME}" /dev/sda +``` + +### 3. Bootstraping the new installation\'s configuration and data + +After booting up from the freshly installed NixOS, login into the +**GNOME+Xorg** option on the top right corner. Connect again to the +internet using the network applet and launch a terminal window. + +Now we\'ll need the GPG keys to decrypt the Git Annex repo, decrypt the +SSH keys and bootstrap from there. + +Get the `keys.gpg` file with both private and public keys (see +[exporting GPG keys](#exporting-gpg-key-pairs) below on how to do that) +from the external disk and run the setup script: + +``` {.shell} +curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ~/path/to/keys.gpg +``` + +Now just follow the instructions of the script. + +That\'s all! + +## Resources + +### Exporting GPG key pairs + +Export the GPG data using `export-keys.sh` and put it in a disk drive to +do an offline transfer: + +``` {.shell} +export-keys.sh +mv EuAndreh.tar.gpg ~/UTCLOUD/ +``` + +### Paperkey + +Paperkey generate using: + +``` {.shell} +cat < paperkey-content.txt + +# QR codes of paper key +gpg --export-secret-keys EuAndreh | paperkey | qrencode -o out.png -S -v 16 +montage *.png -tile 1x2 -geometry +0+0 concatenate-out.png +rm out* +EOF +``` + +To recover a paperkey: + +``` {.shell} +paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import +``` diff --git a/README.org b/README.org deleted file mode 100644 index d1caada..0000000 --- a/README.org +++ /dev/null @@ -1,65 +0,0 @@ -* dotfiles - EuAndreh's personal repository -** Instructions - setting up a new NixOS installation -*** 1. Prepare the USB stick -Get the link for the [[https://nixos.org/nixos/download.html][NixOS ISO image]] (prefer the KDE image for easy network connection) and burn it to the USB stick (check the device with =lsblk=): -#+BEGIN_SRC shell -NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' -wget https://euandre.org/dotfiles/nixos/burn.sh -chmod +x burn.sh -./burn.sh "${NIXOS_URL}" /dev/sdb -#+END_SRC -*** 2. Performing a fresh install -Put the USB stick in the new laptop and boot from it. - -First we need to get the internet connection working. Check that the wireless interface name is actually =wlp2s0= or something else (use =ip a= of =ifconfig= for that), and use =wpa_supplicant= to perform the connection: -#+BEGIN_SRC shell -wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) -#+END_SRC -Now we need to also double check the driver name with =lsblk=. We'll assume it's =/dev/sda=. - -After that all we need is to download the installation script and run it with the correct arguments: -#+BEGIN_SRC shell -curl https://euandre.org/dotfiles/nixos/install.sh > install.sh -chmod +x install.sh -LAPTOP_NAME='velhinho-nixos' -sudo ./install.sh "${LAPTOP_NAME}" /dev/sda -#+END_SRC -*** 3. Bootstraping the new installation's configuration and data -After booting up from the freshly installed NixOS, login into the *GNOME+Xorg* option on the top right corner. Connect again to the internet using the network applet and launch a terminal window. - -Now we'll need the GPG keys to decrypt the Git Annex repo, decrypt the SSH keys and bootstrap from there. - -Get the =keys.gpg= file with both private and public keys (see [[#exporting-gpg-key-pairs][exporting GPG keys]] below on how to do that) from the external disk and run the setup script: -#+BEGIN_SRC shell -curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ~/path/to/keys.gpg -#+END_SRC -Now just follow the instructions of the script. - -That's all! -** Resources -*** Exporting GPG key pairs -:PROPERTIES: -:CUSTOM_ID: exporting-gpg-key-pairs -:END: -Export the GPG data using =export-keys.sh= and put it in a disk drive to do an offline transfer: -#+BEGIN_SRC shell -export-keys.sh -mv EuAndreh.tar.gpg ~/UTCLOUD/ -#+END_SRC -*** Paperkey -Paperkey generate using: -#+BEGIN_SRC shell -cat < paperkey-content.txt - -# QR codes of paper key -gpg --export-secret-keys EuAndreh | paperkey | qrencode -o out.png -S -v 16 -montage *.png -tile 1x2 -geometry +0+0 concatenate-out.png -rm out* -EOF -#+END_SRC -To recover a paperkey: -#+BEGIN_SRC shell -paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import -#+END_SRC -- cgit v1.2.3 From 3b1de5a28d7298e7efa35ddedc432bcfd4582826 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 19:38:47 -0300 Subject: Embed export-keys.sh and copy-public-key.sh into README.md I'd rather not automate these types of things. --- README.md | 68 ++++++++++++++++++++++++++++++++++++++++++++++ scripts/copy-public-key.sh | 23 ---------------- scripts/export-keys.sh | 35 ------------------------ 3 files changed, 68 insertions(+), 58 deletions(-) delete mode 100755 scripts/copy-public-key.sh delete mode 100755 scripts/export-keys.sh diff --git a/README.md b/README.md index 8e0def9..6117500 100644 --- a/README.md +++ b/README.md @@ -96,3 +96,71 @@ To recover a paperkey: ``` {.shell} paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import ``` + +### `export-keys.sh` + +```shell +#!/usr/bin/env bash +set -Eeuo pipefail + +yellow "Exporting public key..." +gpg --export --armor -a EuAndreh > keys.gpg +green "Done." + +yellow "Exporting private key..." +read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r +gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg +green "Done." + +yellow "Exporting ownertrust..." +gpg --export-ownertrust > trust.txt +green "Done." + +yellow "Creating tar with key pair and trust content..." +tar -cvf EuAndreh.tar keys.gpg trust.txt +green "Done." + +yellow "Encrypting tar file..." +read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r +gpg --cipher-algo AES256 -c EuAndreh.tar +green "Done." + +yellow "Removing traces of private key..." +shred trust.txt +rm trust.txt +shred keys.gpg +rm keys.gpg +shred EuAndreh.tar +rm EuAndreh.tar +green "Done." + +blue "File 'EuAndreh.tar.gpg' created!" +``` + +### `copy-public-key.sh` + +``` +#!/bin/sh -eux + +FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' +FILE="$(mktemp)" + +gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" + +# Update keyserver +# gpg --send-keys "${FINGERPRINT}" + +# Add to website +cp "${FILE}" ~/dev/libre/website/public-key.txt + +# Update in euandreh-guix-channel +cd ~/dev/libre/euandreh-guix-channel/ +git checkout keyring +cp "${FILE}" euandreh.key +cd - + +# Update in github: can't be done + +# Clean up +rm "${FILE}" +``` diff --git a/scripts/copy-public-key.sh b/scripts/copy-public-key.sh deleted file mode 100755 index b864b4b..0000000 --- a/scripts/copy-public-key.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -eux - -FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' -FILE="$(mktemp)" - -gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" - -# Update keyserver -# gpg --send-keys "${FINGERPRINT}" - -# Add to website -cp "${FILE}" ~/dev/libre/website/public-key.txt - -# Update in euandreh-guix-channel -cd ~/dev/libre/euandreh-guix-channel/ -git checkout keyring -cp "${FILE}" euandreh.key -cd - - -# Update in github: can't be done - -# Clean up -rm "${FILE}" diff --git a/scripts/export-keys.sh b/scripts/export-keys.sh deleted file mode 100755 index 5807dbc..0000000 --- a/scripts/export-keys.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -yellow "Exporting public key..." -gpg --export --armor -a EuAndreh > keys.gpg -green "Done." - -yellow "Exporting private key..." -read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r -gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg -green "Done." - -yellow "Exporting ownertrust..." -gpg --export-ownertrust > trust.txt -green "Done." - -yellow "Creating tar with key pair and trust content..." -tar -cvf EuAndreh.tar keys.gpg trust.txt -green "Done." - -yellow "Encrypting tar file..." -read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r -gpg --cipher-algo AES256 -c EuAndreh.tar -green "Done." - -yellow "Removing traces of private key..." -shred trust.txt -rm trust.txt -shred keys.gpg -rm keys.gpg -shred EuAndreh.tar -rm EuAndreh.tar -green "Done." - -blue "File 'EuAndreh.tar.gpg' created!" -- cgit v1.2.3 From ded7301433cccdc9e3a8dc819fffd6ba71ab93c5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 19:54:15 -0300 Subject: scripts/c: Make it $TMUX aware --- scripts/c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/scripts/c b/scripts/c index 9b22062..1257674 100755 --- a/scripts/c +++ b/scripts/c @@ -1,3 +1,7 @@ #!/bin/sh -eu -tmux send-keys -R \; clear-history +if [ -n "${TMUX:-}" ]; then + tmux send-keys -R \; clear-history +else + clear +fi -- cgit v1.2.3 From 8224d12d37314d56c3237aef376c4ebf91d56f79 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 21:02:18 -0300 Subject: bash/util.sh: Use urandom for genpassword --- bash/util.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/util.sh b/bash/util.sh index e9519f5..c38b18c 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -24,7 +24,7 @@ extract () { genpassword() { length="${1-99}" - tr -cd '[:alnum:]' < /dev/random | fold "-w$length" | head -n1 ||: + tr -cd '[:alnum:]' < /dev/urandom | fold "-w$length" | head -n1 ||: } t() { -- cgit v1.2.3 From 7a6e5e0cddd65cfa806c6dc8079913a053ead738 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 23:05:58 -0300 Subject: Fix color sourcing in gc.sh script --- scripts/gc-mail.sh | 3 +++ scripts/gc-nix.sh | 2 +- scripts/gc.sh | 28 ++++++++++++++++------------ 3 files changed, 20 insertions(+), 13 deletions(-) diff --git a/scripts/gc-mail.sh b/scripts/gc-mail.sh index 5952cf7..e631850 100755 --- a/scripts/gc-mail.sh +++ b/scripts/gc-mail.sh @@ -1,5 +1,8 @@ #!/bin/sh -eux +# shellcheck source=/dev/null +. "$DOTFILES/bash/colors.sh" + # Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ yellow "Clean up deleted email files" notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" diff --git a/scripts/gc-nix.sh b/scripts/gc-nix.sh index 056c1eb..5bb448c 100755 --- a/scripts/gc-nix.sh +++ b/scripts/gc-nix.sh @@ -3,7 +3,7 @@ set -Eeuo pipefail # shellcheck source=/dev/null . "$DOTFILES/bash/colors.sh" -yellow "Cleaning up the NixOS store" +yellow "Cleaning up the NixOS store\n" profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) diff --git a/scripts/gc.sh b/scripts/gc.sh index bdc0043..e7834df 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -1,4 +1,7 @@ -#!/bin/sh -eux +#!/bin/sh -eu + +# shellcheck source=/dev/null +. "$DOTFILES/bash/colors.sh" disk_space() { u | awk '{print $5" "$6}' @@ -8,26 +11,27 @@ before=$(disk_space) gc-nix.sh -yellow "Cleaning up Guix store" +yellow "Cleaning up Guix store\n" guix gc -yellow "Cleaning up up the Trash and /tmp folders" +yellow "Cleaning up up the Trash and /tmp folders\n" sudo rm -rf ~/.local/share/Trash/files/* # https://askubuntu.com/a/609396 sudo find /tmp -type f -atime +10 -delete -yellow "Erasing docker images" +yellow "Erasing docker images\n" +set -x echo y | docker system prune -a -docker rmi "$(docker images -a -q)" -docker rm "$(docker ps -a -f status=exited -q)" +docker rmi "$(docker images -a -q)" ||: +docker rm "$(docker ps -a -f status=exited -q)" ||: -docker stop "$(docker ps -a -q)" -docker rm "$(docker ps -a -q)" +docker stop "$(docker ps -a -q)" ||: +docker rm "$(docker ps -a -q)" ||: echo y | docker volume prune echo y | docker container prune @@ -36,7 +40,7 @@ gc-mail.sh after=$(disk_space) -green "Done." -green "Disk space before and after:" -blue " before: ${before}" -blue " after: ${after}" +green "Done.\n" +green "Disk space before and after:\n" +blue " before: ${before}\n" +blue " after: ${after}\n" -- cgit v1.2.3 From a4c60e90dbe9e3f5acee70b34d183b788f429349 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 23:23:16 -0300 Subject: scripts/post.sh: Add trailing newline --- scripts/post.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index 25579fa..d844734 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -39,7 +39,7 @@ case "$TYPE" in DIR=_slides ;; *) - red "Invalid type '$TYPE'" + red "Invalid type '$TYPE'\n" usage exit 2 ;; @@ -71,7 +71,7 @@ OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md" cd ~/dev/libre/website [ -f "$OUT" ] && { - red "Pastebin named $OUT already exists." + red "Pastebin named $OUT already exists.\n" exit 1 } -- cgit v1.2.3 From b1f864b34c93eec25ab3231a469e0e48d37c411d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 23:23:36 -0300 Subject: Split sheband line from shell options --- Makefile | 8 ++++---- README.md | 3 ++- bash/templates/build-aux/assert-shellcheck.sh | 5 +++-- bash/templates/build-aux/assert-todos.sh | 3 ++- bash/templates/build-aux/ci/ci-build.sh | 3 ++- bash/templates/build-aux/ci/git-post-receive.sh | 3 ++- bash/templates/build-aux/ci/git-pre-push.sh.in | 3 ++- bash/templates/build-aux/compile-readme.sh | 3 ++- bash/templates/build-aux/git-notes-release.sh | 3 ++- bash/templates/build-aux/texinfo-build-web-assets.sh | 3 ++- bash/templates/build-aux/with-container.sh | 3 ++- bash/templates/build-aux/workflow/TODOs.sh | 3 ++- bash/templates/cronjob-with-email.sh | 3 ++- build-aux/assert-nixfmt.sh | 3 ++- build-aux/assert-shellcheck.sh | 3 ++- build-aux/assert-todos.sh | 3 ++- build-aux/ci/ci-build.sh | 3 ++- build-aux/ci/git-post-receive.sh | 3 ++- build-aux/ci/git-pre-push.sh.in | 3 ++- cron/annex.sh | 3 ++- cron/archive-box.sh | 3 ++- cron/backup.sh | 3 ++- cron/copy-box-backups.sh | 3 ++- cron/mbox-archive.sh | 3 ++- cron/mr-remotes-backup.sh | 3 ++- cron/repo-update.sh | 3 ++- cron/report-summary.sh | 3 ++- scripts/c | 3 ++- scripts/fim | 3 ++- scripts/gc-mail.sh | 3 ++- scripts/gc.sh | 3 ++- scripts/hd.sh | 3 ++- scripts/open | 3 ++- scripts/post.sh | 3 ++- scripts/record-my-screen.sh | 3 ++- scripts/vlc | 3 ++- scripts/yt | 3 ++- xmonad/scripts/brightness.sh | 3 ++- xmonad/scripts/dmenu-emoji.sh | 3 ++- xmonad/scripts/dmenu-vlc.sh | 3 ++- xmonad/scripts/single-monitor.sh | 3 ++- xmonad/scripts/xmobar-notmuch.sh | 3 ++- xmonad/scripts/zero-brightness.sh | 3 ++- 43 files changed, 89 insertions(+), 47 deletions(-) diff --git a/Makefile b/Makefile index 5a420d3..11422d2 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ .PHONY: check check: - sh -eux build-aux/assert-nixfmt.sh - sh -eux build-aux/assert-shellcheck.sh - sh -eux build-aux/assert-todos.sh + sh build-aux/assert-nixfmt.sh + sh build-aux/assert-shellcheck.sh + sh build-aux/assert-todos.sh .PHONY: clean clean: @@ -10,5 +10,5 @@ clean: .PHONY: public public: - sh -eux scripts/generate-tasks-and-bugs.sh + sh scripts/generate-tasks-and-bugs.sh pandoc -s --metadata title='dotfiles - EuAndreh' -c styles.css -o public/index.html README.md diff --git a/README.md b/README.md index 6117500..0746121 100644 --- a/README.md +++ b/README.md @@ -140,7 +140,8 @@ blue "File 'EuAndreh.tar.gpg' created!" ### `copy-public-key.sh` ``` -#!/bin/sh -eux +#!/bin/sh +set -eux FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' FILE="$(mktemp)" diff --git a/bash/templates/build-aux/assert-shellcheck.sh b/bash/templates/build-aux/assert-shellcheck.sh index d07815b..334a875 100755 --- a/bash/templates/build-aux/assert-shellcheck.sh +++ b/bash/templates/build-aux/assert-shellcheck.sh @@ -1,5 +1,6 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ + xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ xargs shellcheck diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh index ce6c95b..91015fe 100755 --- a/bash/templates/build-aux/assert-todos.sh +++ b/bash/templates/build-aux/assert-todos.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then echo "Found dangling FIXME markers on the project." diff --git a/bash/templates/build-aux/ci/ci-build.sh b/bash/templates/build-aux/ci/ci-build.sh index 62e0f22..93c9ee1 100755 --- a/bash/templates/build-aux/ci/ci-build.sh +++ b/bash/templates/build-aux/ci/ci-build.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux PACKAGE="$1" LOGS_DIR="$2" diff --git a/bash/templates/build-aux/ci/git-post-receive.sh b/bash/templates/build-aux/ci/git-post-receive.sh index c78f1ac..2f6e3c0 100755 --- a/bash/templates/build-aux/ci/git-post-receive.sh +++ b/bash/templates/build-aux/ci/git-post-receive.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" diff --git a/bash/templates/build-aux/ci/git-pre-push.sh.in b/bash/templates/build-aux/ci/git-pre-push.sh.in index d102d60..dbadd1c 100755 --- a/bash/templates/build-aux/ci/git-pre-push.sh.in +++ b/bash/templates/build-aux/ci/git-pre-push.sh.in @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux PACKAGE="$(basename "$PWD")" __ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" diff --git a/bash/templates/build-aux/compile-readme.sh b/bash/templates/build-aux/compile-readme.sh index 6a20811..91f6065 100755 --- a/bash/templates/build-aux/compile-readme.sh +++ b/bash/templates/build-aux/compile-readme.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux pandoc -s \ --metadata title="$1 - EuAndreh" \ diff --git a/bash/templates/build-aux/git-notes-release.sh b/bash/templates/build-aux/git-notes-release.sh index 487f200..4d55645 100644 --- a/bash/templates/build-aux/git-notes-release.sh +++ b/bash/templates/build-aux/git-notes-release.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux DIST_ARCHIVES="$1" VERSION="$2" diff --git a/bash/templates/build-aux/texinfo-build-web-assets.sh b/bash/templates/build-aux/texinfo-build-web-assets.sh index 9980e57..241ebb8 100755 --- a/bash/templates/build-aux/texinfo-build-web-assets.sh +++ b/bash/templates/build-aux/texinfo-build-web-assets.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux PACKAGE="$1" shift diff --git a/bash/templates/build-aux/with-container.sh b/bash/templates/build-aux/with-container.sh index cff282f..5544d8e 100755 --- a/bash/templates/build-aux/with-container.sh +++ b/bash/templates/build-aux/with-container.sh @@ -1,3 +1,4 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh index 58fbd3c..4a9eb65 100755 --- a/bash/templates/build-aux/workflow/TODOs.sh +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu mkdir -p public diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh index 9f6e0ac..b486ce5 100644 --- a/bash/templates/cronjob-with-email.sh +++ b/bash/templates/cronjob-with-email.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux LOG_FILE="$(mktemp)" { finish() { diff --git a/build-aux/assert-nixfmt.sh b/build-aux/assert-nixfmt.sh index 6e4d2c6..19bd0a2 100755 --- a/build-aux/assert-nixfmt.sh +++ b/build-aux/assert-nixfmt.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # shellcheck disable=2016 find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh index d07815b..cf2eed8 100755 --- a/build-aux/assert-shellcheck.sh +++ b/build-aux/assert-shellcheck.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux git ls-files -z | \ xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index 2af84fe..ea0ab97 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|bash/util.sh|docbook-xsl.tar.gz)' if git grep FIXME | grep -Ev "$EXCLUDE"; then diff --git a/build-aux/ci/ci-build.sh b/build-aux/ci/ci-build.sh index 62e0f22..93c9ee1 100755 --- a/build-aux/ci/ci-build.sh +++ b/build-aux/ci/ci-build.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux PACKAGE="$1" LOGS_DIR="$2" diff --git a/build-aux/ci/git-post-receive.sh b/build-aux/ci/git-post-receive.sh index c78f1ac..2f6e3c0 100755 --- a/build-aux/ci/git-post-receive.sh +++ b/build-aux/ci/git-post-receive.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" diff --git a/build-aux/ci/git-pre-push.sh.in b/build-aux/ci/git-pre-push.sh.in index 37e777c..16428d6 100644 --- a/build-aux/ci/git-pre-push.sh.in +++ b/build-aux/ci/git-pre-push.sh.in @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux PACKAGE="$(basename "$PWD")" LOGS_DIR="/data/ci/$PACKAGE/logs" diff --git a/cron/annex.sh b/cron/annex.sh index 555653a..f1ebb2c 100755 --- a/cron/annex.sh +++ b/cron/annex.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # Required for properly running Git Annex, related issue: # https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ diff --git a/cron/archive-box.sh b/cron/archive-box.sh index f6d8150..6e66939 100755 --- a/cron/archive-box.sh +++ b/cron/archive-box.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # FIXME diff --git a/cron/backup.sh b/cron/backup.sh index 59b3cd0..f92bd5d 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null diff --git a/cron/copy-box-backups.sh b/cron/copy-box-backups.sh index 92eda65..104337c 100755 --- a/cron/copy-box-backups.sh +++ b/cron/copy-box-backups.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # shellcheck source=/dev/null . "${HOME}/.ssh/environment" > /dev/null diff --git a/cron/mbox-archive.sh b/cron/mbox-archive.sh index a12281e..37dcccc 100755 --- a/cron/mbox-archive.sh +++ b/cron/mbox-archive.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # FIXME diff --git a/cron/mr-remotes-backup.sh b/cron/mr-remotes-backup.sh index 0e37864..c483f52 100755 --- a/cron/mr-remotes-backup.sh +++ b/cron/mr-remotes-backup.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # shellcheck source=/dev/null . "${HOME}/.ssh/environment" diff --git a/cron/repo-update.sh b/cron/repo-update.sh index 65eb6db..cae3eeb 100755 --- a/cron/repo-update.sh +++ b/cron/repo-update.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu # shellcheck source=/dev/null . "${HOME}/.ssh/environment" diff --git a/cron/report-summary.sh b/cron/report-summary.sh index c21b147..b69c0b3 100755 --- a/cron/report-summary.sh +++ b/cron/report-summary.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux F="/tmp/cron-dbg.summary.$(date -I).euandreh.log" if grep ^1 "$F"; then diff --git a/scripts/c b/scripts/c index 1257674..630eb63 100755 --- a/scripts/c +++ b/scripts/c @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu if [ -n "${TMUX:-}" ]; then tmux send-keys -R \; clear-history diff --git a/scripts/fim b/scripts/fim index ff8e00d..6cd1d6e 100755 --- a/scripts/fim +++ b/scripts/fim @@ -1,3 +1,4 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu play "$DOTFILES/bash/Positive.ogg" 2> /dev/null diff --git a/scripts/gc-mail.sh b/scripts/gc-mail.sh index e631850..15b4cd7 100755 --- a/scripts/gc-mail.sh +++ b/scripts/gc-mail.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # shellcheck source=/dev/null . "$DOTFILES/bash/colors.sh" diff --git a/scripts/gc.sh b/scripts/gc.sh index e7834df..f42c883 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu # shellcheck source=/dev/null . "$DOTFILES/bash/colors.sh" diff --git a/scripts/hd.sh b/scripts/hd.sh index e977aa3..e9d64d1 100755 --- a/scripts/hd.sh +++ b/scripts/hd.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux annex.sh diff --git a/scripts/open b/scripts/open index 9383059..dec5e60 100755 --- a/scripts/open +++ b/scripts/open @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux case "$1" in *.ico|*.jpg|*.jpeg|*.png) diff --git a/scripts/post.sh b/scripts/post.sh index d844734..a300788 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu # shellcheck source=/dev/null . "$DOTFILES/bash/colors.sh" diff --git a/scripts/record-my-screen.sh b/scripts/record-my-screen.sh index 95094b6..00c5e53 100755 --- a/scripts/record-my-screen.sh +++ b/scripts/record-my-screen.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux usage() { red "Missing argument $1.\n" diff --git a/scripts/vlc b/scripts/vlc index 8570b53..87fa2b2 100755 --- a/scripts/vlc +++ b/scripts/vlc @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu NIX=/run/current-system/sw/bin/vlc GUIX=/run/current-system/profile/bin/vlc diff --git a/scripts/yt b/scripts/yt index 2d8de8d..7115d1b 100755 --- a/scripts/yt +++ b/scripts/yt @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu export DEFAULT_PLAYLIST_END=15 export DEFAULT_INC_STEP=10 diff --git a/xmonad/scripts/brightness.sh b/xmonad/scripts/brightness.sh index 29dc05b..77dc9b3 100755 --- a/xmonad/scripts/brightness.sh +++ b/xmonad/scripts/brightness.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux BRIGHTNESS_DIFF="${1}" diff --git a/xmonad/scripts/dmenu-emoji.sh b/xmonad/scripts/dmenu-emoji.sh index fef7835..71ccde8 100755 --- a/xmonad/scripts/dmenu-emoji.sh +++ b/xmonad/scripts/dmenu-emoji.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # Derived from: # https://github.com/porras/dmenu-emoji diff --git a/xmonad/scripts/dmenu-vlc.sh b/xmonad/scripts/dmenu-vlc.sh index c42e26f..e60b56f 100755 --- a/xmonad/scripts/dmenu-vlc.sh +++ b/xmonad/scripts/dmenu-vlc.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu URL="$(xsel -bo)" diff --git a/xmonad/scripts/single-monitor.sh b/xmonad/scripts/single-monitor.sh index 83d0455..ec0815a 100755 --- a/xmonad/scripts/single-monitor.sh +++ b/xmonad/scripts/single-monitor.sh @@ -1,2 +1,3 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/xmonad/scripts/xmobar-notmuch.sh b/xmonad/scripts/xmobar-notmuch.sh index f174a8e..691d570 100755 --- a/xmonad/scripts/xmobar-notmuch.sh +++ b/xmonad/scripts/xmobar-notmuch.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eu +#!/bin/sh +set -eu while true; do printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" diff --git a/xmonad/scripts/zero-brightness.sh b/xmonad/scripts/zero-brightness.sh index a748724..c487dd3 100755 --- a/xmonad/scripts/zero-brightness.sh +++ b/xmonad/scripts/zero-brightness.sh @@ -1,4 +1,5 @@ -#!/bin/sh -eux +#!/bin/sh +set -eux # base dir for backlight class BASEDIR='/sys/class/backlight/' -- cgit v1.2.3 From e51a01060551381bde896dd674585febdea5b264 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 17 Jan 2021 23:26:37 -0300 Subject: scripts/post.sh: STDOUT filename for use with backticks --- scripts/post.sh | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index a300788..3759c21 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -5,17 +5,17 @@ set -eu . "$DOTFILES/bash/colors.sh" missing() { - red "Missing argument <${1}>.\n" + red "Missing argument <${1}>.\n" >&2 } usage() { - cat <&2 Usage: $0 Arguments: TYPE The type of the article: article, til, slides, podcast, screencast - FULL_TITLE Full title of the pastebin + FULL_TITLE Full title of the post Examples: $0 til 'I just learned this' @@ -40,7 +40,7 @@ case "$TYPE" in DIR=_slides ;; *) - red "Invalid type '$TYPE'\n" + red "Invalid type '$TYPE'\n" >&2 usage exit 2 ;; @@ -72,7 +72,7 @@ OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md" cd ~/dev/libre/website [ -f "$OUT" ] && { - red "Pastebin named $OUT already exists.\n" + red "Post named $OUT already exists.\n" exit 1 } @@ -119,3 +119,5 @@ ref: $SLUG_TITLE --- EOF fi + +echo "$OUT" -- cgit v1.2.3 From 2e79e9d64f87b91a306c9f0d8d694d4992090314 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jan 2021 00:27:50 -0300 Subject: bash/aliases.sh: Better alias definitions for "m" and "mm" --- bash/aliases.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 97e22a5..3307002 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -15,8 +15,8 @@ alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" alias watch="watch --color " alias mr="mr -s" alias ncdu="ncdu --color dark" -alias mm="sync-mail.sh" -alias m="sync-mail.sh --fast" +alias mm="mbsync -A && notmuch new" +alias m="mbsync EuAndreh && notmuch new" alias n='neomutt' alias p='ping euandre.org -c 3' alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" -- cgit v1.2.3 From 09053d30a943e4befc2b199b04b9e8f967b1f9de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jan 2021 00:34:05 -0300 Subject: bash/templates/Makefile: Use sh over bash --- bash/templates/Makefile | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/bash/templates/Makefile b/bash/templates/Makefile index 6e902e7..11233df 100644 --- a/bash/templates/Makefile +++ b/bash/templates/Makefile @@ -1,7 +1,7 @@ .PHONY: check check: - bash build-aux/assert-shellcheck.sh - bash build-aux/assert-todos.sh + sh build-aux/assert-shellcheck.sh + sh build-aux/assert-todos.sh .PHONY: clean clean: @@ -9,5 +9,5 @@ clean: .PHONY: public public: - bash ./build-aux/generate-tasks-and-bugs.sh + sh build-aux/generate-tasks-and-bugs.sh pandoc -s --metadata title='$PROJECT_UC - EuAndreh' -c styles.css -o public/index.html README.md -- cgit v1.2.3 From 9f5f0a53248ee9676e282a7ea34dd6ac4fa6b187 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jan 2021 00:35:18 -0300 Subject: Use "ls -lahF" over "ls -lahp" --- bash/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index 3307002..91a3228 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -7,7 +7,7 @@ alias sbcl='rlwrap sbcl' alias sqlite='rlwrap sqlite3' alias guile='rlwrap guile' -alias l="ls -lahp --color" +alias l="ls -lahF --color" alias copy="tr -d '\\n' | xclip -sel clip" alias cop="xclip -sel clip" alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" -- cgit v1.2.3 From 39150ff53745717f1adf5a915385026dbdb93cc2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jan 2021 16:14:43 -0300 Subject: git/gitignore: Add patches/ to gitignore --- git/gitignore | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/git/gitignore b/git/gitignore index 0497ed3..062f818 100644 --- a/git/gitignore +++ b/git/gitignore @@ -4,4 +4,5 @@ req.http *.swp /gemset.nix /.ignore -/tmp/ \ No newline at end of file +/tmp/ +/patches/ -- cgit v1.2.3 From e1879f01860542fee25a22eeb9a1d34f94bc6896 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jan 2021 22:26:17 -0300 Subject: build-aux/assert-shellcheck.sh: Make match more strict --- build-aux/assert-shellcheck.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh index cf2eed8..334a875 100755 --- a/build-aux/assert-shellcheck.sh +++ b/build-aux/assert-shellcheck.sh @@ -2,5 +2,5 @@ set -eux git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh/ { print FILENAME }' | \ + xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ xargs shellcheck -- cgit v1.2.3 From 7b4d36468560301a0534a2b151a1abde1300c9cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 18 Jan 2021 22:38:50 -0300 Subject: Remove FIXME markers --- cron/archive-box.sh | 2 -- cron/mbox-archive.sh | 2 -- 2 files changed, 4 deletions(-) diff --git a/cron/archive-box.sh b/cron/archive-box.sh index 6e66939..a4e2b41 100755 --- a/cron/archive-box.sh +++ b/cron/archive-box.sh @@ -1,8 +1,6 @@ #!/bin/sh set -eux -# FIXME - # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 QUERY=$(cat < Date: Mon, 18 Jan 2021 22:41:19 -0300 Subject: bash/fzf.sh: Match history with command being run --- bash/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index 7c593a2..c5a3c9f 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -59,7 +59,7 @@ v() { f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" if [ -n "$f" ]; then history -s v "$@" - history -s vi "$f" + history -s vi "~/$f" echo "$f" vi "$HOME/$f" fi -- cgit v1.2.3 From eb4420504a5232ba10f2f2f1ff8739eb8f80f90e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jan 2021 13:33:06 -0300 Subject: Fix cronjob paths --- .gitignore | 2 +- bash/env.sh | 2 +- bash/fake-symlinks.sh | 8 ++++---- nixos/common.nix | 31 ++++++++++++++++++------------- 4 files changed, 24 insertions(+), 19 deletions(-) diff --git a/.gitignore b/.gitignore index 92c38ca..cc96959 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,2 @@ /result -/cron/generated/ +/cron/*-job.sh diff --git a/bash/env.sh b/bash/env.sh index 019a1e2..e759e62 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -13,4 +13,4 @@ export NIX_BUILD_CORES=0 export GUIX_PROFILE="$HOME/.guix-profile" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$HOME/annex/bin/scripts:$HOME/annex/bin/cron:$PATH" +PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$HOME/annex/bin/scripts:$PATH" diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 4dc7866..32719cc 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -8,18 +8,18 @@ export DOLLAR='$' mkdir -p "$DOTFILES/cron/generated/" for job in report-summary annex elfeed backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/generated/${job}-job.sh" + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/cron/${job}.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/generated/${job}-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" done mkdir -p "$HOME/annex/bin/cron/generated/" # shellcheck disable=2043 for job in pacheco; do prefix="$HOME/annex/bin/cron" - sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/generated/${job}-job.sh" + sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" chmod +x "$HOME/annex/bin/cron/${job}.sh" - chmod +x "$HOME/annex/bin/cron/generated/${job}-job.sh" + chmod +x "$HOME/annex/bin/cron/${job}-job.sh" done mkdir -p ~/archive/torrent/ diff --git a/nixos/common.nix b/nixos/common.nix index 4e194dc..3d39804 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -5,24 +5,29 @@ let daily-at-12h30min = "30 12 * * *"; every-x-hours = "0 * * * *"; pub-crons = { - sync-mail = every-x-hours; - deliver-queued-mail = every-x-hours; - deliver-my-enqueued-emails = every-x-hours; + no-mail = { + sync-mail = every-x-hours; + deliver-queued-mail = every-x-hours; + deliver-my-enqueued-emails = every-x-hours; + }; - report-summary-job = "30 13 * * *"; + with-mail = { + report-summary-job = "30 13 * * *"; - annex-job = daily-at-12h30min; - elfeed-job = daily-at-12h30min; - backup-job = daily-at-12h30min; - repo-update-job = daily-at-12h30min; - notmuch-dump-job = daily-at-12h30min; - mbox-archive-job = daily-at-12h30min; - copy-box-backups-job = daily-at-12h30min; - mr-remotes-backup-job = daily-at-12h30min; + annex-job = daily-at-12h30min; + elfeed-job = daily-at-12h30min; + backup-job = daily-at-12h30min; + repo-update-job = daily-at-12h30min; + notmuch-dump-job = daily-at-12h30min; + mbox-archive-job = daily-at-12h30min; + copy-box-backups-job = daily-at-12h30min; + mr-remotes-backup-job = daily-at-12h30min; + }; }; priv-crons = { pacheco-job = "0 12 5 * *"; }; in { crons = builtins.mapAttrs - (cron-for-name "/home/andreh/dev/libre/dotfiles/scripts/cron") pub-crons + (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") pub-crons.no-mail + // builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") pub-crons.with-mail // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; } -- cgit v1.2.3 From a705540a850eaa0bbf26cdb05bcbeb3712380f76 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jan 2021 13:33:40 -0300 Subject: ps1.sh: Also show repo as dirty with all files added --- bash/ps1.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/ps1.sh b/bash/ps1.sh index 59c7aa5..0746a83 100644 --- a/bash/ps1.sh +++ b/bash/ps1.sh @@ -39,7 +39,7 @@ repo_status() { BRANCH_MARKER="$inner" fi - if echo "$DIFF_LINES" | grep -q '^[A|D| ][M|D| ]'; then + if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then HAS_DIFF=1 fi -- cgit v1.2.3 From 7c06a0bab5d41d98aca38d37b6cdf721efa6655e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jan 2021 19:21:50 -0300 Subject: bash/aliases.sh: Always color diffs --- bash/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/aliases.sh b/bash/aliases.sh index 91a3228..a96666e 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -38,6 +38,7 @@ alias r="source ~/.bashrc" alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" alias grep='grep --color=always' +alias diff='diff --color=always' # https://linuxhandbook.com/run-alias-as-sudo/ alias sudo='sudo ' -- cgit v1.2.3 From a0487cf1c58992a80b2cadd097c86c96154982fb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jan 2021 19:22:04 -0300 Subject: rm bash/debug.gpg --- bash/debug.gpg | Bin 593 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bash/debug.gpg diff --git a/bash/debug.gpg b/bash/debug.gpg deleted file mode 100644 index 9838295..0000000 Binary files a/bash/debug.gpg and /dev/null differ -- cgit v1.2.3 From 2d7562bccb2d4d807538b9f43989271b77846860 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 19 Jan 2021 19:22:52 -0300 Subject: scripts/post.sh: Fix generation of slides --- scripts/post.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index 3759c21..14147d4 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -34,10 +34,12 @@ case "$TYPE" in article | til | podcast | screencast) LAYOUT=post DIR="_${TYPE}s" + EXT=md ;; slides) LAYOUT=slides DIR=_slides + EXT=slides ;; *) red "Invalid type '$TYPE'\n" >&2 @@ -67,7 +69,7 @@ slugify() { SLUG_TITLE="$(slugify "$FULL_TITLE")" PASTE_DATE="$(date -I)" -OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.md" +OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.$EXT" cd ~/dev/libre/website @@ -77,6 +79,7 @@ cd ~/dev/libre/website } if [ "$LAYOUT" = 'slides' ]; then + ARTICLE="$($0 article "$FULL_TITLE")" cat< "$OUT" --- @@ -90,6 +93,8 @@ lang: en ref: $SLUG_TITLE +article: $ARTICLE + --- --- @@ -98,11 +103,10 @@ ref: $SLUG_TITLE References: -1. these slides: [{{ site.tld }}/slides.html]({% link slides.md %}) -2. [prose version of this presentation]({% link _articles/$PASTE_DATE-$SLUG_TITLE.md %}) +1. FIXME +2. FIXME EOF - "$0" article "$FULL_TITLE" - else +else cat < "$OUT" --- -- cgit v1.2.3 From 3532dfe1a6c056e4893252d0777e66d93db568f5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jan 2021 13:15:43 -0300 Subject: scripts/post.sh: Use fully qualified "$OUT" path so it can work from anywhere --- scripts/post.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index 14147d4..50cd187 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -67,11 +67,12 @@ slugify() { print;' } +WEBSITE_REPO="$HOME/dev/libre/website" SLUG_TITLE="$(slugify "$FULL_TITLE")" PASTE_DATE="$(date -I)" -OUT="$DIR/$PASTE_DATE-$SLUG_TITLE.$EXT" +OUT="$WEBSITE_REPO/$DIR/$PASTE_DATE-$SLUG_TITLE.$EXT" -cd ~/dev/libre/website +cd "$WEBSITE_REPO" [ -f "$OUT" ] && { red "Post named $OUT already exists.\n" -- cgit v1.2.3 From 9ff4a87fcdbd042c302b0640ab2e0927c6081e0c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jan 2021 14:00:18 -0300 Subject: nixos/configuration.nix: Add python3 package to the base system --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 557fb96..f17e06d 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -121,6 +121,7 @@ in { clojure # =clj= kubernetes nssTools # =pk12util= + python3 ]; in with pkgs; -- cgit v1.2.3 From a59a68be02dac52ebb702278f93c1c349bc548a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jan 2021 15:23:32 -0300 Subject: nixos/configuration.nix: Add sha256 of hosts downloaded file --- nixos/configuration.nix | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f17e06d..b484626 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -48,8 +48,10 @@ in { networking = { hostName = localConfiguration.hostName; networkmanager.enable = true; - extraHosts = builtins.readFile (builtins.fetchurl - "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"); + extraHosts = builtins.readFile (builtins.fetchurl { + url = "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"; + sha256 = "0mv61ki66jrzyzd8l7kf3xhfzk7z93c2rb76bxr35jg78wp252q0"; + }); }; system.autoUpgrade = { -- cgit v1.2.3 From a953b788d1b1e0f9dda920b6cbe95ed975877446 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jan 2021 15:23:52 -0300 Subject: nixos/configuration.nix: Add ed package for POSIX compliance --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b484626..9015557 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -217,6 +217,7 @@ in { flex gnugrep file + ed ## To be removed tdesktop # telegram-desktop application -- cgit v1.2.3 From aee9abdcfda41eb35c15cdeaf2c3c3a1434874bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jan 2021 15:26:26 -0300 Subject: bash/aliases.sh: Fix color on command aliases --- bash/aliases.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/aliases.sh b/bash/aliases.sh index a96666e..d49d8b2 100644 --- a/bash/aliases.sh +++ b/bash/aliases.sh @@ -37,8 +37,8 @@ alias r="source ~/.bashrc" alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" -alias grep='grep --color=always' -alias diff='diff --color=always' +alias grep='grep --color=auto' +alias diff='diff --color=auto' # https://linuxhandbook.com/run-alias-as-sudo/ alias sudo='sudo ' -- cgit v1.2.3 From 2cbf95511f5396a2106ca70ca560ffb4f8aacc58 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 20 Jan 2021 15:26:54 -0300 Subject: Add xmonad/scripts/ for reordering xrandr screen --- xmonad/scripts/ezran.sh | 3 +++ xmonad/scripts/usurpador.sh | 3 +++ 2 files changed, 6 insertions(+) create mode 100755 xmonad/scripts/ezran.sh create mode 100755 xmonad/scripts/usurpador.sh diff --git a/xmonad/scripts/ezran.sh b/xmonad/scripts/ezran.sh new file mode 100755 index 0000000..cabc578 --- /dev/null +++ b/xmonad/scripts/ezran.sh @@ -0,0 +1,3 @@ +#!/bin/sh +set -eu +xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output DP-2 --off --output DP-3 --mode 1360x768 --pos 1920x0 --rotate normal diff --git a/xmonad/scripts/usurpador.sh b/xmonad/scripts/usurpador.sh new file mode 100755 index 0000000..cd24199 --- /dev/null +++ b/xmonad/scripts/usurpador.sh @@ -0,0 +1,3 @@ +#!/bin/sh +set -eu +xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output DP-2 --off --output DP-3 --off -- cgit v1.2.3 From 62e9a55f5461c7f7dc289f871922aa8009a946ea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 22:30:35 -0300 Subject: fake-symlinks: Actually translate TODOs.md from org-mode --- bash/templates/TODOs.md | 23 +++++++++++------------ 1 file changed, 11 insertions(+), 12 deletions(-) diff --git a/bash/templates/TODOs.md b/bash/templates/TODOs.md index 4b0c4a9..017c0a1 100644 --- a/bash/templates/TODOs.md +++ b/bash/templates/TODOs.md @@ -1,12 +1,11 @@ -* Tasks -:PROPERTIES: -:CUSTOM_ID: tasks -:END: -* Bugs -:PROPERTIES: -:CUSTOM_ID: bugs -:END: -* Improvements -* Questions -* Resources -* Scratch +# Tasks + +# Bugs + +# Improvements + +# Questions + +# Resources + +# Scratch -- cgit v1.2.3 From d69752b29c99e15a2ecf7ca7b77caf4bf341a6c2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 22:30:47 -0300 Subject: fake-symlinks.sh: Add remembering repo --- bash/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 32719cc..8efec97 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -419,6 +419,7 @@ ln-all ln-bare-project parseclj \ swift2nix-demo \ cargo2nix \ cargo2nix-demo \ - website + website \ + remembering popd > /dev/null || exit 1 -- cgit v1.2.3 From 60089ebe9551e4570dccfacabf6e9253701da668 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 23:01:12 -0300 Subject: fake-symlinks: Add README.sh --- bash/fake-symlinks.sh | 1 + bash/templates/build-aux/workflow/README.sh | 29 +++++++++++++++++++++++++++++ bash/templates/build-aux/workflow/TODOs.sh | 18 +++++++++--------- 3 files changed, 39 insertions(+), 9 deletions(-) create mode 100755 bash/templates/build-aux/workflow/README.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 8efec97..5f04887 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -191,6 +191,7 @@ ln-build-aux() { cp-all build-aux/assert-todos.sh \ build-aux/assert-shellcheck.sh \ build-aux/workflow/TODOs.sh \ + build-aux/workflow/README.sh \ build-aux/workflow/style.css \ build-aux/workflow/preamble.md diff --git a/bash/templates/build-aux/workflow/README.sh b/bash/templates/build-aux/workflow/README.sh new file mode 100755 index 0000000..4da9bb5 --- /dev/null +++ b/bash/templates/build-aux/workflow/README.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +PROJECT="$2" + +RELEASES_LIST="$(mktemp)" +for version in $(git tag); do + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz)" >> "$RELEASES_LIST" +done + +RELEASES="$(mktemp)" +if [ -s "$RELEASES_LIST" ]; then + printf '# Releases\n\n' >> "$RELEASES" + cat "$RELEASES_LIST" >> "$RELEASES" +fi + +cat README.md "$RELEASES" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r markdown \ + -w html \ + > public/index.html diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh index 4a9eb65..3f9fa4b 100755 --- a/bash/templates/build-aux/workflow/TODOs.sh +++ b/bash/templates/build-aux/workflow/TODOs.sh @@ -11,13 +11,13 @@ REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#( envsubst < build-aux/workflow/preamble.md | \ printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$1 - TODOs" \ - --metadata lang=en \ - -H build-aux/workflow/style.css \ - -r markdown \ - -w html \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r markdown \ + -w html \ + -H build-aux/workflow/style.css \ > public/TODOs.html -- cgit v1.2.3 From 5abe07dd376c99402a646d1989c7100c2416c644 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 23:12:42 -0300 Subject: fake-symlinks: Add date to release list in README.sh --- bash/templates/build-aux/workflow/README.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/build-aux/workflow/README.sh b/bash/templates/build-aux/workflow/README.sh index 4da9bb5..1aa2593 100755 --- a/bash/templates/build-aux/workflow/README.sh +++ b/bash/templates/build-aux/workflow/README.sh @@ -8,7 +8,7 @@ PROJECT="$2" RELEASES_LIST="$(mktemp)" for version in $(git tag); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz)" >> "$RELEASES_LIST" + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" done RELEASES="$(mktemp)" -- cgit v1.2.3 From 4ab14861470eb931923b12ba6065e1c2b20a4034 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 23:30:25 -0300 Subject: nixos: package "remembering" application --- nixos/configuration.nix | 2 ++ nixos/not-on-nixpkgs/remembering.nix | 20 ++++++++++++++++++++ 2 files changed, 22 insertions(+) create mode 100644 nixos/not-on-nixpkgs/remembering.nix diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 9015557..48cb8e4 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -114,6 +114,7 @@ in { ${({ postPatch = ""; } // oldAttrs).postPatch} ''; }); + remembering = pkgs.callPackage ./not-on-nixpkgs/remembering.nix { }; nu-packages = with pkgs; [ awscli @@ -197,6 +198,7 @@ in { fzf calcurse pandoc + remembering ## Mail notmuch diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix new file mode 100644 index 0000000..b8c0bd7 --- /dev/null +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -0,0 +1,20 @@ +{ stdenv +, fetchurl +}: + +stdenv.mkDerivation rec { + pname = "remembering"; + version = "0.1.0"; + + src = fetchurl { + url = "https://git.euandreh.xyz/${pname}/snapshot/${pname}-${version}.tar.gz"; + sha256 = "0ahkppxzx8xwxb4lnq13vjr7sxyhxj0z4idwyj9gi49hjckwrxwq"; + }; + makeFlags = [ "PREFIX=$(out)" ]; + + meta = with stdenv.lib; { + description = "Translation support for Sphinx"; + homepage = "https://remembering.euandreh.xyz"; + license = licenses.agpl3; + }; +} -- cgit v1.2.3 From 665c63afa8b0d169b6c05d7aa0ce8cbd70ebd7d7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 23:35:28 -0300 Subject: nixos/not-on-nixpkgs/remembering.nix: Fix description --- nixos/not-on-nixpkgs/remembering.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix index b8c0bd7..9579c26 100644 --- a/nixos/not-on-nixpkgs/remembering.nix +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -13,7 +13,7 @@ stdenv.mkDerivation rec { makeFlags = [ "PREFIX=$(out)" ]; meta = with stdenv.lib; { - description = "Translation support for Sphinx"; + description = "Add memory to dmenu, fzf and similar tools."; homepage = "https://remembering.euandreh.xyz"; license = licenses.agpl3; }; -- cgit v1.2.3 From 82ac0f9d706bffb68b36e9016289cec9fe408065 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 21 Jan 2021 23:36:06 -0300 Subject: nixos/not-on-nixpkgs/remembering.nix: Inline arguments --- nixos/not-on-nixpkgs/remembering.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix index 9579c26..9f70b72 100644 --- a/nixos/not-on-nixpkgs/remembering.nix +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -1,6 +1,4 @@ -{ stdenv -, fetchurl -}: +{ stdenv, fetchurl }: stdenv.mkDerivation rec { pname = "remembering"; -- cgit v1.2.3 From 30a0c39a5ba4df583527f8c033612426f20790f3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 00:03:17 -0300 Subject: fzf.sh: Add remembering to f() --- bash/fzf.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index c5a3c9f..b87979d 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -37,7 +37,8 @@ fzg() { } f() { - file="$(git ls-files | fzf-tmux --select-1 --exit-0 --query "$2" --preview 'cat {}')" + profile="$(pwd | sed -e 's_/_:_g')" + file="$(git ls-files | remembering -p "$profile" -c "fzf-tmux --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" if [ -n "$file" ]; then # shellcheck disable=2068 history -s f $@ @@ -56,6 +57,7 @@ dev/libre/others/dinheiros/money.ledger ' v() { + # I want to keep the pre-defined order f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" if [ -n "$f" ]; then history -s v "$@" -- cgit v1.2.3 From 1ffcb5f4f850a65d167199ac1ccfcd9969fff540 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 10:46:49 -0300 Subject: nixfmt --- nixos/common.nix | 8 +++++--- nixos/configuration.nix | 3 ++- nixos/not-on-nixpkgs/remembering.nix | 3 ++- 3 files changed, 9 insertions(+), 5 deletions(-) diff --git a/nixos/common.nix b/nixos/common.nix index 3d39804..59160ac 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -26,8 +26,10 @@ let }; priv-crons = { pacheco-job = "0 12 5 * *"; }; in { - crons = builtins.mapAttrs - (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") pub-crons.no-mail - // builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") pub-crons.with-mail + crons = + builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") + pub-crons.no-mail // builtins.mapAttrs + (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") + pub-crons.with-mail // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; } diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 48cb8e4..6ce7860 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -49,7 +49,8 @@ in { hostName = localConfiguration.hostName; networkmanager.enable = true; extraHosts = builtins.readFile (builtins.fetchurl { - url = "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"; + url = + "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"; sha256 = "0mv61ki66jrzyzd8l7kf3xhfzk7z93c2rb76bxr35jg78wp252q0"; }); }; diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix index 9f70b72..acb0dff 100644 --- a/nixos/not-on-nixpkgs/remembering.nix +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -5,7 +5,8 @@ stdenv.mkDerivation rec { version = "0.1.0"; src = fetchurl { - url = "https://git.euandreh.xyz/${pname}/snapshot/${pname}-${version}.tar.gz"; + url = + "https://git.euandreh.xyz/${pname}/snapshot/${pname}-${version}.tar.gz"; sha256 = "0ahkppxzx8xwxb4lnq13vjr7sxyhxj0z4idwyj9gi49hjckwrxwq"; }; makeFlags = [ "PREFIX=$(out)" ]; -- cgit v1.2.3 From d902b45615ccdd51f316fe17cefa654d8536f47a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 10:47:03 -0300 Subject: ShellCheck --- bash/fzf.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/fzf.sh b/bash/fzf.sh index b87979d..04f45d9 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -61,6 +61,7 @@ v() { f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" if [ -n "$f" ]; then history -s v "$@" + # shellcheck disable=2088 history -s vi "~/$f" echo "$f" vi "$HOME/$f" -- cgit v1.2.3 From b99e91bf0f12e7413679a71590830017e8f3d18d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 10:47:40 -0300 Subject: assert-todos.sh --- build-aux/assert-todos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index ea0ab97..f9bab22 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|bash/util.sh|docbook-xsl.tar.gz)' +EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|bash/util.sh|docbook-xsl.tar.gz)' if git grep FIXME | grep -Ev "$EXCLUDE"; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." -- cgit v1.2.3 From 6c55370d24304a09dfdc607c6ebd04f059969cb6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 13:40:53 -0300 Subject: Update remembering address --- nixos/not-on-nixpkgs/remembering.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix index acb0dff..3179e7f 100644 --- a/nixos/not-on-nixpkgs/remembering.nix +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -6,8 +6,8 @@ stdenv.mkDerivation rec { src = fetchurl { url = - "https://git.euandreh.xyz/${pname}/snapshot/${pname}-${version}.tar.gz"; - sha256 = "0ahkppxzx8xwxb4lnq13vjr7sxyhxj0z4idwyj9gi49hjckwrxwq"; + "https://git.euandreh.xyz/${pname}/snapshot/${pname}-v${version}.tar.gz"; + sha256 = "1jhsgb83i2bxg579pwg77n91mr3lx6czi3vwgb3qvqph7134rrr1"; }; makeFlags = [ "PREFIX=$(out)" ]; -- cgit v1.2.3 From 19892cdff388c1031e20a65edc1accd0bdcdb0b2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 13:46:56 -0300 Subject: fake-symlinks: Add more info to mailinlist in preamble.md --- bash/templates/build-aux/workflow/preamble.md | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/bash/templates/build-aux/workflow/preamble.md b/bash/templates/build-aux/workflow/preamble.md index ac75d9d..c6ae56e 100644 --- a/bash/templates/build-aux/workflow/preamble.md +++ b/bash/templates/build-aux/workflow/preamble.md @@ -4,8 +4,9 @@ TODOs for $PROJECT_UC. See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). -Register a new one: -[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=BUG%20or%20TASK%3A%20%3Cdescription%3E). +Register a new one at +[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) +and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). *Você também pode escrever em português*. -- cgit v1.2.3 From ab79a137764ff681b963e6c7c10f2dcaa665cd7e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 14:42:51 -0300 Subject: open: Explicitly use firefox to open html files --- scripts/open | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/open b/scripts/open index dec5e60..97c93be 100755 --- a/scripts/open +++ b/scripts/open @@ -8,7 +8,7 @@ case "$1" in https://www.youtube.com/watch*) vlc "$1" ;; - http*|*.svg) + http*|*.svg|*.html) firefox "$1" ;; *.pdf) -- cgit v1.2.3 From 07ff4b7f9e9f08603321cd57b54ca2e06cd30e6a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 14:43:53 -0300 Subject: open: Use $BROWSER over firefox --- scripts/open | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/open b/scripts/open index 97c93be..904bdd1 100755 --- a/scripts/open +++ b/scripts/open @@ -9,7 +9,7 @@ case "$1" in vlc "$1" ;; http*|*.svg|*.html) - firefox "$1" + "$BROWSER" "$1" ;; *.pdf) zathura "$1" -- cgit v1.2.3 From 94383be5ec7792c9672a2418d46e954880999ab3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 15:06:36 -0300 Subject: fake-symlinks: Allow git-pre-push.sh.in and git-pre-push.sh to coexist --- bash/fake-symlinks.sh | 17 ++++++++++++++--- bash/templates/build-aux/ci/git-pre-push.sh | 19 +++++++++++++++++++ build-aux/ci/git-pre-push.sh | 19 +++++++++++++++++++ 3 files changed, 52 insertions(+), 3 deletions(-) create mode 100644 bash/templates/build-aux/ci/git-pre-push.sh create mode 100755 build-aux/ci/git-pre-push.sh diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 5f04887..a585d56 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -25,6 +25,9 @@ done mkdir -p ~/archive/torrent/ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; +DEFAULT_TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' +sed -e "$DEFAULT_TLD_SCRIPT" < build-aux/ci/git-pre-push.sh.in > build-aux/ci/git-pre-push.sh + normalize-name() { if [[ -n "$RENAME_TO" ]]; then echo "$RENAME_TO" @@ -80,10 +83,14 @@ sed-all() { if [ -n "$ENABLE_CI" ]; then ENABLE_CI_SCRIPT='s/__ENABLE_CI__ //g' - TLD_SCRIPT='' + if [ -n "$ENABLE_AUTOTOOLS" ]; then + TLD_SCRIPT='' + else + TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" + fi else ENABLE_CI_SCRIPT='/__ENABLE_CI__ /d' - TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' + TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" fi sed "$f" \ @@ -225,7 +232,11 @@ ln-guix-files() { ln-ci() { if [ -n "$ENABLE_CI" ]; then - sed-all build-aux/ci/git-pre-push.sh.in + if [ -n "$ENABLE_AUTOTOOLS" ]; then + sed-all build-aux/ci/git-pre-push.sh.in + else + EXECUTABLE=1 sed-all build-aux/ci/git-pre-push.sh + fi cp-all build-aux/assert-shellcheck.sh \ build-aux/ci/ci-build.sh \ build-aux/ci/git-post-receive.sh diff --git a/bash/templates/build-aux/ci/git-pre-push.sh b/bash/templates/build-aux/ci/git-pre-push.sh new file mode 100644 index 0000000..23839de --- /dev/null +++ b/bash/templates/build-aux/ci/git-pre-push.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eux + +PACKAGE="$(basename "$PWD")" +__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/data/git/$PACKAGE.git" + +DESCRIPTION="$(mktemp)" +if [ -f description ] +then + cp description "$DESCRIPTION" +else + git config euandreh.description > "$DESCRIPTION" +fi + +scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" +__ENABLE_CI__ ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" +__ENABLE_CI__ scp build-aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" +__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/build-aux/ci/git-pre-push.sh b/build-aux/ci/git-pre-push.sh new file mode 100755 index 0000000..2d2bcb1 --- /dev/null +++ b/build-aux/ci/git-pre-push.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eux + +PACKAGE="$(basename "$PWD")" +LOGS_DIR="/data/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/data/git/$PACKAGE.git" + +DESCRIPTION="$(mktemp)" +if [ -f description ] +then + cp description "$DESCRIPTION" +else + git config euandreh.description > "$DESCRIPTION" +fi + +scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" +ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" +scp build-aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" +scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" -- cgit v1.2.3 From a9c1f80feafa7c7c0210779060249fffca350ea0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 15:14:19 -0300 Subject: fake-symlinks: ci-build.sh: Allow CI runs without containers --- bash/templates/build-aux/ci/ci-build.sh | 13 +++++++++++-- build-aux/ci/ci-build.sh | 13 +++++++++++-- 2 files changed, 22 insertions(+), 4 deletions(-) diff --git a/bash/templates/build-aux/ci/ci-build.sh b/bash/templates/build-aux/ci/ci-build.sh index 93c9ee1..b7a4c38 100755 --- a/bash/templates/build-aux/ci/ci-build.sh +++ b/bash/templates/build-aux/ci/ci-build.sh @@ -35,10 +35,19 @@ EOF git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' + if [ -f build-aux/with-container.sh ]; then + RUNNER='./build-aux/with-container.sh' + else + RUNNER='sh -c' + fi + if [ -f ./bootstrap ]; then - ./build-aux/with-container.sh './bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' else - ./build-aux/with-container.sh 'make clean check public' + COMMAND='make clean check public' fi + + $RUNNER "$COMMAND" + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete } | tee "$LOGFILE" 2>&1 diff --git a/build-aux/ci/ci-build.sh b/build-aux/ci/ci-build.sh index 93c9ee1..b7a4c38 100755 --- a/build-aux/ci/ci-build.sh +++ b/build-aux/ci/ci-build.sh @@ -35,10 +35,19 @@ EOF git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' + if [ -f build-aux/with-container.sh ]; then + RUNNER='./build-aux/with-container.sh' + else + RUNNER='sh -c' + fi + if [ -f ./bootstrap ]; then - ./build-aux/with-container.sh './bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' else - ./build-aux/with-container.sh 'make clean check public' + COMMAND='make clean check public' fi + + $RUNNER "$COMMAND" + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete } | tee "$LOGFILE" 2>&1 -- cgit v1.2.3 From 04a7a208071912560f5d59cdccabfbdf7c9b86ea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 15:16:54 -0300 Subject: fake-symlinks.sh: Make "remembering" a "makefile-only-guix-project --- bash/fake-symlinks.sh | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index a585d56..5fa075e 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -417,7 +417,7 @@ ln-all ln-texinfo-autotools-guix-project guile-quickcheck guile-pds guile-clap ln-all ln-sphinx-autotools-guix-project libedn x-bindgen eq mediator # ln-all ln-scribble-autotools-guix-project ln-all ln-antora-autotools-guix-project byopds spalc -ln-all ln-makefile-only-guix-project vps pires +ln-all ln-makefile-only-guix-project vps pires remembering ln-all ln-description-foreign-project guix parsecc ln-all ln-bare-project parseclj \ boneco \ @@ -431,7 +431,6 @@ ln-all ln-bare-project parseclj \ swift2nix-demo \ cargo2nix \ cargo2nix-demo \ - website \ - remembering + website popd > /dev/null || exit 1 -- cgit v1.2.3 From 986fe3e1647ec5803e3e6895fd81098eea00f276 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 15:19:21 -0300 Subject: fake-symlinks.sh: manifest.scm: Remove extra packages not needed by bare project --- bash/templates/guix/manifest.scm | 6 ------ 1 file changed, 6 deletions(-) diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm index 1d962e3..0c8a225 100644 --- a/bash/templates/guix/manifest.scm +++ b/bash/templates/guix/manifest.scm @@ -8,14 +8,8 @@ git tar gzip - texlive - autoconf - automake - pkg-config gawk make - texinfo - emacs perl shellcheck pandoc))) -- cgit v1.2.3 From 64e3ea7fe58c3c923c576733ab9c35ab38c6aac6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 15:24:12 -0300 Subject: fake-symlinks: pinned-channels.scm: Update pinned version of Guix --- bash/templates/guix/pinned-channels.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/templates/guix/pinned-channels.scm b/bash/templates/guix/pinned-channels.scm index e1645f6..67b5a51 100644 --- a/bash/templates/guix/pinned-channels.scm +++ b/bash/templates/guix/pinned-channels.scm @@ -3,7 +3,7 @@ (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "dc2de508a38d8e0a3f93e8d6ded225d3a7e32548") + "d265809b782293eb42dd663b4611ca19dd2bf1b3") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From 6f9f8e7d1e8a56b8a8c008649523a5816e238777 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 18:31:28 -0300 Subject: fake-symlinks: assert-todos.sh: Rewrite using AWK --- bash/templates/build-aux/assert-todos.sh | 55 +++++++++++++++----------------- 1 file changed, 25 insertions(+), 30 deletions(-) diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh index 91015fe..0b0a8d6 100755 --- a/bash/templates/build-aux/assert-todos.sh +++ b/bash/templates/build-aux/assert-todos.sh @@ -7,33 +7,28 @@ if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/assert-todos.sh' | exit 1 fi -KNOWN_IDS='' -has_error=0 -# shellcheck disable=2013 -for todo in $(sed -e '/^\* Tasks$/,/^\* Improvements$/!d' TODOs.md | grep -nE '^\*\* .*$' | cut -d: -f1); do - if sed "${todo}q;d" TODOs.md | grep -qE '^\*\* (CANCELLED|DONE)'; then - ID_OFFSET=3 - else - ID_OFFSET=2 - fi - line_n="$((todo+ID_OFFSET))" - ID_LINE="$(sed "${line_n}q;d" TODOs.md)" - if echo "$ID_LINE" | grep -q '^:CUSTOM_ID: .*$'; then - ID="$(echo "$ID_LINE" | awk '{print $2}')" - if echo "$KNOWN_IDS" | grep -q "$ID"; then - echo "Duplicated ID: $ID" - has_error=1 - else - if [ -z "$KNOWN_IDS" ]; then - KNOWN_IDS="$ID" - else - KNOWN_IDS="$KNOWN_IDS:$ID" - fi - fi - else - echo "Missing ID for TODO in line $line_n" - has_error=1 - fi -done - -exit "$has_error" +awk -F'{#' ' +BEGIN { + status=0 + idx=0 + delete ids[0] +} +/^## / { + if (match($0, / \{#.*?\}$/) == 0) { + print "Missing ID for line " NR ":\n" $0 + status=1 + } + id_with_prefix = substr($2, 0, length($2) - 1) + match(id_with_prefix, /^\w+-/) + id = substr(id_with_prefix, RLENGTH + 1) + if (id in arr) { + print "Duplicate ID: " id + status=1 + } else { + arr[id] = 1 + } +} +/^# Improvements$/ { + exit status +} +' TODOs.md -- cgit v1.2.3 From 6904978d4e72bf0c37f68a7973021e12eb251255 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 18:51:20 -0300 Subject: fake-symlinks: basic-channel.scm: Use ":" as module separator --- bash/templates/rename/basic-channel.scm.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/templates/rename/basic-channel.scm.in b/bash/templates/rename/basic-channel.scm.in index 9ca6e15..024d085 100644 --- a/bash/templates/rename/basic-channel.scm.in +++ b/bash/templates/rename/basic-channel.scm.in @@ -1,5 +1,5 @@ (define-module (xyz euandreh @PACKAGE@ channel) - #:use-module ((guix licenses) #:prefix license/) + #:use-module ((guix licenses) #:prefix license:) #:use-module (guix transformations) #:use-module (guix gexp) #:use-module (guix packages) @@ -39,7 +39,7 @@ (synopsis "@PACKAGE_DESCRIPTION@") (description "@PACKAGE_LONG_DESCRIPTION@") (home-page "@PACKAGE_URL@") - (license license/agpl3+))) + (license license:agpl3+))) (define @PACKAGE@-master (let ((@PACKAGE@-from-master -- cgit v1.2.3 From afc747bcaa5ecb796354a805ca5125c900c84b91 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 21:00:56 -0300 Subject: nixos/configuration.nix: Remove commented packages --- nixos/configuration.nix | 49 +------------------------------------------------ 1 file changed, 1 insertion(+), 48 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 6ce7860..cdd1b23 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -222,54 +222,6 @@ in { file ed - ## To be removed - tdesktop # telegram-desktop application - # help2man - # libxml2 # =xmllint= - # libressl - # texlive.combined.scheme-full - # lilypond - # frescobaldi - # zip - # aerc - # cachix - # timidityWithEvenMoreFormats - # python36Packages.python-ly - # lame - # (aspellWithDicts (ps: with ps; [ en eo fr pt_BR ])) - # languagetool - # mercurialFull - # poedit - # ag - # gotop - # htop - # inotify-tools - # ncdu - # fd - # qrencode - # peek # GIF recorder - # ripgrep-all - # trayer - # networkmanagerapplet # nm-applet + trayer -> nmtui - # libreoffice - # vagrant - # virtualisation.virtualbox.host.enable = true; - # gvfs.enable = true; - # autoconf - # automake - # pkg-config - # python3 - # elixir - # nixfmt - # niv - # sbcl - # dhall - # dhall-json - # nodePackages.node2nix - # nodejs-10_x - # ruby - # nim - ## Containers and VMs qemu @@ -304,6 +256,7 @@ in { transmission-gtk # Transmission TUI keepassxc # pass? How can pass be used on Android? firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better + tdesktop # telegram -> gomuks ] ++ localConfiguration.proprietaryPackages ++ nu-packages; nixpkgs = { -- cgit v1.2.3 From cc9c5237c2ceb4704e2be11d6028b3c79c9d2140 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 21:02:53 -0300 Subject: nixos/configuration.nix: Replace big/GUI packages with small/TUI replacements Just remove: - Fossil - Syncthing Replace: - VLC -> mpv - Dino -> Poezio - Fractal -> gomuks - neomutt -> mutt - KeePassXC -> pass --- nixos/configuration.nix | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index cdd1b23..3016630 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -140,8 +140,7 @@ in { gnupg mr borgbackup - fossil - syncthing + pass ## CLI tools groff @@ -189,7 +188,6 @@ in { zathura st pavucontrol - weechat # replacing ERC newsboat # replacing elfeed acpi xsel @@ -204,7 +202,12 @@ in { ## Mail notmuch isync - neomutt + + ## Conversations + mutt + gomuks + weechat # replacing ERC + poezio ## Programming tools perl @@ -242,10 +245,8 @@ in { ## GUI programs audacity zbar - fractal calibre - vlc - dino + (mpv-with-scripts.override { scripts = with mpvScripts; [ mpris ]; }) ## Candidates to be replaced by alternatives emacs # To be replaced by vi + fzf. Also missing: replace TODOs.org in projects @@ -254,7 +255,6 @@ in { active-quodlibet # cmus + mutagen gpodder-with-youtube-dl # podboat? transmission-gtk # Transmission TUI - keepassxc # pass? How can pass be used on Android? firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better tdesktop # telegram -> gomuks ] ++ localConfiguration.proprietaryPackages ++ nu-packages; -- cgit v1.2.3 From 082a1e0c62c8b5994128a34d5c7eaf490a39311e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 21:15:02 -0300 Subject: env.sh: Add $PASSWORD_STORE_DIR --- bash/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/bash/env.sh b/bash/env.sh index e759e62..c1f9be6 100644 --- a/bash/env.sh +++ b/bash/env.sh @@ -6,6 +6,7 @@ export BROWSER=firefox export INPUTRC=~/.inputrc export BORG_REMOTE_PATH='borg1' export GOPATH="$HOME/dev/go" +export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From c0b576181060054700e2fd3906c87377c26cff19 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 22:28:13 -0300 Subject: Remove KeePassXC leftover files and configuration --- bash/fake-symlinks.sh | 3 --- guix/os.scm | 1 - org.keepassxc.keepassxc_browser.json | 10 ---------- 3 files changed, 14 deletions(-) delete mode 100644 org.keepassxc.keepassxc_browser.json diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh index 5fa075e..60f5f6d 100644 --- a/bash/fake-symlinks.sh +++ b/bash/fake-symlinks.sh @@ -1,8 +1,5 @@ #!/usr/bin/env bash -mkdir -p ~/.mozilla/native-messaging-hosts/ -cp "${DOTFILES}/org.keepassxc.keepassxc_browser.json" ~/.mozilla/native-messaging-hosts/ - pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 export DOLLAR='$' diff --git a/guix/os.scm b/guix/os.scm index fc62b6a..7bcb90f 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -146,7 +146,6 @@ vlc gpodder qutebrowser - keepassxc blueman bluez)) %base-packages)) diff --git a/org.keepassxc.keepassxc_browser.json b/org.keepassxc.keepassxc_browser.json deleted file mode 100644 index 1dac24b..0000000 --- a/org.keepassxc.keepassxc_browser.json +++ /dev/null @@ -1,10 +0,0 @@ -{ - "allowed_extensions": [ - "keepassxc-browser@keepassxc.org" - ], - "description": "KeePassXC integration with native messaging support", - "name": "org.keepassxc.keepassxc_browser", - "path": "/run/current-system/sw/bin/keepassxc-proxy", - "type": "stdio" -} - -- cgit v1.2.3 From 377c2bc2084867499c041d1176aaad5830f78da5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 22:42:38 -0300 Subject: configuration.nix: Backup ~/.bash_history with logrotate --- nixos/configuration.nix | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3016630..5d27d06 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -309,6 +309,14 @@ in { createolddir 744 andreh users su andreh users } + + /home/andreh/.bash_history { + rotate 5 + daily + olddir /home/andreh/archive/bash_history/ + createolddir 744 andreh users + su andreh users + } ''; }; -- cgit v1.2.3 From b3452dfef7529ea0f608ed6733640bd9420b65b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 22:49:04 -0300 Subject: Add xmonad/scripts/dmenu-pass.sh --- xmonad/scripts/dmenu-pass.sh | 12 ++++++++++++ xmonad/xmonad.hs | 2 ++ 2 files changed, 14 insertions(+) create mode 100755 xmonad/scripts/dmenu-pass.sh diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh new file mode 100755 index 0000000..9d43a94 --- /dev/null +++ b/xmonad/scripts/dmenu-pass.sh @@ -0,0 +1,12 @@ +#!/bin/sh +set -eu + +choice="$(find "$PASSWORD_STORE_DIR" -type f | \ + grep -Ev '(.git|.gpg-id)' | \ + sed -e "s|$PASSWORD_STORE_DIR/||" -e 's/\.gpg$//' | \ + remembering -p password-store \ + -c "dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18")" + +if [ -n "$choice" ]; then + pass show "$choice" | head -n1 | tr -d '\n' | xclip -sel clip +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index c206842..f0ac858 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -53,6 +53,8 @@ myKeyPBindings = -- yeganesh launcher , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") + , ("M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh") + -- yeganesh emoji , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh") -- cgit v1.2.3 From e372b45fd9b43e9666542f4f3d23fe3d5a0e17b7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 22:50:41 -0300 Subject: Rename files vlc -> vid --- scripts/vid | 22 ++++++++++++++++++++++ scripts/vlc | 22 ---------------------- xmonad/scripts/dmenu-vid.sh | 10 ++++++++++ xmonad/scripts/dmenu-vlc.sh | 10 ---------- xmonad/xmonad.hs | 2 +- 5 files changed, 33 insertions(+), 33 deletions(-) create mode 100755 scripts/vid delete mode 100755 scripts/vlc create mode 100755 xmonad/scripts/dmenu-vid.sh delete mode 100755 xmonad/scripts/dmenu-vlc.sh diff --git a/scripts/vid b/scripts/vid new file mode 100755 index 0000000..87fa2b2 --- /dev/null +++ b/scripts/vid @@ -0,0 +1,22 @@ +#!/bin/sh +set -eu + +NIX=/run/current-system/sw/bin/vlc +GUIX=/run/current-system/profile/bin/vlc + +if [ -e "$NIX" ]; then + VLC="$NIX" +elif [ -e "$GUIX" ]; then + VLC="$GUIX" +else + echo "Can't guess VLC executable" + exit 1 +fi + +if [ -z "${1:-}" ]; then + "$VLC" +else + "$VLC" "$1" + echo "$1" >> ~/archive/vlc/queue.txt +fi + diff --git a/scripts/vlc b/scripts/vlc deleted file mode 100755 index 87fa2b2..0000000 --- a/scripts/vlc +++ /dev/null @@ -1,22 +0,0 @@ -#!/bin/sh -set -eu - -NIX=/run/current-system/sw/bin/vlc -GUIX=/run/current-system/profile/bin/vlc - -if [ -e "$NIX" ]; then - VLC="$NIX" -elif [ -e "$GUIX" ]; then - VLC="$GUIX" -else - echo "Can't guess VLC executable" - exit 1 -fi - -if [ -z "${1:-}" ]; then - "$VLC" -else - "$VLC" "$1" - echo "$1" >> ~/archive/vlc/queue.txt -fi - diff --git a/xmonad/scripts/dmenu-vid.sh b/xmonad/scripts/dmenu-vid.sh new file mode 100755 index 0000000..e60b56f --- /dev/null +++ b/xmonad/scripts/dmenu-vid.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +URL="$(xsel -bo)" + +res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" + +if [ "$res" = 'yes' ]; then + vlc "$URL" +fi diff --git a/xmonad/scripts/dmenu-vlc.sh b/xmonad/scripts/dmenu-vlc.sh deleted file mode 100755 index e60b56f..0000000 --- a/xmonad/scripts/dmenu-vlc.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -eu - -URL="$(xsel -bo)" - -res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" - -if [ "$res" = 'yes' ]; then - vlc "$URL" -fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index f0ac858..f40c45f 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -87,7 +87,7 @@ myKeyPBindings = , ("M-z", sendMessage MirrorShrink) -- Enqueue link on clipboard in VLC - , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vlc.sh") + , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vid.sh") ] myLayoutHook = -- cgit v1.2.3 From 60c45b7f6e65030b603799a18fe7ed3fa723e955 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 23:20:53 -0300 Subject: Add vid* scripts --- bash/symlinks.sh | 2 +- scripts/vid | 24 +++++------------------- scripts/viddq | 17 +++++++++++++++++ scripts/videq | 7 +++++++ 4 files changed, 30 insertions(+), 20 deletions(-) create mode 100755 scripts/viddq create mode 100755 scripts/videq diff --git a/bash/symlinks.sh b/bash/symlinks.sh index 47c3ef5..453c5f3 100644 --- a/bash/symlinks.sh +++ b/bash/symlinks.sh @@ -20,7 +20,7 @@ ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc -mkdir -p ~/tmp/ ~/archive/vlc/ +mkdir -p ~/tmp/ touch ~/tmp/scratch.txt mkdir -p ~/.gnupg diff --git a/scripts/vid b/scripts/vid index 87fa2b2..12f6ffc 100755 --- a/scripts/vid +++ b/scripts/vid @@ -1,22 +1,8 @@ #!/bin/sh set -eu -NIX=/run/current-system/sw/bin/vlc -GUIX=/run/current-system/profile/bin/vlc - -if [ -e "$NIX" ]; then - VLC="$NIX" -elif [ -e "$GUIX" ]; then - VLC="$GUIX" -else - echo "Can't guess VLC executable" - exit 1 -fi - -if [ -z "${1:-}" ]; then - "$VLC" -else - "$VLC" "$1" - echo "$1" >> ~/archive/vlc/queue.txt -fi - +mkdir -p ~/archive/vid/ +for v in $@; do + echo "$v" >> ~/archive/vid/history.txt + mpv "$v" 1>/dev/null 2>/dev/null & disown +done diff --git a/scripts/viddq b/scripts/viddq new file mode 100755 index 0000000..eaabec2 --- /dev/null +++ b/scripts/viddq @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +QUEUE="$HOME/archive/vid/queue.txt" +NEXT="$(head -n1 "$QUEUE")" +if [ -z "$NEXT" ]; then + echo 'Queue is empty!' +else + if mpv "$NEXT" 2>/dev/null | tail -n1 | grep '^Exiting\.\.\. (End of file)$'; then + echo "Finished playing '$NEXT', getting next on the queue." >&2 + NEW_QUEUE="$(mktemp)" + tail -n+2 "$QUEUE" > "$NEW_QUEUE" + mv "$NEW_QUEUE" "$QUEUE" + else + echo "Quit playing '$NEXT' without finishing, not removing it from the queue." + fi +fi diff --git a/scripts/videq b/scripts/videq new file mode 100755 index 0000000..d3ca4ae --- /dev/null +++ b/scripts/videq @@ -0,0 +1,7 @@ +#!/bin/sh +set -eu + +mkdir -p ~/archive/vid/ +for v in $@; do + echo "$v" >> ~/archive/vid/queue.txt +done -- cgit v1.2.3 From 79d834b35164734f8bc66379d4659104ff4fe4a3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 23:44:12 -0300 Subject: dmenu-vid.sh: Rewrite it to be a one-of launcher of media in the queue --- xmonad/scripts/dmenu-vid.sh | 21 +++++++++++++++++---- 1 file changed, 17 insertions(+), 4 deletions(-) diff --git a/xmonad/scripts/dmenu-vid.sh b/xmonad/scripts/dmenu-vid.sh index e60b56f..dbadb49 100755 --- a/xmonad/scripts/dmenu-vid.sh +++ b/xmonad/scripts/dmenu-vid.sh @@ -1,10 +1,23 @@ #!/bin/sh set -eu -URL="$(xsel -bo)" +QUEUE="$HOME/archive/vid/queue.txt" +DB="$HOME/archive/vid/metadata-database.txt" -res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to VLC: %s' "$URL")")" +LIST="$(mktemp)" +touch "$DB" +for url in $(cat "$QUEUE"); do + MATCH="$(grep -F "$url" "$DB" ||:)" + if [ -n "$MATCH" ]; then + echo "$MATCH" >> "$LIST" + else + printf '%s - %s\n' "$(youtube-dl "$url" -o '%(title)s - %(uploader)s' --get-filename)" "$url" >> "$DB" & + echo "$url" >> "$LIST" + fi +done -if [ "$res" = 'yes' ]; then - vlc "$URL" +file="$(dmenu -l 20 -p 'Media: ' < "$LIST")" + +if [ -n "$file" ]; then + vid "$file" fi -- cgit v1.2.3 From 4ff0d3d20cdb5d54158e6b8e65abe59b6a81e1cb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 22 Jan 2021 23:48:52 -0300 Subject: Add dmenu-videq.sh as equivalent of previous dmenu-vid.sh --- xmonad/scripts/dmenu-videq.sh | 10 ++++++++++ xmonad/xmonad.hs | 1 + 2 files changed, 11 insertions(+) create mode 100755 xmonad/scripts/dmenu-videq.sh diff --git a/xmonad/scripts/dmenu-videq.sh b/xmonad/scripts/dmenu-videq.sh new file mode 100755 index 0000000..9e64bfd --- /dev/null +++ b/xmonad/scripts/dmenu-videq.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +URL="$(xsel -bo)" + +res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to media queue: %s' "$URL")")" + +if [ "$res" = 'yes' ]; then + videq "$URL" +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index f40c45f..184f0eb 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -88,6 +88,7 @@ myKeyPBindings = -- Enqueue link on clipboard in VLC , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vid.sh") + , ("C-M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-videq.sh") ] myLayoutHook = -- cgit v1.2.3 From 3c1bc5c786dd314aed75f6c77fad889609885e35 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 00:14:14 -0300 Subject: viddq: Add missing recursive call --- scripts/viddq | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/viddq b/scripts/viddq index eaabec2..6abb66a 100755 --- a/scripts/viddq +++ b/scripts/viddq @@ -11,6 +11,7 @@ else NEW_QUEUE="$(mktemp)" tail -n+2 "$QUEUE" > "$NEW_QUEUE" mv "$NEW_QUEUE" "$QUEUE" + viddq else echo "Quit playing '$NEXT' without finishing, not removing it from the queue." fi -- cgit v1.2.3 From 915882d1055ec9bacf92a7d52eb5d71b67b6d2ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 00:15:03 -0300 Subject: dmenu-vid.sh: Fix file being lauched --- xmonad/scripts/dmenu-vid.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xmonad/scripts/dmenu-vid.sh b/xmonad/scripts/dmenu-vid.sh index dbadb49..ba9c255 100755 --- a/xmonad/scripts/dmenu-vid.sh +++ b/xmonad/scripts/dmenu-vid.sh @@ -1,5 +1,6 @@ #!/bin/sh set -eu +set -x QUEUE="$HOME/archive/vid/queue.txt" DB="$HOME/archive/vid/metadata-database.txt" @@ -16,8 +17,9 @@ for url in $(cat "$QUEUE"); do fi done -file="$(dmenu -l 20 -p 'Media: ' < "$LIST")" +file_and_stuff="$(dmenu -l 20 -p 'Media: ' < "$LIST")" -if [ -n "$file" ]; then +if [ -n "$file_and_stuff" ]; then + file="$(echo "$file_and_stuff" | awk -F' - ' '{print $NF}')" vid "$file" fi -- cgit v1.2.3 From c748fe819629c8edfa71083e7795bfb7de4c9ea6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 00:17:04 -0300 Subject: dmenu-vid.sh: Add full path to vid executable --- xmonad/scripts/dmenu-vid.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/scripts/dmenu-vid.sh b/xmonad/scripts/dmenu-vid.sh index ba9c255..d54cff8 100755 --- a/xmonad/scripts/dmenu-vid.sh +++ b/xmonad/scripts/dmenu-vid.sh @@ -21,5 +21,5 @@ file_and_stuff="$(dmenu -l 20 -p 'Media: ' < "$LIST")" if [ -n "$file_and_stuff" ]; then file="$(echo "$file_and_stuff" | awk -F' - ' '{print $NF}')" - vid "$file" + $HOME/dev/libre/dotfiles/scripts/vid "$file" fi -- cgit v1.2.3 From 1d824d7994afd445e0ec80f28642c9739765df55 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 00:28:51 -0300 Subject: Add vidrm --- scripts/vidrm | 30 ++++++++++++++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100755 scripts/vidrm diff --git a/scripts/vidrm b/scripts/vidrm new file mode 100755 index 0000000..a9c1cc7 --- /dev/null +++ b/scripts/vidrm @@ -0,0 +1,30 @@ +#!/bin/sh +set -eu + +QUEUE="$HOME/archive/vid/queue.txt" +DB="$HOME/archive/vid/metadata-database.txt" + +LIST="$(mktemp)" +touch "$DB" +for url in $(cat "$QUEUE"); do + MATCH="$(grep -F "$url" "$DB" || echo "$url")" + echo "$MATCH" >> "$LIST" +done + +file_and_stuff="$(fzf < "$LIST")" + +if [ -n "$file_and_stuff" ]; then + file="$(echo "$file_and_stuff" | awk -F' - ' '{print $NF}')" + NEW_QUEUE="$(mktemp)" + awk -v file="$file" ' + BEGIN { + once=0 + } + once == 0 && $0 == file { + once=1 + print file + } + $0 != file { print } + ' "$QUEUE" > "$NEW_QUEUE" + mv "$NEW_QUEUE" "$QUEUE" +fi -- cgit v1.2.3 From eca5f4c3cbad2ab0a16f2a253fa93505da70b8ea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 00:29:24 -0300 Subject: dmenu-pass.sh: Add $PASSWORD_STORE_DIR --- xmonad/scripts/dmenu-pass.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh index 9d43a94..d0f117c 100755 --- a/xmonad/scripts/dmenu-pass.sh +++ b/xmonad/scripts/dmenu-pass.sh @@ -1,6 +1,8 @@ #!/bin/sh set -eu +export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" + choice="$(find "$PASSWORD_STORE_DIR" -type f | \ grep -Ev '(.git|.gpg-id)' | \ sed -e "s|$PASSWORD_STORE_DIR/||" -e 's/\.gpg$//' | \ -- cgit v1.2.3 From 0a23d93c5521b3c3da71607fbae0250ef7ef5882 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 01:07:36 -0300 Subject: rotate-mpris-player.sh: Move to POSIX sh and make it more robust Use AWK over cut $'\n' for saner iteration over lines. --- xmonad/scripts/rotate-mpris-player.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/xmonad/scripts/rotate-mpris-player.sh b/xmonad/scripts/rotate-mpris-player.sh index 863501e..cc47284 100755 --- a/xmonad/scripts/rotate-mpris-player.sh +++ b/xmonad/scripts/rotate-mpris-player.sh @@ -1,28 +1,28 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh +set -eu -mkdir -p "${HOME}/.cache/andreh/" -CURRENT_PLAYER_PATH="${HOME}/.cache/andreh/mpris-player.txt" +mkdir -p "$HOME/.cache/andreh/" +CURRENT_PLAYER_PATH="$HOME/.cache/andreh/mpris-player.txt" AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" -CURRENT_PLAYER="$(cat "${CURRENT_PLAYER_PATH}" ||:)" +CURRENT_PLAYER="$(cat "$CURRENT_PLAYER_PATH" ||:)" pick_first() { - echo "${AVAILABLE_PLAYERS}" | head -n 1 > "${CURRENT_PLAYER_PATH}" + echo "$AVAILABLE_PLAYERS" | head -n1 > "$CURRENT_PLAYER_PATH" } -if [[ "${CURRENT_PLAYER}" = "" ]]; then +if [ -z "$CURRENT_PLAYER" ]; then pick_first -elif ! echo "${AVAILABLE_PLAYERS}" | grep -q "${CURRENT_PLAYER}"; then +elif ! echo "$AVAILABLE_PLAYERS" | grep -q "$CURRENT_PLAYER"; then # Unknown $CURRENT_PLAYER, pick anyone pick_first else - INDEX="$(echo "${AVAILABLE_PLAYERS}" | grep -n "${CURRENT_PLAYER}" | cut -d: -f1)" - LENGTH="$(echo "${AVAILABLE_PLAYERS}" | wc -l)" - if [[ "${INDEX}" = "${LENGTH}" ]]; then + INDEX="$(echo "$AVAILABLE_PLAYERS" | grep -n "$CURRENT_PLAYER" | cut -d: -f1)" + LENGTH="$(echo "$AVAILABLE_PLAYERS" | wc -l)" + if [ "$INDEX" = "$LENGTH" ]; then # Reached the end of the $AVAILABLE_PLAYERS list, wrapping pick_first else # Get the next player instead - echo "${AVAILABLE_PLAYERS}" | cut -d$'\n' -f"$((INDEX + 1))" > "${CURRENT_PLAYER_PATH}" + echo "$AVAILABLE_PLAYERS" | awk -v idx="$INDEX" 'NR == idx+1 {print}' > "$CURRENT_PLAYER_PATH" fi fi -- cgit v1.2.3 From 635bded813d7e45a9a138a83ba3742d692a11a85 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 12:29:29 -0300 Subject: s/vlc/vid/g --- bash/x.sh | 10 +++++----- scripts/open | 4 ++-- 2 files changed, 7 insertions(+), 7 deletions(-) diff --git a/bash/x.sh b/bash/x.sh index bfad6da..7e28b20 100644 --- a/bash/x.sh +++ b/bash/x.sh @@ -5,11 +5,11 @@ xset r rate 225 75 # query with: xdg-mime query filetype xdg-mime default evince.desktop application/pdf -xdg-mime default vlc.desktop video/mp4 -xdg-mime default vlc.desktop video/webm -xdg-mime default vlc.desktop video/x-matroska -xdg-mime default vlc.desktop audio/mpeg -xdg-mime default vlc.desktop audio/x-flac +xdg-mime default mpv.desktop video/mp4 +xdg-mime default mpv.desktop video/webm +xdg-mime default mpv.desktop video/x-matroska +xdg-mime default mpv.desktop audio/mpeg +xdg-mime default mpv.desktop audio/x-flac xdg-mime default firefox.desktop text/html xdg-mime default firefox.desktop text/xml diff --git a/scripts/open b/scripts/open index 904bdd1..5680549 100755 --- a/scripts/open +++ b/scripts/open @@ -6,7 +6,7 @@ case "$1" in feh "$1" ;; https://www.youtube.com/watch*) - vlc "$1" + vid "$1" ;; http*|*.svg|*.html) "$BROWSER" "$1" @@ -15,7 +15,7 @@ case "$1" in zathura "$1" ;; *.flac|*.ogg|*.mkv) - vlc "$1" + vid "$1" ;; *) /run/current-system/sw/bin/xdg-open "$1" -- cgit v1.2.3 From 880f6cc9797ef1c2dc5770bc06406ff0e987eefb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 12:29:44 -0300 Subject: ShellCheck --- scripts/vid | 6 ++---- scripts/videq | 4 +--- scripts/vidrm | 4 ++-- xmonad/scripts/dmenu-vid.sh | 6 +++--- 4 files changed, 8 insertions(+), 12 deletions(-) diff --git a/scripts/vid b/scripts/vid index 12f6ffc..2d9f08c 100755 --- a/scripts/vid +++ b/scripts/vid @@ -2,7 +2,5 @@ set -eu mkdir -p ~/archive/vid/ -for v in $@; do - echo "$v" >> ~/archive/vid/history.txt - mpv "$v" 1>/dev/null 2>/dev/null & disown -done +echo "$1" >> ~/archive/vid/history.txt +nohup mpv "$1" 1>/dev/null 2>/dev/null & diff --git a/scripts/videq b/scripts/videq index d3ca4ae..067875b 100755 --- a/scripts/videq +++ b/scripts/videq @@ -2,6 +2,4 @@ set -eu mkdir -p ~/archive/vid/ -for v in $@; do - echo "$v" >> ~/archive/vid/queue.txt -done +echo "$1" >> ~/archive/vid/queue.txt diff --git a/scripts/vidrm b/scripts/vidrm index a9c1cc7..dbdc6d4 100755 --- a/scripts/vidrm +++ b/scripts/vidrm @@ -6,10 +6,10 @@ DB="$HOME/archive/vid/metadata-database.txt" LIST="$(mktemp)" touch "$DB" -for url in $(cat "$QUEUE"); do +while IFS='' read -r url; do MATCH="$(grep -F "$url" "$DB" || echo "$url")" echo "$MATCH" >> "$LIST" -done +done < "$QUEUE" file_and_stuff="$(fzf < "$LIST")" diff --git a/xmonad/scripts/dmenu-vid.sh b/xmonad/scripts/dmenu-vid.sh index d54cff8..8b5ec40 100755 --- a/xmonad/scripts/dmenu-vid.sh +++ b/xmonad/scripts/dmenu-vid.sh @@ -7,7 +7,7 @@ DB="$HOME/archive/vid/metadata-database.txt" LIST="$(mktemp)" touch "$DB" -for url in $(cat "$QUEUE"); do +while IFS='' read -r url; do MATCH="$(grep -F "$url" "$DB" ||:)" if [ -n "$MATCH" ]; then echo "$MATCH" >> "$LIST" @@ -15,11 +15,11 @@ for url in $(cat "$QUEUE"); do printf '%s - %s\n' "$(youtube-dl "$url" -o '%(title)s - %(uploader)s' --get-filename)" "$url" >> "$DB" & echo "$url" >> "$LIST" fi -done +done < "$QUEUE" file_and_stuff="$(dmenu -l 20 -p 'Media: ' < "$LIST")" if [ -n "$file_and_stuff" ]; then file="$(echo "$file_and_stuff" | awk -F' - ' '{print $NF}')" - $HOME/dev/libre/dotfiles/scripts/vid "$file" + "$HOME/dev/libre/dotfiles/scripts/vid" "$file" fi -- cgit v1.2.3 From 942a90d95597ad594a5ea793718ed6b11351ffe6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 12:49:30 -0300 Subject: util.sh: Add gvi() --- bash/util.sh | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/bash/util.sh b/bash/util.sh index c38b18c..7e4e942 100644 --- a/bash/util.sh +++ b/bash/util.sh @@ -39,3 +39,12 @@ task() { printf '%s\n\n%s\n\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ sponge TODOs.md } + +gvi() { + if [ -e "$1" ]; then + INIT="gpg -qd" + else + INIT="echo" + fi + $INIT "$1" | vipe | gpg -qer eu@euandre.org | sponge "$1" +} -- cgit v1.2.3 From c39e7e6ff4f3112e1abf6856e8c03a2239fc2097 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 14:17:01 -0300 Subject: Remove public/ --- public/nixos/burn.sh | 51 -------------- public/nixos/configuration.nix | 1 - public/nixos/install.sh | 134 ------------------------------------ public/nixos/setup.sh | 153 ----------------------------------------- public/nixos/template.nix | 5 -- 5 files changed, 344 deletions(-) delete mode 100755 public/nixos/burn.sh delete mode 120000 public/nixos/configuration.nix delete mode 100755 public/nixos/install.sh delete mode 100755 public/nixos/setup.sh delete mode 100644 public/nixos/template.nix diff --git a/public/nixos/burn.sh b/public/nixos/burn.sh deleted file mode 100755 index 7785727..0000000 --- a/public/nixos/burn.sh +++ /dev/null @@ -1,51 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail - -usage() { - red "Missing argument $1.\n" - cat < - - Arguments: - NIXOS_URL Download URL for NixOS ISO to be installed. Can be found at https://nixos.org/nixos/download.html - USB_STICK File descriptor of USB stick where to burn the ISO into. Use lsblk or similar tools to get it's name. - -Examples: - Download NixOS 19.03 x86_64 minimal and burn it into stick on /dev/sdb: - NIXOS_URL='https://releases.nixos.org/nixos/19.03/nixos-19.03.172764.50d5d73e22b/nixos-minimal-19.03.172764.50d5d73e22b-x86_64-linux.iso' - curl https://euandre.org/dotfiles/nixos/burn.sh | bash -s "\$NIXOS_URL" /dev/sdb -EOF -} - -NIXOS_URL="${1:-}" -USB_STICK="${2:-}" -TMP_DIR="$(mktemp -d)" -ISO_PATH="${TMP_DIR}/nixos.iso" -mkdir -p "${TMP_DIR}" - -[[ -z "${NIXOS_URL}" ]] && { - usage 'NIXOS_URL' - exit 2 -} - -[[ -z "${USB_STICK}" ]] && { - usage 'USB_STICK' - exit 2 -} - -yellow "Downloading NixOS ISO..." -wget -cO "${ISO_PATH}" "${NIXOS_URL}" -wget -cO "${ISO_PATH}.sha256" "${NIXOS_URL}.sha256" -diff <(sha256sum "${ISO_PATH}" | awk '{print $1}') <(awk '{print $1}' < "${ISO_PATH}.sha256") || { - red "SHA256 didn't match!" - exit 1 -} -green "Done. SHA256 match." - -yellow "Writing ISO image to ${USB_STICK}. We'll need sudo for it..." -blue "$(du -hs "${ISO_PATH}")" -sudo umount "${USB_STICK}1" ||: -sudo dd if="${ISO_PATH}" of="${USB_STICK}" status=progress -sync -green "Done. You can remove the USB stick ${USB_STICK} with no unmounting required." diff --git a/public/nixos/configuration.nix b/public/nixos/configuration.nix deleted file mode 120000 index 8f24f66..0000000 --- a/public/nixos/configuration.nix +++ /dev/null @@ -1 +0,0 @@ -../../nixos/configuration.nix \ No newline at end of file diff --git a/public/nixos/install.sh b/public/nixos/install.sh deleted file mode 100755 index 5b7930d..0000000 --- a/public/nixos/install.sh +++ /dev/null @@ -1,134 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p bash jq envsubst wget utillinux gptfdisk cryptsetup lvm2 dosfstools e2fsprogs mkpasswd -# shellcheck shell=bash -set -Eeuo pipefail - -end="\033[0m" - -green() { - green_color="\033[0;32m" - echo -e "${green_color}${1}${end}" -} - -yellow() { - yellow_color="\033[0;33m" - echo -e "${yellow_color}${1}${end}" -} - -blue() { - blue_color="\033[0;34m" - echo -e "${blue_color}${1}${end}" -} - -red() { - red_color="\033[0;31m" - echo -e "${red_color}${1}${end}" -} - -usage() { - red "Missing input argument $1.\n" - cat < - - Arguments - HOST_NAME The networking.hostName of the installation. Something like 'velhinho-nixos'. - DEVICE The LUKS device where to install to. Use lsblk or similar tools to get it's name. - -Examples: - Download install.sh and run it with 'velhinho-nixos' as hostName and '/dev/sda' as disk device: - curl https://euandre.org/dotfiles/nixos/install.sh > install.sh - chmod +x install.sh - ./install.sh velhinho-nixos /dev/sda -EOF -} - -HOST_NAME="${1:-}" -DEVICE="${2:-}" - -[[ -z "${HOST_NAME}" ]] && { - usage 'HOST_NAME' - exit 2 -} - -[[ -z "${DEVICE}" ]] && { - usage 'DEVICE' - exit 2 -} - - -if [[ "${DEVICE}" = '/dev/sda' ]]; then - export DEVICE_P2="${DEVICE}2" - export DEVICE_P3="${DEVICE}3" -fi - -if [[ "${DEVICE}" = '/dev/nvme0n1' ]]; then - export DEVICE_P2="${DEVICE}p2" - export DEVICE_P3="${DEVICE}p3" -fi - -SERVER="https://euandre.org/dotfiles/nixos" - -yellow "Downloading Nix files..." -TMP_DIR="$(mktemp -d)" -wget -O "${TMP_DIR}/configuration.nix" "${SERVER}/configuration.nix" -wget -O "${TMP_DIR}/template.nix" "${SERVER}/template.nix" -green "Done." - -yellow "Creating content of '/etc/nixos/local-configuration.nix'..." -export HOST_NAME -export DEVICE -envsubst < "${TMP_DIR}/template.nix" > "${TMP_DIR}/local-configuration.nix" -blue "$(cat "${TMP_DIR}/local-configuration.nix")" -read -p "Confirm content of '/etc/nixos/local-configuration.nix'? (y/N) " -n 1 -r -echo # Move to a new line -if [[ ! $REPLY =~ ^[Yy]$ ]]; then - red "Unconfirmed content of '/etc/nixos/local-configuration.nix'." - red "Exitting." - exit 1 -fi -green "Done." - -yellow "Wiping '${DEVICE}'and partitioning it..." -# Derived from: -# https://www.rodsbooks.com/gdisk/sgdisk-walkthrough.html -# https://chris-martin.org/2015/installing-nixos -wipefs --all --force "${DEVICE}" -sgdisk --clear "${DEVICE}" # Unclear the v -sgdisk --zap-all "${DEVICE}" # order here ^ -sgdisk --mbrtogpt "${DEVICE}" -sgdisk --new 1:2048:4095 --change-name 1:"BIOS boot partition" --typecode 1:EF02 "${DEVICE}" -sgdisk --new 2:4096:1028095 --change-name 2:"EFI System" --typecode 2:EF00 "${DEVICE}" -sgdisk --new 3:1028096:0 --change-name 3:"Linux LVM" --typecode 3:8E00 "${DEVICE}" -sgdisk --print "${DEVICE}" -green "Done." - -yellow "Configuring LUKS encryption on '${DEVICE_P3}'..." -cryptsetup luksFormat "${DEVICE_P3}" -cryptsetup luksOpen "${DEVICE_P3}" enc-pv -pvcreate /dev/mapper/enc-pv -vgcreate vg /dev/mapper/enc-pv -lvcreate -n swap vg -L 10G -lvcreate -n root vg -l 100%FREE -green "Done." - -yellow "Formatting '${DEVICE_P2}'..." -mkfs.vfat -n BOOT "${DEVICE_P2}" -mkfs.ext4 -L root /dev/vg/root -mkswap -L swap /dev/vg/swap -green "Done." - -yellow "Mounting and activating swap..." -mount /dev/vg/root /mnt -mkdir /mnt/boot -mount "${DEVICE_P2}" /mnt/boot -swapon /dev/vg/swap -green "Done." - -yellow "Installing NixOS!" -nixos-generate-config --root /mnt -nixos-install -green "Done." - -yellow "Shutting down..." -shutdown now diff --git a/public/nixos/setup.sh b/public/nixos/setup.sh deleted file mode 100755 index 2587fe9..0000000 --- a/public/nixos/setup.sh +++ /dev/null @@ -1,153 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p bash -# shellcheck shell=bash -set -Eeuo pipefail - -end="\033[0m" - -green() { - green_color="\033[0;32m" - echo -e "${green_color}${1}${end}" -} - -yellow() { - yellow_color="\033[0;33m" - echo -e "${yellow_color}${1}${end}" -} - -blue() { - blue_color="\033[0;34m" - echo -e "${blue_color}${1}${end}" -} - -red() { - red_color="\033[0;31m" - echo -e "${red_color}${1}${end}" -} - -usage() { - red "Missing input argument $1.\n" - cat < - - Arguments - TAR_PATH Path to the encrypted tar file with key pair and ownertrust information. - -Examples: - Download setup.sh and run it local './EuAndreh.tar.gpg' key pair: - curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ./EuAndreh.tar.gpg -EOF -} - -TAR_PATH="${1:-}" - -[[ -z "${TAR_PATH}" ]] && { - usage 'TAR_PATH' - exit 2 -} - -import_gpg() { - yellow "Import GPG data..." - gpg -o EuAndreh.tar -d "${TAR_PATH}" - tar -xvf EuAndreh.tar - gpg --import keys.gpg - gpg --import-ownertrust trust.txt - - rm "${TAR_PATH}" - shred trust.txt - rm trust.txt - shred keys.gpg - rm keys.gpg - shred EuAndreh.tar - rm EuAndreh.tar - green "Done." -} - -start_nextcloud() { - yellow "Starting Nextcloud process and leaving it on the background..." - nextcloud &> /dev/null & - disown - green "Done." - - yellow "Waiting for Nextcloud Git Annex repo to become available..." - while true; do - read -r -p "Has Nextcloud finished syncing? (Type uppercase sync): " sync - [ "$sync" = 'SYNC' ] && break - red "Please try again." - done - green "Done." -} - -configure_git_annex() { - yellow "Setting up Git Annex repository..." - git clone "gcrypt::$HOME/Nextcloud/annex.git" "$HOME/annex/" - pushd ~/annex/ - read -r -p "What's the description of the local Git Annex repository? " DESCRIPTION - git config --global user.email "eu@euandre.org" - git config --global user.name "EuAndreh" - git annex describe here "${DESCRIPTION}" - - git annex enableremote nextcloud - git annex enableremote s3 - git annex enableremote hd - # gitlab - # rsyncnet - - git annex upgrade - git annex sync - popd - green "Done." -} - -configure_dotfiles() { - yellow "Setting up temporary SSH configuration and dotfiles repository..." - mkdir -p ~/.ssh - cp ~/annex/secret/SSH/id_rsa.pub.txt ~/.ssh/id_rsa.pub - cp ~/annex/secret/SSH/id_rsa.txt ~/.ssh/id_rsa - chmod 600 ~/.ssh/id_rsa - blue "Open up the password manager to decrypt the SSH private key" - read -p "A prompt for the SSH password will appear! (Press any key to continue)" -n 1 -r - - export SSH_ENV="$HOME/.ssh/environment" - echo "Initialising new SSH agent..." - ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" - echo succeeded - chmod 600 "${SSH_ENV}" - # shellcheck disable=1090 - . "${SSH_ENV}" > /dev/null - ssh-add - - mkdir -p ~/dev/libre/ - git clone git.euandreh.xyz/dotfiles ~/dev/libre/dotfiles/ - pushd ~/dev/libre/dotfiles/ - git crypt unlock - popd - pushd ~/ - # shellcheck disable=1090 - source ~/dev/libre/dotfiles/bash/bashrc.sh - popd - - read -p "A prompt for the sudo password password will appear for the NixOS symlinks! (Press any key to continue)" -n 1 -r - sudo ln -fs ~/dev/libre/dotfiles/nixos/configuration.nix /etc/nixos/configuration.nix - # sudo create symlink for /etc/nixos/configuration.nix and /etc/nixos/local-configuration.nix - green "Done." -} - -restore_backups() { - echo rsync - echo borg serve - - # restore mbsync from backup - # restore notmuch from backup - # restore newsboat from backup - # restore archive from backup -} - -import_gpg -start_nextcloud -setup_git_annex -setup_dotfiles -restore_backups - -green "All done!" diff --git a/public/nixos/template.nix b/public/nixos/template.nix deleted file mode 100644 index bd10431..0000000 --- a/public/nixos/template.nix +++ /dev/null @@ -1,5 +0,0 @@ -{ - hostName = "${HOST_NAME}"; - luksDevice = "${DEVICE_P3}"; - passwordFile = "/etc/nixos/password-hash.txt"; -} -- cgit v1.2.3 From 3cc8e7d1f87dde6dcf0e9cb5423f69ae148198af Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 15:01:19 -0300 Subject: nixos/configuration.nix: Add buku package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5d27d06..51b96fe 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -198,6 +198,7 @@ in { calcurse pandoc remembering + buku # replaces Firefox bookmarks ## Mail notmuch -- cgit v1.2.3 From d98c92a2063a52d0b6ed2982c6fdfdaa1d092f02 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 15:02:34 -0300 Subject: nixos/configuration.nix: Increase number of .bash_history being logrotated --- nixos/configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 51b96fe..3a9fe76 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -312,7 +312,7 @@ in { } /home/andreh/.bash_history { - rotate 5 + rotate 30 daily olddir /home/andreh/archive/bash_history/ createolddir 744 andreh users -- cgit v1.2.3 From 269666b958dfd90e0b9764f4c351dfdc0f1f879a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 15:04:08 -0300 Subject: s|vlc/playlist.txt|vid/playlist.txt|g --- bash/fzf.sh | 2 +- spacemacs.el | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index 04f45d9..41b9122 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -52,7 +52,7 @@ Sync/TODOs.md annex/txt/things.md tmp/scratch.txt annex/bin/misc/git/mrconfig.ini -archive/vlc/playlist.txt +archive/vid/playlist.txt dev/libre/others/dinheiros/money.ledger ' diff --git a/spacemacs.el b/spacemacs.el index 8294b1b..a2adf40 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -807,7 +807,7 @@ through `notmuch-message-attach-regex'." "annex/bin/misc/mail/notmuch-post.sh" "annex/bin/misc/mail/notmuch.el" "tmp/scratch.txt" - "archive/vlc/playlist.txt" + "archive/vid/playlist.txt" "annex/txt/Meeting Notes.org" "dev/libre/others/dinheiros/money.ledger") :action '(("Find file" . (lambda (f) -- cgit v1.2.3 From 050e6613db2aad8d1934abc0678147c84421f784 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 15:08:26 -0300 Subject: fzf.sh: Increase priority of scratch.txt --- bash/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/bash/fzf.sh b/bash/fzf.sh index 41b9122..0496f23 100644 --- a/bash/fzf.sh +++ b/bash/fzf.sh @@ -49,8 +49,8 @@ f() { V_FILES=' Sync/TODOs.md -annex/txt/things.md tmp/scratch.txt +annex/txt/things.md annex/bin/misc/git/mrconfig.ini archive/vid/playlist.txt dev/libre/others/dinheiros/money.ledger -- cgit v1.2.3 From 6208c72814bdc430243b9a21710fd4e6573c32b4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:01:56 -0300 Subject: nixos/configuration.nix: Add sponsorblock script to mpv --- nixos/configuration.nix | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 3a9fe76..f01c67b 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -247,7 +247,9 @@ in { audacity zbar calibre - (mpv-with-scripts.override { scripts = with mpvScripts; [ mpris ]; }) + (mpv-with-scripts.override { + scripts = with mpvScripts; [ mpris sponsorblock ]; + }) ## Candidates to be replaced by alternatives emacs # To be replaced by vi + fzf. Also missing: replace TODOs.org in projects -- cgit v1.2.3 From 36f6e1c1593f268139e97f21e23cfe5c0dd53249 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:03:22 -0300 Subject: git mv bash/ sh/ --- bash/Positive.ogg | Bin 99826 -> 0 bytes bash/agents.sh | 25 - bash/aliases.sh | 45 -- bash/bash_profile.sh | 4 - bash/bashrc.sh | 18 - bash/colors.sh | 115 ---- bash/config.sh | 55 -- bash/env.sh | 17 - bash/fake-symlinks.sh | 433 -------------- bash/fzf.sh | 69 --- bash/git-prompt.sh | 589 ------------------ bash/mr-execute.sh | 17 - bash/ps1.sh | 98 --- bash/reload.sh | 8 - bash/symlinks.sh | 72 --- bash/templates/..git/hooks/pre-push | 1 - bash/templates/..gitignore | 46 -- bash/templates/.guix-authorizations | 4 - bash/templates/.guix-channel | 4 - bash/templates/AUTHORS | 2 - bash/templates/COPYING | 661 --------------------- bash/templates/ChangeLog | 2 - bash/templates/HACKING.in | 5 - bash/templates/INSTALL | 368 ------------ bash/templates/Makefile | 13 - bash/templates/Makefile.am | 16 - bash/templates/NEWS | 7 - bash/templates/README | 6 - bash/templates/README.in | 40 -- bash/templates/TODOs.md | 11 - bash/templates/_plugins/linter.rb | 55 -- bash/templates/bootstrap | 3 - bash/templates/build-aux/assert-docs-spelling.sh | 32 - bash/templates/build-aux/assert-shellcheck.sh | 6 - bash/templates/build-aux/assert-todos.sh | 34 -- bash/templates/build-aux/ci/ci-build.sh | 53 -- bash/templates/build-aux/ci/git-post-receive.sh | 14 - bash/templates/build-aux/ci/git-pre-push.sh | 19 - bash/templates/build-aux/ci/git-pre-push.sh.in | 19 - bash/templates/build-aux/compile-readme.sh | 9 - bash/templates/build-aux/default-extra-dist.am | 6 - bash/templates/build-aux/dev-checks.am | 17 - bash/templates/build-aux/docbook-xsl.tar.gz | Bin 5181440 -> 0 bytes bash/templates/build-aux/git-notes-release.am | 7 - bash/templates/build-aux/git-notes-release.sh | 77 --- bash/templates/build-aux/guile.am | 16 - .../templates/build-aux/html-files-from-sources.am | 23 - bash/templates/build-aux/rust.am | 9 - .../templates/build-aux/sphinx-build-web-assets.sh | 64 -- .../build-aux/texinfo-build-web-assets.sh | 55 -- bash/templates/build-aux/with-container.sh | 4 - bash/templates/build-aux/workflow/README.sh | 29 - bash/templates/build-aux/workflow/TODOs.sh | 23 - bash/templates/build-aux/workflow/preamble.md | 16 - bash/templates/build-aux/workflow/style.css | 38 -- bash/templates/configure.ac | 25 - bash/templates/cronjob-with-email.sh | 32 - bash/templates/default.nix | 14 - bash/templates/description | 1 - bash/templates/doc/Makefile | 20 - bash/templates/doc/_templates/footer.html | 7 - bash/templates/doc/_templates/layout.html | 59 -- bash/templates/doc/conf.py.in | 56 -- bash/templates/doc/dictionaries/en.txt | 0 bash/templates/doc/dictionaries/international.txt | 0 bash/templates/doc/favicon.ico | Bin 1150 -> 0 bytes bash/templates/doc/i18n-pagenames.json | 3 - bash/templates/doc/index.rst | 31 - bash/templates/guix/channel/euandreh.key | 63 -- bash/templates/guix/manifest.scm | 15 - bash/templates/guix/pinned-channels.scm | 11 - bash/templates/m4/guile.m4 | 397 ------------- bash/templates/m4/links.m4 | 25 - bash/templates/m4/programmer-mode.m4 | 17 - bash/templates/rename/basic-channel.scm.in | 72 --- bash/templates/rename/empty-texinfo.texi | 5 - bash/util.sh | 50 -- bash/x.sh | 18 - build-aux/assert-todos.sh | 2 +- scripts/fim | 2 +- scripts/gc-mail.sh | 2 +- scripts/gc-nix.sh | 2 +- scripts/gc.sh | 2 +- scripts/post.sh | 2 +- sh/Positive.ogg | Bin 0 -> 99826 bytes sh/agents.sh | 25 + sh/aliases.sh | 45 ++ sh/bash_profile.sh | 4 + sh/bashrc.sh | 18 + sh/colors.sh | 115 ++++ sh/config.sh | 55 ++ sh/env.sh | 17 + sh/fake-symlinks.sh | 433 ++++++++++++++ sh/fzf.sh | 69 +++ sh/git-prompt.sh | 589 ++++++++++++++++++ sh/mr-execute.sh | 17 + sh/ps1.sh | 98 +++ sh/reload.sh | 8 + sh/symlinks.sh | 72 +++ sh/templates/..git/hooks/pre-push | 1 + sh/templates/..gitignore | 46 ++ sh/templates/.guix-authorizations | 4 + sh/templates/.guix-channel | 4 + sh/templates/AUTHORS | 2 + sh/templates/COPYING | 661 +++++++++++++++++++++ sh/templates/ChangeLog | 2 + sh/templates/HACKING.in | 5 + sh/templates/INSTALL | 368 ++++++++++++ sh/templates/Makefile | 13 + sh/templates/Makefile.am | 16 + sh/templates/NEWS | 7 + sh/templates/README | 6 + sh/templates/README.in | 40 ++ sh/templates/TODOs.md | 11 + sh/templates/_plugins/linter.rb | 55 ++ sh/templates/bootstrap | 3 + sh/templates/build-aux/assert-docs-spelling.sh | 32 + sh/templates/build-aux/assert-shellcheck.sh | 6 + sh/templates/build-aux/assert-todos.sh | 34 ++ sh/templates/build-aux/ci/ci-build.sh | 53 ++ sh/templates/build-aux/ci/git-post-receive.sh | 14 + sh/templates/build-aux/ci/git-pre-push.sh | 19 + sh/templates/build-aux/ci/git-pre-push.sh.in | 19 + sh/templates/build-aux/compile-readme.sh | 9 + sh/templates/build-aux/default-extra-dist.am | 6 + sh/templates/build-aux/dev-checks.am | 17 + sh/templates/build-aux/docbook-xsl.tar.gz | Bin 0 -> 5181440 bytes sh/templates/build-aux/git-notes-release.am | 7 + sh/templates/build-aux/git-notes-release.sh | 77 +++ sh/templates/build-aux/guile.am | 16 + sh/templates/build-aux/html-files-from-sources.am | 23 + sh/templates/build-aux/rust.am | 9 + sh/templates/build-aux/sphinx-build-web-assets.sh | 64 ++ sh/templates/build-aux/texinfo-build-web-assets.sh | 55 ++ sh/templates/build-aux/with-container.sh | 4 + sh/templates/build-aux/workflow/README.sh | 29 + sh/templates/build-aux/workflow/TODOs.sh | 23 + sh/templates/build-aux/workflow/preamble.md | 16 + sh/templates/build-aux/workflow/style.css | 38 ++ sh/templates/configure.ac | 25 + sh/templates/cronjob-with-email.sh | 32 + sh/templates/default.nix | 14 + sh/templates/description | 1 + sh/templates/doc/Makefile | 20 + sh/templates/doc/_templates/footer.html | 7 + sh/templates/doc/_templates/layout.html | 59 ++ sh/templates/doc/conf.py.in | 56 ++ sh/templates/doc/dictionaries/en.txt | 0 sh/templates/doc/dictionaries/international.txt | 0 sh/templates/doc/favicon.ico | Bin 0 -> 1150 bytes sh/templates/doc/i18n-pagenames.json | 3 + sh/templates/doc/index.rst | 31 + sh/templates/guix/channel/euandreh.key | 63 ++ sh/templates/guix/manifest.scm | 15 + sh/templates/guix/pinned-channels.scm | 11 + sh/templates/m4/guile.m4 | 397 +++++++++++++ sh/templates/m4/links.m4 | 25 + sh/templates/m4/programmer-mode.m4 | 17 + sh/templates/rename/basic-channel.scm.in | 72 +++ sh/templates/rename/empty-texinfo.texi | 5 + sh/util.sh | 50 ++ sh/x.sh | 18 + spacemacs.el | 2 +- 163 files changed, 4307 insertions(+), 4307 deletions(-) delete mode 100644 bash/Positive.ogg delete mode 100644 bash/agents.sh delete mode 100644 bash/aliases.sh delete mode 100644 bash/bash_profile.sh delete mode 100644 bash/bashrc.sh delete mode 100644 bash/colors.sh delete mode 100644 bash/config.sh delete mode 100644 bash/env.sh delete mode 100644 bash/fake-symlinks.sh delete mode 100644 bash/fzf.sh delete mode 100644 bash/git-prompt.sh delete mode 100644 bash/mr-execute.sh delete mode 100644 bash/ps1.sh delete mode 100644 bash/reload.sh delete mode 100644 bash/symlinks.sh delete mode 120000 bash/templates/..git/hooks/pre-push delete mode 100644 bash/templates/..gitignore delete mode 100644 bash/templates/.guix-authorizations delete mode 100644 bash/templates/.guix-channel delete mode 100644 bash/templates/AUTHORS delete mode 100644 bash/templates/COPYING delete mode 100644 bash/templates/ChangeLog delete mode 100644 bash/templates/HACKING.in delete mode 100644 bash/templates/INSTALL delete mode 100644 bash/templates/Makefile delete mode 100644 bash/templates/Makefile.am delete mode 100644 bash/templates/NEWS delete mode 100644 bash/templates/README delete mode 100644 bash/templates/README.in delete mode 100644 bash/templates/TODOs.md delete mode 100644 bash/templates/_plugins/linter.rb delete mode 100755 bash/templates/bootstrap delete mode 100755 bash/templates/build-aux/assert-docs-spelling.sh delete mode 100755 bash/templates/build-aux/assert-shellcheck.sh delete mode 100755 bash/templates/build-aux/assert-todos.sh delete mode 100755 bash/templates/build-aux/ci/ci-build.sh delete mode 100755 bash/templates/build-aux/ci/git-post-receive.sh delete mode 100644 bash/templates/build-aux/ci/git-pre-push.sh delete mode 100755 bash/templates/build-aux/ci/git-pre-push.sh.in delete mode 100755 bash/templates/build-aux/compile-readme.sh delete mode 100644 bash/templates/build-aux/default-extra-dist.am delete mode 100644 bash/templates/build-aux/dev-checks.am delete mode 100644 bash/templates/build-aux/docbook-xsl.tar.gz delete mode 100644 bash/templates/build-aux/git-notes-release.am delete mode 100644 bash/templates/build-aux/git-notes-release.sh delete mode 100644 bash/templates/build-aux/guile.am delete mode 100644 bash/templates/build-aux/html-files-from-sources.am delete mode 100644 bash/templates/build-aux/rust.am delete mode 100755 bash/templates/build-aux/sphinx-build-web-assets.sh delete mode 100755 bash/templates/build-aux/texinfo-build-web-assets.sh delete mode 100755 bash/templates/build-aux/with-container.sh delete mode 100755 bash/templates/build-aux/workflow/README.sh delete mode 100755 bash/templates/build-aux/workflow/TODOs.sh delete mode 100644 bash/templates/build-aux/workflow/preamble.md delete mode 100644 bash/templates/build-aux/workflow/style.css delete mode 100644 bash/templates/configure.ac delete mode 100644 bash/templates/cronjob-with-email.sh delete mode 100644 bash/templates/default.nix delete mode 100644 bash/templates/description delete mode 100644 bash/templates/doc/Makefile delete mode 100644 bash/templates/doc/_templates/footer.html delete mode 100644 bash/templates/doc/_templates/layout.html delete mode 100644 bash/templates/doc/conf.py.in delete mode 100644 bash/templates/doc/dictionaries/en.txt delete mode 100644 bash/templates/doc/dictionaries/international.txt delete mode 100644 bash/templates/doc/favicon.ico delete mode 100644 bash/templates/doc/i18n-pagenames.json delete mode 100644 bash/templates/doc/index.rst delete mode 100644 bash/templates/guix/channel/euandreh.key delete mode 100644 bash/templates/guix/manifest.scm delete mode 100644 bash/templates/guix/pinned-channels.scm delete mode 100644 bash/templates/m4/guile.m4 delete mode 100644 bash/templates/m4/links.m4 delete mode 100644 bash/templates/m4/programmer-mode.m4 delete mode 100644 bash/templates/rename/basic-channel.scm.in delete mode 100644 bash/templates/rename/empty-texinfo.texi delete mode 100644 bash/util.sh delete mode 100644 bash/x.sh create mode 100644 sh/Positive.ogg create mode 100644 sh/agents.sh create mode 100644 sh/aliases.sh create mode 100644 sh/bash_profile.sh create mode 100644 sh/bashrc.sh create mode 100644 sh/colors.sh create mode 100644 sh/config.sh create mode 100644 sh/env.sh create mode 100644 sh/fake-symlinks.sh create mode 100644 sh/fzf.sh create mode 100644 sh/git-prompt.sh create mode 100644 sh/mr-execute.sh create mode 100644 sh/ps1.sh create mode 100644 sh/reload.sh create mode 100644 sh/symlinks.sh create mode 120000 sh/templates/..git/hooks/pre-push create mode 100644 sh/templates/..gitignore create mode 100644 sh/templates/.guix-authorizations create mode 100644 sh/templates/.guix-channel create mode 100644 sh/templates/AUTHORS create mode 100644 sh/templates/COPYING create mode 100644 sh/templates/ChangeLog create mode 100644 sh/templates/HACKING.in create mode 100644 sh/templates/INSTALL create mode 100644 sh/templates/Makefile create mode 100644 sh/templates/Makefile.am create mode 100644 sh/templates/NEWS create mode 100644 sh/templates/README create mode 100644 sh/templates/README.in create mode 100644 sh/templates/TODOs.md create mode 100644 sh/templates/_plugins/linter.rb create mode 100755 sh/templates/bootstrap create mode 100755 sh/templates/build-aux/assert-docs-spelling.sh create mode 100755 sh/templates/build-aux/assert-shellcheck.sh create mode 100755 sh/templates/build-aux/assert-todos.sh create mode 100755 sh/templates/build-aux/ci/ci-build.sh create mode 100755 sh/templates/build-aux/ci/git-post-receive.sh create mode 100644 sh/templates/build-aux/ci/git-pre-push.sh create mode 100755 sh/templates/build-aux/ci/git-pre-push.sh.in create mode 100755 sh/templates/build-aux/compile-readme.sh create mode 100644 sh/templates/build-aux/default-extra-dist.am create mode 100644 sh/templates/build-aux/dev-checks.am create mode 100644 sh/templates/build-aux/docbook-xsl.tar.gz create mode 100644 sh/templates/build-aux/git-notes-release.am create mode 100644 sh/templates/build-aux/git-notes-release.sh create mode 100644 sh/templates/build-aux/guile.am create mode 100644 sh/templates/build-aux/html-files-from-sources.am create mode 100644 sh/templates/build-aux/rust.am create mode 100755 sh/templates/build-aux/sphinx-build-web-assets.sh create mode 100755 sh/templates/build-aux/texinfo-build-web-assets.sh create mode 100755 sh/templates/build-aux/with-container.sh create mode 100755 sh/templates/build-aux/workflow/README.sh create mode 100755 sh/templates/build-aux/workflow/TODOs.sh create mode 100644 sh/templates/build-aux/workflow/preamble.md create mode 100644 sh/templates/build-aux/workflow/style.css create mode 100644 sh/templates/configure.ac create mode 100644 sh/templates/cronjob-with-email.sh create mode 100644 sh/templates/default.nix create mode 100644 sh/templates/description create mode 100644 sh/templates/doc/Makefile create mode 100644 sh/templates/doc/_templates/footer.html create mode 100644 sh/templates/doc/_templates/layout.html create mode 100644 sh/templates/doc/conf.py.in create mode 100644 sh/templates/doc/dictionaries/en.txt create mode 100644 sh/templates/doc/dictionaries/international.txt create mode 100644 sh/templates/doc/favicon.ico create mode 100644 sh/templates/doc/i18n-pagenames.json create mode 100644 sh/templates/doc/index.rst create mode 100644 sh/templates/guix/channel/euandreh.key create mode 100644 sh/templates/guix/manifest.scm create mode 100644 sh/templates/guix/pinned-channels.scm create mode 100644 sh/templates/m4/guile.m4 create mode 100644 sh/templates/m4/links.m4 create mode 100644 sh/templates/m4/programmer-mode.m4 create mode 100644 sh/templates/rename/basic-channel.scm.in create mode 100644 sh/templates/rename/empty-texinfo.texi create mode 100644 sh/util.sh create mode 100644 sh/x.sh diff --git a/bash/Positive.ogg b/bash/Positive.ogg deleted file mode 100644 index 22cb563..0000000 Binary files a/bash/Positive.ogg and /dev/null differ diff --git a/bash/agents.sh b/bash/agents.sh deleted file mode 100644 index 6a008b0..0000000 --- a/bash/agents.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2015 -# shellcheck disable=SC1090 - -GPG_TTY=$(tty) -export GPG_TTY - -export SSH_ENV="$HOME/.ssh/environment" -start_agent() { - echo "Initialising new SSH agent..." - ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" - echo succeeded - chmod 600 "${SSH_ENV}" - . "${SSH_ENV}" > /dev/null - ssh-add -} - -[ -f "${SSH_ENV}" ] && { - . "${SSH_ENV}" > /dev/null - pgrep ^ssh-agent$ > /dev/null || { - start_agent - } -} || start_agent - -eval "$(direnv hook bash)" diff --git a/bash/aliases.sh b/bash/aliases.sh deleted file mode 100644 index d49d8b2..0000000 --- a/bash/aliases.sh +++ /dev/null @@ -1,45 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2139 - -unalias -a - -alias sbcl='rlwrap sbcl' -alias sqlite='rlwrap sqlite3' -alias guile='rlwrap guile' - -alias l="ls -lahF --color" -alias copy="tr -d '\\n' | xclip -sel clip" -alias cop="xclip -sel clip" -alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" -# Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 -alias watch="watch --color " -alias mr="mr -s" -alias ncdu="ncdu --color dark" -alias mm="mbsync -A && notmuch new" -alias m="mbsync EuAndreh && notmuch new" -alias n='neomutt' -alias p='ping euandre.org -c 3' -alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" -alias mux="tmuxinator start" -alias s="git status" -alias d="git diff" -alias ds="git diff --staged" - -u() { - cd ~/annex > /dev/null || exit 1; - git annex info --fast | grep available; - cd - > /dev/null || exit 1; -} - -alias reload="source $DOTFILES/bash/reload.sh" -alias rr="source $DOTFILES/bash/reload.sh" -alias r="source ~/.bashrc" - -alias ag="ag --hidden" -alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" -alias grep='grep --color=auto' -alias diff='diff --color=auto' -# https://linuxhandbook.com/run-alias-as-sudo/ -alias sudo='sudo ' - -alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' diff --git a/bash/bash_profile.sh b/bash/bash_profile.sh deleted file mode 100644 index a8642fa..0000000 --- a/bash/bash_profile.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# shellcheck disable=SC1090 -. ~/dev/libre/dotfiles/bash/bashrc.sh diff --git a/bash/bashrc.sh b/bash/bashrc.sh deleted file mode 100644 index f00940c..0000000 --- a/bash/bashrc.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC1090 - -export DOTFILES=~/dev/libre/dotfiles - -. $DOTFILES/bash/config.sh -. $DOTFILES/bash/env.sh -. "$GUIX_PROFILE/etc/profile" -. $DOTFILES/bash/colors.sh -. $DOTFILES/bash/git-prompt.sh -. $DOTFILES/bash/ps1.sh -. $DOTFILES/bash/fzf.sh -. $DOTFILES/bash/aliases.sh -. $DOTFILES/bash/util.sh -. $DOTFILES/bash/agents.sh -. $DOTFILES/bash/symlinks.sh -. "$HOME/annex/bin/misc/env.sh" -. "$HOME/.nurc" diff --git a/bash/colors.sh b/bash/colors.sh deleted file mode 100644 index 7c8cb3e..0000000 --- a/bash/colors.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh -# shellcheck disable=2059 - -export end="\033[0m" -export black="\033[0;30m" -export blackb="\033[1;30m" -export white="\033[0;37m" -export whiteb="\033[1;37m" -export red="\033[0;31m" -export redb="\033[1;31m" -export green="\033[0;32m" -export greenb="\033[1;32m" -export yellow="\033[0;33m" -export yellowb="\033[1;33m" -export blue="\033[0;34m" -export blueb="\033[1;34m" -export purple="\033[0;35m" -export purpleb="\033[1;35m" -export lightblue="\033[0;36m" -export lightblueb="\033[1;36m" -export blacki="\033[0;90m" -export bluei="\033[0;94m" - -black() { - printf "${black}${1}${end}" -} - -blackb() { - printf "${blackb}${1}${end}" -} - -blacki() { - printf "${blacki}${1}${end}" -} - -white() { - printf "${white}${1}${end}" -} - -whiteb() { - printf "${whiteb}${1}${end}" -} - -red() { - printf "${red}${1}${end}" -} - -redb() { - printf "${redb}${1}${end}" -} - -green() { - printf "${green}${1}${end}" -} - -greenb() { - printf "${greenb}${1}${end}" -} - -yellow() { - printf "${yellow}${1}${end}" -} - -yellowb() { - printf "${yellowb}${1}${end}" -} - -blue() { - printf "${blue}${1}${end}" -} - -blueb() { - printf "${blueb}${1}${end}" -} - -bluei() { - printf "${bluei}${1}${end}" -} - -purple() { - printf "${purple}${1}${end}" -} - -purpleb() { - printf "${purpleb}${1}${end}" -} - -lightblue() { - printf "${lightblue}${1}${end}" -} - -lightblueb() { - printf "${lightblueb}${1}${end}" -} - -colors() { - black "black" - blackb "blackb" - white "white" - whiteb "whiteb" - red "red" - redb "redb" - green "green" - greenb "greenb" - yellow "yellow" - yellowb "yellowb" - blue "blue" - blueb "blueb" - purple "purple" - purpleb "purpleb" - lightblue "lightblue" - lightblueb "lightblueb" - blacki "blacki" - bluei "bluei" -} diff --git a/bash/config.sh b/bash/config.sh deleted file mode 100644 index a8f86cb..0000000 --- a/bash/config.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -# ~/.bashrc: executed by bash(1) for non-login shells. - -# derived from Ubuntu's default .bashrc - - -# If not running interactively, don't do anything -case $- in - *i*) ;; - *) return;; -esac - -# Don't put duplicate linesin the history. -# Don't store commands that start with an empty space. -# See bash(1) for more options -HISTCONTROL=ignoreboth - -# append to the history file, don't overwrite it -shopt -s histappend - -# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) -HISTSIZE=1000000 -HISTFILESIZE=2000000 - -# check the window size after each command and, if necessary, -# update the values of LINES and COLUMNS. -shopt -s checkwinsize - -# If set, the pattern "**" used in a pathname expansion context will -# match all files and zero or more directories and subdirectories. -shopt -s globstar - -# If set, the pattern "*" will also match dotfiles. -shopt -s dotglob - -stty -ixon - - -# Taken from: -# https://sanctum.geek.nz/arabesque/better-bash-history/ - -# Record timestamps -# If you set $HISTTIMEFORMAT to something useful, Bash will record the timestamp of each command in its history. In this variable you can specify the format in which you want this timestamp displayed when viewed with history. I find the full date and time to be useful, because it can be sorted easily and works well with tools like cut and awk. -HISTTIMEFORMAT='%F %T ' - -# Use one command per line -# To make your .bash_history file a little easier to parse, you can force commands that you entered on more than one line to be adjusted to fit on only one with the cmdhist option: -shopt -s cmdhist - -# Store history immediately -# By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: -PROMPT_COMMAND='history -a' - -bind -x '"\e\C-l": c' diff --git a/bash/env.sh b/bash/env.sh deleted file mode 100644 index c1f9be6..0000000 --- a/bash/env.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh - -export R='16686@ch-s010.rsync.net' -export EDITOR=vi -export BROWSER=firefox -export INPUTRC=~/.inputrc -export BORG_REMOTE_PATH='borg1' -export GOPATH="$HOME/dev/go" -export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" - -# https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 -export NIX_BUILD_CORES=0 - -export GUIX_PROFILE="$HOME/.guix-profile" -export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" - -PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$HOME/annex/bin/scripts:$PATH" diff --git a/bash/fake-symlinks.sh b/bash/fake-symlinks.sh deleted file mode 100644 index 60f5f6d..0000000 --- a/bash/fake-symlinks.sh +++ /dev/null @@ -1,433 +0,0 @@ -#!/usr/bin/env bash - -pushd "${DOTFILES}/bash/templates/" > /dev/null || exit 1 -export DOLLAR='$' - -mkdir -p "$DOTFILES/cron/generated/" -for job in report-summary annex elfeed backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/${job}.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" -done - -mkdir -p "$HOME/annex/bin/cron/generated/" -# shellcheck disable=2043 -for job in pacheco; do - prefix="$HOME/annex/bin/cron" - sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" - chmod +x "$HOME/annex/bin/cron/${job}.sh" - chmod +x "$HOME/annex/bin/cron/${job}-job.sh" -done - -mkdir -p ~/archive/torrent/ -find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; - -DEFAULT_TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' -sed -e "$DEFAULT_TLD_SCRIPT" < build-aux/ci/git-pre-push.sh.in > build-aux/ci/git-pre-push.sh - -normalize-name() { - if [[ -n "$RENAME_TO" ]]; then - echo "$RENAME_TO" - elif [[ "$1" = ..* ]]; then - echo "${1:1}" - else - echo "$1" - fi -} - -cp-all() { - for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - mkdir -p "$(dirname "$OUT")" - cp "$f" "$OUT" - done -} - -cp-if-not() { - for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - if [[ ! -f "$OUT" ]]; then - cp-all "$f" - fi - done -} - -envsubst-all() { - for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - mkdir -p "$(dirname "$OUT")" - envsubst < "$f" > "$OUT" - - if [ -n "$EXECUTABLE" ]; then - chmod +x "$OUT" - fi - done -} - -envsubst-if-not() { - for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - if [[ ! -f "$OUT" ]]; then - envsubst-all "$f" - fi - done -} - -sed-all() { - for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - mkdir -p "$(dirname "$OUT")" - - if [ -n "$ENABLE_CI" ]; then - ENABLE_CI_SCRIPT='s/__ENABLE_CI__ //g' - if [ -n "$ENABLE_AUTOTOOLS" ]; then - TLD_SCRIPT='' - else - TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" - fi - else - ENABLE_CI_SCRIPT='/__ENABLE_CI__ /d' - TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" - fi - - sed "$f" \ - -e "s/__PROJECT_UC__/$PROJECT_UC/g" \ - -e "s/__PROJECT__/$PROJECT/g" \ - -e "s/__MAILING_LIST__/$MAILING_LIST/g" \ - -e "$TLD_SCRIPT" \ - -e "$ENABLE_CI_SCRIPT" \ - -e "$ENABLE_AUTOTOOLS_SCRIPT" \ - > "$OUT" - - if [ -n "$EXECUTABLE" ]; then - chmod +x "$OUT" - fi - done -} - -sed-if-not() { - for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - if [ ! -f "$OUT" ]; then - sed-all "$f" - fi - done -} - -ln-env() { - export PROJECT="$1" - export PREFIX="${PREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}" - export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" - export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - - if [ -f "$PREFIX/Makefile.am" ]; then - export ENABLE_AUTOTOOLS=1 - else - export ENABLE_AUTOTOOLS= - fi - - if [ -f "$PREFIX/Makefile" ] || [ -f "$PREFIX/Makefile.am" ]; then - export ENABLE_CI=1 - else - export ENABLE_CI= - fi - - if [ -n "${GUILE_PROJECTS[$PROJECT]}" ]; then - ENABLE_GUILE=1 - else - ENABLE_GUILE= - fi - - if [ -n "${RUST_PROJECT[$PROJECT]}" ]; then - ENABLE_RUST=1 - else - ENABLE_RUST= - fi - - if [ -f "$PREFIX/guix/pinned-channels.scm" ] && - [ "$(wc -l < "$PREFIX/guix/pinned-channels.scm")" = 11 ]; then - ENABLE_OVERWRITE_PINNED_CHANNELS=1 - else - ENABLE_OVERWRITE_PINNED_CHANNELS= - fi - - if [ -n "${GUIX_PROJECT_NO_CHANNEL[$PROJECT]}" ]; then - ENABLE_GUIX_PROJECT_CHANNEL= - else - ENABLE_GUIX_PROJECT_CHANNEL=1 - fi -} - -ln-init() { - if ! grep -q "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini; then - red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")" - fi - - if [ ! -d "$PREFIX" ]; then - git init "$PREFIX" - fi -} - -ln-autotools() { - chmod +w "$PREFIX/INSTALL" 2> /dev/null ||: - cp-all AUTHORS \ - bootstrap \ - ChangeLog \ - build-aux/dev-checks.am \ - build-aux/default-extra-dist.am \ - m4/links.m4 \ - m4/programmer-mode.m4 \ - build-aux/html-files-from-sources.am - - # dev-cheks.am: test maintainer mode - # https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html - cp-if-not description - - # assumes: - # - ln-workflow for .gitignore - # - ln-git-notes-release for Makefile.am - # - ln-guix-files for Makefile.am - envsubst-if-not ..gitignore README.in - sed-if-not configure.ac Makefile.am -} - -ln-build-aux() { - cp-all build-aux/assert-todos.sh \ - build-aux/assert-shellcheck.sh \ - build-aux/workflow/TODOs.sh \ - build-aux/workflow/README.sh \ - build-aux/workflow/style.css \ - build-aux/workflow/preamble.md - - cp-if-not TODOs.md -} - -ln-agpl() { - cp-all COPYING -} - -ln-guix-files() { - cp-all build-aux/with-container.sh \ - build-aux/assert-shellcheck.sh - cp-if-not guix/manifest.scm - - if [ -n "$ENABLE_GUIX_PROJECT_CHANNEL" ]; then - cp-all .guix-channel \ - .guix-authorizations \ - guix/channel/euandreh.key - if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then - RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp-if-not rename/basic-channel.scm.in - fi - fi - - if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then - cp-all guix/pinned-channels.scm - else - cp-if-not guix/pinned-channels.scm - fi -} - -ln-ci() { - if [ -n "$ENABLE_CI" ]; then - if [ -n "$ENABLE_AUTOTOOLS" ]; then - sed-all build-aux/ci/git-pre-push.sh.in - else - EXECUTABLE=1 sed-all build-aux/ci/git-pre-push.sh - fi - cp-all build-aux/assert-shellcheck.sh \ - build-aux/ci/ci-build.sh \ - build-aux/ci/git-post-receive.sh - ln -fs "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" - else - EXECUTABLE=1 sed-all ..git/hooks/pre-push - fi -} - -ln-git-notes-release() { - cp-all build-aux/git-notes-release.am build-aux/git-notes-release.sh - cp-if-not NEWS -} - -ln-dicts() { - cp-if-not doc/dictionaries/international.txt doc/dictionaries/en.txt -} - -ln-pandoc-index() { - cp-all build-aux/compile-readme.sh -} - -ln-web-assets-file() { - mkdir -p "$PREFIX/build-aux/" - cp "build-aux/$1-build-web-assets.sh" "$PREFIX/build-aux/build-web-assets.sh" -} - -ln-scribble() { - ln-dicts -} - -ln-antora() { - ln-dicts -} - -ln-base-autotools-guix-project() { - ln-env "$1" - ln-init - - ln-build-aux - ln-guix-files - ln-git-notes-release - ln-autotools - ln-generated-readme - ln-pandoc-index - - ln-agpl - ln-ci - - ln-dicts - - if [ -n "$ENABLE_GUILE" ]; then - cp-all build-aux/guile.am m4/guile.m4 - fi - - if [ -n "$ENABLE_RUST" ]; then - cp-all build-aux/rust.am - fi -} - -ln-texinfo-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi - ln-web-assets-file texinfo - cp-all build-aux/docbook-xsl.tar.gz -} - -ln-sphinx-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - cp-all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico - envsubst-all doc/conf.py.in doc/_templates/layout.html - envsubst-if-not doc/index.rst - # EXECUTABLE=1 sed-all build-aux/build-sphinx.sh - cp-if-not doc/i18n-pagenames.json doc/Makefile -} - -ln-scribble-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - ln-scribble -} - -ln-antora-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - ln-antora -} - -ln-simple-makefile() { - envsubst-if-not Makefile -} - -ln-generated-readme() { - if [[ ! -f "$PREFIX/README" ]]; then - cat <(printf "%s\n\n" "$PROJECT_UC") \ - <(fold < "$PREFIX/description") \ - <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \ - > "$PREFIX/README" - fi -} - -ln-makefile-only-guix-project() { - ln-env "$1" - ln-agpl - ln-build-aux - ln-guix-files - ln-ci - ln-simple-makefile -} - -ln-bare-project() { - ln-env "$1" - ln-agpl - ln-ci -} - -ln-description-foreign-project() { - ln-env "$1" - # Foreign projects may have Makefiles and alike, and I don't want - # to have CI files copied to the repository - ENABLE_CI= - ln-ci -} - -declare -A PROJECT_NAMES=( - [vps]=VPS - [cement]=Cement - [parsecc]=ParsecC - [songbooks]=Songbooks - [mediator]=Mediator - [byopds]=BYOPDS - [pires]=Pires -) - -declare -A ML_FOR_PROJECT=( - [cement]=byopds - [byopds]=byopds - [guile-pds]=byopds - [parsecc]=mediator - [parseclj]=mediator - [x-bindgen]=mediator - [mediator]=mediator - [libedn]=mediator - [eq]=mediator - [songbooks]=songbooks - [guile-clap]=songbooks - [pires]=pires -) - -declare -A PREFIX_FOR_PROJECT=( - [guix]="$HOME/dev/guix/guix" -) - -declare -A GUILE_PROJECTS=( - [guile-quickcheck]=1 - [guile-pds]=1 - [guile-clap]=1 - [songbooks]=1 -) - -declare -A RUST_PROJECT=( - [spalc]=1 - [libedn]=1 - [x-bindgen]=1 -) - -declare -A GUIX_PROJECT_NO_CHANNEL=( - [vps]=1 -) - -ln-all() { - LN_FN="$1" - shift - for f in "$@"; do - "$LN_FN" "$f" - done -} - -ln-all ln-texinfo-autotools-guix-project guile-quickcheck guile-pds guile-clap cement songbooks -ln-all ln-sphinx-autotools-guix-project libedn x-bindgen eq mediator -# ln-all ln-scribble-autotools-guix-project -ln-all ln-antora-autotools-guix-project byopds spalc -ln-all ln-makefile-only-guix-project vps pires remembering -ln-all ln-description-foreign-project guix parsecc -ln-all ln-bare-project parseclj \ - boneco \ - brinquedoteca \ - casa-do-caminho \ - dotfiles \ - euandreh-guix-channel \ - music \ - pdfs-da-d-maria \ - swift2nix \ - swift2nix-demo \ - cargo2nix \ - cargo2nix-demo \ - website - -popd > /dev/null || exit 1 diff --git a/bash/fzf.sh b/bash/fzf.sh deleted file mode 100644 index 0496f23..0000000 --- a/bash/fzf.sh +++ /dev/null @@ -1,69 +0,0 @@ -#!/bin/sh - -# shellcheck source=/dev/null -. "$(fzf-share)/completion.bash" -# Disable fzf key-bindings -# readline > fzf -# . "$(fzf-share)/key-bindings.bash" - -export FZF_TMUX=1 -export FZF_CTRL_T_OPTS=' - --preview "(cat {} || tree -C {}) 2> /dev/null" - --select-1 - --exit-0 -' - -export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"' - -fzg() { - fn=$(git grep -n "$1" | \ - cut -d: -f -2 | \ - fzf-tmux --select-1 \ - --exit-0 \ - --preview "echo {} | \ - cut -d: -f1 | \ - xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) ' - (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print } - NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print } - ' %") - if [ -n "$fn" ]; then - f="$(echo "$fn" | cut -d: -f1)" - n="$(echo "$fn" | cut -d: -f2)" - # shellcheck disable=2068 - history -s fzg $@ - history -s vi "+$n" "$f" - vi "+$n" "$f" - fi -} - -f() { - profile="$(pwd | sed -e 's_/_:_g')" - file="$(git ls-files | remembering -p "$profile" -c "fzf-tmux --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" - if [ -n "$file" ]; then - # shellcheck disable=2068 - history -s f $@ - history -s "$1" "$file" - "$1" "$file" - fi -} - -V_FILES=' -Sync/TODOs.md -tmp/scratch.txt -annex/txt/things.md -annex/bin/misc/git/mrconfig.ini -archive/vid/playlist.txt -dev/libre/others/dinheiros/money.ledger -' - -v() { - # I want to keep the pre-defined order - f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" - if [ -n "$f" ]; then - history -s v "$@" - # shellcheck disable=2088 - history -s vi "~/$f" - echo "$f" - vi "$HOME/$f" - fi -} diff --git a/bash/git-prompt.sh b/bash/git-prompt.sh deleted file mode 100644 index 79fd908..0000000 --- a/bash/git-prompt.sh +++ /dev/null @@ -1,589 +0,0 @@ -# Taken from: -# curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > bash/git-prompt.sh - -# bash/zsh git prompt support -# -# Copyright (C) 2006,2007 Shawn O. Pearce -# Distributed under the GNU General Public License, version 2.0. -# -# This script allows you to see repository status in your prompt. -# -# To enable: -# -# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). -# 2) Add the following line to your .bashrc/.zshrc: -# source ~/.git-prompt.sh -# 3a) Change your PS1 to call __git_ps1 as -# command-substitution: -# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' -# ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' -# the optional argument will be used as format string. -# 3b) Alternatively, for a slightly faster prompt, __git_ps1 can -# be used for PROMPT_COMMAND in Bash or for precmd() in Zsh -# with two parameters,
     and , which are strings
    -#        you would put in $PS1 before and after the status string
    -#        generated by the git-prompt machinery.  e.g.
    -#        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
    -#          will show username, at-sign, host, colon, cwd, then
    -#          various status string, followed by dollar and SP, as
    -#          your prompt.
    -#        ZSH:  precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
    -#          will show username, pipe, then various status string,
    -#          followed by colon, cwd, dollar and SP, as your prompt.
    -#        Optionally, you can supply a third argument with a printf
    -#        format string to finetune the output of the branch status
    -#
    -# The repository status will be displayed only if you are currently in a
    -# git repository. The %s token is the placeholder for the shown status.
    -#
    -# The prompt status always includes the current branch name.
    -#
    -# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
    -# unstaged (*) and staged (+) changes will be shown next to the branch
    -# name.  You can configure this per-repository with the
    -# bash.showDirtyState variable, which defaults to true once
    -# GIT_PS1_SHOWDIRTYSTATE is enabled.
    -#
    -# You can also see if currently something is stashed, by setting
    -# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
    -# then a '$' will be shown next to the branch name.
    -#
    -# If you would like to see if there're untracked files, then you can set
    -# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
    -# files, then a '%' will be shown next to the branch name.  You can
    -# configure this per-repository with the bash.showUntrackedFiles
    -# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
    -# enabled.
    -#
    -# If you would like to see the difference between HEAD and its upstream,
    -# set GIT_PS1_SHOWUPSTREAM="auto".  A "<" indicates you are behind, ">"
    -# indicates you are ahead, "<>" indicates you have diverged and "="
    -# indicates that there is no difference. You can further control
    -# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
    -# of values:
    -#
    -#     verbose       show number of commits ahead/behind (+/-) upstream
    -#     name          if verbose, then also show the upstream abbrev name
    -#     legacy        don't use the '--count' option available in recent
    -#                   versions of git-rev-list
    -#     git           always compare HEAD to @{upstream}
    -#     svn           always compare HEAD to your SVN upstream
    -#
    -# You can change the separator between the branch name and the above
    -# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
    -# is SP.
    -#
    -# When there is an in-progress operation such as a merge, rebase,
    -# revert, cherry-pick, or bisect, the prompt will include information
    -# related to the operation, often in the form "|".
    -#
    -# When the repository has a sparse-checkout, a notification of the form
    -# "|SPARSE" will be included in the prompt.  This can be shortened to a
    -# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
    -# by setting GIT_PS1_OMITSPARSESTATE.
    -#
    -# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
    -# find one, or @{upstream} otherwise.  Once you have set
    -# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
    -# setting the bash.showUpstream config variable.
    -#
    -# If you would like to see more information about the identity of
    -# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
    -# to one of these values:
    -#
    -#     contains      relative to newer annotated tag (v1.6.3.2~35)
    -#     branch        relative to newer tag or branch (master~4)
    -#     describe      relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
    -#     tag           relative to any older tag (v1.6.3.1-13-gdd42c2f)
    -#     default       exactly matching tag
    -#
    -# If you would like a colored hint about the current dirty state, set
    -# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
    -# the colored output of "git status -sb" and are available only when
    -# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
    -# but always available in Zsh.
    -#
    -# If you would like __git_ps1 to do nothing in the case when the current
    -# directory is set up to be ignored by git, then set
    -# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
    -# repository level by setting bash.hideIfPwdIgnored to "false".
    -
    -# check whether printf supports -v
    -__git_printf_supports_v=
    -printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
    -
    -# stores the divergence from upstream in $p
    -# used by GIT_PS1_SHOWUPSTREAM
    -__git_ps1_show_upstream ()
    -{
    -	local key value
    -	local svn_remote svn_url_pattern count n
    -	local upstream=git legacy="" verbose="" name=""
    -
    -	svn_remote=()
    -	# get some config options from git-config
    -	local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
    -	while read -r key value; do
    -		case "$key" in
    -		bash.showupstream)
    -			GIT_PS1_SHOWUPSTREAM="$value"
    -			if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
    -				p=""
    -				return
    -			fi
    -			;;
    -		svn-remote.*.url)
    -			svn_remote[$((${#svn_remote[@]} + 1))]="$value"
    -			svn_url_pattern="$svn_url_pattern\\|$value"
    -			upstream=svn+git # default upstream is SVN if available, else git
    -			;;
    -		esac
    -	done <<< "$output"
    -
    -	# parse configuration values
    -	local option
    -	for option in ${GIT_PS1_SHOWUPSTREAM}; do
    -		case "$option" in
    -		git|svn) upstream="$option" ;;
    -		verbose) verbose=1 ;;
    -		legacy)  legacy=1  ;;
    -		name)    name=1 ;;
    -		esac
    -	done
    -
    -	# Find our upstream
    -	case "$upstream" in
    -	git)    upstream="@{upstream}" ;;
    -	svn*)
    -		# get the upstream from the "git-svn-id: ..." in a commit message
    -		# (git-svn uses essentially the same procedure internally)
    -		local -a svn_upstream
    -		svn_upstream=($(git log --first-parent -1 \
    -					--grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
    -		if [[ 0 -ne ${#svn_upstream[@]} ]]; then
    -			svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
    -			svn_upstream=${svn_upstream%@*}
    -			local n_stop="${#svn_remote[@]}"
    -			for ((n=1; n <= n_stop; n++)); do
    -				svn_upstream=${svn_upstream#${svn_remote[$n]}}
    -			done
    -
    -			if [[ -z "$svn_upstream" ]]; then
    -				# default branch name for checkouts with no layout:
    -				upstream=${GIT_SVN_ID:-git-svn}
    -			else
    -				upstream=${svn_upstream#/}
    -			fi
    -		elif [[ "svn+git" = "$upstream" ]]; then
    -			upstream="@{upstream}"
    -		fi
    -		;;
    -	esac
    -
    -	# Find how many commits we are ahead/behind our upstream
    -	if [[ -z "$legacy" ]]; then
    -		count="$(git rev-list --count --left-right \
    -				"$upstream"...HEAD 2>/dev/null)"
    -	else
    -		# produce equivalent output to --count for older versions of git
    -		local commits
    -		if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
    -		then
    -			local commit behind=0 ahead=0
    -			for commit in $commits
    -			do
    -				case "$commit" in
    -				"<"*) ((behind++)) ;;
    -				*)    ((ahead++))  ;;
    -				esac
    -			done
    -			count="$behind	$ahead"
    -		else
    -			count=""
    -		fi
    -	fi
    -
    -	# calculate the result
    -	if [[ -z "$verbose" ]]; then
    -		case "$count" in
    -		"") # no upstream
    -			p="" ;;
    -		"0	0") # equal to upstream
    -			p="=" ;;
    -		"0	"*) # ahead of upstream
    -			p=">" ;;
    -		*"	0") # behind upstream
    -			p="<" ;;
    -		*)	    # diverged from upstream
    -			p="<>" ;;
    -		esac
    -	else
    -		case "$count" in
    -		"") # no upstream
    -			p="" ;;
    -		"0	0") # equal to upstream
    -			p=" u=" ;;
    -		"0	"*) # ahead of upstream
    -			p=" u+${count#0	}" ;;
    -		*"	0") # behind upstream
    -			p=" u-${count%	0}" ;;
    -		*)	    # diverged from upstream
    -			p=" u+${count#*	}-${count%	*}" ;;
    -		esac
    -		if [[ -n "$count" && -n "$name" ]]; then
    -			__git_ps1_upstream_name=$(git rev-parse \
    -				--abbrev-ref "$upstream" 2>/dev/null)
    -			if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    -				p="$p \${__git_ps1_upstream_name}"
    -			else
    -				p="$p ${__git_ps1_upstream_name}"
    -				# not needed anymore; keep user's
    -				# environment clean
    -				unset __git_ps1_upstream_name
    -			fi
    -		fi
    -	fi
    -
    -}
    -
    -# Helper function that is meant to be called from __git_ps1.  It
    -# injects color codes into the appropriate gitstring variables used
    -# to build a gitstring.
    -__git_ps1_colorize_gitstring ()
    -{
    -	if [[ -n ${ZSH_VERSION-} ]]; then
    -		local c_red='%F{red}'
    -		local c_green='%F{green}'
    -		local c_lblue='%F{blue}'
    -		local c_clear='%f'
    -	else
    -		# Using \[ and \] around colors is necessary to prevent
    -		# issues with command line editing/browsing/completion!
    -		local c_red='\[\e[31m\]'
    -		local c_green='\[\e[32m\]'
    -		local c_lblue='\[\e[1;34m\]'
    -		local c_clear='\[\e[0m\]'
    -	fi
    -	local bad_color=$c_red
    -	local ok_color=$c_green
    -	local flags_color="$c_lblue"
    -
    -	local branch_color=""
    -	if [ $detached = no ]; then
    -		branch_color="$ok_color"
    -	else
    -		branch_color="$bad_color"
    -	fi
    -	c="$branch_color$c"
    -
    -	z="$c_clear$z"
    -	if [ "$w" = "*" ]; then
    -		w="$bad_color$w"
    -	fi
    -	if [ -n "$i" ]; then
    -		i="$ok_color$i"
    -	fi
    -	if [ -n "$s" ]; then
    -		s="$flags_color$s"
    -	fi
    -	if [ -n "$u" ]; then
    -		u="$bad_color$u"
    -	fi
    -	r="$c_clear$r"
    -}
    -
    -# Helper function to read the first line of a file into a variable.
    -# __git_eread requires 2 arguments, the file path and the name of the
    -# variable, in that order.
    -__git_eread ()
    -{
    -	test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
    -}
    -
    -# see if a cherry-pick or revert is in progress, if the user has committed a
    -# conflict resolution with 'git commit' in the middle of a sequence of picks or
    -# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
    -# the todo file.
    -__git_sequencer_status ()
    -{
    -	local todo
    -	if test -f "$g/CHERRY_PICK_HEAD"
    -	then
    -		r="|CHERRY-PICKING"
    -		return 0;
    -	elif test -f "$g/REVERT_HEAD"
    -	then
    -		r="|REVERTING"
    -		return 0;
    -	elif __git_eread "$g/sequencer/todo" todo
    -	then
    -		case "$todo" in
    -		p[\ \	]|pick[\ \	]*)
    -			r="|CHERRY-PICKING"
    -			return 0
    -		;;
    -		revert[\ \	]*)
    -			r="|REVERTING"
    -			return 0
    -		;;
    -		esac
    -	fi
    -	return 1
    -}
    -
    -# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
    -# when called from PS1 using command substitution
    -# in this mode it prints text to add to bash PS1 prompt (includes branch name)
    -#
    -# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
    -# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
    -# when two arguments are given, the first is prepended and the second appended
    -# to the state string when assigned to PS1.
    -# The optional third parameter will be used as printf format string to further
    -# customize the output of the git-status string.
    -# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
    -__git_ps1 ()
    -{
    -	# preserve exit status
    -	local exit=$?
    -	local pcmode=no
    -	local detached=no
    -	local ps1pc_start='\u@\h:\w '
    -	local ps1pc_end='\$ '
    -	local printf_format=' (%s)'
    -
    -	case "$#" in
    -		2|3)	pcmode=yes
    -			ps1pc_start="$1"
    -			ps1pc_end="$2"
    -			printf_format="${3:-$printf_format}"
    -			# set PS1 to a plain prompt so that we can
    -			# simply return early if the prompt should not
    -			# be decorated
    -			PS1="$ps1pc_start$ps1pc_end"
    -		;;
    -		0|1)	printf_format="${1:-$printf_format}"
    -		;;
    -		*)	return $exit
    -		;;
    -	esac
    -
    -	# ps1_expanded:  This variable is set to 'yes' if the shell
    -	# subjects the value of PS1 to parameter expansion:
    -	#
    -	#   * bash does unless the promptvars option is disabled
    -	#   * zsh does not unless the PROMPT_SUBST option is set
    -	#   * POSIX shells always do
    -	#
    -	# If the shell would expand the contents of PS1 when drawing
    -	# the prompt, a raw ref name must not be included in PS1.
    -	# This protects the user from arbitrary code execution via
    -	# specially crafted ref names.  For example, a ref named
    -	# 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the
    -	# shell to execute 'sudo rm -rf /' when the prompt is drawn.
    -	#
    -	# Instead, the ref name should be placed in a separate global
    -	# variable (in the __git_ps1_* namespace to avoid colliding
    -	# with the user's environment) and that variable should be
    -	# referenced from PS1.  For example:
    -	#
    -	#     __git_ps1_foo=$(do_something_to_get_ref_name)
    -	#     PS1="...stuff...\${__git_ps1_foo}...stuff..."
    -	#
    -	# If the shell does not expand the contents of PS1, the raw
    -	# ref name must be included in PS1.
    -	#
    -	# The value of this variable is only relevant when in pcmode.
    -	#
    -	# Assume that the shell follows the POSIX specification and
    -	# expands PS1 unless determined otherwise.  (This is more
    -	# likely to be correct if the user has a non-bash, non-zsh
    -	# shell and safer than the alternative if the assumption is
    -	# incorrect.)
    -	#
    -	local ps1_expanded=yes
    -	[ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
    -	[ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no
    -
    -	local repo_info rev_parse_exit_code
    -	repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
    -		--is-bare-repository --is-inside-work-tree \
    -		--short HEAD 2>/dev/null)"
    -	rev_parse_exit_code="$?"
    -
    -	if [ -z "$repo_info" ]; then
    -		return $exit
    -	fi
    -
    -	local short_sha=""
    -	if [ "$rev_parse_exit_code" = "0" ]; then
    -		short_sha="${repo_info##*$'\n'}"
    -		repo_info="${repo_info%$'\n'*}"
    -	fi
    -	local inside_worktree="${repo_info##*$'\n'}"
    -	repo_info="${repo_info%$'\n'*}"
    -	local bare_repo="${repo_info##*$'\n'}"
    -	repo_info="${repo_info%$'\n'*}"
    -	local inside_gitdir="${repo_info##*$'\n'}"
    -	local g="${repo_info%$'\n'*}"
    -
    -	if [ "true" = "$inside_worktree" ] &&
    -	   [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
    -	   [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
    -	   git check-ignore -q .
    -	then
    -		return $exit
    -	fi
    -
    -	local sparse=""
    -	if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    -	   [ -z "${GIT_PS1_OMITSPARSESTATE}" ] &&
    -	   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    -		sparse="|SPARSE"
    -	fi
    -
    -	local r=""
    -	local b=""
    -	local step=""
    -	local total=""
    -	if [ -d "$g/rebase-merge" ]; then
    -		__git_eread "$g/rebase-merge/head-name" b
    -		__git_eread "$g/rebase-merge/msgnum" step
    -		__git_eread "$g/rebase-merge/end" total
    -		r="|REBASE"
    -	else
    -		if [ -d "$g/rebase-apply" ]; then
    -			__git_eread "$g/rebase-apply/next" step
    -			__git_eread "$g/rebase-apply/last" total
    -			if [ -f "$g/rebase-apply/rebasing" ]; then
    -				__git_eread "$g/rebase-apply/head-name" b
    -				r="|REBASE"
    -			elif [ -f "$g/rebase-apply/applying" ]; then
    -				r="|AM"
    -			else
    -				r="|AM/REBASE"
    -			fi
    -		elif [ -f "$g/MERGE_HEAD" ]; then
    -			r="|MERGING"
    -		elif __git_sequencer_status; then
    -			:
    -		elif [ -f "$g/BISECT_LOG" ]; then
    -			r="|BISECTING"
    -		fi
    -
    -		if [ -n "$b" ]; then
    -			:
    -		elif [ -h "$g/HEAD" ]; then
    -			# symlink symbolic ref
    -			b="$(git symbolic-ref HEAD 2>/dev/null)"
    -		else
    -			local head=""
    -			if ! __git_eread "$g/HEAD" head; then
    -				return $exit
    -			fi
    -			# is it a symbolic ref?
    -			b="${head#ref: }"
    -			if [ "$head" = "$b" ]; then
    -				detached=yes
    -				b="$(
    -				case "${GIT_PS1_DESCRIBE_STYLE-}" in
    -				(contains)
    -					git describe --contains HEAD ;;
    -				(branch)
    -					git describe --contains --all HEAD ;;
    -				(tag)
    -					git describe --tags HEAD ;;
    -				(describe)
    -					git describe HEAD ;;
    -				(* | default)
    -					git describe --tags --exact-match HEAD ;;
    -				esac 2>/dev/null)" ||
    -
    -				b="$short_sha..."
    -				b="($b)"
    -			fi
    -		fi
    -	fi
    -
    -	if [ -n "$step" ] && [ -n "$total" ]; then
    -		r="$r $step/$total"
    -	fi
    -
    -	local w=""
    -	local i=""
    -	local s=""
    -	local u=""
    -	local h=""
    -	local c=""
    -	local p=""
    -
    -	if [ "true" = "$inside_gitdir" ]; then
    -		if [ "true" = "$bare_repo" ]; then
    -			c="BARE:"
    -		else
    -			b="GIT_DIR!"
    -		fi
    -	elif [ "true" = "$inside_worktree" ]; then
    -		if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
    -		   [ "$(git config --bool bash.showDirtyState)" != "false" ]
    -		then
    -			git diff --no-ext-diff --quiet || w="*"
    -			git diff --no-ext-diff --cached --quiet || i="+"
    -			if [ -z "$short_sha" ] && [ -z "$i" ]; then
    -				i="#"
    -			fi
    -		fi
    -		if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
    -		   git rev-parse --verify --quiet refs/stash >/dev/null
    -		then
    -			s="$"
    -		fi
    -
    -		if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
    -		   [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
    -		   git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
    -		then
    -			u="%${ZSH_VERSION+%}"
    -		fi
    -
    -		if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    -		   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    -			h="?"
    -		fi
    -
    -		if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
    -			__git_ps1_show_upstream
    -		fi
    -	fi
    -
    -	local z="${GIT_PS1_STATESEPARATOR-" "}"
    -
    -	# NO color option unless in PROMPT_COMMAND mode or it's Zsh
    -	if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
    -		if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
    -			__git_ps1_colorize_gitstring
    -		fi
    -	fi
    -
    -	b=${b##refs/heads/}
    -	if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    -		__git_ps1_branch_name=$b
    -		b="\${__git_ps1_branch_name}"
    -	fi
    -
    -	local f="$h$w$i$s$u"
    -	local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
    -
    -	if [ $pcmode = yes ]; then
    -		if [ "${__git_printf_supports_v-}" != yes ]; then
    -			gitstring=$(printf -- "$printf_format" "$gitstring")
    -		else
    -			printf -v gitstring -- "$printf_format" "$gitstring"
    -		fi
    -		PS1="$ps1pc_start$gitstring$ps1pc_end"
    -	else
    -		printf -- "$printf_format" "$gitstring"
    -	fi
    -
    -	return $exit
    -}
    diff --git a/bash/mr-execute.sh b/bash/mr-execute.sh
    deleted file mode 100644
    index fd2112e..0000000
    --- a/bash/mr-execute.sh
    +++ /dev/null
    @@ -1,17 +0,0 @@
    -#!/usr/bin/env bash
    -
    -pushd ~/ > /dev/null || exit 1
    -
    -AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt"
    -mkdir -p "$(dirname "$AUTOJUMP_TXT")"
    -touch "$AUTOJUMP_TXT"
    -
    -mr checkout > /dev/null
    -
    -mkdir -p ~/.emacs.d/.cache/
    -(mr inject2 3>&2 2>&1 1>&3) 2>/dev/null | \
    -  sed -E 's/\/home\/andreh/~/'          | \
    -  awk '{print "\""$1"/""\""}'           | \
    -  cat <(printf "(\\n") - <(printf ")") > ~/.emacs.d/.cache/projectile-bookmarks.eld
    -
    -popd > /dev/null || exit 1
    diff --git a/bash/ps1.sh b/bash/ps1.sh
    deleted file mode 100644
    index 0746a83..0000000
    --- a/bash/ps1.sh
    +++ /dev/null
    @@ -1,98 +0,0 @@
    -#!/bin/sh
    -
    -error_marker() {
    -  # shellcheck disable=2181
    -  if [ "$?" != 0 ]; then
    -    redb ' (!!) ' | tr -d '\n'
    -  fi
    -}
    -
    -timestamp() {
    -  blacki '\T' | tr -d '\n'
    -}
    -
    -path() {
    -  yellowb '\w/' | tr -d '\n'
    -}
    -
    -repo_status() {
    -  inner="$(__git_ps1 "%s")"
    -  if [ -n "$inner" ]; then
    -    OUT="$(git status --short --branch --porcelain 2>/dev/null)"
    -    BRANCH_LINE="$(echo "$OUT" | head -n 1)"
    -    DIFF_LINES="$(echo "$OUT" | tail -n +2)"
    -
    -    if echo "$BRANCH_LINE" | grep -q 'ahead'; then
    -      IS_AHEAD=1
    -    fi
    -    if echo "$BRANCH_LINE" | grep -q 'behind'; then
    -      IS_BEHIND=1
    -    fi
    -
    -    if [ -n "$IS_AHEAD" ] && [ -n "$IS_BEHIND" ]; then
    -      BRANCH_MARKER="^^^ $inner vvv"
    -    elif [ -n "$IS_AHEAD" ]; then
    -      BRANCH_MARKER="^ $inner ^"
    -    elif [ -n "$IS_BEHIND" ]; then
    -      BRANCH_MARKER="v $inner v"
    -    else
    -      BRANCH_MARKER="$inner"
    -    fi
    -
    -    if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then
    -      HAS_DIFF=1
    -    fi
    -
    -    if echo "$DIFF_LINES" | grep -q '^[?][?]'; then
    -      HAS_UNTRACKED=1
    -    fi
    -
    -    if [ -n "$HAS_DIFF" ]; then
    -      COLOR_FN=redb
    -      LINE="{$BRANCH_MARKER}"
    -    elif [ -n "$IS_AHEAD" ] || [ -n "$IS_BEHIND" ]; then
    -      COLOR_FN=bluei
    -      LINE="[$BRANCH_MARKER]"
    -    elif [ -n "$HAS_UNTRACKED" ]; then
    -      COLOR_FN=lightblue
    -      LINE="($BRANCH_MARKER)"
    -    else
    -      COLOR_FN=green
    -      LINE="($BRANCH_MARKER)"
    -    fi
    -
    -    "$COLOR_FN" "$LINE" | tr -d '\n'
    -
    -    printf ' - '
    -    blacki "$(git rev-parse HEAD)" | tr -d '\n'
    -  fi
    -}
    -
    -guix_env() {
    -  if [ "$GUIX_ENVIRONMENT" != '' ]; then
    -    printf '\n'
    -    blacki '~> ' | tr -d '\n'
    -    purple 'guix environment ' | tr -d '\n'
    -    printf '('
    -    blueb "$GUIX_ENVIRONMENT" | tr -d '\n'
    -    printf ')'
    -  fi
    -}
    -
    -in_nix_shell() {
    -  if [ "$IN_NIX_SHELL" != '' ]; then
    -    printf '\n'
    -    blacki '~> ' | tr -d '\n'
    -    purpleb "$IN_NIX_SHELL " | tr -d '\n'
    -    purple 'nix-shell ' | tr -d '\n'
    -    printf '('
    -    # $name comes from the mkShell declaration
    -    # shellcheck disable=2154
    -    blueb "$name" | tr -d '\n'
    -    printf ')'
    -  fi
    -}
    -
    -PS1='`error_marker`'$(timestamp)' '$(path)' `repo_status``guix_env``in_nix_shell`
    -$ '
    -export PS1
    diff --git a/bash/reload.sh b/bash/reload.sh
    deleted file mode 100644
    index dbbdf59..0000000
    --- a/bash/reload.sh
    +++ /dev/null
    @@ -1,8 +0,0 @@
    -#!/bin/sh
    -# shellcheck disable=SC1090
    -
    -. ~/.bashrc
    -. "$DOTFILES/bash/x.sh"
    -. "$DOTFILES/bash/mr-execute.sh"
    -. "$DOTFILES/bash/fake-symlinks.sh"
    -. ~/annex/bin/misc/tmuxinator-templates.sh
    diff --git a/bash/symlinks.sh b/bash/symlinks.sh
    deleted file mode 100644
    index 453c5f3..0000000
    --- a/bash/symlinks.sh
    +++ /dev/null
    @@ -1,72 +0,0 @@
    -#!/bin/sh
    -
    -upsert_dir_symlink() {
    -  from="$1"
    -  to="$2"
    -  { [ -d "$to" ] || [ -L "$to" ]; } || {
    -    ln -s "$from" "$to"
    -  }
    -}
    -
    -upsert_dir_symlink "$HOME/dev/libre/others/borg/config" ~/.config/borg
    -
    -ln -fs "$DOTFILES/bash/bashrc.sh"               ~/.bashrc
    -ln -fs "$DOTFILES/bash/bash_profile.sh"         ~/.bash_profile
    -ln -fs "$DOTFILES/git/gitattributes"            ~/.gitattributes
    -ln -fs "$DOTFILES/git/gitignore"                ~/.gitignore_global
    -ln -fs "$DOTFILES/git/gitconfig.ini"            ~/.gitconfig
    -ln -fs "$DOTFILES/sbclrc.lisp"                  ~/.sbclrc
    -ln -fs "$DOTFILES/inputrc.conf"                 ~/.inputrc
    -ln -fs "$DOTFILES/Xmodmap.conf"                 ~/.Xmodmap
    -ln -fs "$DOTFILES/nixos/npmrc.sh"             ~/.npmrc
    -
    -mkdir -p ~/tmp/
    -touch ~/tmp/scratch.txt
    -
    -mkdir -p ~/.gnupg
    -ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf"       ~/.gnupg/gpg.conf
    -ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf
    -ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini"   ~/.mrconfig
    -
    -mkdir -p ~/.newsboat
    -ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls
    -
    -MEDIA_PREFIX=/run/media/andreh
    -upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD"      ~/UTCLOUD
    -upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER"      ~/SNEAKER
    -
    -## tmux
    -ln -fs "$DOTFILES/tmux.conf"                    ~/.tmux.conf
    -
    -## Emacs
    -mkdir -p "$HOME/.emacs.d/private/layers/"
    -ln -fs "$DOTFILES/spacemacs.el"                 ~/.spacemacs
    -
    -## vi
    -ln -fs "$DOTFILES/exrc.conf"                    ~/.exrc
    -
    -## xmonad
    -mkdir -p ~/.xmonad
    -ln -fs "$DOTFILES/xmonad/xsession.sh"           ~/.xsession
    -ln -fs "$DOTFILES/xmonad/xmonad.hs"             ~/.xmonad/xmonad.hs
    -ln -fs "$DOTFILES/xmonad/xmobar.hs"             ~/.xmobarrc
    -
    -## Mercurial
    -ln -fs "${DOTFILES}/hgrc.ini"                   ~/.hgrc
    -
    -## ranger
    -mkdir -p ~/.config/ranger/
    -ln -fs "${DOTFILES}/ranger.conf"                ~/.config/ranger/rc.conf
    -
    -## nu
    -ln -fs "$HOME/annex/bin/misc/nurc.sh"           ~/.nurc
    -
    -## Guix
    -ln -fs "$DOTFILES/guix/channels.scm"            ~/.config/guix/channels.scm
    -
    -## pimutils
    -mkdir -p ~/.config/vdirsyncer/ ~/.config/khal
    -ln -fs "$HOME/annex/bin/misc/pimutils/vdirsyncer.conf" ~/.config/vdirsyncer/config
    -ln -fs "$HOME/annex/bin/misc/pimutils/khal.conf"       ~/.config/khal/config
    -
    -ln -fs "$DOTFILES/infokey" ~/.infokey
    diff --git a/bash/templates/..git/hooks/pre-push b/bash/templates/..git/hooks/pre-push
    deleted file mode 120000
    index a54ecd2..0000000
    --- a/bash/templates/..git/hooks/pre-push
    +++ /dev/null
    @@ -1 +0,0 @@
    -../../build-aux/ci/git-pre-push.sh.in
    \ No newline at end of file
    diff --git a/bash/templates/..gitignore b/bash/templates/..gitignore
    deleted file mode 100644
    index 88a8afc..0000000
    --- a/bash/templates/..gitignore
    +++ /dev/null
    @@ -1,46 +0,0 @@
    -# GNU Autotools
    -/Makefile.in
    -/INSTALL
    -
    -autom4te.cache
    -/autoscan.log
    -/autoscan-*.log
    -/aclocal.m4
    -/compile
    -/config.guess
    -/config.h.in
    -/config.log
    -/config.status
    -/config.sub
    -/configure
    -/configure~
    -/configure.scan
    -/depcomp
    -/install-sh
    -/missing
    -/stamp-h1
    -
    -/.deps/
    -/Makefile
    -/config.h
    -
    -/test-suite.log
    -
    -/build-aux/compile
    -/build-aux/depcomp
    -/build-aux/install-sh
    -/build-aux/install-sh~
    -/build-aux/missing
    -/build-aux/test-driver
    -/build-aux/texinfo.tex
    -
    -/build-aux/ci/git-pre-push.sh
    -
    -/$PROJECT-*.tar.gz
    -/$PROJECT-*.tar.gz.asc
    -/$PROJECT-*/
    -
    -/doc/dictionaries/all.txt
    -
    -
    -/public/
    diff --git a/bash/templates/.guix-authorizations b/bash/templates/.guix-authorizations
    deleted file mode 100644
    index 0221b5b..0000000
    --- a/bash/templates/.guix-authorizations
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -(authorizations
    -  (version 0)
    -  (("5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060"
    -    (name "euandreh"))))
    diff --git a/bash/templates/.guix-channel b/bash/templates/.guix-channel
    deleted file mode 100644
    index d4d0f36..0000000
    --- a/bash/templates/.guix-channel
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -(channel
    -  (version 0)
    -  (directory "guix/channel")
    -  (keyring-reference "master"))
    diff --git a/bash/templates/AUTHORS b/bash/templates/AUTHORS
    deleted file mode 100644
    index 119be5e..0000000
    --- a/bash/templates/AUTHORS
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -The AUTHORS file is auto-generated when releasing.
    -If you are seeing this, use 'git shortlog --summary --email' for a list of authors.
    diff --git a/bash/templates/COPYING b/bash/templates/COPYING
    deleted file mode 100644
    index be3f7b2..0000000
    --- a/bash/templates/COPYING
    +++ /dev/null
    @@ -1,661 +0,0 @@
    -                    GNU AFFERO GENERAL PUBLIC LICENSE
    -                       Version 3, 19 November 2007
    -
    - Copyright (C) 2007 Free Software Foundation, Inc. 
    - Everyone is permitted to copy and distribute verbatim copies
    - of this license document, but changing it is not allowed.
    -
    -                            Preamble
    -
    -  The GNU Affero General Public License is a free, copyleft license for
    -software and other kinds of works, specifically designed to ensure
    -cooperation with the community in the case of network server software.
    -
    -  The licenses for most software and other practical works are designed
    -to take away your freedom to share and change the works.  By contrast,
    -our General Public Licenses are intended to guarantee your freedom to
    -share and change all versions of a program--to make sure it remains free
    -software for all its users.
    -
    -  When we speak of free software, we are referring to freedom, not
    -price.  Our General Public Licenses are designed to make sure that you
    -have the freedom to distribute copies of free software (and charge for
    -them if you wish), that you receive source code or can get it if you
    -want it, that you can change the software or use pieces of it in new
    -free programs, and that you know you can do these things.
    -
    -  Developers that use our General Public Licenses protect your rights
    -with two steps: (1) assert copyright on the software, and (2) offer
    -you this License which gives you legal permission to copy, distribute
    -and/or modify the software.
    -
    -  A secondary benefit of defending all users' freedom is that
    -improvements made in alternate versions of the program, if they
    -receive widespread use, become available for other developers to
    -incorporate.  Many developers of free software are heartened and
    -encouraged by the resulting cooperation.  However, in the case of
    -software used on network servers, this result may fail to come about.
    -The GNU General Public License permits making a modified version and
    -letting the public access it on a server without ever releasing its
    -source code to the public.
    -
    -  The GNU Affero General Public License is designed specifically to
    -ensure that, in such cases, the modified source code becomes available
    -to the community.  It requires the operator of a network server to
    -provide the source code of the modified version running there to the
    -users of that server.  Therefore, public use of a modified version, on
    -a publicly accessible server, gives the public access to the source
    -code of the modified version.
    -
    -  An older license, called the Affero General Public License and
    -published by Affero, was designed to accomplish similar goals.  This is
    -a different license, not a version of the Affero GPL, but Affero has
    -released a new version of the Affero GPL which permits relicensing under
    -this license.
    -
    -  The precise terms and conditions for copying, distribution and
    -modification follow.
    -
    -                       TERMS AND CONDITIONS
    -
    -  0. Definitions.
    -
    -  "This License" refers to version 3 of the GNU Affero General Public License.
    -
    -  "Copyright" also means copyright-like laws that apply to other kinds of
    -works, such as semiconductor masks.
    -
    -  "The Program" refers to any copyrightable work licensed under this
    -License.  Each licensee is addressed as "you".  "Licensees" and
    -"recipients" may be individuals or organizations.
    -
    -  To "modify" a work means to copy from or adapt all or part of the work
    -in a fashion requiring copyright permission, other than the making of an
    -exact copy.  The resulting work is called a "modified version" of the
    -earlier work or a work "based on" the earlier work.
    -
    -  A "covered work" means either the unmodified Program or a work based
    -on the Program.
    -
    -  To "propagate" a work means to do anything with it that, without
    -permission, would make you directly or secondarily liable for
    -infringement under applicable copyright law, except executing it on a
    -computer or modifying a private copy.  Propagation includes copying,
    -distribution (with or without modification), making available to the
    -public, and in some countries other activities as well.
    -
    -  To "convey" a work means any kind of propagation that enables other
    -parties to make or receive copies.  Mere interaction with a user through
    -a computer network, with no transfer of a copy, is not conveying.
    -
    -  An interactive user interface displays "Appropriate Legal Notices"
    -to the extent that it includes a convenient and prominently visible
    -feature that (1) displays an appropriate copyright notice, and (2)
    -tells the user that there is no warranty for the work (except to the
    -extent that warranties are provided), that licensees may convey the
    -work under this License, and how to view a copy of this License.  If
    -the interface presents a list of user commands or options, such as a
    -menu, a prominent item in the list meets this criterion.
    -
    -  1. Source Code.
    -
    -  The "source code" for a work means the preferred form of the work
    -for making modifications to it.  "Object code" means any non-source
    -form of a work.
    -
    -  A "Standard Interface" means an interface that either is an official
    -standard defined by a recognized standards body, or, in the case of
    -interfaces specified for a particular programming language, one that
    -is widely used among developers working in that language.
    -
    -  The "System Libraries" of an executable work include anything, other
    -than the work as a whole, that (a) is included in the normal form of
    -packaging a Major Component, but which is not part of that Major
    -Component, and (b) serves only to enable use of the work with that
    -Major Component, or to implement a Standard Interface for which an
    -implementation is available to the public in source code form.  A
    -"Major Component", in this context, means a major essential component
    -(kernel, window system, and so on) of the specific operating system
    -(if any) on which the executable work runs, or a compiler used to
    -produce the work, or an object code interpreter used to run it.
    -
    -  The "Corresponding Source" for a work in object code form means all
    -the source code needed to generate, install, and (for an executable
    -work) run the object code and to modify the work, including scripts to
    -control those activities.  However, it does not include the work's
    -System Libraries, or general-purpose tools or generally available free
    -programs which are used unmodified in performing those activities but
    -which are not part of the work.  For example, Corresponding Source
    -includes interface definition files associated with source files for
    -the work, and the source code for shared libraries and dynamically
    -linked subprograms that the work is specifically designed to require,
    -such as by intimate data communication or control flow between those
    -subprograms and other parts of the work.
    -
    -  The Corresponding Source need not include anything that users
    -can regenerate automatically from other parts of the Corresponding
    -Source.
    -
    -  The Corresponding Source for a work in source code form is that
    -same work.
    -
    -  2. Basic Permissions.
    -
    -  All rights granted under this License are granted for the term of
    -copyright on the Program, and are irrevocable provided the stated
    -conditions are met.  This License explicitly affirms your unlimited
    -permission to run the unmodified Program.  The output from running a
    -covered work is covered by this License only if the output, given its
    -content, constitutes a covered work.  This License acknowledges your
    -rights of fair use or other equivalent, as provided by copyright law.
    -
    -  You may make, run and propagate covered works that you do not
    -convey, without conditions so long as your license otherwise remains
    -in force.  You may convey covered works to others for the sole purpose
    -of having them make modifications exclusively for you, or provide you
    -with facilities for running those works, provided that you comply with
    -the terms of this License in conveying all material for which you do
    -not control copyright.  Those thus making or running the covered works
    -for you must do so exclusively on your behalf, under your direction
    -and control, on terms that prohibit them from making any copies of
    -your copyrighted material outside their relationship with you.
    -
    -  Conveying under any other circumstances is permitted solely under
    -the conditions stated below.  Sublicensing is not allowed; section 10
    -makes it unnecessary.
    -
    -  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    -
    -  No covered work shall be deemed part of an effective technological
    -measure under any applicable law fulfilling obligations under article
    -11 of the WIPO copyright treaty adopted on 20 December 1996, or
    -similar laws prohibiting or restricting circumvention of such
    -measures.
    -
    -  When you convey a covered work, you waive any legal power to forbid
    -circumvention of technological measures to the extent such circumvention
    -is effected by exercising rights under this License with respect to
    -the covered work, and you disclaim any intention to limit operation or
    -modification of the work as a means of enforcing, against the work's
    -users, your or third parties' legal rights to forbid circumvention of
    -technological measures.
    -
    -  4. Conveying Verbatim Copies.
    -
    -  You may convey verbatim copies of the Program's source code as you
    -receive it, in any medium, provided that you conspicuously and
    -appropriately publish on each copy an appropriate copyright notice;
    -keep intact all notices stating that this License and any
    -non-permissive terms added in accord with section 7 apply to the code;
    -keep intact all notices of the absence of any warranty; and give all
    -recipients a copy of this License along with the Program.
    -
    -  You may charge any price or no price for each copy that you convey,
    -and you may offer support or warranty protection for a fee.
    -
    -  5. Conveying Modified Source Versions.
    -
    -  You may convey a work based on the Program, or the modifications to
    -produce it from the Program, in the form of source code under the
    -terms of section 4, provided that you also meet all of these conditions:
    -
    -    a) The work must carry prominent notices stating that you modified
    -    it, and giving a relevant date.
    -
    -    b) The work must carry prominent notices stating that it is
    -    released under this License and any conditions added under section
    -    7.  This requirement modifies the requirement in section 4 to
    -    "keep intact all notices".
    -
    -    c) You must license the entire work, as a whole, under this
    -    License to anyone who comes into possession of a copy.  This
    -    License will therefore apply, along with any applicable section 7
    -    additional terms, to the whole of the work, and all its parts,
    -    regardless of how they are packaged.  This License gives no
    -    permission to license the work in any other way, but it does not
    -    invalidate such permission if you have separately received it.
    -
    -    d) If the work has interactive user interfaces, each must display
    -    Appropriate Legal Notices; however, if the Program has interactive
    -    interfaces that do not display Appropriate Legal Notices, your
    -    work need not make them do so.
    -
    -  A compilation of a covered work with other separate and independent
    -works, which are not by their nature extensions of the covered work,
    -and which are not combined with it such as to form a larger program,
    -in or on a volume of a storage or distribution medium, is called an
    -"aggregate" if the compilation and its resulting copyright are not
    -used to limit the access or legal rights of the compilation's users
    -beyond what the individual works permit.  Inclusion of a covered work
    -in an aggregate does not cause this License to apply to the other
    -parts of the aggregate.
    -
    -  6. Conveying Non-Source Forms.
    -
    -  You may convey a covered work in object code form under the terms
    -of sections 4 and 5, provided that you also convey the
    -machine-readable Corresponding Source under the terms of this License,
    -in one of these ways:
    -
    -    a) Convey the object code in, or embodied in, a physical product
    -    (including a physical distribution medium), accompanied by the
    -    Corresponding Source fixed on a durable physical medium
    -    customarily used for software interchange.
    -
    -    b) Convey the object code in, or embodied in, a physical product
    -    (including a physical distribution medium), accompanied by a
    -    written offer, valid for at least three years and valid for as
    -    long as you offer spare parts or customer support for that product
    -    model, to give anyone who possesses the object code either (1) a
    -    copy of the Corresponding Source for all the software in the
    -    product that is covered by this License, on a durable physical
    -    medium customarily used for software interchange, for a price no
    -    more than your reasonable cost of physically performing this
    -    conveying of source, or (2) access to copy the
    -    Corresponding Source from a network server at no charge.
    -
    -    c) Convey individual copies of the object code with a copy of the
    -    written offer to provide the Corresponding Source.  This
    -    alternative is allowed only occasionally and noncommercially, and
    -    only if you received the object code with such an offer, in accord
    -    with subsection 6b.
    -
    -    d) Convey the object code by offering access from a designated
    -    place (gratis or for a charge), and offer equivalent access to the
    -    Corresponding Source in the same way through the same place at no
    -    further charge.  You need not require recipients to copy the
    -    Corresponding Source along with the object code.  If the place to
    -    copy the object code is a network server, the Corresponding Source
    -    may be on a different server (operated by you or a third party)
    -    that supports equivalent copying facilities, provided you maintain
    -    clear directions next to the object code saying where to find the
    -    Corresponding Source.  Regardless of what server hosts the
    -    Corresponding Source, you remain obligated to ensure that it is
    -    available for as long as needed to satisfy these requirements.
    -
    -    e) Convey the object code using peer-to-peer transmission, provided
    -    you inform other peers where the object code and Corresponding
    -    Source of the work are being offered to the general public at no
    -    charge under subsection 6d.
    -
    -  A separable portion of the object code, whose source code is excluded
    -from the Corresponding Source as a System Library, need not be
    -included in conveying the object code work.
    -
    -  A "User Product" is either (1) a "consumer product", which means any
    -tangible personal property which is normally used for personal, family,
    -or household purposes, or (2) anything designed or sold for incorporation
    -into a dwelling.  In determining whether a product is a consumer product,
    -doubtful cases shall be resolved in favor of coverage.  For a particular
    -product received by a particular user, "normally used" refers to a
    -typical or common use of that class of product, regardless of the status
    -of the particular user or of the way in which the particular user
    -actually uses, or expects or is expected to use, the product.  A product
    -is a consumer product regardless of whether the product has substantial
    -commercial, industrial or non-consumer uses, unless such uses represent
    -the only significant mode of use of the product.
    -
    -  "Installation Information" for a User Product means any methods,
    -procedures, authorization keys, or other information required to install
    -and execute modified versions of a covered work in that User Product from
    -a modified version of its Corresponding Source.  The information must
    -suffice to ensure that the continued functioning of the modified object
    -code is in no case prevented or interfered with solely because
    -modification has been made.
    -
    -  If you convey an object code work under this section in, or with, or
    -specifically for use in, a User Product, and the conveying occurs as
    -part of a transaction in which the right of possession and use of the
    -User Product is transferred to the recipient in perpetuity or for a
    -fixed term (regardless of how the transaction is characterized), the
    -Corresponding Source conveyed under this section must be accompanied
    -by the Installation Information.  But this requirement does not apply
    -if neither you nor any third party retains the ability to install
    -modified object code on the User Product (for example, the work has
    -been installed in ROM).
    -
    -  The requirement to provide Installation Information does not include a
    -requirement to continue to provide support service, warranty, or updates
    -for a work that has been modified or installed by the recipient, or for
    -the User Product in which it has been modified or installed.  Access to a
    -network may be denied when the modification itself materially and
    -adversely affects the operation of the network or violates the rules and
    -protocols for communication across the network.
    -
    -  Corresponding Source conveyed, and Installation Information provided,
    -in accord with this section must be in a format that is publicly
    -documented (and with an implementation available to the public in
    -source code form), and must require no special password or key for
    -unpacking, reading or copying.
    -
    -  7. Additional Terms.
    -
    -  "Additional permissions" are terms that supplement the terms of this
    -License by making exceptions from one or more of its conditions.
    -Additional permissions that are applicable to the entire Program shall
    -be treated as though they were included in this License, to the extent
    -that they are valid under applicable law.  If additional permissions
    -apply only to part of the Program, that part may be used separately
    -under those permissions, but the entire Program remains governed by
    -this License without regard to the additional permissions.
    -
    -  When you convey a copy of a covered work, you may at your option
    -remove any additional permissions from that copy, or from any part of
    -it.  (Additional permissions may be written to require their own
    -removal in certain cases when you modify the work.)  You may place
    -additional permissions on material, added by you to a covered work,
    -for which you have or can give appropriate copyright permission.
    -
    -  Notwithstanding any other provision of this License, for material you
    -add to a covered work, you may (if authorized by the copyright holders of
    -that material) supplement the terms of this License with terms:
    -
    -    a) Disclaiming warranty or limiting liability differently from the
    -    terms of sections 15 and 16 of this License; or
    -
    -    b) Requiring preservation of specified reasonable legal notices or
    -    author attributions in that material or in the Appropriate Legal
    -    Notices displayed by works containing it; or
    -
    -    c) Prohibiting misrepresentation of the origin of that material, or
    -    requiring that modified versions of such material be marked in
    -    reasonable ways as different from the original version; or
    -
    -    d) Limiting the use for publicity purposes of names of licensors or
    -    authors of the material; or
    -
    -    e) Declining to grant rights under trademark law for use of some
    -    trade names, trademarks, or service marks; or
    -
    -    f) Requiring indemnification of licensors and authors of that
    -    material by anyone who conveys the material (or modified versions of
    -    it) with contractual assumptions of liability to the recipient, for
    -    any liability that these contractual assumptions directly impose on
    -    those licensors and authors.
    -
    -  All other non-permissive additional terms are considered "further
    -restrictions" within the meaning of section 10.  If the Program as you
    -received it, or any part of it, contains a notice stating that it is
    -governed by this License along with a term that is a further
    -restriction, you may remove that term.  If a license document contains
    -a further restriction but permits relicensing or conveying under this
    -License, you may add to a covered work material governed by the terms
    -of that license document, provided that the further restriction does
    -not survive such relicensing or conveying.
    -
    -  If you add terms to a covered work in accord with this section, you
    -must place, in the relevant source files, a statement of the
    -additional terms that apply to those files, or a notice indicating
    -where to find the applicable terms.
    -
    -  Additional terms, permissive or non-permissive, may be stated in the
    -form of a separately written license, or stated as exceptions;
    -the above requirements apply either way.
    -
    -  8. Termination.
    -
    -  You may not propagate or modify a covered work except as expressly
    -provided under this License.  Any attempt otherwise to propagate or
    -modify it is void, and will automatically terminate your rights under
    -this License (including any patent licenses granted under the third
    -paragraph of section 11).
    -
    -  However, if you cease all violation of this License, then your
    -license from a particular copyright holder is reinstated (a)
    -provisionally, unless and until the copyright holder explicitly and
    -finally terminates your license, and (b) permanently, if the copyright
    -holder fails to notify you of the violation by some reasonable means
    -prior to 60 days after the cessation.
    -
    -  Moreover, your license from a particular copyright holder is
    -reinstated permanently if the copyright holder notifies you of the
    -violation by some reasonable means, this is the first time you have
    -received notice of violation of this License (for any work) from that
    -copyright holder, and you cure the violation prior to 30 days after
    -your receipt of the notice.
    -
    -  Termination of your rights under this section does not terminate the
    -licenses of parties who have received copies or rights from you under
    -this License.  If your rights have been terminated and not permanently
    -reinstated, you do not qualify to receive new licenses for the same
    -material under section 10.
    -
    -  9. Acceptance Not Required for Having Copies.
    -
    -  You are not required to accept this License in order to receive or
    -run a copy of the Program.  Ancillary propagation of a covered work
    -occurring solely as a consequence of using peer-to-peer transmission
    -to receive a copy likewise does not require acceptance.  However,
    -nothing other than this License grants you permission to propagate or
    -modify any covered work.  These actions infringe copyright if you do
    -not accept this License.  Therefore, by modifying or propagating a
    -covered work, you indicate your acceptance of this License to do so.
    -
    -  10. Automatic Licensing of Downstream Recipients.
    -
    -  Each time you convey a covered work, the recipient automatically
    -receives a license from the original licensors, to run, modify and
    -propagate that work, subject to this License.  You are not responsible
    -for enforcing compliance by third parties with this License.
    -
    -  An "entity transaction" is a transaction transferring control of an
    -organization, or substantially all assets of one, or subdividing an
    -organization, or merging organizations.  If propagation of a covered
    -work results from an entity transaction, each party to that
    -transaction who receives a copy of the work also receives whatever
    -licenses to the work the party's predecessor in interest had or could
    -give under the previous paragraph, plus a right to possession of the
    -Corresponding Source of the work from the predecessor in interest, if
    -the predecessor has it or can get it with reasonable efforts.
    -
    -  You may not impose any further restrictions on the exercise of the
    -rights granted or affirmed under this License.  For example, you may
    -not impose a license fee, royalty, or other charge for exercise of
    -rights granted under this License, and you may not initiate litigation
    -(including a cross-claim or counterclaim in a lawsuit) alleging that
    -any patent claim is infringed by making, using, selling, offering for
    -sale, or importing the Program or any portion of it.
    -
    -  11. Patents.
    -
    -  A "contributor" is a copyright holder who authorizes use under this
    -License of the Program or a work on which the Program is based.  The
    -work thus licensed is called the contributor's "contributor version".
    -
    -  A contributor's "essential patent claims" are all patent claims
    -owned or controlled by the contributor, whether already acquired or
    -hereafter acquired, that would be infringed by some manner, permitted
    -by this License, of making, using, or selling its contributor version,
    -but do not include claims that would be infringed only as a
    -consequence of further modification of the contributor version.  For
    -purposes of this definition, "control" includes the right to grant
    -patent sublicenses in a manner consistent with the requirements of
    -this License.
    -
    -  Each contributor grants you a non-exclusive, worldwide, royalty-free
    -patent license under the contributor's essential patent claims, to
    -make, use, sell, offer for sale, import and otherwise run, modify and
    -propagate the contents of its contributor version.
    -
    -  In the following three paragraphs, a "patent license" is any express
    -agreement or commitment, however denominated, not to enforce a patent
    -(such as an express permission to practice a patent or covenant not to
    -sue for patent infringement).  To "grant" such a patent license to a
    -party means to make such an agreement or commitment not to enforce a
    -patent against the party.
    -
    -  If you convey a covered work, knowingly relying on a patent license,
    -and the Corresponding Source of the work is not available for anyone
    -to copy, free of charge and under the terms of this License, through a
    -publicly available network server or other readily accessible means,
    -then you must either (1) cause the Corresponding Source to be so
    -available, or (2) arrange to deprive yourself of the benefit of the
    -patent license for this particular work, or (3) arrange, in a manner
    -consistent with the requirements of this License, to extend the patent
    -license to downstream recipients.  "Knowingly relying" means you have
    -actual knowledge that, but for the patent license, your conveying the
    -covered work in a country, or your recipient's use of the covered work
    -in a country, would infringe one or more identifiable patents in that
    -country that you have reason to believe are valid.
    -
    -  If, pursuant to or in connection with a single transaction or
    -arrangement, you convey, or propagate by procuring conveyance of, a
    -covered work, and grant a patent license to some of the parties
    -receiving the covered work authorizing them to use, propagate, modify
    -or convey a specific copy of the covered work, then the patent license
    -you grant is automatically extended to all recipients of the covered
    -work and works based on it.
    -
    -  A patent license is "discriminatory" if it does not include within
    -the scope of its coverage, prohibits the exercise of, or is
    -conditioned on the non-exercise of one or more of the rights that are
    -specifically granted under this License.  You may not convey a covered
    -work if you are a party to an arrangement with a third party that is
    -in the business of distributing software, under which you make payment
    -to the third party based on the extent of your activity of conveying
    -the work, and under which the third party grants, to any of the
    -parties who would receive the covered work from you, a discriminatory
    -patent license (a) in connection with copies of the covered work
    -conveyed by you (or copies made from those copies), or (b) primarily
    -for and in connection with specific products or compilations that
    -contain the covered work, unless you entered into that arrangement,
    -or that patent license was granted, prior to 28 March 2007.
    -
    -  Nothing in this License shall be construed as excluding or limiting
    -any implied license or other defenses to infringement that may
    -otherwise be available to you under applicable patent law.
    -
    -  12. No Surrender of Others' Freedom.
    -
    -  If conditions are imposed on you (whether by court order, agreement or
    -otherwise) that contradict the conditions of this License, they do not
    -excuse you from the conditions of this License.  If you cannot convey a
    -covered work so as to satisfy simultaneously your obligations under this
    -License and any other pertinent obligations, then as a consequence you may
    -not convey it at all.  For example, if you agree to terms that obligate you
    -to collect a royalty for further conveying from those to whom you convey
    -the Program, the only way you could satisfy both those terms and this
    -License would be to refrain entirely from conveying the Program.
    -
    -  13. Remote Network Interaction; Use with the GNU General Public License.
    -
    -  Notwithstanding any other provision of this License, if you modify the
    -Program, your modified version must prominently offer all users
    -interacting with it remotely through a computer network (if your version
    -supports such interaction) an opportunity to receive the Corresponding
    -Source of your version by providing access to the Corresponding Source
    -from a network server at no charge, through some standard or customary
    -means of facilitating copying of software.  This Corresponding Source
    -shall include the Corresponding Source for any work covered by version 3
    -of the GNU General Public License that is incorporated pursuant to the
    -following paragraph.
    -
    -  Notwithstanding any other provision of this License, you have
    -permission to link or combine any covered work with a work licensed
    -under version 3 of the GNU General Public License into a single
    -combined work, and to convey the resulting work.  The terms of this
    -License will continue to apply to the part which is the covered work,
    -but the work with which it is combined will remain governed by version
    -3 of the GNU General Public License.
    -
    -  14. Revised Versions of this License.
    -
    -  The Free Software Foundation may publish revised and/or new versions of
    -the GNU Affero General Public License from time to time.  Such new versions
    -will be similar in spirit to the present version, but may differ in detail to
    -address new problems or concerns.
    -
    -  Each version is given a distinguishing version number.  If the
    -Program specifies that a certain numbered version of the GNU Affero General
    -Public License "or any later version" applies to it, you have the
    -option of following the terms and conditions either of that numbered
    -version or of any later version published by the Free Software
    -Foundation.  If the Program does not specify a version number of the
    -GNU Affero General Public License, you may choose any version ever published
    -by the Free Software Foundation.
    -
    -  If the Program specifies that a proxy can decide which future
    -versions of the GNU Affero General Public License can be used, that proxy's
    -public statement of acceptance of a version permanently authorizes you
    -to choose that version for the Program.
    -
    -  Later license versions may give you additional or different
    -permissions.  However, no additional obligations are imposed on any
    -author or copyright holder as a result of your choosing to follow a
    -later version.
    -
    -  15. Disclaimer of Warranty.
    -
    -  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    -APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    -PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    -IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    -ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    -
    -  16. Limitation of Liability.
    -
    -  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    -SUCH DAMAGES.
    -
    -  17. Interpretation of Sections 15 and 16.
    -
    -  If the disclaimer of warranty and limitation of liability provided
    -above cannot be given local legal effect according to their terms,
    -reviewing courts shall apply local law that most closely approximates
    -an absolute waiver of all civil liability in connection with the
    -Program, unless a warranty or assumption of liability accompanies a
    -copy of the Program in return for a fee.
    -
    -                     END OF TERMS AND CONDITIONS
    -
    -            How to Apply These Terms to Your New Programs
    -
    -  If you develop a new program, and you want it to be of the greatest
    -possible use to the public, the best way to achieve this is to make it
    -free software which everyone can redistribute and change under these terms.
    -
    -  To do so, attach the following notices to the program.  It is safest
    -to attach them to the start of each source file to most effectively
    -state the exclusion of warranty; and each file should have at least
    -the "copyright" line and a pointer to where the full notice is found.
    -
    -    
    -    Copyright (C)   
    -
    -    This program is free software: you can redistribute it and/or modify
    -    it under the terms of the GNU Affero General Public License as published by
    -    the Free Software Foundation, either version 3 of the License, or
    -    (at your option) any later version.
    -
    -    This program is distributed in the hope that it will be useful,
    -    but WITHOUT ANY WARRANTY; without even the implied warranty of
    -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -    GNU Affero General Public License for more details.
    -
    -    You should have received a copy of the GNU Affero General Public License
    -    along with this program.  If not, see .
    -
    -Also add information on how to contact you by electronic and paper mail.
    -
    -  If your software can interact with users remotely through a computer
    -network, you should also make sure that it provides a way for users to
    -get its source.  For example, if your program is a web application, its
    -interface could display a "Source" link that leads users to an archive
    -of the code.  There are many ways you could offer source, and different
    -solutions will be better for different programs; see section 13 for the
    -specific requirements.
    -
    -  You should also get your employer (if you work as a programmer) or school,
    -if any, to sign a "copyright disclaimer" for the program, if necessary.
    -For more information on this, and how to apply and follow the GNU AGPL, see
    -.
    diff --git a/bash/templates/ChangeLog b/bash/templates/ChangeLog
    deleted file mode 100644
    index 9001919..0000000
    --- a/bash/templates/ChangeLog
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -The ChangeLog file is auto-generated when releasing.
    -If you are seeing this, use 'git log' for a detailed list of changes.
    diff --git a/bash/templates/HACKING.in b/bash/templates/HACKING.in
    deleted file mode 100644
    index f8d72d9..0000000
    --- a/bash/templates/HACKING.in
    +++ /dev/null
    @@ -1,5 +0,0 @@
    -See the manual for useful hacking information, either by running
    -
    -  info -f doc/@PACKAGE@.info "Contributing"
    -
    -or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html
    diff --git a/bash/templates/INSTALL b/bash/templates/INSTALL
    deleted file mode 100644
    index 8865734..0000000
    --- a/bash/templates/INSTALL
    +++ /dev/null
    @@ -1,368 +0,0 @@
    -Installation Instructions
    -*************************
    -
    -   Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
    -Foundation, Inc.
    -
    -   Copying and distribution of this file, with or without modification,
    -are permitted in any medium without royalty provided the copyright
    -notice and this notice are preserved.  This file is offered as-is,
    -without warranty of any kind.
    -
    -Basic Installation
    -==================
    -
    -   Briefly, the shell command './configure && make && make install'
    -should configure, build, and install this package.  The following
    -more-detailed instructions are generic; see the 'README' file for
    -instructions specific to this package.  Some packages provide this
    -'INSTALL' file but do not implement all of the features documented
    -below.  The lack of an optional feature in a given package is not
    -necessarily a bug.  More recommendations for GNU packages can be found
    -in *note Makefile Conventions: (standards)Makefile Conventions.
    -
    -   The 'configure' shell script attempts to guess correct values for
    -various system-dependent variables used during compilation.  It uses
    -those values to create a 'Makefile' in each directory of the package.
    -It may also create one or more '.h' files containing system-dependent
    -definitions.  Finally, it creates a shell script 'config.status' that
    -you can run in the future to recreate the current configuration, and a
    -file 'config.log' containing compiler output (useful mainly for
    -debugging 'configure').
    -
    -   It can also use an optional file (typically called 'config.cache' and
    -enabled with '--cache-file=config.cache' or simply '-C') that saves the
    -results of its tests to speed up reconfiguring.  Caching is disabled by
    -default to prevent problems with accidental use of stale cache files.
    -
    -   If you need to do unusual things to compile the package, please try
    -to figure out how 'configure' could check whether to do them, and mail
    -diffs or instructions to the address given in the 'README' so they can
    -be considered for the next release.  If you are using the cache, and at
    -some point 'config.cache' contains results you don't want to keep, you
    -may remove or edit it.
    -
    -   The file 'configure.ac' (or 'configure.in') is used to create
    -'configure' by a program called 'autoconf'.  You need 'configure.ac' if
    -you want to change it or regenerate 'configure' using a newer version of
    -'autoconf'.
    -
    -   The simplest way to compile this package is:
    -
    -  1. 'cd' to the directory containing the package's source code and type
    -     './configure' to configure the package for your system.
    -
    -     Running 'configure' might take a while.  While running, it prints
    -     some messages telling which features it is checking for.
    -
    -  2. Type 'make' to compile the package.
    -
    -  3. Optionally, type 'make check' to run any self-tests that come with
    -     the package, generally using the just-built uninstalled binaries.
    -
    -  4. Type 'make install' to install the programs and any data files and
    -     documentation.  When installing into a prefix owned by root, it is
    -     recommended that the package be configured and built as a regular
    -     user, and only the 'make install' phase executed with root
    -     privileges.
    -
    -  5. Optionally, type 'make installcheck' to repeat any self-tests, but
    -     this time using the binaries in their final installed location.
    -     This target does not install anything.  Running this target as a
    -     regular user, particularly if the prior 'make install' required
    -     root privileges, verifies that the installation completed
    -     correctly.
    -
    -  6. You can remove the program binaries and object files from the
    -     source code directory by typing 'make clean'.  To also remove the
    -     files that 'configure' created (so you can compile the package for
    -     a different kind of computer), type 'make distclean'.  There is
    -     also a 'make maintainer-clean' target, but that is intended mainly
    -     for the package's developers.  If you use it, you may have to get
    -     all sorts of other programs in order to regenerate files that came
    -     with the distribution.
    -
    -  7. Often, you can also type 'make uninstall' to remove the installed
    -     files again.  In practice, not all packages have tested that
    -     uninstallation works correctly, even though it is required by the
    -     GNU Coding Standards.
    -
    -  8. Some packages, particularly those that use Automake, provide 'make
    -     distcheck', which can by used by developers to test that all other
    -     targets like 'make install' and 'make uninstall' work correctly.
    -     This target is generally not run by end users.
    -
    -Compilers and Options
    -=====================
    -
    -   Some systems require unusual options for compilation or linking that
    -the 'configure' script does not know about.  Run './configure --help'
    -for details on some of the pertinent environment variables.
    -
    -   You can give 'configure' initial values for configuration parameters
    -by setting variables in the command line or in the environment.  Here is
    -an example:
    -
    -     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
    -
    -   *Note Defining Variables::, for more details.
    -
    -Compiling For Multiple Architectures
    -====================================
    -
    -   You can compile the package for more than one kind of computer at the
    -same time, by placing the object files for each architecture in their
    -own directory.  To do this, you can use GNU 'make'.  'cd' to the
    -directory where you want the object files and executables to go and run
    -the 'configure' script.  'configure' automatically checks for the source
    -code in the directory that 'configure' is in and in '..'.  This is known
    -as a "VPATH" build.
    -
    -   With a non-GNU 'make', it is safer to compile the package for one
    -architecture at a time in the source code directory.  After you have
    -installed the package for one architecture, use 'make distclean' before
    -reconfiguring for another architecture.
    -
    -   On MacOS X 10.5 and later systems, you can create libraries and
    -executables that work on multiple system types--known as "fat" or
    -"universal" binaries--by specifying multiple '-arch' options to the
    -compiler but only a single '-arch' option to the preprocessor.  Like
    -this:
    -
    -     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
    -                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
    -                 CPP="gcc -E" CXXCPP="g++ -E"
    -
    -   This is not guaranteed to produce working output in all cases, you
    -may have to build one architecture at a time and combine the results
    -using the 'lipo' tool if you have problems.
    -
    -Installation Names
    -==================
    -
    -   By default, 'make install' installs the package's commands under
    -'/usr/local/bin', include files under '/usr/local/include', etc.  You
    -can specify an installation prefix other than '/usr/local' by giving
    -'configure' the option '--prefix=PREFIX', where PREFIX must be an
    -absolute file name.
    -
    -   You can specify separate installation prefixes for
    -architecture-specific files and architecture-independent files.  If you
    -pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
    -PREFIX as the prefix for installing programs and libraries.
    -Documentation and other data files still use the regular prefix.
    -
    -   In addition, if you use an unusual directory layout you can give
    -options like '--bindir=DIR' to specify different values for particular
    -kinds of files.  Run 'configure --help' for a list of the directories
    -you can set and what kinds of files go in them.  In general, the default
    -for these options is expressed in terms of '${prefix}', so that
    -specifying just '--prefix' will affect all of the other directory
    -specifications that were not explicitly provided.
    -
    -   The most portable way to affect installation locations is to pass the
    -correct locations to 'configure'; however, many packages provide one or
    -both of the following shortcuts of passing variable assignments to the
    -'make install' command line to change installation locations without
    -having to reconfigure or recompile.
    -
    -   The first method involves providing an override variable for each
    -affected directory.  For example, 'make install
    -prefix=/alternate/directory' will choose an alternate location for all
    -directory configuration variables that were expressed in terms of
    -'${prefix}'.  Any directories that were specified during 'configure',
    -but not in terms of '${prefix}', must each be overridden at install time
    -for the entire installation to be relocated.  The approach of makefile
    -variable overrides for each directory variable is required by the GNU
    -Coding Standards, and ideally causes no recompilation.  However, some
    -platforms have known limitations with the semantics of shared libraries
    -that end up requiring recompilation when using this method, particularly
    -noticeable in packages that use GNU Libtool.
    -
    -   The second method involves providing the 'DESTDIR' variable.  For
    -example, 'make install DESTDIR=/alternate/directory' will prepend
    -'/alternate/directory' before all installation names.  The approach of
    -'DESTDIR' overrides is not required by the GNU Coding Standards, and
    -does not work on platforms that have drive letters.  On the other hand,
    -it does better at avoiding recompilation issues, and works well even
    -when some directory options were not specified in terms of '${prefix}'
    -at 'configure' time.
    -
    -Optional Features
    -=================
    -
    -   If the package supports it, you can cause programs to be installed
    -with an extra prefix or suffix on their names by giving 'configure' the
    -option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
    -
    -   Some packages pay attention to '--enable-FEATURE' options to
    -'configure', where FEATURE indicates an optional part of the package.
    -They may also pay attention to '--with-PACKAGE' options, where PACKAGE
    -is something like 'gnu-as' or 'x' (for the X Window System).  The
    -'README' should mention any '--enable-' and '--with-' options that the
    -package recognizes.
    -
    -   For packages that use the X Window System, 'configure' can usually
    -find the X include and library files automatically, but if it doesn't,
    -you can use the 'configure' options '--x-includes=DIR' and
    -'--x-libraries=DIR' to specify their locations.
    -
    -   Some packages offer the ability to configure how verbose the
    -execution of 'make' will be.  For these packages, running './configure
    ---enable-silent-rules' sets the default to minimal output, which can be
    -overridden with 'make V=1'; while running './configure
    ---disable-silent-rules' sets the default to verbose, which can be
    -overridden with 'make V=0'.
    -
    -Particular systems
    -==================
    -
    -   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC
    -is not installed, it is recommended to use the following options in
    -order to use an ANSI C compiler:
    -
    -     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
    -
    -and if that doesn't work, install pre-built binaries of GCC for HP-UX.
    -
    -   HP-UX 'make' updates targets which have the same time stamps as their
    -prerequisites, which makes it generally unusable when shipped generated
    -files such as 'configure' are involved.  Use GNU 'make' instead.
    -
    -   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
    -parse its '' header file.  The option '-nodtk' can be used as a
    -workaround.  If GNU CC is not installed, it is therefore recommended to
    -try
    -
    -     ./configure CC="cc"
    -
    -and if that doesn't work, try
    -
    -     ./configure CC="cc -nodtk"
    -
    -   On Solaris, don't put '/usr/ucb' early in your 'PATH'.  This
    -directory contains several dysfunctional programs; working variants of
    -these programs are available in '/usr/bin'.  So, if you need '/usr/ucb'
    -in your 'PATH', put it _after_ '/usr/bin'.
    -
    -   On Haiku, software installed for all users goes in '/boot/common',
    -not '/usr/local'.  It is recommended to use the following options:
    -
    -     ./configure --prefix=/boot/common
    -
    -Specifying the System Type
    -==========================
    -
    -   There may be some features 'configure' cannot figure out
    -automatically, but needs to determine by the type of machine the package
    -will run on.  Usually, assuming the package is built to be run on the
    -_same_ architectures, 'configure' can figure that out, but if it prints
    -a message saying it cannot guess the machine type, give it the
    -'--build=TYPE' option.  TYPE can either be a short name for the system
    -type, such as 'sun4', or a canonical name which has the form:
    -
    -     CPU-COMPANY-SYSTEM
    -
    -where SYSTEM can have one of these forms:
    -
    -     OS
    -     KERNEL-OS
    -
    -   See the file 'config.sub' for the possible values of each field.  If
    -'config.sub' isn't included in this package, then this package doesn't
    -need to know the machine type.
    -
    -   If you are _building_ compiler tools for cross-compiling, you should
    -use the option '--target=TYPE' to select the type of system they will
    -produce code for.
    -
    -   If you want to _use_ a cross compiler, that generates code for a
    -platform different from the build platform, you should specify the
    -"host" platform (i.e., that on which the generated programs will
    -eventually be run) with '--host=TYPE'.
    -
    -Sharing Defaults
    -================
    -
    -   If you want to set default values for 'configure' scripts to share,
    -you can create a site shell script called 'config.site' that gives
    -default values for variables like 'CC', 'cache_file', and 'prefix'.
    -'configure' looks for 'PREFIX/share/config.site' if it exists, then
    -'PREFIX/etc/config.site' if it exists.  Or, you can set the
    -'CONFIG_SITE' environment variable to the location of the site script.
    -A warning: not all 'configure' scripts look for a site script.
    -
    -Defining Variables
    -==================
    -
    -   Variables not defined in a site shell script can be set in the
    -environment passed to 'configure'.  However, some packages may run
    -configure again during the build, and the customized values of these
    -variables may be lost.  In order to avoid this problem, you should set
    -them in the 'configure' command line, using 'VAR=value'.  For example:
    -
    -     ./configure CC=/usr/local2/bin/gcc
    -
    -causes the specified 'gcc' to be used as the C compiler (unless it is
    -overridden in the site shell script).
    -
    -Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
    -Autoconf limitation.  Until the limitation is lifted, you can use this
    -workaround:
    -
    -     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
    -
    -'configure' Invocation
    -======================
    -
    -   'configure' recognizes the following options to control how it
    -operates.
    -
    -'--help'
    -'-h'
    -     Print a summary of all of the options to 'configure', and exit.
    -
    -'--help=short'
    -'--help=recursive'
    -     Print a summary of the options unique to this package's
    -     'configure', and exit.  The 'short' variant lists options used only
    -     in the top level, while the 'recursive' variant lists options also
    -     present in any nested packages.
    -
    -'--version'
    -'-V'
    -     Print the version of Autoconf used to generate the 'configure'
    -     script, and exit.
    -
    -'--cache-file=FILE'
    -     Enable the cache: use and save the results of the tests in FILE,
    -     traditionally 'config.cache'.  FILE defaults to '/dev/null' to
    -     disable caching.
    -
    -'--config-cache'
    -'-C'
    -     Alias for '--cache-file=config.cache'.
    -
    -'--quiet'
    -'--silent'
    -'-q'
    -     Do not print messages saying which checks are being made.  To
    -     suppress all normal output, redirect it to '/dev/null' (any error
    -     messages will still be shown).
    -
    -'--srcdir=DIR'
    -     Look for the package's source code in directory DIR.  Usually
    -     'configure' can determine that directory automatically.
    -
    -'--prefix=DIR'
    -     Use DIR as the installation prefix.  *note Installation Names:: for
    -     more details, including other options available for fine-tuning the
    -     installation locations.
    -
    -'--no-create'
    -'-n'
    -     Run the configure checks, but stop before creating any output
    -     files.
    -
    -'configure' also accepts some other, not widely useful, options.  Run
    -'configure --help' for more details.
    diff --git a/bash/templates/Makefile b/bash/templates/Makefile
    deleted file mode 100644
    index 11233df..0000000
    --- a/bash/templates/Makefile
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -.PHONY: check
    -check:
    -	sh build-aux/assert-shellcheck.sh
    -	sh build-aux/assert-todos.sh
    -
    -.PHONY: clean
    -clean:
    -	rm -rf public/
    -
    -.PHONY: public
    -public:
    -	sh build-aux/generate-tasks-and-bugs.sh
    -	pandoc -s --metadata title='$PROJECT_UC - EuAndreh' -c styles.css -o public/index.html README.md
    diff --git a/bash/templates/Makefile.am b/bash/templates/Makefile.am
    deleted file mode 100644
    index 2bd5d8c..0000000
    --- a/bash/templates/Makefile.am
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -include $(srcdir)/build-aux/git-notes-release.am
    -include $(srcdir)/build-aux/dev-checks.am
    -include $(srcdir)/build-aux/html-files-from-sources.am
    -
    -EXTRA_DIST =                                       \
    -  guix/manifest.scm                                \
    -  guix/pinned-channels.scm                         \
    -  build-aux/with-container.sh                      \
    -  build-aux/dev-checks.am                          \
    -  build-aux/html-files-from-sources.am             \
    -  guix/channel/xyz/euandreh/__PROJECT__/channel.scm \
    -  description                                      \
    -  $(TESTS)
    -
    -check-local: check-local-dev-checks
    -clean-local: clean-local-html-files-from-sources
    diff --git a/bash/templates/NEWS b/bash/templates/NEWS
    deleted file mode 100644
    index 76f6a7f..0000000
    --- a/bash/templates/NEWS
    +++ /dev/null
    @@ -1,7 +0,0 @@
    -* Unreleased
    -** Added
    -** Changed
    -** Deprecated
    -** Removed
    -** Fixed
    -** Security
    diff --git a/bash/templates/README b/bash/templates/README
    deleted file mode 100644
    index f39ca70..0000000
    --- a/bash/templates/README
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -$PROJECT_UC
    -
    -FIXME
    -
    -Online documentation available at:
    -https://$PROJECT.euandreh.xyz
    \ No newline at end of file
    diff --git a/bash/templates/README.in b/bash/templates/README.in
    deleted file mode 100644
    index cfb24bc..0000000
    --- a/bash/templates/README.in
    +++ /dev/null
    @@ -1,40 +0,0 @@
    -# @PACKAGE_NAME@
    -
    -@PACKAGE_DESCRIPTION@
    -
    -## Installation
    -
    -### Requirements
    -
    -pkg-config
    -AC_CHECK_PROG and AM_MISSING in configure.ac
    -
    -### Guix channel
    -
    -@PACKAGE_NAME@ is also available through a Guix channel.
    -
    -To add this channel to your `~/.config/guix/channels.scm`:
    -
    -```scheme
    -(append
    - (list
    -  (channel ...)
    -  (channel
    -   (name '@PACKAGE@)
    -   (url "@PACKAGE_CHANNEL_URL@")
    -   (branch "master")
    -   (introduction
    -    (make-channel-introduction
    -     "26b772cdb5074e93d3112c807ffd4c76f16f039c"
    -     (openpgp-fingerprint
    -      "5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060")))))
    - %default-channels)
    -```
    -
    -## Hacking
    -
    -See the manual for useful hacking information, either by running
    -
    -  info -f doc/@PACKAGE@.info "Contributing"
    -
    -or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html
    \ No newline at end of file
    diff --git a/bash/templates/TODOs.md b/bash/templates/TODOs.md
    deleted file mode 100644
    index 017c0a1..0000000
    --- a/bash/templates/TODOs.md
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -# Tasks
    -
    -# Bugs
    -
    -# Improvements
    -
    -# Questions
    -
    -# Resources
    -
    -# Scratch
    diff --git a/bash/templates/_plugins/linter.rb b/bash/templates/_plugins/linter.rb
    deleted file mode 100644
    index d5cca56..0000000
    --- a/bash/templates/_plugins/linter.rb
    +++ /dev/null
    @@ -1,55 +0,0 @@
    -require 'i18n'
    -
    -module Jekyll
    -  class Linter < Generator
    -    safe true
    -
    -    def slugify(s)
    -      I18n.available_locales = [:pt_BR]
    -      I18n.locale = :pt_BR
    -      I18n.transliterate(s)
    -        .gsub(/[\W]+/, ' ')
    -        .strip
    -        .gsub(/\s\s+/, '-')
    -        .downcase
    -        .gsub(' ', '-')
    -        .gsub('_', '-')
    -    end
    -
    -    def assert_field(document, field)
    -      f = document.data[field]
    -      raise "Undefined '#{field}' for #{document.path}" unless f
    -      f
    -    end
    -
    -    def assert_frontmatter_fields(document)
    -      title = assert_field document, 'title'
    -      layout = assert_field document, 'layout'
    -      date = document.date.strftime('%Y-%m-%d') unless layout == 'page'
    -      slug = assert_field document, 'slug'
    -
    -      if 'post' != layout
    -        raise "Layout mismatch: expected 'post', got '#{layout}' for #{document.path}"
    -      end
    -
    -      unless layout == 'page' then
    -        path = "_posts/#{date}-#{slug}.md"
    -        unless path == document.relative_path then
    -          raise "date/filename mismatch:\ndate+slug: #{path}\nfilename:  #{document.relative_path}"
    -        end
    -      end
    -
    -      if slugify(title) != slug then
    -        puts 'WARNING!'
    -        puts "Filename isn't a slug of the title for '#{document.path}':\nslug:  '#{slug}'\ntitle: '#{slugify(title)}'"
    -        puts "Fix with:\n  mv _posts/#{date}-#{slug}.md _posts/#{date}-#{slugify(title)}.md"
    -      end
    -    end
    -
    -    def generate(site)
    -      site.collections['posts'].docs.each do |document|
    -        assert_frontmatter_fields(document)
    -      end
    -    end
    -  end
    -end
    diff --git a/bash/templates/bootstrap b/bash/templates/bootstrap
    deleted file mode 100755
    index a8fd885..0000000
    --- a/bash/templates/bootstrap
    +++ /dev/null
    @@ -1,3 +0,0 @@
    -#!/bin/sh
    -
    -autoreconf --verbose --install --force
    diff --git a/bash/templates/build-aux/assert-docs-spelling.sh b/bash/templates/build-aux/assert-docs-spelling.sh
    deleted file mode 100755
    index 6720bc5..0000000
    --- a/bash/templates/build-aux/assert-docs-spelling.sh
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../doc/
    -
    -export LANG=C.UTF-8
    -
    -for DICT in dictionaries/*.txt; do
    -  diff <(sort "$DICT") "$DICT" || {
    -    echo "The $DICT dictionary is unsorted. To fix it, run:" >&2
    -    echo "  LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2
    -    exit 1
    -  }
    -done
    -
    -OUT="$(mktemp)"
    -LANGS="$(jq -r .langs[] < ../metadata.json)"
    -
    -for l in ${LANGS}; do
    -  make SPHINXOPTS="-D language=$l" html
    -  hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT"
    -done
    -
    -if [[ -s "$OUT" ]]; then
    -  printf "\nvvv Mispelled words detected by hunspell.\n\n"
    -  sort < "$OUT" | uniq
    -  printf "\n^^^\n" >&2
    -  exit 1
    -else
    -  echo "No spelling errors detected"
    -  exit 0
    -fi
    diff --git a/bash/templates/build-aux/assert-shellcheck.sh b/bash/templates/build-aux/assert-shellcheck.sh
    deleted file mode 100755
    index 334a875..0000000
    --- a/bash/templates/build-aux/assert-shellcheck.sh
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -git ls-files -z | \
    -  xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \
    -  xargs shellcheck
    diff --git a/bash/templates/build-aux/assert-todos.sh b/bash/templates/build-aux/assert-todos.sh
    deleted file mode 100755
    index 0b0a8d6..0000000
    --- a/bash/templates/build-aux/assert-todos.sh
    +++ /dev/null
    @@ -1,34 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then
    -  echo "Found dangling FIXME markers on the project."
    -  echo "You should write them down properly on TODOs.md."
    -  exit 1
    -fi
    -
    -awk -F'{#' '
    -BEGIN {
    -  status=0
    -  idx=0
    -  delete ids[0]
    -}
    -/^## / {
    -  if (match($0, / \{#.*?\}$/) == 0) {
    -    print "Missing ID for line " NR ":\n" $0
    -    status=1
    -  }
    -  id_with_prefix = substr($2, 0, length($2) - 1)
    -  match(id_with_prefix, /^\w+-/)
    -  id = substr(id_with_prefix, RLENGTH + 1)
    -  if (id in arr) {
    -    print "Duplicate ID: " id
    -    status=1
    -  } else {
    -    arr[id] = 1
    -  }
    -}
    -/^# Improvements$/ {
    -  exit status
    -}
    -' TODOs.md
    diff --git a/bash/templates/build-aux/ci/ci-build.sh b/bash/templates/build-aux/ci/ci-build.sh
    deleted file mode 100755
    index b7a4c38..0000000
    --- a/bash/templates/build-aux/ci/ci-build.sh
    +++ /dev/null
    @@ -1,53 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -PACKAGE="$1"
    -LOGS_DIR="$2"
    -read -r _ SHA _ # oldrev newrev refname
    -FILENAME="$(date -Is)-$SHA.log"
    -LOGFILE="$LOGS_DIR/$FILENAME"
    -
    -{
    -  echo "Starting CI job at: $(date -Is)"
    -
    -  finish() {
    -    STATUS="$?"
    -    printf "\n\n>>> exit status was %s\n" "$STATUS"
    -    echo "Finishing CI job at: $(date -Is)"
    -    cd -
    -    NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS"
    -  }
    -  trap finish EXIT
    -
    -  unset GIT_DIR
    -  CLONE="$(mktemp -d)"
    -  git clone . "$CLONE"
    -  cd "$CLONE"
    -  git config --global user.email git@euandre.org
    -  git config --global user.name 'EuAndreh CI'
    -
    -  if [ -f build-aux/with-container.sh ]; then
    -    RUNNER='./build-aux/with-container.sh'
    -  else
    -    RUNNER='sh -c'
    -  fi
    -
    -  if [ -f ./bootstrap ]; then
    -    COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public'
    -  else
    -    COMMAND='make clean check public'
    -  fi
    -
    -  $RUNNER "$COMMAND"
    -
    -  rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete
    -} | tee "$LOGFILE" 2>&1
    diff --git a/bash/templates/build-aux/ci/git-post-receive.sh b/bash/templates/build-aux/ci/git-post-receive.sh
    deleted file mode 100755
    index 2f6e3c0..0000000
    --- a/bash/templates/build-aux/ci/git-post-receive.sh
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do
    -  opt="$(eval "echo \$GIT_PUSH_OPTION_$n")"
    -  if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then
    -    printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt"
    -    exit 0
    -  fi
    -done
    -
    -PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix
    -LOGS_DIR="/data/ci/$PACKAGE/logs"
    -"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR"
    diff --git a/bash/templates/build-aux/ci/git-pre-push.sh b/bash/templates/build-aux/ci/git-pre-push.sh
    deleted file mode 100644
    index 23839de..0000000
    --- a/bash/templates/build-aux/ci/git-pre-push.sh
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -PACKAGE="$(basename "$PWD")"
    -__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs"
    -REMOTE_GIT_DIR="/data/git/$PACKAGE.git"
    -
    -DESCRIPTION="$(mktemp)"
    -if [ -f description ]
    -then
    -  cp description "$DESCRIPTION"
    -else
    -  git config euandreh.description > "$DESCRIPTION"
    -fi
    -
    -scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description"
    -__ENABLE_CI__ ssh git.euandreh.xyz mkdir -p "$LOGS_DIR"
    -__ENABLE_CI__ scp build-aux/ci/ci-build.sh         "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh"
    -__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive"
    diff --git a/bash/templates/build-aux/ci/git-pre-push.sh.in b/bash/templates/build-aux/ci/git-pre-push.sh.in
    deleted file mode 100755
    index dbadd1c..0000000
    --- a/bash/templates/build-aux/ci/git-pre-push.sh.in
    +++ /dev/null
    @@ -1,19 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -PACKAGE="$(basename "$PWD")"
    -__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs"
    -REMOTE_GIT_DIR="/data/git/$PACKAGE.git"
    -
    -DESCRIPTION="$(mktemp)"
    -if [ -f description ]
    -then
    -  cp description "$DESCRIPTION"
    -else
    -  git config euandreh.description > "$DESCRIPTION"
    -fi
    -
    -scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description"
    -__ENABLE_CI__ ssh git.@TLD@ mkdir -p "$LOGS_DIR"
    -__ENABLE_CI__ scp build-aux/ci/ci-build.sh         "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh"
    -__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive"
    diff --git a/bash/templates/build-aux/compile-readme.sh b/bash/templates/build-aux/compile-readme.sh
    deleted file mode 100755
    index 91f6065..0000000
    --- a/bash/templates/build-aux/compile-readme.sh
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -pandoc -s                               \
    -       --metadata title="$1 - EuAndreh" \
    -       -c styles.css                    \
    -       -o public/index.html             \
    -       -r markdown                      \
    -       README
    diff --git a/bash/templates/build-aux/default-extra-dist.am b/bash/templates/build-aux/default-extra-dist.am
    deleted file mode 100644
    index 6be406a..0000000
    --- a/bash/templates/build-aux/default-extra-dist.am
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -EXTRA_DIST =                  \
    -  guix/manifest.scm           \
    -  guix/pinned-channels.scm    \
    -  build-aux/with-container.sh \
    -  description                 \
    -  $(TESTS)
    diff --git a/bash/templates/build-aux/dev-checks.am b/bash/templates/build-aux/dev-checks.am
    deleted file mode 100644
    index ca1b9d8..0000000
    --- a/bash/templates/build-aux/dev-checks.am
    +++ /dev/null
    @@ -1,17 +0,0 @@
    -.PHONY: check-local-dev-checks
    -check-local-dev-checks:
    -	if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then                                      \
    -    echo 'Running PROGRAMMER_MODE checks.';                                        \
    -    $(srcdir)/build-aux/assert-shellcheck.sh                            || exit 1; \
    -    $(srcdir)/build-aux/assert-todos.sh                                 || exit 1; \
    -    if [ "x$(CI_MODE)" = 'xno' ]; then                                             \
    -      echo 'Running CI_MODE checks.';                                              \
    -		  $(GUIX) build -f guix/channel/xyz/euandreh/$(PACKAGE)/channel.scm || exit 1; \
    -    else                                                                           \
    -      echo 'Skipping CI_MODE checks.';                                             \
    -    fi                                                                             \
    -  else                                                                             \
    -    echo 'Skipping PROGRAMMER_MODE checks.';                                       \
    -  fi
    -
    -check-local: check-local-dev-checks
    diff --git a/bash/templates/build-aux/docbook-xsl.tar.gz b/bash/templates/build-aux/docbook-xsl.tar.gz
    deleted file mode 100644
    index a7a4ce6..0000000
    Binary files a/bash/templates/build-aux/docbook-xsl.tar.gz and /dev/null differ
    diff --git a/bash/templates/build-aux/git-notes-release.am b/bash/templates/build-aux/git-notes-release.am
    deleted file mode 100644
    index 0d91e88..0000000
    --- a/bash/templates/build-aux/git-notes-release.am
    +++ /dev/null
    @@ -1,7 +0,0 @@
    -.PHONY: release
    -release: check distcheck dist
    -	$(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE)
    -
    -.PHONY: release-with-binaries
    -release-with-binaries:
    -	$(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) --bin
    diff --git a/bash/templates/build-aux/git-notes-release.sh b/bash/templates/build-aux/git-notes-release.sh
    deleted file mode 100644
    index 4d55645..0000000
    --- a/bash/templates/build-aux/git-notes-release.sh
    +++ /dev/null
    @@ -1,77 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -DIST_ARCHIVES="$1"
    -VERSION="$2"
    -PACKAGE="$3"
    -BIN="${4:-}"
    -
    -if [ "$BIN" != --bin ]; then
    -  # Assert version
    -  if git rev-parse "$VERSION" > /dev/null; then
    -    echo "Tar $VERSION already exists, exitting."
    -    exit 2
    -  fi
    -
    -  # Update NEWS
    -  sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS
    -  cat < $DIST_ARCHIVES
    -  git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc
    -EOF
    -)
    -  git notes append -m "$NOTE"
    -  sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    -  sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/"    "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    -  ./configure --enable-programmer-mode
    -  git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    -  git commit -m "Update released version $VERSION in channel.scm.in file."
    -
    -  # Publish release artifacts
    -  git push --tags
    -  git push origin refs/notes/tarballs
    -  git push origin refs/notes/signatures
    -  git push origin refs/notes/commits
    -  git push
    -else
    -  guix pull
    -  BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")"
    -  SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")"
    -  git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION"
    -  NOTE=$(cat < $PACKAGE-bin.tar.gz
    -  tar xf $PACKAGE-bin.tar.gz
    -  bin/$PACKAGE
    -EOF
    -)
    -  git notes append -m "$NOTE"
    -  git push origin refs/notes/binaries
    -  git push origin refs/notes/commits
    -fi
    diff --git a/bash/templates/build-aux/guile.am b/bash/templates/build-aux/guile.am
    deleted file mode 100644
    index e56b31f..0000000
    --- a/bash/templates/build-aux/guile.am
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -guilescmdir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)/xyz/euandreh
    -guilegodir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache/xyz/euandreh
    -
    -GUILE_OBJECTS = $(SOURCES:.scm=.go)
    -
    -dist_guilescm_DATA = $(SOURCES)
    -guilego_DATA = $(GUILE_OBJECTS)
    -
    -CLEANFILES = $(GUILE_OBJECTS)
    -
    -SUFFIXES = .scm .go
    -.scm.go:
    -	$(GUILD) compile -o "$@" "$<"
    -
    -TEST_EXTENSIONS = .scm
    -SCM_LOG_COMPILER = $(GUILE) -L $(top_srcdir)/src
    diff --git a/bash/templates/build-aux/html-files-from-sources.am b/bash/templates/build-aux/html-files-from-sources.am
    deleted file mode 100644
    index db073f3..0000000
    --- a/bash/templates/build-aux/html-files-from-sources.am
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -.PHONY: clean-local-html-files-from-sources
    -clean-local-html-files-from-sources:
    -	rm -rf public/ OEBPS META-INF/ doc/$(PACKAGE).xml mimetype
    -
    -clean-local: clean-local-html-files-from-sources
    -
    -LANGS = en
    -DICTIONARIES = doc/dictionaries/en.txt doc/dictionaries/international.txt
    -doc/dictionaries/all.txt: $(DICTIONARIES)
    -	cat $(DICTIONARIES) | sort > $@
    -
    -	cat $(DICTIONARIES) | diff - $@ || {                                        \
    -    echo 'Dictionary files are not sorted. To fix it, run:';                  \
    -    echo '  for f in $(DICTIONARIES); do LANG=C.UTF-8 sort -o $$f $$f; done'; \
    -    touch $(DICTIONARIES);                                                    \
    -    exit 1;                                                                   \
    -  }
    -
    -public: README TODOs.md $(DOC_SRCS) doc/dictionaries/all.txt
    -	$(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS)
    -
    -	$(srcdir)/build-aux/generate-tasks-and-bugs.sh
    -	$(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)'
    diff --git a/bash/templates/build-aux/rust.am b/bash/templates/build-aux/rust.am
    deleted file mode 100644
    index f8f9b0f..0000000
    --- a/bash/templates/build-aux/rust.am
    +++ /dev/null
    @@ -1,9 +0,0 @@
    -rustfmt: $(RUST_SRC)
    -	if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then                                \
    -    for f in $(RUST_SRC); do                                                 \
    -			$(RUSTFMT) --check $$f || {                                            \
    -				printf "Unformatted Rust code. To fix it, run:\n  rustfmt %s\n" $$f; \
    -				exit 1;                                                              \
    -			};                                                                     \
    -    done;                                                                    \
    -  fi
    diff --git a/bash/templates/build-aux/sphinx-build-web-assets.sh b/bash/templates/build-aux/sphinx-build-web-assets.sh
    deleted file mode 100755
    index 0bf494f..0000000
    --- a/bash/templates/build-aux/sphinx-build-web-assets.sh
    +++ /dev/null
    @@ -1,64 +0,0 @@
    -#!/usr/bin/env bash
    -set -Eeuo pipefail
    -cd "$(dirname "${BASH_SOURCE[0]}")"
    -cd ../
    -
    -OUT='public'
    -PROJECT_UC="__PROJECT_UC__"
    -
    -pushd doc
    -make html
    -popd
    -
    -cp doc/favicon.ico "$OUT"
    -mv doc/_build/html/_static/ "$OUT/_static/"
    -
    -CURRENT_LANG="$(jq -r .current_lang < metadata.json)"
    -LANGS="$(jq -r .langs[] < metadata.json)"
    -TAGS="$(git tag | cat - <(echo master))"
    -
    -for lang in ${LANGS}; do
    -  for tag in ${TAGS}; do
    -    mkdir -p "tmp/$lang/$tag/"
    -    git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- .
    -    git reset .
    -    git checkout .
    -
    -    pushd "tmp/$lang/$tag/doc/"
    -    jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json
    -
    -    RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json      | \
    -                 jq -r 'to_entries[] | [.key, .value] | @csv' | \
    -                 tr -d '\"')"
    -
    -    if [[ "$lang" != "$CURRENT_LANG" ]]; then
    -      for rename in $RENAMES; do
    -        from="$(echo "$rename" | cut -d, -f1)"
    -        to="$(echo "$rename"   | cut -d, -f2)"
    -        mv "${from}.rst" "${to}.rst"
    -        sed -i "s/^   $from$/   $to/" index.rst
    -      done
    -    fi
    -
    -    make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html
    -    popd
    -
    -    mkdir "$OUT/$lang/"
    -
    -    mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/"
    -    pushd "$OUT/$lang/$tag/"
    -    rm -rf _static/
    -    ln -s ../../_static .
    -    popd
    -
    -    mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/"
    -    pushd "$OUT/$lang/$tag/single/"
    -    rm -rf _static/
    -    ln -s ../../../_static .
    -    rm -rf _images/
    -    ln -s ../_images .
    -    popd
    -
    -    mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf"
    -  done
    -done
    diff --git a/bash/templates/build-aux/texinfo-build-web-assets.sh b/bash/templates/build-aux/texinfo-build-web-assets.sh
    deleted file mode 100755
    index 241ebb8..0000000
    --- a/bash/templates/build-aux/texinfo-build-web-assets.sh
    +++ /dev/null
    @@ -1,55 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -PACKAGE="$1"
    -shift
    -
    -dictname() {
    -  case "$1" in
    -    en)
    -      echo en_US-large
    -      ;;
    -    *)
    -      echo "Unsupported dictionary type $1"
    -      exit 1
    -      ;;
    -  esac
    -}
    -
    -OUT="$(mktemp)"
    -CLONE="$(mktemp -d)"
    -rsync -a . "$CLONE"
    -cd "$CLONE"
    -
    -for tag in master $(git tag); do
    -  git checkout "$tag"
    -  for lang in "$@"; do
    -    mkdir -p "public/$lang/$tag/"
    -
    -    make html
    -    mv "doc/$PACKAGE.html/" "public/$lang/$tag/doc/"
    -
    -    make MAKEINFOFLAGS=--no-split html ps dvi pdf
    -    mv -t "public/$lang/$tag/" "doc/$PACKAGE.dvi" "doc/$PACKAGE.ps" "doc/$PACKAGE.pdf" "doc/$PACKAGE.html"
    -
    -    makeinfo --docbook "doc/$PACKAGE.texi" -o "$PACKAGE.docbook"
    -    xsltproc build-aux/docbook-xsl/epub/docbook.xsl "$PACKAGE.docbook"
    -    echo "application/epub+zip" > mimetype
    -    zip -0Xq "$PACKAGE.epub" mimetype
    -    zip -Xr9D "$PACKAGE.epub" META-INF OEBPS
    -    mv "$PACKAGE.epub" "public/$lang/$tag/"
    -
    -    cat doc/dictionaries/international.txt "doc/dictionaries/$lang.txt" > doc/dictionaries/curr.txt
    -    hunspell -u -H -d "$(dictname "$lang")" -p doc/dictionaries/curr.txt "public/$lang/$tag/$PACKAGE.html" | tee -a "$OUT"
    -  done
    -done
    -
    -cd -
    -rm -rf public/
    -mv "$CLONE/public/" public/
    -
    -if [ -s "$OUT" ]; then
    -  echo "Misspelled words detected:"
    -  cat "$OUT"
    -  exit 1
    -fi
    diff --git a/bash/templates/build-aux/with-container.sh b/bash/templates/build-aux/with-container.sh
    deleted file mode 100755
    index 5544d8e..0000000
    --- a/bash/templates/build-aux/with-container.sh
    +++ /dev/null
    @@ -1,4 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@"
    diff --git a/bash/templates/build-aux/workflow/README.sh b/bash/templates/build-aux/workflow/README.sh
    deleted file mode 100755
    index 1aa2593..0000000
    --- a/bash/templates/build-aux/workflow/README.sh
    +++ /dev/null
    @@ -1,29 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -mkdir -p public
    -
    -PROJECT_UC="$1"
    -PROJECT="$2"
    -
    -RELEASES_LIST="$(mktemp)"
    -for version in $(git tag); do
    -  echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST"
    -done
    -
    -RELEASES="$(mktemp)"
    -if [ -s "$RELEASES_LIST" ]; then
    -  printf '# Releases\n\n' >> "$RELEASES"
    -  cat "$RELEASES_LIST" >> "$RELEASES"
    -fi
    -
    -cat README.md "$RELEASES" | \
    -  pandoc --toc                                  \
    -         --highlight-style pygments             \
    -         --toc-depth=2                          \
    -         -s                                     \
    -         --metadata title="$PROJECT_UC - TODOs" \
    -         --metadata lang=en                     \
    -         -r markdown                            \
    -         -w html                                \
    -         > public/index.html
    diff --git a/bash/templates/build-aux/workflow/TODOs.sh b/bash/templates/build-aux/workflow/TODOs.sh
    deleted file mode 100755
    index 3f9fa4b..0000000
    --- a/bash/templates/build-aux/workflow/TODOs.sh
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -mkdir -p public
    -
    -export PROJECT_UC="$1"
    -export PROJECT="$2"
    -export MAILING_LIST="$3"
    -
    -REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/'
    -
    -envsubst < build-aux/workflow/preamble.md                      | \
    -  printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \
    -  pandoc --toc                                  \
    -         --highlight-style pygments             \
    -         --toc-depth=2                          \
    -         -s                                     \
    -         --metadata title="$PROJECT_UC - TODOs" \
    -         --metadata lang=en                     \
    -         -r markdown                            \
    -         -w html                                \
    -         -H build-aux/workflow/style.css        \
    -         > public/TODOs.html
    diff --git a/bash/templates/build-aux/workflow/preamble.md b/bash/templates/build-aux/workflow/preamble.md
    deleted file mode 100644
    index c6ae56e..0000000
    --- a/bash/templates/build-aux/workflow/preamble.md
    +++ /dev/null
    @@ -1,16 +0,0 @@
    -# About
    -
    -TODOs for $PROJECT_UC.
    -
    -See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/).
    -
    -Register a new one at
    -[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E)
    -and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D).
    -
    -*Você também pode escrever em português*.
    -
    -*Vous pouvez aussi écrire en français*.
    -
    -*Vi povas ankaŭ skribi esperante*.
    -
    diff --git a/bash/templates/build-aux/workflow/style.css b/bash/templates/build-aux/workflow/style.css
    deleted file mode 100644
    index ac0144c..0000000
    --- a/bash/templates/build-aux/workflow/style.css
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -
    diff --git a/bash/templates/configure.ac b/bash/templates/configure.ac
    deleted file mode 100644
    index 79079ec..0000000
    --- a/bash/templates/configure.ac
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -AC_PREREQ([2.69])
    -AC_INIT([__PROJECT__],
    -  [v0.0.0],
    -  [~euandreh/__MAILING_LIST__@lists.sr.ht],
    -  [__PROJECT__],
    -  [https://__PROJECT__.euandreh.xyz])
    -AC_CONFIG_SRCDIR([FIXME])
    -AC_CONFIG_AUX_DIR([build-aux])
    -AC_CONFIG_MACRO_DIR([m4])
    -AM_INIT_AUTOMAKE([-Wall -Werror parallel-tests subdir-objects])
    -
    -EU_PROGRAMMER_MODE
    -AM_MISSING_PROG([GUIX], [guix])
    -
    -TLD="euandreh.xyz"
    -EU_LINKS
    -
    -AC_CONFIG_FILES([Makefile
    -                 README
    -                 guix/channel/xyz/euandreh/__PROJECT__/channel.scm
    -                 build-aux/workflow/preamble.org])
    -
    -AC_CONFIG_FILES([build-aux/ci/git-pre-push.sh], [chmod +x build-aux/ci/git-pre-push.sh])
    -
    -AC_OUTPUT
    diff --git a/bash/templates/cronjob-with-email.sh b/bash/templates/cronjob-with-email.sh
    deleted file mode 100644
    index b486ce5..0000000
    --- a/bash/templates/cronjob-with-email.sh
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -#!/bin/sh
    -set -eux
    -LOG_FILE="$(mktemp)"
    -{
    -  finish() {
    -    status=$?
    -    if [ $status = 0 ]; then
    -      STATUS="✅ SUCCESS (status $status)"
    -    else
    -      STATUS="❌ FAILURE (status $status)"
    -    fi
    -
    -    echo "Registering status locally..."
    -    set -x
    -    printf '%s __JOB__\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log"
    -
    -    echo "Sending report email..."
    -
    -    SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh"
    -    gpg -easr eu@euandre.org < "$LOG_FILE" | \
    -      mail eu@euandre.org           \
    -          -s "$SUBJECT"            \
    -          -a 'From:eu@euandre.org' \
    -          --content-type 'text/plain; charset=utf-8'
    -    echo 'Mail sent!'
    -  }
    -  trap finish EXIT
    -
    -  echo "Starting: $(date -Is)"
    -  ~/dev/libre/dotfiles/cron/__JOB__.sh
    -  echo "Finishing: $(date -Is)"
    -} | tee "$LOG_FILE" 2>&1
    diff --git a/bash/templates/default.nix b/bash/templates/default.nix
    deleted file mode 100644
    index adbefea..0000000
    --- a/bash/templates/default.nix
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -let
    -  niv-sources = import ./nix/sources.nix;
    -  pkgs = import niv-sources.nixpkgs { overlays = [ ]; };
    -  src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.;
    -  utils-i18n = pkgs.callPackage ./nix/utils-i18n.nix { };
    -
    -  projectBuildInputs = with pkgs;
    -    [ ] ++ pkgs.callPackage ./nix/base-packages.nix { inherit utils-i18n; };
    -
    -  preTestPhaseSetup = "";
    -  utils = import ./nix/utils.nix {
    -    inherit pkgs src projectBuildInputs preTestPhaseSetup;
    -  };
    -in { inherit (utils) test site shell publishScript remotePublishScript; }
    diff --git a/bash/templates/description b/bash/templates/description
    deleted file mode 100644
    index 4c28ea5..0000000
    --- a/bash/templates/description
    +++ /dev/null
    @@ -1 +0,0 @@
    -FIXME
    \ No newline at end of file
    diff --git a/bash/templates/doc/Makefile b/bash/templates/doc/Makefile
    deleted file mode 100644
    index d4bb2cb..0000000
    --- a/bash/templates/doc/Makefile
    +++ /dev/null
    @@ -1,20 +0,0 @@
    -# Minimal makefile for Sphinx documentation
    -#
    -
    -# You can set these variables from the command line, and also
    -# from the environment for the first two.
    -SPHINXOPTS    ?=
    -SPHINXBUILD   ?= sphinx-build
    -SOURCEDIR     = .
    -BUILDDIR      = _build
    -
    -# Put it first so that "make" without argument is like "make help".
    -help:
    -	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
    -
    -.PHONY: help Makefile
    -
    -# Catch-all target: route all unknown targets to Sphinx using the new
    -# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
    -%: Makefile
    -	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
    diff --git a/bash/templates/doc/_templates/footer.html b/bash/templates/doc/_templates/footer.html
    deleted file mode 100644
    index a710a48..0000000
    --- a/bash/templates/doc/_templates/footer.html
    +++ /dev/null
    @@ -1,7 +0,0 @@
    -{%- extends "!footer.html" %}
    -
    -{% block extrafooter %}
    -  
    -{% endblock %}
    diff --git a/bash/templates/doc/_templates/layout.html b/bash/templates/doc/_templates/layout.html
    deleted file mode 100644
    index 3182c8c..0000000
    --- a/bash/templates/doc/_templates/layout.html
    +++ /dev/null
    @@ -1,59 +0,0 @@
    -{%- extends "!layout.html" %}
    -
    -{#
    -Taken from:
    -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html
    -#}
    -
    -{% block footer %}
    -  
    - - {{project}} - {{version}} | {{ current_lang }} - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -
    Downloads
    -
    - - PDF - -
    -
    - - EPUB - -
    -
    -
    -
    -{% endblock %} diff --git a/bash/templates/doc/conf.py.in b/bash/templates/doc/conf.py.in deleted file mode 100644 index 8727603..0000000 --- a/bash/templates/doc/conf.py.in +++ /dev/null @@ -1,56 +0,0 @@ -import json -with open("../metadata.json", "r") as f: - metadata = json.loads(f.read()) - -import subprocess -all_versions = ["master"] + ( - subprocess - .check_output(["git", "tag"]) - .decode("ascii") - .strip() - .split() -) - -project = metadata["project_name"] -author = metadata["authors"][0] -version = metadata["version"] -release = version -epub_copyright = "CC BY-SA 4.0" -nitpicky = True - -extensions = [ - "sphinx.ext.extlinks", - "sphinx.ext.graphviz", - "sphinx.ext.todo", -] - -graphviz_output_format = "svg" - -todo_include_todos = True - -templates_path = ["_templates"] -html_theme = "sphinx_rtd_theme" -html_theme_options = { - "style_external_links": True -} - -html_show_sphinx = False -html_show_copyright = False - -extlinks = { - "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), - "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), -} - -with open("i18n-pagenames.json", "r") as f: - i18n_pagenames = json.loads(f.read()) - -html_context = { - "all_versions": all_versions, - "langs": metadata["langs"], - "current_lang": metadata["current_lang"], - "source_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs/", - "i18n_pagenames": i18n_pagenames -} - -gettext_compact = False diff --git a/bash/templates/doc/dictionaries/en.txt b/bash/templates/doc/dictionaries/en.txt deleted file mode 100644 index e69de29..0000000 diff --git a/bash/templates/doc/dictionaries/international.txt b/bash/templates/doc/dictionaries/international.txt deleted file mode 100644 index e69de29..0000000 diff --git a/bash/templates/doc/favicon.ico b/bash/templates/doc/favicon.ico deleted file mode 100644 index 8ebd54f..0000000 Binary files a/bash/templates/doc/favicon.ico and /dev/null differ diff --git a/bash/templates/doc/i18n-pagenames.json b/bash/templates/doc/i18n-pagenames.json deleted file mode 100644 index 6b674df..0000000 --- a/bash/templates/doc/i18n-pagenames.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "en": {} -} diff --git a/bash/templates/doc/index.rst b/bash/templates/doc/index.rst deleted file mode 100644 index 78baef3..0000000 --- a/bash/templates/doc/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -$PROJECT_UC -======== - -FIXME: description - -Useful links: -~~~~~~~~~~~~~ - -- `documentation`_ (`single page documentation`_) -- `mailing list`_ -- `source code`_ -- `tasks and bugs`_ -- `build logs`_ - -See also: - -- `repository statistics`_ - -.. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ -.. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ -.. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST -.. _`source code`: https://git.euandreh.xyz/$PROJECT/about/ -.. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html -.. _`build logs`: https://ci.euandreh.xyz/#$PROJECT -.. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ - -Introduction -~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 2 diff --git a/bash/templates/guix/channel/euandreh.key b/bash/templates/guix/channel/euandreh.key deleted file mode 100644 index 3046d6b..0000000 --- a/bash/templates/guix/channel/euandreh.key +++ /dev/null @@ -1,63 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBFjVvh4BEADIlHUiO6IfkhcNm3J7ilXERgimvKuFNyLIUPZlDcESC1ORrv4y -9slMDA5uojXctuLRC7nNdynLP+eFFfVUQ+hUXcV24AzyOE0CYo5c4PQA5TLe2AUC -E9YqqfQF4XuNddY+UpcG47MuVDR+6SHkFkF29ATzpmShJj41lc7a9CdRib+62Wpe -h7WJOFj/YoxMCBBzic4tiFNgoYobu+lLxyA4T2kCmxEaiZzc6eXBDDgJ0STL4+S8 -avpglaQ+mb5gHbH0yOtuwDG3sWyHKf7LSRVtzWvOqaGmRUmmDsSPjb5vQqvT8EMq -UfqFFZhScLalthF3PhG0SLXPvoCoRm2aLkN+O3sv057RqaN8E39223mmz6EMXmLk -H/U5qk2SUl3dx86dIQcB+2WUVu5zuFyfR1g6tD+DcqzxGc9XB7Gz/0TTDf3OimHb -rp1x5i/04198ocRZT3MzXx8H25tLMS/rHmE87YdgPhMTWheSUevyhoGNHfAOcDwX -P2oGzELXbLqHxtjENMEw2E996KrSmpcz7WOqIl3PHS1J6eRZoYQesXE+SZTeIiYb -wD0kkZGYhBZbtLC4VWIuU2T3AL/2hF6aUh1tj1B6vcV0i3HpIHNbvPAF/I0NUhhc -Gxwwi+ggG/MBHBbxkq7LvG5DfDbav0ZoZaov5dyhtX0CBWjVYATvjRfeAwARAQAB -tBlFdUFuZHJlaCA8ZXVAZXVhbmRyZS5vcmc+iQJWBBMBCgBAAhsDBwsJCAcDAgEG -FQgCCQoLBBYCAwECHgECF4AWIQRb2um4svbGvLsNbOWB+Q7DzTVgYAUCXxBk/wUJ -Cf0N4QAKCRCB+Q7DzTVgYKYFD/4080rAAYvmB/XlMgjxwwxVwAlJxm45iNN4/Ar3 -A4H+kpoPIQFivQgkE51XK7vuKo0LacND8EmBtl6nJf4xqN3/xW0xM7LNhBEo9uLe -66/ABpSTBRDAydOpshtoAtjaEGGHF0wpvneGaYKqYdpRwlPgKr3N3yCXq2u7TGcX -Msdr1wtXVY6PoeC0ry5Li7dUQNUV5VJPRrJ4iHNWJohl1ZU39Hne0HiRYMXnl2lg -NdSX9gsyyZuuZ+xHgfIR6QQuqsZ1kOaKt0EosVWbqS9fBw8t3GOy1LFgwu4A+2JQ -gdV9+SsMmHHEHdTgVvoMtOv0Yg0NVBaAd0tqKMjfnVfk/6RqKjkgQ7/CmDLSNBsK -dq1P5oVjmfA1U2N//MNtyd0gyAGgsTazUOL7DuVi8CCh6NTIpNIyMNXSccIM0//8 -fTcMJQr/Xpfcrlcp5d62GDTFqfMlb4ItQkMa4I3T33T9R5Dc5hoLFbVdytEuzxPn -OD2qVRl6hptnr1VfXXK1WD7KzuPI+gvGgf/iPCGMjLpwKWXBRD1K4AiPkS2zKoiQ -/bXCjM6Cj2wldwsJmTlwDuubkNDnfhueZORBdC9GwWeJ/ilD3ZRM6WoJS89blZc9 -FfDFyHBDNP8fnHYJvC3fbFvOV7C8xjwv3oXmjc4dQzhpmdldI1qcBxU73PYqEQG8 -ibfKA4kCOQQTAQgAIwUCWNW+HgIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheA -AAoJEIH5DsPNNWBgls4P/0LQ6cIGw2PbgmPWv0YFLG6hgGM0iJ7G8gwl6wAIVhs5 -AzCz3hadN0sPUMgg3tMFrvC9h+IVfxTefPuBut+dyEsJKrH/Ufj/ZULP+XcBu5ae -fxns/G2St8u8xa3bVcHDgm+A3vvX4T7ID/aUVPHR6SzaPFIvSM24mJWu2hsV0HZF -1NnLzrhKIrhYL3FlNSljTlq4yJgE3AvBBfFWhGmWBkV8/JTC/CoLAFMa4xZJOras -azJTi042NAbs3GGabeVy2djbkiA2AaEom7gUNR+wyxmvq9IZzY1RAZjDrxQNYW1m -t94dQMmI2IaHlZQWKaB7g6LBBapMGfqLc87yJmkQDjhV9SHoYn0xhBYnt4prjh3V -bkY12/EhrvAoHm8tE9PegP73/i9Ut+Z3NpnUQlBP0iFEVuoXx+7k+iqqaJFPOr6M -ypjcyHFd84QFyfVGMEKmYINh9wznE7WchI1QZdoJbKaHJbH0dtE/oPqj6jQwIKA2 -wu9XxAG1EwAkGrtetrraR4mm6IO3u78oSIKOcXY8QPMW9ybZ9/aWM24O+QK2aj28 -RzWd/JtNBAbQuRJA+AxYdHKUNqXrmSIdZHOW62oArfKOnFfbeI2qvk7Vb+D6xRD6 -hHfsNRaqsGmwat8UrCICoNl+a10JJLcpgbp/qDeNcKH7k2SKBjbfJ5xm/rJBQcYM -uQINBFjVvh4BEADzt2iKa1gSksHtTFkPQ5ULqUF2sHDClr3ykbLq/AxgSCON58eP -A9SKQy2O+qDpojHAN1UULJgHEn34afzMkBzjxcJXMRgaTV2M+1trjwx/VluD9OKX -wmnhmSdvCIP7Z0qdhU78maLq10UG1vVwej3kVlxsf4Eu2ZA+NeIr7Tj0DERqEDQo -DRtNPVEy3h1xoYruy/VjNDi1CI3yFkM6HW1CgRA50rI7GDtvOuitZy+9Lpqs0mWq -vdApWZxoQwslFcziNd+ZVaQjgO6LSnkDttRkAOblFiD710OQy3/Yo97i7bqsKrnZ -qQMRUk0n12VXY9I94c7ELfViVqGk123ELtTViiIz5BT5iQRkJj1GiizTgGY6cfsj -kwWwvabpmWYdyQ85sYoVuNAPz3yDaLdtStWRNHWi4+UHC03J2BiBgIrQbuXoNGuc -j0b1fsntdntaBoZgFygwW6kXUjHLeEfnrGX3C2X49zg0rBTvEzdZwr2K0xgc2z26 -1EEf5ObmOGRt27K1fwrCxKHbKTscReHv78S4v3uN/9LvHfvIEaBoYHqMCcxy7Aii -dk+02dNDO/jZDnTAJH2NWhyB+PJvrlnK34zHhUMVH0i5nUjaCDL/n07Vd2sbE5qW -ivE2MWeayVKRGPci80tEGA1i42FJzGiA1uZrxXNImnsyxQyS8cr9iKoTIQARAQAB -iQIfBBgBCAAJBQJY1b4eAhsMAAoJEIH5DsPNNWBg+bYQALJyD1nyuz8+vl8rqj7K -Z9aRSW+XeG/wz6xrAqdY3OVvHwXYw33pgOmhNhfMUgP/Uy5OsxZdjIO7NzyKa2H9 -JoVSsAs/eLQDOQCcwXruBND6zuxt99kZh6o/Xp4lII9vuLafKner+fWluFHhOy/w -E3Q3VwCbC9npbmzweEl9Q83R7IxbEhtFF5HV0wKVRzW/GX7iWADoHpkAAQ2sUnQp -HhE1wOrdPm0dD9BEbTRQHekUiIQ8cFoORyWbJBwbflY64ioaFjyM+Ji49pNMykie -LzQFW1UYyhkXJeTvv93ym4XyMi2mhsOzna7mG1bonKvbKj6qaXb7gFHUXHh/ARuu -6CNARzBh6BTp+7c1brthGjT/L8CxrAeW2oE5wVIRuk8mdKiFoK3BuXc1P+vsnp36 -ioOQ0y+KPcp+PSbw6oDp7hTHztcW/3EoAgyHneWCmtYYi6RmVptTNpeeyHwqRP/O -elCN1cw9zopofVQhnxDEUgzVPrWWaE7UR6vrHbzlXvWMeGTYtmdmo/9xkYbQzZW7 -y90QLUGyDwQ+KeCG29W3EhygGy3myVQbRaXywgzzO2YvovjATDa7wZQrXNoVE7J9 -uLonNtRlyRlTAfFP6hCLDXwuE6WRHXhdu7aFKbq0LQGFv5hY4wPUp8vnUtGYT/wo -qqSkuSYhzNvmuKBIHPs6YD8d -=d7Et ------END PGP PUBLIC KEY BLOCK----- diff --git a/bash/templates/guix/manifest.scm b/bash/templates/guix/manifest.scm deleted file mode 100644 index 0c8a225..0000000 --- a/bash/templates/guix/manifest.scm +++ /dev/null @@ -1,15 +0,0 @@ -(specifications->manifest - (map symbol->string - '(coreutils - findutils - diffutils - grep - sed - git - tar - gzip - gawk - make - perl - shellcheck - pandoc))) diff --git a/bash/templates/guix/pinned-channels.scm b/bash/templates/guix/pinned-channels.scm deleted file mode 100644 index 67b5a51..0000000 --- a/bash/templates/guix/pinned-channels.scm +++ /dev/null @@ -1,11 +0,0 @@ -(list - (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (commit - "d265809b782293eb42dd663b4611ca19dd2bf1b3") - (introduction - (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" - (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/bash/templates/m4/guile.m4 b/bash/templates/m4/guile.m4 deleted file mode 100644 index 6968973..0000000 --- a/bash/templates/m4/guile.m4 +++ /dev/null @@ -1,397 +0,0 @@ -## Autoconf macros for working with Guile. -## -## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public License -## as published by the Free Software Foundation; either version 3 of -## the License, or (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -## 02110-1301 USA - -# serial 10 - -## Index -## ----- -## -## GUILE_PKG -- find Guile development files -## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -## GUILE_FLAGS -- set flags for compiling and linking with Guile -## GUILE_SITE_DIR -- find path to Guile "site" directories -## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value -## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module -## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module -## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable -## GUILE_MODULE_EXPORTS -- check if a module exports a variable -## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable - -## Code -## ---- - -## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged -## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). - -# GUILE_PKG -- find Guile development files -# -# Usage: GUILE_PKG([VERSIONS]) -# -# This macro runs the @code{pkg-config} tool to find development files -# for an available version of Guile. -# -# By default, this macro will search for the latest stable version of -# Guile (e.g. 3.0), falling back to the previous stable version -# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is -# found, an error is signalled. The found version is stored in -# @var{GUILE_EFFECTIVE_VERSION}. -# -# If @code{GUILE_PROGS} was already invoked, this macro ensures that the -# development files have the same effective version as the Guile -# program. -# -# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by -# @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PKG], - [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) - if test "x$PKG_CONFIG" = x; then - AC_MSG_ERROR([pkg-config is missing, please install it]) - fi - _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" - if test -n "$GUILE_EFFECTIVE_VERSION"; then - _guile_tmp="" - for v in $_guile_versions_to_search; do - if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then - _guile_tmp=$v - fi - done - if test -z "$_guile_tmp"; then - AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) - fi - _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION - fi - GUILE_EFFECTIVE_VERSION="" - _guile_errors="" - for v in $_guile_versions_to_search; do - if test -z "$GUILE_EFFECTIVE_VERSION"; then - AC_MSG_NOTICE([checking for guile $v]) - PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) - fi - done - - if test -z "$GUILE_EFFECTIVE_VERSION"; then - AC_MSG_ERROR([ -No Guile development packages were found. - -Please verify that you have Guile installed. If you installed Guile -from a binary distribution, please verify that you have also installed -the development packages. If you installed it yourself, you might need -to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. -]) - fi - AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) - AC_SUBST([GUILE_EFFECTIVE_VERSION]) - ]) - -# GUILE_FLAGS -- set flags for compiling and linking with Guile -# -# Usage: GUILE_FLAGS -# -# This macro runs the @code{pkg-config} tool to find out how to compile -# and link programs against Guile. It sets four variables: -# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and -# @var{GUILE_LTLIBS}. -# -# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that -# uses Guile header files. This is almost always just one or more @code{-I} -# flags. -# -# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program -# against Guile. This includes @code{-lguile-@var{VERSION}} for the -# Guile library itself, and may also include one or more @code{-L} flag -# to tell the compiler where to find the libraries. But it does not -# include flags that influence the program's runtime search path for -# libraries, and will therefore lead to a program that fails to start, -# unless all necessary libraries are installed in a standard location -# such as @file{/usr/lib}. -# -# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to -# libtool, respectively, to link a program against Guile. It includes flags -# that augment the program's runtime search path for libraries, so that shared -# libraries will be found at the location where they were during linking, even -# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the -# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used -# when linking the program is done through libtool. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_FLAGS], - [AC_REQUIRE([GUILE_PKG]) - PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) - - dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by - dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS - dnl to us. - - GUILE_LDFLAGS=$GUILE_LIBS - - dnl Determine the platform dependent parameters needed to use rpath. - dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs - dnl the file gnulib/build-aux/config.rpath. - AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) - GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" - AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) - GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" - - AC_SUBST([GUILE_EFFECTIVE_VERSION]) - AC_SUBST([GUILE_CFLAGS]) - AC_SUBST([GUILE_LDFLAGS]) - AC_SUBST([GUILE_LIBS]) - AC_SUBST([GUILE_LTLIBS]) - ]) - -# GUILE_SITE_DIR -- find path to Guile site directories -# -# Usage: GUILE_SITE_DIR -# -# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will -# be set to Guile's "site" directory for Scheme source files (usually something -# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the -# directory for compiled Scheme files also known as @code{.go} files -# (usually something like -# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). -# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions -# (usually something like -# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two -# are set to blank if the particular version of Guile does not support -# them. Note that this macro will run the macros @code{GUILE_PKG} and -# @code{GUILE_PROGS} if they have not already been run. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_SITE_DIR], - [AC_REQUIRE([GUILE_PKG]) - AC_REQUIRE([GUILE_PROGS]) - AC_MSG_CHECKING(for Guile site directory) - GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` - AC_MSG_RESULT($GUILE_SITE) - if test "$GUILE_SITE" = ""; then - AC_MSG_FAILURE(sitedir not found) - fi - AC_SUBST(GUILE_SITE) - AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) - GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` - if test "$GUILE_SITE_CCACHE" = ""; then - AC_MSG_RESULT(no) - AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) - GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` - if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then - AC_MSG_RESULT(no) - GUILE_SITE_CCACHE="" - AC_MSG_WARN([siteccachedir not found]) - fi - fi - AC_MSG_RESULT($GUILE_SITE_CCACHE) - AC_SUBST([GUILE_SITE_CCACHE]) - AC_MSG_CHECKING(for Guile extensions directory) - GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` - AC_MSG_RESULT($GUILE_EXTENSION) - if test "$GUILE_EXTENSION" = ""; then - GUILE_EXTENSION="" - AC_MSG_WARN(extensiondir not found) - fi - AC_SUBST(GUILE_EXTENSION) - ]) - -# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -# -# Usage: GUILE_PROGS([VERSION]) -# -# This macro looks for programs @code{guile} and @code{guild}, setting -# variables @var{GUILE} and @var{GUILD} to their paths, respectively. -# The macro will attempt to find @code{guile} with the suffix of -# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and -# then fall back to looking for @code{guile} with no suffix. If -# @code{guile} is still not found, signal an error. The suffix, if any, -# that was required to find @code{guile} will be used for @code{guild} -# as well. -# -# By default, this macro will search for the latest stable version of -# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older -# version is found, the macro will signal an error. -# -# The effective version of the found @code{guile} is set to -# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective -# version is compatible with the result of a previous invocation of -# @code{GUILE_FLAGS}, if any. -# -# As a legacy interface, it also looks for @code{guile-config} and -# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PROGS], - [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" - if test -z "$_guile_required_version"; then - _guile_required_version=3.0 - fi - - _guile_candidates=guile - _tmp= - for v in `echo "$_guile_required_version" | tr . ' '`; do - if test -n "$_tmp"; then _tmp=$_tmp.; fi - _tmp=$_tmp$v - _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" - done - - AC_PATH_PROGS(GUILE,[$_guile_candidates]) - if test -z "$GUILE"; then - AC_MSG_ERROR([guile required but not found]) - fi - - _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` - _guile_effective_version=`$GUILE -c "(display (effective-version))"` - if test -z "$GUILE_EFFECTIVE_VERSION"; then - GUILE_EFFECTIVE_VERSION=$_guile_effective_version - elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then - AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) - fi - - _guile_major_version=`$GUILE -c "(display (major-version))"` - _guile_minor_version=`$GUILE -c "(display (minor-version))"` - _guile_micro_version=`$GUILE -c "(display (micro-version))"` - _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" - - AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) - _major_version=`echo $_guile_required_version | cut -d . -f 1` - _minor_version=`echo $_guile_required_version | cut -d . -f 2` - _micro_version=`echo $_guile_required_version | cut -d . -f 3` - if test "$_guile_major_version" -gt "$_major_version"; then - true - elif test "$_guile_major_version" -eq "$_major_version"; then - if test "$_guile_minor_version" -gt "$_minor_version"; then - true - elif test "$_guile_minor_version" -eq "$_minor_version"; then - if test -n "$_micro_version"; then - if test "$_guile_micro_version" -lt "$_micro_version"; then - AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) - fi - fi - elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then - # Allow prereleases that have the right effective version. - true - else - as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 - fi - elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then - # Allow prereleases that have the right effective version. - true - else - AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) - fi - AC_MSG_RESULT([$_guile_prog_version]) - - AC_PATH_PROG(GUILD,[guild$_guile_suffix]) - AC_SUBST(GUILD) - - AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) - AC_SUBST(GUILE_CONFIG) - if test -n "$GUILD"; then - GUILE_TOOLS=$GUILD - else - AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) - fi - AC_SUBST(GUILE_TOOLS) - ]) - -# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value -# -# Usage: GUILE_CHECK_RETVAL(var,check) -# -# @var{var} is a shell variable name to be set to the return value. -# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and -# returning either 0 or non-#f to indicate the check passed. -# Non-0 number or #f indicates failure. -# Avoid using the character "#" since that confuses autoconf. -# -AC_DEFUN([GUILE_CHECK], - [AC_REQUIRE([GUILE_PROGS]) - $GUILE -c "$2" > /dev/null 2>&1 - $1=$? - ]) - -# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module -# -# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) -# -# @var{var} is a shell variable name to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. -# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). -# -AC_DEFUN([GUILE_MODULE_CHECK], - [AC_MSG_CHECKING([if $2 $4]) - GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) - if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi - AC_MSG_RESULT($$1) - ]) - -# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module -# -# Usage: GUILE_MODULE_AVAILABLE(var,module) -# -# @var{var} is a shell variable name to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# -AC_DEFUN([GUILE_MODULE_AVAILABLE], - [GUILE_MODULE_CHECK($1,$2,0,is available) - ]) - -# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable -# -# Usage: GUILE_MODULE_REQUIRED(symlist) -# -# @var{symlist} is a list of symbols, WITHOUT surrounding parens, -# like: ice-9 common-list. -# -AC_DEFUN([GUILE_MODULE_REQUIRED], - [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) - if test "$ac_guile_module_required" = "no" ; then - AC_MSG_ERROR([required guile module not found: ($1)]) - fi - ]) - -# GUILE_MODULE_EXPORTS -- check if a module exports a variable -# -# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) -# -# @var{var} is a shell variable to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{modvar} is the Guile Scheme variable to check. -# -AC_DEFUN([GUILE_MODULE_EXPORTS], - [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') - ]) - -# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable -# -# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) -# -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{modvar} is the Guile Scheme variable to check. -# -AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], - [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) - if test "$guile_module_required_export" = "no" ; then - AC_MSG_ERROR([module $1 does not export $2; required]) - fi - ]) - -## guile.m4 ends here diff --git a/bash/templates/m4/links.m4 b/bash/templates/m4/links.m4 deleted file mode 100644 index a96fb5f..0000000 --- a/bash/templates/m4/links.m4 +++ /dev/null @@ -1,25 +0,0 @@ -AC_DEFUN([EU_LINKS], [ - AC_SUBST([TLD]) - - PACKAGE_VERSION_NUMBERS="`echo $PACKAGE_VERSION | cut -c2-`" - AC_SUBST([PACKAGE_VERSION_NUMBERS]) - - PACKAGE_DESCRIPTION="`awk '{print substr(@S|@0, 1, length(@S|@0)-1)}' $srcdir/description`" - AC_SUBST([PACKAGE_DESCRIPTION]) - - PACKAGE_CHANNEL_URL="git://git.$TLD/$PACKAGE/" - AC_SUBST([PACKAGE_CHANNEL_URL]) - - PACKAGE_GIT_URL="https://git.$TLD/$PACKAGE/" - AC_SUBST([PACKAGE_GIT_URL]) - - PACKAGE_CI_URL="https://ci.$TLD/" - AC_SUBST([PACKAGE_CI_URL]) - - PACKAGE_DOC_URL="https://$PACKAGE.$TLD/en/master/" - AC_SUBST([PACKAGE_DOC_URL]) - - if test "$PACKAGE_URL" != "https://$PACKAGE.$TLD"; then - AC_MSG_ERROR(['TLD' variable is out of sync with 'PACKAGE_URL': https://$PACKAGE.$TLD != $PACKAGE_URL]) - fi -]) diff --git a/bash/templates/m4/programmer-mode.m4 b/bash/templates/m4/programmer-mode.m4 deleted file mode 100644 index 876b878..0000000 --- a/bash/templates/m4/programmer-mode.m4 +++ /dev/null @@ -1,17 +0,0 @@ -AC_DEFUN([EU_PROGRAMMER_MODE], [ - AC_ARG_ENABLE([programmer-mode], - AS_HELP_STRING([--enable-programmer-mode], - [Enables all opt-in configure flags, and requires a full development environment [default=no]. Similar to --enable-maintainer-mode, without changing dependency tracking.]), - [PROGRAMMER_MODE=$enableval], - [PROGRAMMER_MODE=no]) - - AC_SUBST([PROGRAMMER_MODE]) - - AC_ARG_ENABLE([ci-mode], - AS_HELP_STRING([--enable-ci-mode], - [Enables CI-specific flag. Assumes --enable-programmer-mode [default=no].]), - [CI_MODE=$enableval], - [CI_MODE=no]) - - AC_SUBST([CI_MODE]) -]) diff --git a/bash/templates/rename/basic-channel.scm.in b/bash/templates/rename/basic-channel.scm.in deleted file mode 100644 index 024d085..0000000 --- a/bash/templates/rename/basic-channel.scm.in +++ /dev/null @@ -1,72 +0,0 @@ -(define-module (xyz euandreh @PACKAGE@ channel) - #:use-module ((guix licenses) #:prefix license:) - #:use-module (guix transformations) - #:use-module (guix gexp) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix git-download) - #:use-module (guix utils) - #:use-module (guix build-system gnu) - #:use-module (gnu packages) - #:use-module (gnu packages autotools) - #:use-module (gnu packages gnupg) - #:use-module (gnu packages guile) - #:use-module (gnu packages guile-xyz) - #:use-module (gnu packages mail) - #:use-module (gnu packages pkg-config) - #:use-module (gnu packages texinfo)) - -(define-public @PACKAGE@ - (package - (name "@PACKAGE@") - (version (car - (string-split (substring "@VERSION@" 1) - #\-))) - (source (origin - (method url-fetch) - (file-name (string-append name "-" version ".tar.gz")) - ;; URI available via: - ;; $ git fetch origin refs/notes/tarballs - ;; $ printf '@PACKAGE_GIT_URL@blob?id=%s' $(git notes --ref=refs/notes/tarballs list @VERSION@) - (uri "@PACKAGE_GIT_URL@blob?id=b6a3b84537adb5cdeccb43bd9e00956f8b55d359") - (sha256 - (base32 "1mraz2d85hgalkdml92x78br31rlbz298r8hf75fcsdlrf7n3d0p")))) - (build-system gnu-build-system) - (inputs - `()) - (native-inputs - `(("pkg-config" ,pkg-config))) - (synopsis "@PACKAGE_DESCRIPTION@") - (description "@PACKAGE_LONG_DESCRIPTION@") - (home-page "@PACKAGE_URL@") - (license license:agpl3+))) - -(define @PACKAGE@-master - (let ((@PACKAGE@-from-master - ((options->transformation - '((with-git-url . "@PACKAGE@=@PACKAGE_CHANNEL_URL@"))) - @PACKAGE@))) - (package - (inherit @PACKAGE@-from-master) - (name "@PACKAGE@-master") - (native-inputs - (append - (package-native-inputs @PACKAGE@) - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("texinfo" ,texinfo))))))) - -(define repository-root - (canonicalize-path - (string-append (current-source-directory) - "/../../../../.."))) - -(define @PACKAGE@-dev - (package - (inherit @PACKAGE@-master) - (source (local-file repository-root - #:recursive? #t - #:select? (git-predicate repository-root))))) - -@PACKAGE@-dev -@PACKAGE@-master diff --git a/bash/templates/rename/empty-texinfo.texi b/bash/templates/rename/empty-texinfo.texi deleted file mode 100644 index adf8221..0000000 --- a/bash/templates/rename/empty-texinfo.texi +++ /dev/null @@ -1,5 +0,0 @@ -\input texinfo -@settitle $PROJECT Documentation -@documentencoding UTF-8 - -@bye diff --git a/bash/util.sh b/bash/util.sh deleted file mode 100644 index 7e4e942..0000000 --- a/bash/util.sh +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh - -extract () { - if [ -f "$1" ] ; then - case "$1" in - *.tar.bz2) tar xvjf "$1" ;; - *.tar.gz) tar xvzf "$1" ;; - *.bz2) bunzip2 "$1" ;; - *.rar) unrar x "$1" ;; - *.gz) gunzip "$1" ;; - *.tar) tar xvf "$1" ;; - *.tbz2) tar xvjf "$1" ;; - *.tgz) tar xvzf "$1" ;; - *.zip) unzip "$1" ;; - *.Z) uncompress "$1" ;; - *.7z) 7z x "$1" ;; - *.xz) unxz "$1" ;; - *) echo "don't know how to extract '$1'..." ;; - esac - else - echo "'$1' is not a valid file!" - fi -} - -genpassword() { - length="${1-99}" - tr -cd '[:alnum:]' < /dev/urandom | fold "-w$length" | head -n1 ||: -} - -t() { - expand "$1" -t2 | sponge "$1" -} - -task() { - TITLE="${1:-FIXME}" - printf '## TODO %s {#task-%s}\n- TODO in %s\n\n---\n\nFIXME\n' \ - "$TITLE" "$(uuidgen)" "$(date -I)" | \ - vipe | \ - printf '%s\n\n%s\n\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ - sponge TODOs.md -} - -gvi() { - if [ -e "$1" ]; then - INIT="gpg -qd" - else - INIT="echo" - fi - $INIT "$1" | vipe | gpg -qer eu@euandre.org | sponge "$1" -} diff --git a/bash/x.sh b/bash/x.sh deleted file mode 100644 index 7e28b20..0000000 --- a/bash/x.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -setxkbmap -option esperanto:qwerty -xset r rate 225 75 - -# query with: xdg-mime query filetype -xdg-mime default evince.desktop application/pdf -xdg-mime default mpv.desktop video/mp4 -xdg-mime default mpv.desktop video/webm -xdg-mime default mpv.desktop video/x-matroska -xdg-mime default mpv.desktop audio/mpeg -xdg-mime default mpv.desktop audio/x-flac - -xdg-mime default firefox.desktop text/html -xdg-mime default firefox.desktop text/xml - -xdg-mime default nautilus.desktop inode/directory -xmodmap ~/.Xmodmap diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh index f9bab22..27c5b0b 100755 --- a/build-aux/assert-todos.sh +++ b/build-aux/assert-todos.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -EXCLUDE='(bash/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|bash/util.sh|docbook-xsl.tar.gz)' +EXCLUDE='(sh/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|sh/util.sh|docbook-xsl.tar.gz)' if git grep FIXME | grep -Ev "$EXCLUDE"; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." diff --git a/scripts/fim b/scripts/fim index 6cd1d6e..040dbe9 100755 --- a/scripts/fim +++ b/scripts/fim @@ -1,4 +1,4 @@ #!/bin/sh set -eu -play "$DOTFILES/bash/Positive.ogg" 2> /dev/null +play "$DOTFILES/sh/Positive.ogg" 2> /dev/null diff --git a/scripts/gc-mail.sh b/scripts/gc-mail.sh index 15b4cd7..9a04cdd 100755 --- a/scripts/gc-mail.sh +++ b/scripts/gc-mail.sh @@ -2,7 +2,7 @@ set -eux # shellcheck source=/dev/null -. "$DOTFILES/bash/colors.sh" +. "$DOTFILES/sh/colors.sh" # Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ yellow "Clean up deleted email files" diff --git a/scripts/gc-nix.sh b/scripts/gc-nix.sh index 5bb448c..540fc89 100755 --- a/scripts/gc-nix.sh +++ b/scripts/gc-nix.sh @@ -2,7 +2,7 @@ set -Eeuo pipefail # shellcheck source=/dev/null -. "$DOTFILES/bash/colors.sh" +. "$DOTFILES/sh/colors.sh" yellow "Cleaning up the NixOS store\n" profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) diff --git a/scripts/gc.sh b/scripts/gc.sh index f42c883..3ea5b52 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -2,7 +2,7 @@ set -eu # shellcheck source=/dev/null -. "$DOTFILES/bash/colors.sh" +. "$DOTFILES/sh/colors.sh" disk_space() { u | awk '{print $5" "$6}' diff --git a/scripts/post.sh b/scripts/post.sh index 50cd187..b12f01b 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -2,7 +2,7 @@ set -eu # shellcheck source=/dev/null -. "$DOTFILES/bash/colors.sh" +. "$DOTFILES/sh/colors.sh" missing() { red "Missing argument <${1}>.\n" >&2 diff --git a/sh/Positive.ogg b/sh/Positive.ogg new file mode 100644 index 0000000..22cb563 Binary files /dev/null and b/sh/Positive.ogg differ diff --git a/sh/agents.sh b/sh/agents.sh new file mode 100644 index 0000000..6a008b0 --- /dev/null +++ b/sh/agents.sh @@ -0,0 +1,25 @@ +#!/bin/sh +# shellcheck disable=SC2015 +# shellcheck disable=SC1090 + +GPG_TTY=$(tty) +export GPG_TTY + +export SSH_ENV="$HOME/.ssh/environment" +start_agent() { + echo "Initialising new SSH agent..." + ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" + echo succeeded + chmod 600 "${SSH_ENV}" + . "${SSH_ENV}" > /dev/null + ssh-add +} + +[ -f "${SSH_ENV}" ] && { + . "${SSH_ENV}" > /dev/null + pgrep ^ssh-agent$ > /dev/null || { + start_agent + } +} || start_agent + +eval "$(direnv hook bash)" diff --git a/sh/aliases.sh b/sh/aliases.sh new file mode 100644 index 0000000..1d1fbf9 --- /dev/null +++ b/sh/aliases.sh @@ -0,0 +1,45 @@ +#!/bin/sh +# shellcheck disable=SC2139 + +unalias -a + +alias sbcl='rlwrap sbcl' +alias sqlite='rlwrap sqlite3' +alias guile='rlwrap guile' + +alias l="ls -lahF --color" +alias copy="tr -d '\\n' | xclip -sel clip" +alias cop="xclip -sel clip" +alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" +# Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329 +alias watch="watch --color " +alias mr="mr -s" +alias ncdu="ncdu --color dark" +alias mm="mbsync -A && notmuch new" +alias m="mbsync EuAndreh && notmuch new" +alias n='neomutt' +alias p='ping euandre.org -c 3' +alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" +alias mux="tmuxinator start" +alias s="git status" +alias d="git diff" +alias ds="git diff --staged" + +u() { + cd ~/annex > /dev/null || exit 1; + git annex info --fast | grep available; + cd - > /dev/null || exit 1; +} + +alias reload="source $DOTFILES/sh/reload.sh" +alias rr="source $DOTFILES/sh/reload.sh" +alias r="source ~/.bashrc" + +alias ag="ag --hidden" +alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" +alias grep='grep --color=auto' +alias diff='diff --color=auto' +# https://linuxhandbook.com/run-alias-as-sudo/ +alias sudo='sudo ' + +alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' diff --git a/sh/bash_profile.sh b/sh/bash_profile.sh new file mode 100644 index 0000000..805ae1c --- /dev/null +++ b/sh/bash_profile.sh @@ -0,0 +1,4 @@ +#!/bin/sh + +# shellcheck disable=SC1090 +. ~/dev/libre/dotfiles/sh/bashrc.sh diff --git a/sh/bashrc.sh b/sh/bashrc.sh new file mode 100644 index 0000000..d8ad26a --- /dev/null +++ b/sh/bashrc.sh @@ -0,0 +1,18 @@ +#!/bin/sh +# shellcheck disable=SC1090 + +export DOTFILES=~/dev/libre/dotfiles + +. $DOTFILES/sh/config.sh +. $DOTFILES/sh/env.sh +. "$GUIX_PROFILE/etc/profile" +. $DOTFILES/sh/colors.sh +. $DOTFILES/sh/git-prompt.sh +. $DOTFILES/sh/ps1.sh +. $DOTFILES/sh/fzf.sh +. $DOTFILES/sh/aliases.sh +. $DOTFILES/sh/util.sh +. $DOTFILES/sh/agents.sh +. $DOTFILES/sh/symlinks.sh +. "$HOME/annex/bin/misc/env.sh" +. "$HOME/.nurc" diff --git a/sh/colors.sh b/sh/colors.sh new file mode 100644 index 0000000..7c8cb3e --- /dev/null +++ b/sh/colors.sh @@ -0,0 +1,115 @@ +#!/bin/sh +# shellcheck disable=2059 + +export end="\033[0m" +export black="\033[0;30m" +export blackb="\033[1;30m" +export white="\033[0;37m" +export whiteb="\033[1;37m" +export red="\033[0;31m" +export redb="\033[1;31m" +export green="\033[0;32m" +export greenb="\033[1;32m" +export yellow="\033[0;33m" +export yellowb="\033[1;33m" +export blue="\033[0;34m" +export blueb="\033[1;34m" +export purple="\033[0;35m" +export purpleb="\033[1;35m" +export lightblue="\033[0;36m" +export lightblueb="\033[1;36m" +export blacki="\033[0;90m" +export bluei="\033[0;94m" + +black() { + printf "${black}${1}${end}" +} + +blackb() { + printf "${blackb}${1}${end}" +} + +blacki() { + printf "${blacki}${1}${end}" +} + +white() { + printf "${white}${1}${end}" +} + +whiteb() { + printf "${whiteb}${1}${end}" +} + +red() { + printf "${red}${1}${end}" +} + +redb() { + printf "${redb}${1}${end}" +} + +green() { + printf "${green}${1}${end}" +} + +greenb() { + printf "${greenb}${1}${end}" +} + +yellow() { + printf "${yellow}${1}${end}" +} + +yellowb() { + printf "${yellowb}${1}${end}" +} + +blue() { + printf "${blue}${1}${end}" +} + +blueb() { + printf "${blueb}${1}${end}" +} + +bluei() { + printf "${bluei}${1}${end}" +} + +purple() { + printf "${purple}${1}${end}" +} + +purpleb() { + printf "${purpleb}${1}${end}" +} + +lightblue() { + printf "${lightblue}${1}${end}" +} + +lightblueb() { + printf "${lightblueb}${1}${end}" +} + +colors() { + black "black" + blackb "blackb" + white "white" + whiteb "whiteb" + red "red" + redb "redb" + green "green" + greenb "greenb" + yellow "yellow" + yellowb "yellowb" + blue "blue" + blueb "blueb" + purple "purple" + purpleb "purpleb" + lightblue "lightblue" + lightblueb "lightblueb" + blacki "blacki" + bluei "bluei" +} diff --git a/sh/config.sh b/sh/config.sh new file mode 100644 index 0000000..a8f86cb --- /dev/null +++ b/sh/config.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# ~/.bashrc: executed by bash(1) for non-login shells. + +# derived from Ubuntu's default .bashrc + + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# Don't put duplicate linesin the history. +# Don't store commands that start with an empty space. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000000 +HISTFILESIZE=2000000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +shopt -s globstar + +# If set, the pattern "*" will also match dotfiles. +shopt -s dotglob + +stty -ixon + + +# Taken from: +# https://sanctum.geek.nz/arabesque/better-bash-history/ + +# Record timestamps +# If you set $HISTTIMEFORMAT to something useful, Bash will record the timestamp of each command in its history. In this variable you can specify the format in which you want this timestamp displayed when viewed with history. I find the full date and time to be useful, because it can be sorted easily and works well with tools like cut and awk. +HISTTIMEFORMAT='%F %T ' + +# Use one command per line +# To make your .bash_history file a little easier to parse, you can force commands that you entered on more than one line to be adjusted to fit on only one with the cmdhist option: +shopt -s cmdhist + +# Store history immediately +# By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: +PROMPT_COMMAND='history -a' + +bind -x '"\e\C-l": c' diff --git a/sh/env.sh b/sh/env.sh new file mode 100644 index 0000000..c1f9be6 --- /dev/null +++ b/sh/env.sh @@ -0,0 +1,17 @@ +#!/bin/sh + +export R='16686@ch-s010.rsync.net' +export EDITOR=vi +export BROWSER=firefox +export INPUTRC=~/.inputrc +export BORG_REMOTE_PATH='borg1' +export GOPATH="$HOME/dev/go" +export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" + +# https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 +export NIX_BUILD_CORES=0 + +export GUIX_PROFILE="$HOME/.guix-profile" +export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" + +PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$HOME/annex/bin/scripts:$PATH" diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh new file mode 100644 index 0000000..d04c822 --- /dev/null +++ b/sh/fake-symlinks.sh @@ -0,0 +1,433 @@ +#!/usr/bin/env bash + +pushd "${DOTFILES}/sh/templates/" > /dev/null || exit 1 +export DOLLAR='$' + +mkdir -p "$DOTFILES/cron/generated/" +for job in report-summary annex elfeed backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/${job}.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" +done + +mkdir -p "$HOME/annex/bin/cron/generated/" +# shellcheck disable=2043 +for job in pacheco; do + prefix="$HOME/annex/bin/cron" + sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" + chmod +x "$HOME/annex/bin/cron/${job}.sh" + chmod +x "$HOME/annex/bin/cron/${job}-job.sh" +done + +mkdir -p ~/archive/torrent/ +find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; + +DEFAULT_TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' +sed -e "$DEFAULT_TLD_SCRIPT" < build-aux/ci/git-pre-push.sh.in > build-aux/ci/git-pre-push.sh + +normalize-name() { + if [[ -n "$RENAME_TO" ]]; then + echo "$RENAME_TO" + elif [[ "$1" = ..* ]]; then + echo "${1:1}" + else + echo "$1" + fi +} + +cp-all() { + for f in "$@"; do + OUT="$PREFIX/$(normalize-name "$f")" + mkdir -p "$(dirname "$OUT")" + cp "$f" "$OUT" + done +} + +cp-if-not() { + for f in "$@"; do + OUT="$PREFIX/$(normalize-name "$f")" + if [[ ! -f "$OUT" ]]; then + cp-all "$f" + fi + done +} + +envsubst-all() { + for f in "$@"; do + OUT="$PREFIX/$(normalize-name "$f")" + mkdir -p "$(dirname "$OUT")" + envsubst < "$f" > "$OUT" + + if [ -n "$EXECUTABLE" ]; then + chmod +x "$OUT" + fi + done +} + +envsubst-if-not() { + for f in "$@"; do + OUT="$PREFIX/$(normalize-name "$f")" + if [[ ! -f "$OUT" ]]; then + envsubst-all "$f" + fi + done +} + +sed-all() { + for f in "$@"; do + OUT="$PREFIX/$(normalize-name "$f")" + mkdir -p "$(dirname "$OUT")" + + if [ -n "$ENABLE_CI" ]; then + ENABLE_CI_SCRIPT='s/__ENABLE_CI__ //g' + if [ -n "$ENABLE_AUTOTOOLS" ]; then + TLD_SCRIPT='' + else + TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" + fi + else + ENABLE_CI_SCRIPT='/__ENABLE_CI__ /d' + TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" + fi + + sed "$f" \ + -e "s/__PROJECT_UC__/$PROJECT_UC/g" \ + -e "s/__PROJECT__/$PROJECT/g" \ + -e "s/__MAILING_LIST__/$MAILING_LIST/g" \ + -e "$TLD_SCRIPT" \ + -e "$ENABLE_CI_SCRIPT" \ + -e "$ENABLE_AUTOTOOLS_SCRIPT" \ + > "$OUT" + + if [ -n "$EXECUTABLE" ]; then + chmod +x "$OUT" + fi + done +} + +sed-if-not() { + for f in "$@"; do + OUT="$PREFIX/$(normalize-name "$f")" + if [ ! -f "$OUT" ]; then + sed-all "$f" + fi + done +} + +ln-env() { + export PROJECT="$1" + export PREFIX="${PREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}" + export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" + export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" + + if [ -f "$PREFIX/Makefile.am" ]; then + export ENABLE_AUTOTOOLS=1 + else + export ENABLE_AUTOTOOLS= + fi + + if [ -f "$PREFIX/Makefile" ] || [ -f "$PREFIX/Makefile.am" ]; then + export ENABLE_CI=1 + else + export ENABLE_CI= + fi + + if [ -n "${GUILE_PROJECTS[$PROJECT]}" ]; then + ENABLE_GUILE=1 + else + ENABLE_GUILE= + fi + + if [ -n "${RUST_PROJECT[$PROJECT]}" ]; then + ENABLE_RUST=1 + else + ENABLE_RUST= + fi + + if [ -f "$PREFIX/guix/pinned-channels.scm" ] && + [ "$(wc -l < "$PREFIX/guix/pinned-channels.scm")" = 11 ]; then + ENABLE_OVERWRITE_PINNED_CHANNELS=1 + else + ENABLE_OVERWRITE_PINNED_CHANNELS= + fi + + if [ -n "${GUIX_PROJECT_NO_CHANNEL[$PROJECT]}" ]; then + ENABLE_GUIX_PROJECT_CHANNEL= + else + ENABLE_GUIX_PROJECT_CHANNEL=1 + fi +} + +ln-init() { + if ! grep -q "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini; then + red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")" + fi + + if [ ! -d "$PREFIX" ]; then + git init "$PREFIX" + fi +} + +ln-autotools() { + chmod +w "$PREFIX/INSTALL" 2> /dev/null ||: + cp-all AUTHORS \ + bootstrap \ + ChangeLog \ + build-aux/dev-checks.am \ + build-aux/default-extra-dist.am \ + m4/links.m4 \ + m4/programmer-mode.m4 \ + build-aux/html-files-from-sources.am + + # dev-cheks.am: test maintainer mode + # https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html + cp-if-not description + + # assumes: + # - ln-workflow for .gitignore + # - ln-git-notes-release for Makefile.am + # - ln-guix-files for Makefile.am + envsubst-if-not ..gitignore README.in + sed-if-not configure.ac Makefile.am +} + +ln-build-aux() { + cp-all build-aux/assert-todos.sh \ + build-aux/assert-shellcheck.sh \ + build-aux/workflow/TODOs.sh \ + build-aux/workflow/README.sh \ + build-aux/workflow/style.css \ + build-aux/workflow/preamble.md + + cp-if-not TODOs.md +} + +ln-agpl() { + cp-all COPYING +} + +ln-guix-files() { + cp-all build-aux/with-container.sh \ + build-aux/assert-shellcheck.sh + cp-if-not guix/manifest.scm + + if [ -n "$ENABLE_GUIX_PROJECT_CHANNEL" ]; then + cp-all .guix-channel \ + .guix-authorizations \ + guix/channel/euandreh.key + if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then + RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp-if-not rename/basic-channel.scm.in + fi + fi + + if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then + cp-all guix/pinned-channels.scm + else + cp-if-not guix/pinned-channels.scm + fi +} + +ln-ci() { + if [ -n "$ENABLE_CI" ]; then + if [ -n "$ENABLE_AUTOTOOLS" ]; then + sed-all build-aux/ci/git-pre-push.sh.in + else + EXECUTABLE=1 sed-all build-aux/ci/git-pre-push.sh + fi + cp-all build-aux/assert-shellcheck.sh \ + build-aux/ci/ci-build.sh \ + build-aux/ci/git-post-receive.sh + ln -fs "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" + else + EXECUTABLE=1 sed-all ..git/hooks/pre-push + fi +} + +ln-git-notes-release() { + cp-all build-aux/git-notes-release.am build-aux/git-notes-release.sh + cp-if-not NEWS +} + +ln-dicts() { + cp-if-not doc/dictionaries/international.txt doc/dictionaries/en.txt +} + +ln-pandoc-index() { + cp-all build-aux/compile-readme.sh +} + +ln-web-assets-file() { + mkdir -p "$PREFIX/build-aux/" + cp "build-aux/$1-build-web-assets.sh" "$PREFIX/build-aux/build-web-assets.sh" +} + +ln-scribble() { + ln-dicts +} + +ln-antora() { + ln-dicts +} + +ln-base-autotools-guix-project() { + ln-env "$1" + ln-init + + ln-build-aux + ln-guix-files + ln-git-notes-release + ln-autotools + ln-generated-readme + ln-pandoc-index + + ln-agpl + ln-ci + + ln-dicts + + if [ -n "$ENABLE_GUILE" ]; then + cp-all build-aux/guile.am m4/guile.m4 + fi + + if [ -n "$ENABLE_RUST" ]; then + cp-all build-aux/rust.am + fi +} + +ln-texinfo-autotools-guix-project() { + ln-base-autotools-guix-project "$1" + RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi + ln-web-assets-file texinfo + cp-all build-aux/docbook-xsl.tar.gz +} + +ln-sphinx-autotools-guix-project() { + ln-base-autotools-guix-project "$1" + cp-all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico + envsubst-all doc/conf.py.in doc/_templates/layout.html + envsubst-if-not doc/index.rst + # EXECUTABLE=1 sed-all build-aux/build-sphinx.sh + cp-if-not doc/i18n-pagenames.json doc/Makefile +} + +ln-scribble-autotools-guix-project() { + ln-base-autotools-guix-project "$1" + ln-scribble +} + +ln-antora-autotools-guix-project() { + ln-base-autotools-guix-project "$1" + ln-antora +} + +ln-simple-makefile() { + envsubst-if-not Makefile +} + +ln-generated-readme() { + if [[ ! -f "$PREFIX/README" ]]; then + cat <(printf "%s\n\n" "$PROJECT_UC") \ + <(fold < "$PREFIX/description") \ + <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \ + > "$PREFIX/README" + fi +} + +ln-makefile-only-guix-project() { + ln-env "$1" + ln-agpl + ln-build-aux + ln-guix-files + ln-ci + ln-simple-makefile +} + +ln-bare-project() { + ln-env "$1" + ln-agpl + ln-ci +} + +ln-description-foreign-project() { + ln-env "$1" + # Foreign projects may have Makefiles and alike, and I don't want + # to have CI files copied to the repository + ENABLE_CI= + ln-ci +} + +declare -A PROJECT_NAMES=( + [vps]=VPS + [cement]=Cement + [parsecc]=ParsecC + [songbooks]=Songbooks + [mediator]=Mediator + [byopds]=BYOPDS + [pires]=Pires +) + +declare -A ML_FOR_PROJECT=( + [cement]=byopds + [byopds]=byopds + [guile-pds]=byopds + [parsecc]=mediator + [parseclj]=mediator + [x-bindgen]=mediator + [mediator]=mediator + [libedn]=mediator + [eq]=mediator + [songbooks]=songbooks + [guile-clap]=songbooks + [pires]=pires +) + +declare -A PREFIX_FOR_PROJECT=( + [guix]="$HOME/dev/guix/guix" +) + +declare -A GUILE_PROJECTS=( + [guile-quickcheck]=1 + [guile-pds]=1 + [guile-clap]=1 + [songbooks]=1 +) + +declare -A RUST_PROJECT=( + [spalc]=1 + [libedn]=1 + [x-bindgen]=1 +) + +declare -A GUIX_PROJECT_NO_CHANNEL=( + [vps]=1 +) + +ln-all() { + LN_FN="$1" + shift + for f in "$@"; do + "$LN_FN" "$f" + done +} + +ln-all ln-texinfo-autotools-guix-project guile-quickcheck guile-pds guile-clap cement songbooks +ln-all ln-sphinx-autotools-guix-project libedn x-bindgen eq mediator +# ln-all ln-scribble-autotools-guix-project +ln-all ln-antora-autotools-guix-project byopds spalc +ln-all ln-makefile-only-guix-project vps pires remembering +ln-all ln-description-foreign-project guix parsecc +ln-all ln-bare-project parseclj \ + boneco \ + brinquedoteca \ + casa-do-caminho \ + dotfiles \ + euandreh-guix-channel \ + music \ + pdfs-da-d-maria \ + swift2nix \ + swift2nix-demo \ + cargo2nix \ + cargo2nix-demo \ + website + +popd > /dev/null || exit 1 diff --git a/sh/fzf.sh b/sh/fzf.sh new file mode 100644 index 0000000..0496f23 --- /dev/null +++ b/sh/fzf.sh @@ -0,0 +1,69 @@ +#!/bin/sh + +# shellcheck source=/dev/null +. "$(fzf-share)/completion.bash" +# Disable fzf key-bindings +# readline > fzf +# . "$(fzf-share)/key-bindings.bash" + +export FZF_TMUX=1 +export FZF_CTRL_T_OPTS=' + --preview "(cat {} || tree -C {}) 2> /dev/null" + --select-1 + --exit-0 +' + +export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"' + +fzg() { + fn=$(git grep -n "$1" | \ + cut -d: -f -2 | \ + fzf-tmux --select-1 \ + --exit-0 \ + --preview "echo {} | \ + cut -d: -f1 | \ + xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) ' + (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print } + NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print } + ' %") + if [ -n "$fn" ]; then + f="$(echo "$fn" | cut -d: -f1)" + n="$(echo "$fn" | cut -d: -f2)" + # shellcheck disable=2068 + history -s fzg $@ + history -s vi "+$n" "$f" + vi "+$n" "$f" + fi +} + +f() { + profile="$(pwd | sed -e 's_/_:_g')" + file="$(git ls-files | remembering -p "$profile" -c "fzf-tmux --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" + if [ -n "$file" ]; then + # shellcheck disable=2068 + history -s f $@ + history -s "$1" "$file" + "$1" "$file" + fi +} + +V_FILES=' +Sync/TODOs.md +tmp/scratch.txt +annex/txt/things.md +annex/bin/misc/git/mrconfig.ini +archive/vid/playlist.txt +dev/libre/others/dinheiros/money.ledger +' + +v() { + # I want to keep the pre-defined order + f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" + if [ -n "$f" ]; then + history -s v "$@" + # shellcheck disable=2088 + history -s vi "~/$f" + echo "$f" + vi "$HOME/$f" + fi +} diff --git a/sh/git-prompt.sh b/sh/git-prompt.sh new file mode 100644 index 0000000..79fd908 --- /dev/null +++ b/sh/git-prompt.sh @@ -0,0 +1,589 @@ +# Taken from: +# curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > bash/git-prompt.sh + +# bash/zsh git prompt support +# +# Copyright (C) 2006,2007 Shawn O. Pearce +# Distributed under the GNU General Public License, version 2.0. +# +# This script allows you to see repository status in your prompt. +# +# To enable: +# +# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). +# 2) Add the following line to your .bashrc/.zshrc: +# source ~/.git-prompt.sh +# 3a) Change your PS1 to call __git_ps1 as +# command-substitution: +# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' +# ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' +# the optional argument will be used as format string. +# 3b) Alternatively, for a slightly faster prompt, __git_ps1 can +# be used for PROMPT_COMMAND in Bash or for precmd() in Zsh +# with two parameters,
     and , which are strings
    +#        you would put in $PS1 before and after the status string
    +#        generated by the git-prompt machinery.  e.g.
    +#        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
    +#          will show username, at-sign, host, colon, cwd, then
    +#          various status string, followed by dollar and SP, as
    +#          your prompt.
    +#        ZSH:  precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
    +#          will show username, pipe, then various status string,
    +#          followed by colon, cwd, dollar and SP, as your prompt.
    +#        Optionally, you can supply a third argument with a printf
    +#        format string to finetune the output of the branch status
    +#
    +# The repository status will be displayed only if you are currently in a
    +# git repository. The %s token is the placeholder for the shown status.
    +#
    +# The prompt status always includes the current branch name.
    +#
    +# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
    +# unstaged (*) and staged (+) changes will be shown next to the branch
    +# name.  You can configure this per-repository with the
    +# bash.showDirtyState variable, which defaults to true once
    +# GIT_PS1_SHOWDIRTYSTATE is enabled.
    +#
    +# You can also see if currently something is stashed, by setting
    +# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
    +# then a '$' will be shown next to the branch name.
    +#
    +# If you would like to see if there're untracked files, then you can set
    +# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
    +# files, then a '%' will be shown next to the branch name.  You can
    +# configure this per-repository with the bash.showUntrackedFiles
    +# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
    +# enabled.
    +#
    +# If you would like to see the difference between HEAD and its upstream,
    +# set GIT_PS1_SHOWUPSTREAM="auto".  A "<" indicates you are behind, ">"
    +# indicates you are ahead, "<>" indicates you have diverged and "="
    +# indicates that there is no difference. You can further control
    +# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
    +# of values:
    +#
    +#     verbose       show number of commits ahead/behind (+/-) upstream
    +#     name          if verbose, then also show the upstream abbrev name
    +#     legacy        don't use the '--count' option available in recent
    +#                   versions of git-rev-list
    +#     git           always compare HEAD to @{upstream}
    +#     svn           always compare HEAD to your SVN upstream
    +#
    +# You can change the separator between the branch name and the above
    +# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
    +# is SP.
    +#
    +# When there is an in-progress operation such as a merge, rebase,
    +# revert, cherry-pick, or bisect, the prompt will include information
    +# related to the operation, often in the form "|".
    +#
    +# When the repository has a sparse-checkout, a notification of the form
    +# "|SPARSE" will be included in the prompt.  This can be shortened to a
    +# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
    +# by setting GIT_PS1_OMITSPARSESTATE.
    +#
    +# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
    +# find one, or @{upstream} otherwise.  Once you have set
    +# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
    +# setting the bash.showUpstream config variable.
    +#
    +# If you would like to see more information about the identity of
    +# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
    +# to one of these values:
    +#
    +#     contains      relative to newer annotated tag (v1.6.3.2~35)
    +#     branch        relative to newer tag or branch (master~4)
    +#     describe      relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
    +#     tag           relative to any older tag (v1.6.3.1-13-gdd42c2f)
    +#     default       exactly matching tag
    +#
    +# If you would like a colored hint about the current dirty state, set
    +# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
    +# the colored output of "git status -sb" and are available only when
    +# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
    +# but always available in Zsh.
    +#
    +# If you would like __git_ps1 to do nothing in the case when the current
    +# directory is set up to be ignored by git, then set
    +# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
    +# repository level by setting bash.hideIfPwdIgnored to "false".
    +
    +# check whether printf supports -v
    +__git_printf_supports_v=
    +printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
    +
    +# stores the divergence from upstream in $p
    +# used by GIT_PS1_SHOWUPSTREAM
    +__git_ps1_show_upstream ()
    +{
    +	local key value
    +	local svn_remote svn_url_pattern count n
    +	local upstream=git legacy="" verbose="" name=""
    +
    +	svn_remote=()
    +	# get some config options from git-config
    +	local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
    +	while read -r key value; do
    +		case "$key" in
    +		bash.showupstream)
    +			GIT_PS1_SHOWUPSTREAM="$value"
    +			if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
    +				p=""
    +				return
    +			fi
    +			;;
    +		svn-remote.*.url)
    +			svn_remote[$((${#svn_remote[@]} + 1))]="$value"
    +			svn_url_pattern="$svn_url_pattern\\|$value"
    +			upstream=svn+git # default upstream is SVN if available, else git
    +			;;
    +		esac
    +	done <<< "$output"
    +
    +	# parse configuration values
    +	local option
    +	for option in ${GIT_PS1_SHOWUPSTREAM}; do
    +		case "$option" in
    +		git|svn) upstream="$option" ;;
    +		verbose) verbose=1 ;;
    +		legacy)  legacy=1  ;;
    +		name)    name=1 ;;
    +		esac
    +	done
    +
    +	# Find our upstream
    +	case "$upstream" in
    +	git)    upstream="@{upstream}" ;;
    +	svn*)
    +		# get the upstream from the "git-svn-id: ..." in a commit message
    +		# (git-svn uses essentially the same procedure internally)
    +		local -a svn_upstream
    +		svn_upstream=($(git log --first-parent -1 \
    +					--grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
    +		if [[ 0 -ne ${#svn_upstream[@]} ]]; then
    +			svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
    +			svn_upstream=${svn_upstream%@*}
    +			local n_stop="${#svn_remote[@]}"
    +			for ((n=1; n <= n_stop; n++)); do
    +				svn_upstream=${svn_upstream#${svn_remote[$n]}}
    +			done
    +
    +			if [[ -z "$svn_upstream" ]]; then
    +				# default branch name for checkouts with no layout:
    +				upstream=${GIT_SVN_ID:-git-svn}
    +			else
    +				upstream=${svn_upstream#/}
    +			fi
    +		elif [[ "svn+git" = "$upstream" ]]; then
    +			upstream="@{upstream}"
    +		fi
    +		;;
    +	esac
    +
    +	# Find how many commits we are ahead/behind our upstream
    +	if [[ -z "$legacy" ]]; then
    +		count="$(git rev-list --count --left-right \
    +				"$upstream"...HEAD 2>/dev/null)"
    +	else
    +		# produce equivalent output to --count for older versions of git
    +		local commits
    +		if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
    +		then
    +			local commit behind=0 ahead=0
    +			for commit in $commits
    +			do
    +				case "$commit" in
    +				"<"*) ((behind++)) ;;
    +				*)    ((ahead++))  ;;
    +				esac
    +			done
    +			count="$behind	$ahead"
    +		else
    +			count=""
    +		fi
    +	fi
    +
    +	# calculate the result
    +	if [[ -z "$verbose" ]]; then
    +		case "$count" in
    +		"") # no upstream
    +			p="" ;;
    +		"0	0") # equal to upstream
    +			p="=" ;;
    +		"0	"*) # ahead of upstream
    +			p=">" ;;
    +		*"	0") # behind upstream
    +			p="<" ;;
    +		*)	    # diverged from upstream
    +			p="<>" ;;
    +		esac
    +	else
    +		case "$count" in
    +		"") # no upstream
    +			p="" ;;
    +		"0	0") # equal to upstream
    +			p=" u=" ;;
    +		"0	"*) # ahead of upstream
    +			p=" u+${count#0	}" ;;
    +		*"	0") # behind upstream
    +			p=" u-${count%	0}" ;;
    +		*)	    # diverged from upstream
    +			p=" u+${count#*	}-${count%	*}" ;;
    +		esac
    +		if [[ -n "$count" && -n "$name" ]]; then
    +			__git_ps1_upstream_name=$(git rev-parse \
    +				--abbrev-ref "$upstream" 2>/dev/null)
    +			if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    +				p="$p \${__git_ps1_upstream_name}"
    +			else
    +				p="$p ${__git_ps1_upstream_name}"
    +				# not needed anymore; keep user's
    +				# environment clean
    +				unset __git_ps1_upstream_name
    +			fi
    +		fi
    +	fi
    +
    +}
    +
    +# Helper function that is meant to be called from __git_ps1.  It
    +# injects color codes into the appropriate gitstring variables used
    +# to build a gitstring.
    +__git_ps1_colorize_gitstring ()
    +{
    +	if [[ -n ${ZSH_VERSION-} ]]; then
    +		local c_red='%F{red}'
    +		local c_green='%F{green}'
    +		local c_lblue='%F{blue}'
    +		local c_clear='%f'
    +	else
    +		# Using \[ and \] around colors is necessary to prevent
    +		# issues with command line editing/browsing/completion!
    +		local c_red='\[\e[31m\]'
    +		local c_green='\[\e[32m\]'
    +		local c_lblue='\[\e[1;34m\]'
    +		local c_clear='\[\e[0m\]'
    +	fi
    +	local bad_color=$c_red
    +	local ok_color=$c_green
    +	local flags_color="$c_lblue"
    +
    +	local branch_color=""
    +	if [ $detached = no ]; then
    +		branch_color="$ok_color"
    +	else
    +		branch_color="$bad_color"
    +	fi
    +	c="$branch_color$c"
    +
    +	z="$c_clear$z"
    +	if [ "$w" = "*" ]; then
    +		w="$bad_color$w"
    +	fi
    +	if [ -n "$i" ]; then
    +		i="$ok_color$i"
    +	fi
    +	if [ -n "$s" ]; then
    +		s="$flags_color$s"
    +	fi
    +	if [ -n "$u" ]; then
    +		u="$bad_color$u"
    +	fi
    +	r="$c_clear$r"
    +}
    +
    +# Helper function to read the first line of a file into a variable.
    +# __git_eread requires 2 arguments, the file path and the name of the
    +# variable, in that order.
    +__git_eread ()
    +{
    +	test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
    +}
    +
    +# see if a cherry-pick or revert is in progress, if the user has committed a
    +# conflict resolution with 'git commit' in the middle of a sequence of picks or
    +# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
    +# the todo file.
    +__git_sequencer_status ()
    +{
    +	local todo
    +	if test -f "$g/CHERRY_PICK_HEAD"
    +	then
    +		r="|CHERRY-PICKING"
    +		return 0;
    +	elif test -f "$g/REVERT_HEAD"
    +	then
    +		r="|REVERTING"
    +		return 0;
    +	elif __git_eread "$g/sequencer/todo" todo
    +	then
    +		case "$todo" in
    +		p[\ \	]|pick[\ \	]*)
    +			r="|CHERRY-PICKING"
    +			return 0
    +		;;
    +		revert[\ \	]*)
    +			r="|REVERTING"
    +			return 0
    +		;;
    +		esac
    +	fi
    +	return 1
    +}
    +
    +# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
    +# when called from PS1 using command substitution
    +# in this mode it prints text to add to bash PS1 prompt (includes branch name)
    +#
    +# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
    +# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
    +# when two arguments are given, the first is prepended and the second appended
    +# to the state string when assigned to PS1.
    +# The optional third parameter will be used as printf format string to further
    +# customize the output of the git-status string.
    +# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
    +__git_ps1 ()
    +{
    +	# preserve exit status
    +	local exit=$?
    +	local pcmode=no
    +	local detached=no
    +	local ps1pc_start='\u@\h:\w '
    +	local ps1pc_end='\$ '
    +	local printf_format=' (%s)'
    +
    +	case "$#" in
    +		2|3)	pcmode=yes
    +			ps1pc_start="$1"
    +			ps1pc_end="$2"
    +			printf_format="${3:-$printf_format}"
    +			# set PS1 to a plain prompt so that we can
    +			# simply return early if the prompt should not
    +			# be decorated
    +			PS1="$ps1pc_start$ps1pc_end"
    +		;;
    +		0|1)	printf_format="${1:-$printf_format}"
    +		;;
    +		*)	return $exit
    +		;;
    +	esac
    +
    +	# ps1_expanded:  This variable is set to 'yes' if the shell
    +	# subjects the value of PS1 to parameter expansion:
    +	#
    +	#   * bash does unless the promptvars option is disabled
    +	#   * zsh does not unless the PROMPT_SUBST option is set
    +	#   * POSIX shells always do
    +	#
    +	# If the shell would expand the contents of PS1 when drawing
    +	# the prompt, a raw ref name must not be included in PS1.
    +	# This protects the user from arbitrary code execution via
    +	# specially crafted ref names.  For example, a ref named
    +	# 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the
    +	# shell to execute 'sudo rm -rf /' when the prompt is drawn.
    +	#
    +	# Instead, the ref name should be placed in a separate global
    +	# variable (in the __git_ps1_* namespace to avoid colliding
    +	# with the user's environment) and that variable should be
    +	# referenced from PS1.  For example:
    +	#
    +	#     __git_ps1_foo=$(do_something_to_get_ref_name)
    +	#     PS1="...stuff...\${__git_ps1_foo}...stuff..."
    +	#
    +	# If the shell does not expand the contents of PS1, the raw
    +	# ref name must be included in PS1.
    +	#
    +	# The value of this variable is only relevant when in pcmode.
    +	#
    +	# Assume that the shell follows the POSIX specification and
    +	# expands PS1 unless determined otherwise.  (This is more
    +	# likely to be correct if the user has a non-bash, non-zsh
    +	# shell and safer than the alternative if the assumption is
    +	# incorrect.)
    +	#
    +	local ps1_expanded=yes
    +	[ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
    +	[ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no
    +
    +	local repo_info rev_parse_exit_code
    +	repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
    +		--is-bare-repository --is-inside-work-tree \
    +		--short HEAD 2>/dev/null)"
    +	rev_parse_exit_code="$?"
    +
    +	if [ -z "$repo_info" ]; then
    +		return $exit
    +	fi
    +
    +	local short_sha=""
    +	if [ "$rev_parse_exit_code" = "0" ]; then
    +		short_sha="${repo_info##*$'\n'}"
    +		repo_info="${repo_info%$'\n'*}"
    +	fi
    +	local inside_worktree="${repo_info##*$'\n'}"
    +	repo_info="${repo_info%$'\n'*}"
    +	local bare_repo="${repo_info##*$'\n'}"
    +	repo_info="${repo_info%$'\n'*}"
    +	local inside_gitdir="${repo_info##*$'\n'}"
    +	local g="${repo_info%$'\n'*}"
    +
    +	if [ "true" = "$inside_worktree" ] &&
    +	   [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
    +	   [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
    +	   git check-ignore -q .
    +	then
    +		return $exit
    +	fi
    +
    +	local sparse=""
    +	if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    +	   [ -z "${GIT_PS1_OMITSPARSESTATE}" ] &&
    +	   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    +		sparse="|SPARSE"
    +	fi
    +
    +	local r=""
    +	local b=""
    +	local step=""
    +	local total=""
    +	if [ -d "$g/rebase-merge" ]; then
    +		__git_eread "$g/rebase-merge/head-name" b
    +		__git_eread "$g/rebase-merge/msgnum" step
    +		__git_eread "$g/rebase-merge/end" total
    +		r="|REBASE"
    +	else
    +		if [ -d "$g/rebase-apply" ]; then
    +			__git_eread "$g/rebase-apply/next" step
    +			__git_eread "$g/rebase-apply/last" total
    +			if [ -f "$g/rebase-apply/rebasing" ]; then
    +				__git_eread "$g/rebase-apply/head-name" b
    +				r="|REBASE"
    +			elif [ -f "$g/rebase-apply/applying" ]; then
    +				r="|AM"
    +			else
    +				r="|AM/REBASE"
    +			fi
    +		elif [ -f "$g/MERGE_HEAD" ]; then
    +			r="|MERGING"
    +		elif __git_sequencer_status; then
    +			:
    +		elif [ -f "$g/BISECT_LOG" ]; then
    +			r="|BISECTING"
    +		fi
    +
    +		if [ -n "$b" ]; then
    +			:
    +		elif [ -h "$g/HEAD" ]; then
    +			# symlink symbolic ref
    +			b="$(git symbolic-ref HEAD 2>/dev/null)"
    +		else
    +			local head=""
    +			if ! __git_eread "$g/HEAD" head; then
    +				return $exit
    +			fi
    +			# is it a symbolic ref?
    +			b="${head#ref: }"
    +			if [ "$head" = "$b" ]; then
    +				detached=yes
    +				b="$(
    +				case "${GIT_PS1_DESCRIBE_STYLE-}" in
    +				(contains)
    +					git describe --contains HEAD ;;
    +				(branch)
    +					git describe --contains --all HEAD ;;
    +				(tag)
    +					git describe --tags HEAD ;;
    +				(describe)
    +					git describe HEAD ;;
    +				(* | default)
    +					git describe --tags --exact-match HEAD ;;
    +				esac 2>/dev/null)" ||
    +
    +				b="$short_sha..."
    +				b="($b)"
    +			fi
    +		fi
    +	fi
    +
    +	if [ -n "$step" ] && [ -n "$total" ]; then
    +		r="$r $step/$total"
    +	fi
    +
    +	local w=""
    +	local i=""
    +	local s=""
    +	local u=""
    +	local h=""
    +	local c=""
    +	local p=""
    +
    +	if [ "true" = "$inside_gitdir" ]; then
    +		if [ "true" = "$bare_repo" ]; then
    +			c="BARE:"
    +		else
    +			b="GIT_DIR!"
    +		fi
    +	elif [ "true" = "$inside_worktree" ]; then
    +		if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
    +		   [ "$(git config --bool bash.showDirtyState)" != "false" ]
    +		then
    +			git diff --no-ext-diff --quiet || w="*"
    +			git diff --no-ext-diff --cached --quiet || i="+"
    +			if [ -z "$short_sha" ] && [ -z "$i" ]; then
    +				i="#"
    +			fi
    +		fi
    +		if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
    +		   git rev-parse --verify --quiet refs/stash >/dev/null
    +		then
    +			s="$"
    +		fi
    +
    +		if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
    +		   [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
    +		   git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
    +		then
    +			u="%${ZSH_VERSION+%}"
    +		fi
    +
    +		if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    +		   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    +			h="?"
    +		fi
    +
    +		if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
    +			__git_ps1_show_upstream
    +		fi
    +	fi
    +
    +	local z="${GIT_PS1_STATESEPARATOR-" "}"
    +
    +	# NO color option unless in PROMPT_COMMAND mode or it's Zsh
    +	if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
    +		if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
    +			__git_ps1_colorize_gitstring
    +		fi
    +	fi
    +
    +	b=${b##refs/heads/}
    +	if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    +		__git_ps1_branch_name=$b
    +		b="\${__git_ps1_branch_name}"
    +	fi
    +
    +	local f="$h$w$i$s$u"
    +	local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
    +
    +	if [ $pcmode = yes ]; then
    +		if [ "${__git_printf_supports_v-}" != yes ]; then
    +			gitstring=$(printf -- "$printf_format" "$gitstring")
    +		else
    +			printf -v gitstring -- "$printf_format" "$gitstring"
    +		fi
    +		PS1="$ps1pc_start$gitstring$ps1pc_end"
    +	else
    +		printf -- "$printf_format" "$gitstring"
    +	fi
    +
    +	return $exit
    +}
    diff --git a/sh/mr-execute.sh b/sh/mr-execute.sh
    new file mode 100644
    index 0000000..fd2112e
    --- /dev/null
    +++ b/sh/mr-execute.sh
    @@ -0,0 +1,17 @@
    +#!/usr/bin/env bash
    +
    +pushd ~/ > /dev/null || exit 1
    +
    +AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt"
    +mkdir -p "$(dirname "$AUTOJUMP_TXT")"
    +touch "$AUTOJUMP_TXT"
    +
    +mr checkout > /dev/null
    +
    +mkdir -p ~/.emacs.d/.cache/
    +(mr inject2 3>&2 2>&1 1>&3) 2>/dev/null | \
    +  sed -E 's/\/home\/andreh/~/'          | \
    +  awk '{print "\""$1"/""\""}'           | \
    +  cat <(printf "(\\n") - <(printf ")") > ~/.emacs.d/.cache/projectile-bookmarks.eld
    +
    +popd > /dev/null || exit 1
    diff --git a/sh/ps1.sh b/sh/ps1.sh
    new file mode 100644
    index 0000000..0746a83
    --- /dev/null
    +++ b/sh/ps1.sh
    @@ -0,0 +1,98 @@
    +#!/bin/sh
    +
    +error_marker() {
    +  # shellcheck disable=2181
    +  if [ "$?" != 0 ]; then
    +    redb ' (!!) ' | tr -d '\n'
    +  fi
    +}
    +
    +timestamp() {
    +  blacki '\T' | tr -d '\n'
    +}
    +
    +path() {
    +  yellowb '\w/' | tr -d '\n'
    +}
    +
    +repo_status() {
    +  inner="$(__git_ps1 "%s")"
    +  if [ -n "$inner" ]; then
    +    OUT="$(git status --short --branch --porcelain 2>/dev/null)"
    +    BRANCH_LINE="$(echo "$OUT" | head -n 1)"
    +    DIFF_LINES="$(echo "$OUT" | tail -n +2)"
    +
    +    if echo "$BRANCH_LINE" | grep -q 'ahead'; then
    +      IS_AHEAD=1
    +    fi
    +    if echo "$BRANCH_LINE" | grep -q 'behind'; then
    +      IS_BEHIND=1
    +    fi
    +
    +    if [ -n "$IS_AHEAD" ] && [ -n "$IS_BEHIND" ]; then
    +      BRANCH_MARKER="^^^ $inner vvv"
    +    elif [ -n "$IS_AHEAD" ]; then
    +      BRANCH_MARKER="^ $inner ^"
    +    elif [ -n "$IS_BEHIND" ]; then
    +      BRANCH_MARKER="v $inner v"
    +    else
    +      BRANCH_MARKER="$inner"
    +    fi
    +
    +    if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then
    +      HAS_DIFF=1
    +    fi
    +
    +    if echo "$DIFF_LINES" | grep -q '^[?][?]'; then
    +      HAS_UNTRACKED=1
    +    fi
    +
    +    if [ -n "$HAS_DIFF" ]; then
    +      COLOR_FN=redb
    +      LINE="{$BRANCH_MARKER}"
    +    elif [ -n "$IS_AHEAD" ] || [ -n "$IS_BEHIND" ]; then
    +      COLOR_FN=bluei
    +      LINE="[$BRANCH_MARKER]"
    +    elif [ -n "$HAS_UNTRACKED" ]; then
    +      COLOR_FN=lightblue
    +      LINE="($BRANCH_MARKER)"
    +    else
    +      COLOR_FN=green
    +      LINE="($BRANCH_MARKER)"
    +    fi
    +
    +    "$COLOR_FN" "$LINE" | tr -d '\n'
    +
    +    printf ' - '
    +    blacki "$(git rev-parse HEAD)" | tr -d '\n'
    +  fi
    +}
    +
    +guix_env() {
    +  if [ "$GUIX_ENVIRONMENT" != '' ]; then
    +    printf '\n'
    +    blacki '~> ' | tr -d '\n'
    +    purple 'guix environment ' | tr -d '\n'
    +    printf '('
    +    blueb "$GUIX_ENVIRONMENT" | tr -d '\n'
    +    printf ')'
    +  fi
    +}
    +
    +in_nix_shell() {
    +  if [ "$IN_NIX_SHELL" != '' ]; then
    +    printf '\n'
    +    blacki '~> ' | tr -d '\n'
    +    purpleb "$IN_NIX_SHELL " | tr -d '\n'
    +    purple 'nix-shell ' | tr -d '\n'
    +    printf '('
    +    # $name comes from the mkShell declaration
    +    # shellcheck disable=2154
    +    blueb "$name" | tr -d '\n'
    +    printf ')'
    +  fi
    +}
    +
    +PS1='`error_marker`'$(timestamp)' '$(path)' `repo_status``guix_env``in_nix_shell`
    +$ '
    +export PS1
    diff --git a/sh/reload.sh b/sh/reload.sh
    new file mode 100644
    index 0000000..d448607
    --- /dev/null
    +++ b/sh/reload.sh
    @@ -0,0 +1,8 @@
    +#!/bin/sh
    +# shellcheck disable=SC1090
    +
    +. ~/.bashrc
    +. "$DOTFILES/sh/x.sh"
    +. "$DOTFILES/sh/mr-execute.sh"
    +. "$DOTFILES/sh/fake-symlinks.sh"
    +. ~/annex/bin/misc/tmuxinator-templates.sh
    diff --git a/sh/symlinks.sh b/sh/symlinks.sh
    new file mode 100644
    index 0000000..8cb56a3
    --- /dev/null
    +++ b/sh/symlinks.sh
    @@ -0,0 +1,72 @@
    +#!/bin/sh
    +
    +upsert_dir_symlink() {
    +  from="$1"
    +  to="$2"
    +  { [ -d "$to" ] || [ -L "$to" ]; } || {
    +    ln -s "$from" "$to"
    +  }
    +}
    +
    +upsert_dir_symlink "$HOME/dev/libre/others/borg/config" ~/.config/borg
    +
    +ln -fs "$DOTFILES/sh/bashrc.sh"               ~/.bashrc
    +ln -fs "$DOTFILES/sh/bash_profile.sh"         ~/.bash_profile
    +ln -fs "$DOTFILES/git/gitattributes"            ~/.gitattributes
    +ln -fs "$DOTFILES/git/gitignore"                ~/.gitignore_global
    +ln -fs "$DOTFILES/git/gitconfig.ini"            ~/.gitconfig
    +ln -fs "$DOTFILES/sbclrc.lisp"                  ~/.sbclrc
    +ln -fs "$DOTFILES/inputrc.conf"                 ~/.inputrc
    +ln -fs "$DOTFILES/Xmodmap.conf"                 ~/.Xmodmap
    +ln -fs "$DOTFILES/nixos/npmrc.sh"             ~/.npmrc
    +
    +mkdir -p ~/tmp/
    +touch ~/tmp/scratch.txt
    +
    +mkdir -p ~/.gnupg
    +ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf"       ~/.gnupg/gpg.conf
    +ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf
    +ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini"   ~/.mrconfig
    +
    +mkdir -p ~/.newsboat
    +ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls
    +
    +MEDIA_PREFIX=/run/media/andreh
    +upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD"      ~/UTCLOUD
    +upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER"      ~/SNEAKER
    +
    +## tmux
    +ln -fs "$DOTFILES/tmux.conf"                    ~/.tmux.conf
    +
    +## Emacs
    +mkdir -p "$HOME/.emacs.d/private/layers/"
    +ln -fs "$DOTFILES/spacemacs.el"                 ~/.spacemacs
    +
    +## vi
    +ln -fs "$DOTFILES/exrc.conf"                    ~/.exrc
    +
    +## xmonad
    +mkdir -p ~/.xmonad
    +ln -fs "$DOTFILES/xmonad/xsession.sh"           ~/.xsession
    +ln -fs "$DOTFILES/xmonad/xmonad.hs"             ~/.xmonad/xmonad.hs
    +ln -fs "$DOTFILES/xmonad/xmobar.hs"             ~/.xmobarrc
    +
    +## Mercurial
    +ln -fs "${DOTFILES}/hgrc.ini"                   ~/.hgrc
    +
    +## ranger
    +mkdir -p ~/.config/ranger/
    +ln -fs "${DOTFILES}/ranger.conf"                ~/.config/ranger/rc.conf
    +
    +## nu
    +ln -fs "$HOME/annex/bin/misc/nurc.sh"           ~/.nurc
    +
    +## Guix
    +ln -fs "$DOTFILES/guix/channels.scm"            ~/.config/guix/channels.scm
    +
    +## pimutils
    +mkdir -p ~/.config/vdirsyncer/ ~/.config/khal
    +ln -fs "$HOME/annex/bin/misc/pimutils/vdirsyncer.conf" ~/.config/vdirsyncer/config
    +ln -fs "$HOME/annex/bin/misc/pimutils/khal.conf"       ~/.config/khal/config
    +
    +ln -fs "$DOTFILES/infokey" ~/.infokey
    diff --git a/sh/templates/..git/hooks/pre-push b/sh/templates/..git/hooks/pre-push
    new file mode 120000
    index 0000000..a54ecd2
    --- /dev/null
    +++ b/sh/templates/..git/hooks/pre-push
    @@ -0,0 +1 @@
    +../../build-aux/ci/git-pre-push.sh.in
    \ No newline at end of file
    diff --git a/sh/templates/..gitignore b/sh/templates/..gitignore
    new file mode 100644
    index 0000000..88a8afc
    --- /dev/null
    +++ b/sh/templates/..gitignore
    @@ -0,0 +1,46 @@
    +# GNU Autotools
    +/Makefile.in
    +/INSTALL
    +
    +autom4te.cache
    +/autoscan.log
    +/autoscan-*.log
    +/aclocal.m4
    +/compile
    +/config.guess
    +/config.h.in
    +/config.log
    +/config.status
    +/config.sub
    +/configure
    +/configure~
    +/configure.scan
    +/depcomp
    +/install-sh
    +/missing
    +/stamp-h1
    +
    +/.deps/
    +/Makefile
    +/config.h
    +
    +/test-suite.log
    +
    +/build-aux/compile
    +/build-aux/depcomp
    +/build-aux/install-sh
    +/build-aux/install-sh~
    +/build-aux/missing
    +/build-aux/test-driver
    +/build-aux/texinfo.tex
    +
    +/build-aux/ci/git-pre-push.sh
    +
    +/$PROJECT-*.tar.gz
    +/$PROJECT-*.tar.gz.asc
    +/$PROJECT-*/
    +
    +/doc/dictionaries/all.txt
    +
    +
    +/public/
    diff --git a/sh/templates/.guix-authorizations b/sh/templates/.guix-authorizations
    new file mode 100644
    index 0000000..0221b5b
    --- /dev/null
    +++ b/sh/templates/.guix-authorizations
    @@ -0,0 +1,4 @@
    +(authorizations
    +  (version 0)
    +  (("5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060"
    +    (name "euandreh"))))
    diff --git a/sh/templates/.guix-channel b/sh/templates/.guix-channel
    new file mode 100644
    index 0000000..d4d0f36
    --- /dev/null
    +++ b/sh/templates/.guix-channel
    @@ -0,0 +1,4 @@
    +(channel
    +  (version 0)
    +  (directory "guix/channel")
    +  (keyring-reference "master"))
    diff --git a/sh/templates/AUTHORS b/sh/templates/AUTHORS
    new file mode 100644
    index 0000000..119be5e
    --- /dev/null
    +++ b/sh/templates/AUTHORS
    @@ -0,0 +1,2 @@
    +The AUTHORS file is auto-generated when releasing.
    +If you are seeing this, use 'git shortlog --summary --email' for a list of authors.
    diff --git a/sh/templates/COPYING b/sh/templates/COPYING
    new file mode 100644
    index 0000000..be3f7b2
    --- /dev/null
    +++ b/sh/templates/COPYING
    @@ -0,0 +1,661 @@
    +                    GNU AFFERO GENERAL PUBLIC LICENSE
    +                       Version 3, 19 November 2007
    +
    + Copyright (C) 2007 Free Software Foundation, Inc. 
    + Everyone is permitted to copy and distribute verbatim copies
    + of this license document, but changing it is not allowed.
    +
    +                            Preamble
    +
    +  The GNU Affero General Public License is a free, copyleft license for
    +software and other kinds of works, specifically designed to ensure
    +cooperation with the community in the case of network server software.
    +
    +  The licenses for most software and other practical works are designed
    +to take away your freedom to share and change the works.  By contrast,
    +our General Public Licenses are intended to guarantee your freedom to
    +share and change all versions of a program--to make sure it remains free
    +software for all its users.
    +
    +  When we speak of free software, we are referring to freedom, not
    +price.  Our General Public Licenses are designed to make sure that you
    +have the freedom to distribute copies of free software (and charge for
    +them if you wish), that you receive source code or can get it if you
    +want it, that you can change the software or use pieces of it in new
    +free programs, and that you know you can do these things.
    +
    +  Developers that use our General Public Licenses protect your rights
    +with two steps: (1) assert copyright on the software, and (2) offer
    +you this License which gives you legal permission to copy, distribute
    +and/or modify the software.
    +
    +  A secondary benefit of defending all users' freedom is that
    +improvements made in alternate versions of the program, if they
    +receive widespread use, become available for other developers to
    +incorporate.  Many developers of free software are heartened and
    +encouraged by the resulting cooperation.  However, in the case of
    +software used on network servers, this result may fail to come about.
    +The GNU General Public License permits making a modified version and
    +letting the public access it on a server without ever releasing its
    +source code to the public.
    +
    +  The GNU Affero General Public License is designed specifically to
    +ensure that, in such cases, the modified source code becomes available
    +to the community.  It requires the operator of a network server to
    +provide the source code of the modified version running there to the
    +users of that server.  Therefore, public use of a modified version, on
    +a publicly accessible server, gives the public access to the source
    +code of the modified version.
    +
    +  An older license, called the Affero General Public License and
    +published by Affero, was designed to accomplish similar goals.  This is
    +a different license, not a version of the Affero GPL, but Affero has
    +released a new version of the Affero GPL which permits relicensing under
    +this license.
    +
    +  The precise terms and conditions for copying, distribution and
    +modification follow.
    +
    +                       TERMS AND CONDITIONS
    +
    +  0. Definitions.
    +
    +  "This License" refers to version 3 of the GNU Affero General Public License.
    +
    +  "Copyright" also means copyright-like laws that apply to other kinds of
    +works, such as semiconductor masks.
    +
    +  "The Program" refers to any copyrightable work licensed under this
    +License.  Each licensee is addressed as "you".  "Licensees" and
    +"recipients" may be individuals or organizations.
    +
    +  To "modify" a work means to copy from or adapt all or part of the work
    +in a fashion requiring copyright permission, other than the making of an
    +exact copy.  The resulting work is called a "modified version" of the
    +earlier work or a work "based on" the earlier work.
    +
    +  A "covered work" means either the unmodified Program or a work based
    +on the Program.
    +
    +  To "propagate" a work means to do anything with it that, without
    +permission, would make you directly or secondarily liable for
    +infringement under applicable copyright law, except executing it on a
    +computer or modifying a private copy.  Propagation includes copying,
    +distribution (with or without modification), making available to the
    +public, and in some countries other activities as well.
    +
    +  To "convey" a work means any kind of propagation that enables other
    +parties to make or receive copies.  Mere interaction with a user through
    +a computer network, with no transfer of a copy, is not conveying.
    +
    +  An interactive user interface displays "Appropriate Legal Notices"
    +to the extent that it includes a convenient and prominently visible
    +feature that (1) displays an appropriate copyright notice, and (2)
    +tells the user that there is no warranty for the work (except to the
    +extent that warranties are provided), that licensees may convey the
    +work under this License, and how to view a copy of this License.  If
    +the interface presents a list of user commands or options, such as a
    +menu, a prominent item in the list meets this criterion.
    +
    +  1. Source Code.
    +
    +  The "source code" for a work means the preferred form of the work
    +for making modifications to it.  "Object code" means any non-source
    +form of a work.
    +
    +  A "Standard Interface" means an interface that either is an official
    +standard defined by a recognized standards body, or, in the case of
    +interfaces specified for a particular programming language, one that
    +is widely used among developers working in that language.
    +
    +  The "System Libraries" of an executable work include anything, other
    +than the work as a whole, that (a) is included in the normal form of
    +packaging a Major Component, but which is not part of that Major
    +Component, and (b) serves only to enable use of the work with that
    +Major Component, or to implement a Standard Interface for which an
    +implementation is available to the public in source code form.  A
    +"Major Component", in this context, means a major essential component
    +(kernel, window system, and so on) of the specific operating system
    +(if any) on which the executable work runs, or a compiler used to
    +produce the work, or an object code interpreter used to run it.
    +
    +  The "Corresponding Source" for a work in object code form means all
    +the source code needed to generate, install, and (for an executable
    +work) run the object code and to modify the work, including scripts to
    +control those activities.  However, it does not include the work's
    +System Libraries, or general-purpose tools or generally available free
    +programs which are used unmodified in performing those activities but
    +which are not part of the work.  For example, Corresponding Source
    +includes interface definition files associated with source files for
    +the work, and the source code for shared libraries and dynamically
    +linked subprograms that the work is specifically designed to require,
    +such as by intimate data communication or control flow between those
    +subprograms and other parts of the work.
    +
    +  The Corresponding Source need not include anything that users
    +can regenerate automatically from other parts of the Corresponding
    +Source.
    +
    +  The Corresponding Source for a work in source code form is that
    +same work.
    +
    +  2. Basic Permissions.
    +
    +  All rights granted under this License are granted for the term of
    +copyright on the Program, and are irrevocable provided the stated
    +conditions are met.  This License explicitly affirms your unlimited
    +permission to run the unmodified Program.  The output from running a
    +covered work is covered by this License only if the output, given its
    +content, constitutes a covered work.  This License acknowledges your
    +rights of fair use or other equivalent, as provided by copyright law.
    +
    +  You may make, run and propagate covered works that you do not
    +convey, without conditions so long as your license otherwise remains
    +in force.  You may convey covered works to others for the sole purpose
    +of having them make modifications exclusively for you, or provide you
    +with facilities for running those works, provided that you comply with
    +the terms of this License in conveying all material for which you do
    +not control copyright.  Those thus making or running the covered works
    +for you must do so exclusively on your behalf, under your direction
    +and control, on terms that prohibit them from making any copies of
    +your copyrighted material outside their relationship with you.
    +
    +  Conveying under any other circumstances is permitted solely under
    +the conditions stated below.  Sublicensing is not allowed; section 10
    +makes it unnecessary.
    +
    +  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    +
    +  No covered work shall be deemed part of an effective technological
    +measure under any applicable law fulfilling obligations under article
    +11 of the WIPO copyright treaty adopted on 20 December 1996, or
    +similar laws prohibiting or restricting circumvention of such
    +measures.
    +
    +  When you convey a covered work, you waive any legal power to forbid
    +circumvention of technological measures to the extent such circumvention
    +is effected by exercising rights under this License with respect to
    +the covered work, and you disclaim any intention to limit operation or
    +modification of the work as a means of enforcing, against the work's
    +users, your or third parties' legal rights to forbid circumvention of
    +technological measures.
    +
    +  4. Conveying Verbatim Copies.
    +
    +  You may convey verbatim copies of the Program's source code as you
    +receive it, in any medium, provided that you conspicuously and
    +appropriately publish on each copy an appropriate copyright notice;
    +keep intact all notices stating that this License and any
    +non-permissive terms added in accord with section 7 apply to the code;
    +keep intact all notices of the absence of any warranty; and give all
    +recipients a copy of this License along with the Program.
    +
    +  You may charge any price or no price for each copy that you convey,
    +and you may offer support or warranty protection for a fee.
    +
    +  5. Conveying Modified Source Versions.
    +
    +  You may convey a work based on the Program, or the modifications to
    +produce it from the Program, in the form of source code under the
    +terms of section 4, provided that you also meet all of these conditions:
    +
    +    a) The work must carry prominent notices stating that you modified
    +    it, and giving a relevant date.
    +
    +    b) The work must carry prominent notices stating that it is
    +    released under this License and any conditions added under section
    +    7.  This requirement modifies the requirement in section 4 to
    +    "keep intact all notices".
    +
    +    c) You must license the entire work, as a whole, under this
    +    License to anyone who comes into possession of a copy.  This
    +    License will therefore apply, along with any applicable section 7
    +    additional terms, to the whole of the work, and all its parts,
    +    regardless of how they are packaged.  This License gives no
    +    permission to license the work in any other way, but it does not
    +    invalidate such permission if you have separately received it.
    +
    +    d) If the work has interactive user interfaces, each must display
    +    Appropriate Legal Notices; however, if the Program has interactive
    +    interfaces that do not display Appropriate Legal Notices, your
    +    work need not make them do so.
    +
    +  A compilation of a covered work with other separate and independent
    +works, which are not by their nature extensions of the covered work,
    +and which are not combined with it such as to form a larger program,
    +in or on a volume of a storage or distribution medium, is called an
    +"aggregate" if the compilation and its resulting copyright are not
    +used to limit the access or legal rights of the compilation's users
    +beyond what the individual works permit.  Inclusion of a covered work
    +in an aggregate does not cause this License to apply to the other
    +parts of the aggregate.
    +
    +  6. Conveying Non-Source Forms.
    +
    +  You may convey a covered work in object code form under the terms
    +of sections 4 and 5, provided that you also convey the
    +machine-readable Corresponding Source under the terms of this License,
    +in one of these ways:
    +
    +    a) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by the
    +    Corresponding Source fixed on a durable physical medium
    +    customarily used for software interchange.
    +
    +    b) Convey the object code in, or embodied in, a physical product
    +    (including a physical distribution medium), accompanied by a
    +    written offer, valid for at least three years and valid for as
    +    long as you offer spare parts or customer support for that product
    +    model, to give anyone who possesses the object code either (1) a
    +    copy of the Corresponding Source for all the software in the
    +    product that is covered by this License, on a durable physical
    +    medium customarily used for software interchange, for a price no
    +    more than your reasonable cost of physically performing this
    +    conveying of source, or (2) access to copy the
    +    Corresponding Source from a network server at no charge.
    +
    +    c) Convey individual copies of the object code with a copy of the
    +    written offer to provide the Corresponding Source.  This
    +    alternative is allowed only occasionally and noncommercially, and
    +    only if you received the object code with such an offer, in accord
    +    with subsection 6b.
    +
    +    d) Convey the object code by offering access from a designated
    +    place (gratis or for a charge), and offer equivalent access to the
    +    Corresponding Source in the same way through the same place at no
    +    further charge.  You need not require recipients to copy the
    +    Corresponding Source along with the object code.  If the place to
    +    copy the object code is a network server, the Corresponding Source
    +    may be on a different server (operated by you or a third party)
    +    that supports equivalent copying facilities, provided you maintain
    +    clear directions next to the object code saying where to find the
    +    Corresponding Source.  Regardless of what server hosts the
    +    Corresponding Source, you remain obligated to ensure that it is
    +    available for as long as needed to satisfy these requirements.
    +
    +    e) Convey the object code using peer-to-peer transmission, provided
    +    you inform other peers where the object code and Corresponding
    +    Source of the work are being offered to the general public at no
    +    charge under subsection 6d.
    +
    +  A separable portion of the object code, whose source code is excluded
    +from the Corresponding Source as a System Library, need not be
    +included in conveying the object code work.
    +
    +  A "User Product" is either (1) a "consumer product", which means any
    +tangible personal property which is normally used for personal, family,
    +or household purposes, or (2) anything designed or sold for incorporation
    +into a dwelling.  In determining whether a product is a consumer product,
    +doubtful cases shall be resolved in favor of coverage.  For a particular
    +product received by a particular user, "normally used" refers to a
    +typical or common use of that class of product, regardless of the status
    +of the particular user or of the way in which the particular user
    +actually uses, or expects or is expected to use, the product.  A product
    +is a consumer product regardless of whether the product has substantial
    +commercial, industrial or non-consumer uses, unless such uses represent
    +the only significant mode of use of the product.
    +
    +  "Installation Information" for a User Product means any methods,
    +procedures, authorization keys, or other information required to install
    +and execute modified versions of a covered work in that User Product from
    +a modified version of its Corresponding Source.  The information must
    +suffice to ensure that the continued functioning of the modified object
    +code is in no case prevented or interfered with solely because
    +modification has been made.
    +
    +  If you convey an object code work under this section in, or with, or
    +specifically for use in, a User Product, and the conveying occurs as
    +part of a transaction in which the right of possession and use of the
    +User Product is transferred to the recipient in perpetuity or for a
    +fixed term (regardless of how the transaction is characterized), the
    +Corresponding Source conveyed under this section must be accompanied
    +by the Installation Information.  But this requirement does not apply
    +if neither you nor any third party retains the ability to install
    +modified object code on the User Product (for example, the work has
    +been installed in ROM).
    +
    +  The requirement to provide Installation Information does not include a
    +requirement to continue to provide support service, warranty, or updates
    +for a work that has been modified or installed by the recipient, or for
    +the User Product in which it has been modified or installed.  Access to a
    +network may be denied when the modification itself materially and
    +adversely affects the operation of the network or violates the rules and
    +protocols for communication across the network.
    +
    +  Corresponding Source conveyed, and Installation Information provided,
    +in accord with this section must be in a format that is publicly
    +documented (and with an implementation available to the public in
    +source code form), and must require no special password or key for
    +unpacking, reading or copying.
    +
    +  7. Additional Terms.
    +
    +  "Additional permissions" are terms that supplement the terms of this
    +License by making exceptions from one or more of its conditions.
    +Additional permissions that are applicable to the entire Program shall
    +be treated as though they were included in this License, to the extent
    +that they are valid under applicable law.  If additional permissions
    +apply only to part of the Program, that part may be used separately
    +under those permissions, but the entire Program remains governed by
    +this License without regard to the additional permissions.
    +
    +  When you convey a copy of a covered work, you may at your option
    +remove any additional permissions from that copy, or from any part of
    +it.  (Additional permissions may be written to require their own
    +removal in certain cases when you modify the work.)  You may place
    +additional permissions on material, added by you to a covered work,
    +for which you have or can give appropriate copyright permission.
    +
    +  Notwithstanding any other provision of this License, for material you
    +add to a covered work, you may (if authorized by the copyright holders of
    +that material) supplement the terms of this License with terms:
    +
    +    a) Disclaiming warranty or limiting liability differently from the
    +    terms of sections 15 and 16 of this License; or
    +
    +    b) Requiring preservation of specified reasonable legal notices or
    +    author attributions in that material or in the Appropriate Legal
    +    Notices displayed by works containing it; or
    +
    +    c) Prohibiting misrepresentation of the origin of that material, or
    +    requiring that modified versions of such material be marked in
    +    reasonable ways as different from the original version; or
    +
    +    d) Limiting the use for publicity purposes of names of licensors or
    +    authors of the material; or
    +
    +    e) Declining to grant rights under trademark law for use of some
    +    trade names, trademarks, or service marks; or
    +
    +    f) Requiring indemnification of licensors and authors of that
    +    material by anyone who conveys the material (or modified versions of
    +    it) with contractual assumptions of liability to the recipient, for
    +    any liability that these contractual assumptions directly impose on
    +    those licensors and authors.
    +
    +  All other non-permissive additional terms are considered "further
    +restrictions" within the meaning of section 10.  If the Program as you
    +received it, or any part of it, contains a notice stating that it is
    +governed by this License along with a term that is a further
    +restriction, you may remove that term.  If a license document contains
    +a further restriction but permits relicensing or conveying under this
    +License, you may add to a covered work material governed by the terms
    +of that license document, provided that the further restriction does
    +not survive such relicensing or conveying.
    +
    +  If you add terms to a covered work in accord with this section, you
    +must place, in the relevant source files, a statement of the
    +additional terms that apply to those files, or a notice indicating
    +where to find the applicable terms.
    +
    +  Additional terms, permissive or non-permissive, may be stated in the
    +form of a separately written license, or stated as exceptions;
    +the above requirements apply either way.
    +
    +  8. Termination.
    +
    +  You may not propagate or modify a covered work except as expressly
    +provided under this License.  Any attempt otherwise to propagate or
    +modify it is void, and will automatically terminate your rights under
    +this License (including any patent licenses granted under the third
    +paragraph of section 11).
    +
    +  However, if you cease all violation of this License, then your
    +license from a particular copyright holder is reinstated (a)
    +provisionally, unless and until the copyright holder explicitly and
    +finally terminates your license, and (b) permanently, if the copyright
    +holder fails to notify you of the violation by some reasonable means
    +prior to 60 days after the cessation.
    +
    +  Moreover, your license from a particular copyright holder is
    +reinstated permanently if the copyright holder notifies you of the
    +violation by some reasonable means, this is the first time you have
    +received notice of violation of this License (for any work) from that
    +copyright holder, and you cure the violation prior to 30 days after
    +your receipt of the notice.
    +
    +  Termination of your rights under this section does not terminate the
    +licenses of parties who have received copies or rights from you under
    +this License.  If your rights have been terminated and not permanently
    +reinstated, you do not qualify to receive new licenses for the same
    +material under section 10.
    +
    +  9. Acceptance Not Required for Having Copies.
    +
    +  You are not required to accept this License in order to receive or
    +run a copy of the Program.  Ancillary propagation of a covered work
    +occurring solely as a consequence of using peer-to-peer transmission
    +to receive a copy likewise does not require acceptance.  However,
    +nothing other than this License grants you permission to propagate or
    +modify any covered work.  These actions infringe copyright if you do
    +not accept this License.  Therefore, by modifying or propagating a
    +covered work, you indicate your acceptance of this License to do so.
    +
    +  10. Automatic Licensing of Downstream Recipients.
    +
    +  Each time you convey a covered work, the recipient automatically
    +receives a license from the original licensors, to run, modify and
    +propagate that work, subject to this License.  You are not responsible
    +for enforcing compliance by third parties with this License.
    +
    +  An "entity transaction" is a transaction transferring control of an
    +organization, or substantially all assets of one, or subdividing an
    +organization, or merging organizations.  If propagation of a covered
    +work results from an entity transaction, each party to that
    +transaction who receives a copy of the work also receives whatever
    +licenses to the work the party's predecessor in interest had or could
    +give under the previous paragraph, plus a right to possession of the
    +Corresponding Source of the work from the predecessor in interest, if
    +the predecessor has it or can get it with reasonable efforts.
    +
    +  You may not impose any further restrictions on the exercise of the
    +rights granted or affirmed under this License.  For example, you may
    +not impose a license fee, royalty, or other charge for exercise of
    +rights granted under this License, and you may not initiate litigation
    +(including a cross-claim or counterclaim in a lawsuit) alleging that
    +any patent claim is infringed by making, using, selling, offering for
    +sale, or importing the Program or any portion of it.
    +
    +  11. Patents.
    +
    +  A "contributor" is a copyright holder who authorizes use under this
    +License of the Program or a work on which the Program is based.  The
    +work thus licensed is called the contributor's "contributor version".
    +
    +  A contributor's "essential patent claims" are all patent claims
    +owned or controlled by the contributor, whether already acquired or
    +hereafter acquired, that would be infringed by some manner, permitted
    +by this License, of making, using, or selling its contributor version,
    +but do not include claims that would be infringed only as a
    +consequence of further modification of the contributor version.  For
    +purposes of this definition, "control" includes the right to grant
    +patent sublicenses in a manner consistent with the requirements of
    +this License.
    +
    +  Each contributor grants you a non-exclusive, worldwide, royalty-free
    +patent license under the contributor's essential patent claims, to
    +make, use, sell, offer for sale, import and otherwise run, modify and
    +propagate the contents of its contributor version.
    +
    +  In the following three paragraphs, a "patent license" is any express
    +agreement or commitment, however denominated, not to enforce a patent
    +(such as an express permission to practice a patent or covenant not to
    +sue for patent infringement).  To "grant" such a patent license to a
    +party means to make such an agreement or commitment not to enforce a
    +patent against the party.
    +
    +  If you convey a covered work, knowingly relying on a patent license,
    +and the Corresponding Source of the work is not available for anyone
    +to copy, free of charge and under the terms of this License, through a
    +publicly available network server or other readily accessible means,
    +then you must either (1) cause the Corresponding Source to be so
    +available, or (2) arrange to deprive yourself of the benefit of the
    +patent license for this particular work, or (3) arrange, in a manner
    +consistent with the requirements of this License, to extend the patent
    +license to downstream recipients.  "Knowingly relying" means you have
    +actual knowledge that, but for the patent license, your conveying the
    +covered work in a country, or your recipient's use of the covered work
    +in a country, would infringe one or more identifiable patents in that
    +country that you have reason to believe are valid.
    +
    +  If, pursuant to or in connection with a single transaction or
    +arrangement, you convey, or propagate by procuring conveyance of, a
    +covered work, and grant a patent license to some of the parties
    +receiving the covered work authorizing them to use, propagate, modify
    +or convey a specific copy of the covered work, then the patent license
    +you grant is automatically extended to all recipients of the covered
    +work and works based on it.
    +
    +  A patent license is "discriminatory" if it does not include within
    +the scope of its coverage, prohibits the exercise of, or is
    +conditioned on the non-exercise of one or more of the rights that are
    +specifically granted under this License.  You may not convey a covered
    +work if you are a party to an arrangement with a third party that is
    +in the business of distributing software, under which you make payment
    +to the third party based on the extent of your activity of conveying
    +the work, and under which the third party grants, to any of the
    +parties who would receive the covered work from you, a discriminatory
    +patent license (a) in connection with copies of the covered work
    +conveyed by you (or copies made from those copies), or (b) primarily
    +for and in connection with specific products or compilations that
    +contain the covered work, unless you entered into that arrangement,
    +or that patent license was granted, prior to 28 March 2007.
    +
    +  Nothing in this License shall be construed as excluding or limiting
    +any implied license or other defenses to infringement that may
    +otherwise be available to you under applicable patent law.
    +
    +  12. No Surrender of Others' Freedom.
    +
    +  If conditions are imposed on you (whether by court order, agreement or
    +otherwise) that contradict the conditions of this License, they do not
    +excuse you from the conditions of this License.  If you cannot convey a
    +covered work so as to satisfy simultaneously your obligations under this
    +License and any other pertinent obligations, then as a consequence you may
    +not convey it at all.  For example, if you agree to terms that obligate you
    +to collect a royalty for further conveying from those to whom you convey
    +the Program, the only way you could satisfy both those terms and this
    +License would be to refrain entirely from conveying the Program.
    +
    +  13. Remote Network Interaction; Use with the GNU General Public License.
    +
    +  Notwithstanding any other provision of this License, if you modify the
    +Program, your modified version must prominently offer all users
    +interacting with it remotely through a computer network (if your version
    +supports such interaction) an opportunity to receive the Corresponding
    +Source of your version by providing access to the Corresponding Source
    +from a network server at no charge, through some standard or customary
    +means of facilitating copying of software.  This Corresponding Source
    +shall include the Corresponding Source for any work covered by version 3
    +of the GNU General Public License that is incorporated pursuant to the
    +following paragraph.
    +
    +  Notwithstanding any other provision of this License, you have
    +permission to link or combine any covered work with a work licensed
    +under version 3 of the GNU General Public License into a single
    +combined work, and to convey the resulting work.  The terms of this
    +License will continue to apply to the part which is the covered work,
    +but the work with which it is combined will remain governed by version
    +3 of the GNU General Public License.
    +
    +  14. Revised Versions of this License.
    +
    +  The Free Software Foundation may publish revised and/or new versions of
    +the GNU Affero General Public License from time to time.  Such new versions
    +will be similar in spirit to the present version, but may differ in detail to
    +address new problems or concerns.
    +
    +  Each version is given a distinguishing version number.  If the
    +Program specifies that a certain numbered version of the GNU Affero General
    +Public License "or any later version" applies to it, you have the
    +option of following the terms and conditions either of that numbered
    +version or of any later version published by the Free Software
    +Foundation.  If the Program does not specify a version number of the
    +GNU Affero General Public License, you may choose any version ever published
    +by the Free Software Foundation.
    +
    +  If the Program specifies that a proxy can decide which future
    +versions of the GNU Affero General Public License can be used, that proxy's
    +public statement of acceptance of a version permanently authorizes you
    +to choose that version for the Program.
    +
    +  Later license versions may give you additional or different
    +permissions.  However, no additional obligations are imposed on any
    +author or copyright holder as a result of your choosing to follow a
    +later version.
    +
    +  15. Disclaimer of Warranty.
    +
    +  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    +APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    +HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    +OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    +THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    +PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    +IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    +ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    +
    +  16. Limitation of Liability.
    +
    +  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    +WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    +THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    +GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    +USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    +DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    +PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    +EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    +SUCH DAMAGES.
    +
    +  17. Interpretation of Sections 15 and 16.
    +
    +  If the disclaimer of warranty and limitation of liability provided
    +above cannot be given local legal effect according to their terms,
    +reviewing courts shall apply local law that most closely approximates
    +an absolute waiver of all civil liability in connection with the
    +Program, unless a warranty or assumption of liability accompanies a
    +copy of the Program in return for a fee.
    +
    +                     END OF TERMS AND CONDITIONS
    +
    +            How to Apply These Terms to Your New Programs
    +
    +  If you develop a new program, and you want it to be of the greatest
    +possible use to the public, the best way to achieve this is to make it
    +free software which everyone can redistribute and change under these terms.
    +
    +  To do so, attach the following notices to the program.  It is safest
    +to attach them to the start of each source file to most effectively
    +state the exclusion of warranty; and each file should have at least
    +the "copyright" line and a pointer to where the full notice is found.
    +
    +    
    +    Copyright (C)   
    +
    +    This program is free software: you can redistribute it and/or modify
    +    it under the terms of the GNU Affero General Public License as published by
    +    the Free Software Foundation, either version 3 of the License, or
    +    (at your option) any later version.
    +
    +    This program is distributed in the hope that it will be useful,
    +    but WITHOUT ANY WARRANTY; without even the implied warranty of
    +    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    +    GNU Affero General Public License for more details.
    +
    +    You should have received a copy of the GNU Affero General Public License
    +    along with this program.  If not, see .
    +
    +Also add information on how to contact you by electronic and paper mail.
    +
    +  If your software can interact with users remotely through a computer
    +network, you should also make sure that it provides a way for users to
    +get its source.  For example, if your program is a web application, its
    +interface could display a "Source" link that leads users to an archive
    +of the code.  There are many ways you could offer source, and different
    +solutions will be better for different programs; see section 13 for the
    +specific requirements.
    +
    +  You should also get your employer (if you work as a programmer) or school,
    +if any, to sign a "copyright disclaimer" for the program, if necessary.
    +For more information on this, and how to apply and follow the GNU AGPL, see
    +.
    diff --git a/sh/templates/ChangeLog b/sh/templates/ChangeLog
    new file mode 100644
    index 0000000..9001919
    --- /dev/null
    +++ b/sh/templates/ChangeLog
    @@ -0,0 +1,2 @@
    +The ChangeLog file is auto-generated when releasing.
    +If you are seeing this, use 'git log' for a detailed list of changes.
    diff --git a/sh/templates/HACKING.in b/sh/templates/HACKING.in
    new file mode 100644
    index 0000000..f8d72d9
    --- /dev/null
    +++ b/sh/templates/HACKING.in
    @@ -0,0 +1,5 @@
    +See the manual for useful hacking information, either by running
    +
    +  info -f doc/@PACKAGE@.info "Contributing"
    +
    +or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html
    diff --git a/sh/templates/INSTALL b/sh/templates/INSTALL
    new file mode 100644
    index 0000000..8865734
    --- /dev/null
    +++ b/sh/templates/INSTALL
    @@ -0,0 +1,368 @@
    +Installation Instructions
    +*************************
    +
    +   Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software
    +Foundation, Inc.
    +
    +   Copying and distribution of this file, with or without modification,
    +are permitted in any medium without royalty provided the copyright
    +notice and this notice are preserved.  This file is offered as-is,
    +without warranty of any kind.
    +
    +Basic Installation
    +==================
    +
    +   Briefly, the shell command './configure && make && make install'
    +should configure, build, and install this package.  The following
    +more-detailed instructions are generic; see the 'README' file for
    +instructions specific to this package.  Some packages provide this
    +'INSTALL' file but do not implement all of the features documented
    +below.  The lack of an optional feature in a given package is not
    +necessarily a bug.  More recommendations for GNU packages can be found
    +in *note Makefile Conventions: (standards)Makefile Conventions.
    +
    +   The 'configure' shell script attempts to guess correct values for
    +various system-dependent variables used during compilation.  It uses
    +those values to create a 'Makefile' in each directory of the package.
    +It may also create one or more '.h' files containing system-dependent
    +definitions.  Finally, it creates a shell script 'config.status' that
    +you can run in the future to recreate the current configuration, and a
    +file 'config.log' containing compiler output (useful mainly for
    +debugging 'configure').
    +
    +   It can also use an optional file (typically called 'config.cache' and
    +enabled with '--cache-file=config.cache' or simply '-C') that saves the
    +results of its tests to speed up reconfiguring.  Caching is disabled by
    +default to prevent problems with accidental use of stale cache files.
    +
    +   If you need to do unusual things to compile the package, please try
    +to figure out how 'configure' could check whether to do them, and mail
    +diffs or instructions to the address given in the 'README' so they can
    +be considered for the next release.  If you are using the cache, and at
    +some point 'config.cache' contains results you don't want to keep, you
    +may remove or edit it.
    +
    +   The file 'configure.ac' (or 'configure.in') is used to create
    +'configure' by a program called 'autoconf'.  You need 'configure.ac' if
    +you want to change it or regenerate 'configure' using a newer version of
    +'autoconf'.
    +
    +   The simplest way to compile this package is:
    +
    +  1. 'cd' to the directory containing the package's source code and type
    +     './configure' to configure the package for your system.
    +
    +     Running 'configure' might take a while.  While running, it prints
    +     some messages telling which features it is checking for.
    +
    +  2. Type 'make' to compile the package.
    +
    +  3. Optionally, type 'make check' to run any self-tests that come with
    +     the package, generally using the just-built uninstalled binaries.
    +
    +  4. Type 'make install' to install the programs and any data files and
    +     documentation.  When installing into a prefix owned by root, it is
    +     recommended that the package be configured and built as a regular
    +     user, and only the 'make install' phase executed with root
    +     privileges.
    +
    +  5. Optionally, type 'make installcheck' to repeat any self-tests, but
    +     this time using the binaries in their final installed location.
    +     This target does not install anything.  Running this target as a
    +     regular user, particularly if the prior 'make install' required
    +     root privileges, verifies that the installation completed
    +     correctly.
    +
    +  6. You can remove the program binaries and object files from the
    +     source code directory by typing 'make clean'.  To also remove the
    +     files that 'configure' created (so you can compile the package for
    +     a different kind of computer), type 'make distclean'.  There is
    +     also a 'make maintainer-clean' target, but that is intended mainly
    +     for the package's developers.  If you use it, you may have to get
    +     all sorts of other programs in order to regenerate files that came
    +     with the distribution.
    +
    +  7. Often, you can also type 'make uninstall' to remove the installed
    +     files again.  In practice, not all packages have tested that
    +     uninstallation works correctly, even though it is required by the
    +     GNU Coding Standards.
    +
    +  8. Some packages, particularly those that use Automake, provide 'make
    +     distcheck', which can by used by developers to test that all other
    +     targets like 'make install' and 'make uninstall' work correctly.
    +     This target is generally not run by end users.
    +
    +Compilers and Options
    +=====================
    +
    +   Some systems require unusual options for compilation or linking that
    +the 'configure' script does not know about.  Run './configure --help'
    +for details on some of the pertinent environment variables.
    +
    +   You can give 'configure' initial values for configuration parameters
    +by setting variables in the command line or in the environment.  Here is
    +an example:
    +
    +     ./configure CC=c99 CFLAGS=-g LIBS=-lposix
    +
    +   *Note Defining Variables::, for more details.
    +
    +Compiling For Multiple Architectures
    +====================================
    +
    +   You can compile the package for more than one kind of computer at the
    +same time, by placing the object files for each architecture in their
    +own directory.  To do this, you can use GNU 'make'.  'cd' to the
    +directory where you want the object files and executables to go and run
    +the 'configure' script.  'configure' automatically checks for the source
    +code in the directory that 'configure' is in and in '..'.  This is known
    +as a "VPATH" build.
    +
    +   With a non-GNU 'make', it is safer to compile the package for one
    +architecture at a time in the source code directory.  After you have
    +installed the package for one architecture, use 'make distclean' before
    +reconfiguring for another architecture.
    +
    +   On MacOS X 10.5 and later systems, you can create libraries and
    +executables that work on multiple system types--known as "fat" or
    +"universal" binaries--by specifying multiple '-arch' options to the
    +compiler but only a single '-arch' option to the preprocessor.  Like
    +this:
    +
    +     ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
    +                 CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \
    +                 CPP="gcc -E" CXXCPP="g++ -E"
    +
    +   This is not guaranteed to produce working output in all cases, you
    +may have to build one architecture at a time and combine the results
    +using the 'lipo' tool if you have problems.
    +
    +Installation Names
    +==================
    +
    +   By default, 'make install' installs the package's commands under
    +'/usr/local/bin', include files under '/usr/local/include', etc.  You
    +can specify an installation prefix other than '/usr/local' by giving
    +'configure' the option '--prefix=PREFIX', where PREFIX must be an
    +absolute file name.
    +
    +   You can specify separate installation prefixes for
    +architecture-specific files and architecture-independent files.  If you
    +pass the option '--exec-prefix=PREFIX' to 'configure', the package uses
    +PREFIX as the prefix for installing programs and libraries.
    +Documentation and other data files still use the regular prefix.
    +
    +   In addition, if you use an unusual directory layout you can give
    +options like '--bindir=DIR' to specify different values for particular
    +kinds of files.  Run 'configure --help' for a list of the directories
    +you can set and what kinds of files go in them.  In general, the default
    +for these options is expressed in terms of '${prefix}', so that
    +specifying just '--prefix' will affect all of the other directory
    +specifications that were not explicitly provided.
    +
    +   The most portable way to affect installation locations is to pass the
    +correct locations to 'configure'; however, many packages provide one or
    +both of the following shortcuts of passing variable assignments to the
    +'make install' command line to change installation locations without
    +having to reconfigure or recompile.
    +
    +   The first method involves providing an override variable for each
    +affected directory.  For example, 'make install
    +prefix=/alternate/directory' will choose an alternate location for all
    +directory configuration variables that were expressed in terms of
    +'${prefix}'.  Any directories that were specified during 'configure',
    +but not in terms of '${prefix}', must each be overridden at install time
    +for the entire installation to be relocated.  The approach of makefile
    +variable overrides for each directory variable is required by the GNU
    +Coding Standards, and ideally causes no recompilation.  However, some
    +platforms have known limitations with the semantics of shared libraries
    +that end up requiring recompilation when using this method, particularly
    +noticeable in packages that use GNU Libtool.
    +
    +   The second method involves providing the 'DESTDIR' variable.  For
    +example, 'make install DESTDIR=/alternate/directory' will prepend
    +'/alternate/directory' before all installation names.  The approach of
    +'DESTDIR' overrides is not required by the GNU Coding Standards, and
    +does not work on platforms that have drive letters.  On the other hand,
    +it does better at avoiding recompilation issues, and works well even
    +when some directory options were not specified in terms of '${prefix}'
    +at 'configure' time.
    +
    +Optional Features
    +=================
    +
    +   If the package supports it, you can cause programs to be installed
    +with an extra prefix or suffix on their names by giving 'configure' the
    +option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'.
    +
    +   Some packages pay attention to '--enable-FEATURE' options to
    +'configure', where FEATURE indicates an optional part of the package.
    +They may also pay attention to '--with-PACKAGE' options, where PACKAGE
    +is something like 'gnu-as' or 'x' (for the X Window System).  The
    +'README' should mention any '--enable-' and '--with-' options that the
    +package recognizes.
    +
    +   For packages that use the X Window System, 'configure' can usually
    +find the X include and library files automatically, but if it doesn't,
    +you can use the 'configure' options '--x-includes=DIR' and
    +'--x-libraries=DIR' to specify their locations.
    +
    +   Some packages offer the ability to configure how verbose the
    +execution of 'make' will be.  For these packages, running './configure
    +--enable-silent-rules' sets the default to minimal output, which can be
    +overridden with 'make V=1'; while running './configure
    +--disable-silent-rules' sets the default to verbose, which can be
    +overridden with 'make V=0'.
    +
    +Particular systems
    +==================
    +
    +   On HP-UX, the default C compiler is not ANSI C compatible.  If GNU CC
    +is not installed, it is recommended to use the following options in
    +order to use an ANSI C compiler:
    +
    +     ./configure CC="cc -Ae -D_XOPEN_SOURCE=500"
    +
    +and if that doesn't work, install pre-built binaries of GCC for HP-UX.
    +
    +   HP-UX 'make' updates targets which have the same time stamps as their
    +prerequisites, which makes it generally unusable when shipped generated
    +files such as 'configure' are involved.  Use GNU 'make' instead.
    +
    +   On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot
    +parse its '' header file.  The option '-nodtk' can be used as a
    +workaround.  If GNU CC is not installed, it is therefore recommended to
    +try
    +
    +     ./configure CC="cc"
    +
    +and if that doesn't work, try
    +
    +     ./configure CC="cc -nodtk"
    +
    +   On Solaris, don't put '/usr/ucb' early in your 'PATH'.  This
    +directory contains several dysfunctional programs; working variants of
    +these programs are available in '/usr/bin'.  So, if you need '/usr/ucb'
    +in your 'PATH', put it _after_ '/usr/bin'.
    +
    +   On Haiku, software installed for all users goes in '/boot/common',
    +not '/usr/local'.  It is recommended to use the following options:
    +
    +     ./configure --prefix=/boot/common
    +
    +Specifying the System Type
    +==========================
    +
    +   There may be some features 'configure' cannot figure out
    +automatically, but needs to determine by the type of machine the package
    +will run on.  Usually, assuming the package is built to be run on the
    +_same_ architectures, 'configure' can figure that out, but if it prints
    +a message saying it cannot guess the machine type, give it the
    +'--build=TYPE' option.  TYPE can either be a short name for the system
    +type, such as 'sun4', or a canonical name which has the form:
    +
    +     CPU-COMPANY-SYSTEM
    +
    +where SYSTEM can have one of these forms:
    +
    +     OS
    +     KERNEL-OS
    +
    +   See the file 'config.sub' for the possible values of each field.  If
    +'config.sub' isn't included in this package, then this package doesn't
    +need to know the machine type.
    +
    +   If you are _building_ compiler tools for cross-compiling, you should
    +use the option '--target=TYPE' to select the type of system they will
    +produce code for.
    +
    +   If you want to _use_ a cross compiler, that generates code for a
    +platform different from the build platform, you should specify the
    +"host" platform (i.e., that on which the generated programs will
    +eventually be run) with '--host=TYPE'.
    +
    +Sharing Defaults
    +================
    +
    +   If you want to set default values for 'configure' scripts to share,
    +you can create a site shell script called 'config.site' that gives
    +default values for variables like 'CC', 'cache_file', and 'prefix'.
    +'configure' looks for 'PREFIX/share/config.site' if it exists, then
    +'PREFIX/etc/config.site' if it exists.  Or, you can set the
    +'CONFIG_SITE' environment variable to the location of the site script.
    +A warning: not all 'configure' scripts look for a site script.
    +
    +Defining Variables
    +==================
    +
    +   Variables not defined in a site shell script can be set in the
    +environment passed to 'configure'.  However, some packages may run
    +configure again during the build, and the customized values of these
    +variables may be lost.  In order to avoid this problem, you should set
    +them in the 'configure' command line, using 'VAR=value'.  For example:
    +
    +     ./configure CC=/usr/local2/bin/gcc
    +
    +causes the specified 'gcc' to be used as the C compiler (unless it is
    +overridden in the site shell script).
    +
    +Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an
    +Autoconf limitation.  Until the limitation is lifted, you can use this
    +workaround:
    +
    +     CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash
    +
    +'configure' Invocation
    +======================
    +
    +   'configure' recognizes the following options to control how it
    +operates.
    +
    +'--help'
    +'-h'
    +     Print a summary of all of the options to 'configure', and exit.
    +
    +'--help=short'
    +'--help=recursive'
    +     Print a summary of the options unique to this package's
    +     'configure', and exit.  The 'short' variant lists options used only
    +     in the top level, while the 'recursive' variant lists options also
    +     present in any nested packages.
    +
    +'--version'
    +'-V'
    +     Print the version of Autoconf used to generate the 'configure'
    +     script, and exit.
    +
    +'--cache-file=FILE'
    +     Enable the cache: use and save the results of the tests in FILE,
    +     traditionally 'config.cache'.  FILE defaults to '/dev/null' to
    +     disable caching.
    +
    +'--config-cache'
    +'-C'
    +     Alias for '--cache-file=config.cache'.
    +
    +'--quiet'
    +'--silent'
    +'-q'
    +     Do not print messages saying which checks are being made.  To
    +     suppress all normal output, redirect it to '/dev/null' (any error
    +     messages will still be shown).
    +
    +'--srcdir=DIR'
    +     Look for the package's source code in directory DIR.  Usually
    +     'configure' can determine that directory automatically.
    +
    +'--prefix=DIR'
    +     Use DIR as the installation prefix.  *note Installation Names:: for
    +     more details, including other options available for fine-tuning the
    +     installation locations.
    +
    +'--no-create'
    +'-n'
    +     Run the configure checks, but stop before creating any output
    +     files.
    +
    +'configure' also accepts some other, not widely useful, options.  Run
    +'configure --help' for more details.
    diff --git a/sh/templates/Makefile b/sh/templates/Makefile
    new file mode 100644
    index 0000000..11233df
    --- /dev/null
    +++ b/sh/templates/Makefile
    @@ -0,0 +1,13 @@
    +.PHONY: check
    +check:
    +	sh build-aux/assert-shellcheck.sh
    +	sh build-aux/assert-todos.sh
    +
    +.PHONY: clean
    +clean:
    +	rm -rf public/
    +
    +.PHONY: public
    +public:
    +	sh build-aux/generate-tasks-and-bugs.sh
    +	pandoc -s --metadata title='$PROJECT_UC - EuAndreh' -c styles.css -o public/index.html README.md
    diff --git a/sh/templates/Makefile.am b/sh/templates/Makefile.am
    new file mode 100644
    index 0000000..2bd5d8c
    --- /dev/null
    +++ b/sh/templates/Makefile.am
    @@ -0,0 +1,16 @@
    +include $(srcdir)/build-aux/git-notes-release.am
    +include $(srcdir)/build-aux/dev-checks.am
    +include $(srcdir)/build-aux/html-files-from-sources.am
    +
    +EXTRA_DIST =                                       \
    +  guix/manifest.scm                                \
    +  guix/pinned-channels.scm                         \
    +  build-aux/with-container.sh                      \
    +  build-aux/dev-checks.am                          \
    +  build-aux/html-files-from-sources.am             \
    +  guix/channel/xyz/euandreh/__PROJECT__/channel.scm \
    +  description                                      \
    +  $(TESTS)
    +
    +check-local: check-local-dev-checks
    +clean-local: clean-local-html-files-from-sources
    diff --git a/sh/templates/NEWS b/sh/templates/NEWS
    new file mode 100644
    index 0000000..76f6a7f
    --- /dev/null
    +++ b/sh/templates/NEWS
    @@ -0,0 +1,7 @@
    +* Unreleased
    +** Added
    +** Changed
    +** Deprecated
    +** Removed
    +** Fixed
    +** Security
    diff --git a/sh/templates/README b/sh/templates/README
    new file mode 100644
    index 0000000..f39ca70
    --- /dev/null
    +++ b/sh/templates/README
    @@ -0,0 +1,6 @@
    +$PROJECT_UC
    +
    +FIXME
    +
    +Online documentation available at:
    +https://$PROJECT.euandreh.xyz
    \ No newline at end of file
    diff --git a/sh/templates/README.in b/sh/templates/README.in
    new file mode 100644
    index 0000000..cfb24bc
    --- /dev/null
    +++ b/sh/templates/README.in
    @@ -0,0 +1,40 @@
    +# @PACKAGE_NAME@
    +
    +@PACKAGE_DESCRIPTION@
    +
    +## Installation
    +
    +### Requirements
    +
    +pkg-config
    +AC_CHECK_PROG and AM_MISSING in configure.ac
    +
    +### Guix channel
    +
    +@PACKAGE_NAME@ is also available through a Guix channel.
    +
    +To add this channel to your `~/.config/guix/channels.scm`:
    +
    +```scheme
    +(append
    + (list
    +  (channel ...)
    +  (channel
    +   (name '@PACKAGE@)
    +   (url "@PACKAGE_CHANNEL_URL@")
    +   (branch "master")
    +   (introduction
    +    (make-channel-introduction
    +     "26b772cdb5074e93d3112c807ffd4c76f16f039c"
    +     (openpgp-fingerprint
    +      "5BDA E9B8 B2F6 C6BC BB0D  6CE5 81F9 0EC3 CD35 6060")))))
    + %default-channels)
    +```
    +
    +## Hacking
    +
    +See the manual for useful hacking information, either by running
    +
    +  info -f doc/@PACKAGE@.info "Contributing"
    +
    +or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html
    \ No newline at end of file
    diff --git a/sh/templates/TODOs.md b/sh/templates/TODOs.md
    new file mode 100644
    index 0000000..017c0a1
    --- /dev/null
    +++ b/sh/templates/TODOs.md
    @@ -0,0 +1,11 @@
    +# Tasks
    +
    +# Bugs
    +
    +# Improvements
    +
    +# Questions
    +
    +# Resources
    +
    +# Scratch
    diff --git a/sh/templates/_plugins/linter.rb b/sh/templates/_plugins/linter.rb
    new file mode 100644
    index 0000000..d5cca56
    --- /dev/null
    +++ b/sh/templates/_plugins/linter.rb
    @@ -0,0 +1,55 @@
    +require 'i18n'
    +
    +module Jekyll
    +  class Linter < Generator
    +    safe true
    +
    +    def slugify(s)
    +      I18n.available_locales = [:pt_BR]
    +      I18n.locale = :pt_BR
    +      I18n.transliterate(s)
    +        .gsub(/[\W]+/, ' ')
    +        .strip
    +        .gsub(/\s\s+/, '-')
    +        .downcase
    +        .gsub(' ', '-')
    +        .gsub('_', '-')
    +    end
    +
    +    def assert_field(document, field)
    +      f = document.data[field]
    +      raise "Undefined '#{field}' for #{document.path}" unless f
    +      f
    +    end
    +
    +    def assert_frontmatter_fields(document)
    +      title = assert_field document, 'title'
    +      layout = assert_field document, 'layout'
    +      date = document.date.strftime('%Y-%m-%d') unless layout == 'page'
    +      slug = assert_field document, 'slug'
    +
    +      if 'post' != layout
    +        raise "Layout mismatch: expected 'post', got '#{layout}' for #{document.path}"
    +      end
    +
    +      unless layout == 'page' then
    +        path = "_posts/#{date}-#{slug}.md"
    +        unless path == document.relative_path then
    +          raise "date/filename mismatch:\ndate+slug: #{path}\nfilename:  #{document.relative_path}"
    +        end
    +      end
    +
    +      if slugify(title) != slug then
    +        puts 'WARNING!'
    +        puts "Filename isn't a slug of the title for '#{document.path}':\nslug:  '#{slug}'\ntitle: '#{slugify(title)}'"
    +        puts "Fix with:\n  mv _posts/#{date}-#{slug}.md _posts/#{date}-#{slugify(title)}.md"
    +      end
    +    end
    +
    +    def generate(site)
    +      site.collections['posts'].docs.each do |document|
    +        assert_frontmatter_fields(document)
    +      end
    +    end
    +  end
    +end
    diff --git a/sh/templates/bootstrap b/sh/templates/bootstrap
    new file mode 100755
    index 0000000..a8fd885
    --- /dev/null
    +++ b/sh/templates/bootstrap
    @@ -0,0 +1,3 @@
    +#!/bin/sh
    +
    +autoreconf --verbose --install --force
    diff --git a/sh/templates/build-aux/assert-docs-spelling.sh b/sh/templates/build-aux/assert-docs-spelling.sh
    new file mode 100755
    index 0000000..6720bc5
    --- /dev/null
    +++ b/sh/templates/build-aux/assert-docs-spelling.sh
    @@ -0,0 +1,32 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +cd "$(dirname "${BASH_SOURCE[0]}")"
    +cd ../doc/
    +
    +export LANG=C.UTF-8
    +
    +for DICT in dictionaries/*.txt; do
    +  diff <(sort "$DICT") "$DICT" || {
    +    echo "The $DICT dictionary is unsorted. To fix it, run:" >&2
    +    echo "  LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2
    +    exit 1
    +  }
    +done
    +
    +OUT="$(mktemp)"
    +LANGS="$(jq -r .langs[] < ../metadata.json)"
    +
    +for l in ${LANGS}; do
    +  make SPHINXOPTS="-D language=$l" html
    +  hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT"
    +done
    +
    +if [[ -s "$OUT" ]]; then
    +  printf "\nvvv Mispelled words detected by hunspell.\n\n"
    +  sort < "$OUT" | uniq
    +  printf "\n^^^\n" >&2
    +  exit 1
    +else
    +  echo "No spelling errors detected"
    +  exit 0
    +fi
    diff --git a/sh/templates/build-aux/assert-shellcheck.sh b/sh/templates/build-aux/assert-shellcheck.sh
    new file mode 100755
    index 0000000..334a875
    --- /dev/null
    +++ b/sh/templates/build-aux/assert-shellcheck.sh
    @@ -0,0 +1,6 @@
    +#!/bin/sh
    +set -eux
    +
    +git ls-files -z | \
    +  xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \
    +  xargs shellcheck
    diff --git a/sh/templates/build-aux/assert-todos.sh b/sh/templates/build-aux/assert-todos.sh
    new file mode 100755
    index 0000000..0b0a8d6
    --- /dev/null
    +++ b/sh/templates/build-aux/assert-todos.sh
    @@ -0,0 +1,34 @@
    +#!/bin/sh
    +set -eu
    +
    +if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then
    +  echo "Found dangling FIXME markers on the project."
    +  echo "You should write them down properly on TODOs.md."
    +  exit 1
    +fi
    +
    +awk -F'{#' '
    +BEGIN {
    +  status=0
    +  idx=0
    +  delete ids[0]
    +}
    +/^## / {
    +  if (match($0, / \{#.*?\}$/) == 0) {
    +    print "Missing ID for line " NR ":\n" $0
    +    status=1
    +  }
    +  id_with_prefix = substr($2, 0, length($2) - 1)
    +  match(id_with_prefix, /^\w+-/)
    +  id = substr(id_with_prefix, RLENGTH + 1)
    +  if (id in arr) {
    +    print "Duplicate ID: " id
    +    status=1
    +  } else {
    +    arr[id] = 1
    +  }
    +}
    +/^# Improvements$/ {
    +  exit status
    +}
    +' TODOs.md
    diff --git a/sh/templates/build-aux/ci/ci-build.sh b/sh/templates/build-aux/ci/ci-build.sh
    new file mode 100755
    index 0000000..b7a4c38
    --- /dev/null
    +++ b/sh/templates/build-aux/ci/ci-build.sh
    @@ -0,0 +1,53 @@
    +#!/bin/sh
    +set -eux
    +
    +PACKAGE="$1"
    +LOGS_DIR="$2"
    +read -r _ SHA _ # oldrev newrev refname
    +FILENAME="$(date -Is)-$SHA.log"
    +LOGFILE="$LOGS_DIR/$FILENAME"
    +
    +{
    +  echo "Starting CI job at: $(date -Is)"
    +
    +  finish() {
    +    STATUS="$?"
    +    printf "\n\n>>> exit status was %s\n" "$STATUS"
    +    echo "Finishing CI job at: $(date -Is)"
    +    cd -
    +    NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS"
    +  }
    +  trap finish EXIT
    +
    +  unset GIT_DIR
    +  CLONE="$(mktemp -d)"
    +  git clone . "$CLONE"
    +  cd "$CLONE"
    +  git config --global user.email git@euandre.org
    +  git config --global user.name 'EuAndreh CI'
    +
    +  if [ -f build-aux/with-container.sh ]; then
    +    RUNNER='./build-aux/with-container.sh'
    +  else
    +    RUNNER='sh -c'
    +  fi
    +
    +  if [ -f ./bootstrap ]; then
    +    COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public'
    +  else
    +    COMMAND='make clean check public'
    +  fi
    +
    +  $RUNNER "$COMMAND"
    +
    +  rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete
    +} | tee "$LOGFILE" 2>&1
    diff --git a/sh/templates/build-aux/ci/git-post-receive.sh b/sh/templates/build-aux/ci/git-post-receive.sh
    new file mode 100755
    index 0000000..2f6e3c0
    --- /dev/null
    +++ b/sh/templates/build-aux/ci/git-post-receive.sh
    @@ -0,0 +1,14 @@
    +#!/bin/sh
    +set -eu
    +
    +for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do
    +  opt="$(eval "echo \$GIT_PUSH_OPTION_$n")"
    +  if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then
    +    printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt"
    +    exit 0
    +  fi
    +done
    +
    +PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix
    +LOGS_DIR="/data/ci/$PACKAGE/logs"
    +"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR"
    diff --git a/sh/templates/build-aux/ci/git-pre-push.sh b/sh/templates/build-aux/ci/git-pre-push.sh
    new file mode 100644
    index 0000000..23839de
    --- /dev/null
    +++ b/sh/templates/build-aux/ci/git-pre-push.sh
    @@ -0,0 +1,19 @@
    +#!/bin/sh
    +set -eux
    +
    +PACKAGE="$(basename "$PWD")"
    +__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs"
    +REMOTE_GIT_DIR="/data/git/$PACKAGE.git"
    +
    +DESCRIPTION="$(mktemp)"
    +if [ -f description ]
    +then
    +  cp description "$DESCRIPTION"
    +else
    +  git config euandreh.description > "$DESCRIPTION"
    +fi
    +
    +scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description"
    +__ENABLE_CI__ ssh git.euandreh.xyz mkdir -p "$LOGS_DIR"
    +__ENABLE_CI__ scp build-aux/ci/ci-build.sh         "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh"
    +__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive"
    diff --git a/sh/templates/build-aux/ci/git-pre-push.sh.in b/sh/templates/build-aux/ci/git-pre-push.sh.in
    new file mode 100755
    index 0000000..dbadd1c
    --- /dev/null
    +++ b/sh/templates/build-aux/ci/git-pre-push.sh.in
    @@ -0,0 +1,19 @@
    +#!/bin/sh
    +set -eux
    +
    +PACKAGE="$(basename "$PWD")"
    +__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs"
    +REMOTE_GIT_DIR="/data/git/$PACKAGE.git"
    +
    +DESCRIPTION="$(mktemp)"
    +if [ -f description ]
    +then
    +  cp description "$DESCRIPTION"
    +else
    +  git config euandreh.description > "$DESCRIPTION"
    +fi
    +
    +scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description"
    +__ENABLE_CI__ ssh git.@TLD@ mkdir -p "$LOGS_DIR"
    +__ENABLE_CI__ scp build-aux/ci/ci-build.sh         "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh"
    +__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive"
    diff --git a/sh/templates/build-aux/compile-readme.sh b/sh/templates/build-aux/compile-readme.sh
    new file mode 100755
    index 0000000..91f6065
    --- /dev/null
    +++ b/sh/templates/build-aux/compile-readme.sh
    @@ -0,0 +1,9 @@
    +#!/bin/sh
    +set -eux
    +
    +pandoc -s                               \
    +       --metadata title="$1 - EuAndreh" \
    +       -c styles.css                    \
    +       -o public/index.html             \
    +       -r markdown                      \
    +       README
    diff --git a/sh/templates/build-aux/default-extra-dist.am b/sh/templates/build-aux/default-extra-dist.am
    new file mode 100644
    index 0000000..6be406a
    --- /dev/null
    +++ b/sh/templates/build-aux/default-extra-dist.am
    @@ -0,0 +1,6 @@
    +EXTRA_DIST =                  \
    +  guix/manifest.scm           \
    +  guix/pinned-channels.scm    \
    +  build-aux/with-container.sh \
    +  description                 \
    +  $(TESTS)
    diff --git a/sh/templates/build-aux/dev-checks.am b/sh/templates/build-aux/dev-checks.am
    new file mode 100644
    index 0000000..ca1b9d8
    --- /dev/null
    +++ b/sh/templates/build-aux/dev-checks.am
    @@ -0,0 +1,17 @@
    +.PHONY: check-local-dev-checks
    +check-local-dev-checks:
    +	if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then                                      \
    +    echo 'Running PROGRAMMER_MODE checks.';                                        \
    +    $(srcdir)/build-aux/assert-shellcheck.sh                            || exit 1; \
    +    $(srcdir)/build-aux/assert-todos.sh                                 || exit 1; \
    +    if [ "x$(CI_MODE)" = 'xno' ]; then                                             \
    +      echo 'Running CI_MODE checks.';                                              \
    +		  $(GUIX) build -f guix/channel/xyz/euandreh/$(PACKAGE)/channel.scm || exit 1; \
    +    else                                                                           \
    +      echo 'Skipping CI_MODE checks.';                                             \
    +    fi                                                                             \
    +  else                                                                             \
    +    echo 'Skipping PROGRAMMER_MODE checks.';                                       \
    +  fi
    +
    +check-local: check-local-dev-checks
    diff --git a/sh/templates/build-aux/docbook-xsl.tar.gz b/sh/templates/build-aux/docbook-xsl.tar.gz
    new file mode 100644
    index 0000000..a7a4ce6
    Binary files /dev/null and b/sh/templates/build-aux/docbook-xsl.tar.gz differ
    diff --git a/sh/templates/build-aux/git-notes-release.am b/sh/templates/build-aux/git-notes-release.am
    new file mode 100644
    index 0000000..0d91e88
    --- /dev/null
    +++ b/sh/templates/build-aux/git-notes-release.am
    @@ -0,0 +1,7 @@
    +.PHONY: release
    +release: check distcheck dist
    +	$(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE)
    +
    +.PHONY: release-with-binaries
    +release-with-binaries:
    +	$(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) --bin
    diff --git a/sh/templates/build-aux/git-notes-release.sh b/sh/templates/build-aux/git-notes-release.sh
    new file mode 100644
    index 0000000..4d55645
    --- /dev/null
    +++ b/sh/templates/build-aux/git-notes-release.sh
    @@ -0,0 +1,77 @@
    +#!/bin/sh
    +set -eux
    +
    +DIST_ARCHIVES="$1"
    +VERSION="$2"
    +PACKAGE="$3"
    +BIN="${4:-}"
    +
    +if [ "$BIN" != --bin ]; then
    +  # Assert version
    +  if git rev-parse "$VERSION" > /dev/null; then
    +    echo "Tar $VERSION already exists, exitting."
    +    exit 2
    +  fi
    +
    +  # Update NEWS
    +  sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS
    +  cat < $DIST_ARCHIVES
    +  git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc
    +EOF
    +)
    +  git notes append -m "$NOTE"
    +  sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    +  sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/"    "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    +  ./configure --enable-programmer-mode
    +  git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in"
    +  git commit -m "Update released version $VERSION in channel.scm.in file."
    +
    +  # Publish release artifacts
    +  git push --tags
    +  git push origin refs/notes/tarballs
    +  git push origin refs/notes/signatures
    +  git push origin refs/notes/commits
    +  git push
    +else
    +  guix pull
    +  BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")"
    +  SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")"
    +  git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION"
    +  NOTE=$(cat < $PACKAGE-bin.tar.gz
    +  tar xf $PACKAGE-bin.tar.gz
    +  bin/$PACKAGE
    +EOF
    +)
    +  git notes append -m "$NOTE"
    +  git push origin refs/notes/binaries
    +  git push origin refs/notes/commits
    +fi
    diff --git a/sh/templates/build-aux/guile.am b/sh/templates/build-aux/guile.am
    new file mode 100644
    index 0000000..e56b31f
    --- /dev/null
    +++ b/sh/templates/build-aux/guile.am
    @@ -0,0 +1,16 @@
    +guilescmdir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)/xyz/euandreh
    +guilegodir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache/xyz/euandreh
    +
    +GUILE_OBJECTS = $(SOURCES:.scm=.go)
    +
    +dist_guilescm_DATA = $(SOURCES)
    +guilego_DATA = $(GUILE_OBJECTS)
    +
    +CLEANFILES = $(GUILE_OBJECTS)
    +
    +SUFFIXES = .scm .go
    +.scm.go:
    +	$(GUILD) compile -o "$@" "$<"
    +
    +TEST_EXTENSIONS = .scm
    +SCM_LOG_COMPILER = $(GUILE) -L $(top_srcdir)/src
    diff --git a/sh/templates/build-aux/html-files-from-sources.am b/sh/templates/build-aux/html-files-from-sources.am
    new file mode 100644
    index 0000000..db073f3
    --- /dev/null
    +++ b/sh/templates/build-aux/html-files-from-sources.am
    @@ -0,0 +1,23 @@
    +.PHONY: clean-local-html-files-from-sources
    +clean-local-html-files-from-sources:
    +	rm -rf public/ OEBPS META-INF/ doc/$(PACKAGE).xml mimetype
    +
    +clean-local: clean-local-html-files-from-sources
    +
    +LANGS = en
    +DICTIONARIES = doc/dictionaries/en.txt doc/dictionaries/international.txt
    +doc/dictionaries/all.txt: $(DICTIONARIES)
    +	cat $(DICTIONARIES) | sort > $@
    +
    +	cat $(DICTIONARIES) | diff - $@ || {                                        \
    +    echo 'Dictionary files are not sorted. To fix it, run:';                  \
    +    echo '  for f in $(DICTIONARIES); do LANG=C.UTF-8 sort -o $$f $$f; done'; \
    +    touch $(DICTIONARIES);                                                    \
    +    exit 1;                                                                   \
    +  }
    +
    +public: README TODOs.md $(DOC_SRCS) doc/dictionaries/all.txt
    +	$(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS)
    +
    +	$(srcdir)/build-aux/generate-tasks-and-bugs.sh
    +	$(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)'
    diff --git a/sh/templates/build-aux/rust.am b/sh/templates/build-aux/rust.am
    new file mode 100644
    index 0000000..f8f9b0f
    --- /dev/null
    +++ b/sh/templates/build-aux/rust.am
    @@ -0,0 +1,9 @@
    +rustfmt: $(RUST_SRC)
    +	if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then                                \
    +    for f in $(RUST_SRC); do                                                 \
    +			$(RUSTFMT) --check $$f || {                                            \
    +				printf "Unformatted Rust code. To fix it, run:\n  rustfmt %s\n" $$f; \
    +				exit 1;                                                              \
    +			};                                                                     \
    +    done;                                                                    \
    +  fi
    diff --git a/sh/templates/build-aux/sphinx-build-web-assets.sh b/sh/templates/build-aux/sphinx-build-web-assets.sh
    new file mode 100755
    index 0000000..0bf494f
    --- /dev/null
    +++ b/sh/templates/build-aux/sphinx-build-web-assets.sh
    @@ -0,0 +1,64 @@
    +#!/usr/bin/env bash
    +set -Eeuo pipefail
    +cd "$(dirname "${BASH_SOURCE[0]}")"
    +cd ../
    +
    +OUT='public'
    +PROJECT_UC="__PROJECT_UC__"
    +
    +pushd doc
    +make html
    +popd
    +
    +cp doc/favicon.ico "$OUT"
    +mv doc/_build/html/_static/ "$OUT/_static/"
    +
    +CURRENT_LANG="$(jq -r .current_lang < metadata.json)"
    +LANGS="$(jq -r .langs[] < metadata.json)"
    +TAGS="$(git tag | cat - <(echo master))"
    +
    +for lang in ${LANGS}; do
    +  for tag in ${TAGS}; do
    +    mkdir -p "tmp/$lang/$tag/"
    +    git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- .
    +    git reset .
    +    git checkout .
    +
    +    pushd "tmp/$lang/$tag/doc/"
    +    jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json
    +
    +    RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json      | \
    +                 jq -r 'to_entries[] | [.key, .value] | @csv' | \
    +                 tr -d '\"')"
    +
    +    if [[ "$lang" != "$CURRENT_LANG" ]]; then
    +      for rename in $RENAMES; do
    +        from="$(echo "$rename" | cut -d, -f1)"
    +        to="$(echo "$rename"   | cut -d, -f2)"
    +        mv "${from}.rst" "${to}.rst"
    +        sed -i "s/^   $from$/   $to/" index.rst
    +      done
    +    fi
    +
    +    make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html
    +    popd
    +
    +    mkdir "$OUT/$lang/"
    +
    +    mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/"
    +    pushd "$OUT/$lang/$tag/"
    +    rm -rf _static/
    +    ln -s ../../_static .
    +    popd
    +
    +    mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/"
    +    pushd "$OUT/$lang/$tag/single/"
    +    rm -rf _static/
    +    ln -s ../../../_static .
    +    rm -rf _images/
    +    ln -s ../_images .
    +    popd
    +
    +    mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf"
    +  done
    +done
    diff --git a/sh/templates/build-aux/texinfo-build-web-assets.sh b/sh/templates/build-aux/texinfo-build-web-assets.sh
    new file mode 100755
    index 0000000..241ebb8
    --- /dev/null
    +++ b/sh/templates/build-aux/texinfo-build-web-assets.sh
    @@ -0,0 +1,55 @@
    +#!/bin/sh
    +set -eux
    +
    +PACKAGE="$1"
    +shift
    +
    +dictname() {
    +  case "$1" in
    +    en)
    +      echo en_US-large
    +      ;;
    +    *)
    +      echo "Unsupported dictionary type $1"
    +      exit 1
    +      ;;
    +  esac
    +}
    +
    +OUT="$(mktemp)"
    +CLONE="$(mktemp -d)"
    +rsync -a . "$CLONE"
    +cd "$CLONE"
    +
    +for tag in master $(git tag); do
    +  git checkout "$tag"
    +  for lang in "$@"; do
    +    mkdir -p "public/$lang/$tag/"
    +
    +    make html
    +    mv "doc/$PACKAGE.html/" "public/$lang/$tag/doc/"
    +
    +    make MAKEINFOFLAGS=--no-split html ps dvi pdf
    +    mv -t "public/$lang/$tag/" "doc/$PACKAGE.dvi" "doc/$PACKAGE.ps" "doc/$PACKAGE.pdf" "doc/$PACKAGE.html"
    +
    +    makeinfo --docbook "doc/$PACKAGE.texi" -o "$PACKAGE.docbook"
    +    xsltproc build-aux/docbook-xsl/epub/docbook.xsl "$PACKAGE.docbook"
    +    echo "application/epub+zip" > mimetype
    +    zip -0Xq "$PACKAGE.epub" mimetype
    +    zip -Xr9D "$PACKAGE.epub" META-INF OEBPS
    +    mv "$PACKAGE.epub" "public/$lang/$tag/"
    +
    +    cat doc/dictionaries/international.txt "doc/dictionaries/$lang.txt" > doc/dictionaries/curr.txt
    +    hunspell -u -H -d "$(dictname "$lang")" -p doc/dictionaries/curr.txt "public/$lang/$tag/$PACKAGE.html" | tee -a "$OUT"
    +  done
    +done
    +
    +cd -
    +rm -rf public/
    +mv "$CLONE/public/" public/
    +
    +if [ -s "$OUT" ]; then
    +  echo "Misspelled words detected:"
    +  cat "$OUT"
    +  exit 1
    +fi
    diff --git a/sh/templates/build-aux/with-container.sh b/sh/templates/build-aux/with-container.sh
    new file mode 100755
    index 0000000..5544d8e
    --- /dev/null
    +++ b/sh/templates/build-aux/with-container.sh
    @@ -0,0 +1,4 @@
    +#!/bin/sh
    +set -eux
    +
    +guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@"
    diff --git a/sh/templates/build-aux/workflow/README.sh b/sh/templates/build-aux/workflow/README.sh
    new file mode 100755
    index 0000000..1aa2593
    --- /dev/null
    +++ b/sh/templates/build-aux/workflow/README.sh
    @@ -0,0 +1,29 @@
    +#!/bin/sh
    +set -eu
    +
    +mkdir -p public
    +
    +PROJECT_UC="$1"
    +PROJECT="$2"
    +
    +RELEASES_LIST="$(mktemp)"
    +for version in $(git tag); do
    +  echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST"
    +done
    +
    +RELEASES="$(mktemp)"
    +if [ -s "$RELEASES_LIST" ]; then
    +  printf '# Releases\n\n' >> "$RELEASES"
    +  cat "$RELEASES_LIST" >> "$RELEASES"
    +fi
    +
    +cat README.md "$RELEASES" | \
    +  pandoc --toc                                  \
    +         --highlight-style pygments             \
    +         --toc-depth=2                          \
    +         -s                                     \
    +         --metadata title="$PROJECT_UC - TODOs" \
    +         --metadata lang=en                     \
    +         -r markdown                            \
    +         -w html                                \
    +         > public/index.html
    diff --git a/sh/templates/build-aux/workflow/TODOs.sh b/sh/templates/build-aux/workflow/TODOs.sh
    new file mode 100755
    index 0000000..3f9fa4b
    --- /dev/null
    +++ b/sh/templates/build-aux/workflow/TODOs.sh
    @@ -0,0 +1,23 @@
    +#!/bin/sh
    +set -eu
    +
    +mkdir -p public
    +
    +export PROJECT_UC="$1"
    +export PROJECT="$2"
    +export MAILING_LIST="$3"
    +
    +REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/'
    +
    +envsubst < build-aux/workflow/preamble.md                      | \
    +  printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \
    +  pandoc --toc                                  \
    +         --highlight-style pygments             \
    +         --toc-depth=2                          \
    +         -s                                     \
    +         --metadata title="$PROJECT_UC - TODOs" \
    +         --metadata lang=en                     \
    +         -r markdown                            \
    +         -w html                                \
    +         -H build-aux/workflow/style.css        \
    +         > public/TODOs.html
    diff --git a/sh/templates/build-aux/workflow/preamble.md b/sh/templates/build-aux/workflow/preamble.md
    new file mode 100644
    index 0000000..c6ae56e
    --- /dev/null
    +++ b/sh/templates/build-aux/workflow/preamble.md
    @@ -0,0 +1,16 @@
    +# About
    +
    +TODOs for $PROJECT_UC.
    +
    +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/).
    +
    +Register a new one at
    +[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E)
    +and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D).
    +
    +*Você também pode escrever em português*.
    +
    +*Vous pouvez aussi écrire en français*.
    +
    +*Vi povas ankaŭ skribi esperante*.
    +
    diff --git a/sh/templates/build-aux/workflow/style.css b/sh/templates/build-aux/workflow/style.css
    new file mode 100644
    index 0000000..ac0144c
    --- /dev/null
    +++ b/sh/templates/build-aux/workflow/style.css
    @@ -0,0 +1,38 @@
    +
    diff --git a/sh/templates/configure.ac b/sh/templates/configure.ac
    new file mode 100644
    index 0000000..79079ec
    --- /dev/null
    +++ b/sh/templates/configure.ac
    @@ -0,0 +1,25 @@
    +AC_PREREQ([2.69])
    +AC_INIT([__PROJECT__],
    +  [v0.0.0],
    +  [~euandreh/__MAILING_LIST__@lists.sr.ht],
    +  [__PROJECT__],
    +  [https://__PROJECT__.euandreh.xyz])
    +AC_CONFIG_SRCDIR([FIXME])
    +AC_CONFIG_AUX_DIR([build-aux])
    +AC_CONFIG_MACRO_DIR([m4])
    +AM_INIT_AUTOMAKE([-Wall -Werror parallel-tests subdir-objects])
    +
    +EU_PROGRAMMER_MODE
    +AM_MISSING_PROG([GUIX], [guix])
    +
    +TLD="euandreh.xyz"
    +EU_LINKS
    +
    +AC_CONFIG_FILES([Makefile
    +                 README
    +                 guix/channel/xyz/euandreh/__PROJECT__/channel.scm
    +                 build-aux/workflow/preamble.org])
    +
    +AC_CONFIG_FILES([build-aux/ci/git-pre-push.sh], [chmod +x build-aux/ci/git-pre-push.sh])
    +
    +AC_OUTPUT
    diff --git a/sh/templates/cronjob-with-email.sh b/sh/templates/cronjob-with-email.sh
    new file mode 100644
    index 0000000..b486ce5
    --- /dev/null
    +++ b/sh/templates/cronjob-with-email.sh
    @@ -0,0 +1,32 @@
    +#!/bin/sh
    +set -eux
    +LOG_FILE="$(mktemp)"
    +{
    +  finish() {
    +    status=$?
    +    if [ $status = 0 ]; then
    +      STATUS="✅ SUCCESS (status $status)"
    +    else
    +      STATUS="❌ FAILURE (status $status)"
    +    fi
    +
    +    echo "Registering status locally..."
    +    set -x
    +    printf '%s __JOB__\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log"
    +
    +    echo "Sending report email..."
    +
    +    SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh"
    +    gpg -easr eu@euandre.org < "$LOG_FILE" | \
    +      mail eu@euandre.org           \
    +          -s "$SUBJECT"            \
    +          -a 'From:eu@euandre.org' \
    +          --content-type 'text/plain; charset=utf-8'
    +    echo 'Mail sent!'
    +  }
    +  trap finish EXIT
    +
    +  echo "Starting: $(date -Is)"
    +  ~/dev/libre/dotfiles/cron/__JOB__.sh
    +  echo "Finishing: $(date -Is)"
    +} | tee "$LOG_FILE" 2>&1
    diff --git a/sh/templates/default.nix b/sh/templates/default.nix
    new file mode 100644
    index 0000000..adbefea
    --- /dev/null
    +++ b/sh/templates/default.nix
    @@ -0,0 +1,14 @@
    +let
    +  niv-sources = import ./nix/sources.nix;
    +  pkgs = import niv-sources.nixpkgs { overlays = [ ]; };
    +  src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.;
    +  utils-i18n = pkgs.callPackage ./nix/utils-i18n.nix { };
    +
    +  projectBuildInputs = with pkgs;
    +    [ ] ++ pkgs.callPackage ./nix/base-packages.nix { inherit utils-i18n; };
    +
    +  preTestPhaseSetup = "";
    +  utils = import ./nix/utils.nix {
    +    inherit pkgs src projectBuildInputs preTestPhaseSetup;
    +  };
    +in { inherit (utils) test site shell publishScript remotePublishScript; }
    diff --git a/sh/templates/description b/sh/templates/description
    new file mode 100644
    index 0000000..4c28ea5
    --- /dev/null
    +++ b/sh/templates/description
    @@ -0,0 +1 @@
    +FIXME
    \ No newline at end of file
    diff --git a/sh/templates/doc/Makefile b/sh/templates/doc/Makefile
    new file mode 100644
    index 0000000..d4bb2cb
    --- /dev/null
    +++ b/sh/templates/doc/Makefile
    @@ -0,0 +1,20 @@
    +# Minimal makefile for Sphinx documentation
    +#
    +
    +# You can set these variables from the command line, and also
    +# from the environment for the first two.
    +SPHINXOPTS    ?=
    +SPHINXBUILD   ?= sphinx-build
    +SOURCEDIR     = .
    +BUILDDIR      = _build
    +
    +# Put it first so that "make" without argument is like "make help".
    +help:
    +	@$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
    +
    +.PHONY: help Makefile
    +
    +# Catch-all target: route all unknown targets to Sphinx using the new
    +# "make mode" option.  $(O) is meant as a shortcut for $(SPHINXOPTS).
    +%: Makefile
    +	@$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O)
    diff --git a/sh/templates/doc/_templates/footer.html b/sh/templates/doc/_templates/footer.html
    new file mode 100644
    index 0000000..a710a48
    --- /dev/null
    +++ b/sh/templates/doc/_templates/footer.html
    @@ -0,0 +1,7 @@
    +{%- extends "!footer.html" %}
    +
    +{% block extrafooter %}
    +  
    +{% endblock %}
    diff --git a/sh/templates/doc/_templates/layout.html b/sh/templates/doc/_templates/layout.html
    new file mode 100644
    index 0000000..3182c8c
    --- /dev/null
    +++ b/sh/templates/doc/_templates/layout.html
    @@ -0,0 +1,59 @@
    +{%- extends "!layout.html" %}
    +
    +{#
    +Taken from:
    +https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html
    +#}
    +
    +{% block footer %}
    +  
    + + {{project}} + {{version}} | {{ current_lang }} + + +
    +
    +
    Versions
    + {% for v in all_versions %} +
    + + {% if v == version %} + + {{ v }} + + {% else %} + {{ v }} + {% endif %} + +
    + {% endfor %} +
    Languages
    + {% for l in langs %} +
    + + {% if l == current_lang %} + + {{ l }} + + {% else %} + {{ l }} + {% endif %} + +
    + {% endfor %} +
    Downloads
    +
    + + PDF + +
    +
    + + EPUB + +
    +
    +
    +
    +{% endblock %} diff --git a/sh/templates/doc/conf.py.in b/sh/templates/doc/conf.py.in new file mode 100644 index 0000000..8727603 --- /dev/null +++ b/sh/templates/doc/conf.py.in @@ -0,0 +1,56 @@ +import json +with open("../metadata.json", "r") as f: + metadata = json.loads(f.read()) + +import subprocess +all_versions = ["master"] + ( + subprocess + .check_output(["git", "tag"]) + .decode("ascii") + .strip() + .split() +) + +project = metadata["project_name"] +author = metadata["authors"][0] +version = metadata["version"] +release = version +epub_copyright = "CC BY-SA 4.0" +nitpicky = True + +extensions = [ + "sphinx.ext.extlinks", + "sphinx.ext.graphviz", + "sphinx.ext.todo", +] + +graphviz_output_format = "svg" + +todo_include_todos = True + +templates_path = ["_templates"] +html_theme = "sphinx_rtd_theme" +html_theme_options = { + "style_external_links": True +} + +html_show_sphinx = False +html_show_copyright = False + +extlinks = { + "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), + "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), +} + +with open("i18n-pagenames.json", "r") as f: + i18n_pagenames = json.loads(f.read()) + +html_context = { + "all_versions": all_versions, + "langs": metadata["langs"], + "current_lang": metadata["current_lang"], + "source_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs/", + "i18n_pagenames": i18n_pagenames +} + +gettext_compact = False diff --git a/sh/templates/doc/dictionaries/en.txt b/sh/templates/doc/dictionaries/en.txt new file mode 100644 index 0000000..e69de29 diff --git a/sh/templates/doc/dictionaries/international.txt b/sh/templates/doc/dictionaries/international.txt new file mode 100644 index 0000000..e69de29 diff --git a/sh/templates/doc/favicon.ico b/sh/templates/doc/favicon.ico new file mode 100644 index 0000000..8ebd54f Binary files /dev/null and b/sh/templates/doc/favicon.ico differ diff --git a/sh/templates/doc/i18n-pagenames.json b/sh/templates/doc/i18n-pagenames.json new file mode 100644 index 0000000..6b674df --- /dev/null +++ b/sh/templates/doc/i18n-pagenames.json @@ -0,0 +1,3 @@ +{ + "en": {} +} diff --git a/sh/templates/doc/index.rst b/sh/templates/doc/index.rst new file mode 100644 index 0000000..78baef3 --- /dev/null +++ b/sh/templates/doc/index.rst @@ -0,0 +1,31 @@ +$PROJECT_UC +======== + +FIXME: description + +Useful links: +~~~~~~~~~~~~~ + +- `documentation`_ (`single page documentation`_) +- `mailing list`_ +- `source code`_ +- `tasks and bugs`_ +- `build logs`_ + +See also: + +- `repository statistics`_ + +.. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ +.. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ +.. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST +.. _`source code`: https://git.euandreh.xyz/$PROJECT/about/ +.. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html +.. _`build logs`: https://ci.euandreh.xyz/#$PROJECT +.. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ + +Introduction +~~~~~~~~~~~~ + +.. toctree:: + :maxdepth: 2 diff --git a/sh/templates/guix/channel/euandreh.key b/sh/templates/guix/channel/euandreh.key new file mode 100644 index 0000000..3046d6b --- /dev/null +++ b/sh/templates/guix/channel/euandreh.key @@ -0,0 +1,63 @@ +-----BEGIN PGP PUBLIC KEY BLOCK----- + +mQINBFjVvh4BEADIlHUiO6IfkhcNm3J7ilXERgimvKuFNyLIUPZlDcESC1ORrv4y +9slMDA5uojXctuLRC7nNdynLP+eFFfVUQ+hUXcV24AzyOE0CYo5c4PQA5TLe2AUC +E9YqqfQF4XuNddY+UpcG47MuVDR+6SHkFkF29ATzpmShJj41lc7a9CdRib+62Wpe +h7WJOFj/YoxMCBBzic4tiFNgoYobu+lLxyA4T2kCmxEaiZzc6eXBDDgJ0STL4+S8 +avpglaQ+mb5gHbH0yOtuwDG3sWyHKf7LSRVtzWvOqaGmRUmmDsSPjb5vQqvT8EMq +UfqFFZhScLalthF3PhG0SLXPvoCoRm2aLkN+O3sv057RqaN8E39223mmz6EMXmLk +H/U5qk2SUl3dx86dIQcB+2WUVu5zuFyfR1g6tD+DcqzxGc9XB7Gz/0TTDf3OimHb +rp1x5i/04198ocRZT3MzXx8H25tLMS/rHmE87YdgPhMTWheSUevyhoGNHfAOcDwX +P2oGzELXbLqHxtjENMEw2E996KrSmpcz7WOqIl3PHS1J6eRZoYQesXE+SZTeIiYb +wD0kkZGYhBZbtLC4VWIuU2T3AL/2hF6aUh1tj1B6vcV0i3HpIHNbvPAF/I0NUhhc +Gxwwi+ggG/MBHBbxkq7LvG5DfDbav0ZoZaov5dyhtX0CBWjVYATvjRfeAwARAQAB +tBlFdUFuZHJlaCA8ZXVAZXVhbmRyZS5vcmc+iQJWBBMBCgBAAhsDBwsJCAcDAgEG +FQgCCQoLBBYCAwECHgECF4AWIQRb2um4svbGvLsNbOWB+Q7DzTVgYAUCXxBk/wUJ +Cf0N4QAKCRCB+Q7DzTVgYKYFD/4080rAAYvmB/XlMgjxwwxVwAlJxm45iNN4/Ar3 +A4H+kpoPIQFivQgkE51XK7vuKo0LacND8EmBtl6nJf4xqN3/xW0xM7LNhBEo9uLe +66/ABpSTBRDAydOpshtoAtjaEGGHF0wpvneGaYKqYdpRwlPgKr3N3yCXq2u7TGcX +Msdr1wtXVY6PoeC0ry5Li7dUQNUV5VJPRrJ4iHNWJohl1ZU39Hne0HiRYMXnl2lg +NdSX9gsyyZuuZ+xHgfIR6QQuqsZ1kOaKt0EosVWbqS9fBw8t3GOy1LFgwu4A+2JQ +gdV9+SsMmHHEHdTgVvoMtOv0Yg0NVBaAd0tqKMjfnVfk/6RqKjkgQ7/CmDLSNBsK +dq1P5oVjmfA1U2N//MNtyd0gyAGgsTazUOL7DuVi8CCh6NTIpNIyMNXSccIM0//8 +fTcMJQr/Xpfcrlcp5d62GDTFqfMlb4ItQkMa4I3T33T9R5Dc5hoLFbVdytEuzxPn +OD2qVRl6hptnr1VfXXK1WD7KzuPI+gvGgf/iPCGMjLpwKWXBRD1K4AiPkS2zKoiQ +/bXCjM6Cj2wldwsJmTlwDuubkNDnfhueZORBdC9GwWeJ/ilD3ZRM6WoJS89blZc9 +FfDFyHBDNP8fnHYJvC3fbFvOV7C8xjwv3oXmjc4dQzhpmdldI1qcBxU73PYqEQG8 +ibfKA4kCOQQTAQgAIwUCWNW+HgIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheA +AAoJEIH5DsPNNWBgls4P/0LQ6cIGw2PbgmPWv0YFLG6hgGM0iJ7G8gwl6wAIVhs5 +AzCz3hadN0sPUMgg3tMFrvC9h+IVfxTefPuBut+dyEsJKrH/Ufj/ZULP+XcBu5ae +fxns/G2St8u8xa3bVcHDgm+A3vvX4T7ID/aUVPHR6SzaPFIvSM24mJWu2hsV0HZF +1NnLzrhKIrhYL3FlNSljTlq4yJgE3AvBBfFWhGmWBkV8/JTC/CoLAFMa4xZJOras +azJTi042NAbs3GGabeVy2djbkiA2AaEom7gUNR+wyxmvq9IZzY1RAZjDrxQNYW1m +t94dQMmI2IaHlZQWKaB7g6LBBapMGfqLc87yJmkQDjhV9SHoYn0xhBYnt4prjh3V +bkY12/EhrvAoHm8tE9PegP73/i9Ut+Z3NpnUQlBP0iFEVuoXx+7k+iqqaJFPOr6M +ypjcyHFd84QFyfVGMEKmYINh9wznE7WchI1QZdoJbKaHJbH0dtE/oPqj6jQwIKA2 +wu9XxAG1EwAkGrtetrraR4mm6IO3u78oSIKOcXY8QPMW9ybZ9/aWM24O+QK2aj28 +RzWd/JtNBAbQuRJA+AxYdHKUNqXrmSIdZHOW62oArfKOnFfbeI2qvk7Vb+D6xRD6 +hHfsNRaqsGmwat8UrCICoNl+a10JJLcpgbp/qDeNcKH7k2SKBjbfJ5xm/rJBQcYM +uQINBFjVvh4BEADzt2iKa1gSksHtTFkPQ5ULqUF2sHDClr3ykbLq/AxgSCON58eP +A9SKQy2O+qDpojHAN1UULJgHEn34afzMkBzjxcJXMRgaTV2M+1trjwx/VluD9OKX +wmnhmSdvCIP7Z0qdhU78maLq10UG1vVwej3kVlxsf4Eu2ZA+NeIr7Tj0DERqEDQo +DRtNPVEy3h1xoYruy/VjNDi1CI3yFkM6HW1CgRA50rI7GDtvOuitZy+9Lpqs0mWq +vdApWZxoQwslFcziNd+ZVaQjgO6LSnkDttRkAOblFiD710OQy3/Yo97i7bqsKrnZ +qQMRUk0n12VXY9I94c7ELfViVqGk123ELtTViiIz5BT5iQRkJj1GiizTgGY6cfsj +kwWwvabpmWYdyQ85sYoVuNAPz3yDaLdtStWRNHWi4+UHC03J2BiBgIrQbuXoNGuc +j0b1fsntdntaBoZgFygwW6kXUjHLeEfnrGX3C2X49zg0rBTvEzdZwr2K0xgc2z26 +1EEf5ObmOGRt27K1fwrCxKHbKTscReHv78S4v3uN/9LvHfvIEaBoYHqMCcxy7Aii +dk+02dNDO/jZDnTAJH2NWhyB+PJvrlnK34zHhUMVH0i5nUjaCDL/n07Vd2sbE5qW +ivE2MWeayVKRGPci80tEGA1i42FJzGiA1uZrxXNImnsyxQyS8cr9iKoTIQARAQAB +iQIfBBgBCAAJBQJY1b4eAhsMAAoJEIH5DsPNNWBg+bYQALJyD1nyuz8+vl8rqj7K +Z9aRSW+XeG/wz6xrAqdY3OVvHwXYw33pgOmhNhfMUgP/Uy5OsxZdjIO7NzyKa2H9 +JoVSsAs/eLQDOQCcwXruBND6zuxt99kZh6o/Xp4lII9vuLafKner+fWluFHhOy/w +E3Q3VwCbC9npbmzweEl9Q83R7IxbEhtFF5HV0wKVRzW/GX7iWADoHpkAAQ2sUnQp +HhE1wOrdPm0dD9BEbTRQHekUiIQ8cFoORyWbJBwbflY64ioaFjyM+Ji49pNMykie +LzQFW1UYyhkXJeTvv93ym4XyMi2mhsOzna7mG1bonKvbKj6qaXb7gFHUXHh/ARuu +6CNARzBh6BTp+7c1brthGjT/L8CxrAeW2oE5wVIRuk8mdKiFoK3BuXc1P+vsnp36 +ioOQ0y+KPcp+PSbw6oDp7hTHztcW/3EoAgyHneWCmtYYi6RmVptTNpeeyHwqRP/O +elCN1cw9zopofVQhnxDEUgzVPrWWaE7UR6vrHbzlXvWMeGTYtmdmo/9xkYbQzZW7 +y90QLUGyDwQ+KeCG29W3EhygGy3myVQbRaXywgzzO2YvovjATDa7wZQrXNoVE7J9 +uLonNtRlyRlTAfFP6hCLDXwuE6WRHXhdu7aFKbq0LQGFv5hY4wPUp8vnUtGYT/wo +qqSkuSYhzNvmuKBIHPs6YD8d +=d7Et +-----END PGP PUBLIC KEY BLOCK----- diff --git a/sh/templates/guix/manifest.scm b/sh/templates/guix/manifest.scm new file mode 100644 index 0000000..0c8a225 --- /dev/null +++ b/sh/templates/guix/manifest.scm @@ -0,0 +1,15 @@ +(specifications->manifest + (map symbol->string + '(coreutils + findutils + diffutils + grep + sed + git + tar + gzip + gawk + make + perl + shellcheck + pandoc))) diff --git a/sh/templates/guix/pinned-channels.scm b/sh/templates/guix/pinned-channels.scm new file mode 100644 index 0000000..67b5a51 --- /dev/null +++ b/sh/templates/guix/pinned-channels.scm @@ -0,0 +1,11 @@ +(list + (channel + (name 'guix) + (url "https://git.savannah.gnu.org/git/guix.git") + (commit + "d265809b782293eb42dd663b4611ca19dd2bf1b3") + (introduction + (make-channel-introduction + "9edb3f66fd807b096b48283debdcddccfea34bad" + (openpgp-fingerprint + "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/sh/templates/m4/guile.m4 b/sh/templates/m4/guile.m4 new file mode 100644 index 0000000..6968973 --- /dev/null +++ b/sh/templates/m4/guile.m4 @@ -0,0 +1,397 @@ +## Autoconf macros for working with Guile. +## +## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public License +## as published by the Free Software Foundation; either version 3 of +## the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301 USA + +# serial 10 + +## Index +## ----- +## +## GUILE_PKG -- find Guile development files +## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +## GUILE_FLAGS -- set flags for compiling and linking with Guile +## GUILE_SITE_DIR -- find path to Guile "site" directories +## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +## GUILE_MODULE_EXPORTS -- check if a module exports a variable +## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable + +## Code +## ---- + +## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged +## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). + +# GUILE_PKG -- find Guile development files +# +# Usage: GUILE_PKG([VERSIONS]) +# +# This macro runs the @code{pkg-config} tool to find development files +# for an available version of Guile. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0), falling back to the previous stable version +# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is +# found, an error is signalled. The found version is stored in +# @var{GUILE_EFFECTIVE_VERSION}. +# +# If @code{GUILE_PROGS} was already invoked, this macro ensures that the +# development files have the same effective version as the Guile +# program. +# +# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by +# @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PKG], + [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + if test "x$PKG_CONFIG" = x; then + AC_MSG_ERROR([pkg-config is missing, please install it]) + fi + _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" + if test -n "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp="" + for v in $_guile_versions_to_search; do + if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp=$v + fi + done + if test -z "$_guile_tmp"; then + AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) + fi + _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION + fi + GUILE_EFFECTIVE_VERSION="" + _guile_errors="" + for v in $_guile_versions_to_search; do + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_NOTICE([checking for guile $v]) + PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) + fi + done + + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_ERROR([ +No Guile development packages were found. + +Please verify that you have Guile installed. If you installed Guile +from a binary distribution, please verify that you have also installed +the development packages. If you installed it yourself, you might need +to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. +]) + fi + AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + ]) + +# GUILE_FLAGS -- set flags for compiling and linking with Guile +# +# Usage: GUILE_FLAGS +# +# This macro runs the @code{pkg-config} tool to find out how to compile +# and link programs against Guile. It sets four variables: +# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and +# @var{GUILE_LTLIBS}. +# +# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that +# uses Guile header files. This is almost always just one or more @code{-I} +# flags. +# +# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program +# against Guile. This includes @code{-lguile-@var{VERSION}} for the +# Guile library itself, and may also include one or more @code{-L} flag +# to tell the compiler where to find the libraries. But it does not +# include flags that influence the program's runtime search path for +# libraries, and will therefore lead to a program that fails to start, +# unless all necessary libraries are installed in a standard location +# such as @file{/usr/lib}. +# +# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to +# libtool, respectively, to link a program against Guile. It includes flags +# that augment the program's runtime search path for libraries, so that shared +# libraries will be found at the location where they were during linking, even +# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the +# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used +# when linking the program is done through libtool. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_FLAGS], + [AC_REQUIRE([GUILE_PKG]) + PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) + + dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by + dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS + dnl to us. + + GUILE_LDFLAGS=$GUILE_LIBS + + dnl Determine the platform dependent parameters needed to use rpath. + dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs + dnl the file gnulib/build-aux/config.rpath. + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) + GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) + GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" + + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_CFLAGS]) + AC_SUBST([GUILE_LDFLAGS]) + AC_SUBST([GUILE_LIBS]) + AC_SUBST([GUILE_LTLIBS]) + ]) + +# GUILE_SITE_DIR -- find path to Guile site directories +# +# Usage: GUILE_SITE_DIR +# +# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will +# be set to Guile's "site" directory for Scheme source files (usually something +# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the +# directory for compiled Scheme files also known as @code{.go} files +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). +# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two +# are set to blank if the particular version of Guile does not support +# them. Note that this macro will run the macros @code{GUILE_PKG} and +# @code{GUILE_PROGS} if they have not already been run. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_SITE_DIR], + [AC_REQUIRE([GUILE_PKG]) + AC_REQUIRE([GUILE_PROGS]) + AC_MSG_CHECKING(for Guile site directory) + GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_SITE) + if test "$GUILE_SITE" = ""; then + AC_MSG_FAILURE(sitedir not found) + fi + AC_SUBST(GUILE_SITE) + AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) + GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` + if test "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) + GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` + if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + GUILE_SITE_CCACHE="" + AC_MSG_WARN([siteccachedir not found]) + fi + fi + AC_MSG_RESULT($GUILE_SITE_CCACHE) + AC_SUBST([GUILE_SITE_CCACHE]) + AC_MSG_CHECKING(for Guile extensions directory) + GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_EXTENSION) + if test "$GUILE_EXTENSION" = ""; then + GUILE_EXTENSION="" + AC_MSG_WARN(extensiondir not found) + fi + AC_SUBST(GUILE_EXTENSION) + ]) + +# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +# +# Usage: GUILE_PROGS([VERSION]) +# +# This macro looks for programs @code{guile} and @code{guild}, setting +# variables @var{GUILE} and @var{GUILD} to their paths, respectively. +# The macro will attempt to find @code{guile} with the suffix of +# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and +# then fall back to looking for @code{guile} with no suffix. If +# @code{guile} is still not found, signal an error. The suffix, if any, +# that was required to find @code{guile} will be used for @code{guild} +# as well. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older +# version is found, the macro will signal an error. +# +# The effective version of the found @code{guile} is set to +# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective +# version is compatible with the result of a previous invocation of +# @code{GUILE_FLAGS}, if any. +# +# As a legacy interface, it also looks for @code{guile-config} and +# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PROGS], + [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" + if test -z "$_guile_required_version"; then + _guile_required_version=3.0 + fi + + _guile_candidates=guile + _tmp= + for v in `echo "$_guile_required_version" | tr . ' '`; do + if test -n "$_tmp"; then _tmp=$_tmp.; fi + _tmp=$_tmp$v + _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" + done + + AC_PATH_PROGS(GUILE,[$_guile_candidates]) + if test -z "$GUILE"; then + AC_MSG_ERROR([guile required but not found]) + fi + + _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` + _guile_effective_version=`$GUILE -c "(display (effective-version))"` + if test -z "$GUILE_EFFECTIVE_VERSION"; then + GUILE_EFFECTIVE_VERSION=$_guile_effective_version + elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then + AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) + fi + + _guile_major_version=`$GUILE -c "(display (major-version))"` + _guile_minor_version=`$GUILE -c "(display (minor-version))"` + _guile_micro_version=`$GUILE -c "(display (micro-version))"` + _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" + + AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) + _major_version=`echo $_guile_required_version | cut -d . -f 1` + _minor_version=`echo $_guile_required_version | cut -d . -f 2` + _micro_version=`echo $_guile_required_version | cut -d . -f 3` + if test "$_guile_major_version" -gt "$_major_version"; then + true + elif test "$_guile_major_version" -eq "$_major_version"; then + if test "$_guile_minor_version" -gt "$_minor_version"; then + true + elif test "$_guile_minor_version" -eq "$_minor_version"; then + if test -n "$_micro_version"; then + if test "$_guile_micro_version" -lt "$_micro_version"; then + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + AC_MSG_RESULT([$_guile_prog_version]) + + AC_PATH_PROG(GUILD,[guild$_guile_suffix]) + AC_SUBST(GUILD) + + AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) + AC_SUBST(GUILE_CONFIG) + if test -n "$GUILD"; then + GUILE_TOOLS=$GUILD + else + AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) + fi + AC_SUBST(GUILE_TOOLS) + ]) + +# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +# +# Usage: GUILE_CHECK_RETVAL(var,check) +# +# @var{var} is a shell variable name to be set to the return value. +# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and +# returning either 0 or non-#f to indicate the check passed. +# Non-0 number or #f indicates failure. +# Avoid using the character "#" since that confuses autoconf. +# +AC_DEFUN([GUILE_CHECK], + [AC_REQUIRE([GUILE_PROGS]) + $GUILE -c "$2" > /dev/null 2>&1 + $1=$? + ]) + +# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +# +# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. +# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). +# +AC_DEFUN([GUILE_MODULE_CHECK], + [AC_MSG_CHECKING([if $2 $4]) + GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) + if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi + AC_MSG_RESULT($$1) + ]) + +# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +# +# Usage: GUILE_MODULE_AVAILABLE(var,module) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# +AC_DEFUN([GUILE_MODULE_AVAILABLE], + [GUILE_MODULE_CHECK($1,$2,0,is available) + ]) + +# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +# +# Usage: GUILE_MODULE_REQUIRED(symlist) +# +# @var{symlist} is a list of symbols, WITHOUT surrounding parens, +# like: ice-9 common-list. +# +AC_DEFUN([GUILE_MODULE_REQUIRED], + [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) + if test "$ac_guile_module_required" = "no" ; then + AC_MSG_ERROR([required guile module not found: ($1)]) + fi + ]) + +# GUILE_MODULE_EXPORTS -- check if a module exports a variable +# +# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) +# +# @var{var} is a shell variable to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_EXPORTS], + [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') + ]) + +# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable +# +# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) +# +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], + [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) + if test "$guile_module_required_export" = "no" ; then + AC_MSG_ERROR([module $1 does not export $2; required]) + fi + ]) + +## guile.m4 ends here diff --git a/sh/templates/m4/links.m4 b/sh/templates/m4/links.m4 new file mode 100644 index 0000000..a96fb5f --- /dev/null +++ b/sh/templates/m4/links.m4 @@ -0,0 +1,25 @@ +AC_DEFUN([EU_LINKS], [ + AC_SUBST([TLD]) + + PACKAGE_VERSION_NUMBERS="`echo $PACKAGE_VERSION | cut -c2-`" + AC_SUBST([PACKAGE_VERSION_NUMBERS]) + + PACKAGE_DESCRIPTION="`awk '{print substr(@S|@0, 1, length(@S|@0)-1)}' $srcdir/description`" + AC_SUBST([PACKAGE_DESCRIPTION]) + + PACKAGE_CHANNEL_URL="git://git.$TLD/$PACKAGE/" + AC_SUBST([PACKAGE_CHANNEL_URL]) + + PACKAGE_GIT_URL="https://git.$TLD/$PACKAGE/" + AC_SUBST([PACKAGE_GIT_URL]) + + PACKAGE_CI_URL="https://ci.$TLD/" + AC_SUBST([PACKAGE_CI_URL]) + + PACKAGE_DOC_URL="https://$PACKAGE.$TLD/en/master/" + AC_SUBST([PACKAGE_DOC_URL]) + + if test "$PACKAGE_URL" != "https://$PACKAGE.$TLD"; then + AC_MSG_ERROR(['TLD' variable is out of sync with 'PACKAGE_URL': https://$PACKAGE.$TLD != $PACKAGE_URL]) + fi +]) diff --git a/sh/templates/m4/programmer-mode.m4 b/sh/templates/m4/programmer-mode.m4 new file mode 100644 index 0000000..876b878 --- /dev/null +++ b/sh/templates/m4/programmer-mode.m4 @@ -0,0 +1,17 @@ +AC_DEFUN([EU_PROGRAMMER_MODE], [ + AC_ARG_ENABLE([programmer-mode], + AS_HELP_STRING([--enable-programmer-mode], + [Enables all opt-in configure flags, and requires a full development environment [default=no]. Similar to --enable-maintainer-mode, without changing dependency tracking.]), + [PROGRAMMER_MODE=$enableval], + [PROGRAMMER_MODE=no]) + + AC_SUBST([PROGRAMMER_MODE]) + + AC_ARG_ENABLE([ci-mode], + AS_HELP_STRING([--enable-ci-mode], + [Enables CI-specific flag. Assumes --enable-programmer-mode [default=no].]), + [CI_MODE=$enableval], + [CI_MODE=no]) + + AC_SUBST([CI_MODE]) +]) diff --git a/sh/templates/rename/basic-channel.scm.in b/sh/templates/rename/basic-channel.scm.in new file mode 100644 index 0000000..024d085 --- /dev/null +++ b/sh/templates/rename/basic-channel.scm.in @@ -0,0 +1,72 @@ +(define-module (xyz euandreh @PACKAGE@ channel) + #:use-module ((guix licenses) #:prefix license:) + #:use-module (guix transformations) + #:use-module (guix gexp) + #:use-module (guix packages) + #:use-module (guix download) + #:use-module (guix git-download) + #:use-module (guix utils) + #:use-module (guix build-system gnu) + #:use-module (gnu packages) + #:use-module (gnu packages autotools) + #:use-module (gnu packages gnupg) + #:use-module (gnu packages guile) + #:use-module (gnu packages guile-xyz) + #:use-module (gnu packages mail) + #:use-module (gnu packages pkg-config) + #:use-module (gnu packages texinfo)) + +(define-public @PACKAGE@ + (package + (name "@PACKAGE@") + (version (car + (string-split (substring "@VERSION@" 1) + #\-))) + (source (origin + (method url-fetch) + (file-name (string-append name "-" version ".tar.gz")) + ;; URI available via: + ;; $ git fetch origin refs/notes/tarballs + ;; $ printf '@PACKAGE_GIT_URL@blob?id=%s' $(git notes --ref=refs/notes/tarballs list @VERSION@) + (uri "@PACKAGE_GIT_URL@blob?id=b6a3b84537adb5cdeccb43bd9e00956f8b55d359") + (sha256 + (base32 "1mraz2d85hgalkdml92x78br31rlbz298r8hf75fcsdlrf7n3d0p")))) + (build-system gnu-build-system) + (inputs + `()) + (native-inputs + `(("pkg-config" ,pkg-config))) + (synopsis "@PACKAGE_DESCRIPTION@") + (description "@PACKAGE_LONG_DESCRIPTION@") + (home-page "@PACKAGE_URL@") + (license license:agpl3+))) + +(define @PACKAGE@-master + (let ((@PACKAGE@-from-master + ((options->transformation + '((with-git-url . "@PACKAGE@=@PACKAGE_CHANNEL_URL@"))) + @PACKAGE@))) + (package + (inherit @PACKAGE@-from-master) + (name "@PACKAGE@-master") + (native-inputs + (append + (package-native-inputs @PACKAGE@) + `(("autoconf" ,autoconf) + ("automake" ,automake) + ("texinfo" ,texinfo))))))) + +(define repository-root + (canonicalize-path + (string-append (current-source-directory) + "/../../../../.."))) + +(define @PACKAGE@-dev + (package + (inherit @PACKAGE@-master) + (source (local-file repository-root + #:recursive? #t + #:select? (git-predicate repository-root))))) + +@PACKAGE@-dev +@PACKAGE@-master diff --git a/sh/templates/rename/empty-texinfo.texi b/sh/templates/rename/empty-texinfo.texi new file mode 100644 index 0000000..adf8221 --- /dev/null +++ b/sh/templates/rename/empty-texinfo.texi @@ -0,0 +1,5 @@ +\input texinfo +@settitle $PROJECT Documentation +@documentencoding UTF-8 + +@bye diff --git a/sh/util.sh b/sh/util.sh new file mode 100644 index 0000000..7e4e942 --- /dev/null +++ b/sh/util.sh @@ -0,0 +1,50 @@ +#!/bin/sh + +extract () { + if [ -f "$1" ] ; then + case "$1" in + *.tar.bz2) tar xvjf "$1" ;; + *.tar.gz) tar xvzf "$1" ;; + *.bz2) bunzip2 "$1" ;; + *.rar) unrar x "$1" ;; + *.gz) gunzip "$1" ;; + *.tar) tar xvf "$1" ;; + *.tbz2) tar xvjf "$1" ;; + *.tgz) tar xvzf "$1" ;; + *.zip) unzip "$1" ;; + *.Z) uncompress "$1" ;; + *.7z) 7z x "$1" ;; + *.xz) unxz "$1" ;; + *) echo "don't know how to extract '$1'..." ;; + esac + else + echo "'$1' is not a valid file!" + fi +} + +genpassword() { + length="${1-99}" + tr -cd '[:alnum:]' < /dev/urandom | fold "-w$length" | head -n1 ||: +} + +t() { + expand "$1" -t2 | sponge "$1" +} + +task() { + TITLE="${1:-FIXME}" + printf '## TODO %s {#task-%s}\n- TODO in %s\n\n---\n\nFIXME\n' \ + "$TITLE" "$(uuidgen)" "$(date -I)" | \ + vipe | \ + printf '%s\n\n%s\n\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ + sponge TODOs.md +} + +gvi() { + if [ -e "$1" ]; then + INIT="gpg -qd" + else + INIT="echo" + fi + $INIT "$1" | vipe | gpg -qer eu@euandre.org | sponge "$1" +} diff --git a/sh/x.sh b/sh/x.sh new file mode 100644 index 0000000..7e28b20 --- /dev/null +++ b/sh/x.sh @@ -0,0 +1,18 @@ +#!/bin/sh + +setxkbmap -option esperanto:qwerty +xset r rate 225 75 + +# query with: xdg-mime query filetype +xdg-mime default evince.desktop application/pdf +xdg-mime default mpv.desktop video/mp4 +xdg-mime default mpv.desktop video/webm +xdg-mime default mpv.desktop video/x-matroska +xdg-mime default mpv.desktop audio/mpeg +xdg-mime default mpv.desktop audio/x-flac + +xdg-mime default firefox.desktop text/html +xdg-mime default firefox.desktop text/xml + +xdg-mime default nautilus.desktop inode/directory +xmodmap ~/.Xmodmap diff --git a/spacemacs.el b/spacemacs.el index a2adf40..986f14e 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -646,7 +646,7 @@ dump." (defun euandreh/find-fake-symlinks-file () (interactive) - (find-file-existing (concat (getenv "DOTFILES") "/bash/fake-symlinks.sh"))) + (find-file-existing (concat (getenv "DOTFILES") "/sh/fake-symlinks.sh"))) ;; Taken from: ;; https://notmuchmail.org/emacstips/#index25h2 -- cgit v1.2.3 From 1dcec1fa44cb8fb6fb023fdfaa201e9f89e294f7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:10:17 -0300 Subject: Remove elfeed --- cron/backup.sh | 3 +-- cron/elfeed.sh | 48 ------------------------------------------------ nixos/common.nix | 1 - nixos/configuration.nix | 2 +- sh/fake-symlinks.sh | 2 +- spacemacs.el | 17 +---------------- 6 files changed, 4 insertions(+), 69 deletions(-) delete mode 100755 cron/elfeed.sh diff --git a/cron/backup.sh b/cron/backup.sh index f92bd5d..ad4eb1e 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -26,8 +26,7 @@ borg create \ ~/.mozilla/ \ ~/.config/quodlibet/ \ ~/gPodder/ \ - ~/dev/libre/website/ \ - ~/.elfeed/ + ~/dev/libre/website/ # add folders to be backed up here # borg prune --keep-last 60 --verbose "$R:desktop-borg" diff --git a/cron/elfeed.sh b/cron/elfeed.sh deleted file mode 100755 index fd6c2c7..0000000 --- a/cron/elfeed.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" - -QUERY=$(cat < ~/.elfeed/ril.xml - -timeout 120 \ - emacs \ - -batch \ - -l ~/.emacs.d/init.el \ - --eval "(run-hooks 'emacs-startup-hook)" \ - --eval '(euandreh/elfeed-batch-update)' diff --git a/nixos/common.nix b/nixos/common.nix index 59160ac..0268f8a 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -15,7 +15,6 @@ let report-summary-job = "30 13 * * *"; annex-job = daily-at-12h30min; - elfeed-job = daily-at-12h30min; backup-job = daily-at-12h30min; repo-update-job = daily-at-12h30min; notmuch-dump-job = daily-at-12h30min; diff --git a/nixos/configuration.nix b/nixos/configuration.nix index f01c67b..800f7ef 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -188,7 +188,7 @@ in { zathura st pavucontrol - newsboat # replacing elfeed + newsboat acpi xsel pinentry diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index d04c822..0a19922 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -4,7 +4,7 @@ pushd "${DOTFILES}/sh/templates/" > /dev/null || exit 1 export DOLLAR='$' mkdir -p "$DOTFILES/cron/generated/" -for job in report-summary annex elfeed backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do +for job in report-summary annex backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" chmod +x "$HOME/dev/libre/dotfiles/cron/${job}.sh" chmod +x "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" diff --git a/spacemacs.el b/spacemacs.el index 986f14e..7b70a26 100644 --- a/spacemacs.el +++ b/spacemacs.el @@ -49,8 +49,6 @@ This function should only modify configuration layer settings." docker elixir erc - (elfeed :variables - rmh-elfeed-org-files '("~/.emacs.d/private/elfeed.org")) elm emacs-lisp epub @@ -813,17 +811,6 @@ through `notmuch-message-attach-regex'." :action '(("Find file" . (lambda (f) (find-file (concat "~/" f)))))))) -(defun euandreh/elfeed-batch-update () - (message "Starting (elfeed-update).") - (elfeed-org) - (elfeed) - (elfeed-update) - (while (> (elfeed-queue-count-total) 0) - (print (elfeed-queue-count-total)) - (sleep-for 1) - (accept-process-output)) - (message "Done.")) - (defun dotspacemacs/user-config () "Configuration function for user code. This function is called at the very end of Spacemacs initialization after layers configuration. @@ -850,7 +837,6 @@ This is the place where most of your configurations should be done. Unless it is "p C-r" 'euandreh/projectile-reload-known-projects "an" 'notmuch "ai" 'erc-track-switch-buffer - "af" 'elfeed "w/" 'split-window-right-and-focus "w-" 'split-window-below-and-focus "glh" 'git-link-homepage @@ -1000,7 +986,6 @@ This is the place where most of your configurations should be done. Unless it is ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared")) browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url - elfeed-search-filter "@2020-01-01--0-day-ago -news -high_volume " auth-source-debug t @@ -1052,7 +1037,7 @@ This function is called at the very end of Spacemacs initialization." ;; Your init file should contain only one such instance. ;; If there is more than one, they won't work right. '(package-selected-packages - '(po-mode lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode elfeed-web elfeed-org elfeed-goodies ace-jump-mode noflet elfeed treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) + '(po-mode lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode ace-jump-mode noflet treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) '(safe-local-variable-values '((eval add-hook 'before-save-hook 'time-stamp) (javascript-backend . tide) -- cgit v1.2.3 From 7d49a7102065946534ad3b2bc1372db7ec6b74a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:18:22 -0300 Subject: gc-nix.sh: Move to POSIX sh --- scripts/gc-nix.sh | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/scripts/gc-nix.sh b/scripts/gc-nix.sh index 540fc89..8ff2d5d 100755 --- a/scripts/gc-nix.sh +++ b/scripts/gc-nix.sh @@ -1,16 +1,18 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh +set -eu # shellcheck source=/dev/null . "$DOTFILES/sh/colors.sh" yellow "Cleaning up the NixOS store\n" -profiles=(per-user/root/channels per-user/andreh/profile per-user/andreh/channels system) +PROFILES="$(mktemp)" +printf "per-user/root/channels\nper-user/andreh/profile\nper-user/andreh/channels\nsystem\n" > "$PROFILES" -for p in "${profiles[@]}"; do - sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" -done +while IFS='' read -r p; do + echo sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" +done < "$PROFILES" +exit 0 # Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= nix-env --delete-generations old -- cgit v1.2.3 From b0ae0d434f68cd74643facebe3bb8a7681abbbf0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:19:15 -0300 Subject: git mv sh/config.sh sh/bash-config.sh --- sh/bash-config.sh | 55 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ sh/bashrc.sh | 2 +- sh/config.sh | 55 ------------------------------------------------------- 3 files changed, 56 insertions(+), 56 deletions(-) create mode 100644 sh/bash-config.sh delete mode 100644 sh/config.sh diff --git a/sh/bash-config.sh b/sh/bash-config.sh new file mode 100644 index 0000000..a8f86cb --- /dev/null +++ b/sh/bash-config.sh @@ -0,0 +1,55 @@ +#!/usr/bin/env bash + +# ~/.bashrc: executed by bash(1) for non-login shells. + +# derived from Ubuntu's default .bashrc + + +# If not running interactively, don't do anything +case $- in + *i*) ;; + *) return;; +esac + +# Don't put duplicate linesin the history. +# Don't store commands that start with an empty space. +# See bash(1) for more options +HISTCONTROL=ignoreboth + +# append to the history file, don't overwrite it +shopt -s histappend + +# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) +HISTSIZE=1000000 +HISTFILESIZE=2000000 + +# check the window size after each command and, if necessary, +# update the values of LINES and COLUMNS. +shopt -s checkwinsize + +# If set, the pattern "**" used in a pathname expansion context will +# match all files and zero or more directories and subdirectories. +shopt -s globstar + +# If set, the pattern "*" will also match dotfiles. +shopt -s dotglob + +stty -ixon + + +# Taken from: +# https://sanctum.geek.nz/arabesque/better-bash-history/ + +# Record timestamps +# If you set $HISTTIMEFORMAT to something useful, Bash will record the timestamp of each command in its history. In this variable you can specify the format in which you want this timestamp displayed when viewed with history. I find the full date and time to be useful, because it can be sorted easily and works well with tools like cut and awk. +HISTTIMEFORMAT='%F %T ' + +# Use one command per line +# To make your .bash_history file a little easier to parse, you can force commands that you entered on more than one line to be adjusted to fit on only one with the cmdhist option: +shopt -s cmdhist + +# Store history immediately +# By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: +PROMPT_COMMAND='history -a' + +bind -x '"\e\C-l": c' diff --git a/sh/bashrc.sh b/sh/bashrc.sh index d8ad26a..edb7340 100644 --- a/sh/bashrc.sh +++ b/sh/bashrc.sh @@ -3,7 +3,7 @@ export DOTFILES=~/dev/libre/dotfiles -. $DOTFILES/sh/config.sh +. $DOTFILES/sh/bash-config.sh . $DOTFILES/sh/env.sh . "$GUIX_PROFILE/etc/profile" . $DOTFILES/sh/colors.sh diff --git a/sh/config.sh b/sh/config.sh deleted file mode 100644 index a8f86cb..0000000 --- a/sh/config.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/usr/bin/env bash - -# ~/.bashrc: executed by bash(1) for non-login shells. - -# derived from Ubuntu's default .bashrc - - -# If not running interactively, don't do anything -case $- in - *i*) ;; - *) return;; -esac - -# Don't put duplicate linesin the history. -# Don't store commands that start with an empty space. -# See bash(1) for more options -HISTCONTROL=ignoreboth - -# append to the history file, don't overwrite it -shopt -s histappend - -# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) -HISTSIZE=1000000 -HISTFILESIZE=2000000 - -# check the window size after each command and, if necessary, -# update the values of LINES and COLUMNS. -shopt -s checkwinsize - -# If set, the pattern "**" used in a pathname expansion context will -# match all files and zero or more directories and subdirectories. -shopt -s globstar - -# If set, the pattern "*" will also match dotfiles. -shopt -s dotglob - -stty -ixon - - -# Taken from: -# https://sanctum.geek.nz/arabesque/better-bash-history/ - -# Record timestamps -# If you set $HISTTIMEFORMAT to something useful, Bash will record the timestamp of each command in its history. In this variable you can specify the format in which you want this timestamp displayed when viewed with history. I find the full date and time to be useful, because it can be sorted easily and works well with tools like cut and awk. -HISTTIMEFORMAT='%F %T ' - -# Use one command per line -# To make your .bash_history file a little easier to parse, you can force commands that you entered on more than one line to be adjusted to fit on only one with the cmdhist option: -shopt -s cmdhist - -# Store history immediately -# By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: -PROMPT_COMMAND='history -a' - -bind -x '"\e\C-l": c' -- cgit v1.2.3 From e34dce693129a08fea6fa72e086c7f401ce6fcf3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:22:17 -0300 Subject: sh/mr-execute.sh: Move to POSIX sh and remove Emacs-specific stuff --- sh/mr-execute.sh | 13 +++---------- 1 file changed, 3 insertions(+), 10 deletions(-) diff --git a/sh/mr-execute.sh b/sh/mr-execute.sh index fd2112e..469d944 100644 --- a/sh/mr-execute.sh +++ b/sh/mr-execute.sh @@ -1,17 +1,10 @@ -#!/usr/bin/env bash +#!/bin/sh -pushd ~/ > /dev/null || exit 1 +cd ~/ || exit 1 AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt" mkdir -p "$(dirname "$AUTOJUMP_TXT")" touch "$AUTOJUMP_TXT" - mr checkout > /dev/null -mkdir -p ~/.emacs.d/.cache/ -(mr inject2 3>&2 2>&1 1>&3) 2>/dev/null | \ - sed -E 's/\/home\/andreh/~/' | \ - awk '{print "\""$1"/""\""}' | \ - cat <(printf "(\\n") - <(printf ")") > ~/.emacs.d/.cache/projectile-bookmarks.eld - -popd > /dev/null || exit 1 +cd - || exit 1 -- cgit v1.2.3 From 2274ffef29a8d04ef7d72bc20f65beba9edba65b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:32:56 -0300 Subject: xmobar-mpris.sh: Move to POSIX sh and simplify --- xmonad/scripts/xmobar-mpris.sh | 47 +++++++++--------------------------------- 1 file changed, 10 insertions(+), 37 deletions(-) diff --git a/xmonad/scripts/xmobar-mpris.sh b/xmonad/scripts/xmobar-mpris.sh index a2af8c4..0b06004 100755 --- a/xmonad/scripts/xmobar-mpris.sh +++ b/xmonad/scripts/xmobar-mpris.sh @@ -1,43 +1,16 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh +set -eu -CUR_PATH="${HOME}/.cache/andreh/mpris-player.txt" +CUR_PATH="$HOME/.cache/andreh/mpris-player.txt" +mkdir -p "$(dirname "$CUR_PATH")" +touch "$CUR_PATH" -urldecode() { : "${*//+/ }"; echo -e "${_//%/\\x}"; } - -default_status() { - CUR="${1}" - printf "%s: %s\n" "${CUR}" "$(playerctl --player="${CUR}" metadata --format "{{ title }} - {{ album }}")" -} - -main() { - CUR="$(cat "${CUR_PATH}")" - if [[ "$(playerctl --player="${CUR}" status)" = "Paused" ]]; then - printf "%s\n" "${CUR}" +while true; do + CUR="$(cat "$CUR_PATH")" + if [ "$(playerctl --player="$CUR" status)" = 'Paused' ]; then + printf '%s\n' "$CUR" else - case "${CUR}" in - cmus) - default_status "${CUR}" - ;; - firefox*) - printf "%s: %s\n" "$(cut -d. -f1 <(echo "${CUR}"))" "$(playerctl --player="${CUR}" metadata --format "{{ title }}")" - ;; - vlc) - printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" - ;; - *) - default_status "${CUR}" - ;; - esac + printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" fi -} -export -f main - -mkdir -p "$(dirname "${CUR_PATH}")" -touch "${CUR_PATH}" - -while true -do - main sleep 1 done -- cgit v1.2.3 From e5123a73abfcb6d1b7531d66be6495711b4bbc37 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:36:38 -0300 Subject: pastebin.sh: Move to POSIX sh --- scripts/pastebin.sh | 16 ++++++++-------- 1 file changed, 8 insertions(+), 8 deletions(-) diff --git a/scripts/pastebin.sh b/scripts/pastebin.sh index d4c3159..b7e196f 100755 --- a/scripts/pastebin.sh +++ b/scripts/pastebin.sh @@ -1,5 +1,5 @@ -#!/usr/bin/env bash -set -Eeuo pipefail +#!/bin/sh +set -eu usage() { red "Missing argument <${1}>.\n" @@ -21,7 +21,7 @@ EOF } FULL_TITLE="${1:-}" -[[ -z "$FULL_TITLE" ]] && { +[ -z "$FULL_TITLE" ] && { usage 'FULL_TITLE' exit 2 } @@ -41,16 +41,16 @@ slugify() { SLUG_TITLE="$(slugify "$FULL_TITLE")" PASTE_DATE="$(date -I)" OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" -if [[ -n "${2:-}" ]]; then +if [ -n "${2:-}" ]; then shift CONTENT=$(cat "$@") else CONTENT='FIXME' fi -pushd ~/dev/libre/website > /dev/null +cd ~/dev/libre/website > /dev/null -[[ -f "$OUT" ]] && { +[ -f "$OUT" ] && { red "Pastebin named $OUT already exists." exit 1 } @@ -79,7 +79,7 @@ git reset . git add "$OUT" git commit -m "$0: Auto-add $OUT" "$(nix-build -A publishScript)/bin/publish.sh" -open "https://euandre.org/pastebin/$(tr '-' '/' <<< "$PASTE_DATE")/$SLUG_TITLE.html" +open "https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" git push git push srht -popd > /dev/null +cd - > /dev/null -- cgit v1.2.3 From a76804b86ce1bbe92495035463358d269cccf6da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:37:20 -0300 Subject: pastebin.sh: Remove git push --- scripts/pastebin.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/scripts/pastebin.sh b/scripts/pastebin.sh index b7e196f..e12096b 100755 --- a/scripts/pastebin.sh +++ b/scripts/pastebin.sh @@ -80,6 +80,4 @@ git add "$OUT" git commit -m "$0: Auto-add $OUT" "$(nix-build -A publishScript)/bin/publish.sh" open "https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" -git push -git push srht cd - > /dev/null -- cgit v1.2.3 From 792a972435c08ea55bdf49da20c188a9b46da601 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:39:30 -0300 Subject: rm sh/templates/build-aux/sphinx-build-web-assets.sh --- sh/templates/build-aux/sphinx-build-web-assets.sh | 64 ----------------------- 1 file changed, 64 deletions(-) delete mode 100755 sh/templates/build-aux/sphinx-build-web-assets.sh diff --git a/sh/templates/build-aux/sphinx-build-web-assets.sh b/sh/templates/build-aux/sphinx-build-web-assets.sh deleted file mode 100755 index 0bf494f..0000000 --- a/sh/templates/build-aux/sphinx-build-web-assets.sh +++ /dev/null @@ -1,64 +0,0 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../ - -OUT='public' -PROJECT_UC="__PROJECT_UC__" - -pushd doc -make html -popd - -cp doc/favicon.ico "$OUT" -mv doc/_build/html/_static/ "$OUT/_static/" - -CURRENT_LANG="$(jq -r .current_lang < metadata.json)" -LANGS="$(jq -r .langs[] < metadata.json)" -TAGS="$(git tag | cat - <(echo master))" - -for lang in ${LANGS}; do - for tag in ${TAGS}; do - mkdir -p "tmp/$lang/$tag/" - git --work-tree="tmp/$lang/$tag/" checkout --recurse-submodules "$tag" -- . - git reset . - git checkout . - - pushd "tmp/$lang/$tag/doc/" - jq ".version = \"$tag\"" ../metadata.json | sponge ../metadata.json - - RENAMES="$(jq ".$lang" < ../doc/i18n-pagenames.json | \ - jq -r 'to_entries[] | [.key, .value] | @csv' | \ - tr -d '\"')" - - if [[ "$lang" != "$CURRENT_LANG" ]]; then - for rename in $RENAMES; do - from="$(echo "$rename" | cut -d, -f1)" - to="$(echo "$rename" | cut -d, -f2)" - mv "${from}.rst" "${to}.rst" - sed -i "s/^ $from$/ $to/" index.rst - done - fi - - make SPHINXOPTS="-D language=$lang" latexpdf singlehtml html - popd - - mkdir "$OUT/$lang/" - - mv "tmp/$lang/$tag/doc/_build/html/" "$OUT/$lang/$tag/" - pushd "$OUT/$lang/$tag/" - rm -rf _static/ - ln -s ../../_static . - popd - - mv "tmp/$lang/$tag/doc/_build/singlehtml/" "$OUT/$lang/$tag/single/" - pushd "$OUT/$lang/$tag/single/" - rm -rf _static/ - ln -s ../../../_static . - rm -rf _images/ - ln -s ../_images . - popd - - mv "tmp/$lang/$tag/doc/_build/latex/${PROJECT_UC,,}.pdf" "$OUT/$lang/$tag/${PROJECT_UC}.pdf" - done -done -- cgit v1.2.3 From 7215402835e45319d8fd5686d3e25fe412ceb813 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:41:55 -0300 Subject: sh/templates/build-aux/assert-docs-spelling.sh: Move to POSIX sh --- sh/templates/build-aux/assert-docs-spelling.sh | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/sh/templates/build-aux/assert-docs-spelling.sh b/sh/templates/build-aux/assert-docs-spelling.sh index 6720bc5..5340319 100755 --- a/sh/templates/build-aux/assert-docs-spelling.sh +++ b/sh/templates/build-aux/assert-docs-spelling.sh @@ -1,12 +1,10 @@ -#!/usr/bin/env bash -set -Eeuo pipefail -cd "$(dirname "${BASH_SOURCE[0]}")" -cd ../doc/ +#!/bin/sh +set -eu export LANG=C.UTF-8 for DICT in dictionaries/*.txt; do - diff <(sort "$DICT") "$DICT" || { + sort "$DICT" | diff - "$DICT" || { echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 echo " LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2 exit 1 @@ -18,10 +16,12 @@ LANGS="$(jq -r .langs[] < ../metadata.json)" for l in ${LANGS}; do make SPHINXOPTS="-D language=$l" html - hunspell -u3 -H -d "$l" -p <(cat dictionaries/international.txt "dictionaries/$l.txt") _build/html/*.html | tee -a "$OUT" + DICT="$(mktemp)" + cat dictionaries/international.txt "dictionaries/$l.txt" > "$DICT" + hunspell -u3 -H -d "$l" -p "$DICT" _build/html/*.html | tee -a "$OUT" done -if [[ -s "$OUT" ]]; then +if [ -s "$OUT" ]; then printf "\nvvv Mispelled words detected by hunspell.\n\n" sort < "$OUT" | uniq printf "\n^^^\n" >&2 -- cgit v1.2.3 From ac297809424a1684789c2cb5f539b57db297366d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:44:43 -0300 Subject: README.md: Remove old content --- README.md | 157 +++----------------------------------------------------------- 1 file changed, 6 insertions(+), 151 deletions(-) diff --git a/README.md b/README.md index 0746121..0e5e8e3 100644 --- a/README.md +++ b/README.md @@ -1,85 +1,9 @@ -# dotfiles - EuAndreh\'s personal repository +# dotfiles - EuAndreh's personal repository -## Instructions - setting up a new NixOS installation +## Paperkey -### 1. Prepare the USB stick - -Get the link for the [NixOS ISO -image](https://nixos.org/nixos/download.html) (prefer the KDE image for -easy network connection) and burn it to the USB stick (check the device -with `lsblk`): - -``` {.shell} -NIXOS_URL='https://releases.nixos.org/nixos...linux.iso' -wget https://euandre.org/dotfiles/nixos/burn.sh -chmod +x burn.sh -./burn.sh "${NIXOS_URL}" /dev/sdb -``` - -### 2. Performing a fresh install - -Put the USB stick in the new laptop and boot from it. - -First we need to get the internet connection working. Check that the -wireless interface name is actually `wlp2s0` or something else (use -`ip a` of `ifconfig` for that), and use `wpa_supplicant` to perform the -connection: - -``` {.shell} -wpa_supplicant -B -i wlp2s0 -c <(wpa_passphrase SSID PASSPHRASE) -``` - -Now we need to also double check the driver name with `lsblk`. We\'ll -assume it\'s `/dev/sda`. - -After that all we need is to download the installation script and run it -with the correct arguments: - -``` {.shell} -curl https://euandre.org/dotfiles/nixos/install.sh > install.sh -chmod +x install.sh -LAPTOP_NAME='velhinho-nixos' -sudo ./install.sh "${LAPTOP_NAME}" /dev/sda -``` - -### 3. Bootstraping the new installation\'s configuration and data - -After booting up from the freshly installed NixOS, login into the -**GNOME+Xorg** option on the top right corner. Connect again to the -internet using the network applet and launch a terminal window. - -Now we\'ll need the GPG keys to decrypt the Git Annex repo, decrypt the -SSH keys and bootstrap from there. - -Get the `keys.gpg` file with both private and public keys (see -[exporting GPG keys](#exporting-gpg-key-pairs) below on how to do that) -from the external disk and run the setup script: - -``` {.shell} -curl https://euandre.org/dotfiles/nixos/setup.sh | bash -s ~/path/to/keys.gpg -``` - -Now just follow the instructions of the script. - -That\'s all! - -## Resources - -### Exporting GPG key pairs - -Export the GPG data using `export-keys.sh` and put it in a disk drive to -do an offline transfer: - -``` {.shell} -export-keys.sh -mv EuAndreh.tar.gpg ~/UTCLOUD/ -``` - -### Paperkey - -Paperkey generate using: - -``` {.shell} +Paperkey generated using: +```shell cat < paperkey-content.txt @@ -91,77 +15,8 @@ rm out* EOF ``` -To recover a paperkey: - -``` {.shell} -paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import -``` - -### `export-keys.sh` +To recover from a paperkey: ```shell -#!/usr/bin/env bash -set -Eeuo pipefail - -yellow "Exporting public key..." -gpg --export --armor -a EuAndreh > keys.gpg -green "Done." - -yellow "Exporting private key..." -read -p "A prompt for the GPG password will appear! (Press any key to continue)" -n 1 -r -gpg --export-secret-keys --armor -a EuAndreh >> keys.gpg -green "Done." - -yellow "Exporting ownertrust..." -gpg --export-ownertrust > trust.txt -green "Done." - -yellow "Creating tar with key pair and trust content..." -tar -cvf EuAndreh.tar keys.gpg trust.txt -green "Done." - -yellow "Encrypting tar file..." -read -p "A prompt for the symmetric encryption key of the keys.gpg file will appear! (Press any key to continue)" -n 1 -r -gpg --cipher-algo AES256 -c EuAndreh.tar -green "Done." - -yellow "Removing traces of private key..." -shred trust.txt -rm trust.txt -shred keys.gpg -rm keys.gpg -shred EuAndreh.tar -rm EuAndreh.tar -green "Done." - -blue "File 'EuAndreh.tar.gpg' created!" -``` - -### `copy-public-key.sh` - -``` -#!/bin/sh -set -eux - -FINGERPRINT='5BDAE9B8B2F6C6BCBB0D6CE581F90EC3CD356060' -FILE="$(mktemp)" - -gpg --batch --yes --output "${FILE}" --armor --export "${FINGERPRINT}" - -# Update keyserver -# gpg --send-keys "${FINGERPRINT}" - -# Add to website -cp "${FILE}" ~/dev/libre/website/public-key.txt - -# Update in euandreh-guix-channel -cd ~/dev/libre/euandreh-guix-channel/ -git checkout keyring -cp "${FILE}" euandreh.key -cd - - -# Update in github: can't be done - -# Clean up -rm "${FILE}" +paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import ``` -- cgit v1.2.3 From 245f5e9ead328ee6967df67ac1e046e6b21f3a6c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 16:59:23 -0300 Subject: fake-symlinks.sh: POSIXfy a bit, not fully quite there yet --- sh/fake-symlinks.sh | 249 ++++++++++++++++++++++++++-------------------------- 1 file changed, 124 insertions(+), 125 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 0a19922..79f66a1 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -1,22 +1,21 @@ #!/usr/bin/env bash -pushd "${DOTFILES}/sh/templates/" > /dev/null || exit 1 -export DOLLAR='$' +cd "$DOTFILES/sh/templates/" || exit 1 mkdir -p "$DOTFILES/cron/generated/" for job in report-summary annex backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/${job}.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/${job}-job.sh" + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/$job-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/$job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/$job-job.sh" done mkdir -p "$HOME/annex/bin/cron/generated/" # shellcheck disable=2043 for job in pacheco; do prefix="$HOME/annex/bin/cron" - sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/${job}-job.sh" - chmod +x "$HOME/annex/bin/cron/${job}.sh" - chmod +x "$HOME/annex/bin/cron/${job}-job.sh" + sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/$job-job.sh" + chmod +x "$HOME/annex/bin/cron/$job.sh" + chmod +x "$HOME/annex/bin/cron/$job-job.sh" done mkdir -p ~/archive/torrent/ @@ -25,8 +24,8 @@ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torren DEFAULT_TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' sed -e "$DEFAULT_TLD_SCRIPT" < build-aux/ci/git-pre-push.sh.in > build-aux/ci/git-pre-push.sh -normalize-name() { - if [[ -n "$RENAME_TO" ]]; then +normalize_name() { + if [ -n "$RENAME_TO" ]; then echo "$RENAME_TO" elif [[ "$1" = ..* ]]; then echo "${1:1}" @@ -35,26 +34,26 @@ normalize-name() { fi } -cp-all() { +cp_all() { for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" + OUT="$PREFIX/$(normalize_name "$f")" mkdir -p "$(dirname "$OUT")" cp "$f" "$OUT" done } -cp-if-not() { +cp_if_not() { for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - if [[ ! -f "$OUT" ]]; then - cp-all "$f" + OUT="$PREFIX/$(normalize_name "$f")" + if [ ! -f "$OUT" ]; then + cp_all "$f" fi done } -envsubst-all() { +envsubst_all() { for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" + OUT="$PREFIX/$(normalize_name "$f")" mkdir -p "$(dirname "$OUT")" envsubst < "$f" > "$OUT" @@ -64,18 +63,18 @@ envsubst-all() { done } -envsubst-if-not() { +envsubst_if_not() { for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" - if [[ ! -f "$OUT" ]]; then - envsubst-all "$f" + OUT="$PREFIX/$(normalize_name "$f")" + if [ ! -f "$OUT" ]; then + envsubst_all "$f" fi done } -sed-all() { +sed_all() { for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" + OUT="$PREFIX/$(normalize_name "$f")" mkdir -p "$(dirname "$OUT")" if [ -n "$ENABLE_CI" ]; then @@ -105,16 +104,16 @@ sed-all() { done } -sed-if-not() { +sed_if_not() { for f in "$@"; do - OUT="$PREFIX/$(normalize-name "$f")" + OUT="$PREFIX/$(normalize_name "$f")" if [ ! -f "$OUT" ]; then - sed-all "$f" + sed_all "$f" fi done } -ln-env() { +ln_env() { export PROJECT="$1" export PREFIX="${PREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}" export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" @@ -158,7 +157,7 @@ ln-env() { fi } -ln-init() { +ln_init() { if ! grep -q "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini; then red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")" fi @@ -168,9 +167,9 @@ ln-init() { fi } -ln-autotools() { +ln_autotools() { chmod +w "$PREFIX/INSTALL" 2> /dev/null ||: - cp-all AUTHORS \ + cp_all AUTHORS \ bootstrap \ ChangeLog \ build-aux/dev-checks.am \ @@ -181,151 +180,151 @@ ln-autotools() { # dev-cheks.am: test maintainer mode # https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html - cp-if-not description + cp_if_not description # assumes: - # - ln-workflow for .gitignore - # - ln-git-notes-release for Makefile.am - # - ln-guix-files for Makefile.am - envsubst-if-not ..gitignore README.in - sed-if-not configure.ac Makefile.am + # - ln_workflow for .gitignore + # - ln_git_notes_release for Makefile.am + # - ln_guix_files for Makefile.am + envsubst_if_not ..gitignore README.in + sed_if_not configure.ac Makefile.am } -ln-build-aux() { - cp-all build-aux/assert-todos.sh \ +ln_build_aux() { + cp_all build-aux/assert-todos.sh \ build-aux/assert-shellcheck.sh \ build-aux/workflow/TODOs.sh \ build-aux/workflow/README.sh \ build-aux/workflow/style.css \ build-aux/workflow/preamble.md - cp-if-not TODOs.md + cp_if_not TODOs.md } -ln-agpl() { - cp-all COPYING +ln_agpl() { + cp_all COPYING } -ln-guix-files() { - cp-all build-aux/with-container.sh \ +ln_guix_files() { + cp_all build-aux/with-container.sh \ build-aux/assert-shellcheck.sh - cp-if-not guix/manifest.scm + cp_if_not guix/manifest.scm if [ -n "$ENABLE_GUIX_PROJECT_CHANNEL" ]; then - cp-all .guix-channel \ + cp_all .guix-channel \ .guix-authorizations \ guix/channel/euandreh.key if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then - RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp-if-not rename/basic-channel.scm.in + RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp_if_not rename/basic-channel.scm.in fi fi if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then - cp-all guix/pinned-channels.scm + cp_all guix/pinned-channels.scm else - cp-if-not guix/pinned-channels.scm + cp_if_not guix/pinned-channels.scm fi } -ln-ci() { +ln_ci() { if [ -n "$ENABLE_CI" ]; then if [ -n "$ENABLE_AUTOTOOLS" ]; then - sed-all build-aux/ci/git-pre-push.sh.in + sed_all build-aux/ci/git-pre-push.sh.in else - EXECUTABLE=1 sed-all build-aux/ci/git-pre-push.sh + EXECUTABLE=1 sed_all build-aux/ci/git-pre-push.sh fi - cp-all build-aux/assert-shellcheck.sh \ + cp_all build-aux/assert-shellcheck.sh \ build-aux/ci/ci-build.sh \ build-aux/ci/git-post-receive.sh ln -fs "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" else - EXECUTABLE=1 sed-all ..git/hooks/pre-push + EXECUTABLE=1 sed_all ..git/hooks/pre-push fi } -ln-git-notes-release() { - cp-all build-aux/git-notes-release.am build-aux/git-notes-release.sh - cp-if-not NEWS +ln_git_notes_release() { + cp_all build-aux/git-notes-release.am build-aux/git-notes-release.sh + cp_if_not NEWS } -ln-dicts() { - cp-if-not doc/dictionaries/international.txt doc/dictionaries/en.txt +ln_dicts() { + cp_if_not doc/dictionaries/international.txt doc/dictionaries/en.txt } -ln-pandoc-index() { - cp-all build-aux/compile-readme.sh +ln_pandoc_index() { + cp_all build-aux/compile-readme.sh } -ln-web-assets-file() { +ln_web_assets_file() { mkdir -p "$PREFIX/build-aux/" cp "build-aux/$1-build-web-assets.sh" "$PREFIX/build-aux/build-web-assets.sh" } -ln-scribble() { - ln-dicts +ln_scribble() { + ln_dicts } -ln-antora() { - ln-dicts +ln_antora() { + ln_dicts } -ln-base-autotools-guix-project() { - ln-env "$1" - ln-init +ln_base_autotools_guix_project() { + ln_env "$1" + ln_init - ln-build-aux - ln-guix-files - ln-git-notes-release - ln-autotools - ln-generated-readme - ln-pandoc-index + ln_build_aux + ln_guix_files + ln_git_notes_release + ln_autotools + ln_generated_readme + ln_pandoc_index - ln-agpl - ln-ci + ln_agpl + ln_ci - ln-dicts + ln_dicts if [ -n "$ENABLE_GUILE" ]; then - cp-all build-aux/guile.am m4/guile.m4 + cp_all build-aux/guile.am m4/guile.m4 fi if [ -n "$ENABLE_RUST" ]; then - cp-all build-aux/rust.am + cp_all build-aux/rust.am fi } -ln-texinfo-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - RENAME_TO="doc/$PROJECT.texi" envsubst-if-not rename/empty-texinfo.texi - ln-web-assets-file texinfo - cp-all build-aux/docbook-xsl.tar.gz +ln_texinfo_autotools_guix_project() { + ln_base_autotools_guix_project "$1" + RENAME_TO="doc/$PROJECT.texi" envsubst_if_not rename/empty-texinfo.texi + ln_web_assets_file texinfo + cp_all build-aux/docbook-xsl.tar.gz } -ln-sphinx-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - cp-all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico - envsubst-all doc/conf.py.in doc/_templates/layout.html - envsubst-if-not doc/index.rst - # EXECUTABLE=1 sed-all build-aux/build-sphinx.sh - cp-if-not doc/i18n-pagenames.json doc/Makefile +ln_sphinx_autotools_guix_project() { + ln_base_autotools_guix_project "$1" + cp_all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico + envsubst_all doc/conf.py.in doc/_templates/layout.html + envsubst_if_not doc/index.rst + # EXECUTABLE=1 sed_all build-aux/build-sphinx.sh + cp_if_not doc/i18n-pagenames.json doc/Makefile } -ln-scribble-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - ln-scribble +ln_scribble_autotools_guix_project() { + ln_base_autotools_guix_project "$1" + ln_scribble } -ln-antora-autotools-guix-project() { - ln-base-autotools-guix-project "$1" - ln-antora +ln_antora_autotools_guix_project() { + ln_base_autotools_guix_project "$1" + ln_antora } -ln-simple-makefile() { - envsubst-if-not Makefile +ln_simple_makefile() { + envsubst_if_not Makefile } -ln-generated-readme() { - if [[ ! -f "$PREFIX/README" ]]; then +ln_generated_readme() { + if [ ! -f "$PREFIX/README" ]; then cat <(printf "%s\n\n" "$PROJECT_UC") \ <(fold < "$PREFIX/description") \ <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \ @@ -333,27 +332,27 @@ ln-generated-readme() { fi } -ln-makefile-only-guix-project() { - ln-env "$1" - ln-agpl - ln-build-aux - ln-guix-files - ln-ci - ln-simple-makefile +ln_makefile_only_guix_project() { + ln_env "$1" + ln_agpl + ln_build_aux + ln_guix_files + ln_ci + ln_simple_makefile } -ln-bare-project() { - ln-env "$1" - ln-agpl - ln-ci +ln_bare_project() { + ln_env "$1" + ln_agpl + ln_ci } -ln-description-foreign-project() { - ln-env "$1" +ln_description_foreign_project() { + ln_env "$1" # Foreign projects may have Makefiles and alike, and I don't want # to have CI files copied to the repository ENABLE_CI= - ln-ci + ln_ci } declare -A PROJECT_NAMES=( @@ -402,7 +401,7 @@ declare -A GUIX_PROJECT_NO_CHANNEL=( [vps]=1 ) -ln-all() { +ln_all() { LN_FN="$1" shift for f in "$@"; do @@ -410,13 +409,13 @@ ln-all() { done } -ln-all ln-texinfo-autotools-guix-project guile-quickcheck guile-pds guile-clap cement songbooks -ln-all ln-sphinx-autotools-guix-project libedn x-bindgen eq mediator -# ln-all ln-scribble-autotools-guix-project -ln-all ln-antora-autotools-guix-project byopds spalc -ln-all ln-makefile-only-guix-project vps pires remembering -ln-all ln-description-foreign-project guix parsecc -ln-all ln-bare-project parseclj \ +ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds guile-clap cement songbooks +ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator +# ln_all ln_scribble_autotools_guix_project +ln_all ln_antora_autotools_guix_project byopds spalc +ln_all ln_makefile_only_guix_project vps pires remembering +ln_all ln_description_foreign_project guix parsecc +ln_all ln_bare_project parseclj \ boneco \ brinquedoteca \ casa-do-caminho \ @@ -430,4 +429,4 @@ ln-all ln-bare-project parseclj \ cargo2nix-demo \ website -popd > /dev/null || exit 1 +cd - || exit 1 -- cgit v1.2.3 From 56e60d748fe35301256500106cfaf25dd8182f0e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 17:01:03 -0300 Subject: Ignore output of "cd -" --- sh/fake-symlinks.sh | 2 +- sh/mr-execute.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 79f66a1..24653e2 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -429,4 +429,4 @@ ln_all ln_bare_project parseclj \ cargo2nix-demo \ website -cd - || exit 1 +cd - > /dev/null || exit 1 diff --git a/sh/mr-execute.sh b/sh/mr-execute.sh index 469d944..70479da 100644 --- a/sh/mr-execute.sh +++ b/sh/mr-execute.sh @@ -7,4 +7,4 @@ mkdir -p "$(dirname "$AUTOJUMP_TXT")" touch "$AUTOJUMP_TXT" mr checkout > /dev/null -cd - || exit 1 +cd - > /dev/null || exit 1 -- cgit v1.2.3 From 7292967aa3999d285d15f5fa5253a695d21ae5a3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 19:46:07 -0300 Subject: fake-symlinks.sh: Toggle README.sh --- sh/fake-symlinks.sh | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 24653e2..8426987 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -155,6 +155,12 @@ ln_env() { else ENABLE_GUIX_PROJECT_CHANNEL=1 fi + + if [ -f "$PREFIX/README.md" ]; then + ENABLE_README_SH=1 + else + ENABLE_README_SH= + fi } ln_init() { @@ -194,10 +200,13 @@ ln_build_aux() { cp_all build-aux/assert-todos.sh \ build-aux/assert-shellcheck.sh \ build-aux/workflow/TODOs.sh \ - build-aux/workflow/README.sh \ build-aux/workflow/style.css \ build-aux/workflow/preamble.md + if [ "$ENABLE_README_SH" ]; then + cp_all build-aux/workflow/README.sh + fi + cp_if_not TODOs.md } -- cgit v1.2.3 From 9c026e0904b3a2e0b57b08722ca8cf08fe20e2e6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 19:51:33 -0300 Subject: fake-symlinks: Makefile: Use newer TODOs.sh and README.sh --- sh/templates/Makefile | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 11233df..3290603 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -7,7 +7,10 @@ check: clean: rm -rf public/ +NAME_UC = $PROJECT_UC +NAME = $PROJECT +MAILING_LIST = $MAILING_LIST .PHONY: public public: - sh build-aux/generate-tasks-and-bugs.sh - pandoc -s --metadata title='$PROJECT_UC - EuAndreh' -c styles.css -o public/index.html README.md + sh build-aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) + sh build-aux/workflow/README.sh $(NAME_UC) $(NAME) -- cgit v1.2.3 From 3f266e17f1386751a44dd2a94805bb8f6cf471a1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 19:51:54 -0300 Subject: fake-symlinks.sh: Remove .git/hooks/pre-push before symlinking This avoids the "no such file or directory" error when running 'ln -fs' on a broken symlink. --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 8426987..b51ba8f 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -245,7 +245,8 @@ ln_ci() { cp_all build-aux/assert-shellcheck.sh \ build-aux/ci/ci-build.sh \ build-aux/ci/git-post-receive.sh - ln -fs "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" + rm "$PREFIX/.git/hooks/pre-push" + ln -s "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" else EXECUTABLE=1 sed_all ..git/hooks/pre-push fi -- cgit v1.2.3 From 2832439ca02f59bd95a425bd6624727006109c51 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 19:53:13 -0300 Subject: fake-symlinks.sh: Make website a "makefile_only_guix_project", without making it a Guix channel --- sh/fake-symlinks.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index b51ba8f..ba23e18 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -409,6 +409,7 @@ declare -A RUST_PROJECT=( declare -A GUIX_PROJECT_NO_CHANNEL=( [vps]=1 + [website]=1 ) ln_all() { @@ -423,7 +424,7 @@ ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds guile-clap ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc -ln_all ln_makefile_only_guix_project vps pires remembering +ln_all ln_makefile_only_guix_project vps pires remembering website ln_all ln_description_foreign_project guix parsecc ln_all ln_bare_project parseclj \ boneco \ @@ -436,7 +437,6 @@ ln_all ln_bare_project parseclj \ swift2nix \ swift2nix-demo \ cargo2nix \ - cargo2nix-demo \ - website + cargo2nix-demo cd - > /dev/null || exit 1 -- cgit v1.2.3 From b11ad5925f58f2ba565b30cf5d1197610199616d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 23 Jan 2021 20:13:52 -0300 Subject: fzf.sh: Use plain fzf over fzf-tmux for better screen usage --- sh/fzf.sh | 21 ++++++++++----------- 1 file changed, 10 insertions(+), 11 deletions(-) diff --git a/sh/fzf.sh b/sh/fzf.sh index 0496f23..d7d93a9 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -6,7 +6,6 @@ # readline > fzf # . "$(fzf-share)/key-bindings.bash" -export FZF_TMUX=1 export FZF_CTRL_T_OPTS=' --preview "(cat {} || tree -C {}) 2> /dev/null" --select-1 @@ -18,14 +17,14 @@ export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"' fzg() { fn=$(git grep -n "$1" | \ cut -d: -f -2 | \ - fzf-tmux --select-1 \ - --exit-0 \ - --preview "echo {} | \ - cut -d: -f1 | \ - xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) ' - (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print } - NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print } - ' %") + fzf --select-1 \ + --exit-0 \ + --preview "echo {} | \ + cut -d: -f1 | \ + xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) ' + (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print } + NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print } + ' %") if [ -n "$fn" ]; then f="$(echo "$fn" | cut -d: -f1)" n="$(echo "$fn" | cut -d: -f2)" @@ -38,7 +37,7 @@ fzg() { f() { profile="$(pwd | sed -e 's_/_:_g')" - file="$(git ls-files | remembering -p "$profile" -c "fzf-tmux --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" + file="$(git ls-files | remembering -p "$profile" -c "fzf --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" if [ -n "$file" ]; then # shellcheck disable=2068 history -s f $@ @@ -58,7 +57,7 @@ dev/libre/others/dinheiros/money.ledger v() { # I want to keep the pre-defined order - f="$(echo "$V_FILES" | awk /./ | fzf-tmux --select-1 --exit-0 --query "$1")" + f="$(echo "$V_FILES" | awk /./ | fzf --select-1 --exit-0 --query "$1")" if [ -n "$f" ]; then history -s v "$@" # shellcheck disable=2088 -- cgit v1.2.3 From 46e9c07c84af4c1c8bf8cb8cb019dc42f9c6046d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 01:31:52 -0300 Subject: yeganesh -> remembering --- guix/os.scm | 2 +- nixos/configuration.nix | 3 +-- xmonad/xmonad.hs | 7 +------ 3 files changed, 3 insertions(+), 9 deletions(-) diff --git a/guix/os.scm b/guix/os.scm index 7bcb90f..9524ef7 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -130,7 +130,7 @@ ghc ghc-xmonad-contrib xmobar - yeganesh + remembering arandr alsa-utils ; for xmonad volume controls xset diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 800f7ef..b336003 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -197,7 +197,6 @@ in { fzf calcurse pandoc - remembering buku # replaces Firefox bookmarks ## Mail @@ -239,7 +238,7 @@ in { lightdm fvwm # =xpmroot= haskellPackages.xmobar - haskellPackages.yeganesh + remembering arandr alsaUtils # for xmonad volume commands diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 184f0eb..2e5d9f2 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -49,13 +49,8 @@ myKeyPBindings = , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/zero-brightness.sh") , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh +10") - - -- yeganesh launcher - , ("M-p", spawnHere "exe=$(yeganesh -x) && exec $exe") - + , ("M-p", spawnHere "exe=$(dmenu_path | remembering -p dmenu_exec -c dmenu) && exec $exe") , ("M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh") - - -- yeganesh emoji , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh") -- Lock screen -- cgit v1.2.3 From 8d5a99e05b60189b29081658a61c283da2fe8792 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 12:43:09 -0300 Subject: fake-symlinks: assert-todos.sh: Enforce statuses to be in sync --- sh/templates/build-aux/assert-todos.sh | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/sh/templates/build-aux/assert-todos.sh b/sh/templates/build-aux/assert-todos.sh index 0b0a8d6..fea8395 100755 --- a/sh/templates/build-aux/assert-todos.sh +++ b/sh/templates/build-aux/assert-todos.sh @@ -9,26 +9,49 @@ fi awk -F'{#' ' BEGIN { - status=0 - idx=0 + exitstatus = 0 + h2flag = 0 + h2status = "" + prevline = "" + idx = 0 delete ids[0] } +h2flag == 1 { + split($0, l, " ") + timelinestatus = l[2] + if (h2status != timelinestatus) { + print "h2/timeline status mismatch for line " NR-1 + print prevline + print $0 + exitstatus = 1 + } + h2status = "" + h2flag = 0 +} + /^## / { if (match($0, / \{#.*?\}$/) == 0) { print "Missing ID for line " NR ":\n" $0 - status=1 + exitstatus = 1 } id_with_prefix = substr($2, 0, length($2) - 1) match(id_with_prefix, /^\w+-/) id = substr(id_with_prefix, RLENGTH + 1) if (id in arr) { print "Duplicate ID: " id - status=1 + exitstatus = 1 } else { arr[id] = 1 } + + split($0, l, " ") + h2status = l[2] + h2flag = 1 + prevline = $0 } + + /^# Improvements$/ { - exit status + exit exitstatus } ' TODOs.md -- cgit v1.2.3 From 49f43868b4a93ec7d78b002b61bdd27dabb9a5c7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 17:11:19 -0300 Subject: aliases.sh: Add (funny) vi aliases --- sh/aliases.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sh/aliases.sh b/sh/aliases.sh index 1d1fbf9..15646ab 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -43,3 +43,6 @@ alias diff='diff --color=auto' alias sudo='sudo ' alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce' + +alias :x='echo "Already out of vi XD"' +alias :w='echo "Not inside vi!" && false' -- cgit v1.2.3 From 07b5346bb29f02f46485ab1505f6478428cdf2d8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 19:13:01 -0300 Subject: aliases.sh: s/source/./g --- sh/aliases.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sh/aliases.sh b/sh/aliases.sh index 15646ab..6a83d54 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -31,9 +31,9 @@ u() { cd - > /dev/null || exit 1; } -alias reload="source $DOTFILES/sh/reload.sh" -alias rr="source $DOTFILES/sh/reload.sh" -alias r="source ~/.bashrc" +alias reload=". $DOTFILES/sh/reload.sh" +alias rr=". $DOTFILES/sh/reload.sh" +alias r=". ~/.bashrc" alias ag="ag --hidden" alias jk-shell="bundix && nix-shell -E '((import {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'" -- cgit v1.2.3 From f7b669263473aa82bf96eb8b1cb104a0831966d1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 22:02:28 -0300 Subject: nixos/configuration.nix: Add package for providing c99 utility --- nixos/configuration.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b336003..592bf01 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -109,6 +109,11 @@ in { ln -s $out/bin/bmake $out/bin/make ''; }); + tinycc-with-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/tcc $out/bin/c99 + ''; + }); pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { postPatch = '' substituteInPlace ar_io.c --replace 'putenv' '// putenv' @@ -224,6 +229,7 @@ in { gnugrep file ed + tinycc-with-alias ## Containers and VMs qemu -- cgit v1.2.3 From 9b41aa3870a2acabc80b6fc81676f04d6c6a4b63 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 22:02:55 -0300 Subject: Fix cronjobs --- .gitignore | 3 +-- cron/delever-enqueued-emails.sh | 4 ++++ cron/sync-mail.sh | 5 +++++ nixos/common.nix | 3 +-- sh/fake-symlinks.sh | 6 +++--- 5 files changed, 14 insertions(+), 7 deletions(-) create mode 100755 cron/delever-enqueued-emails.sh create mode 100755 cron/sync-mail.sh diff --git a/.gitignore b/.gitignore index cc96959..ba23cb2 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1 @@ -/result -/cron/*-job.sh +/cron/generated/ diff --git a/cron/delever-enqueued-emails.sh b/cron/delever-enqueued-emails.sh new file mode 100755 index 0000000..98cbafe --- /dev/null +++ b/cron/delever-enqueued-emails.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eux + +: diff --git a/cron/sync-mail.sh b/cron/sync-mail.sh new file mode 100755 index 0000000..cdee275 --- /dev/null +++ b/cron/sync-mail.sh @@ -0,0 +1,5 @@ +#!/bin/sh +set -eux + +mbsync -a +notmuch new diff --git a/nixos/common.nix b/nixos/common.nix index 0268f8a..2cb2dfd 100644 --- a/nixos/common.nix +++ b/nixos/common.nix @@ -7,8 +7,7 @@ let pub-crons = { no-mail = { sync-mail = every-x-hours; - deliver-queued-mail = every-x-hours; - deliver-my-enqueued-emails = every-x-hours; + deliver-enqueued-emails = every-x-hours; }; with-mail = { diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index ba23e18..1e74beb 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -4,9 +4,9 @@ cd "$DOTFILES/sh/templates/" || exit 1 mkdir -p "$DOTFILES/cron/generated/" for job in report-summary annex backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/$job-job.sh" + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/generated/$job-job.sh" chmod +x "$HOME/dev/libre/dotfiles/cron/$job.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/$job-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/generated/$job-job.sh" done mkdir -p "$HOME/annex/bin/cron/generated/" @@ -15,7 +15,7 @@ for job in pacheco; do prefix="$HOME/annex/bin/cron" sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/$job-job.sh" chmod +x "$HOME/annex/bin/cron/$job.sh" - chmod +x "$HOME/annex/bin/cron/$job-job.sh" + chmod +x "$HOME/annex/bin/cron/generated/$job-job.sh" done mkdir -p ~/archive/torrent/ -- cgit v1.2.3 From 4356c3bc87792a77c8204d6dd401ee8004b40eed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 22:24:28 -0300 Subject: Remove QuodLibet and Firefox from backups --- cron/backup.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/cron/backup.sh b/cron/backup.sh index ad4eb1e..83378e9 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -23,8 +23,6 @@ borg create \ ~/BigSync/ \ ~/mbsync/ \ ~/archive/ \ - ~/.mozilla/ \ - ~/.config/quodlibet/ \ ~/gPodder/ \ ~/dev/libre/website/ # add folders to be backed up here -- cgit v1.2.3 From 6aa54c7581d3511a3f3dd27b2fa2c4df67fc0fe1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 22:25:03 -0300 Subject: usurpador.nix: Remove deleted cronjob --- nixos/usurpador.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix index fbe2997..79f1ef0 100644 --- a/nixos/usurpador.nix +++ b/nixos/usurpador.nix @@ -11,8 +11,7 @@ in rec { allowUnfree = builtins.length proprietaryPackages > 0; cronJobs = [ common.crons.sync-mail - common.crons.deliver-queued-mail - common.crons.deliver-my-enqueued-emails + common.crons.deliver-enqueued-emails common.crons.report-summary-job -- cgit v1.2.3 From bd644f5a17f66d89c08458aacc57cb932a9d291d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 24 Jan 2021 22:26:21 -0300 Subject: xmonad: Bind M-b to URL form to add to buku --- nixos/configuration.nix | 1 + xmonad/scripts/yad-buku.sh | 8 ++++++++ xmonad/xmonad.hs | 2 ++ 3 files changed, 11 insertions(+) create mode 100755 xmonad/scripts/yad-buku.sh diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 592bf01..305dee5 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -247,6 +247,7 @@ in { remembering arandr alsaUtils # for xmonad volume commands + yad ## GUI programs audacity diff --git a/xmonad/scripts/yad-buku.sh b/xmonad/scripts/yad-buku.sh new file mode 100755 index 0000000..20d2f8e --- /dev/null +++ b/xmonad/scripts/yad-buku.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -euo + +URL="$(yad --title 'Add the URL' --form --field 'URL')" + +if [ -n "$URL" ]; then + buku -a "$URL" +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 2e5d9f2..8dcf008 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -53,6 +53,8 @@ myKeyPBindings = , ("M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh") , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh") + , ("M-b", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/yad-buku.sh") + -- Lock screen , ("C-M-l", spawn "dm-tool switch-to-greeter") -- cgit v1.2.3 From 75b409d3deec18723ccd751e171f5bb98cdabbe9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 08:18:48 -0300 Subject: Configure GPG to manage SSH authentication --- nixos/configuration.nix | 4 ++-- sh/agents.sh | 26 ++++++-------------------- 2 files changed, 8 insertions(+), 22 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 305dee5..198501e 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -142,10 +142,11 @@ in { gitAndTools.gitRemoteGcrypt git-crypt git-lfs - gnupg mr borgbackup pass + gnupg + pinentry_gtk2 ## CLI tools groff @@ -281,7 +282,6 @@ in { programs = { bash.enableCompletion = true; autojump.enable = true; - gnupg.agent.enable = true; }; xdg.portal.enable = true; diff --git a/sh/agents.sh b/sh/agents.sh index 6a008b0..f392c86 100644 --- a/sh/agents.sh +++ b/sh/agents.sh @@ -1,25 +1,11 @@ #!/bin/sh -# shellcheck disable=SC2015 -# shellcheck disable=SC1090 +SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) GPG_TTY=$(tty) -export GPG_TTY - -export SSH_ENV="$HOME/.ssh/environment" -start_agent() { - echo "Initialising new SSH agent..." - ssh-agent | sed 's/^echo/#echo/' > "${SSH_ENV}" - echo succeeded - chmod 600 "${SSH_ENV}" - . "${SSH_ENV}" > /dev/null - ssh-add -} - -[ -f "${SSH_ENV}" ] && { - . "${SSH_ENV}" > /dev/null - pgrep ^ssh-agent$ > /dev/null || { - start_agent - } -} || start_agent +export GPG_TTY SSH_AUTH_SOCK +gpgconf --launch gpg-agent +mkdir -p ~/.ssh +gpg --export-ssh-key eu@euandre.org > ~/.ssh/id_rsa.pub +chmod 600 ~/.ssh/id_rsa.pub eval "$(direnv hook bash)" -- cgit v1.2.3 From 72146d3cd43f379597dfa5aac4123b768267ee65 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 08:33:26 -0300 Subject: configuration.nix: Add qutebrowser package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 198501e..416b517 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -254,6 +254,7 @@ in { audacity zbar calibre + qutebrowser (mpv-with-scripts.override { scripts = with mpvScripts; [ mpris sponsorblock ]; }) -- cgit v1.2.3 From aab61947605c5100f846b0b9e617b9149499da47 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 09:23:06 -0300 Subject: scripts/gc-nix.sh: Remove leftover debugging echo and exit --- scripts/gc-nix.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/gc-nix.sh b/scripts/gc-nix.sh index 8ff2d5d..7c22c1d 100755 --- a/scripts/gc-nix.sh +++ b/scripts/gc-nix.sh @@ -9,10 +9,9 @@ PROFILES="$(mktemp)" printf "per-user/root/channels\nper-user/andreh/profile\nper-user/andreh/channels\nsystem\n" > "$PROFILES" while IFS='' read -r p; do - echo sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" + sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" done < "$PROFILES" -exit 0 # Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= nix-env --delete-generations old -- cgit v1.2.3 From a580ed7798a7727f159469c407e4afa33e2692db Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 09:51:01 -0300 Subject: env.sh: Add $RLWRAP_HOME variable --- sh/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/env.sh b/sh/env.sh index c1f9be6..8311356 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -7,6 +7,7 @@ export INPUTRC=~/.inputrc export BORG_REMOTE_PATH='borg1' export GOPATH="$HOME/dev/go" export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" +export RLWRAP_HOME="$HOME/.cache/rlwrap" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From 6ab055129e9c0e8a6b78070d8d46b32267b6b9a3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 11:29:39 -0300 Subject: sh/ps1.sh: Remove deletions of \n, now unrequired by new color functions --- sh/ps1.sh | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/sh/ps1.sh b/sh/ps1.sh index 0746a83..05a5797 100644 --- a/sh/ps1.sh +++ b/sh/ps1.sh @@ -3,16 +3,16 @@ error_marker() { # shellcheck disable=2181 if [ "$?" != 0 ]; then - redb ' (!!) ' | tr -d '\n' + redb ' (!!) ' fi } timestamp() { - blacki '\T' | tr -d '\n' + blacki '\T' } path() { - yellowb '\w/' | tr -d '\n' + yellowb '\w/' } repo_status() { @@ -61,20 +61,20 @@ repo_status() { LINE="($BRANCH_MARKER)" fi - "$COLOR_FN" "$LINE" | tr -d '\n' + "$COLOR_FN" "$LINE" printf ' - ' - blacki "$(git rev-parse HEAD)" | tr -d '\n' + blacki "$(git rev-parse HEAD)" fi } guix_env() { if [ "$GUIX_ENVIRONMENT" != '' ]; then printf '\n' - blacki '~> ' | tr -d '\n' - purple 'guix environment ' | tr -d '\n' + blacki '~> ' + purple 'guix environment ' printf '(' - blueb "$GUIX_ENVIRONMENT" | tr -d '\n' + blueb "$GUIX_ENVIRONMENT" printf ')' fi } @@ -82,13 +82,13 @@ guix_env() { in_nix_shell() { if [ "$IN_NIX_SHELL" != '' ]; then printf '\n' - blacki '~> ' | tr -d '\n' - purpleb "$IN_NIX_SHELL " | tr -d '\n' - purple 'nix-shell ' | tr -d '\n' + blacki '~> ' + purpleb "$IN_NIX_SHELL " + purple 'nix-shell ' printf '(' # $name comes from the mkShell declaration # shellcheck disable=2154 - blueb "$name" | tr -d '\n' + blueb "$name" printf ')' fi } -- cgit v1.2.3 From 880449fab584166008d8c1bee98e656fe669ea94 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 14:48:41 -0300 Subject: cron/backup.sh: Add buku databaase to backup --- cron/backup.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cron/backup.sh b/cron/backup.sh index 83378e9..7976df3 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -24,6 +24,7 @@ borg create \ ~/mbsync/ \ ~/archive/ \ ~/gPodder/ \ + ~/.local/share/buku/ \ ~/dev/libre/website/ # add folders to be backed up here -- cgit v1.2.3 From 1e055ce64359ef3a15079ea028d20a9ec1158e17 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 16:31:08 -0300 Subject: fake-symlinks: Move assert-todos.sh into workflow/ --- sh/fake-symlinks.sh | 8 ++-- sh/templates/build-aux/assert-todos.sh | 57 ------------------------- sh/templates/build-aux/workflow/assert-todos.sh | 57 +++++++++++++++++++++++++ 3 files changed, 61 insertions(+), 61 deletions(-) delete mode 100755 sh/templates/build-aux/assert-todos.sh create mode 100755 sh/templates/build-aux/workflow/assert-todos.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1e74beb..103f3d3 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -197,10 +197,10 @@ ln_autotools() { } ln_build_aux() { - cp_all build-aux/assert-todos.sh \ - build-aux/assert-shellcheck.sh \ - build-aux/workflow/TODOs.sh \ - build-aux/workflow/style.css \ + cp_all build-aux/assert-shellcheck.sh \ + build-aux/workflow/assert-todos.sh \ + build-aux/workflow/TODOs.sh \ + build-aux/workflow/style.css \ build-aux/workflow/preamble.md if [ "$ENABLE_README_SH" ]; then diff --git a/sh/templates/build-aux/assert-todos.sh b/sh/templates/build-aux/assert-todos.sh deleted file mode 100755 index fea8395..0000000 --- a/sh/templates/build-aux/assert-todos.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -set -eu - -if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.md." - exit 1 -fi - -awk -F'{#' ' -BEGIN { - exitstatus = 0 - h2flag = 0 - h2status = "" - prevline = "" - idx = 0 - delete ids[0] -} -h2flag == 1 { - split($0, l, " ") - timelinestatus = l[2] - if (h2status != timelinestatus) { - print "h2/timeline status mismatch for line " NR-1 - print prevline - print $0 - exitstatus = 1 - } - h2status = "" - h2flag = 0 -} - -/^## / { - if (match($0, / \{#.*?\}$/) == 0) { - print "Missing ID for line " NR ":\n" $0 - exitstatus = 1 - } - id_with_prefix = substr($2, 0, length($2) - 1) - match(id_with_prefix, /^\w+-/) - id = substr(id_with_prefix, RLENGTH + 1) - if (id in arr) { - print "Duplicate ID: " id - exitstatus = 1 - } else { - arr[id] = 1 - } - - split($0, l, " ") - h2status = l[2] - h2flag = 1 - prevline = $0 -} - - -/^# Improvements$/ { - exit exitstatus -} -' TODOs.md diff --git a/sh/templates/build-aux/workflow/assert-todos.sh b/sh/templates/build-aux/workflow/assert-todos.sh new file mode 100755 index 0000000..1d568cb --- /dev/null +++ b/sh/templates/build-aux/workflow/assert-todos.sh @@ -0,0 +1,57 @@ +#!/bin/sh +set -eu + +if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/workflow/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.md." + exit 1 +fi + +awk -F'{#' ' +BEGIN { + exitstatus = 0 + h2flag = 0 + h2status = "" + prevline = "" + idx = 0 + delete ids[0] +} +h2flag == 1 { + split($0, l, " ") + timelinestatus = l[2] + if (h2status != timelinestatus) { + print "h2/timeline status mismatch for line " NR-1 + print prevline + print $0 + exitstatus = 1 + } + h2status = "" + h2flag = 0 +} + +/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { + if (match($0, / \{#.*?\}$/) == 0) { + print "Missing ID for line " NR ":\n" $0 + exitstatus = 1 + } + id_with_prefix = substr($2, 0, length($2) - 1) + match(id_with_prefix, /^\w+-/) + id = substr(id_with_prefix, RLENGTH + 1) + if (id in arr) { + print "Duplicate ID: " id + exitstatus = 1 + } else { + arr[id] = 1 + } + + split($0, l, " ") + h2status = l[2] + h2flag = 1 + prevline = $0 +} + + +/^# Scratch$/ { + exit exitstatus +} +' TODOs.md -- cgit v1.2.3 From a0b6ff77bf7b991bc98f2fb416094b825feed6a2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 17:57:54 -0300 Subject: fake-symlinks: Move Guix CI files to build-aux/guix/ --- build-aux/ci/ci-build.sh | 4 ++-- sh/fake-symlinks.sh | 9 +++++---- sh/templates/Makefile.am | 6 +++--- sh/templates/build-aux/ci/ci-build.sh | 4 ++-- sh/templates/build-aux/default-extra-dist.am | 10 +++++----- sh/templates/build-aux/guix/manifest.scm | 15 +++++++++++++++ sh/templates/build-aux/guix/pinned-channels.scm | 11 +++++++++++ sh/templates/build-aux/guix/with-container.sh | 4 ++++ sh/templates/build-aux/with-container.sh | 4 ---- sh/templates/guix/manifest.scm | 15 --------------- sh/templates/guix/pinned-channels.scm | 11 ----------- 11 files changed, 47 insertions(+), 46 deletions(-) create mode 100644 sh/templates/build-aux/guix/manifest.scm create mode 100644 sh/templates/build-aux/guix/pinned-channels.scm create mode 100755 sh/templates/build-aux/guix/with-container.sh delete mode 100755 sh/templates/build-aux/with-container.sh delete mode 100644 sh/templates/guix/manifest.scm delete mode 100644 sh/templates/guix/pinned-channels.scm diff --git a/build-aux/ci/ci-build.sh b/build-aux/ci/ci-build.sh index b7a4c38..0b792df 100755 --- a/build-aux/ci/ci-build.sh +++ b/build-aux/ci/ci-build.sh @@ -35,8 +35,8 @@ EOF git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' - if [ -f build-aux/with-container.sh ]; then - RUNNER='./build-aux/with-container.sh' + if [ -f build-aux/guix/with-container.sh ]; then + RUNNER='./build-aux/guix/with-container.sh' else RUNNER='sh -c' fi diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 103f3d3..bac8960 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -215,9 +215,9 @@ ln_agpl() { } ln_guix_files() { - cp_all build-aux/with-container.sh \ + cp_all build-aux/guix/with-container.sh \ build-aux/assert-shellcheck.sh - cp_if_not guix/manifest.scm + cp_if_not build-aux/guix/manifest.scm if [ -n "$ENABLE_GUIX_PROJECT_CHANNEL" ]; then cp_all .guix-channel \ @@ -229,9 +229,9 @@ ln_guix_files() { fi if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then - cp_all guix/pinned-channels.scm + cp_all build-aux/guix/pinned-channels.scm else - cp_if_not guix/pinned-channels.scm + cp_if_not build-aux/guix/pinned-channels.scm fi } @@ -410,6 +410,7 @@ declare -A RUST_PROJECT=( declare -A GUIX_PROJECT_NO_CHANNEL=( [vps]=1 [website]=1 + [remembering]=1 ) ln_all() { diff --git a/sh/templates/Makefile.am b/sh/templates/Makefile.am index 2bd5d8c..f527581 100644 --- a/sh/templates/Makefile.am +++ b/sh/templates/Makefile.am @@ -3,9 +3,9 @@ include $(srcdir)/build-aux/dev-checks.am include $(srcdir)/build-aux/html-files-from-sources.am EXTRA_DIST = \ - guix/manifest.scm \ - guix/pinned-channels.scm \ - build-aux/with-container.sh \ + build-aux/guix/manifest.scm \ + build-aux/guix/pinned-channels.scm \ + build-aux/guix/with-container.sh \ build-aux/dev-checks.am \ build-aux/html-files-from-sources.am \ guix/channel/xyz/euandreh/__PROJECT__/channel.scm \ diff --git a/sh/templates/build-aux/ci/ci-build.sh b/sh/templates/build-aux/ci/ci-build.sh index b7a4c38..0b792df 100755 --- a/sh/templates/build-aux/ci/ci-build.sh +++ b/sh/templates/build-aux/ci/ci-build.sh @@ -35,8 +35,8 @@ EOF git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' - if [ -f build-aux/with-container.sh ]; then - RUNNER='./build-aux/with-container.sh' + if [ -f build-aux/guix/with-container.sh ]; then + RUNNER='./build-aux/guix/with-container.sh' else RUNNER='sh -c' fi diff --git a/sh/templates/build-aux/default-extra-dist.am b/sh/templates/build-aux/default-extra-dist.am index 6be406a..c3f1242 100644 --- a/sh/templates/build-aux/default-extra-dist.am +++ b/sh/templates/build-aux/default-extra-dist.am @@ -1,6 +1,6 @@ -EXTRA_DIST = \ - guix/manifest.scm \ - guix/pinned-channels.scm \ - build-aux/with-container.sh \ - description \ +EXTRA_DIST = \ + build-aux/guix/manifest.scm \ + build-aux/guix/pinned-channels.scm \ + build-aux/guix/with-container.sh \ + description \ $(TESTS) diff --git a/sh/templates/build-aux/guix/manifest.scm b/sh/templates/build-aux/guix/manifest.scm new file mode 100644 index 0000000..0c8a225 --- /dev/null +++ b/sh/templates/build-aux/guix/manifest.scm @@ -0,0 +1,15 @@ +(specifications->manifest + (map symbol->string + '(coreutils + findutils + diffutils + grep + sed + git + tar + gzip + gawk + make + perl + shellcheck + pandoc))) diff --git a/sh/templates/build-aux/guix/pinned-channels.scm b/sh/templates/build-aux/guix/pinned-channels.scm new file mode 100644 index 0000000..67b5a51 --- /dev/null +++ b/sh/templates/build-aux/guix/pinned-channels.scm @@ -0,0 +1,11 @@ +(list + (channel + (name 'guix) + (url "https://git.savannah.gnu.org/git/guix.git") + (commit + "d265809b782293eb42dd663b4611ca19dd2bf1b3") + (introduction + (make-channel-introduction + "9edb3f66fd807b096b48283debdcddccfea34bad" + (openpgp-fingerprint + "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/sh/templates/build-aux/guix/with-container.sh b/sh/templates/build-aux/guix/with-container.sh new file mode 100755 index 0000000..5544d8e --- /dev/null +++ b/sh/templates/build-aux/guix/with-container.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eux + +guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" diff --git a/sh/templates/build-aux/with-container.sh b/sh/templates/build-aux/with-container.sh deleted file mode 100755 index 5544d8e..0000000 --- a/sh/templates/build-aux/with-container.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eux - -guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" diff --git a/sh/templates/guix/manifest.scm b/sh/templates/guix/manifest.scm deleted file mode 100644 index 0c8a225..0000000 --- a/sh/templates/guix/manifest.scm +++ /dev/null @@ -1,15 +0,0 @@ -(specifications->manifest - (map symbol->string - '(coreutils - findutils - diffutils - grep - sed - git - tar - gzip - gawk - make - perl - shellcheck - pandoc))) diff --git a/sh/templates/guix/pinned-channels.scm b/sh/templates/guix/pinned-channels.scm deleted file mode 100644 index 67b5a51..0000000 --- a/sh/templates/guix/pinned-channels.scm +++ /dev/null @@ -1,11 +0,0 @@ -(list - (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (commit - "d265809b782293eb42dd663b4611ca19dd2bf1b3") - (introduction - (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" - (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) -- cgit v1.2.3 From 11cf3836e5f6c62314f4dbf12e23f08fc680e1a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 18:01:35 -0300 Subject: fake-symlinks: with-container.sh: Update path to Guix files --- sh/templates/build-aux/guix/with-container.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/build-aux/guix/with-container.sh b/sh/templates/build-aux/guix/with-container.sh index 5544d8e..5969d38 100755 --- a/sh/templates/build-aux/guix/with-container.sh +++ b/sh/templates/build-aux/guix/with-container.sh @@ -1,4 +1,4 @@ #!/bin/sh set -eux -guix time-machine -C guix/pinned-channels.scm -- environment --pure -C -m guix/manifest.scm -- sh -c "$@" +guix time-machine -C build-aux/guix/pinned-channels.scm -- environment --pure -C -m build-aux/guix/manifest.scm -- sh -c "$@" -- cgit v1.2.3 From 46f0aec78e7a1d61e2a0e1e3c985012fa257447e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 25 Jan 2021 18:02:07 -0300 Subject: fake-symlinks.sh: Pre-remove pre-push symlink for all projects --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index bac8960..592b029 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -236,6 +236,7 @@ ln_guix_files() { } ln_ci() { + rm "$PREFIX/.git/hooks/pre-push" if [ -n "$ENABLE_CI" ]; then if [ -n "$ENABLE_AUTOTOOLS" ]; then sed_all build-aux/ci/git-pre-push.sh.in @@ -245,7 +246,6 @@ ln_ci() { cp_all build-aux/assert-shellcheck.sh \ build-aux/ci/ci-build.sh \ build-aux/ci/git-post-receive.sh - rm "$PREFIX/.git/hooks/pre-push" ln -s "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" else EXECUTABLE=1 sed_all ..git/hooks/pre-push -- cgit v1.2.3 From 0831444f745cf908e940407c3e00a61f6152961f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 19:47:26 -0300 Subject: remembering.nix: Use correct hash --- nixos/not-on-nixpkgs/remembering.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix index 3179e7f..27c9203 100644 --- a/nixos/not-on-nixpkgs/remembering.nix +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -7,7 +7,7 @@ stdenv.mkDerivation rec { src = fetchurl { url = "https://git.euandreh.xyz/${pname}/snapshot/${pname}-v${version}.tar.gz"; - sha256 = "1jhsgb83i2bxg579pwg77n91mr3lx6czi3vwgb3qvqph7134rrr1"; + sha256 = "1bbzxf98zywwdqk785880890v4iiv8a16q2qqdkvqih36cl090zr"; }; makeFlags = [ "PREFIX=$(out)" ]; -- cgit v1.2.3 From 0d9bbf4403b215a34c5da4b793f05cba94ac3d24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 21:07:35 -0300 Subject: remembering.nix: Update to v0.1.1 --- nixos/not-on-nixpkgs/remembering.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix index 27c9203..ef33154 100644 --- a/nixos/not-on-nixpkgs/remembering.nix +++ b/nixos/not-on-nixpkgs/remembering.nix @@ -2,12 +2,12 @@ stdenv.mkDerivation rec { pname = "remembering"; - version = "0.1.0"; + version = "0.1.1"; src = fetchurl { url = "https://git.euandreh.xyz/${pname}/snapshot/${pname}-v${version}.tar.gz"; - sha256 = "1bbzxf98zywwdqk785880890v4iiv8a16q2qqdkvqih36cl090zr"; + sha256 = "1b1fmljnkzrsilbfc61s0lsfvhr9g35msf3b3m3vxfc31rpinpnl"; }; makeFlags = [ "PREFIX=$(out)" ]; -- cgit v1.2.3 From adace0119371d80fbcaf0d18745d8ccf3c1f038a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 21:08:17 -0300 Subject: configuration.nix: Add m4 package for POSIX compliance --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 416b517..35f45f1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -231,6 +231,7 @@ in { file ed tinycc-with-alias + m4 ## Containers and VMs qemu -- cgit v1.2.3 From fa68bcf1d0c7439f19f11dbfece3c07de9299b0a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 21:08:58 -0300 Subject: fake-symlinks: README.sh: Fix generated file title --- sh/templates/build-aux/workflow/README.sh | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/sh/templates/build-aux/workflow/README.sh b/sh/templates/build-aux/workflow/README.sh index 1aa2593..49b1e8d 100755 --- a/sh/templates/build-aux/workflow/README.sh +++ b/sh/templates/build-aux/workflow/README.sh @@ -13,17 +13,17 @@ done RELEASES="$(mktemp)" if [ -s "$RELEASES_LIST" ]; then - printf '# Releases\n\n' >> "$RELEASES" + printf '\n# Releases\n\n' >> "$RELEASES" cat "$RELEASES_LIST" >> "$RELEASES" fi cat README.md "$RELEASES" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - TODOs" \ - --metadata lang=en \ - -r markdown \ - -w html \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - README" \ + --metadata lang=en \ + -r markdown \ + -w html \ > public/index.html -- cgit v1.2.3 From d49da32c848b5fa416c74828d2a94c6432d23dea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 21:09:30 -0300 Subject: fake-symlinks: Add CHANGELOG.sh --- sh/fake-symlinks.sh | 10 ++++++++++ sh/templates/build-aux/workflow/CHANGELOG.sh | 16 ++++++++++++++++ 2 files changed, 26 insertions(+) create mode 100755 sh/templates/build-aux/workflow/CHANGELOG.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 592b029..1185984 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -161,6 +161,12 @@ ln_env() { else ENABLE_README_SH= fi + + if [ -f "$PREFIX/CHANGELOG.md" ]; then + ENABLE_CHANGELOG_SH=1 + else + ENABLE_CHANGELOG_SH= + fi } ln_init() { @@ -207,6 +213,10 @@ ln_build_aux() { cp_all build-aux/workflow/README.sh fi + if [ "$ENABLE_CHANGELOG_SH" ]; then + cp_all build-aux/workflow/CHANGELOG.sh + fi + cp_if_not TODOs.md } diff --git a/sh/templates/build-aux/workflow/CHANGELOG.sh b/sh/templates/build-aux/workflow/CHANGELOG.sh new file mode 100755 index 0000000..829cf5f --- /dev/null +++ b/sh/templates/build-aux/workflow/CHANGELOG.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" + +pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - README" \ + --metadata lang=en \ + -r markdown \ + -w html \ + < CHANGELOG.md > public/CHANGELOG.html -- cgit v1.2.3 From f58f61028229ce2f0ad648f57f32df8aa05ae833 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 21:09:54 -0300 Subject: fzf.sh: Improve generated profile name --- sh/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fzf.sh b/sh/fzf.sh index d7d93a9..9c28646 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -36,7 +36,7 @@ fzg() { } f() { - profile="$(pwd | sed -e 's_/_:_g')" + profile="$f-shell-function(pwd | sed -e 's_/_-_g')" file="$(git ls-files | remembering -p "$profile" -c "fzf --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" if [ -n "$file" ]; then # shellcheck disable=2068 -- cgit v1.2.3 From fe2dba65753a7c5621b38038bc663c4117075073 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 21:10:16 -0300 Subject: dmenu-pass.sh: Copy to clipboard with pass itself --- xmonad/scripts/dmenu-pass.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh index d0f117c..5e941dd 100755 --- a/xmonad/scripts/dmenu-pass.sh +++ b/xmonad/scripts/dmenu-pass.sh @@ -10,5 +10,5 @@ choice="$(find "$PASSWORD_STORE_DIR" -type f | \ -c "dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18")" if [ -n "$choice" ]; then - pass show "$choice" | head -n1 | tr -d '\n' | xclip -sel clip + pass show "$choice" -c fi -- cgit v1.2.3 From 4e4af69ac27b98d167b7a80bd45244825db89c63 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 22:16:37 -0300 Subject: fzf.sh: Fix profile name --- sh/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fzf.sh b/sh/fzf.sh index 9c28646..d181f2b 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -36,7 +36,7 @@ fzg() { } f() { - profile="$f-shell-function(pwd | sed -e 's_/_-_g')" + profile="f-shell-function$(pwd | sed -e 's_/_-_g')" file="$(git ls-files | remembering -p "$profile" -c "fzf --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")" if [ -n "$file" ]; then # shellcheck disable=2068 -- cgit v1.2.3 From 7d3222993e027311314bd0d126e6c70431e573b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 26 Jan 2021 22:20:55 -0300 Subject: fake-symlinks: manifest.scm: Bash package --- sh/templates/build-aux/guix/manifest.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/templates/build-aux/guix/manifest.scm b/sh/templates/build-aux/guix/manifest.scm index 0c8a225..7164e5c 100644 --- a/sh/templates/build-aux/guix/manifest.scm +++ b/sh/templates/build-aux/guix/manifest.scm @@ -1,6 +1,7 @@ (specifications->manifest (map symbol->string - '(coreutils + '(bash + coreutils findutils diffutils grep -- cgit v1.2.3 From 564fa08f4d5a794c58041844e705404dbd5d4768 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 28 Jan 2021 13:16:11 -0300 Subject: fake-symlinks: mv build-aux into aux, and other support folder into aux Remove Guix channel files that are embedded in the repository. --- Makefile | 6 +- aux/assert-nixfmt.sh | 11 + aux/assert-shellcheck.sh | 6 + aux/assert-todos.sh | 9 + aux/ci/ci-build.sh | 53 +++ aux/ci/git-post-receive.sh | 14 + aux/ci/git-pre-push.sh | 19 + build-aux/assert-nixfmt.sh | 11 - build-aux/assert-shellcheck.sh | 6 - build-aux/assert-todos.sh | 9 - build-aux/ci/ci-build.sh | 53 --- build-aux/ci/git-post-receive.sh | 14 - build-aux/ci/git-pre-push.sh | 19 - build-aux/ci/git-pre-push.sh.in | 19 - sh/fake-symlinks.sh | 99 ++--- sh/templates/..git/hooks/pre-push | 2 +- sh/templates/.guix-authorizations | 4 - sh/templates/.guix-channel | 4 - sh/templates/aux/assert-docs-spelling.sh | 32 ++ sh/templates/aux/assert-shellcheck.sh | 6 + sh/templates/aux/automake/default-extra-dist.am | 6 + sh/templates/aux/automake/dev-checks.am | 17 + sh/templates/aux/automake/git-notes-release.am | 7 + sh/templates/aux/automake/git-notes-release.sh | 77 ++++ sh/templates/aux/automake/guile.am | 16 + .../aux/automake/html-files-from-sources.am | 23 ++ sh/templates/aux/automake/rust.am | 9 + sh/templates/aux/ci/ci-build.sh | 53 +++ sh/templates/aux/ci/git-post-receive.sh | 14 + sh/templates/aux/ci/git-pre-push.sh | 19 + sh/templates/aux/compile-readme.sh | 9 + sh/templates/aux/docbook-xsl.tar.gz | Bin 0 -> 5181440 bytes sh/templates/aux/guix/manifest.scm | 16 + sh/templates/aux/guix/pinned-channels.scm | 11 + sh/templates/aux/guix/with-container.sh | 4 + sh/templates/aux/m4/guile.m4 | 397 +++++++++++++++++++++ sh/templates/aux/m4/programmer-mode.m4 | 17 + sh/templates/aux/texinfo-build-web-assets.sh | 55 +++ sh/templates/aux/workflow/CHANGELOG.sh | 16 + sh/templates/aux/workflow/README.sh | 29 ++ sh/templates/aux/workflow/TODOs.sh | 23 ++ sh/templates/aux/workflow/assert-todos.sh | 57 +++ sh/templates/aux/workflow/preamble.md | 16 + sh/templates/aux/workflow/style.css | 38 ++ sh/templates/build-aux/assert-docs-spelling.sh | 32 -- sh/templates/build-aux/assert-shellcheck.sh | 6 - sh/templates/build-aux/ci/ci-build.sh | 53 --- sh/templates/build-aux/ci/git-post-receive.sh | 14 - sh/templates/build-aux/ci/git-pre-push.sh | 19 - sh/templates/build-aux/ci/git-pre-push.sh.in | 19 - sh/templates/build-aux/compile-readme.sh | 9 - sh/templates/build-aux/default-extra-dist.am | 6 - sh/templates/build-aux/dev-checks.am | 17 - sh/templates/build-aux/docbook-xsl.tar.gz | Bin 5181440 -> 0 bytes sh/templates/build-aux/git-notes-release.am | 7 - sh/templates/build-aux/git-notes-release.sh | 77 ---- sh/templates/build-aux/guile.am | 16 - sh/templates/build-aux/guix/manifest.scm | 16 - sh/templates/build-aux/guix/pinned-channels.scm | 11 - sh/templates/build-aux/guix/with-container.sh | 4 - sh/templates/build-aux/html-files-from-sources.am | 23 -- sh/templates/build-aux/rust.am | 9 - sh/templates/build-aux/texinfo-build-web-assets.sh | 55 --- sh/templates/build-aux/workflow/CHANGELOG.sh | 16 - sh/templates/build-aux/workflow/README.sh | 29 -- sh/templates/build-aux/workflow/TODOs.sh | 23 -- sh/templates/build-aux/workflow/assert-todos.sh | 57 --- sh/templates/build-aux/workflow/preamble.md | 16 - sh/templates/build-aux/workflow/style.css | 38 -- sh/templates/m4/guile.m4 | 397 --------------------- sh/templates/m4/links.m4 | 25 -- sh/templates/m4/programmer-mode.m4 | 17 - sh/templates/rename/basic-channel.scm.in | 72 ---- 73 files changed, 1115 insertions(+), 1293 deletions(-) create mode 100755 aux/assert-nixfmt.sh create mode 100755 aux/assert-shellcheck.sh create mode 100755 aux/assert-todos.sh create mode 100755 aux/ci/ci-build.sh create mode 100755 aux/ci/git-post-receive.sh create mode 100755 aux/ci/git-pre-push.sh delete mode 100755 build-aux/assert-nixfmt.sh delete mode 100755 build-aux/assert-shellcheck.sh delete mode 100755 build-aux/assert-todos.sh delete mode 100755 build-aux/ci/ci-build.sh delete mode 100755 build-aux/ci/git-post-receive.sh delete mode 100755 build-aux/ci/git-pre-push.sh delete mode 100644 build-aux/ci/git-pre-push.sh.in delete mode 100644 sh/templates/.guix-authorizations delete mode 100644 sh/templates/.guix-channel create mode 100755 sh/templates/aux/assert-docs-spelling.sh create mode 100755 sh/templates/aux/assert-shellcheck.sh create mode 100644 sh/templates/aux/automake/default-extra-dist.am create mode 100644 sh/templates/aux/automake/dev-checks.am create mode 100644 sh/templates/aux/automake/git-notes-release.am create mode 100644 sh/templates/aux/automake/git-notes-release.sh create mode 100644 sh/templates/aux/automake/guile.am create mode 100644 sh/templates/aux/automake/html-files-from-sources.am create mode 100644 sh/templates/aux/automake/rust.am create mode 100755 sh/templates/aux/ci/ci-build.sh create mode 100755 sh/templates/aux/ci/git-post-receive.sh create mode 100644 sh/templates/aux/ci/git-pre-push.sh create mode 100755 sh/templates/aux/compile-readme.sh create mode 100644 sh/templates/aux/docbook-xsl.tar.gz create mode 100644 sh/templates/aux/guix/manifest.scm create mode 100644 sh/templates/aux/guix/pinned-channels.scm create mode 100755 sh/templates/aux/guix/with-container.sh create mode 100644 sh/templates/aux/m4/guile.m4 create mode 100644 sh/templates/aux/m4/programmer-mode.m4 create mode 100755 sh/templates/aux/texinfo-build-web-assets.sh create mode 100755 sh/templates/aux/workflow/CHANGELOG.sh create mode 100755 sh/templates/aux/workflow/README.sh create mode 100755 sh/templates/aux/workflow/TODOs.sh create mode 100755 sh/templates/aux/workflow/assert-todos.sh create mode 100644 sh/templates/aux/workflow/preamble.md create mode 100644 sh/templates/aux/workflow/style.css delete mode 100755 sh/templates/build-aux/assert-docs-spelling.sh delete mode 100755 sh/templates/build-aux/assert-shellcheck.sh delete mode 100755 sh/templates/build-aux/ci/ci-build.sh delete mode 100755 sh/templates/build-aux/ci/git-post-receive.sh delete mode 100644 sh/templates/build-aux/ci/git-pre-push.sh delete mode 100755 sh/templates/build-aux/ci/git-pre-push.sh.in delete mode 100755 sh/templates/build-aux/compile-readme.sh delete mode 100644 sh/templates/build-aux/default-extra-dist.am delete mode 100644 sh/templates/build-aux/dev-checks.am delete mode 100644 sh/templates/build-aux/docbook-xsl.tar.gz delete mode 100644 sh/templates/build-aux/git-notes-release.am delete mode 100644 sh/templates/build-aux/git-notes-release.sh delete mode 100644 sh/templates/build-aux/guile.am delete mode 100644 sh/templates/build-aux/guix/manifest.scm delete mode 100644 sh/templates/build-aux/guix/pinned-channels.scm delete mode 100755 sh/templates/build-aux/guix/with-container.sh delete mode 100644 sh/templates/build-aux/html-files-from-sources.am delete mode 100644 sh/templates/build-aux/rust.am delete mode 100755 sh/templates/build-aux/texinfo-build-web-assets.sh delete mode 100755 sh/templates/build-aux/workflow/CHANGELOG.sh delete mode 100755 sh/templates/build-aux/workflow/README.sh delete mode 100755 sh/templates/build-aux/workflow/TODOs.sh delete mode 100755 sh/templates/build-aux/workflow/assert-todos.sh delete mode 100644 sh/templates/build-aux/workflow/preamble.md delete mode 100644 sh/templates/build-aux/workflow/style.css delete mode 100644 sh/templates/m4/guile.m4 delete mode 100644 sh/templates/m4/links.m4 delete mode 100644 sh/templates/m4/programmer-mode.m4 delete mode 100644 sh/templates/rename/basic-channel.scm.in diff --git a/Makefile b/Makefile index 11422d2..ed32b4a 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ .PHONY: check check: - sh build-aux/assert-nixfmt.sh - sh build-aux/assert-shellcheck.sh - sh build-aux/assert-todos.sh + sh aux/assert-nixfmt.sh + sh aux/assert-shellcheck.sh + sh aux/assert-todos.sh .PHONY: clean clean: diff --git a/aux/assert-nixfmt.sh b/aux/assert-nixfmt.sh new file mode 100755 index 0000000..19bd0a2 --- /dev/null +++ b/aux/assert-nixfmt.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eux + +# shellcheck disable=2016 +find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' + nixfmt < "$1" | diff - "$1" || { + echo "The file \"$1\" is unformatted. To fix it, run:" + echo " nixfmt $1" + exit 1 + } +' _ {} \; diff --git a/aux/assert-shellcheck.sh b/aux/assert-shellcheck.sh new file mode 100755 index 0000000..334a875 --- /dev/null +++ b/aux/assert-shellcheck.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -eux + +git ls-files -z | \ + xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ + xargs shellcheck diff --git a/aux/assert-todos.sh b/aux/assert-todos.sh new file mode 100755 index 0000000..c40c718 --- /dev/null +++ b/aux/assert-todos.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -eu + +EXCLUDE='(sh/templates/|aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|sh/util.sh|docbook-xsl.tar.gz)' +if git grep FIXME | grep -Ev "$EXCLUDE"; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.org." + exit 1 +fi diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh new file mode 100755 index 0000000..c891d3b --- /dev/null +++ b/aux/ci/ci-build.sh @@ -0,0 +1,53 @@ +#!/bin/sh +set -eux + +PACKAGE="$1" +LOGS_DIR="$2" +read -r _ SHA _ # oldrev newrev refname +FILENAME="$(date -Is)-$SHA.log" +LOGFILE="$LOGS_DIR/$FILENAME" + +{ + echo "Starting CI job at: $(date -Is)" + + finish() { + STATUS="$?" + printf "\n\n>>> exit status was %s\n" "$STATUS" + echo "Finishing CI job at: $(date -Is)" + cd - + NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" + } + trap finish EXIT + + unset GIT_DIR + CLONE="$(mktemp -d)" + git clone . "$CLONE" + cd "$CLONE" + git config --global user.email git@euandre.org + git config --global user.name 'EuAndreh CI' + + if [ -f aux/guix/with-container.sh ]; then + RUNNER='./aux/guix/with-container.sh' + else + RUNNER='sh -c' + fi + + if [ -f ./bootstrap ]; then + COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + else + COMMAND='make clean check public' + fi + + $RUNNER "$COMMAND" + + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete +} | tee "$LOGFILE" 2>&1 diff --git a/aux/ci/git-post-receive.sh b/aux/ci/git-post-receive.sh new file mode 100755 index 0000000..2f6e3c0 --- /dev/null +++ b/aux/ci/git-post-receive.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -eu + +for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do + opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" + if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then + printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" + exit 0 + fi +done + +PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix +LOGS_DIR="/data/ci/$PACKAGE/logs" +"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/aux/ci/git-pre-push.sh b/aux/ci/git-pre-push.sh new file mode 100755 index 0000000..30d2850 --- /dev/null +++ b/aux/ci/git-pre-push.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eux + +PACKAGE="$(basename "$PWD")" +LOGS_DIR="/data/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/data/git/$PACKAGE.git" + +DESCRIPTION="$(mktemp)" +if [ -f description ] +then + cp description "$DESCRIPTION" +else + git config euandreh.description > "$DESCRIPTION" +fi + +scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" +ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" +scp aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" +scp aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/build-aux/assert-nixfmt.sh b/build-aux/assert-nixfmt.sh deleted file mode 100755 index 19bd0a2..0000000 --- a/build-aux/assert-nixfmt.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -set -eux - -# shellcheck disable=2016 -find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' - nixfmt < "$1" | diff - "$1" || { - echo "The file \"$1\" is unformatted. To fix it, run:" - echo " nixfmt $1" - exit 1 - } -' _ {} \; diff --git a/build-aux/assert-shellcheck.sh b/build-aux/assert-shellcheck.sh deleted file mode 100755 index 334a875..0000000 --- a/build-aux/assert-shellcheck.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -eux - -git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ - xargs shellcheck diff --git a/build-aux/assert-todos.sh b/build-aux/assert-todos.sh deleted file mode 100755 index 27c5b0b..0000000 --- a/build-aux/assert-todos.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -eu - -EXCLUDE='(sh/templates/|build-aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|sh/util.sh|docbook-xsl.tar.gz)' -if git grep FIXME | grep -Ev "$EXCLUDE"; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.org." - exit 1 -fi diff --git a/build-aux/ci/ci-build.sh b/build-aux/ci/ci-build.sh deleted file mode 100755 index 0b792df..0000000 --- a/build-aux/ci/ci-build.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$1" -LOGS_DIR="$2" -read -r _ SHA _ # oldrev newrev refname -FILENAME="$(date -Is)-$SHA.log" -LOGFILE="$LOGS_DIR/$FILENAME" - -{ - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" - } - trap finish EXIT - - unset GIT_DIR - CLONE="$(mktemp -d)" - git clone . "$CLONE" - cd "$CLONE" - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - - if [ -f build-aux/guix/with-container.sh ]; then - RUNNER='./build-aux/guix/with-container.sh' - else - RUNNER='sh -c' - fi - - if [ -f ./bootstrap ]; then - COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' - else - COMMAND='make clean check public' - fi - - $RUNNER "$COMMAND" - - rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete -} | tee "$LOGFILE" 2>&1 diff --git a/build-aux/ci/git-post-receive.sh b/build-aux/ci/git-post-receive.sh deleted file mode 100755 index 2f6e3c0..0000000 --- a/build-aux/ci/git-post-receive.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do - opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" - if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then - printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" - exit 0 - fi -done - -PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/data/ci/$PACKAGE/logs" -"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/build-aux/ci/git-pre-push.sh b/build-aux/ci/git-pre-push.sh deleted file mode 100755 index 2d2bcb1..0000000 --- a/build-aux/ci/git-pre-push.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$(basename "$PWD")" -LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" - -DESCRIPTION="$(mktemp)" -if [ -f description ] -then - cp description "$DESCRIPTION" -else - git config euandreh.description > "$DESCRIPTION" -fi - -scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" -ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" -scp build-aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" -scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/build-aux/ci/git-pre-push.sh.in b/build-aux/ci/git-pre-push.sh.in deleted file mode 100644 index 16428d6..0000000 --- a/build-aux/ci/git-pre-push.sh.in +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$(basename "$PWD")" -LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" - -DESCRIPTION="$(mktemp)" -if [ -f description ] -then - cp description "$DESCRIPTION" -else - git config euandreh.description > "$DESCRIPTION" -fi - -scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description" -ssh git.@TLD@ mkdir -p "$LOGS_DIR" -scp build-aux/ci/ci-build.sh "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh" -scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1185984..d908543 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -21,9 +21,6 @@ done mkdir -p ~/archive/torrent/ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; -DEFAULT_TLD_SCRIPT='s/@TLD@/euandreh.xyz/g' -sed -e "$DEFAULT_TLD_SCRIPT" < build-aux/ci/git-pre-push.sh.in > build-aux/ci/git-pre-push.sh - normalize_name() { if [ -n "$RENAME_TO" ]; then echo "$RENAME_TO" @@ -150,12 +147,6 @@ ln_env() { ENABLE_OVERWRITE_PINNED_CHANNELS= fi - if [ -n "${GUIX_PROJECT_NO_CHANNEL[$PROJECT]}" ]; then - ENABLE_GUIX_PROJECT_CHANNEL= - else - ENABLE_GUIX_PROJECT_CHANNEL=1 - fi - if [ -f "$PREFIX/README.md" ]; then ENABLE_README_SH=1 else @@ -181,14 +172,13 @@ ln_init() { ln_autotools() { chmod +w "$PREFIX/INSTALL" 2> /dev/null ||: - cp_all AUTHORS \ - bootstrap \ - ChangeLog \ - build-aux/dev-checks.am \ - build-aux/default-extra-dist.am \ - m4/links.m4 \ - m4/programmer-mode.m4 \ - build-aux/html-files-from-sources.am + cp_all AUTHORS \ + bootstrap \ + ChangeLog \ + aux/automake/dev-checks.am \ + aux/automake/default-extra-dist.am \ + aux/automake/html-files-from-sources.am \ + aux/m4/programmer-mode.m4 # dev-cheks.am: test maintainer mode # https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html @@ -203,18 +193,18 @@ ln_autotools() { } ln_build_aux() { - cp_all build-aux/assert-shellcheck.sh \ - build-aux/workflow/assert-todos.sh \ - build-aux/workflow/TODOs.sh \ - build-aux/workflow/style.css \ - build-aux/workflow/preamble.md + cp_all aux/assert-shellcheck.sh \ + aux/workflow/assert-todos.sh \ + aux/workflow/TODOs.sh \ + aux/workflow/style.css \ + aux/workflow/preamble.md if [ "$ENABLE_README_SH" ]; then - cp_all build-aux/workflow/README.sh + cp_all aux/workflow/README.sh fi if [ "$ENABLE_CHANGELOG_SH" ]; then - cp_all build-aux/workflow/CHANGELOG.sh + cp_all aux/workflow/CHANGELOG.sh fi cp_if_not TODOs.md @@ -225,45 +215,32 @@ ln_agpl() { } ln_guix_files() { - cp_all build-aux/guix/with-container.sh \ - build-aux/assert-shellcheck.sh - cp_if_not build-aux/guix/manifest.scm - - if [ -n "$ENABLE_GUIX_PROJECT_CHANNEL" ]; then - cp_all .guix-channel \ - .guix-authorizations \ - guix/channel/euandreh.key - if [ ! -f "$PREFIX/guix/channel/xyz/euandreh/$PROJECT/channel.scm" ]; then - RENAME_TO="guix/channel/xyz/euandreh/$PROJECT/channel.scm.in" cp_if_not rename/basic-channel.scm.in - fi - fi + cp_all aux/guix/with-container.sh \ + aux/assert-shellcheck.sh + cp_if_not aux/guix/manifest.scm if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then - cp_all build-aux/guix/pinned-channels.scm + cp_all aux/guix/pinned-channels.scm else - cp_if_not build-aux/guix/pinned-channels.scm + cp_if_not aux/guix/pinned-channels.scm fi } ln_ci() { - rm "$PREFIX/.git/hooks/pre-push" + rm -f "$PREFIX/.git/hooks/pre-push" if [ -n "$ENABLE_CI" ]; then - if [ -n "$ENABLE_AUTOTOOLS" ]; then - sed_all build-aux/ci/git-pre-push.sh.in - else - EXECUTABLE=1 sed_all build-aux/ci/git-pre-push.sh - fi - cp_all build-aux/assert-shellcheck.sh \ - build-aux/ci/ci-build.sh \ - build-aux/ci/git-post-receive.sh - ln -s "$PREFIX/build-aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" + EXECUTABLE=1 sed_all aux/ci/git-pre-push.sh + cp_all aux/assert-shellcheck.sh \ + aux/ci/ci-build.sh \ + aux/ci/git-post-receive.sh + ln -s "$PREFIX/aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" else EXECUTABLE=1 sed_all ..git/hooks/pre-push fi } ln_git_notes_release() { - cp_all build-aux/git-notes-release.am build-aux/git-notes-release.sh + cp_all aux/automake/git-notes-release.am aux/automake/git-notes-release.sh cp_if_not NEWS } @@ -271,13 +248,9 @@ ln_dicts() { cp_if_not doc/dictionaries/international.txt doc/dictionaries/en.txt } -ln_pandoc_index() { - cp_all build-aux/compile-readme.sh -} - ln_web_assets_file() { - mkdir -p "$PREFIX/build-aux/" - cp "build-aux/$1-build-web-assets.sh" "$PREFIX/build-aux/build-web-assets.sh" + mkdir -p "$PREFIX/aux/" + cp "aux/$1-build-web-assets.sh" "$PREFIX/aux/build-web-assets.sh" } ln_scribble() { @@ -297,7 +270,6 @@ ln_base_autotools_guix_project() { ln_git_notes_release ln_autotools ln_generated_readme - ln_pandoc_index ln_agpl ln_ci @@ -305,11 +277,11 @@ ln_base_autotools_guix_project() { ln_dicts if [ -n "$ENABLE_GUILE" ]; then - cp_all build-aux/guile.am m4/guile.m4 + cp_all aux/automake/guile.am aux/m4/guile.m4 fi if [ -n "$ENABLE_RUST" ]; then - cp_all build-aux/rust.am + cp_all aux/automake/rust.am fi } @@ -317,15 +289,14 @@ ln_texinfo_autotools_guix_project() { ln_base_autotools_guix_project "$1" RENAME_TO="doc/$PROJECT.texi" envsubst_if_not rename/empty-texinfo.texi ln_web_assets_file texinfo - cp_all build-aux/docbook-xsl.tar.gz + cp_all aux/docbook-xsl.tar.gz } ln_sphinx_autotools_guix_project() { ln_base_autotools_guix_project "$1" - cp_all build-aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico + cp_all aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico envsubst_all doc/conf.py.in doc/_templates/layout.html envsubst_if_not doc/index.rst - # EXECUTABLE=1 sed_all build-aux/build-sphinx.sh cp_if_not doc/i18n-pagenames.json doc/Makefile } @@ -417,12 +388,6 @@ declare -A RUST_PROJECT=( [x-bindgen]=1 ) -declare -A GUIX_PROJECT_NO_CHANNEL=( - [vps]=1 - [website]=1 - [remembering]=1 -) - ln_all() { LN_FN="$1" shift diff --git a/sh/templates/..git/hooks/pre-push b/sh/templates/..git/hooks/pre-push index a54ecd2..29785d2 120000 --- a/sh/templates/..git/hooks/pre-push +++ b/sh/templates/..git/hooks/pre-push @@ -1 +1 @@ -../../build-aux/ci/git-pre-push.sh.in \ No newline at end of file +../../aux/ci/git-pre-push.sh \ No newline at end of file diff --git a/sh/templates/.guix-authorizations b/sh/templates/.guix-authorizations deleted file mode 100644 index 0221b5b..0000000 --- a/sh/templates/.guix-authorizations +++ /dev/null @@ -1,4 +0,0 @@ -(authorizations - (version 0) - (("5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060" - (name "euandreh")))) diff --git a/sh/templates/.guix-channel b/sh/templates/.guix-channel deleted file mode 100644 index d4d0f36..0000000 --- a/sh/templates/.guix-channel +++ /dev/null @@ -1,4 +0,0 @@ -(channel - (version 0) - (directory "guix/channel") - (keyring-reference "master")) diff --git a/sh/templates/aux/assert-docs-spelling.sh b/sh/templates/aux/assert-docs-spelling.sh new file mode 100755 index 0000000..5340319 --- /dev/null +++ b/sh/templates/aux/assert-docs-spelling.sh @@ -0,0 +1,32 @@ +#!/bin/sh +set -eu + +export LANG=C.UTF-8 + +for DICT in dictionaries/*.txt; do + sort "$DICT" | diff - "$DICT" || { + echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 + echo " LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2 + exit 1 + } +done + +OUT="$(mktemp)" +LANGS="$(jq -r .langs[] < ../metadata.json)" + +for l in ${LANGS}; do + make SPHINXOPTS="-D language=$l" html + DICT="$(mktemp)" + cat dictionaries/international.txt "dictionaries/$l.txt" > "$DICT" + hunspell -u3 -H -d "$l" -p "$DICT" _build/html/*.html | tee -a "$OUT" +done + +if [ -s "$OUT" ]; then + printf "\nvvv Mispelled words detected by hunspell.\n\n" + sort < "$OUT" | uniq + printf "\n^^^\n" >&2 + exit 1 +else + echo "No spelling errors detected" + exit 0 +fi diff --git a/sh/templates/aux/assert-shellcheck.sh b/sh/templates/aux/assert-shellcheck.sh new file mode 100755 index 0000000..334a875 --- /dev/null +++ b/sh/templates/aux/assert-shellcheck.sh @@ -0,0 +1,6 @@ +#!/bin/sh +set -eux + +git ls-files -z | \ + xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ + xargs shellcheck diff --git a/sh/templates/aux/automake/default-extra-dist.am b/sh/templates/aux/automake/default-extra-dist.am new file mode 100644 index 0000000..c3f1242 --- /dev/null +++ b/sh/templates/aux/automake/default-extra-dist.am @@ -0,0 +1,6 @@ +EXTRA_DIST = \ + build-aux/guix/manifest.scm \ + build-aux/guix/pinned-channels.scm \ + build-aux/guix/with-container.sh \ + description \ + $(TESTS) diff --git a/sh/templates/aux/automake/dev-checks.am b/sh/templates/aux/automake/dev-checks.am new file mode 100644 index 0000000..ca1b9d8 --- /dev/null +++ b/sh/templates/aux/automake/dev-checks.am @@ -0,0 +1,17 @@ +.PHONY: check-local-dev-checks +check-local-dev-checks: + if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ + echo 'Running PROGRAMMER_MODE checks.'; \ + $(srcdir)/build-aux/assert-shellcheck.sh || exit 1; \ + $(srcdir)/build-aux/assert-todos.sh || exit 1; \ + if [ "x$(CI_MODE)" = 'xno' ]; then \ + echo 'Running CI_MODE checks.'; \ + $(GUIX) build -f guix/channel/xyz/euandreh/$(PACKAGE)/channel.scm || exit 1; \ + else \ + echo 'Skipping CI_MODE checks.'; \ + fi \ + else \ + echo 'Skipping PROGRAMMER_MODE checks.'; \ + fi + +check-local: check-local-dev-checks diff --git a/sh/templates/aux/automake/git-notes-release.am b/sh/templates/aux/automake/git-notes-release.am new file mode 100644 index 0000000..0d91e88 --- /dev/null +++ b/sh/templates/aux/automake/git-notes-release.am @@ -0,0 +1,7 @@ +.PHONY: release +release: check distcheck dist + $(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) + +.PHONY: release-with-binaries +release-with-binaries: + $(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) --bin diff --git a/sh/templates/aux/automake/git-notes-release.sh b/sh/templates/aux/automake/git-notes-release.sh new file mode 100644 index 0000000..4d55645 --- /dev/null +++ b/sh/templates/aux/automake/git-notes-release.sh @@ -0,0 +1,77 @@ +#!/bin/sh +set -eux + +DIST_ARCHIVES="$1" +VERSION="$2" +PACKAGE="$3" +BIN="${4:-}" + +if [ "$BIN" != --bin ]; then + # Assert version + if git rev-parse "$VERSION" > /dev/null; then + echo "Tar $VERSION already exists, exitting." + exit 2 + fi + + # Update NEWS + sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS + cat < $DIST_ARCHIVES + git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc +EOF +) + git notes append -m "$NOTE" + sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" + sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" + ./configure --enable-programmer-mode + git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" + git commit -m "Update released version $VERSION in channel.scm.in file." + + # Publish release artifacts + git push --tags + git push origin refs/notes/tarballs + git push origin refs/notes/signatures + git push origin refs/notes/commits + git push +else + guix pull + BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")" + SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")" + git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION" + NOTE=$(cat < $PACKAGE-bin.tar.gz + tar xf $PACKAGE-bin.tar.gz + bin/$PACKAGE +EOF +) + git notes append -m "$NOTE" + git push origin refs/notes/binaries + git push origin refs/notes/commits +fi diff --git a/sh/templates/aux/automake/guile.am b/sh/templates/aux/automake/guile.am new file mode 100644 index 0000000..e56b31f --- /dev/null +++ b/sh/templates/aux/automake/guile.am @@ -0,0 +1,16 @@ +guilescmdir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)/xyz/euandreh +guilegodir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache/xyz/euandreh + +GUILE_OBJECTS = $(SOURCES:.scm=.go) + +dist_guilescm_DATA = $(SOURCES) +guilego_DATA = $(GUILE_OBJECTS) + +CLEANFILES = $(GUILE_OBJECTS) + +SUFFIXES = .scm .go +.scm.go: + $(GUILD) compile -o "$@" "$<" + +TEST_EXTENSIONS = .scm +SCM_LOG_COMPILER = $(GUILE) -L $(top_srcdir)/src diff --git a/sh/templates/aux/automake/html-files-from-sources.am b/sh/templates/aux/automake/html-files-from-sources.am new file mode 100644 index 0000000..db073f3 --- /dev/null +++ b/sh/templates/aux/automake/html-files-from-sources.am @@ -0,0 +1,23 @@ +.PHONY: clean-local-html-files-from-sources +clean-local-html-files-from-sources: + rm -rf public/ OEBPS META-INF/ doc/$(PACKAGE).xml mimetype + +clean-local: clean-local-html-files-from-sources + +LANGS = en +DICTIONARIES = doc/dictionaries/en.txt doc/dictionaries/international.txt +doc/dictionaries/all.txt: $(DICTIONARIES) + cat $(DICTIONARIES) | sort > $@ + + cat $(DICTIONARIES) | diff - $@ || { \ + echo 'Dictionary files are not sorted. To fix it, run:'; \ + echo ' for f in $(DICTIONARIES); do LANG=C.UTF-8 sort -o $$f $$f; done'; \ + touch $(DICTIONARIES); \ + exit 1; \ + } + +public: README TODOs.md $(DOC_SRCS) doc/dictionaries/all.txt + $(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS) + + $(srcdir)/build-aux/generate-tasks-and-bugs.sh + $(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)' diff --git a/sh/templates/aux/automake/rust.am b/sh/templates/aux/automake/rust.am new file mode 100644 index 0000000..f8f9b0f --- /dev/null +++ b/sh/templates/aux/automake/rust.am @@ -0,0 +1,9 @@ +rustfmt: $(RUST_SRC) + if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ + for f in $(RUST_SRC); do \ + $(RUSTFMT) --check $$f || { \ + printf "Unformatted Rust code. To fix it, run:\n rustfmt %s\n" $$f; \ + exit 1; \ + }; \ + done; \ + fi diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh new file mode 100755 index 0000000..c891d3b --- /dev/null +++ b/sh/templates/aux/ci/ci-build.sh @@ -0,0 +1,53 @@ +#!/bin/sh +set -eux + +PACKAGE="$1" +LOGS_DIR="$2" +read -r _ SHA _ # oldrev newrev refname +FILENAME="$(date -Is)-$SHA.log" +LOGFILE="$LOGS_DIR/$FILENAME" + +{ + echo "Starting CI job at: $(date -Is)" + + finish() { + STATUS="$?" + printf "\n\n>>> exit status was %s\n" "$STATUS" + echo "Finishing CI job at: $(date -Is)" + cd - + NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" + } + trap finish EXIT + + unset GIT_DIR + CLONE="$(mktemp -d)" + git clone . "$CLONE" + cd "$CLONE" + git config --global user.email git@euandre.org + git config --global user.name 'EuAndreh CI' + + if [ -f aux/guix/with-container.sh ]; then + RUNNER='./aux/guix/with-container.sh' + else + RUNNER='sh -c' + fi + + if [ -f ./bootstrap ]; then + COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + else + COMMAND='make clean check public' + fi + + $RUNNER "$COMMAND" + + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete +} | tee "$LOGFILE" 2>&1 diff --git a/sh/templates/aux/ci/git-post-receive.sh b/sh/templates/aux/ci/git-post-receive.sh new file mode 100755 index 0000000..2f6e3c0 --- /dev/null +++ b/sh/templates/aux/ci/git-post-receive.sh @@ -0,0 +1,14 @@ +#!/bin/sh +set -eu + +for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do + opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" + if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then + printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" + exit 0 + fi +done + +PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix +LOGS_DIR="/data/ci/$PACKAGE/logs" +"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/sh/templates/aux/ci/git-pre-push.sh b/sh/templates/aux/ci/git-pre-push.sh new file mode 100644 index 0000000..dd1bbfd --- /dev/null +++ b/sh/templates/aux/ci/git-pre-push.sh @@ -0,0 +1,19 @@ +#!/bin/sh +set -eux + +PACKAGE="$(basename "$PWD")" +__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/data/git/$PACKAGE.git" + +DESCRIPTION="$(mktemp)" +if [ -f description ] +then + cp description "$DESCRIPTION" +else + git config euandreh.description > "$DESCRIPTION" +fi + +scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" +__ENABLE_CI__ ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" +__ENABLE_CI__ scp aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" +__ENABLE_CI__ scp aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/sh/templates/aux/compile-readme.sh b/sh/templates/aux/compile-readme.sh new file mode 100755 index 0000000..91f6065 --- /dev/null +++ b/sh/templates/aux/compile-readme.sh @@ -0,0 +1,9 @@ +#!/bin/sh +set -eux + +pandoc -s \ + --metadata title="$1 - EuAndreh" \ + -c styles.css \ + -o public/index.html \ + -r markdown \ + README diff --git a/sh/templates/aux/docbook-xsl.tar.gz b/sh/templates/aux/docbook-xsl.tar.gz new file mode 100644 index 0000000..a7a4ce6 Binary files /dev/null and b/sh/templates/aux/docbook-xsl.tar.gz differ diff --git a/sh/templates/aux/guix/manifest.scm b/sh/templates/aux/guix/manifest.scm new file mode 100644 index 0000000..7164e5c --- /dev/null +++ b/sh/templates/aux/guix/manifest.scm @@ -0,0 +1,16 @@ +(specifications->manifest + (map symbol->string + '(bash + coreutils + findutils + diffutils + grep + sed + git + tar + gzip + gawk + make + perl + shellcheck + pandoc))) diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm new file mode 100644 index 0000000..67b5a51 --- /dev/null +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -0,0 +1,11 @@ +(list + (channel + (name 'guix) + (url "https://git.savannah.gnu.org/git/guix.git") + (commit + "d265809b782293eb42dd663b4611ca19dd2bf1b3") + (introduction + (make-channel-introduction + "9edb3f66fd807b096b48283debdcddccfea34bad" + (openpgp-fingerprint + "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/sh/templates/aux/guix/with-container.sh b/sh/templates/aux/guix/with-container.sh new file mode 100755 index 0000000..db7b121 --- /dev/null +++ b/sh/templates/aux/guix/with-container.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eux + +guix time-machine -C aux/guix/pinned-channels.scm -- environment --pure -C -m aux/guix/manifest.scm -- sh -c "$@" diff --git a/sh/templates/aux/m4/guile.m4 b/sh/templates/aux/m4/guile.m4 new file mode 100644 index 0000000..6968973 --- /dev/null +++ b/sh/templates/aux/m4/guile.m4 @@ -0,0 +1,397 @@ +## Autoconf macros for working with Guile. +## +## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. +## +## This library is free software; you can redistribute it and/or +## modify it under the terms of the GNU Lesser General Public License +## as published by the Free Software Foundation; either version 3 of +## the License, or (at your option) any later version. +## +## This library is distributed in the hope that it will be useful, +## but WITHOUT ANY WARRANTY; without even the implied warranty of +## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +## Lesser General Public License for more details. +## +## You should have received a copy of the GNU Lesser General Public +## License along with this library; if not, write to the Free Software +## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA +## 02110-1301 USA + +# serial 10 + +## Index +## ----- +## +## GUILE_PKG -- find Guile development files +## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +## GUILE_FLAGS -- set flags for compiling and linking with Guile +## GUILE_SITE_DIR -- find path to Guile "site" directories +## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +## GUILE_MODULE_EXPORTS -- check if a module exports a variable +## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable + +## Code +## ---- + +## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged +## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). + +# GUILE_PKG -- find Guile development files +# +# Usage: GUILE_PKG([VERSIONS]) +# +# This macro runs the @code{pkg-config} tool to find development files +# for an available version of Guile. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0), falling back to the previous stable version +# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is +# found, an error is signalled. The found version is stored in +# @var{GUILE_EFFECTIVE_VERSION}. +# +# If @code{GUILE_PROGS} was already invoked, this macro ensures that the +# development files have the same effective version as the Guile +# program. +# +# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by +# @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PKG], + [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) + if test "x$PKG_CONFIG" = x; then + AC_MSG_ERROR([pkg-config is missing, please install it]) + fi + _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" + if test -n "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp="" + for v in $_guile_versions_to_search; do + if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then + _guile_tmp=$v + fi + done + if test -z "$_guile_tmp"; then + AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) + fi + _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION + fi + GUILE_EFFECTIVE_VERSION="" + _guile_errors="" + for v in $_guile_versions_to_search; do + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_NOTICE([checking for guile $v]) + PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) + fi + done + + if test -z "$GUILE_EFFECTIVE_VERSION"; then + AC_MSG_ERROR([ +No Guile development packages were found. + +Please verify that you have Guile installed. If you installed Guile +from a binary distribution, please verify that you have also installed +the development packages. If you installed it yourself, you might need +to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. +]) + fi + AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + ]) + +# GUILE_FLAGS -- set flags for compiling and linking with Guile +# +# Usage: GUILE_FLAGS +# +# This macro runs the @code{pkg-config} tool to find out how to compile +# and link programs against Guile. It sets four variables: +# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and +# @var{GUILE_LTLIBS}. +# +# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that +# uses Guile header files. This is almost always just one or more @code{-I} +# flags. +# +# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program +# against Guile. This includes @code{-lguile-@var{VERSION}} for the +# Guile library itself, and may also include one or more @code{-L} flag +# to tell the compiler where to find the libraries. But it does not +# include flags that influence the program's runtime search path for +# libraries, and will therefore lead to a program that fails to start, +# unless all necessary libraries are installed in a standard location +# such as @file{/usr/lib}. +# +# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to +# libtool, respectively, to link a program against Guile. It includes flags +# that augment the program's runtime search path for libraries, so that shared +# libraries will be found at the location where they were during linking, even +# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the +# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used +# when linking the program is done through libtool. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_FLAGS], + [AC_REQUIRE([GUILE_PKG]) + PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) + + dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by + dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS + dnl to us. + + GUILE_LDFLAGS=$GUILE_LIBS + + dnl Determine the platform dependent parameters needed to use rpath. + dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs + dnl the file gnulib/build-aux/config.rpath. + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) + GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" + AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) + GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" + + AC_SUBST([GUILE_EFFECTIVE_VERSION]) + AC_SUBST([GUILE_CFLAGS]) + AC_SUBST([GUILE_LDFLAGS]) + AC_SUBST([GUILE_LIBS]) + AC_SUBST([GUILE_LTLIBS]) + ]) + +# GUILE_SITE_DIR -- find path to Guile site directories +# +# Usage: GUILE_SITE_DIR +# +# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will +# be set to Guile's "site" directory for Scheme source files (usually something +# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the +# directory for compiled Scheme files also known as @code{.go} files +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). +# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions +# (usually something like +# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two +# are set to blank if the particular version of Guile does not support +# them. Note that this macro will run the macros @code{GUILE_PKG} and +# @code{GUILE_PROGS} if they have not already been run. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_SITE_DIR], + [AC_REQUIRE([GUILE_PKG]) + AC_REQUIRE([GUILE_PROGS]) + AC_MSG_CHECKING(for Guile site directory) + GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_SITE) + if test "$GUILE_SITE" = ""; then + AC_MSG_FAILURE(sitedir not found) + fi + AC_SUBST(GUILE_SITE) + AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) + GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` + if test "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) + GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` + if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then + AC_MSG_RESULT(no) + GUILE_SITE_CCACHE="" + AC_MSG_WARN([siteccachedir not found]) + fi + fi + AC_MSG_RESULT($GUILE_SITE_CCACHE) + AC_SUBST([GUILE_SITE_CCACHE]) + AC_MSG_CHECKING(for Guile extensions directory) + GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` + AC_MSG_RESULT($GUILE_EXTENSION) + if test "$GUILE_EXTENSION" = ""; then + GUILE_EXTENSION="" + AC_MSG_WARN(extensiondir not found) + fi + AC_SUBST(GUILE_EXTENSION) + ]) + +# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs +# +# Usage: GUILE_PROGS([VERSION]) +# +# This macro looks for programs @code{guile} and @code{guild}, setting +# variables @var{GUILE} and @var{GUILD} to their paths, respectively. +# The macro will attempt to find @code{guile} with the suffix of +# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and +# then fall back to looking for @code{guile} with no suffix. If +# @code{guile} is still not found, signal an error. The suffix, if any, +# that was required to find @code{guile} will be used for @code{guild} +# as well. +# +# By default, this macro will search for the latest stable version of +# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older +# version is found, the macro will signal an error. +# +# The effective version of the found @code{guile} is set to +# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective +# version is compatible with the result of a previous invocation of +# @code{GUILE_FLAGS}, if any. +# +# As a legacy interface, it also looks for @code{guile-config} and +# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. +# +# The variables are marked for substitution, as by @code{AC_SUBST}. +# +AC_DEFUN([GUILE_PROGS], + [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" + if test -z "$_guile_required_version"; then + _guile_required_version=3.0 + fi + + _guile_candidates=guile + _tmp= + for v in `echo "$_guile_required_version" | tr . ' '`; do + if test -n "$_tmp"; then _tmp=$_tmp.; fi + _tmp=$_tmp$v + _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" + done + + AC_PATH_PROGS(GUILE,[$_guile_candidates]) + if test -z "$GUILE"; then + AC_MSG_ERROR([guile required but not found]) + fi + + _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` + _guile_effective_version=`$GUILE -c "(display (effective-version))"` + if test -z "$GUILE_EFFECTIVE_VERSION"; then + GUILE_EFFECTIVE_VERSION=$_guile_effective_version + elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then + AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) + fi + + _guile_major_version=`$GUILE -c "(display (major-version))"` + _guile_minor_version=`$GUILE -c "(display (minor-version))"` + _guile_micro_version=`$GUILE -c "(display (micro-version))"` + _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" + + AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) + _major_version=`echo $_guile_required_version | cut -d . -f 1` + _minor_version=`echo $_guile_required_version | cut -d . -f 2` + _micro_version=`echo $_guile_required_version | cut -d . -f 3` + if test "$_guile_major_version" -gt "$_major_version"; then + true + elif test "$_guile_major_version" -eq "$_major_version"; then + if test "$_guile_minor_version" -gt "$_minor_version"; then + true + elif test "$_guile_minor_version" -eq "$_minor_version"; then + if test -n "$_micro_version"; then + if test "$_guile_micro_version" -lt "$_micro_version"; then + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 + fi + elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then + # Allow prereleases that have the right effective version. + true + else + AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) + fi + AC_MSG_RESULT([$_guile_prog_version]) + + AC_PATH_PROG(GUILD,[guild$_guile_suffix]) + AC_SUBST(GUILD) + + AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) + AC_SUBST(GUILE_CONFIG) + if test -n "$GUILD"; then + GUILE_TOOLS=$GUILD + else + AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) + fi + AC_SUBST(GUILE_TOOLS) + ]) + +# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value +# +# Usage: GUILE_CHECK_RETVAL(var,check) +# +# @var{var} is a shell variable name to be set to the return value. +# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and +# returning either 0 or non-#f to indicate the check passed. +# Non-0 number or #f indicates failure. +# Avoid using the character "#" since that confuses autoconf. +# +AC_DEFUN([GUILE_CHECK], + [AC_REQUIRE([GUILE_PROGS]) + $GUILE -c "$2" > /dev/null 2>&1 + $1=$? + ]) + +# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module +# +# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. +# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). +# +AC_DEFUN([GUILE_MODULE_CHECK], + [AC_MSG_CHECKING([if $2 $4]) + GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) + if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi + AC_MSG_RESULT($$1) + ]) + +# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module +# +# Usage: GUILE_MODULE_AVAILABLE(var,module) +# +# @var{var} is a shell variable name to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# +AC_DEFUN([GUILE_MODULE_AVAILABLE], + [GUILE_MODULE_CHECK($1,$2,0,is available) + ]) + +# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable +# +# Usage: GUILE_MODULE_REQUIRED(symlist) +# +# @var{symlist} is a list of symbols, WITHOUT surrounding parens, +# like: ice-9 common-list. +# +AC_DEFUN([GUILE_MODULE_REQUIRED], + [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) + if test "$ac_guile_module_required" = "no" ; then + AC_MSG_ERROR([required guile module not found: ($1)]) + fi + ]) + +# GUILE_MODULE_EXPORTS -- check if a module exports a variable +# +# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) +# +# @var{var} is a shell variable to be set to "yes" or "no". +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_EXPORTS], + [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') + ]) + +# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable +# +# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) +# +# @var{module} is a list of symbols, like: (ice-9 common-list). +# @var{modvar} is the Guile Scheme variable to check. +# +AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], + [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) + if test "$guile_module_required_export" = "no" ; then + AC_MSG_ERROR([module $1 does not export $2; required]) + fi + ]) + +## guile.m4 ends here diff --git a/sh/templates/aux/m4/programmer-mode.m4 b/sh/templates/aux/m4/programmer-mode.m4 new file mode 100644 index 0000000..876b878 --- /dev/null +++ b/sh/templates/aux/m4/programmer-mode.m4 @@ -0,0 +1,17 @@ +AC_DEFUN([EU_PROGRAMMER_MODE], [ + AC_ARG_ENABLE([programmer-mode], + AS_HELP_STRING([--enable-programmer-mode], + [Enables all opt-in configure flags, and requires a full development environment [default=no]. Similar to --enable-maintainer-mode, without changing dependency tracking.]), + [PROGRAMMER_MODE=$enableval], + [PROGRAMMER_MODE=no]) + + AC_SUBST([PROGRAMMER_MODE]) + + AC_ARG_ENABLE([ci-mode], + AS_HELP_STRING([--enable-ci-mode], + [Enables CI-specific flag. Assumes --enable-programmer-mode [default=no].]), + [CI_MODE=$enableval], + [CI_MODE=no]) + + AC_SUBST([CI_MODE]) +]) diff --git a/sh/templates/aux/texinfo-build-web-assets.sh b/sh/templates/aux/texinfo-build-web-assets.sh new file mode 100755 index 0000000..241ebb8 --- /dev/null +++ b/sh/templates/aux/texinfo-build-web-assets.sh @@ -0,0 +1,55 @@ +#!/bin/sh +set -eux + +PACKAGE="$1" +shift + +dictname() { + case "$1" in + en) + echo en_US-large + ;; + *) + echo "Unsupported dictionary type $1" + exit 1 + ;; + esac +} + +OUT="$(mktemp)" +CLONE="$(mktemp -d)" +rsync -a . "$CLONE" +cd "$CLONE" + +for tag in master $(git tag); do + git checkout "$tag" + for lang in "$@"; do + mkdir -p "public/$lang/$tag/" + + make html + mv "doc/$PACKAGE.html/" "public/$lang/$tag/doc/" + + make MAKEINFOFLAGS=--no-split html ps dvi pdf + mv -t "public/$lang/$tag/" "doc/$PACKAGE.dvi" "doc/$PACKAGE.ps" "doc/$PACKAGE.pdf" "doc/$PACKAGE.html" + + makeinfo --docbook "doc/$PACKAGE.texi" -o "$PACKAGE.docbook" + xsltproc build-aux/docbook-xsl/epub/docbook.xsl "$PACKAGE.docbook" + echo "application/epub+zip" > mimetype + zip -0Xq "$PACKAGE.epub" mimetype + zip -Xr9D "$PACKAGE.epub" META-INF OEBPS + mv "$PACKAGE.epub" "public/$lang/$tag/" + + cat doc/dictionaries/international.txt "doc/dictionaries/$lang.txt" > doc/dictionaries/curr.txt + hunspell -u -H -d "$(dictname "$lang")" -p doc/dictionaries/curr.txt "public/$lang/$tag/$PACKAGE.html" | tee -a "$OUT" + done +done + +cd - +rm -rf public/ +mv "$CLONE/public/" public/ + +if [ -s "$OUT" ]; then + echo "Misspelled words detected:" + cat "$OUT" + exit 1 +fi diff --git a/sh/templates/aux/workflow/CHANGELOG.sh b/sh/templates/aux/workflow/CHANGELOG.sh new file mode 100755 index 0000000..829cf5f --- /dev/null +++ b/sh/templates/aux/workflow/CHANGELOG.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" + +pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - README" \ + --metadata lang=en \ + -r markdown \ + -w html \ + < CHANGELOG.md > public/CHANGELOG.html diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh new file mode 100755 index 0000000..49b1e8d --- /dev/null +++ b/sh/templates/aux/workflow/README.sh @@ -0,0 +1,29 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +PROJECT="$2" + +RELEASES_LIST="$(mktemp)" +for version in $(git tag); do + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" +done + +RELEASES="$(mktemp)" +if [ -s "$RELEASES_LIST" ]; then + printf '\n# Releases\n\n' >> "$RELEASES" + cat "$RELEASES_LIST" >> "$RELEASES" +fi + +cat README.md "$RELEASES" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - README" \ + --metadata lang=en \ + -r markdown \ + -w html \ + > public/index.html diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh new file mode 100755 index 0000000..ab45835 --- /dev/null +++ b/sh/templates/aux/workflow/TODOs.sh @@ -0,0 +1,23 @@ +#!/bin/sh +set -eu + +mkdir -p public + +export PROJECT_UC="$1" +export PROJECT="$2" +export MAILING_LIST="$3" + +REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' + +envsubst < aux/workflow/preamble.md | \ + printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r markdown \ + -w html \ + -H aux/workflow/style.css \ + > public/TODOs.html diff --git a/sh/templates/aux/workflow/assert-todos.sh b/sh/templates/aux/workflow/assert-todos.sh new file mode 100755 index 0000000..203d465 --- /dev/null +++ b/sh/templates/aux/workflow/assert-todos.sh @@ -0,0 +1,57 @@ +#!/bin/sh +set -eu + +if git grep FIXME | grep -v '^TODOs.md' | grep -v '^aux/workflow/assert-todos.sh' | grep -v '^aux/docbook-xsl/'; then + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.md." + exit 1 +fi + +awk -F'{#' ' +BEGIN { + exitstatus = 0 + h2flag = 0 + h2status = "" + prevline = "" + idx = 0 + delete ids[0] +} +h2flag == 1 { + split($0, l, " ") + timelinestatus = l[2] + if (h2status != timelinestatus) { + print "h2/timeline status mismatch for line " NR-1 + print prevline + print $0 + exitstatus = 1 + } + h2status = "" + h2flag = 0 +} + +/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { + if (match($0, / \{#.*?\}$/) == 0) { + print "Missing ID for line " NR ":\n" $0 + exitstatus = 1 + } + id_with_prefix = substr($2, 0, length($2) - 1) + match(id_with_prefix, /^\w+-/) + id = substr(id_with_prefix, RLENGTH + 1) + if (id in arr) { + print "Duplicate ID: " id + exitstatus = 1 + } else { + arr[id] = 1 + } + + split($0, l, " ") + h2status = l[2] + h2flag = 1 + prevline = $0 +} + + +/^# Scratch$/ { + exit exitstatus +} +' TODOs.md diff --git a/sh/templates/aux/workflow/preamble.md b/sh/templates/aux/workflow/preamble.md new file mode 100644 index 0000000..c6ae56e --- /dev/null +++ b/sh/templates/aux/workflow/preamble.md @@ -0,0 +1,16 @@ +# About + +TODOs for $PROJECT_UC. + +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). + +Register a new one at +[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) +and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). + +*Você também pode escrever em português*. + +*Vous pouvez aussi écrire en français*. + +*Vi povas ankaŭ skribi esperante*. + diff --git a/sh/templates/aux/workflow/style.css b/sh/templates/aux/workflow/style.css new file mode 100644 index 0000000..ac0144c --- /dev/null +++ b/sh/templates/aux/workflow/style.css @@ -0,0 +1,38 @@ + diff --git a/sh/templates/build-aux/assert-docs-spelling.sh b/sh/templates/build-aux/assert-docs-spelling.sh deleted file mode 100755 index 5340319..0000000 --- a/sh/templates/build-aux/assert-docs-spelling.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -set -eu - -export LANG=C.UTF-8 - -for DICT in dictionaries/*.txt; do - sort "$DICT" | diff - "$DICT" || { - echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 - echo " LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2 - exit 1 - } -done - -OUT="$(mktemp)" -LANGS="$(jq -r .langs[] < ../metadata.json)" - -for l in ${LANGS}; do - make SPHINXOPTS="-D language=$l" html - DICT="$(mktemp)" - cat dictionaries/international.txt "dictionaries/$l.txt" > "$DICT" - hunspell -u3 -H -d "$l" -p "$DICT" _build/html/*.html | tee -a "$OUT" -done - -if [ -s "$OUT" ]; then - printf "\nvvv Mispelled words detected by hunspell.\n\n" - sort < "$OUT" | uniq - printf "\n^^^\n" >&2 - exit 1 -else - echo "No spelling errors detected" - exit 0 -fi diff --git a/sh/templates/build-aux/assert-shellcheck.sh b/sh/templates/build-aux/assert-shellcheck.sh deleted file mode 100755 index 334a875..0000000 --- a/sh/templates/build-aux/assert-shellcheck.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -eux - -git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ - xargs shellcheck diff --git a/sh/templates/build-aux/ci/ci-build.sh b/sh/templates/build-aux/ci/ci-build.sh deleted file mode 100755 index 0b792df..0000000 --- a/sh/templates/build-aux/ci/ci-build.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$1" -LOGS_DIR="$2" -read -r _ SHA _ # oldrev newrev refname -FILENAME="$(date -Is)-$SHA.log" -LOGFILE="$LOGS_DIR/$FILENAME" - -{ - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" - } - trap finish EXIT - - unset GIT_DIR - CLONE="$(mktemp -d)" - git clone . "$CLONE" - cd "$CLONE" - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - - if [ -f build-aux/guix/with-container.sh ]; then - RUNNER='./build-aux/guix/with-container.sh' - else - RUNNER='sh -c' - fi - - if [ -f ./bootstrap ]; then - COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' - else - COMMAND='make clean check public' - fi - - $RUNNER "$COMMAND" - - rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete -} | tee "$LOGFILE" 2>&1 diff --git a/sh/templates/build-aux/ci/git-post-receive.sh b/sh/templates/build-aux/ci/git-post-receive.sh deleted file mode 100755 index 2f6e3c0..0000000 --- a/sh/templates/build-aux/ci/git-post-receive.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do - opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" - if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then - printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" - exit 0 - fi -done - -PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/data/ci/$PACKAGE/logs" -"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/sh/templates/build-aux/ci/git-pre-push.sh b/sh/templates/build-aux/ci/git-pre-push.sh deleted file mode 100644 index 23839de..0000000 --- a/sh/templates/build-aux/ci/git-pre-push.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$(basename "$PWD")" -__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" - -DESCRIPTION="$(mktemp)" -if [ -f description ] -then - cp description "$DESCRIPTION" -else - git config euandreh.description > "$DESCRIPTION" -fi - -scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" -__ENABLE_CI__ ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" -__ENABLE_CI__ scp build-aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" -__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/sh/templates/build-aux/ci/git-pre-push.sh.in b/sh/templates/build-aux/ci/git-pre-push.sh.in deleted file mode 100755 index dbadd1c..0000000 --- a/sh/templates/build-aux/ci/git-pre-push.sh.in +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$(basename "$PWD")" -__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" - -DESCRIPTION="$(mktemp)" -if [ -f description ] -then - cp description "$DESCRIPTION" -else - git config euandreh.description > "$DESCRIPTION" -fi - -scp "$DESCRIPTION" "git.@TLD@:$REMOTE_GIT_DIR/description" -__ENABLE_CI__ ssh git.@TLD@ mkdir -p "$LOGS_DIR" -__ENABLE_CI__ scp build-aux/ci/ci-build.sh "git.@TLD@:$(dirname "$LOGS_DIR")/ci-build.sh" -__ENABLE_CI__ scp build-aux/ci/git-post-receive.sh "git.@TLD@:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/sh/templates/build-aux/compile-readme.sh b/sh/templates/build-aux/compile-readme.sh deleted file mode 100755 index 91f6065..0000000 --- a/sh/templates/build-aux/compile-readme.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -eux - -pandoc -s \ - --metadata title="$1 - EuAndreh" \ - -c styles.css \ - -o public/index.html \ - -r markdown \ - README diff --git a/sh/templates/build-aux/default-extra-dist.am b/sh/templates/build-aux/default-extra-dist.am deleted file mode 100644 index c3f1242..0000000 --- a/sh/templates/build-aux/default-extra-dist.am +++ /dev/null @@ -1,6 +0,0 @@ -EXTRA_DIST = \ - build-aux/guix/manifest.scm \ - build-aux/guix/pinned-channels.scm \ - build-aux/guix/with-container.sh \ - description \ - $(TESTS) diff --git a/sh/templates/build-aux/dev-checks.am b/sh/templates/build-aux/dev-checks.am deleted file mode 100644 index ca1b9d8..0000000 --- a/sh/templates/build-aux/dev-checks.am +++ /dev/null @@ -1,17 +0,0 @@ -.PHONY: check-local-dev-checks -check-local-dev-checks: - if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ - echo 'Running PROGRAMMER_MODE checks.'; \ - $(srcdir)/build-aux/assert-shellcheck.sh || exit 1; \ - $(srcdir)/build-aux/assert-todos.sh || exit 1; \ - if [ "x$(CI_MODE)" = 'xno' ]; then \ - echo 'Running CI_MODE checks.'; \ - $(GUIX) build -f guix/channel/xyz/euandreh/$(PACKAGE)/channel.scm || exit 1; \ - else \ - echo 'Skipping CI_MODE checks.'; \ - fi \ - else \ - echo 'Skipping PROGRAMMER_MODE checks.'; \ - fi - -check-local: check-local-dev-checks diff --git a/sh/templates/build-aux/docbook-xsl.tar.gz b/sh/templates/build-aux/docbook-xsl.tar.gz deleted file mode 100644 index a7a4ce6..0000000 Binary files a/sh/templates/build-aux/docbook-xsl.tar.gz and /dev/null differ diff --git a/sh/templates/build-aux/git-notes-release.am b/sh/templates/build-aux/git-notes-release.am deleted file mode 100644 index 0d91e88..0000000 --- a/sh/templates/build-aux/git-notes-release.am +++ /dev/null @@ -1,7 +0,0 @@ -.PHONY: release -release: check distcheck dist - $(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) - -.PHONY: release-with-binaries -release-with-binaries: - $(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) --bin diff --git a/sh/templates/build-aux/git-notes-release.sh b/sh/templates/build-aux/git-notes-release.sh deleted file mode 100644 index 4d55645..0000000 --- a/sh/templates/build-aux/git-notes-release.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -set -eux - -DIST_ARCHIVES="$1" -VERSION="$2" -PACKAGE="$3" -BIN="${4:-}" - -if [ "$BIN" != --bin ]; then - # Assert version - if git rev-parse "$VERSION" > /dev/null; then - echo "Tar $VERSION already exists, exitting." - exit 2 - fi - - # Update NEWS - sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS - cat < $DIST_ARCHIVES - git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc -EOF -) - git notes append -m "$NOTE" - sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - ./configure --enable-programmer-mode - git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - git commit -m "Update released version $VERSION in channel.scm.in file." - - # Publish release artifacts - git push --tags - git push origin refs/notes/tarballs - git push origin refs/notes/signatures - git push origin refs/notes/commits - git push -else - guix pull - BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")" - SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")" - git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION" - NOTE=$(cat < $PACKAGE-bin.tar.gz - tar xf $PACKAGE-bin.tar.gz - bin/$PACKAGE -EOF -) - git notes append -m "$NOTE" - git push origin refs/notes/binaries - git push origin refs/notes/commits -fi diff --git a/sh/templates/build-aux/guile.am b/sh/templates/build-aux/guile.am deleted file mode 100644 index e56b31f..0000000 --- a/sh/templates/build-aux/guile.am +++ /dev/null @@ -1,16 +0,0 @@ -guilescmdir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)/xyz/euandreh -guilegodir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache/xyz/euandreh - -GUILE_OBJECTS = $(SOURCES:.scm=.go) - -dist_guilescm_DATA = $(SOURCES) -guilego_DATA = $(GUILE_OBJECTS) - -CLEANFILES = $(GUILE_OBJECTS) - -SUFFIXES = .scm .go -.scm.go: - $(GUILD) compile -o "$@" "$<" - -TEST_EXTENSIONS = .scm -SCM_LOG_COMPILER = $(GUILE) -L $(top_srcdir)/src diff --git a/sh/templates/build-aux/guix/manifest.scm b/sh/templates/build-aux/guix/manifest.scm deleted file mode 100644 index 7164e5c..0000000 --- a/sh/templates/build-aux/guix/manifest.scm +++ /dev/null @@ -1,16 +0,0 @@ -(specifications->manifest - (map symbol->string - '(bash - coreutils - findutils - diffutils - grep - sed - git - tar - gzip - gawk - make - perl - shellcheck - pandoc))) diff --git a/sh/templates/build-aux/guix/pinned-channels.scm b/sh/templates/build-aux/guix/pinned-channels.scm deleted file mode 100644 index 67b5a51..0000000 --- a/sh/templates/build-aux/guix/pinned-channels.scm +++ /dev/null @@ -1,11 +0,0 @@ -(list - (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (commit - "d265809b782293eb42dd663b4611ca19dd2bf1b3") - (introduction - (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" - (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/sh/templates/build-aux/guix/with-container.sh b/sh/templates/build-aux/guix/with-container.sh deleted file mode 100755 index 5969d38..0000000 --- a/sh/templates/build-aux/guix/with-container.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eux - -guix time-machine -C build-aux/guix/pinned-channels.scm -- environment --pure -C -m build-aux/guix/manifest.scm -- sh -c "$@" diff --git a/sh/templates/build-aux/html-files-from-sources.am b/sh/templates/build-aux/html-files-from-sources.am deleted file mode 100644 index db073f3..0000000 --- a/sh/templates/build-aux/html-files-from-sources.am +++ /dev/null @@ -1,23 +0,0 @@ -.PHONY: clean-local-html-files-from-sources -clean-local-html-files-from-sources: - rm -rf public/ OEBPS META-INF/ doc/$(PACKAGE).xml mimetype - -clean-local: clean-local-html-files-from-sources - -LANGS = en -DICTIONARIES = doc/dictionaries/en.txt doc/dictionaries/international.txt -doc/dictionaries/all.txt: $(DICTIONARIES) - cat $(DICTIONARIES) | sort > $@ - - cat $(DICTIONARIES) | diff - $@ || { \ - echo 'Dictionary files are not sorted. To fix it, run:'; \ - echo ' for f in $(DICTIONARIES); do LANG=C.UTF-8 sort -o $$f $$f; done'; \ - touch $(DICTIONARIES); \ - exit 1; \ - } - -public: README TODOs.md $(DOC_SRCS) doc/dictionaries/all.txt - $(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS) - - $(srcdir)/build-aux/generate-tasks-and-bugs.sh - $(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)' diff --git a/sh/templates/build-aux/rust.am b/sh/templates/build-aux/rust.am deleted file mode 100644 index f8f9b0f..0000000 --- a/sh/templates/build-aux/rust.am +++ /dev/null @@ -1,9 +0,0 @@ -rustfmt: $(RUST_SRC) - if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ - for f in $(RUST_SRC); do \ - $(RUSTFMT) --check $$f || { \ - printf "Unformatted Rust code. To fix it, run:\n rustfmt %s\n" $$f; \ - exit 1; \ - }; \ - done; \ - fi diff --git a/sh/templates/build-aux/texinfo-build-web-assets.sh b/sh/templates/build-aux/texinfo-build-web-assets.sh deleted file mode 100755 index 241ebb8..0000000 --- a/sh/templates/build-aux/texinfo-build-web-assets.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$1" -shift - -dictname() { - case "$1" in - en) - echo en_US-large - ;; - *) - echo "Unsupported dictionary type $1" - exit 1 - ;; - esac -} - -OUT="$(mktemp)" -CLONE="$(mktemp -d)" -rsync -a . "$CLONE" -cd "$CLONE" - -for tag in master $(git tag); do - git checkout "$tag" - for lang in "$@"; do - mkdir -p "public/$lang/$tag/" - - make html - mv "doc/$PACKAGE.html/" "public/$lang/$tag/doc/" - - make MAKEINFOFLAGS=--no-split html ps dvi pdf - mv -t "public/$lang/$tag/" "doc/$PACKAGE.dvi" "doc/$PACKAGE.ps" "doc/$PACKAGE.pdf" "doc/$PACKAGE.html" - - makeinfo --docbook "doc/$PACKAGE.texi" -o "$PACKAGE.docbook" - xsltproc build-aux/docbook-xsl/epub/docbook.xsl "$PACKAGE.docbook" - echo "application/epub+zip" > mimetype - zip -0Xq "$PACKAGE.epub" mimetype - zip -Xr9D "$PACKAGE.epub" META-INF OEBPS - mv "$PACKAGE.epub" "public/$lang/$tag/" - - cat doc/dictionaries/international.txt "doc/dictionaries/$lang.txt" > doc/dictionaries/curr.txt - hunspell -u -H -d "$(dictname "$lang")" -p doc/dictionaries/curr.txt "public/$lang/$tag/$PACKAGE.html" | tee -a "$OUT" - done -done - -cd - -rm -rf public/ -mv "$CLONE/public/" public/ - -if [ -s "$OUT" ]; then - echo "Misspelled words detected:" - cat "$OUT" - exit 1 -fi diff --git a/sh/templates/build-aux/workflow/CHANGELOG.sh b/sh/templates/build-aux/workflow/CHANGELOG.sh deleted file mode 100755 index 829cf5f..0000000 --- a/sh/templates/build-aux/workflow/CHANGELOG.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" - -pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - README" \ - --metadata lang=en \ - -r markdown \ - -w html \ - < CHANGELOG.md > public/CHANGELOG.html diff --git a/sh/templates/build-aux/workflow/README.sh b/sh/templates/build-aux/workflow/README.sh deleted file mode 100755 index 49b1e8d..0000000 --- a/sh/templates/build-aux/workflow/README.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -PROJECT="$2" - -RELEASES_LIST="$(mktemp)" -for version in $(git tag); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" -done - -RELEASES="$(mktemp)" -if [ -s "$RELEASES_LIST" ]; then - printf '\n# Releases\n\n' >> "$RELEASES" - cat "$RELEASES_LIST" >> "$RELEASES" -fi - -cat README.md "$RELEASES" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - README" \ - --metadata lang=en \ - -r markdown \ - -w html \ - > public/index.html diff --git a/sh/templates/build-aux/workflow/TODOs.sh b/sh/templates/build-aux/workflow/TODOs.sh deleted file mode 100755 index 3f9fa4b..0000000 --- a/sh/templates/build-aux/workflow/TODOs.sh +++ /dev/null @@ -1,23 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -export PROJECT_UC="$1" -export PROJECT="$2" -export MAILING_LIST="$3" - -REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' - -envsubst < build-aux/workflow/preamble.md | \ - printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - TODOs" \ - --metadata lang=en \ - -r markdown \ - -w html \ - -H build-aux/workflow/style.css \ - > public/TODOs.html diff --git a/sh/templates/build-aux/workflow/assert-todos.sh b/sh/templates/build-aux/workflow/assert-todos.sh deleted file mode 100755 index 1d568cb..0000000 --- a/sh/templates/build-aux/workflow/assert-todos.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -set -eu - -if git grep FIXME | grep -v '^TODOs.md' | grep -v '^build-aux/workflow/assert-todos.sh' | grep -v '^build-aux/docbook-xsl/'; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.md." - exit 1 -fi - -awk -F'{#' ' -BEGIN { - exitstatus = 0 - h2flag = 0 - h2status = "" - prevline = "" - idx = 0 - delete ids[0] -} -h2flag == 1 { - split($0, l, " ") - timelinestatus = l[2] - if (h2status != timelinestatus) { - print "h2/timeline status mismatch for line " NR-1 - print prevline - print $0 - exitstatus = 1 - } - h2status = "" - h2flag = 0 -} - -/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { - if (match($0, / \{#.*?\}$/) == 0) { - print "Missing ID for line " NR ":\n" $0 - exitstatus = 1 - } - id_with_prefix = substr($2, 0, length($2) - 1) - match(id_with_prefix, /^\w+-/) - id = substr(id_with_prefix, RLENGTH + 1) - if (id in arr) { - print "Duplicate ID: " id - exitstatus = 1 - } else { - arr[id] = 1 - } - - split($0, l, " ") - h2status = l[2] - h2flag = 1 - prevline = $0 -} - - -/^# Scratch$/ { - exit exitstatus -} -' TODOs.md diff --git a/sh/templates/build-aux/workflow/preamble.md b/sh/templates/build-aux/workflow/preamble.md deleted file mode 100644 index c6ae56e..0000000 --- a/sh/templates/build-aux/workflow/preamble.md +++ /dev/null @@ -1,16 +0,0 @@ -# About - -TODOs for $PROJECT_UC. - -See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). - -Register a new one at -[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) -and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). - -*Você também pode escrever em português*. - -*Vous pouvez aussi écrire en français*. - -*Vi povas ankaŭ skribi esperante*. - diff --git a/sh/templates/build-aux/workflow/style.css b/sh/templates/build-aux/workflow/style.css deleted file mode 100644 index ac0144c..0000000 --- a/sh/templates/build-aux/workflow/style.css +++ /dev/null @@ -1,38 +0,0 @@ - diff --git a/sh/templates/m4/guile.m4 b/sh/templates/m4/guile.m4 deleted file mode 100644 index 6968973..0000000 --- a/sh/templates/m4/guile.m4 +++ /dev/null @@ -1,397 +0,0 @@ -## Autoconf macros for working with Guile. -## -## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public License -## as published by the Free Software Foundation; either version 3 of -## the License, or (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -## 02110-1301 USA - -# serial 10 - -## Index -## ----- -## -## GUILE_PKG -- find Guile development files -## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -## GUILE_FLAGS -- set flags for compiling and linking with Guile -## GUILE_SITE_DIR -- find path to Guile "site" directories -## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value -## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module -## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module -## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable -## GUILE_MODULE_EXPORTS -- check if a module exports a variable -## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable - -## Code -## ---- - -## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged -## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). - -# GUILE_PKG -- find Guile development files -# -# Usage: GUILE_PKG([VERSIONS]) -# -# This macro runs the @code{pkg-config} tool to find development files -# for an available version of Guile. -# -# By default, this macro will search for the latest stable version of -# Guile (e.g. 3.0), falling back to the previous stable version -# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is -# found, an error is signalled. The found version is stored in -# @var{GUILE_EFFECTIVE_VERSION}. -# -# If @code{GUILE_PROGS} was already invoked, this macro ensures that the -# development files have the same effective version as the Guile -# program. -# -# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by -# @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PKG], - [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) - if test "x$PKG_CONFIG" = x; then - AC_MSG_ERROR([pkg-config is missing, please install it]) - fi - _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" - if test -n "$GUILE_EFFECTIVE_VERSION"; then - _guile_tmp="" - for v in $_guile_versions_to_search; do - if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then - _guile_tmp=$v - fi - done - if test -z "$_guile_tmp"; then - AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) - fi - _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION - fi - GUILE_EFFECTIVE_VERSION="" - _guile_errors="" - for v in $_guile_versions_to_search; do - if test -z "$GUILE_EFFECTIVE_VERSION"; then - AC_MSG_NOTICE([checking for guile $v]) - PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) - fi - done - - if test -z "$GUILE_EFFECTIVE_VERSION"; then - AC_MSG_ERROR([ -No Guile development packages were found. - -Please verify that you have Guile installed. If you installed Guile -from a binary distribution, please verify that you have also installed -the development packages. If you installed it yourself, you might need -to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. -]) - fi - AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) - AC_SUBST([GUILE_EFFECTIVE_VERSION]) - ]) - -# GUILE_FLAGS -- set flags for compiling and linking with Guile -# -# Usage: GUILE_FLAGS -# -# This macro runs the @code{pkg-config} tool to find out how to compile -# and link programs against Guile. It sets four variables: -# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and -# @var{GUILE_LTLIBS}. -# -# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that -# uses Guile header files. This is almost always just one or more @code{-I} -# flags. -# -# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program -# against Guile. This includes @code{-lguile-@var{VERSION}} for the -# Guile library itself, and may also include one or more @code{-L} flag -# to tell the compiler where to find the libraries. But it does not -# include flags that influence the program's runtime search path for -# libraries, and will therefore lead to a program that fails to start, -# unless all necessary libraries are installed in a standard location -# such as @file{/usr/lib}. -# -# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to -# libtool, respectively, to link a program against Guile. It includes flags -# that augment the program's runtime search path for libraries, so that shared -# libraries will be found at the location where they were during linking, even -# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the -# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used -# when linking the program is done through libtool. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_FLAGS], - [AC_REQUIRE([GUILE_PKG]) - PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) - - dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by - dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS - dnl to us. - - GUILE_LDFLAGS=$GUILE_LIBS - - dnl Determine the platform dependent parameters needed to use rpath. - dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs - dnl the file gnulib/build-aux/config.rpath. - AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) - GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" - AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) - GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" - - AC_SUBST([GUILE_EFFECTIVE_VERSION]) - AC_SUBST([GUILE_CFLAGS]) - AC_SUBST([GUILE_LDFLAGS]) - AC_SUBST([GUILE_LIBS]) - AC_SUBST([GUILE_LTLIBS]) - ]) - -# GUILE_SITE_DIR -- find path to Guile site directories -# -# Usage: GUILE_SITE_DIR -# -# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will -# be set to Guile's "site" directory for Scheme source files (usually something -# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the -# directory for compiled Scheme files also known as @code{.go} files -# (usually something like -# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). -# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions -# (usually something like -# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two -# are set to blank if the particular version of Guile does not support -# them. Note that this macro will run the macros @code{GUILE_PKG} and -# @code{GUILE_PROGS} if they have not already been run. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_SITE_DIR], - [AC_REQUIRE([GUILE_PKG]) - AC_REQUIRE([GUILE_PROGS]) - AC_MSG_CHECKING(for Guile site directory) - GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` - AC_MSG_RESULT($GUILE_SITE) - if test "$GUILE_SITE" = ""; then - AC_MSG_FAILURE(sitedir not found) - fi - AC_SUBST(GUILE_SITE) - AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) - GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` - if test "$GUILE_SITE_CCACHE" = ""; then - AC_MSG_RESULT(no) - AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) - GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` - if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then - AC_MSG_RESULT(no) - GUILE_SITE_CCACHE="" - AC_MSG_WARN([siteccachedir not found]) - fi - fi - AC_MSG_RESULT($GUILE_SITE_CCACHE) - AC_SUBST([GUILE_SITE_CCACHE]) - AC_MSG_CHECKING(for Guile extensions directory) - GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` - AC_MSG_RESULT($GUILE_EXTENSION) - if test "$GUILE_EXTENSION" = ""; then - GUILE_EXTENSION="" - AC_MSG_WARN(extensiondir not found) - fi - AC_SUBST(GUILE_EXTENSION) - ]) - -# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -# -# Usage: GUILE_PROGS([VERSION]) -# -# This macro looks for programs @code{guile} and @code{guild}, setting -# variables @var{GUILE} and @var{GUILD} to their paths, respectively. -# The macro will attempt to find @code{guile} with the suffix of -# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and -# then fall back to looking for @code{guile} with no suffix. If -# @code{guile} is still not found, signal an error. The suffix, if any, -# that was required to find @code{guile} will be used for @code{guild} -# as well. -# -# By default, this macro will search for the latest stable version of -# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older -# version is found, the macro will signal an error. -# -# The effective version of the found @code{guile} is set to -# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective -# version is compatible with the result of a previous invocation of -# @code{GUILE_FLAGS}, if any. -# -# As a legacy interface, it also looks for @code{guile-config} and -# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PROGS], - [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" - if test -z "$_guile_required_version"; then - _guile_required_version=3.0 - fi - - _guile_candidates=guile - _tmp= - for v in `echo "$_guile_required_version" | tr . ' '`; do - if test -n "$_tmp"; then _tmp=$_tmp.; fi - _tmp=$_tmp$v - _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" - done - - AC_PATH_PROGS(GUILE,[$_guile_candidates]) - if test -z "$GUILE"; then - AC_MSG_ERROR([guile required but not found]) - fi - - _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` - _guile_effective_version=`$GUILE -c "(display (effective-version))"` - if test -z "$GUILE_EFFECTIVE_VERSION"; then - GUILE_EFFECTIVE_VERSION=$_guile_effective_version - elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then - AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) - fi - - _guile_major_version=`$GUILE -c "(display (major-version))"` - _guile_minor_version=`$GUILE -c "(display (minor-version))"` - _guile_micro_version=`$GUILE -c "(display (micro-version))"` - _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" - - AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) - _major_version=`echo $_guile_required_version | cut -d . -f 1` - _minor_version=`echo $_guile_required_version | cut -d . -f 2` - _micro_version=`echo $_guile_required_version | cut -d . -f 3` - if test "$_guile_major_version" -gt "$_major_version"; then - true - elif test "$_guile_major_version" -eq "$_major_version"; then - if test "$_guile_minor_version" -gt "$_minor_version"; then - true - elif test "$_guile_minor_version" -eq "$_minor_version"; then - if test -n "$_micro_version"; then - if test "$_guile_micro_version" -lt "$_micro_version"; then - AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) - fi - fi - elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then - # Allow prereleases that have the right effective version. - true - else - as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 - fi - elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then - # Allow prereleases that have the right effective version. - true - else - AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) - fi - AC_MSG_RESULT([$_guile_prog_version]) - - AC_PATH_PROG(GUILD,[guild$_guile_suffix]) - AC_SUBST(GUILD) - - AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) - AC_SUBST(GUILE_CONFIG) - if test -n "$GUILD"; then - GUILE_TOOLS=$GUILD - else - AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) - fi - AC_SUBST(GUILE_TOOLS) - ]) - -# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value -# -# Usage: GUILE_CHECK_RETVAL(var,check) -# -# @var{var} is a shell variable name to be set to the return value. -# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and -# returning either 0 or non-#f to indicate the check passed. -# Non-0 number or #f indicates failure. -# Avoid using the character "#" since that confuses autoconf. -# -AC_DEFUN([GUILE_CHECK], - [AC_REQUIRE([GUILE_PROGS]) - $GUILE -c "$2" > /dev/null 2>&1 - $1=$? - ]) - -# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module -# -# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) -# -# @var{var} is a shell variable name to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. -# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). -# -AC_DEFUN([GUILE_MODULE_CHECK], - [AC_MSG_CHECKING([if $2 $4]) - GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) - if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi - AC_MSG_RESULT($$1) - ]) - -# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module -# -# Usage: GUILE_MODULE_AVAILABLE(var,module) -# -# @var{var} is a shell variable name to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# -AC_DEFUN([GUILE_MODULE_AVAILABLE], - [GUILE_MODULE_CHECK($1,$2,0,is available) - ]) - -# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable -# -# Usage: GUILE_MODULE_REQUIRED(symlist) -# -# @var{symlist} is a list of symbols, WITHOUT surrounding parens, -# like: ice-9 common-list. -# -AC_DEFUN([GUILE_MODULE_REQUIRED], - [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) - if test "$ac_guile_module_required" = "no" ; then - AC_MSG_ERROR([required guile module not found: ($1)]) - fi - ]) - -# GUILE_MODULE_EXPORTS -- check if a module exports a variable -# -# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) -# -# @var{var} is a shell variable to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{modvar} is the Guile Scheme variable to check. -# -AC_DEFUN([GUILE_MODULE_EXPORTS], - [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') - ]) - -# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable -# -# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) -# -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{modvar} is the Guile Scheme variable to check. -# -AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], - [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) - if test "$guile_module_required_export" = "no" ; then - AC_MSG_ERROR([module $1 does not export $2; required]) - fi - ]) - -## guile.m4 ends here diff --git a/sh/templates/m4/links.m4 b/sh/templates/m4/links.m4 deleted file mode 100644 index a96fb5f..0000000 --- a/sh/templates/m4/links.m4 +++ /dev/null @@ -1,25 +0,0 @@ -AC_DEFUN([EU_LINKS], [ - AC_SUBST([TLD]) - - PACKAGE_VERSION_NUMBERS="`echo $PACKAGE_VERSION | cut -c2-`" - AC_SUBST([PACKAGE_VERSION_NUMBERS]) - - PACKAGE_DESCRIPTION="`awk '{print substr(@S|@0, 1, length(@S|@0)-1)}' $srcdir/description`" - AC_SUBST([PACKAGE_DESCRIPTION]) - - PACKAGE_CHANNEL_URL="git://git.$TLD/$PACKAGE/" - AC_SUBST([PACKAGE_CHANNEL_URL]) - - PACKAGE_GIT_URL="https://git.$TLD/$PACKAGE/" - AC_SUBST([PACKAGE_GIT_URL]) - - PACKAGE_CI_URL="https://ci.$TLD/" - AC_SUBST([PACKAGE_CI_URL]) - - PACKAGE_DOC_URL="https://$PACKAGE.$TLD/en/master/" - AC_SUBST([PACKAGE_DOC_URL]) - - if test "$PACKAGE_URL" != "https://$PACKAGE.$TLD"; then - AC_MSG_ERROR(['TLD' variable is out of sync with 'PACKAGE_URL': https://$PACKAGE.$TLD != $PACKAGE_URL]) - fi -]) diff --git a/sh/templates/m4/programmer-mode.m4 b/sh/templates/m4/programmer-mode.m4 deleted file mode 100644 index 876b878..0000000 --- a/sh/templates/m4/programmer-mode.m4 +++ /dev/null @@ -1,17 +0,0 @@ -AC_DEFUN([EU_PROGRAMMER_MODE], [ - AC_ARG_ENABLE([programmer-mode], - AS_HELP_STRING([--enable-programmer-mode], - [Enables all opt-in configure flags, and requires a full development environment [default=no]. Similar to --enable-maintainer-mode, without changing dependency tracking.]), - [PROGRAMMER_MODE=$enableval], - [PROGRAMMER_MODE=no]) - - AC_SUBST([PROGRAMMER_MODE]) - - AC_ARG_ENABLE([ci-mode], - AS_HELP_STRING([--enable-ci-mode], - [Enables CI-specific flag. Assumes --enable-programmer-mode [default=no].]), - [CI_MODE=$enableval], - [CI_MODE=no]) - - AC_SUBST([CI_MODE]) -]) diff --git a/sh/templates/rename/basic-channel.scm.in b/sh/templates/rename/basic-channel.scm.in deleted file mode 100644 index 024d085..0000000 --- a/sh/templates/rename/basic-channel.scm.in +++ /dev/null @@ -1,72 +0,0 @@ -(define-module (xyz euandreh @PACKAGE@ channel) - #:use-module ((guix licenses) #:prefix license:) - #:use-module (guix transformations) - #:use-module (guix gexp) - #:use-module (guix packages) - #:use-module (guix download) - #:use-module (guix git-download) - #:use-module (guix utils) - #:use-module (guix build-system gnu) - #:use-module (gnu packages) - #:use-module (gnu packages autotools) - #:use-module (gnu packages gnupg) - #:use-module (gnu packages guile) - #:use-module (gnu packages guile-xyz) - #:use-module (gnu packages mail) - #:use-module (gnu packages pkg-config) - #:use-module (gnu packages texinfo)) - -(define-public @PACKAGE@ - (package - (name "@PACKAGE@") - (version (car - (string-split (substring "@VERSION@" 1) - #\-))) - (source (origin - (method url-fetch) - (file-name (string-append name "-" version ".tar.gz")) - ;; URI available via: - ;; $ git fetch origin refs/notes/tarballs - ;; $ printf '@PACKAGE_GIT_URL@blob?id=%s' $(git notes --ref=refs/notes/tarballs list @VERSION@) - (uri "@PACKAGE_GIT_URL@blob?id=b6a3b84537adb5cdeccb43bd9e00956f8b55d359") - (sha256 - (base32 "1mraz2d85hgalkdml92x78br31rlbz298r8hf75fcsdlrf7n3d0p")))) - (build-system gnu-build-system) - (inputs - `()) - (native-inputs - `(("pkg-config" ,pkg-config))) - (synopsis "@PACKAGE_DESCRIPTION@") - (description "@PACKAGE_LONG_DESCRIPTION@") - (home-page "@PACKAGE_URL@") - (license license:agpl3+))) - -(define @PACKAGE@-master - (let ((@PACKAGE@-from-master - ((options->transformation - '((with-git-url . "@PACKAGE@=@PACKAGE_CHANNEL_URL@"))) - @PACKAGE@))) - (package - (inherit @PACKAGE@-from-master) - (name "@PACKAGE@-master") - (native-inputs - (append - (package-native-inputs @PACKAGE@) - `(("autoconf" ,autoconf) - ("automake" ,automake) - ("texinfo" ,texinfo))))))) - -(define repository-root - (canonicalize-path - (string-append (current-source-directory) - "/../../../../.."))) - -(define @PACKAGE@-dev - (package - (inherit @PACKAGE@-master) - (source (local-file repository-root - #:recursive? #t - #:select? (git-predicate repository-root))))) - -@PACKAGE@-dev -@PACKAGE@-master -- cgit v1.2.3 From 8d5ac13b7c40892edd7616cdb4063deeaa35dad2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 28 Jan 2021 13:22:24 -0300 Subject: Remove generation of index.html file --- Makefile | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Makefile b/Makefile index ed32b4a..b9521b3 100644 --- a/Makefile +++ b/Makefile @@ -8,7 +8,5 @@ check: clean: rm -rf public/ -.PHONY: public public: - sh scripts/generate-tasks-and-bugs.sh - pandoc -s --metadata title='dotfiles - EuAndreh' -c styles.css -o public/index.html README.md + mkdir -p public -- cgit v1.2.3 From efa4e14a6a49aa0b56733a91fbddb94ea567c3da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 29 Jan 2021 22:54:21 -0300 Subject: fake-symlinks: Remove most superfluous aux/automake/ files --- sh/fake-symlinks.sh | 16 ++--- sh/templates/aux/automake/default-extra-dist.am | 6 -- sh/templates/aux/automake/dev-checks.am | 17 ----- sh/templates/aux/automake/git-notes-release.am | 7 -- sh/templates/aux/automake/git-notes-release.sh | 77 ---------------------- .../aux/automake/html-files-from-sources.am | 23 ------- sh/templates/aux/automake/rust.am | 9 --- sh/templates/aux/workflow/git-notes-release.sh | 77 ++++++++++++++++++++++ 8 files changed, 82 insertions(+), 150 deletions(-) delete mode 100644 sh/templates/aux/automake/default-extra-dist.am delete mode 100644 sh/templates/aux/automake/dev-checks.am delete mode 100644 sh/templates/aux/automake/git-notes-release.am delete mode 100644 sh/templates/aux/automake/git-notes-release.sh delete mode 100644 sh/templates/aux/automake/html-files-from-sources.am delete mode 100644 sh/templates/aux/automake/rust.am create mode 100644 sh/templates/aux/workflow/git-notes-release.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index d908543..717b3c6 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -172,16 +172,10 @@ ln_init() { ln_autotools() { chmod +w "$PREFIX/INSTALL" 2> /dev/null ||: - cp_all AUTHORS \ - bootstrap \ - ChangeLog \ - aux/automake/dev-checks.am \ - aux/automake/default-extra-dist.am \ - aux/automake/html-files-from-sources.am \ - aux/m4/programmer-mode.m4 - - # dev-cheks.am: test maintainer mode - # https://www.gnu.org/software/automake/manual/html_node/maintainer_002dmode.html + cp_all AUTHORS \ + bootstrap \ + ChangeLog + cp_if_not description # assumes: @@ -240,7 +234,7 @@ ln_ci() { } ln_git_notes_release() { - cp_all aux/automake/git-notes-release.am aux/automake/git-notes-release.sh + cp_all aux/workflow/git-notes-release.sh cp_if_not NEWS } diff --git a/sh/templates/aux/automake/default-extra-dist.am b/sh/templates/aux/automake/default-extra-dist.am deleted file mode 100644 index c3f1242..0000000 --- a/sh/templates/aux/automake/default-extra-dist.am +++ /dev/null @@ -1,6 +0,0 @@ -EXTRA_DIST = \ - build-aux/guix/manifest.scm \ - build-aux/guix/pinned-channels.scm \ - build-aux/guix/with-container.sh \ - description \ - $(TESTS) diff --git a/sh/templates/aux/automake/dev-checks.am b/sh/templates/aux/automake/dev-checks.am deleted file mode 100644 index ca1b9d8..0000000 --- a/sh/templates/aux/automake/dev-checks.am +++ /dev/null @@ -1,17 +0,0 @@ -.PHONY: check-local-dev-checks -check-local-dev-checks: - if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ - echo 'Running PROGRAMMER_MODE checks.'; \ - $(srcdir)/build-aux/assert-shellcheck.sh || exit 1; \ - $(srcdir)/build-aux/assert-todos.sh || exit 1; \ - if [ "x$(CI_MODE)" = 'xno' ]; then \ - echo 'Running CI_MODE checks.'; \ - $(GUIX) build -f guix/channel/xyz/euandreh/$(PACKAGE)/channel.scm || exit 1; \ - else \ - echo 'Skipping CI_MODE checks.'; \ - fi \ - else \ - echo 'Skipping PROGRAMMER_MODE checks.'; \ - fi - -check-local: check-local-dev-checks diff --git a/sh/templates/aux/automake/git-notes-release.am b/sh/templates/aux/automake/git-notes-release.am deleted file mode 100644 index 0d91e88..0000000 --- a/sh/templates/aux/automake/git-notes-release.am +++ /dev/null @@ -1,7 +0,0 @@ -.PHONY: release -release: check distcheck dist - $(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) - -.PHONY: release-with-binaries -release-with-binaries: - $(srcdir)/build-aux/git-notes-release.sh $(DIST_ARCHIVES) $(VERSION) $(PACKAGE) --bin diff --git a/sh/templates/aux/automake/git-notes-release.sh b/sh/templates/aux/automake/git-notes-release.sh deleted file mode 100644 index 4d55645..0000000 --- a/sh/templates/aux/automake/git-notes-release.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -set -eux - -DIST_ARCHIVES="$1" -VERSION="$2" -PACKAGE="$3" -BIN="${4:-}" - -if [ "$BIN" != --bin ]; then - # Assert version - if git rev-parse "$VERSION" > /dev/null; then - echo "Tar $VERSION already exists, exitting." - exit 2 - fi - - # Update NEWS - sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS - cat < $DIST_ARCHIVES - git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc -EOF -) - git notes append -m "$NOTE" - sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - ./configure --enable-programmer-mode - git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - git commit -m "Update released version $VERSION in channel.scm.in file." - - # Publish release artifacts - git push --tags - git push origin refs/notes/tarballs - git push origin refs/notes/signatures - git push origin refs/notes/commits - git push -else - guix pull - BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")" - SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")" - git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION" - NOTE=$(cat < $PACKAGE-bin.tar.gz - tar xf $PACKAGE-bin.tar.gz - bin/$PACKAGE -EOF -) - git notes append -m "$NOTE" - git push origin refs/notes/binaries - git push origin refs/notes/commits -fi diff --git a/sh/templates/aux/automake/html-files-from-sources.am b/sh/templates/aux/automake/html-files-from-sources.am deleted file mode 100644 index db073f3..0000000 --- a/sh/templates/aux/automake/html-files-from-sources.am +++ /dev/null @@ -1,23 +0,0 @@ -.PHONY: clean-local-html-files-from-sources -clean-local-html-files-from-sources: - rm -rf public/ OEBPS META-INF/ doc/$(PACKAGE).xml mimetype - -clean-local: clean-local-html-files-from-sources - -LANGS = en -DICTIONARIES = doc/dictionaries/en.txt doc/dictionaries/international.txt -doc/dictionaries/all.txt: $(DICTIONARIES) - cat $(DICTIONARIES) | sort > $@ - - cat $(DICTIONARIES) | diff - $@ || { \ - echo 'Dictionary files are not sorted. To fix it, run:'; \ - echo ' for f in $(DICTIONARIES); do LANG=C.UTF-8 sort -o $$f $$f; done'; \ - touch $(DICTIONARIES); \ - exit 1; \ - } - -public: README TODOs.md $(DOC_SRCS) doc/dictionaries/all.txt - $(srcdir)/build-aux/build-web-assets.sh '$(PACKAGE)' $(LANGS) - - $(srcdir)/build-aux/generate-tasks-and-bugs.sh - $(srcdir)/build-aux/compile-readme.sh '$(PACKAGE_NAME)' diff --git a/sh/templates/aux/automake/rust.am b/sh/templates/aux/automake/rust.am deleted file mode 100644 index f8f9b0f..0000000 --- a/sh/templates/aux/automake/rust.am +++ /dev/null @@ -1,9 +0,0 @@ -rustfmt: $(RUST_SRC) - if [ "x$(PROGRAMMER_MODE)" = 'xyes' ]; then \ - for f in $(RUST_SRC); do \ - $(RUSTFMT) --check $$f || { \ - printf "Unformatted Rust code. To fix it, run:\n rustfmt %s\n" $$f; \ - exit 1; \ - }; \ - done; \ - fi diff --git a/sh/templates/aux/workflow/git-notes-release.sh b/sh/templates/aux/workflow/git-notes-release.sh new file mode 100644 index 0000000..4d55645 --- /dev/null +++ b/sh/templates/aux/workflow/git-notes-release.sh @@ -0,0 +1,77 @@ +#!/bin/sh +set -eux + +DIST_ARCHIVES="$1" +VERSION="$2" +PACKAGE="$3" +BIN="${4:-}" + +if [ "$BIN" != --bin ]; then + # Assert version + if git rev-parse "$VERSION" > /dev/null; then + echo "Tar $VERSION already exists, exitting." + exit 2 + fi + + # Update NEWS + sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS + cat < $DIST_ARCHIVES + git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc +EOF +) + git notes append -m "$NOTE" + sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" + sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" + ./configure --enable-programmer-mode + git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" + git commit -m "Update released version $VERSION in channel.scm.in file." + + # Publish release artifacts + git push --tags + git push origin refs/notes/tarballs + git push origin refs/notes/signatures + git push origin refs/notes/commits + git push +else + guix pull + BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")" + SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")" + git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION" + NOTE=$(cat < $PACKAGE-bin.tar.gz + tar xf $PACKAGE-bin.tar.gz + bin/$PACKAGE +EOF +) + git notes append -m "$NOTE" + git push origin refs/notes/binaries + git push origin refs/notes/commits +fi -- cgit v1.2.3 From e2b5e7955f265bd6b48807fd4f8eb7b3f8b95b6a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 29 Jan 2021 22:55:30 -0300 Subject: fake-symlinks: workflow: Allow optional filename argument --- sh/fake-symlinks.sh | 4 ++-- sh/templates/aux/workflow/CHANGELOG.sh | 3 ++- sh/templates/aux/workflow/README.sh | 3 ++- 3 files changed, 6 insertions(+), 4 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 717b3c6..4002963 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -147,13 +147,13 @@ ln_env() { ENABLE_OVERWRITE_PINNED_CHANNELS= fi - if [ -f "$PREFIX/README.md" ]; then + if [ -f "$PREFIX/README.md" ] || [ -f "$PREFIX/README" ]; then ENABLE_README_SH=1 else ENABLE_README_SH= fi - if [ -f "$PREFIX/CHANGELOG.md" ]; then + if [ -f "$PREFIX/CHANGELOG.md" ] || [ -f "$PREFIX/ChangeLog" ]; then ENABLE_CHANGELOG_SH=1 else ENABLE_CHANGELOG_SH= diff --git a/sh/templates/aux/workflow/CHANGELOG.sh b/sh/templates/aux/workflow/CHANGELOG.sh index 829cf5f..371a67b 100755 --- a/sh/templates/aux/workflow/CHANGELOG.sh +++ b/sh/templates/aux/workflow/CHANGELOG.sh @@ -4,6 +4,7 @@ set -eu mkdir -p public PROJECT_UC="$1" +CHANGELOG="${2:-CHANGELOG.md}" pandoc --toc \ --highlight-style pygments \ @@ -13,4 +14,4 @@ pandoc --toc \ --metadata lang=en \ -r markdown \ -w html \ - < CHANGELOG.md > public/CHANGELOG.html + < "$CHANGELOG" > public/CHANGELOG.html diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh index 49b1e8d..f9e7f52 100755 --- a/sh/templates/aux/workflow/README.sh +++ b/sh/templates/aux/workflow/README.sh @@ -5,6 +5,7 @@ mkdir -p public PROJECT_UC="$1" PROJECT="$2" +README="${3:-README.md}" RELEASES_LIST="$(mktemp)" for version in $(git tag); do @@ -17,7 +18,7 @@ if [ -s "$RELEASES_LIST" ]; then cat "$RELEASES_LIST" >> "$RELEASES" fi -cat README.md "$RELEASES" | \ +cat "$README" "$RELEASES" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ -- cgit v1.2.3 From 3d9b5d267196af03f521512ea9d0164914b34a66 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 29 Jan 2021 22:56:08 -0300 Subject: fake-symlinks: Remove README.in --- sh/fake-symlinks.sh | 2 +- sh/templates/README.in | 40 ---------------------------------------- 2 files changed, 1 insertion(+), 41 deletions(-) delete mode 100644 sh/templates/README.in diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 4002963..6f83341 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -182,7 +182,7 @@ ln_autotools() { # - ln_workflow for .gitignore # - ln_git_notes_release for Makefile.am # - ln_guix_files for Makefile.am - envsubst_if_not ..gitignore README.in + envsubst_if_not ..gitignore sed_if_not configure.ac Makefile.am } diff --git a/sh/templates/README.in b/sh/templates/README.in deleted file mode 100644 index cfb24bc..0000000 --- a/sh/templates/README.in +++ /dev/null @@ -1,40 +0,0 @@ -# @PACKAGE_NAME@ - -@PACKAGE_DESCRIPTION@ - -## Installation - -### Requirements - -pkg-config -AC_CHECK_PROG and AM_MISSING in configure.ac - -### Guix channel - -@PACKAGE_NAME@ is also available through a Guix channel. - -To add this channel to your `~/.config/guix/channels.scm`: - -```scheme -(append - (list - (channel ...) - (channel - (name '@PACKAGE@) - (url "@PACKAGE_CHANNEL_URL@") - (branch "master") - (introduction - (make-channel-introduction - "26b772cdb5074e93d3112c807ffd4c76f16f039c" - (openpgp-fingerprint - "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060"))))) - %default-channels) -``` - -## Hacking - -See the manual for useful hacking information, either by running - - info -f doc/@PACKAGE@.info "Contributing" - -or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html \ No newline at end of file -- cgit v1.2.3 From fdf869bff20bb7436b4af1b14c83f0c2160c7ab7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 29 Jan 2021 22:57:18 -0300 Subject: fake-symlinks: Remove programmer-mode --- aux/ci/ci-build.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 +- sh/templates/aux/m4/programmer-mode.m4 | 17 ----------------- 3 files changed, 2 insertions(+), 19 deletions(-) delete mode 100644 sh/templates/aux/m4/programmer-mode.m4 diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index c891d3b..bff1216 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -42,7 +42,7 @@ EOF fi if [ -f ./bootstrap ]; then - COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + COMMAND='./bootstrap && ./configure && make clean all check distcheck public' else COMMAND='make clean check public' fi diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index c891d3b..bff1216 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -42,7 +42,7 @@ EOF fi if [ -f ./bootstrap ]; then - COMMAND='./bootstrap && ./configure --enable-programmer-mode --enable-ci-mode && make clean all check distcheck public' + COMMAND='./bootstrap && ./configure && make clean all check distcheck public' else COMMAND='make clean check public' fi diff --git a/sh/templates/aux/m4/programmer-mode.m4 b/sh/templates/aux/m4/programmer-mode.m4 deleted file mode 100644 index 876b878..0000000 --- a/sh/templates/aux/m4/programmer-mode.m4 +++ /dev/null @@ -1,17 +0,0 @@ -AC_DEFUN([EU_PROGRAMMER_MODE], [ - AC_ARG_ENABLE([programmer-mode], - AS_HELP_STRING([--enable-programmer-mode], - [Enables all opt-in configure flags, and requires a full development environment [default=no]. Similar to --enable-maintainer-mode, without changing dependency tracking.]), - [PROGRAMMER_MODE=$enableval], - [PROGRAMMER_MODE=no]) - - AC_SUBST([PROGRAMMER_MODE]) - - AC_ARG_ENABLE([ci-mode], - AS_HELP_STRING([--enable-ci-mode], - [Enables CI-specific flag. Assumes --enable-programmer-mode [default=no].]), - [CI_MODE=$enableval], - [CI_MODE=no]) - - AC_SUBST([CI_MODE]) -]) -- cgit v1.2.3 From 7b426026e169582ac8ba08f2cd800e05f9e9e087 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 29 Jan 2021 22:57:36 -0300 Subject: fake-symlinks: Add assert-rustfmt.sh --- sh/fake-symlinks.sh | 2 +- sh/templates/aux/assert-rustfmt.sh | 11 +++++++++++ 2 files changed, 12 insertions(+), 1 deletion(-) create mode 100755 sh/templates/aux/assert-rustfmt.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 6f83341..1fb0157 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -275,7 +275,7 @@ ln_base_autotools_guix_project() { fi if [ -n "$ENABLE_RUST" ]; then - cp_all aux/automake/rust.am + cp_all aux/assert-rustfmt.sh fi } diff --git a/sh/templates/aux/assert-rustfmt.sh b/sh/templates/aux/assert-rustfmt.sh new file mode 100755 index 0000000..befe6e5 --- /dev/null +++ b/sh/templates/aux/assert-rustfmt.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eux + +# shellcheck disable=2016 +find . -type f -name '*.rs' -print0 | xargs -0 -I{} sh -c ' + rustfmt --check "$1" || { + echo "Unformatted Rust code. To fix it, run:" + echo " rustfmt \"$1\"" + exit 1 + } +' _ {} \; -- cgit v1.2.3 From 53e48fd57e279acf9b434f3e91e30078de6c5a65 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 01:32:14 -0300 Subject: cron: WIP use GPG for SSH authentication on scripts --- cron/annex.sh | 2 +- cron/backup.sh | 2 +- cron/copy-box-backups.sh | 2 +- cron/gpg-cron-setup.sh | 7 +++++++ cron/mr-remotes-backup.sh | 2 +- cron/repo-update.sh | 2 +- 6 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 cron/gpg-cron-setup.sh diff --git a/cron/annex.sh b/cron/annex.sh index f1ebb2c..6443a05 100755 --- a/cron/annex.sh +++ b/cron/annex.sh @@ -9,7 +9,7 @@ AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" export AWS_ACCESS_KEY_ID export AWS_SECRET_ACCESS_KEY # shellcheck source=/dev/null -. "${HOME}/.ssh/environment" +. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" cd ~/annex/ git annex sync diff --git a/cron/backup.sh b/cron/backup.sh index 7976df3..7f53c12 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -2,7 +2,7 @@ set -eux # shellcheck source=/dev/null -. "${HOME}/.ssh/environment" > /dev/null +. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" export BORG_PASSPHRASE R='16686@ch-s010.rsync.net' diff --git a/cron/copy-box-backups.sh b/cron/copy-box-backups.sh index 104337c..7557916 100755 --- a/cron/copy-box-backups.sh +++ b/cron/copy-box-backups.sh @@ -2,7 +2,7 @@ set -eux # shellcheck source=/dev/null -. "${HOME}/.ssh/environment" > /dev/null +. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" R='16686@ch-s010.rsync.net' ssh euandre.org rsync -avzP --delete-after /home/user-data/backup/ "$R:box-duplicity/" diff --git a/cron/gpg-cron-setup.sh b/cron/gpg-cron-setup.sh new file mode 100644 index 0000000..85e2400 --- /dev/null +++ b/cron/gpg-cron-setup.sh @@ -0,0 +1,7 @@ +#!/bin/sh + +unset SSH_AGENT_PID +if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then + SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" + export SSH_AUTH_SOCK +fi diff --git a/cron/mr-remotes-backup.sh b/cron/mr-remotes-backup.sh index c483f52..272bd97 100755 --- a/cron/mr-remotes-backup.sh +++ b/cron/mr-remotes-backup.sh @@ -2,7 +2,7 @@ set -eux # shellcheck source=/dev/null -. "${HOME}/.ssh/environment" +. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" cd ~/dev/libre/ mr -s push rsyncnet mr -s push gitlab diff --git a/cron/repo-update.sh b/cron/repo-update.sh index cae3eeb..10f79b1 100755 --- a/cron/repo-update.sh +++ b/cron/repo-update.sh @@ -2,6 +2,6 @@ set -eu # shellcheck source=/dev/null -. "${HOME}/.ssh/environment" +. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" cd "${HOME}" mr -s safeupdate -- cgit v1.2.3 From 0b12ddbfaaf53ee3bbc0f4fe686f460b86996c45 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 09:42:02 -0300 Subject: yt: Use videq over vlc --- scripts/yt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/yt b/scripts/yt index 7115d1b..ba7feb2 100755 --- a/scripts/yt +++ b/scripts/yt @@ -76,5 +76,5 @@ else fi for f in $FILES; do - vlc "$f" + videq "$f" done -- cgit v1.2.3 From 521dc09a37bd0692bc02a715f126b7a49810064b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 09:42:27 -0300 Subject: fake-symlinks.sh: Make boneco and pdfs-da-d-maria Makefile projects --- sh/fake-symlinks.sh | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1fb0157..09819b7 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -394,16 +394,14 @@ ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds guile-clap ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc -ln_all ln_makefile_only_guix_project vps pires remembering website +ln_all ln_makefile_only_guix_project vps pires remembering website boneco pdfs-da-d-maria ln_all ln_description_foreign_project guix parsecc ln_all ln_bare_project parseclj \ - boneco \ brinquedoteca \ casa-do-caminho \ dotfiles \ euandreh-guix-channel \ music \ - pdfs-da-d-maria \ swift2nix \ swift2nix-demo \ cargo2nix \ -- cgit v1.2.3 From f8c1d81ada66d7e3b7973ae1963f2885a8009c32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 09:43:16 -0300 Subject: Makefile: allow assert-nixfmt.sh to fail --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index b9521b3..851a7a0 100644 --- a/Makefile +++ b/Makefile @@ -1,8 +1,8 @@ .PHONY: check check: - sh aux/assert-nixfmt.sh sh aux/assert-shellcheck.sh sh aux/assert-todos.sh + sh aux/assert-nixfmt.sh ||: .PHONY: clean clean: -- cgit v1.2.3 From ac766a3e0dd68d5590fdbc2df7c5d7c825534318 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 09:46:56 -0300 Subject: fake-symlinks.sh: Turn dotfiles into a Makefile project --- .gitignore | 1 + TODOs.md | 11 +++++++++++ aux/guix/manifest.scm | 16 ++++++++++++++++ aux/guix/pinned-channels.scm | 11 +++++++++++ aux/guix/with-container.sh | 4 ++++ aux/workflow/README.sh | 30 ++++++++++++++++++++++++++++++ aux/workflow/TODOs.sh | 23 +++++++++++++++++++++++ aux/workflow/preamble.md | 16 ++++++++++++++++ aux/workflow/style.css | 38 ++++++++++++++++++++++++++++++++++++++ sh/fake-symlinks.sh | 14 ++++++++++---- 10 files changed, 160 insertions(+), 4 deletions(-) create mode 100644 TODOs.md create mode 100644 aux/guix/manifest.scm create mode 100644 aux/guix/pinned-channels.scm create mode 100755 aux/guix/with-container.sh create mode 100755 aux/workflow/README.sh create mode 100755 aux/workflow/TODOs.sh create mode 100644 aux/workflow/preamble.md create mode 100644 aux/workflow/style.css diff --git a/.gitignore b/.gitignore index ba23cb2..21a67be 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +1,2 @@ /cron/generated/ +/aux/workflow/assert-todos.sh diff --git a/TODOs.md b/TODOs.md new file mode 100644 index 0000000..017c0a1 --- /dev/null +++ b/TODOs.md @@ -0,0 +1,11 @@ +# Tasks + +# Bugs + +# Improvements + +# Questions + +# Resources + +# Scratch diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm new file mode 100644 index 0000000..7164e5c --- /dev/null +++ b/aux/guix/manifest.scm @@ -0,0 +1,16 @@ +(specifications->manifest + (map symbol->string + '(bash + coreutils + findutils + diffutils + grep + sed + git + tar + gzip + gawk + make + perl + shellcheck + pandoc))) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm new file mode 100644 index 0000000..67b5a51 --- /dev/null +++ b/aux/guix/pinned-channels.scm @@ -0,0 +1,11 @@ +(list + (channel + (name 'guix) + (url "https://git.savannah.gnu.org/git/guix.git") + (commit + "d265809b782293eb42dd663b4611ca19dd2bf1b3") + (introduction + (make-channel-introduction + "9edb3f66fd807b096b48283debdcddccfea34bad" + (openpgp-fingerprint + "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) diff --git a/aux/guix/with-container.sh b/aux/guix/with-container.sh new file mode 100755 index 0000000..db7b121 --- /dev/null +++ b/aux/guix/with-container.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eux + +guix time-machine -C aux/guix/pinned-channels.scm -- environment --pure -C -m aux/guix/manifest.scm -- sh -c "$@" diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh new file mode 100755 index 0000000..f9e7f52 --- /dev/null +++ b/aux/workflow/README.sh @@ -0,0 +1,30 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +PROJECT="$2" +README="${3:-README.md}" + +RELEASES_LIST="$(mktemp)" +for version in $(git tag); do + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" +done + +RELEASES="$(mktemp)" +if [ -s "$RELEASES_LIST" ]; then + printf '\n# Releases\n\n' >> "$RELEASES" + cat "$RELEASES_LIST" >> "$RELEASES" +fi + +cat "$README" "$RELEASES" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - README" \ + --metadata lang=en \ + -r markdown \ + -w html \ + > public/index.html diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh new file mode 100755 index 0000000..ab45835 --- /dev/null +++ b/aux/workflow/TODOs.sh @@ -0,0 +1,23 @@ +#!/bin/sh +set -eu + +mkdir -p public + +export PROJECT_UC="$1" +export PROJECT="$2" +export MAILING_LIST="$3" + +REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' + +envsubst < aux/workflow/preamble.md | \ + printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ + pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r markdown \ + -w html \ + -H aux/workflow/style.css \ + > public/TODOs.html diff --git a/aux/workflow/preamble.md b/aux/workflow/preamble.md new file mode 100644 index 0000000..c6ae56e --- /dev/null +++ b/aux/workflow/preamble.md @@ -0,0 +1,16 @@ +# About + +TODOs for $PROJECT_UC. + +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). + +Register a new one at +[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) +and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). + +*Você também pode escrever em português*. + +*Vous pouvez aussi écrire en français*. + +*Vi povas ankaŭ skribi esperante*. + diff --git a/aux/workflow/style.css b/aux/workflow/style.css new file mode 100644 index 0000000..ac0144c --- /dev/null +++ b/aux/workflow/style.css @@ -0,0 +1,38 @@ + diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 09819b7..3aec065 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -390,16 +390,22 @@ ln_all() { done } -ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds guile-clap cement songbooks +ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement songbooks ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc -ln_all ln_makefile_only_guix_project vps pires remembering website boneco pdfs-da-d-maria -ln_all ln_description_foreign_project guix parsecc +ln_all ln_description_foreign_project guix +ln_all ln_makefile_only_guix_project vps \ + pires \ + remembering \ + website \ + boneco \ + pdfs-da-d-maria \ + parsecc \ + dotfiles ln_all ln_bare_project parseclj \ brinquedoteca \ casa-do-caminho \ - dotfiles \ euandreh-guix-channel \ music \ swift2nix \ -- cgit v1.2.3 From 6eae1279a9a088753900ece0b37e7b9b701251b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 10:45:27 -0300 Subject: fake-symlinks: aux/ci/: Use /srv over /data path --- aux/ci/git-post-receive.sh | 4 ++-- aux/ci/git-pre-push.sh | 4 ++-- sh/templates/aux/ci/git-post-receive.sh | 4 ++-- sh/templates/aux/ci/git-pre-push.sh | 4 ++-- 4 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aux/ci/git-post-receive.sh b/aux/ci/git-post-receive.sh index 2f6e3c0..b169489 100755 --- a/aux/ci/git-post-receive.sh +++ b/aux/ci/git-post-receive.sh @@ -10,5 +10,5 @@ for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do done PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/data/ci/$PACKAGE/logs" -"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" +LOGS_DIR="/srv/ci/$PACKAGE/logs" +"/srv/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/aux/ci/git-pre-push.sh b/aux/ci/git-pre-push.sh index 30d2850..d90a4b4 100755 --- a/aux/ci/git-pre-push.sh +++ b/aux/ci/git-pre-push.sh @@ -2,8 +2,8 @@ set -eux PACKAGE="$(basename "$PWD")" -LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" +LOGS_DIR="/srv/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" if [ -f description ] diff --git a/sh/templates/aux/ci/git-post-receive.sh b/sh/templates/aux/ci/git-post-receive.sh index 2f6e3c0..b169489 100755 --- a/sh/templates/aux/ci/git-post-receive.sh +++ b/sh/templates/aux/ci/git-post-receive.sh @@ -10,5 +10,5 @@ for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do done PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/data/ci/$PACKAGE/logs" -"/data/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" +LOGS_DIR="/srv/ci/$PACKAGE/logs" +"/srv/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/sh/templates/aux/ci/git-pre-push.sh b/sh/templates/aux/ci/git-pre-push.sh index dd1bbfd..39e1f50 100644 --- a/sh/templates/aux/ci/git-pre-push.sh +++ b/sh/templates/aux/ci/git-pre-push.sh @@ -2,8 +2,8 @@ set -eux PACKAGE="$(basename "$PWD")" -__ENABLE_CI__ LOGS_DIR="/data/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/data/git/$PACKAGE.git" +__ENABLE_CI__ LOGS_DIR="/srv/ci/$PACKAGE/logs" +REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" if [ -f description ] -- cgit v1.2.3 From 3ff50c669b04d0b224f3c7753ff211c62d36fc24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 10:45:57 -0300 Subject: fake-symlinks: Makefile: Update base template --- sh/templates/Makefile | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 3290603..2c2fd2b 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -1,7 +1,7 @@ .PHONY: check check: - sh build-aux/assert-shellcheck.sh - sh build-aux/assert-todos.sh + sh aux/assert-shellcheck.sh + sh aux/workflow/assert-todos.sh .PHONY: clean clean: @@ -10,7 +10,7 @@ clean: NAME_UC = $PROJECT_UC NAME = $PROJECT MAILING_LIST = $MAILING_LIST -.PHONY: public -public: - sh build-aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) - sh build-aux/workflow/README.sh $(NAME_UC) $(NAME) +public: README.md TODOs.md CHANGELOG.md + sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) + sh aux/workflow/README.sh $(NAME_UC) $(NAME) + sh aux/workflow/CHANGELOG.sh $(NAME) -- cgit v1.2.3 From b5fbca87627c88b772ff6564b4d254d3b7025400 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 10:46:11 -0300 Subject: fake-symlinks.sh: Add ln_makefile_only_project --- sh/fake-symlinks.sh | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 3aec065..a0844d5 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -317,13 +317,17 @@ ln_generated_readme() { fi } -ln_makefile_only_guix_project() { +ln_makefile_only_project() { ln_env "$1" ln_agpl - ln_build_aux - ln_guix_files ln_ci ln_simple_makefile + rm -f "$PREFIX/aux/assert-shellcheck.sh" +} + +ln_makefile_only_guix_project() { + ln_makefile_only_project "$1" + ln_guix_files } ln_bare_project() { @@ -395,12 +399,12 @@ ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc ln_all ln_description_foreign_project guix +ln_all ln_makefile_only_project boneco \ + pdfs-da-d-maria ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ website \ - boneco \ - pdfs-da-d-maria \ parsecc \ dotfiles ln_all ln_bare_project parseclj \ -- cgit v1.2.3 From 113dfbaaa589f04c12da4d3aec1b5f38f3fa8224 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 10:58:55 -0300 Subject: configuration.nix: Remove c99 TinyCC alias --- nixos/configuration.nix | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 35f45f1..b97c4ff 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -109,11 +109,6 @@ in { ln -s $out/bin/bmake $out/bin/make ''; }); - tinycc-with-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/tcc $out/bin/c99 - ''; - }); pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { postPatch = '' substituteInPlace ar_io.c --replace 'putenv' '// putenv' @@ -230,7 +225,7 @@ in { gnugrep file ed - tinycc-with-alias + tinycc m4 ## Containers and VMs -- cgit v1.2.3 From fc3f6084f2f91643a9eb40f9dbeca0f0619df9b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 10:59:15 -0300 Subject: fake-symlinks.sh: Move parsecc to makefile_only_project, without Guix --- sh/fake-symlinks.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index a0844d5..57ee434 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -399,13 +399,13 @@ ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc ln_all ln_description_foreign_project guix -ln_all ln_makefile_only_project boneco \ - pdfs-da-d-maria +ln_all ln_makefile_only_project boneco \ + pdfs-da-d-maria \ + parsecc ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ website \ - parsecc \ dotfiles ln_all ln_bare_project parseclj \ brinquedoteca \ -- cgit v1.2.3 From c5aa39dbf6b32e468928d0d85602b04cbbb1cfc5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 11:46:22 -0300 Subject: fake-symlinks.sh: Add apollo-server-demo --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 57ee434..1ac8460 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -398,7 +398,7 @@ ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement song ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc -ln_all ln_description_foreign_project guix +ln_all ln_description_foreign_project guix apollo-server-demo ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ parsecc -- cgit v1.2.3 From 39c755af0d0f0b096d0c50c63039cc3eab153e18 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 11:46:36 -0300 Subject: fake-symlinks.sh: Remove guile-clap --- sh/fake-symlinks.sh | 2 -- 1 file changed, 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1ac8460..4879a14 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -365,7 +365,6 @@ declare -A ML_FOR_PROJECT=( [libedn]=mediator [eq]=mediator [songbooks]=songbooks - [guile-clap]=songbooks [pires]=pires ) @@ -376,7 +375,6 @@ declare -A PREFIX_FOR_PROJECT=( declare -A GUILE_PROJECTS=( [guile-quickcheck]=1 [guile-pds]=1 - [guile-clap]=1 [songbooks]=1 ) -- cgit v1.2.3 From 61ff52083de1053c3027754b096ed3bb99359f94 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 11:47:27 -0300 Subject: fake-symlinks.sh: Add ml-archives --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 4879a14..2670c11 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -396,7 +396,7 @@ ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement song ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc -ln_all ln_description_foreign_project guix apollo-server-demo +ln_all ln_description_foreign_project guix apollo-server-demo ml-archives ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ parsecc -- cgit v1.2.3 From f69659225d4032ecbeb36b2a529bd0a4a06a953b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 30 Jan 2021 19:46:03 -0300 Subject: fake-symlinks.sh: Add aux files for makefile_guix_project s --- sh/fake-symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 2670c11..db88af6 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -328,6 +328,7 @@ ln_makefile_only_project() { ln_makefile_only_guix_project() { ln_makefile_only_project "$1" ln_guix_files + ln_build_aux } ln_bare_project() { -- cgit v1.2.3 From 7bd91c4dd32b2a68f780e529c1481d020bc649d3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 31 Jan 2021 14:42:51 -0300 Subject: fake-symlinks.sh: Add exclude-list for README.sh --- sh/fake-symlinks.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index db88af6..00e8c36 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -147,7 +147,7 @@ ln_env() { ENABLE_OVERWRITE_PINNED_CHANNELS= fi - if [ -f "$PREFIX/README.md" ] || [ -f "$PREFIX/README" ]; then + if { [ -f "$PREFIX/README.md" ] || [ -f "$PREFIX/README" ]; } && [ -z "${NO_README_SH[$PROJECT]}" ]; then ENABLE_README_SH=1 else ENABLE_README_SH= @@ -385,6 +385,10 @@ declare -A RUST_PROJECT=( [x-bindgen]=1 ) +declare -A NO_README_SH=( + [website]=1 +) + ln_all() { LN_FN="$1" shift -- cgit v1.2.3 From 5cf01e9efe0e3e2abe0cb0522ad0d1ba92b7b216 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 31 Jan 2021 20:33:37 -0300 Subject: Revert "configuration.nix: Remove c99 TinyCC alias" This reverts commit 113dfbaaa589f04c12da4d3aec1b5f38f3fa8224. --- nixos/configuration.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b97c4ff..35f45f1 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -109,6 +109,11 @@ in { ln -s $out/bin/bmake $out/bin/make ''; }); + tinycc-with-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/tcc $out/bin/c99 + ''; + }); pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { postPatch = '' substituteInPlace ar_io.c --replace 'putenv' '// putenv' @@ -225,7 +230,7 @@ in { gnugrep file ed - tinycc + tinycc-with-alias m4 ## Containers and VMs -- cgit v1.2.3 From 986f1039601b2a1c0c049185d61172963cf2c726 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Feb 2021 08:22:17 -0300 Subject: fake-symlinks: assert-rustfmt: Remove extra quote from file name --- sh/templates/aux/assert-rustfmt.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/assert-rustfmt.sh b/sh/templates/aux/assert-rustfmt.sh index befe6e5..56c0884 100755 --- a/sh/templates/aux/assert-rustfmt.sh +++ b/sh/templates/aux/assert-rustfmt.sh @@ -5,7 +5,7 @@ set -eux find . -type f -name '*.rs' -print0 | xargs -0 -I{} sh -c ' rustfmt --check "$1" || { echo "Unformatted Rust code. To fix it, run:" - echo " rustfmt \"$1\"" + echo " rustfmt $1" exit 1 } ' _ {} \; -- cgit v1.2.3 From dc2254b5221c7bf00cc1353059f197047b3d48b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Feb 2021 14:22:33 -0300 Subject: fake-symlinks: Add assert-clang-format.sh --- sh/fake-symlinks.sh | 22 ++++++++++++++++++---- sh/templates/aux/assert-clang-format.sh | 10 ++++++++++ 2 files changed, 28 insertions(+), 4 deletions(-) create mode 100755 sh/templates/aux/assert-clang-format.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 00e8c36..5068502 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -140,6 +140,12 @@ ln_env() { ENABLE_RUST= fi + if [ -n "${C_PROJECT[$PROJECT]}" ]; then + ENABLE_C=1 + else + ENABLE_C= + fi + if [ -f "$PREFIX/guix/pinned-channels.scm" ] && [ "$(wc -l < "$PREFIX/guix/pinned-channels.scm")" = 11 ]; then ENABLE_OVERWRITE_PINNED_CHANNELS=1 @@ -273,10 +279,6 @@ ln_base_autotools_guix_project() { if [ -n "$ENABLE_GUILE" ]; then cp_all aux/automake/guile.am aux/m4/guile.m4 fi - - if [ -n "$ENABLE_RUST" ]; then - cp_all aux/assert-rustfmt.sh - fi } ln_texinfo_autotools_guix_project() { @@ -306,6 +308,14 @@ ln_antora_autotools_guix_project() { ln_simple_makefile() { envsubst_if_not Makefile + + if [ -n "$ENABLE_RUST" ]; then + cp_all aux/assert-rustfmt.sh + fi + + if [ -n "$ENABLE_C" ]; then + cp_all aux/assert-clang-format.sh + fi } ln_generated_readme() { @@ -385,6 +395,10 @@ declare -A RUST_PROJECT=( [x-bindgen]=1 ) +declare -A C_PROJECT=( + [remembering]=1 +) + declare -A NO_README_SH=( [website]=1 ) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh new file mode 100755 index 0000000..cabd699 --- /dev/null +++ b/sh/templates/aux/assert-clang-format.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +find . -type f -name '*.c' -print0 | xargs -0 -I{} sh -c ' + clang-format -style=LLVM "$1" | diff - "$1" || { + echo "Unformatted C code. To fix it, run:" + echo " clang-format -style=LLVM $1 | sponge $1" + exit 1 + } +' _ {} \; -- cgit v1.2.3 From aba9cdede0e8006334413eadd28cd49b1d1cc5c0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Feb 2021 14:22:52 -0300 Subject: fake-symlinks.sh: Include 3rd-party-archives repository --- sh/fake-symlinks.sh | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 5068502..9fda1ff 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -415,7 +415,10 @@ ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement song ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator # ln_all ln_scribble_autotools_guix_project ln_all ln_antora_autotools_guix_project byopds spalc -ln_all ln_description_foreign_project guix apollo-server-demo ml-archives +ln_all ln_description_foreign_project guix \ + apollo-server-demo \ + ml-archives \ + 3rd-party-archives ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ parsecc -- cgit v1.2.3 From d5f75e84426aa6b73069140228e5dbec832c87b4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Feb 2021 15:59:03 -0300 Subject: fake-symlinks: assert-clang-format.sh: ShellCheck --- sh/templates/aux/assert-clang-format.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index cabd699..8c3684c 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -1,6 +1,7 @@ #!/bin/sh set -eu +# shellcheck disable=2016 find . -type f -name '*.c' -print0 | xargs -0 -I{} sh -c ' clang-format -style=LLVM "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" -- cgit v1.2.3 From 4ef231c5eaf2c0d51aef0809b81efd23a9ad3229 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 04:32:46 -0300 Subject: fake-symlinks: assert-clang-format.sh: LLVM is already the default style --- sh/templates/aux/assert-clang-format.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index 8c3684c..e57aaa9 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -3,9 +3,9 @@ set -eu # shellcheck disable=2016 find . -type f -name '*.c' -print0 | xargs -0 -I{} sh -c ' - clang-format -style=LLVM "$1" | diff - "$1" || { + clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" - echo " clang-format -style=LLVM $1 | sponge $1" + echo " clang-format $1 | sponge $1" exit 1 } ' _ {} \; -- cgit v1.2.3 From b76403a3628b2d82e9f767cc2020e3c5798e0786 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 05:15:48 -0300 Subject: fake-symlinks.sh: Add ln_init to makefile_only_project() --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 9fda1ff..ecbeea9 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -168,7 +168,7 @@ ln_env() { ln_init() { if ! grep -q "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini; then - red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")" + red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")\n" fi if [ ! -d "$PREFIX" ]; then @@ -329,6 +329,7 @@ ln_generated_readme() { ln_makefile_only_project() { ln_env "$1" + ln_init ln_agpl ln_ci ln_simple_makefile -- cgit v1.2.3 From 805c783a2167312427767fa09836bcd62eb28083 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 05:16:02 -0300 Subject: fake-symlinks.sh: Add gluilo and kongrue --- sh/fake-symlinks.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index ecbeea9..bc34a02 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -427,7 +427,9 @@ ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ website \ - dotfiles + dotfiles \ + gluilo \ + kongrue ln_all ln_bare_project parseclj \ brinquedoteca \ casa-do-caminho \ -- cgit v1.2.3 From cbbae0c3500fd6dbb17d08a8dc00ed61040bc327 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 05:31:14 -0300 Subject: fake-symlinks: GC old projects, replace by new ones --- sh/fake-symlinks.sh | 24 +++++------------------- sh/templates/aux/assert-rustfmt.sh | 11 ----------- 2 files changed, 5 insertions(+), 30 deletions(-) delete mode 100755 sh/templates/aux/assert-rustfmt.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index bc34a02..da690df 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -134,12 +134,6 @@ ln_env() { ENABLE_GUILE= fi - if [ -n "${RUST_PROJECT[$PROJECT]}" ]; then - ENABLE_RUST=1 - else - ENABLE_RUST= - fi - if [ -n "${C_PROJECT[$PROJECT]}" ]; then ENABLE_C=1 else @@ -309,10 +303,6 @@ ln_antora_autotools_guix_project() { ln_simple_makefile() { envsubst_if_not Makefile - if [ -n "$ENABLE_RUST" ]; then - cp_all aux/assert-rustfmt.sh - fi - if [ -n "$ENABLE_C" ]; then cp_all aux/assert-clang-format.sh fi @@ -390,12 +380,6 @@ declare -A GUILE_PROJECTS=( [songbooks]=1 ) -declare -A RUST_PROJECT=( - [spalc]=1 - [libedn]=1 - [x-bindgen]=1 -) - declare -A C_PROJECT=( [remembering]=1 ) @@ -413,9 +397,9 @@ ln_all() { } ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement songbooks -ln_all ln_sphinx_autotools_guix_project libedn x-bindgen eq mediator +ln_all ln_sphinx_autotools_guix_project mediator # ln_all ln_scribble_autotools_guix_project -ln_all ln_antora_autotools_guix_project byopds spalc +ln_all ln_antora_autotools_guix_project byopds ln_all ln_description_foreign_project guix \ apollo-server-demo \ ml-archives \ @@ -429,7 +413,9 @@ ln_all ln_makefile_only_guix_project vps \ website \ dotfiles \ gluilo \ - kongrue + kongrue \ + libedn \ + eq ln_all ln_bare_project parseclj \ brinquedoteca \ casa-do-caminho \ diff --git a/sh/templates/aux/assert-rustfmt.sh b/sh/templates/aux/assert-rustfmt.sh deleted file mode 100755 index 56c0884..0000000 --- a/sh/templates/aux/assert-rustfmt.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -set -eux - -# shellcheck disable=2016 -find . -type f -name '*.rs' -print0 | xargs -0 -I{} sh -c ' - rustfmt --check "$1" || { - echo "Unformatted Rust code. To fix it, run:" - echo " rustfmt $1" - exit 1 - } -' _ {} \; -- cgit v1.2.3 From 3185a5ccecc45ea5b37873346414d0c1898bd37e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:23:06 -0300 Subject: configuration.nix: Add GCC, clang-tools and Valgrind to base system --- nixos/configuration.nix | 3 +++ 1 file changed, 3 insertions(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 35f45f1..c971bdf 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -220,6 +220,9 @@ in { shellcheck mrsh dash + gcc + clang-tools + valgrind ## POSIX bmake-with-alias # gnumake -- cgit v1.2.3 From c53ea5ef87356b68c4c39449862bf52a80c49fcf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:23:24 -0300 Subject: env.sh: Add global $CFLAGS and $CC --- sh/env.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sh/env.sh b/sh/env.sh index 8311356..717134a 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -8,6 +8,8 @@ export BORG_REMOTE_PATH='borg1' export GOPATH="$HOME/dev/go" export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" export RLWRAP_HOME="$HOME/.cache/rlwrap" +export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror' +export CC=gcc # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From ffe54c7caf37065bbc3793ed9aa44c8c742a7d1f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:23:59 -0300 Subject: fake-symlinks: Add src/vendor/ C code --- sh/fake-symlinks.sh | 21 +++++++ sh/templates/aux/assert-clang-format.sh | 2 +- sh/templates/src/vendor/test.c | 11 ++++ sh/templates/src/vendor/test.h | 6 ++ sh/templates/src/vendor/tuple.c | 72 ++++++++++++++++++++++++ sh/templates/src/vendor/tuple.h | 17 ++++++ sh/templates/src/vendor/vector.c | 99 +++++++++++++++++++++++++++++++++ sh/templates/src/vendor/vector.h | 20 +++++++ 8 files changed, 247 insertions(+), 1 deletion(-) create mode 100644 sh/templates/src/vendor/test.c create mode 100644 sh/templates/src/vendor/test.h create mode 100644 sh/templates/src/vendor/tuple.c create mode 100644 sh/templates/src/vendor/tuple.h create mode 100644 sh/templates/src/vendor/vector.c create mode 100644 sh/templates/src/vendor/vector.h diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index da690df..234a561 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -48,6 +48,15 @@ cp_if_not() { done } +cp_if() { + for f in "$@"; do + OUT="$PREFIX/$(normalize_name "$f")" + if [ -f "$OUT" ]; then + cp_all "$f" + fi + done +} + envsubst_all() { for f in "$@"; do OUT="$PREFIX/$(normalize_name "$f")" @@ -305,6 +314,13 @@ ln_simple_makefile() { if [ -n "$ENABLE_C" ]; then cp_all aux/assert-clang-format.sh + + cp_if src/vendor/test.h \ + src/vendor/test.c \ + src/vendor/tuple.h \ + src/vendor/tuple.c \ + src/vendor/vector.h \ + src/vendor/vector.c fi } @@ -365,6 +381,8 @@ declare -A ML_FOR_PROJECT=( [x-bindgen]=mediator [mediator]=mediator [libedn]=mediator + [kongrue]=mediator + [gluilo]=mediator [eq]=mediator [songbooks]=songbooks [pires]=pires @@ -382,6 +400,9 @@ declare -A GUILE_PROJECTS=( declare -A C_PROJECT=( [remembering]=1 + [gluilo]=1 + [kongrue]=1 + [libedn]=1 ) declare -A NO_README_SH=( diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index e57aaa9..3346742 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -2,7 +2,7 @@ set -eu # shellcheck disable=2016 -find . -type f -name '*.c' -print0 | xargs -0 -I{} sh -c ' +find . -type f -name '*.h' -o -name '*.c' -print0 | xargs -0 -I{} sh -c ' clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" echo " clang-format $1 | sponge $1" diff --git a/sh/templates/src/vendor/test.c b/sh/templates/src/vendor/test.c new file mode 100644 index 0000000..bd7697e --- /dev/null +++ b/sh/templates/src/vendor/test.c @@ -0,0 +1,11 @@ +#include "test.h" + +#ifdef TEST +void testing(const char *message) { + fprintf(stderr, "testing: %s...", message); +} + +void test_ok() { + fprintf(stderr, " OK.\n"); +} +#endif diff --git a/sh/templates/src/vendor/test.h b/sh/templates/src/vendor/test.h new file mode 100644 index 0000000..24d0440 --- /dev/null +++ b/sh/templates/src/vendor/test.h @@ -0,0 +1,6 @@ +#ifdef TEST +#include + +void testing(const char *message); +void test_ok(); +#endif diff --git a/sh/templates/src/vendor/tuple.c b/sh/templates/src/vendor/tuple.c new file mode 100644 index 0000000..b395a7f --- /dev/null +++ b/sh/templates/src/vendor/tuple.c @@ -0,0 +1,72 @@ +#include "tuple.h" + +struct Tuple *tuple_new() { + struct Tuple *t = malloc(sizeof(struct Tuple)); + if (!t) { + return NULL; + } + t->first = NULL; + t->second = NULL; + return t; +} + +void tuple_free(struct Tuple *t) { + free(t->first); + free(t->second); + free(t); +} + +#ifdef TEST +void test_tuple() { + { + testing("struct Tuple can hold strings, and they're freed with the tuple"); + struct Tuple *t = tuple_new(); + + char *example1_stack = "first example"; + char *example1_heap = malloc(strlen(example1_stack) + 1); + assert(example1_heap); + strcpy(example1_heap, example1_stack); + char *example2_stack = "second example"; + char *example2_heap = malloc(strlen(example2_stack) + 1); + assert(example2_heap); + strcpy(example2_heap, example2_stack); + + t->first = example1_heap; + t->second = example2_heap; + + assert(strcmp(t->first, example1_stack) == 0); + assert(strcmp(t->second, example2_stack) == 0); + + tuple_free(t); + test_ok(); + } + + { + testing("struct Tuple can hold integers, and they're freed with the tuple"); + struct Tuple *t = tuple_new(); + + int *p1 = malloc(sizeof(int)); + assert(p1); + *p1 = 12; + int *p2 = malloc(sizeof(int)); + assert(p2); + *p2 = 21; + + t->first = p1; + t->second = p2; + + assert(*(int *)t->first = 12); + assert(*(int *)t->second = 21); + + tuple_free(t); + test_ok(); + } + + { + testing("an empty Tuple doesn't leak"); + struct Tuple *t = tuple_new(); + tuple_free(t); + test_ok(); + } +} +#endif diff --git a/sh/templates/src/vendor/tuple.h b/sh/templates/src/vendor/tuple.h new file mode 100644 index 0000000..96700e1 --- /dev/null +++ b/sh/templates/src/vendor/tuple.h @@ -0,0 +1,17 @@ +#include + +struct Tuple { + void *first; + void *second; +}; + +struct Tuple *tuple_new(); +void tuple_free(struct Tuple *t); + +#ifdef TEST +#include +#include +#include "test.h" + +void test_tuple(); +#endif diff --git a/sh/templates/src/vendor/vector.c b/sh/templates/src/vendor/vector.c new file mode 100644 index 0000000..d65400a --- /dev/null +++ b/sh/templates/src/vendor/vector.c @@ -0,0 +1,99 @@ +#include "vector.h" + +const size_t VECTOR_DEFAULT_SIZE = 100; +const size_t VECTOR_GROWTH_MULTIPLIER = 2; + +struct Vector *vector_new() { + struct Vector *v = malloc(sizeof(struct Vector)); + if (!v) { + return NULL; + } + v->values = malloc(VECTOR_DEFAULT_SIZE * sizeof(void *)); + if (!v->values) { + free(v); + return NULL; + } + v->size = VECTOR_DEFAULT_SIZE; + v->count = 0; + return v; +} + +void vector_free(struct Vector *v) { + for (size_t i = 0; i < v->count; i++) { + free(v->values[i]); + } + free(v->values); + free(v); +} + +bool vector_push_back(struct Vector *v, void *value) { + if (v->count == v->size) { + v->size *= VECTOR_GROWTH_MULTIPLIER; + void *new_values = realloc(v->values, v->size * sizeof(void *)); + if (!new_values) { + return false; + } + v->values = new_values; + } + v->values[v->count] = value; + v->count++; + return true; +} + +#ifdef TEST +void test_vector() { + { + testing("struct Vector grows when it reaches its limits"); + struct Vector *v = vector_new(); + assert(v->count == 0); + assert(v->size == VECTOR_DEFAULT_SIZE); + + for (size_t i = 0; i < VECTOR_DEFAULT_SIZE; i++) { + size_t *p = malloc(sizeof(size_t)); + assert(p); + *p = i; + vector_push_back(v, p); + } + assert(v->count == VECTOR_DEFAULT_SIZE); + assert(v->size == VECTOR_DEFAULT_SIZE); + assert(*(size_t *)(v->values[0]) == 0); + + size_t *p = malloc(sizeof(size_t)); + assert(p); + *p = 321; + vector_push_back(v, p); + assert(v->count == VECTOR_DEFAULT_SIZE + 1); + assert(v->size == VECTOR_DEFAULT_SIZE * 2); + assert(*(size_t *)(v->values[VECTOR_DEFAULT_SIZE]) == 321); + + vector_free(v); + test_ok(); + } + +return; + { + testing("struct Vector can hold strings too"); + struct Vector *v = vector_new(); + assert(v->count == 0); + assert(v->size == VECTOR_DEFAULT_SIZE); + + char *s_stack = "a string"; + char *s_heap = malloc(strlen(s_stack) + 1); + assert(s_heap); + strcpy(s_heap, s_stack); + vector_push_back(v, s_heap); + + assert(strcmp((char *)(v->values[0]), s_stack) == 0); + + vector_free(v); + test_ok(); + } + + { + testing("an empty Vector doesn't leak"); + struct Vector *v = vector_new(); + vector_free(v); + test_ok(); + } +} +#endif diff --git a/sh/templates/src/vendor/vector.h b/sh/templates/src/vendor/vector.h new file mode 100644 index 0000000..2aa182c --- /dev/null +++ b/sh/templates/src/vendor/vector.h @@ -0,0 +1,20 @@ +#include +#include + +struct Vector { + void **values; + size_t size; + size_t count; +}; + +struct Vector *vector_new(); +void vector_free(struct Vector *v); +bool vector_push_back(struct Vector *v, void *value); + +#ifdef TEST +#include +#include +#include "test.h" + +void test_vector(); +#endif -- cgit v1.2.3 From 2bfd7251ea4ba77f289fe7132b24d978cb3e8b17 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:25:50 -0300 Subject: fake-symlinks: src/vendor/: clang-format --- sh/templates/src/vendor/test.c | 6 ++--- sh/templates/src/vendor/vector.c | 57 ++++++++++++++++++++-------------------- 2 files changed, 30 insertions(+), 33 deletions(-) diff --git a/sh/templates/src/vendor/test.c b/sh/templates/src/vendor/test.c index bd7697e..e3e812e 100644 --- a/sh/templates/src/vendor/test.c +++ b/sh/templates/src/vendor/test.c @@ -2,10 +2,8 @@ #ifdef TEST void testing(const char *message) { - fprintf(stderr, "testing: %s...", message); + fprintf(stderr, "testing: %s...", message); } -void test_ok() { - fprintf(stderr, " OK.\n"); -} +void test_ok() { fprintf(stderr, " OK.\n"); } #endif diff --git a/sh/templates/src/vendor/vector.c b/sh/templates/src/vendor/vector.c index d65400a..9adcebe 100644 --- a/sh/templates/src/vendor/vector.c +++ b/sh/templates/src/vendor/vector.c @@ -4,40 +4,40 @@ const size_t VECTOR_DEFAULT_SIZE = 100; const size_t VECTOR_GROWTH_MULTIPLIER = 2; struct Vector *vector_new() { - struct Vector *v = malloc(sizeof(struct Vector)); - if (!v) { - return NULL; - } - v->values = malloc(VECTOR_DEFAULT_SIZE * sizeof(void *)); - if (!v->values) { - free(v); - return NULL; - } - v->size = VECTOR_DEFAULT_SIZE; - v->count = 0; - return v; + struct Vector *v = malloc(sizeof(struct Vector)); + if (!v) { + return NULL; + } + v->values = malloc(VECTOR_DEFAULT_SIZE * sizeof(void *)); + if (!v->values) { + free(v); + return NULL; + } + v->size = VECTOR_DEFAULT_SIZE; + v->count = 0; + return v; } void vector_free(struct Vector *v) { - for (size_t i = 0; i < v->count; i++) { - free(v->values[i]); - } - free(v->values); - free(v); + for (size_t i = 0; i < v->count; i++) { + free(v->values[i]); + } + free(v->values); + free(v); } bool vector_push_back(struct Vector *v, void *value) { - if (v->count == v->size) { - v->size *= VECTOR_GROWTH_MULTIPLIER; - void *new_values = realloc(v->values, v->size * sizeof(void *)); - if (!new_values) { - return false; - } - v->values = new_values; - } - v->values[v->count] = value; - v->count++; - return true; + if (v->count == v->size) { + v->size *= VECTOR_GROWTH_MULTIPLIER; + void *new_values = realloc(v->values, v->size * sizeof(void *)); + if (!new_values) { + return false; + } + v->values = new_values; + } + v->values[v->count] = value; + v->count++; + return true; } #ifdef TEST @@ -70,7 +70,6 @@ void test_vector() { test_ok(); } -return; { testing("struct Vector can hold strings too"); struct Vector *v = vector_new(); -- cgit v1.2.3 From d0b4229f80c94cf57583618d011917b1b5ae2029 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:26:10 -0300 Subject: configuration.nix: Remove Bash 5 --- nixos/configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index c971bdf..e646e88 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -153,7 +153,6 @@ in { mktorrent diffoscope bundix - (pkgs.lib.hiPrio bashInteractive_5) bash-completion nix-bash-completions youtube-dl -- cgit v1.2.3 From 6ac0f65d8690ca6c5aae44d2de3a9a3d7917c4cd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:26:47 -0300 Subject: fake-symlinks: assert-clann-format.sh: ShellCheck --- sh/templates/aux/assert-clang-format.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index 3346742..1c9d2a8 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -2,7 +2,7 @@ set -eu # shellcheck disable=2016 -find . -type f -name '*.h' -o -name '*.c' -print0 | xargs -0 -I{} sh -c ' +find . -type f \( -name '*.h' -o -name '*.c' \) -print0 | xargs -0 -I{} sh -c ' clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" echo " clang-format $1 | sponge $1" -- cgit v1.2.3 From d34e6a98004d4a3ebcaae933e28b44344b8b8a59 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:30:03 -0300 Subject: clang-format --- sh/templates/src/vendor/tuple.h | 6 +++--- sh/templates/src/vendor/vector.h | 12 ++++++------ 2 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sh/templates/src/vendor/tuple.h b/sh/templates/src/vendor/tuple.h index 96700e1..0b6dcda 100644 --- a/sh/templates/src/vendor/tuple.h +++ b/sh/templates/src/vendor/tuple.h @@ -1,17 +1,17 @@ #include struct Tuple { - void *first; - void *second; + void *first; + void *second; }; struct Tuple *tuple_new(); void tuple_free(struct Tuple *t); #ifdef TEST +#include "test.h" #include #include -#include "test.h" void test_tuple(); #endif diff --git a/sh/templates/src/vendor/vector.h b/sh/templates/src/vendor/vector.h index 2aa182c..689120e 100644 --- a/sh/templates/src/vendor/vector.h +++ b/sh/templates/src/vendor/vector.h @@ -1,10 +1,10 @@ -#include #include +#include struct Vector { - void **values; - size_t size; - size_t count; + void **values; + size_t size; + size_t count; }; struct Vector *vector_new(); @@ -12,9 +12,9 @@ void vector_free(struct Vector *v); bool vector_push_back(struct Vector *v, void *value); #ifdef TEST -#include -#include #include "test.h" +#include +#include void test_vector(); #endif -- cgit v1.2.3 From 77e0c1b7c4967ece3d16d77d1bd48c8a4719a06a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:30:38 -0300 Subject: Makefile: Add assert-clang-format.sh to check target --- Makefile | 1 + 1 file changed, 1 insertion(+) diff --git a/Makefile b/Makefile index 851a7a0..d4e1536 100644 --- a/Makefile +++ b/Makefile @@ -3,6 +3,7 @@ check: sh aux/assert-shellcheck.sh sh aux/assert-todos.sh sh aux/assert-nixfmt.sh ||: + sh sh/templates/aux/assert-clang-format.sh .PHONY: clean clean: -- cgit v1.2.3 From adf9f105f5568c1a6a8c53cab215927832f5fbc6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:35:26 -0300 Subject: manifest.scm: Add clang for clang-format --- aux/guix/manifest.scm | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm index 7164e5c..938927a 100644 --- a/aux/guix/manifest.scm +++ b/aux/guix/manifest.scm @@ -13,4 +13,5 @@ make perl shellcheck - pandoc))) + pandoc + clang))) -- cgit v1.2.3 From cb0ff3aeb1ffe2468f8465f70df69cf2548ef670 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Feb 2021 15:36:40 -0300 Subject: fake-symlinks: src/vendor/: Remove #ifdef from test.* --- sh/templates/src/vendor/test.c | 2 -- sh/templates/src/vendor/test.h | 2 -- 2 files changed, 4 deletions(-) diff --git a/sh/templates/src/vendor/test.c b/sh/templates/src/vendor/test.c index e3e812e..cb436dc 100644 --- a/sh/templates/src/vendor/test.c +++ b/sh/templates/src/vendor/test.c @@ -1,9 +1,7 @@ #include "test.h" -#ifdef TEST void testing(const char *message) { fprintf(stderr, "testing: %s...", message); } void test_ok() { fprintf(stderr, " OK.\n"); } -#endif diff --git a/sh/templates/src/vendor/test.h b/sh/templates/src/vendor/test.h index 24d0440..7731016 100644 --- a/sh/templates/src/vendor/test.h +++ b/sh/templates/src/vendor/test.h @@ -1,6 +1,4 @@ -#ifdef TEST #include void testing(const char *message); void test_ok(); -#endif -- cgit v1.2.3 From 8a2f68645a04254fa9b9288c8c4a297f688cbd4b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 09:12:44 -0300 Subject: configuration.nix: Add lex alias to flex --- nixos/configuration.nix | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index e646e88..fee19eb 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -109,11 +109,16 @@ in { ln -s $out/bin/bmake $out/bin/make ''; }); - tinycc-with-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { + tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { postInstall = '' ln -s $out/bin/tcc $out/bin/c99 ''; }); + flex-with-posix-alias = pkgs.flex.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/flex $out/bin/lex + ''; + }); pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { postPatch = '' substituteInPlace ar_io.c --replace 'putenv' '// putenv' @@ -228,11 +233,11 @@ in { byacc # bison bc pax-with-good-path - flex + flex-with-posix-alias gnugrep file ed - tinycc-with-alias + tinycc-with-posix-alias m4 ## Containers and VMs -- cgit v1.2.3 From fc5646cfbe91ef7dd88015ee57545821f45b772c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 09:14:19 -0300 Subject: fake-symlinks: src/vendor/: Add #ifndef to header files --- sh/templates/src/vendor/test.h | 5 +++++ sh/templates/src/vendor/tuple.h | 5 +++++ sh/templates/src/vendor/vector.h | 5 +++++ 3 files changed, 15 insertions(+) diff --git a/sh/templates/src/vendor/test.h b/sh/templates/src/vendor/test.h index 7731016..60ea85a 100644 --- a/sh/templates/src/vendor/test.h +++ b/sh/templates/src/vendor/test.h @@ -1,4 +1,9 @@ +#ifndef TEST_H +#define TEST_H + #include void testing(const char *message); void test_ok(); + +#endif diff --git a/sh/templates/src/vendor/tuple.h b/sh/templates/src/vendor/tuple.h index 0b6dcda..f330c2d 100644 --- a/sh/templates/src/vendor/tuple.h +++ b/sh/templates/src/vendor/tuple.h @@ -1,3 +1,6 @@ +#ifndef TUPLE_H +#define TUPLE_H + #include struct Tuple { @@ -15,3 +18,5 @@ void tuple_free(struct Tuple *t); void test_tuple(); #endif + +#endif diff --git a/sh/templates/src/vendor/vector.h b/sh/templates/src/vendor/vector.h index 689120e..08ffc79 100644 --- a/sh/templates/src/vendor/vector.h +++ b/sh/templates/src/vendor/vector.h @@ -1,3 +1,6 @@ +#ifndef VECTOR_H +#define VECTOR_H + #include #include @@ -18,3 +21,5 @@ bool vector_push_back(struct Vector *v, void *value); void test_vector(); #endif + +#endif -- cgit v1.2.3 From e290fdf79613c5700078d181d2a232efcafef09b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 09:14:37 -0300 Subject: fake-symlinks: Add tests/lib.sh --- sh/fake-symlinks.sh | 2 ++ sh/templates/tests/lib.sh | 85 +++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 87 insertions(+) create mode 100755 sh/templates/tests/lib.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 234a561..2a5a95c 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -321,6 +321,8 @@ ln_simple_makefile() { src/vendor/tuple.c \ src/vendor/vector.h \ src/vendor/vector.c + + cp_if tests/lib.sh fi } diff --git a/sh/templates/tests/lib.sh b/sh/templates/tests/lib.sh new file mode 100755 index 0000000..b876bcf --- /dev/null +++ b/sh/templates/tests/lib.sh @@ -0,0 +1,85 @@ +#!/bin/sh + +OUT= +ERR= +STATUS= + +assert_status() { + if [ "$STATUS" != "$1" ]; then + printf '\nERR: Bad status.\n\nexpected: %s\ngot: %s\n' \ + "$1" "$STATUS" >&2 + exit 1 + fi +} + +assert_usage() { + if ! grep -Fq 'Usage' "$1"; then + echo 'Expected to find "Usage" text, it was missing:' >&2 + cat "$1" >&2 + exit 1 + fi +} + +assert_empty_stream() { + if [ -s "$2" ]; then + printf '\nERR: Expected %s (%s) to be empty, but has content:\n%s\n' \ + "$1" "$2" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_empty_stdout() { + assert_empty_stream STDOUT "$OUT" +} + +assert_empty_stderr() { + assert_empty_stream STDERR "$ERR" +} + +assert_stream() { + if [ "$(cat "$2")" != "$3" ]; then + printf '\nERR: Bad %s (%s)\n\nexpected: %s\ngot: %s\n' \ + "$1" "$2" "$3" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_stdout() { + assert_stream STDOUT "$OUT" "$1" +} + +assert_stderr() { + assert_stream STDERR "$ERR" "$1" +} + +assert_grep_stream() { + if ! grep -qE "$3" "$2"; then + printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \ + "$1" "$2" "$3" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_grep_stdout() { + assert_grep_stream STDOUT "$OUT" "$1" +} + +assert_grep_stderr() { + assert_grep_stream STDERR "$ERR" "$1" +} + +uuid() { + # Taken from: + # https://serverfault.com/a/799198 + od -xN20 /dev/urandom | \ + head -1 | \ + awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' +} + +testing() { + printf 'testing: %s...' "$1" >&2 +} + +test_ok() { + printf ' OK.\n' >&2 +} -- cgit v1.2.3 From dcf9c266d43e5a84981bf51e97275aca3072a955 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 09:17:51 -0300 Subject: assert-nixfmt.sh: Only run when nixfmt is available --- Makefile | 2 +- aux/assert-nixfmt.sh | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/Makefile b/Makefile index d4e1536..bd3da54 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,7 @@ check: sh aux/assert-shellcheck.sh sh aux/assert-todos.sh - sh aux/assert-nixfmt.sh ||: + sh aux/assert-nixfmt.sh sh sh/templates/aux/assert-clang-format.sh .PHONY: clean diff --git a/aux/assert-nixfmt.sh b/aux/assert-nixfmt.sh index 19bd0a2..72d4a8a 100755 --- a/aux/assert-nixfmt.sh +++ b/aux/assert-nixfmt.sh @@ -1,6 +1,11 @@ #!/bin/sh set -eux +if ! type nixfmt; then + echo 'Missing nixfmt, skipping test' >&2 + exit 0 +fi + # shellcheck disable=2016 find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' nixfmt < "$1" | diff - "$1" || { -- cgit v1.2.3 From cdb73ee7ffe5a40bdeb37fecf6c3ddb1f806f472 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 12:56:36 -0300 Subject: fake-symlinks: src/vendor/: Add f_alloc --- sh/fake-symlinks.sh | 14 ++++---- sh/templates/src/vendor/f_alloc.c | 71 +++++++++++++++++++++++++++++++++++++++ sh/templates/src/vendor/f_alloc.h | 17 ++++++++++ 3 files changed, 96 insertions(+), 6 deletions(-) create mode 100644 sh/templates/src/vendor/f_alloc.c create mode 100644 sh/templates/src/vendor/f_alloc.h diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 2a5a95c..7cc825c 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -315,12 +315,14 @@ ln_simple_makefile() { if [ -n "$ENABLE_C" ]; then cp_all aux/assert-clang-format.sh - cp_if src/vendor/test.h \ - src/vendor/test.c \ - src/vendor/tuple.h \ - src/vendor/tuple.c \ - src/vendor/vector.h \ - src/vendor/vector.c + cp_if src/vendor/test.h \ + src/vendor/test.c \ + src/vendor/tuple.h \ + src/vendor/tuple.c \ + src/vendor/vector.h \ + src/vendor/vector.c \ + src/vendor/f_alloc.h \ + src/vendor/f_alloc.c cp_if tests/lib.sh fi diff --git a/sh/templates/src/vendor/f_alloc.c b/sh/templates/src/vendor/f_alloc.c new file mode 100644 index 0000000..1e6a775 --- /dev/null +++ b/sh/templates/src/vendor/f_alloc.c @@ -0,0 +1,71 @@ +#include "f_alloc.h" + +static bool should_fail(const char *filename, int line_number, + const char *db_name) { + FILE *f = fopen(db_name, "r+"); + if (!f) { + fprintf(stderr, "Failed to open '%s', exitting.\n", db_name); + exit(1); + } + + int digit_count = 0; + int n = line_number; + while (n != 0) { + digit_count++; + n /= 10; + } + + const char *separator = ":"; + char *expected = + malloc(strlen(filename) + strlen(separator) + digit_count + 1); + if (!expected) { + fprintf(stderr, "Failed to malloc inside should_fail(), exitting.\n"); + exit(1); + } + sprintf(expected, "%s%s%d", filename, separator, line_number); + + char *line = NULL; + size_t len = 0; + while (getline(&line, &len, f) != -1) { + if (!strcmp(line, expected)) { + free(line); + free(expected); + fclose(f); + return false; + } + } + + fprintf(f, "%s\n", expected); + + free(line); + free(expected); + fclose(f); + return true; +} + +void *f_malloc_impl(size_t size, const char *file, int line) { +#ifdef F_ALLOC + if (should_fail(file, line, F_ALLOC)) { + return NULL; + } +#endif + return malloc(size); +} + +void *f_realloc_impl(void *ptr, size_t size, const char *file, int line) { +#ifdef F_ALLOC + if (should_fail(file, line, F_ALLOC)) { + return NULL; + } +#endif + return f_realloc(ptr, size); +} + +void *f_calloc_impl(size_t melem, size_t elsize, const char *file, int line) { +#ifdef F_ALLOC + if (should_fail(file, line, F_ALLOC)) { + return NULL; + } +#endif + return f_calloc(melem, elsize); +} diff --git a/sh/templates/src/vendor/f_alloc.h b/sh/templates/src/vendor/f_alloc.h new file mode 100644 index 0000000..22610ca --- /dev/null +++ b/sh/templates/src/vendor/f_alloc.h @@ -0,0 +1,17 @@ +#ifndef F_ALLOC_H +#define F_ALLOC_H + +#include +#include +#include +#include + +void *f_malloc_impl(size_t size, const char *file, int line); +void *f_realloc_impl(void *ptr, size_t size, const char *file, int line); +void *f_calloc_impl(size_t melem, size_t elsize, const char *file, int line); + +#define f_malloc(size) f_malloc_impl(size, __FILE__, __LINE__) +#define f_realloc(ptr, size) f_realloc_impl(ptr, size, __FILE__, __LINE__) +#define f_calloc(melem, elsize) f_calloc_impl(melem, elsize, __FILE__, __LINE__) + +#endif -- cgit v1.2.3 From 326749c8423b797675f6d22686106eb378707733 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 12:57:13 -0300 Subject: fake-symlinks.sh: Remove ln_generated_readme --- sh/fake-symlinks.sh | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 7cc825c..0b62ae6 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -272,7 +272,6 @@ ln_base_autotools_guix_project() { ln_guix_files ln_git_notes_release ln_autotools - ln_generated_readme ln_agpl ln_ci @@ -328,15 +327,6 @@ ln_simple_makefile() { fi } -ln_generated_readme() { - if [ ! -f "$PREFIX/README" ]; then - cat <(printf "%s\n\n" "$PROJECT_UC") \ - <(fold < "$PREFIX/description") \ - <(printf "\nSee: https://%s.euandreh.xyz\n" "$PROJECT") \ - > "$PREFIX/README" - fi -} - ln_makefile_only_project() { ln_env "$1" ln_init -- cgit v1.2.3 From 36fc5057d40b751e430ac2b09de4dd3726ae2128 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 3 Feb 2021 12:57:33 -0300 Subject: fake-symlinks: assert-clang-format.sh: Use -i in-place option --- sh/templates/aux/assert-clang-format.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index 1c9d2a8..8ec9051 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -5,7 +5,7 @@ set -eu find . -type f \( -name '*.h' -o -name '*.c' \) -print0 | xargs -0 -I{} sh -c ' clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" - echo " clang-format $1 | sponge $1" + echo " clang-format -i $1" exit 1 } ' _ {} \; -- cgit v1.2.3 From 2df23455543526de316393719fb7a4b3e3a58d0f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:47:52 -0300 Subject: fake-symlinks: assert-clang-format.sh: Add --fix-in-place option --- sh/templates/aux/assert-clang-format.sh | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index 8ec9051..c7ee6d7 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -1,11 +1,16 @@ #!/bin/sh set -eu +if [ "${1:-}" = '--fix-in-place' ]; then + find . -type f \( -name '*.h' -o -name '*.c' \) -exec clang-format -i {} \; + exit 0 +fi + # shellcheck disable=2016 find . -type f \( -name '*.h' -o -name '*.c' \) -print0 | xargs -0 -I{} sh -c ' clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" - echo " clang-format -i $1" + echo " ./aux/assert-clang-format.sh --fix-in-place" exit 1 } ' _ {} \; -- cgit v1.2.3 From 2abe8d7b834931096a874135cdf16a4bbb1477a6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:48:29 -0300 Subject: fake-symlinks: ci-build.sh: Add CC=cc make variable Because (right now) Guix doesn't have a c99 compiler utility. --- aux/ci/ci-build.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index bff1216..25c0441 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -44,7 +44,7 @@ EOF if [ -f ./bootstrap ]; then COMMAND='./bootstrap && ./configure && make clean all check distcheck public' else - COMMAND='make clean check public' + COMMAND='make CC=cc clean check public' fi $RUNNER "$COMMAND" diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index bff1216..25c0441 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -44,7 +44,7 @@ EOF if [ -f ./bootstrap ]; then COMMAND='./bootstrap && ./configure && make clean all check distcheck public' else - COMMAND='make clean check public' + COMMAND='make CC=cc clean check public' fi $RUNNER "$COMMAND" -- cgit v1.2.3 From d6e88d577bd4f4700803d054fbedd5908f4ff77f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:49:41 -0300 Subject: fake-symlinks: aux/workflow/: Stick to commonmark --- aux/workflow/README.sh | 2 +- aux/workflow/TODOs.sh | 2 +- sh/templates/aux/workflow/CHANGELOG.sh | 8 ++++---- sh/templates/aux/workflow/README.sh | 2 +- sh/templates/aux/workflow/TODOs.sh | 2 +- 5 files changed, 8 insertions(+), 8 deletions(-) diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh index f9e7f52..b9fa38e 100755 --- a/aux/workflow/README.sh +++ b/aux/workflow/README.sh @@ -25,6 +25,6 @@ cat "$README" "$RELEASES" | \ -s \ --metadata title="$PROJECT_UC - README" \ --metadata lang=en \ - -r markdown \ + -r commonmark \ -w html \ > public/index.html diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh index ab45835..5dbc761 100755 --- a/aux/workflow/TODOs.sh +++ b/aux/workflow/TODOs.sh @@ -17,7 +17,7 @@ envsubst < aux/workflow/preamble.md | \ -s \ --metadata title="$PROJECT_UC - TODOs" \ --metadata lang=en \ - -r markdown \ + -r commonmark \ -w html \ -H aux/workflow/style.css \ > public/TODOs.html diff --git a/sh/templates/aux/workflow/CHANGELOG.sh b/sh/templates/aux/workflow/CHANGELOG.sh index 371a67b..e8b772a 100755 --- a/sh/templates/aux/workflow/CHANGELOG.sh +++ b/sh/templates/aux/workflow/CHANGELOG.sh @@ -6,12 +6,12 @@ mkdir -p public PROJECT_UC="$1" CHANGELOG="${2:-CHANGELOG.md}" -pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ +pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ -s \ --metadata title="$PROJECT_UC - README" \ --metadata lang=en \ - -r markdown \ + -r commonmark \ -w html \ < "$CHANGELOG" > public/CHANGELOG.html diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh index f9e7f52..b9fa38e 100755 --- a/sh/templates/aux/workflow/README.sh +++ b/sh/templates/aux/workflow/README.sh @@ -25,6 +25,6 @@ cat "$README" "$RELEASES" | \ -s \ --metadata title="$PROJECT_UC - README" \ --metadata lang=en \ - -r markdown \ + -r commonmark \ -w html \ > public/index.html diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh index ab45835..5dbc761 100755 --- a/sh/templates/aux/workflow/TODOs.sh +++ b/sh/templates/aux/workflow/TODOs.sh @@ -17,7 +17,7 @@ envsubst < aux/workflow/preamble.md | \ -s \ --metadata title="$PROJECT_UC - TODOs" \ --metadata lang=en \ - -r markdown \ + -r commonmark \ -w html \ -H aux/workflow/style.css \ > public/TODOs.html -- cgit v1.2.3 From 18fc35618d46f20809bc77ff35a7424d4d1f14a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:50:39 -0300 Subject: fake-symlinks: Update src/vendor/ --- sh/templates/src/vendor/f_alloc.c | 25 ++++++++++++++---- sh/templates/src/vendor/f_alloc.h | 4 +++ sh/templates/src/vendor/tuple.c | 50 +++++++++++++++++++++++++----------- sh/templates/src/vendor/tuple.h | 6 +++-- sh/templates/src/vendor/vector.c | 53 +++++++++++++++++++++++++++++++-------- sh/templates/src/vendor/vector.h | 6 ++++- 6 files changed, 112 insertions(+), 32 deletions(-) diff --git a/sh/templates/src/vendor/f_alloc.c b/sh/templates/src/vendor/f_alloc.c index 1e6a775..87a8477 100644 --- a/sh/templates/src/vendor/f_alloc.c +++ b/sh/templates/src/vendor/f_alloc.c @@ -1,7 +1,15 @@ #include "f_alloc.h" +#ifdef F_ALLOC static bool should_fail(const char *filename, int line_number, const char *db_name) { + FILE *t = fopen(db_name, "a"); + fclose(t); + if (!t) { + fprintf(stderr, "Failed to touch '%s', exitting.\n", db_name); + exit(1); + } + FILE *f = fopen(db_name, "r+"); if (!f) { fprintf(stderr, "Failed to open '%s', exitting.\n", db_name); @@ -17,12 +25,12 @@ static bool should_fail(const char *filename, int line_number, const char *separator = ":"; char *expected = - malloc(strlen(filename) + strlen(separator) + digit_count + 1); + malloc(strlen(filename) + strlen(separator) + digit_count + 10); if (!expected) { fprintf(stderr, "Failed to malloc inside should_fail(), exitting.\n"); exit(1); } - sprintf(expected, "%s%s%d", filename, separator, line_number); + sprintf(expected, "%s%s%d\n", filename, separator, line_number); char *line = NULL; size_t len = 0; @@ -35,13 +43,14 @@ static bool should_fail(const char *filename, int line_number, } } - fprintf(f, "%s\n", expected); + fprintf(f, "%s", expected); free(line); free(expected); fclose(f); return true; } +#endif void *f_malloc_impl(size_t size, const char *file, int line) { #ifdef F_ALLOC @@ -49,6 +58,8 @@ void *f_malloc_impl(size_t size, const char *file, int line) { return NULL; } #endif + (void)file; + (void)line; return malloc(size); } @@ -58,7 +69,9 @@ void *f_realloc_impl(void *ptr, size_t size, const char *file, int line) { return NULL; } #endif - return f_realloc(ptr, size); + (void)file; + (void)line; + return realloc(ptr, size); } void *f_calloc_impl(size_t melem, size_t elsize, const char *file, int line) { @@ -67,5 +80,7 @@ void *f_calloc_impl(size_t melem, size_t elsize, const char *file, int line) { return NULL; } #endif - return f_calloc(melem, elsize); + (void)file; + (void)line; + return calloc(melem, elsize); } diff --git a/sh/templates/src/vendor/f_alloc.h b/sh/templates/src/vendor/f_alloc.h index 22610ca..d446cfb 100644 --- a/sh/templates/src/vendor/f_alloc.h +++ b/sh/templates/src/vendor/f_alloc.h @@ -1,3 +1,7 @@ +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809L +#endif + #ifndef F_ALLOC_H #define F_ALLOC_H diff --git a/sh/templates/src/vendor/tuple.c b/sh/templates/src/vendor/tuple.c index b395a7f..01e31a1 100644 --- a/sh/templates/src/vendor/tuple.c +++ b/sh/templates/src/vendor/tuple.c @@ -1,4 +1,6 @@ #include "tuple.h" +#include +#include struct Tuple *tuple_new() { struct Tuple *t = malloc(sizeof(struct Tuple)); @@ -21,21 +23,27 @@ void test_tuple() { { testing("struct Tuple can hold strings, and they're freed with the tuple"); struct Tuple *t = tuple_new(); + if (!t) { + exit(1); + } - char *example1_stack = "first example"; - char *example1_heap = malloc(strlen(example1_stack) + 1); - assert(example1_heap); - strcpy(example1_heap, example1_stack); - char *example2_stack = "second example"; - char *example2_heap = malloc(strlen(example2_stack) + 1); - assert(example2_heap); - strcpy(example2_heap, example2_stack); + char *example1 = strdup("first example"); + if (!example1) { + tuple_free(t); + exit(1); + } + char *example2 = strdup("second example"); + if (!example2) { + free(example1); + tuple_free(t); + exit(1); + } - t->first = example1_heap; - t->second = example2_heap; + t->first = example1; + t->second = example2; - assert(strcmp(t->first, example1_stack) == 0); - assert(strcmp(t->second, example2_stack) == 0); + assert(strcmp(t->first, "first example") == 0); + assert(strcmp(t->second, "second example") == 0); tuple_free(t); test_ok(); @@ -44,12 +52,23 @@ void test_tuple() { { testing("struct Tuple can hold integers, and they're freed with the tuple"); struct Tuple *t = tuple_new(); + if (!t) { + exit(1); + } int *p1 = malloc(sizeof(int)); - assert(p1); + if (!p1) { + tuple_free(t); + exit(1); + } *p1 = 12; + int *p2 = malloc(sizeof(int)); - assert(p2); + if (!p2) { + free(p1); + tuple_free(t); + exit(1); + } *p2 = 21; t->first = p1; @@ -65,6 +84,9 @@ void test_tuple() { { testing("an empty Tuple doesn't leak"); struct Tuple *t = tuple_new(); + if (!t) { + exit(1); + } tuple_free(t); test_ok(); } diff --git a/sh/templates/src/vendor/tuple.h b/sh/templates/src/vendor/tuple.h index f330c2d..63e1f3f 100644 --- a/sh/templates/src/vendor/tuple.h +++ b/sh/templates/src/vendor/tuple.h @@ -1,8 +1,10 @@ +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809L +#endif + #ifndef TUPLE_H #define TUPLE_H -#include - struct Tuple { void *first; void *second; diff --git a/sh/templates/src/vendor/vector.c b/sh/templates/src/vendor/vector.c index 9adcebe..b45fe72 100644 --- a/sh/templates/src/vendor/vector.c +++ b/sh/templates/src/vendor/vector.c @@ -1,4 +1,6 @@ #include "vector.h" +#include +#include const size_t VECTOR_DEFAULT_SIZE = 100; const size_t VECTOR_GROWTH_MULTIPLIER = 2; @@ -45,23 +47,42 @@ void test_vector() { { testing("struct Vector grows when it reaches its limits"); struct Vector *v = vector_new(); + if (!v) { + exit(1); + } assert(v->count == 0); assert(v->size == VECTOR_DEFAULT_SIZE); for (size_t i = 0; i < VECTOR_DEFAULT_SIZE; i++) { size_t *p = malloc(sizeof(size_t)); - assert(p); + if (!p) { + vector_free(v); + exit(1); + } *p = i; - vector_push_back(v, p); + bool ret = vector_push_back(v, p); + if (!ret) { + free(p); + vector_free(v); + exit(1); + } } assert(v->count == VECTOR_DEFAULT_SIZE); assert(v->size == VECTOR_DEFAULT_SIZE); assert(*(size_t *)(v->values[0]) == 0); size_t *p = malloc(sizeof(size_t)); - assert(p); + if (!p) { + vector_free(v); + exit(1); + } *p = 321; - vector_push_back(v, p); + bool ret = vector_push_back(v, p); + if (!ret) { + free(p); + vector_free(v); + exit(1); + } assert(v->count == VECTOR_DEFAULT_SIZE + 1); assert(v->size == VECTOR_DEFAULT_SIZE * 2); assert(*(size_t *)(v->values[VECTOR_DEFAULT_SIZE]) == 321); @@ -73,16 +94,25 @@ void test_vector() { { testing("struct Vector can hold strings too"); struct Vector *v = vector_new(); + if (!v) { + exit(1); + } assert(v->count == 0); assert(v->size == VECTOR_DEFAULT_SIZE); - char *s_stack = "a string"; - char *s_heap = malloc(strlen(s_stack) + 1); - assert(s_heap); - strcpy(s_heap, s_stack); - vector_push_back(v, s_heap); + char *s = strdup("a string"); + if (!s) { + vector_free(v); + exit(1); + } + bool ret = vector_push_back(v, s); + if (!ret) { + free(s); + vector_free(v); + exit(1); + } - assert(strcmp((char *)(v->values[0]), s_stack) == 0); + assert(strcmp((char *)(v->values[0]), "a string") == 0); vector_free(v); test_ok(); @@ -91,6 +121,9 @@ void test_vector() { { testing("an empty Vector doesn't leak"); struct Vector *v = vector_new(); + if (!v) { + exit(1); + } vector_free(v); test_ok(); } diff --git a/sh/templates/src/vendor/vector.h b/sh/templates/src/vendor/vector.h index 08ffc79..3f2d150 100644 --- a/sh/templates/src/vendor/vector.h +++ b/sh/templates/src/vendor/vector.h @@ -1,8 +1,12 @@ +#ifndef _POSIX_C_SOURCE +#define _POSIX_C_SOURCE 200809L +#endif + #ifndef VECTOR_H #define VECTOR_H #include -#include +#include struct Vector { void **values; -- cgit v1.2.3 From 4543fe5aa7fc81897ff0ed15ab71a74039b1cde4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:51:04 -0300 Subject: fake-symlinks: Remove src/vendor/ --- sh/templates/src/vendor/f_alloc.c | 86 --------------------------------------- sh/templates/src/vendor/f_alloc.h | 21 ---------- 2 files changed, 107 deletions(-) delete mode 100644 sh/templates/src/vendor/f_alloc.c delete mode 100644 sh/templates/src/vendor/f_alloc.h diff --git a/sh/templates/src/vendor/f_alloc.c b/sh/templates/src/vendor/f_alloc.c deleted file mode 100644 index 87a8477..0000000 --- a/sh/templates/src/vendor/f_alloc.c +++ /dev/null @@ -1,86 +0,0 @@ -#include "f_alloc.h" - -#ifdef F_ALLOC -static bool should_fail(const char *filename, int line_number, - const char *db_name) { - FILE *t = fopen(db_name, "a"); - fclose(t); - if (!t) { - fprintf(stderr, "Failed to touch '%s', exitting.\n", db_name); - exit(1); - } - - FILE *f = fopen(db_name, "r+"); - if (!f) { - fprintf(stderr, "Failed to open '%s', exitting.\n", db_name); - exit(1); - } - - int digit_count = 0; - int n = line_number; - while (n != 0) { - digit_count++; - n /= 10; - } - - const char *separator = ":"; - char *expected = - malloc(strlen(filename) + strlen(separator) + digit_count + 10); - if (!expected) { - fprintf(stderr, "Failed to malloc inside should_fail(), exitting.\n"); - exit(1); - } - sprintf(expected, "%s%s%d\n", filename, separator, line_number); - - char *line = NULL; - size_t len = 0; - while (getline(&line, &len, f) != -1) { - if (!strcmp(line, expected)) { - free(line); - free(expected); - fclose(f); - return false; - } - } - - fprintf(f, "%s", expected); - - free(line); - free(expected); - fclose(f); - return true; -} -#endif - -void *f_malloc_impl(size_t size, const char *file, int line) { -#ifdef F_ALLOC - if (should_fail(file, line, F_ALLOC)) { - return NULL; - } -#endif - (void)file; - (void)line; - return malloc(size); -} - -void *f_realloc_impl(void *ptr, size_t size, const char *file, int line) { -#ifdef F_ALLOC - if (should_fail(file, line, F_ALLOC)) { - return NULL; - } -#endif - (void)file; - (void)line; - return realloc(ptr, size); -} - -void *f_calloc_impl(size_t melem, size_t elsize, const char *file, int line) { -#ifdef F_ALLOC - if (should_fail(file, line, F_ALLOC)) { - return NULL; - } -#endif - (void)file; - (void)line; - return calloc(melem, elsize); -} diff --git a/sh/templates/src/vendor/f_alloc.h b/sh/templates/src/vendor/f_alloc.h deleted file mode 100644 index d446cfb..0000000 --- a/sh/templates/src/vendor/f_alloc.h +++ /dev/null @@ -1,21 +0,0 @@ -#ifndef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200809L -#endif - -#ifndef F_ALLOC_H -#define F_ALLOC_H - -#include -#include -#include -#include - -void *f_malloc_impl(size_t size, const char *file, int line); -void *f_realloc_impl(void *ptr, size_t size, const char *file, int line); -void *f_calloc_impl(size_t melem, size_t elsize, const char *file, int line); - -#define f_malloc(size) f_malloc_impl(size, __FILE__, __LINE__) -#define f_realloc(ptr, size) f_realloc_impl(ptr, size, __FILE__, __LINE__) -#define f_calloc(melem, elsize) f_calloc_impl(melem, elsize, __FILE__, __LINE__) - -#endif -- cgit v1.2.3 From b4c14f73e47c36bfe818ddb6f25052bd1249461c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:51:43 -0300 Subject: fake-symlinks: Split aux/utils.sh out of tests/lib.sh --- sh/templates/aux/utils.sh | 9 +++++++++ sh/templates/tests/lib.sh | 8 -------- 2 files changed, 9 insertions(+), 8 deletions(-) create mode 100755 sh/templates/aux/utils.sh diff --git a/sh/templates/aux/utils.sh b/sh/templates/aux/utils.sh new file mode 100755 index 0000000..8d93fb5 --- /dev/null +++ b/sh/templates/aux/utils.sh @@ -0,0 +1,9 @@ +#!/bin/sh + +uuid() { + # Taken from: + # https://serverfault.com/a/799198 + od -xN20 /dev/urandom | \ + head -1 | \ + awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' +} diff --git a/sh/templates/tests/lib.sh b/sh/templates/tests/lib.sh index b876bcf..957566e 100755 --- a/sh/templates/tests/lib.sh +++ b/sh/templates/tests/lib.sh @@ -68,14 +68,6 @@ assert_grep_stderr() { assert_grep_stream STDERR "$ERR" "$1" } -uuid() { - # Taken from: - # https://serverfault.com/a/799198 - od -xN20 /dev/urandom | \ - head -1 | \ - awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' -} - testing() { printf 'testing: %s...' "$1" >&2 } -- cgit v1.2.3 From 87a24d453283616ab3d9c9a12011b42ca6f43699 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:53:03 -0300 Subject: fake-symlinks.sh: Add allocfail and remove f_alloc.{h,c} --- sh/fake-symlinks.sh | 29 ++++++++++++++++------------- 1 file changed, 16 insertions(+), 13 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 0b62ae6..d434531 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -312,18 +312,18 @@ ln_simple_makefile() { envsubst_if_not Makefile if [ -n "$ENABLE_C" ]; then - cp_all aux/assert-clang-format.sh - - cp_if src/vendor/test.h \ - src/vendor/test.c \ - src/vendor/tuple.h \ - src/vendor/tuple.c \ - src/vendor/vector.h \ - src/vendor/vector.c \ - src/vendor/f_alloc.h \ - src/vendor/f_alloc.c - - cp_if tests/lib.sh + cp_all aux/assert-clang-format.sh \ + aux/malloc-fail-test.sh + + cp_if src/vendor/test.h \ + src/vendor/test.c \ + src/vendor/tuple.h \ + src/vendor/tuple.c \ + src/vendor/vector.h \ + src/vendor/vector.c + + cp_if tests/lib.sh \ + aux/utils.sh fi } @@ -377,6 +377,7 @@ declare -A ML_FOR_PROJECT=( [libedn]=mediator [kongrue]=mediator [gluilo]=mediator + [allocfail]=mediator [eq]=mediator [songbooks]=songbooks [pires]=pires @@ -397,6 +398,7 @@ declare -A C_PROJECT=( [gluilo]=1 [kongrue]=1 [libedn]=1 + [allocfail]=1 ) declare -A NO_README_SH=( @@ -430,7 +432,8 @@ ln_all ln_makefile_only_guix_project vps \ gluilo \ kongrue \ libedn \ - eq + eq \ + allocfail ln_all ln_bare_project parseclj \ brinquedoteca \ casa-do-caminho \ -- cgit v1.2.3 From 1fb821da8619e81af90e9a522bee3dfaa8278a86 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:53:41 -0300 Subject: fake-symlinks: Add WIP vesion of malloc-fail-test.sh --- sh/templates/aux/malloc-fail-test.sh | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) create mode 100755 sh/templates/aux/malloc-fail-test.sh diff --git a/sh/templates/aux/malloc-fail-test.sh b/sh/templates/aux/malloc-fail-test.sh new file mode 100755 index 0000000..d75fd6c --- /dev/null +++ b/sh/templates/aux/malloc-fail-test.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +BIN="$1" +FLAGS="$2" + +. aux/utils.sh + +# MALLOCFAIL_FILE="malloc-failko" +# export MALLOCFAIL_FILE + +echo valgrind $FLAGS $1 + +exit 0 +while ! valgrind $FLAGS $1; do + echo dbg +done -- cgit v1.2.3 From 85aee5aa51a9eb1266f5976f59c1f52a902ae05a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:54:52 -0300 Subject: reload.sh: Use sh over sourcing files --- sh/reload.sh | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/sh/reload.sh b/sh/reload.sh index d448607..de2c189 100644 --- a/sh/reload.sh +++ b/sh/reload.sh @@ -2,7 +2,7 @@ # shellcheck disable=SC1090 . ~/.bashrc -. "$DOTFILES/sh/x.sh" -. "$DOTFILES/sh/mr-execute.sh" -. "$DOTFILES/sh/fake-symlinks.sh" -. ~/annex/bin/misc/tmuxinator-templates.sh +sh "$DOTFILES/sh/x.sh" +sh "$DOTFILES/sh/mr-execute.sh" +sh "$DOTFILES/sh/fake-symlinks.sh" +sh ~/annex/bin/misc/tmuxinator-templates.sh -- cgit v1.2.3 From 1e3b38ae905e443e8dacc7369436bec3bf16b2b6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 03:56:21 -0300 Subject: fake-symlinks: malloc-fail-test.sh: ShellCheck --- sh/templates/aux/malloc-fail-test.sh | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/sh/templates/aux/malloc-fail-test.sh b/sh/templates/aux/malloc-fail-test.sh index d75fd6c..4319992 100755 --- a/sh/templates/aux/malloc-fail-test.sh +++ b/sh/templates/aux/malloc-fail-test.sh @@ -4,14 +4,17 @@ set -eu BIN="$1" FLAGS="$2" +# shellcheck source=/dev/null . aux/utils.sh # MALLOCFAIL_FILE="malloc-failko" # export MALLOCFAIL_FILE -echo valgrind $FLAGS $1 +# echo valgrind $FLAGS $1 exit 0 -while ! valgrind $FLAGS $1; do + +# shellcheck disable=2086 +while ! valgrind $FLAGS $BIN; do echo dbg done -- cgit v1.2.3 From 165daf551fcedca208a89fdd540591ebd4dc710d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 15:33:48 -0300 Subject: configuration.nix: Add binutils for more POSIX packages --- nixos/configuration.nix | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index fee19eb..ed45fdc 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -229,8 +229,8 @@ in { valgrind ## POSIX - bmake-with-alias # gnumake - byacc # bison + bmake-with-alias + byacc bc pax-with-good-path flex-with-posix-alias @@ -239,6 +239,7 @@ in { ed tinycc-with-posix-alias m4 + llvmPackages.bintools # ar, nm and friends ## Containers and VMs qemu -- cgit v1.2.3 From 08e964a50d50628a3abb21dbfa31faceae185b0f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Feb 2021 15:34:39 -0300 Subject: fake-symlinks.sh: Use pushd/popd to allow sourcing --- sh/fake-symlinks.sh | 4 ++-- sh/reload.sh | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index d434531..51fc79c 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -cd "$DOTFILES/sh/templates/" || exit 1 +pushd "$DOTFILES/sh/templates/" || exit 1 mkdir -p "$DOTFILES/cron/generated/" for job in report-summary annex backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do @@ -444,4 +444,4 @@ ln_all ln_bare_project parseclj \ cargo2nix \ cargo2nix-demo -cd - > /dev/null || exit 1 +popd > /dev/null || exit 1 diff --git a/sh/reload.sh b/sh/reload.sh index de2c189..d448607 100644 --- a/sh/reload.sh +++ b/sh/reload.sh @@ -2,7 +2,7 @@ # shellcheck disable=SC1090 . ~/.bashrc -sh "$DOTFILES/sh/x.sh" -sh "$DOTFILES/sh/mr-execute.sh" -sh "$DOTFILES/sh/fake-symlinks.sh" -sh ~/annex/bin/misc/tmuxinator-templates.sh +. "$DOTFILES/sh/x.sh" +. "$DOTFILES/sh/mr-execute.sh" +. "$DOTFILES/sh/fake-symlinks.sh" +. ~/annex/bin/misc/tmuxinator-templates.sh -- cgit v1.2.3 From 59c13d64860b8ac84446836143aab0a661c230c4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:11:04 -0300 Subject: Use personal overlay over ad-hoc package definitions --- nixos/configuration.nix | 18 ++++++++++++++++-- nixos/not-on-nixpkgs/remembering.nix | 19 ------------------- 2 files changed, 16 insertions(+), 21 deletions(-) delete mode 100644 nixos/not-on-nixpkgs/remembering.nix diff --git a/nixos/configuration.nix b/nixos/configuration.nix index ed45fdc..2bf63a2 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -125,7 +125,6 @@ in { ${({ postPatch = ""; } // oldAttrs).postPatch} ''; }); - remembering = pkgs.callPackage ./not-on-nixpkgs/remembering.nix { }; nu-packages = with pkgs; [ awscli @@ -254,11 +253,14 @@ in { lightdm fvwm # =xpmroot= haskellPackages.xmobar - remembering arandr alsaUtils # for xmonad volume commands yad + ## EuAndreh overlay + xyz-euandreh.remembering + xyz-euandreh.autoqemu + ## GUI programs audacity zbar @@ -284,6 +286,18 @@ in { android_sdk.accept_license = localConfiguration.allowUnfree; allowUnfree = localConfiguration.allowUnfree; }; + overlays = let + version = "main"; + use-local = true; + euandreh-nixpkgs = import (if use-local then + ../../euandreh-package-repository/default.nix + else + fetchTarball { + url = + "https://git.euandreh.xyz/euandreh-package-repository/snapshot/euandreh-package-repository-${version}.tar.gz"; + + }) { inherit pkgs; }; + in [ euandreh-nixpkgs ]; }; # Look at diff --git a/nixos/not-on-nixpkgs/remembering.nix b/nixos/not-on-nixpkgs/remembering.nix deleted file mode 100644 index ef33154..0000000 --- a/nixos/not-on-nixpkgs/remembering.nix +++ /dev/null @@ -1,19 +0,0 @@ -{ stdenv, fetchurl }: - -stdenv.mkDerivation rec { - pname = "remembering"; - version = "0.1.1"; - - src = fetchurl { - url = - "https://git.euandreh.xyz/${pname}/snapshot/${pname}-v${version}.tar.gz"; - sha256 = "1b1fmljnkzrsilbfc61s0lsfvhr9g35msf3b3m3vxfc31rpinpnl"; - }; - makeFlags = [ "PREFIX=$(out)" ]; - - meta = with stdenv.lib; { - description = "Add memory to dmenu, fzf and similar tools."; - homepage = "https://remembering.euandreh.xyz"; - license = licenses.agpl3; - }; -} -- cgit v1.2.3 From e2fc7fcbab06d7b5fd2c06185d486360ad5a48bb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:12:18 -0300 Subject: configuration.nix: Add cloc, lzip, expect and remove ag --- nixos/configuration.nix | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 2bf63a2..5a92a6c 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -207,6 +207,7 @@ in { calcurse pandoc buku # replaces Firefox bookmarks + cloc ## Mail notmuch @@ -232,6 +233,7 @@ in { byacc bc pax-with-good-path + lzip flex-with-posix-alias gnugrep file @@ -242,6 +244,7 @@ in { ## Containers and VMs qemu + expect ## xmonad xorg.xmodmap @@ -271,9 +274,7 @@ in { }) ## Candidates to be replaced by alternatives - emacs # To be replaced by vi + fzf. Also missing: replace TODOs.org in projects - ag # Emacs works better with ag over grep - + emacs # just missing configuring mutt active-quodlibet # cmus + mutagen gpodder-with-youtube-dl # podboat? transmission-gtk # Transmission TUI -- cgit v1.2.3 From 419fb3766173165d438926337efc8f5e5f284376 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:14:31 -0300 Subject: fake-symlinks: Use symlinks for src/vendor files --- sh/templates/src/vendor | 1 + sh/templates/src/vendor/test.c | 7 --- sh/templates/src/vendor/test.h | 9 --- sh/templates/src/vendor/tuple.c | 94 ---------------------------- sh/templates/src/vendor/tuple.h | 24 ------- sh/templates/src/vendor/vector.c | 131 --------------------------------------- sh/templates/src/vendor/vector.h | 29 --------- 7 files changed, 1 insertion(+), 294 deletions(-) create mode 120000 sh/templates/src/vendor delete mode 100644 sh/templates/src/vendor/test.c delete mode 100644 sh/templates/src/vendor/test.h delete mode 100644 sh/templates/src/vendor/tuple.c delete mode 100644 sh/templates/src/vendor/tuple.h delete mode 100644 sh/templates/src/vendor/vector.c delete mode 100644 sh/templates/src/vendor/vector.h diff --git a/sh/templates/src/vendor b/sh/templates/src/vendor new file mode 120000 index 0000000..4ca1d82 --- /dev/null +++ b/sh/templates/src/vendor @@ -0,0 +1 @@ +../../../../sharedc/src \ No newline at end of file diff --git a/sh/templates/src/vendor/test.c b/sh/templates/src/vendor/test.c deleted file mode 100644 index cb436dc..0000000 --- a/sh/templates/src/vendor/test.c +++ /dev/null @@ -1,7 +0,0 @@ -#include "test.h" - -void testing(const char *message) { - fprintf(stderr, "testing: %s...", message); -} - -void test_ok() { fprintf(stderr, " OK.\n"); } diff --git a/sh/templates/src/vendor/test.h b/sh/templates/src/vendor/test.h deleted file mode 100644 index 60ea85a..0000000 --- a/sh/templates/src/vendor/test.h +++ /dev/null @@ -1,9 +0,0 @@ -#ifndef TEST_H -#define TEST_H - -#include - -void testing(const char *message); -void test_ok(); - -#endif diff --git a/sh/templates/src/vendor/tuple.c b/sh/templates/src/vendor/tuple.c deleted file mode 100644 index 01e31a1..0000000 --- a/sh/templates/src/vendor/tuple.c +++ /dev/null @@ -1,94 +0,0 @@ -#include "tuple.h" -#include -#include - -struct Tuple *tuple_new() { - struct Tuple *t = malloc(sizeof(struct Tuple)); - if (!t) { - return NULL; - } - t->first = NULL; - t->second = NULL; - return t; -} - -void tuple_free(struct Tuple *t) { - free(t->first); - free(t->second); - free(t); -} - -#ifdef TEST -void test_tuple() { - { - testing("struct Tuple can hold strings, and they're freed with the tuple"); - struct Tuple *t = tuple_new(); - if (!t) { - exit(1); - } - - char *example1 = strdup("first example"); - if (!example1) { - tuple_free(t); - exit(1); - } - char *example2 = strdup("second example"); - if (!example2) { - free(example1); - tuple_free(t); - exit(1); - } - - t->first = example1; - t->second = example2; - - assert(strcmp(t->first, "first example") == 0); - assert(strcmp(t->second, "second example") == 0); - - tuple_free(t); - test_ok(); - } - - { - testing("struct Tuple can hold integers, and they're freed with the tuple"); - struct Tuple *t = tuple_new(); - if (!t) { - exit(1); - } - - int *p1 = malloc(sizeof(int)); - if (!p1) { - tuple_free(t); - exit(1); - } - *p1 = 12; - - int *p2 = malloc(sizeof(int)); - if (!p2) { - free(p1); - tuple_free(t); - exit(1); - } - *p2 = 21; - - t->first = p1; - t->second = p2; - - assert(*(int *)t->first = 12); - assert(*(int *)t->second = 21); - - tuple_free(t); - test_ok(); - } - - { - testing("an empty Tuple doesn't leak"); - struct Tuple *t = tuple_new(); - if (!t) { - exit(1); - } - tuple_free(t); - test_ok(); - } -} -#endif diff --git a/sh/templates/src/vendor/tuple.h b/sh/templates/src/vendor/tuple.h deleted file mode 100644 index 63e1f3f..0000000 --- a/sh/templates/src/vendor/tuple.h +++ /dev/null @@ -1,24 +0,0 @@ -#ifndef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200809L -#endif - -#ifndef TUPLE_H -#define TUPLE_H - -struct Tuple { - void *first; - void *second; -}; - -struct Tuple *tuple_new(); -void tuple_free(struct Tuple *t); - -#ifdef TEST -#include "test.h" -#include -#include - -void test_tuple(); -#endif - -#endif diff --git a/sh/templates/src/vendor/vector.c b/sh/templates/src/vendor/vector.c deleted file mode 100644 index b45fe72..0000000 --- a/sh/templates/src/vendor/vector.c +++ /dev/null @@ -1,131 +0,0 @@ -#include "vector.h" -#include -#include - -const size_t VECTOR_DEFAULT_SIZE = 100; -const size_t VECTOR_GROWTH_MULTIPLIER = 2; - -struct Vector *vector_new() { - struct Vector *v = malloc(sizeof(struct Vector)); - if (!v) { - return NULL; - } - v->values = malloc(VECTOR_DEFAULT_SIZE * sizeof(void *)); - if (!v->values) { - free(v); - return NULL; - } - v->size = VECTOR_DEFAULT_SIZE; - v->count = 0; - return v; -} - -void vector_free(struct Vector *v) { - for (size_t i = 0; i < v->count; i++) { - free(v->values[i]); - } - free(v->values); - free(v); -} - -bool vector_push_back(struct Vector *v, void *value) { - if (v->count == v->size) { - v->size *= VECTOR_GROWTH_MULTIPLIER; - void *new_values = realloc(v->values, v->size * sizeof(void *)); - if (!new_values) { - return false; - } - v->values = new_values; - } - v->values[v->count] = value; - v->count++; - return true; -} - -#ifdef TEST -void test_vector() { - { - testing("struct Vector grows when it reaches its limits"); - struct Vector *v = vector_new(); - if (!v) { - exit(1); - } - assert(v->count == 0); - assert(v->size == VECTOR_DEFAULT_SIZE); - - for (size_t i = 0; i < VECTOR_DEFAULT_SIZE; i++) { - size_t *p = malloc(sizeof(size_t)); - if (!p) { - vector_free(v); - exit(1); - } - *p = i; - bool ret = vector_push_back(v, p); - if (!ret) { - free(p); - vector_free(v); - exit(1); - } - } - assert(v->count == VECTOR_DEFAULT_SIZE); - assert(v->size == VECTOR_DEFAULT_SIZE); - assert(*(size_t *)(v->values[0]) == 0); - - size_t *p = malloc(sizeof(size_t)); - if (!p) { - vector_free(v); - exit(1); - } - *p = 321; - bool ret = vector_push_back(v, p); - if (!ret) { - free(p); - vector_free(v); - exit(1); - } - assert(v->count == VECTOR_DEFAULT_SIZE + 1); - assert(v->size == VECTOR_DEFAULT_SIZE * 2); - assert(*(size_t *)(v->values[VECTOR_DEFAULT_SIZE]) == 321); - - vector_free(v); - test_ok(); - } - - { - testing("struct Vector can hold strings too"); - struct Vector *v = vector_new(); - if (!v) { - exit(1); - } - assert(v->count == 0); - assert(v->size == VECTOR_DEFAULT_SIZE); - - char *s = strdup("a string"); - if (!s) { - vector_free(v); - exit(1); - } - bool ret = vector_push_back(v, s); - if (!ret) { - free(s); - vector_free(v); - exit(1); - } - - assert(strcmp((char *)(v->values[0]), "a string") == 0); - - vector_free(v); - test_ok(); - } - - { - testing("an empty Vector doesn't leak"); - struct Vector *v = vector_new(); - if (!v) { - exit(1); - } - vector_free(v); - test_ok(); - } -} -#endif diff --git a/sh/templates/src/vendor/vector.h b/sh/templates/src/vendor/vector.h deleted file mode 100644 index 3f2d150..0000000 --- a/sh/templates/src/vendor/vector.h +++ /dev/null @@ -1,29 +0,0 @@ -#ifndef _POSIX_C_SOURCE -#define _POSIX_C_SOURCE 200809L -#endif - -#ifndef VECTOR_H -#define VECTOR_H - -#include -#include - -struct Vector { - void **values; - size_t size; - size_t count; -}; - -struct Vector *vector_new(); -void vector_free(struct Vector *v); -bool vector_push_back(struct Vector *v, void *value); - -#ifdef TEST -#include "test.h" -#include -#include - -void test_vector(); -#endif - -#endif -- cgit v1.2.3 From 3f244a8a1276a735aeeef9e0b3a709bfc212bdda Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:14:57 -0300 Subject: Add base CHANGELOG.md --- sh/templates/CHANGELOG.md | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 sh/templates/CHANGELOG.md diff --git a/sh/templates/CHANGELOG.md b/sh/templates/CHANGELOG.md new file mode 100644 index 0000000..65f247b --- /dev/null +++ b/sh/templates/CHANGELOG.md @@ -0,0 +1,10 @@ + + -- cgit v1.2.3 From 1910de3946476e219f80309ee199d0ba6b0b8e61 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:15:23 -0300 Subject: fake-symlinks: mv aux/workflow/CHANGELOG.sh aux/workflow/commonmark.sh --- sh/templates/aux/workflow/CHANGELOG.sh | 17 ----------------- sh/templates/aux/workflow/commonmark.sh | 17 +++++++++++++++++ 2 files changed, 17 insertions(+), 17 deletions(-) delete mode 100755 sh/templates/aux/workflow/CHANGELOG.sh create mode 100755 sh/templates/aux/workflow/commonmark.sh diff --git a/sh/templates/aux/workflow/CHANGELOG.sh b/sh/templates/aux/workflow/CHANGELOG.sh deleted file mode 100755 index e8b772a..0000000 --- a/sh/templates/aux/workflow/CHANGELOG.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -CHANGELOG="${2:-CHANGELOG.md}" - -pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - README" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - < "$CHANGELOG" > public/CHANGELOG.html diff --git a/sh/templates/aux/workflow/commonmark.sh b/sh/templates/aux/workflow/commonmark.sh new file mode 100755 index 0000000..e9609c2 --- /dev/null +++ b/sh/templates/aux/workflow/commonmark.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +F="$2" + +pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - ${F%.*}" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + < "$F" > "public/${F%.*}.html" -- cgit v1.2.3 From fc2cade0fcade83128fa523b84901d8f4b2b5553 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:15:53 -0300 Subject: fake-symlinks: Update pinned-channels.scm --- sh/templates/aux/guix/pinned-channels.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm index 67b5a51..f8269ff 100644 --- a/sh/templates/aux/guix/pinned-channels.scm +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -3,7 +3,7 @@ (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "d265809b782293eb42dd663b4611ca19dd2bf1b3") + "f2130228ed86fed81806a662ed59aa74ed2398ed") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From d0482dab697a63efc0eb6605d96f0a46d60705b8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:16:34 -0300 Subject: fake-symlinks: ci-build.sh: Stop assuming an Autotools repository --- sh/templates/aux/ci/ci-build.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 25c0441..81ee1fd 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -41,8 +41,8 @@ EOF RUNNER='sh -c' fi - if [ -f ./bootstrap ]; then - COMMAND='./bootstrap && ./configure && make clean all check distcheck public' + if [ -f ./configure ]; then + COMMAND='./configure && make clean check public' else COMMAND='make CC=cc clean check public' fi -- cgit v1.2.3 From 52328eae937845d1ac7a01da6ed67dbd121e362a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:18:24 -0300 Subject: fake-symlinks: manifest.scm: Add gettext by default, used in workflow/ files --- sh/templates/aux/guix/manifest.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/templates/aux/guix/manifest.scm b/sh/templates/aux/guix/manifest.scm index 7164e5c..7b508b6 100644 --- a/sh/templates/aux/guix/manifest.scm +++ b/sh/templates/aux/guix/manifest.scm @@ -13,4 +13,5 @@ make perl shellcheck + gettext pandoc))) -- cgit v1.2.3 From c61bfd4a7dc18c4f587bd50918139ab22aecc8a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:19:02 -0300 Subject: fake-symlinks: with-container.sh: Allow for CLI options --- sh/templates/aux/guix/with-container.sh | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/sh/templates/aux/guix/with-container.sh b/sh/templates/aux/guix/with-container.sh index db7b121..6561b2c 100755 --- a/sh/templates/aux/guix/with-container.sh +++ b/sh/templates/aux/guix/with-container.sh @@ -1,4 +1,14 @@ #!/bin/sh set -eux -guix time-machine -C aux/guix/pinned-channels.scm -- environment --pure -C -m aux/guix/manifest.scm -- sh -c "$@" +if [ -z "${1:-}" ]; then + guix time-machine -C aux/guix/pinned-channels.scm -- \ + environment -m aux/guix/manifest.scm +elif [ "$1" = '-p' ]; then + guix time-machine -C aux/guix/pinned-channels.scm -- \ + environment --pure -C -m aux/guix/manifest.scm +else + guix time-machine -C aux/guix/pinned-channels.scm -- \ + environment --pure -C -m aux/guix/manifest.scm -- \ + sh -c "$@" +fi -- cgit v1.2.3 From ea57fd1e7369cbd315e0dc7aef68adf43fe582d8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:20:28 -0300 Subject: fake-symlinks: Add aux/assert-nixfmt.sh --- sh/fake-symlinks.sh | 2 ++ sh/templates/aux/assert-nixfmt.sh | 11 +++++++++++ 2 files changed, 13 insertions(+) create mode 100755 sh/templates/aux/assert-nixfmt.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 51fc79c..d9dc14d 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -211,6 +211,8 @@ ln_build_aux() { fi cp_if_not TODOs.md + + cp_if aux/assert-nixfmt.sh } ln_agpl() { diff --git a/sh/templates/aux/assert-nixfmt.sh b/sh/templates/aux/assert-nixfmt.sh new file mode 100755 index 0000000..19bd0a2 --- /dev/null +++ b/sh/templates/aux/assert-nixfmt.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eux + +# shellcheck disable=2016 +find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' + nixfmt < "$1" | diff - "$1" || { + echo "The file \"$1\" is unformatted. To fix it, run:" + echo " nixfmt $1" + exit 1 + } +' _ {} \; -- cgit v1.2.3 From 12bb7220a90aef7f3e59c27e3b63015fdfaa49ba Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:21:48 -0300 Subject: fake-symlinks: Add stub aux/assert-perltidy.sh --- sh/fake-symlinks.sh | 3 ++- sh/templates/aux/assert-perltidy.sh | 0 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100755 sh/templates/aux/assert-perltidy.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index d9dc14d..c1d37b3 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -212,7 +212,8 @@ ln_build_aux() { cp_if_not TODOs.md - cp_if aux/assert-nixfmt.sh + cp_if aux/assert-nixfmt.sh \ + aux/assert-perltidy.sh } ln_agpl() { diff --git a/sh/templates/aux/assert-perltidy.sh b/sh/templates/aux/assert-perltidy.sh new file mode 100755 index 0000000..e69de29 -- cgit v1.2.3 From cfa02f442875918f20ed31209f17ab453c79f297 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:24:07 -0300 Subject: Update files under aux/ --- aux/assert-nixfmt.sh | 16 ---------------- aux/ci/ci-build.sh | 4 ++-- aux/guix/manifest.scm | 3 ++- aux/guix/pinned-channels.scm | 2 +- aux/guix/with-container.sh | 12 +++++++++++- 5 files changed, 16 insertions(+), 21 deletions(-) delete mode 100755 aux/assert-nixfmt.sh diff --git a/aux/assert-nixfmt.sh b/aux/assert-nixfmt.sh deleted file mode 100755 index 72d4a8a..0000000 --- a/aux/assert-nixfmt.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -set -eux - -if ! type nixfmt; then - echo 'Missing nixfmt, skipping test' >&2 - exit 0 -fi - -# shellcheck disable=2016 -find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' - nixfmt < "$1" | diff - "$1" || { - echo "The file \"$1\" is unformatted. To fix it, run:" - echo " nixfmt $1" - exit 1 - } -' _ {} \; diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 25c0441..81ee1fd 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -41,8 +41,8 @@ EOF RUNNER='sh -c' fi - if [ -f ./bootstrap ]; then - COMMAND='./bootstrap && ./configure && make clean all check distcheck public' + if [ -f ./configure ]; then + COMMAND='./configure && make clean check public' else COMMAND='make CC=cc clean check public' fi diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm index 938927a..e8c1cd1 100644 --- a/aux/guix/manifest.scm +++ b/aux/guix/manifest.scm @@ -14,4 +14,5 @@ perl shellcheck pandoc - clang))) + clang + nixfmt))) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index 67b5a51..f8269ff 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -3,7 +3,7 @@ (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "d265809b782293eb42dd663b4611ca19dd2bf1b3") + "f2130228ed86fed81806a662ed59aa74ed2398ed") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" diff --git a/aux/guix/with-container.sh b/aux/guix/with-container.sh index db7b121..6561b2c 100755 --- a/aux/guix/with-container.sh +++ b/aux/guix/with-container.sh @@ -1,4 +1,14 @@ #!/bin/sh set -eux -guix time-machine -C aux/guix/pinned-channels.scm -- environment --pure -C -m aux/guix/manifest.scm -- sh -c "$@" +if [ -z "${1:-}" ]; then + guix time-machine -C aux/guix/pinned-channels.scm -- \ + environment -m aux/guix/manifest.scm +elif [ "$1" = '-p' ]; then + guix time-machine -C aux/guix/pinned-channels.scm -- \ + environment --pure -C -m aux/guix/manifest.scm +else + guix time-machine -C aux/guix/pinned-channels.scm -- \ + environment --pure -C -m aux/guix/manifest.scm -- \ + sh -c "$@" +fi -- cgit v1.2.3 From 4203c8f63485ca790054113ebb40d7ec0c6ca382 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:24:24 -0300 Subject: gitconfig.ini: Set default branch to main --- git/gitconfig.ini | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/git/gitconfig.ini b/git/gitconfig.ini index d05ce16..578a013 100644 --- a/git/gitconfig.ini +++ b/git/gitconfig.ini @@ -62,4 +62,6 @@ annotate = yes confirm = never [include] - path = ~/annex/secret/Git/gitconfig.ini \ No newline at end of file + path = ~/annex/secret/Git/gitconfig.ini +[init] + defaultBranch = main -- cgit v1.2.3 From c926265b5fa943035318e588a7e81d6a686eaecc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:27:04 -0300 Subject: fake-symlinks.sh: Fix path to aux/guix/ files --- sh/fake-symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index c1d37b3..2f33c78 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -149,8 +149,8 @@ ln_env() { ENABLE_C= fi - if [ -f "$PREFIX/guix/pinned-channels.scm" ] && - [ "$(wc -l < "$PREFIX/guix/pinned-channels.scm")" = 11 ]; then + if [ -f "$PREFIX/aux/guix/pinned-channels.scm" ] && + [ "$(wc -l < "$PREFIX/aux/guix/pinned-channels.scm")" = 11 ]; then ENABLE_OVERWRITE_PINNED_CHANNELS=1 else ENABLE_OVERWRITE_PINNED_CHANNELS= -- cgit v1.2.3 From a50df66a676897b92d4d609a3e2e0991c8bc8d5a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:27:48 -0300 Subject: fake-symlinks.sh: Update to new files --- sh/fake-symlinks.sh | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 2f33c78..7b629af 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -52,6 +52,7 @@ cp_if() { for f in "$@"; do OUT="$PREFIX/$(normalize_name "$f")" if [ -f "$OUT" ]; then + rm -f "$OUT" cp_all "$f" fi done @@ -162,10 +163,10 @@ ln_env() { ENABLE_README_SH= fi - if [ -f "$PREFIX/CHANGELOG.md" ] || [ -f "$PREFIX/ChangeLog" ]; then - ENABLE_CHANGELOG_SH=1 + if [ -f "$PREFIX/CHANGELOG.md" ]; then + ENABLE_COMMONMARK_SH=1 else - ENABLE_CHANGELOG_SH= + ENABLE_COMMONMARK_SH= fi } @@ -206,8 +207,8 @@ ln_build_aux() { cp_all aux/workflow/README.sh fi - if [ "$ENABLE_CHANGELOG_SH" ]; then - cp_all aux/workflow/CHANGELOG.sh + if [ "$ENABLE_COMMONMARK_SH" ]; then + cp_all aux/workflow/commonmark.sh fi cp_if_not TODOs.md -- cgit v1.2.3 From 34aadc4642fed3d751301c663f414f93e298488f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:28:39 -0300 Subject: sh/util.sh: Add disable_ci() --- sh/util.sh | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/sh/util.sh b/sh/util.sh index 7e4e942..93667b9 100644 --- a/sh/util.sh +++ b/sh/util.sh @@ -48,3 +48,9 @@ gvi() { fi $INIT "$1" | vipe | gpg -qer eu@euandre.org | sponge "$1" } + +disable_ci() { + NAME="$(basename "$PWD")" + rm -f ".git/hooks/$NAME/pre-push" + ssh euandreh.xyz rm -f "/srv/git/$NAME.git/hooks/post-receive" +} -- cgit v1.2.3 From b6ce6f92f8d98ed9bd727e5bf4457dc4830008ec Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:29:29 -0300 Subject: sh/ps1.sh: Update error_marker() to add more exclamation points --- sh/ps1.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sh/ps1.sh b/sh/ps1.sh index 05a5797..0c03070 100644 --- a/sh/ps1.sh +++ b/sh/ps1.sh @@ -1,9 +1,9 @@ #!/bin/sh error_marker() { - # shellcheck disable=2181 - if [ "$?" != 0 ]; then - redb ' (!!) ' + STATUS=$? + if [ "$STATUS" != 0 ]; then + redb " (!! $STATUS !!) " fi } -- cgit v1.2.3 From 8a8848297aa96eecd39676b0ebf3851aedd03185 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:30:27 -0300 Subject: sh/env.sh: Add several UNIX environment variables --- sh/env.sh | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/sh/env.sh b/sh/env.sh index 717134a..75eada3 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -10,6 +10,13 @@ export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" export RLWRAP_HOME="$HOME/.cache/rlwrap" export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror' export CC=gcc +export C_INCLUDE_PATH="$HOME/.local/include" +export LIBRARY_PATH="$HOME/.local/lib" +export PKG_CONFIG_PATH="$HOME/.local/lib/pkgconfig" +export LD_LIBRARY_PATH="$HOME/.local/lib" +if [ -z "${MANPATH:-}" ]; then + export MANPATH="$HOME/.local/share/man:$(manpath)" +fi # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From f8fefbc1a940d7a92da5fb29ba0de12ad22f2876 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:31:18 -0300 Subject: guix/channels.scm: Update path to personal channel, update version of Guix channel --- guix/channels.scm | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/guix/channels.scm b/guix/channels.scm index 2af65fb..d7a4f4d 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -1,12 +1,12 @@ (append (list (channel - (name 'euandreh) - (url "git://git.euandreh.xyz/euandreh-guix-channel") - (branch "master") + (name 'xyz-euandreh) + (url "git://git.euandreh.xyz/euandreh-package-repository") + (branch "main") (introduction (make-channel-introduction - "641f9388002cd874040938ab1c6da7ac9d0e54ca" + "d749e053e6db365069cb9b2ef47a78b06f9e7361" (openpgp-fingerprint "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060"))))) %default-channels) -- cgit v1.2.3 From be724dcfdfa2981cec804acdad61f0dbfe135b45 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:37:20 -0300 Subject: scripts/record-my-screen.sh: Add toggle between audio and video --- scripts/record-my-screen.sh | 36 ++++++++++++++++++++++++++---------- 1 file changed, 26 insertions(+), 10 deletions(-) diff --git a/scripts/record-my-screen.sh b/scripts/record-my-screen.sh index 00c5e53..5ec2d69 100755 --- a/scripts/record-my-screen.sh +++ b/scripts/record-my-screen.sh @@ -5,14 +5,16 @@ usage() { red "Missing argument $1.\n" cat < + record-my-screen.sh -[a|v] Arguments: OUTPUT_PATH Path of the final WebM file + -a Include audio + -v Video only Examples: - Capture the screen and save it in 'output.webm' - record-my-screen.sh output.webm + Capture the screen without audio and save it in 'output.webm' + record-my-screen.sh output.webm -v EOF } @@ -21,15 +23,29 @@ OUTPUT_PATH="${1:-}" usage 'OUTPUT_PATH' exit 2 } +shift SCREEN_RESOLUTION="$(xrandr -q --current | grep '[*]' | awk '{print$1}')" +DEFAULT_FLAGS=" +-f x11grab +-s $SCREEN_RESOLUTION +-i :0 +" +while getopts 'av' flag; do + case "$flag" in + a) + FLAGS="$DEFAULT_FLAGS" + ;; + v) + FLAGS="$DEFAULT_FLAGS -f pulse -i default" + ;; +done -ffmpeg \ - -f pulse \ - -i default \ - -f x11grab \ - -s "$SCREEN_RESOLUTION" \ - -i :0 \ - "$OUTPUT_PATH" +if [ -z "${FLAGS:-}" ]; then + usage '[a|b]' + exit 2 +fi + +ffmpeg $FLAGS "$OUTPUT_PATH" # https://github.com/georgmartius/vid.stab -- cgit v1.2.3 From eea2d69ed5c22b13e441df9fd3a4915d3b6d27b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:41:11 -0300 Subject: scripts/post.sh: Add extra data for podcast/screecast --- scripts/post.sh | 13 +++++++++++-- 1 file changed, 11 insertions(+), 2 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index b12f01b..6f5f98a 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -30,12 +30,21 @@ TYPE="${1:-}" exit 2 } +EXTRA='' case "$TYPE" in - article | til | podcast | screencast) + article|til LAYOUT=post DIR="_${TYPE}s" EXT=md ;; + podcast|screencast) + LAYOUT=post + DIR="_${TYPE}s" + EXT=md + EXTRA=' +$TYPE: true +' + ;; slides) LAYOUT=slides DIR=_slides @@ -95,7 +104,7 @@ lang: en ref: $SLUG_TITLE article: $ARTICLE - +$EXTRA --- --- -- cgit v1.2.3 From 07d519f0708489d52e716b9230fa5dc28110d991 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:41:37 -0300 Subject: scripts/post.sh: Jump into vi --- scripts/post.sh | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index 6f5f98a..9609eb0 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -83,10 +83,9 @@ OUT="$WEBSITE_REPO/$DIR/$PASTE_DATE-$SLUG_TITLE.$EXT" cd "$WEBSITE_REPO" -[ -f "$OUT" ] && { - red "Post named $OUT already exists.\n" - exit 1 -} +if [ -f "$OUT" ]; then + exec vi "$OUT" +fi if [ "$LAYOUT" = 'slides' ]; then ARTICLE="$($0 article "$FULL_TITLE")" @@ -134,4 +133,4 @@ ref: $SLUG_TITLE EOF fi -echo "$OUT" +vi "$OUT" -- cgit v1.2.3 From 2683abf02817c9b964c177dc22ebd25b5307c1c6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:42:04 -0300 Subject: cron/archive-box.sh: add link reference --- cron/archive-box.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/cron/archive-box.sh b/cron/archive-box.sh index a4e2b41..bd3298f 100755 --- a/cron/archive-box.sh +++ b/cron/archive-box.sh @@ -1,6 +1,7 @@ #!/bin/sh set -eux +# https://archivy.github.io/ # Derived from ArchiveBox: # https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 QUERY=$(cat < Date: Tue, 9 Feb 2021 15:43:06 -0300 Subject: fake-symlinks.sh: add more projects to the list --- sh/fake-symlinks.sh | 19 ++++++++++++------- 1 file changed, 12 insertions(+), 7 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 7b629af..6338975 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -379,9 +379,10 @@ declare -A ML_FOR_PROJECT=( [x-bindgen]=mediator [mediator]=mediator [libedn]=mediator - [kongrue]=mediator + [konformigado]=mediator [gluilo]=mediator [allocfail]=mediator + [sharedc]=mediator [eq]=mediator [songbooks]=songbooks [pires]=pires @@ -400,9 +401,10 @@ declare -A GUILE_PROJECTS=( declare -A C_PROJECT=( [remembering]=1 [gluilo]=1 - [kongrue]=1 + [konformigado]=1 [libedn]=1 [allocfail]=1 + [sharedc]=1 ) declare -A NO_README_SH=( @@ -434,18 +436,21 @@ ln_all ln_makefile_only_guix_project vps \ website \ dotfiles \ gluilo \ - kongrue \ + konformigado \ libedn \ eq \ - allocfail + allocfail \ + sharedc \ + standardify \ + autoqemu \ + euandreh-package-repository ln_all ln_bare_project parseclj \ brinquedoteca \ casa-do-caminho \ - euandreh-guix-channel \ music \ swift2nix \ swift2nix-demo \ cargo2nix \ - cargo2nix-demo + cargo2nix-demo \ -popd > /dev/null || exit 1 +popd &> /dev/null || exit 1 -- cgit v1.2.3 From 9fd155a7cff808fcdea7ccdd58065e03ef4e9071 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 15:52:09 -0300 Subject: fake-symlinks: Fix file vendoring --- sh/fake-symlinks.sh | 15 ++++----------- sh/templates/src/vendor | 1 - sh/templates/src/vendor/allocfail | 1 + sh/templates/src/vendor/sharedc | 1 + 4 files changed, 6 insertions(+), 12 deletions(-) delete mode 120000 sh/templates/src/vendor create mode 120000 sh/templates/src/vendor/allocfail create mode 120000 sh/templates/src/vendor/sharedc diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 6338975..a6d4079 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -1,6 +1,6 @@ #!/usr/bin/env bash -pushd "$DOTFILES/sh/templates/" || exit 1 +pushd "$DOTFILES/sh/templates/" &>/dev/null || exit 1 mkdir -p "$DOTFILES/cron/generated/" for job in report-summary annex backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do @@ -316,17 +316,10 @@ ln_simple_makefile() { envsubst_if_not Makefile if [ -n "$ENABLE_C" ]; then - cp_all aux/assert-clang-format.sh \ - aux/malloc-fail-test.sh + cp_all aux/assert-clang-format.sh - cp_if src/vendor/test.h \ - src/vendor/test.c \ - src/vendor/tuple.h \ - src/vendor/tuple.c \ - src/vendor/vector.h \ - src/vendor/vector.c - - cp_if tests/lib.sh \ + cp_if $(find -L src/vendor/ -type f) \ + tests/lib.sh \ aux/utils.sh fi } diff --git a/sh/templates/src/vendor b/sh/templates/src/vendor deleted file mode 120000 index 4ca1d82..0000000 --- a/sh/templates/src/vendor +++ /dev/null @@ -1 +0,0 @@ -../../../../sharedc/src \ No newline at end of file diff --git a/sh/templates/src/vendor/allocfail b/sh/templates/src/vendor/allocfail new file mode 120000 index 0000000..b608486 --- /dev/null +++ b/sh/templates/src/vendor/allocfail @@ -0,0 +1 @@ +../../../../../allocfail/src \ No newline at end of file diff --git a/sh/templates/src/vendor/sharedc b/sh/templates/src/vendor/sharedc new file mode 120000 index 0000000..76206c2 --- /dev/null +++ b/sh/templates/src/vendor/sharedc @@ -0,0 +1 @@ +../../../../../sharedc/src \ No newline at end of file -- cgit v1.2.3 From 9f69ff2055698b3789ec50b7ae5569f431b2fe26 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 16:14:13 -0300 Subject: ShellCheck --- scripts/post.sh | 6 +++--- scripts/record-my-screen.sh | 4 ++++ sh/env.sh | 3 ++- 3 files changed, 9 insertions(+), 4 deletions(-) diff --git a/scripts/post.sh b/scripts/post.sh index 9609eb0..3c4b483 100755 --- a/scripts/post.sh +++ b/scripts/post.sh @@ -32,7 +32,7 @@ TYPE="${1:-}" EXTRA='' case "$TYPE" in - article|til + article|til) LAYOUT=post DIR="_${TYPE}s" EXT=md @@ -41,9 +41,9 @@ case "$TYPE" in LAYOUT=post DIR="_${TYPE}s" EXT=md - EXTRA=' + EXTRA=" $TYPE: true -' +" ;; slides) LAYOUT=slides diff --git a/scripts/record-my-screen.sh b/scripts/record-my-screen.sh index 5ec2d69..65d01b9 100755 --- a/scripts/record-my-screen.sh +++ b/scripts/record-my-screen.sh @@ -39,6 +39,9 @@ while getopts 'av' flag; do v) FLAGS="$DEFAULT_FLAGS -f pulse -i default" ;; + *) + ;; + esac done if [ -z "${FLAGS:-}" ]; then @@ -46,6 +49,7 @@ if [ -z "${FLAGS:-}" ]; then exit 2 fi +# shellcheck disable=2086 ffmpeg $FLAGS "$OUTPUT_PATH" # https://github.com/georgmartius/vid.stab diff --git a/sh/env.sh b/sh/env.sh index 75eada3..25042cf 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -15,7 +15,8 @@ export LIBRARY_PATH="$HOME/.local/lib" export PKG_CONFIG_PATH="$HOME/.local/lib/pkgconfig" export LD_LIBRARY_PATH="$HOME/.local/lib" if [ -z "${MANPATH:-}" ]; then - export MANPATH="$HOME/.local/share/man:$(manpath)" + MANPATH="$HOME/.local/share/man:$(manpath)" + export MANPATH fi # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 -- cgit v1.2.3 From be5b801cf97994f3512a99df978d242e34f2b220 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 16:14:42 -0300 Subject: Re-add aux/assert-nixfmt.sh --- aux/assert-nixfmt.sh | 11 +++++++++++ 1 file changed, 11 insertions(+) create mode 100755 aux/assert-nixfmt.sh diff --git a/aux/assert-nixfmt.sh b/aux/assert-nixfmt.sh new file mode 100755 index 0000000..19bd0a2 --- /dev/null +++ b/aux/assert-nixfmt.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eux + +# shellcheck disable=2016 +find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' + nixfmt < "$1" | diff - "$1" || { + echo "The file \"$1\" is unformatted. To fix it, run:" + echo " nixfmt $1" + exit 1 + } +' _ {} \; -- cgit v1.2.3 From 8332c6e8b12cd1942a62be4bead2ea75de67f684 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 16:16:03 -0300 Subject: pinned-channels.scm: Add xyz-euandreh for nixfmt --- aux/guix/pinned-channels.scm | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index f8269ff..941a3b2 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -1,9 +1,19 @@ (list + ;; used for nixfmt + (channel + (name 'xyz-euandreh) + (url "git://git.euandreh.xyz/euandreh-package-repository") + (branch "main") + (introduction + (make-channel-introduction + "d749e053e6db365069cb9b2ef47a78b06f9e7361" + (openpgp-fingerprint + "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "f2130228ed86fed81806a662ed59aa74ed2398ed") + "d265809b782293eb42dd663b4611ca19dd2bf1b3") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From c889e31abf9c9cfe923858dec4a8b95cdfa06af8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 16:19:25 -0300 Subject: configuration.nix: Add units package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5a92a6c..b138754 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -241,6 +241,7 @@ in { tinycc-with-posix-alias m4 llvmPackages.bintools # ar, nm and friends + units ## Containers and VMs qemu -- cgit v1.2.3 From ac8001f6514d4c3377ac4f6f5fb766121ea3f052 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 16:24:47 -0300 Subject: Add cron and cron/generated to $PATH --- sh/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/env.sh b/sh/env.sh index 25042cf..d9412be 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -25,4 +25,4 @@ export NIX_BUILD_CORES=0 export GUIX_PROFILE="$HOME/.guix-profile" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$HOME/annex/bin/scripts:$PATH" +PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$DOTFILES/cron:$DOTFILES/cron/generated:$HOME/annex/bin/scripts:$PATH" -- cgit v1.2.3 From 1b8a9a58e162a9332fa825a0a59c9ea9b034ce65 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 16:33:00 -0300 Subject: configuration.nix: Add inetutils package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index b138754..5ef3ff8 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -208,6 +208,7 @@ in { pandoc buku # replaces Firefox bookmarks cloc + inetutils # telnet ## Mail notmuch -- cgit v1.2.3 From 243aa607e2323a906bc82ebad35fdfcbcfc177dd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 19:56:36 -0300 Subject: fake-symlinks.sh: Retire parsecc and parseclj --- sh/fake-symlinks.sh | 10 +++------- 1 file changed, 3 insertions(+), 7 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index a6d4079..5d6fc3d 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -356,7 +356,6 @@ ln_description_foreign_project() { declare -A PROJECT_NAMES=( [vps]=VPS [cement]=Cement - [parsecc]=ParsecC [songbooks]=Songbooks [mediator]=Mediator [byopds]=BYOPDS @@ -367,8 +366,6 @@ declare -A ML_FOR_PROJECT=( [cement]=byopds [byopds]=byopds [guile-pds]=byopds - [parsecc]=mediator - [parseclj]=mediator [x-bindgen]=mediator [mediator]=mediator [libedn]=mediator @@ -421,8 +418,7 @@ ln_all ln_description_foreign_project guix \ ml-archives \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ - pdfs-da-d-maria \ - parsecc + pdfs-da-d-maria ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ @@ -436,9 +432,9 @@ ln_all ln_makefile_only_guix_project vps \ sharedc \ standardify \ autoqemu \ + libyoctoauth \ euandreh-package-repository -ln_all ln_bare_project parseclj \ - brinquedoteca \ +ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ swift2nix \ -- cgit v1.2.3 From d2f37cd696f7b1f91f032a3a9b510637c71b1b96 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 19:56:52 -0300 Subject: fake-symlinks: Makefile: Use commonmark.sh over CHANGELOG.sh --- sh/templates/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 2c2fd2b..6b2da5e 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -13,4 +13,4 @@ MAILING_LIST = $MAILING_LIST public: README.md TODOs.md CHANGELOG.md sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) sh aux/workflow/README.sh $(NAME_UC) $(NAME) - sh aux/workflow/CHANGELOG.sh $(NAME) + sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md -- cgit v1.2.3 From d987e7359c3471337556b675bac24762f587f081 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Feb 2021 19:58:13 -0300 Subject: fake-symlinks.sh: s/libyoctoauth/yoctoauth/ --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 5d6fc3d..c50a14f 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -432,7 +432,7 @@ ln_all ln_makefile_only_guix_project vps \ sharedc \ standardify \ autoqemu \ - libyoctoauth \ + yoctoauth \ euandreh-package-repository ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ -- cgit v1.2.3 From 0eded7fc88b00ed4372598a770db7a2d40f4bc62 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 10 Feb 2021 21:34:42 -0300 Subject: env.sh: Expand variables over overwriting --- sh/env.sh | 15 +++++++-------- 1 file changed, 7 insertions(+), 8 deletions(-) diff --git a/sh/env.sh b/sh/env.sh index d9412be..baf0eac 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -10,14 +10,13 @@ export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" export RLWRAP_HOME="$HOME/.cache/rlwrap" export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror' export CC=gcc -export C_INCLUDE_PATH="$HOME/.local/include" -export LIBRARY_PATH="$HOME/.local/lib" -export PKG_CONFIG_PATH="$HOME/.local/lib/pkgconfig" -export LD_LIBRARY_PATH="$HOME/.local/lib" -if [ -z "${MANPATH:-}" ]; then - MANPATH="$HOME/.local/share/man:$(manpath)" - export MANPATH -fi + +export C_INCLUDE_PATH="${C_INCLUDE_PATH:-}${C_INCLUDE_PATH:+:}$HOME/.local/include" +export LIBRARY_PATH="${LIBRARY_PATH:-}${LIBRARY_PATH:+:}$HOME/.local/lib" +export PKG_CONFIG_PATH="${PKG_CONFIG_PATH:-}${PKG_CONFIG_PATH:+:}$HOME/.local/lib/pkgconfig" +export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}${LD_LIBRARY_PATH:+:}$HOME/.local/lib" +MANPATH="${MANPATH:-$HOME/.local/share/man:$(manpath)}" +export MANPATH # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From b6708e274efe153597f9f2e7cf806a884ed0c262 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 11 Feb 2021 15:04:54 -0300 Subject: sh/util.sh: Add -c flag for task(), doing commit directly --- sh/util.sh | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/sh/util.sh b/sh/util.sh index 93667b9..a3ca37d 100644 --- a/sh/util.sh +++ b/sh/util.sh @@ -31,13 +31,27 @@ t() { expand "$1" -t2 | sponge "$1" } +insert_at_line() { + N="$1" + F="$2" + printf '%s\n\n%s\n\n%s\n' \ + "$(head "-n$N" "$F")" \ + "$(cat -)" \ + "$(tail "-n+$((N+1))" "$F")" \ + | sponge "$F" +} + task() { TITLE="${1:-FIXME}" - printf '## TODO %s {#task-%s}\n- TODO in %s\n\n---\n\nFIXME\n' \ - "$TITLE" "$(uuidgen)" "$(date -I)" | \ - vipe | \ - printf '%s\n\n%s\n\n%s\n' "$(head -n2 TODOs.md)" "$(cat -)" "$(tail -n+3 TODOs.md)" | \ - sponge TODOs.md + ID="#task-$(uuidgen)" + TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$TITLE" "$ID" "$(date -I)")" + if [ "${2:-}" = '-c' ] && [ "$TITLE" != 'FIXME' ]; then + echo "$TITLE_LINE" | insert_at_line 2 TODOs.md + git add TODOs.md + git commit -m "TODOs.md: Add $ID" + else + printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line 2 TODOs.md + fi } gvi() { @@ -50,7 +64,7 @@ gvi() { } disable_ci() { - NAME="$(basename "$PWD")" - rm -f ".git/hooks/$NAME/pre-push" - ssh euandreh.xyz rm -f "/srv/git/$NAME.git/hooks/post-receive" + NAME="$(basename "$PWD")" + rm -f ".git/hooks/$NAME/pre-push" + ssh euandreh.xyz rm -f "/srv/git/$NAME.git/hooks/post-receive" } -- cgit v1.2.3 From 773e3802d87bdd90e9ff4a471bbe4b81382240df Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 11 Feb 2021 17:38:51 -0300 Subject: mv nixos/npmrc.sh . --- nixos/npmrc.sh | 5 ----- npmrc.sh | 5 +++++ sh/symlinks.sh | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) delete mode 100644 nixos/npmrc.sh create mode 100644 npmrc.sh diff --git a/nixos/npmrc.sh b/nixos/npmrc.sh deleted file mode 100644 index 0bc6ecb..0000000 --- a/nixos/npmrc.sh +++ /dev/null @@ -1,5 +0,0 @@ -# shellcheck disable=2148 disable=2034 -prefix=/home/andreh/.npm-packages -# Taken from: -# http://www.tomsquest.com/blog/2018/10/better-npm-ing/ -save-exact=true diff --git a/npmrc.sh b/npmrc.sh new file mode 100644 index 0000000..0bc6ecb --- /dev/null +++ b/npmrc.sh @@ -0,0 +1,5 @@ +# shellcheck disable=2148 disable=2034 +prefix=/home/andreh/.npm-packages +# Taken from: +# http://www.tomsquest.com/blog/2018/10/better-npm-ing/ +save-exact=true diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 8cb56a3..e20bf2b 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -10,15 +10,15 @@ upsert_dir_symlink() { upsert_dir_symlink "$HOME/dev/libre/others/borg/config" ~/.config/borg -ln -fs "$DOTFILES/sh/bashrc.sh" ~/.bashrc -ln -fs "$DOTFILES/sh/bash_profile.sh" ~/.bash_profile +ln -fs "$DOTFILES/sh/bashrc.sh" ~/.bashrc +ln -fs "$DOTFILES/sh/bash_profile.sh" ~/.bash_profile ln -fs "$DOTFILES/git/gitattributes" ~/.gitattributes ln -fs "$DOTFILES/git/gitignore" ~/.gitignore_global ln -fs "$DOTFILES/git/gitconfig.ini" ~/.gitconfig ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap -ln -fs "$DOTFILES/nixos/npmrc.sh" ~/.npmrc +ln -fs "$DOTFILES/npmrc.sh" ~/.npmrc mkdir -p ~/tmp/ touch ~/tmp/scratch.txt -- cgit v1.2.3 From 34078d39ff1465d454ae6a0ffd4556e5126aa852 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 11 Feb 2021 17:39:07 -0300 Subject: configuration.nix: Add doas package --- nixos/configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/nixos/configuration.nix b/nixos/configuration.nix index 5ef3ff8..397cffe 100644 --- a/nixos/configuration.nix +++ b/nixos/configuration.nix @@ -209,6 +209,7 @@ in { buku # replaces Firefox bookmarks cloc inetutils # telnet + doas ## Mail notmuch -- cgit v1.2.3 From 054c5e474b9e6b9f9bc4253295fee90c5f2276ac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 11 Feb 2021 18:08:04 -0300 Subject: merge all Nix files together into configuration.nix --- configuration.nix | 506 ++++++++++++++++++++++++++++++++++++++++++++++++ nixos/common.nix | 33 ---- nixos/configuration.nix | 473 -------------------------------------------- nixos/usurpador.nix | 26 --- nixos/velhinho.nix | 13 -- 5 files changed, 506 insertions(+), 545 deletions(-) create mode 100644 configuration.nix delete mode 100644 nixos/common.nix delete mode 100644 nixos/configuration.nix delete mode 100644 nixos/usurpador.nix delete mode 100644 nixos/velhinho.nix diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..d5ff21e --- /dev/null +++ b/configuration.nix @@ -0,0 +1,506 @@ +{ config, pkgs, ... }: + +let + log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; + cron-for-name = prefix: name: cron: + "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; + daily-at-12h30min = "30 12 * * *"; + every-x-hours = "0 * * * *"; + pub-crons = { + no-mail = { + sync-mail = every-x-hours; + deliver-enqueued-emails = every-x-hours; + }; + + with-mail = { + report-summary-job = "30 13 * * *"; + + annex-job = daily-at-12h30min; + backup-job = daily-at-12h30min; + repo-update-job = daily-at-12h30min; + notmuch-dump-job = daily-at-12h30min; + mbox-archive-job = daily-at-12h30min; + copy-box-backups-job = daily-at-12h30min; + mr-remotes-backup-job = daily-at-12h30min; + }; + }; + priv-crons = { pacheco-job = "0 12 5 * *"; }; + crons = + builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") + pub-crons.no-mail // builtins.mapAttrs + (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") + pub-crons.with-mail + // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; + privateConfiguration = import /etc/nixos/private-configuration.nix; + enableFlatpak = true; # for usage with proprietary Skype + proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; + allowUnfree = builtins.length proprietaryPackages > 0; +in { + imports = [ # Include the results of the hardware scan. + /etc/nixos/hardware-configuration.nix + ]; + + # Use the systemd-boot EFI boot loader. + boot = { + loader = { + systemd-boot.enable = true; + efi.canTouchEfiVariables = true; + }; + initrd = { + luks.devices = { + root = { + name = "root"; + device = "/dev/nvme0n1p3"; + preLVM = true; + }; + }; + }; + }; + + hardware = { + bluetooth = { enable = true; }; + pulseaudio = { + package = pkgs.pulseaudioFull; + enable = true; + extraModules = [ pkgs.pulseaudio-modules-bt ]; + extraConfig = '' + # Switch between headset and headphone mode (e.g. for calls and music) automatically + load-module module-bluetooth-policy auto_switch=2 + # Echo cancellation and noise cleanup of mic + load-module module-echo-cancel aec_method=webrtc + + # https://til.flourishing.stream/2020/05/24/cancelamento-de-ruido-pulseaudio/ + ### Enable Echo/Noise-Cancellation + load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink + set-default-source echoCancel_source + set-default-sink echoCancel_sink + ''; + }; + }; + + networking = { + hostName = "usurpador-nixos"; + networkmanager.enable = true; + extraHosts = builtins.readFile (builtins.fetchurl { + url = + "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"; + sha256 = "0mv61ki66jrzyzd8l7kf3xhfzk7z93c2rb76bxr35jg78wp252q0"; + }); + }; + + system.autoUpgrade = { + enable = true; + channel = "https://nixos.org/channels/nixos-unstable"; + }; + + console = { + keyMap = "br-abnt2"; + font = "Lat2-Terminus16"; + }; + + # Select internationalisation properties. + i18n = { defaultLocale = "fr_FR.UTF-8"; }; + + # Set your time zone. + time.timeZone = "America/Sao_Paulo"; + + virtualisation.docker.enable = true; + + fonts.fonts = with pkgs; [ + source-code-pro + fira-code + fira-mono + fira-code-symbols + freefont_ttf + symbola + ]; + + environment.systemPackages = let + pkgs-19-09 = import (pkgs.fetchzip { + url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; + sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; + }) { }; + + noTestAttrs = { + doCheck = false; + doInstallCheck = false; + meta = { broken = false; }; + }; + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet = + pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + fallback-quodlibet = + pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + active-quodlibet = untested-quodlibet; + + gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { + propagatedBuildInputs = oldAttrs.propagatedBuildInputs + ++ [ pkgs.python3Packages.youtube-dl ]; + }); + bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/bmake $out/bin/make + ''; + }); + tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/tcc $out/bin/c99 + ''; + }); + flex-with-posix-alias = pkgs.flex.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/flex $out/bin/lex + ''; + }); + pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { + postPatch = '' + substituteInPlace ar_io.c --replace 'putenv' '// putenv' + ${({ postPatch = ""; } // oldAttrs).postPatch} + ''; + }); + + nu-packages = with pkgs; [ + awscli + yubioath-desktop + leiningen + openjdk8 + clojure # =clj= + kubernetes + nssTools # =pk12util= + python3 + ]; + + in with pkgs; + [ + ## Personal data tools + gitAndTools.git-open + gitAndTools.gitFull + gitAndTools.git-annex + gitAndTools.gitRemoteGcrypt + git-crypt + git-lfs + mr + borgbackup + pass + gnupg + pinentry_gtk2 + + ## CLI tools + groff + mktorrent + diffoscope + bundix + bash-completion + nix-bash-completions + youtube-dl + wget + tmux + tmuxinator + sox # =play=, SoX - Sound eXchange + gettext + rlwrap + jq + rq + openvpn + xclip + psmisc # =killall= + xorg.xkill + gksu + tree + unzip # used by extract bash function and Clojure go-to-source + feh + nixUnstable # =nix= + bind # =dig= + rsync + moreutils # =vipe=, =sponge= + graphviz # =dot= and others + graph-easy # ASCII drawings for GraphViz output + mkpasswd + direnv + recutils + sqlite + trash-cli + entr + mailutils + ffmpeg-full + ledger + gnuplot + ranger + electrum + zathura + st + pavucontrol + newsboat + acpi + xsel + pinentry + nixfmt + # nvi # broken, now using the one from Guix + fzf + calcurse + pandoc + buku # replaces Firefox bookmarks + cloc + inetutils # telnet + doas + + ## Mail + notmuch + isync + + ## Conversations + mutt + gomuks + weechat # replacing ERC + poezio + + ## Programming tools + perl + shellcheck + mrsh + dash + gcc + clang-tools + valgrind + + ## POSIX + bmake-with-alias + byacc + bc + pax-with-good-path + lzip + flex-with-posix-alias + gnugrep + file + ed + tinycc-with-posix-alias + m4 + llvmPackages.bintools # ar, nm and friends + units + + ## Containers and VMs + qemu + expect + + ## xmonad + xorg.xmodmap + xorg.xmessage + dmenu + escrotum + xorg.xbacklight + playerctl + lightdm + fvwm # =xpmroot= + haskellPackages.xmobar + arandr + alsaUtils # for xmonad volume commands + yad + + ## EuAndreh overlay + xyz-euandreh.remembering + xyz-euandreh.autoqemu + + ## GUI programs + audacity + zbar + calibre + qutebrowser + (mpv-with-scripts.override { + scripts = with mpvScripts; [ mpris sponsorblock ]; + }) + + ## Candidates to be replaced by alternatives + emacs # just missing configuring mutt + active-quodlibet # cmus + mutagen + gpodder-with-youtube-dl # podboat? + transmission-gtk # Transmission TUI + firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better + tdesktop # telegram -> gomuks + ] ++ proprietaryPackages ++ nu-packages; + + nixpkgs = { + config = { + android_sdk.accept_license = allowUnfree; + allowUnfree = allowUnfree; + }; + overlays = let + version = "main"; + use-local = false; + euandreh-nixpkgs = import (if use-local then + ../euandreh-package-repository/default.nix + else + fetchTarball { + url = + "https://git.euandreh.xyz/euandreh-package-repository/snapshot/euandreh-package-repository-${version}.tar.gz"; + + }) { inherit pkgs; }; + in [ euandreh-nixpkgs ]; + }; + + # Look at + # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro + + programs = { + bash.enableCompletion = true; + autojump.enable = true; + }; + + xdg.portal.enable = true; + services = { + flatpak.enable = enableFlatpak; + ssmtp = { + enable = true; + authPassFile = "/home/andreh/annex/secret/SMTP/euandreh.txt"; + authUser = "eu@euandre.org"; + domain = "euandre.org"; + hostName = "box.euandre.org:587"; + root = "root@euandre.org"; + setSendmail = true; + useSTARTTLS = true; + useTLS = true; + }; + blueman.enable = true; + + # We can see the actual generated crontab at /etc/crontab + cron = { + enable = true; + #systemCronJobs = crons; + }; + + logrotate = { + enable = true; + extraConfig = '' + compress + + /tmp/*.euandreh.log { + rotate 5 + daily + olddir /home/andreh/archive/logs/cron/ + createolddir 744 andreh users + su andreh users + } + + /home/andreh/.bash_history { + rotate 30 + daily + olddir /home/andreh/archive/bash_history/ + createolddir 744 andreh users + su andreh users + } + ''; + }; + + xserver = { + enable = true; + layout = "br"; + xkbOptions = "caps:swapescape"; + + # Touchpad support + libinput.enable = true; + + config = '' + Section "Device" + Identifier "Intel Graphics" + Driver "intel01" + Option "Backlight" "intel_backlight" + EndSection + ''; + + windowManager.xmonad = { + enable = true; + enableContribAndExtras = true; + }; + desktopManager = { xterm.enable = false; }; + displayManager = { + defaultSession = "none+xmonad"; + + lightdm.enable = true; + + # The config inception was inspired by: + # http://ubuntuforum-br.org/index.php?topic=13784.0 + # Lambda symbol name taken from: + # http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap + # To test a keycode: + # xmodmap -e 'keycode 118 = bar Greek_lamda' + sessionCommands = '' + ${pkgs.fvwm}/bin/xpmroot ~/annex/docs/emotion.png & + ''; + }; + }; + + pcscd.enable = true; # required by yubioath + }; + + security = { + sudo.enable = true; + hideProcessInformation = false; + }; + + users = { + mutableUsers = false; + + extraUsers = let + andrehUser = { + andreh = { + isNormalUser = true; + uid = 1000; + description = "EuAndreh"; + extraGroups = [ "wheel" "networkmanager" "docker" ]; + # Generated with: + # mkpasswd -m sha-512 + hashedPassword = privateConfiguration.hashedPassword; + }; + }; + # From the Guix manual: + # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup + buildUser = (i: { + "guixbuilder${i}" = { # guixbuilder$i + group = "guixbuild"; # -g guixbuild + extraGroups = [ "guixbuild" ]; # -G guixbuild + home = "/var/empty"; # -d /var/empty + shell = pkgs.nologin; # -s `which nologin` + description = "Guix build user ${i}"; # -c "Guix buid user $i" + isSystemUser = true; # --system + }; + }); + # merge all users + in pkgs.lib.fold (str: acc: acc // buildUser str) andrehUser + # for i in `seq -w 1 10` + (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n + 1) 10)); + + extraGroups.guixbuild = { name = "guixbuild"; }; + }; + + systemd = { + services = { + # Derived from Guix guix-daemon.service.in + # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 + guix-daemon = { + enable = true; + description = "Build daemon for GNU Guix"; + serviceConfig = { + ExecStart = + "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; + }; + wantedBy = [ "multi-user.target" ]; + }; + }; + user.services = { + mpris-proxy = { + enable = true; + description = "Mpris proxy, added to support bluetooth media keys"; + serviceConfig = { + After = [ "network.target" "sound.target" ]; + ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; + WantedBy = [ "default.target" ]; + }; + }; + }; + }; + + # This value determines the NixOS release with which your system is to be + # compatible, in order to avoid breaking some software such as database + # servers. You should change this only after NixOS release notes say you + # should. + system.stateVersion = "20.03"; # Did you read the comment? +} diff --git a/nixos/common.nix b/nixos/common.nix deleted file mode 100644 index 2cb2dfd..0000000 --- a/nixos/common.nix +++ /dev/null @@ -1,33 +0,0 @@ -let - log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; - cron-for-name = prefix: name: cron: - "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; - daily-at-12h30min = "30 12 * * *"; - every-x-hours = "0 * * * *"; - pub-crons = { - no-mail = { - sync-mail = every-x-hours; - deliver-enqueued-emails = every-x-hours; - }; - - with-mail = { - report-summary-job = "30 13 * * *"; - - annex-job = daily-at-12h30min; - backup-job = daily-at-12h30min; - repo-update-job = daily-at-12h30min; - notmuch-dump-job = daily-at-12h30min; - mbox-archive-job = daily-at-12h30min; - copy-box-backups-job = daily-at-12h30min; - mr-remotes-backup-job = daily-at-12h30min; - }; - }; - priv-crons = { pacheco-job = "0 12 5 * *"; }; -in { - crons = - builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") - pub-crons.no-mail // builtins.mapAttrs - (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") - pub-crons.with-mail - // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; -} diff --git a/nixos/configuration.nix b/nixos/configuration.nix deleted file mode 100644 index 397cffe..0000000 --- a/nixos/configuration.nix +++ /dev/null @@ -1,473 +0,0 @@ -{ config, pkgs, ... }: - -let - localConfiguration = pkgs.callPackage /etc/nixos/local-configuration.nix { }; -in { - imports = [ # Include the results of the hardware scan. - /etc/nixos/hardware-configuration.nix - ]; - - # Use the systemd-boot EFI boot loader. - boot = { - loader = { - systemd-boot.enable = true; - efi.canTouchEfiVariables = true; - }; - initrd = { - luks.devices = { - root = { - name = "root"; - device = localConfiguration.luksDevice; - preLVM = true; - }; - }; - }; - }; - - hardware = { - bluetooth = { enable = true; }; - pulseaudio = { - package = pkgs.pulseaudioFull; - enable = true; - extraModules = [ pkgs.pulseaudio-modules-bt ]; - extraConfig = '' - # Switch between headset and headphone mode (e.g. for calls and music) automatically - load-module module-bluetooth-policy auto_switch=2 - # Echo cancellation and noise cleanup of mic - load-module module-echo-cancel aec_method=webrtc - - # https://til.flourishing.stream/2020/05/24/cancelamento-de-ruido-pulseaudio/ - ### Enable Echo/Noise-Cancellation - load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink - set-default-source echoCancel_source - set-default-sink echoCancel_sink - ''; - }; - }; - - networking = { - hostName = localConfiguration.hostName; - networkmanager.enable = true; - extraHosts = builtins.readFile (builtins.fetchurl { - url = - "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"; - sha256 = "0mv61ki66jrzyzd8l7kf3xhfzk7z93c2rb76bxr35jg78wp252q0"; - }); - }; - - system.autoUpgrade = { - enable = true; - channel = "https://nixos.org/channels/nixos-unstable"; - }; - - console = { - keyMap = "br-abnt2"; - font = "Lat2-Terminus16"; - }; - - # Select internationalisation properties. - i18n = { defaultLocale = "fr_FR.UTF-8"; }; - - # Set your time zone. - time.timeZone = "America/Sao_Paulo"; - - virtualisation.docker.enable = true; - - fonts.fonts = with pkgs; [ - source-code-pro - fira-code - fira-mono - fira-code-symbols - freefont_ttf - symbola - ]; - - environment.systemPackages = let - pkgs-19-09 = import (pkgs.fetchzip { - url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; - sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; - }) { }; - - noTestAttrs = { - doCheck = false; - doInstallCheck = false; - meta = { broken = false; }; - }; - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet = - pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - fallback-quodlibet = - pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - active-quodlibet = untested-quodlibet; - - gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { - propagatedBuildInputs = oldAttrs.propagatedBuildInputs - ++ [ pkgs.python3Packages.youtube-dl ]; - }); - bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/bmake $out/bin/make - ''; - }); - tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/tcc $out/bin/c99 - ''; - }); - flex-with-posix-alias = pkgs.flex.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/flex $out/bin/lex - ''; - }); - pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { - postPatch = '' - substituteInPlace ar_io.c --replace 'putenv' '// putenv' - ${({ postPatch = ""; } // oldAttrs).postPatch} - ''; - }); - - nu-packages = with pkgs; [ - awscli - yubioath-desktop - leiningen - openjdk8 - clojure # =clj= - kubernetes - nssTools # =pk12util= - python3 - ]; - - in with pkgs; - [ - ## Personal data tools - gitAndTools.git-open - gitAndTools.gitFull - gitAndTools.git-annex - gitAndTools.gitRemoteGcrypt - git-crypt - git-lfs - mr - borgbackup - pass - gnupg - pinentry_gtk2 - - ## CLI tools - groff - mktorrent - diffoscope - bundix - bash-completion - nix-bash-completions - youtube-dl - wget - tmux - tmuxinator - sox # =play=, SoX - Sound eXchange - gettext - rlwrap - jq - rq - openvpn - xclip - psmisc # =killall= - xorg.xkill - gksu - tree - unzip # used by extract bash function and Clojure go-to-source - feh - nixUnstable # =nix= - bind # =dig= - rsync - moreutils # =vipe=, =sponge= - graphviz # =dot= and others - graph-easy # ASCII drawings for GraphViz output - mkpasswd - direnv - recutils - sqlite - trash-cli - entr - mailutils - ffmpeg-full - ledger - gnuplot - ranger - electrum - zathura - st - pavucontrol - newsboat - acpi - xsel - pinentry - nixfmt - # nvi # broken, now using the one from Guix - fzf - calcurse - pandoc - buku # replaces Firefox bookmarks - cloc - inetutils # telnet - doas - - ## Mail - notmuch - isync - - ## Conversations - mutt - gomuks - weechat # replacing ERC - poezio - - ## Programming tools - perl - shellcheck - mrsh - dash - gcc - clang-tools - valgrind - - ## POSIX - bmake-with-alias - byacc - bc - pax-with-good-path - lzip - flex-with-posix-alias - gnugrep - file - ed - tinycc-with-posix-alias - m4 - llvmPackages.bintools # ar, nm and friends - units - - ## Containers and VMs - qemu - expect - - ## xmonad - xorg.xmodmap - xorg.xmessage - dmenu - escrotum - xorg.xbacklight - playerctl - lightdm - fvwm # =xpmroot= - haskellPackages.xmobar - arandr - alsaUtils # for xmonad volume commands - yad - - ## EuAndreh overlay - xyz-euandreh.remembering - xyz-euandreh.autoqemu - - ## GUI programs - audacity - zbar - calibre - qutebrowser - (mpv-with-scripts.override { - scripts = with mpvScripts; [ mpris sponsorblock ]; - }) - - ## Candidates to be replaced by alternatives - emacs # just missing configuring mutt - active-quodlibet # cmus + mutagen - gpodder-with-youtube-dl # podboat? - transmission-gtk # Transmission TUI - firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better - tdesktop # telegram -> gomuks - ] ++ localConfiguration.proprietaryPackages ++ nu-packages; - - nixpkgs = { - config = { - android_sdk.accept_license = localConfiguration.allowUnfree; - allowUnfree = localConfiguration.allowUnfree; - }; - overlays = let - version = "main"; - use-local = true; - euandreh-nixpkgs = import (if use-local then - ../../euandreh-package-repository/default.nix - else - fetchTarball { - url = - "https://git.euandreh.xyz/euandreh-package-repository/snapshot/euandreh-package-repository-${version}.tar.gz"; - - }) { inherit pkgs; }; - in [ euandreh-nixpkgs ]; - }; - - # Look at - # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro - - programs = { - bash.enableCompletion = true; - autojump.enable = true; - }; - - xdg.portal.enable = true; - services = { - flatpak.enable = localConfiguration.enableFlatpak; - ssmtp = { - enable = true; - authPassFile = "/home/andreh/annex/secret/SMTP/euandreh.txt"; - authUser = "eu@euandre.org"; - domain = "euandre.org"; - hostName = "box.euandre.org:587"; - root = "root@euandre.org"; - setSendmail = true; - useSTARTTLS = true; - useTLS = true; - }; - blueman.enable = true; - - # We can see the actual generated crontab at /etc/crontab - cron = { - enable = true; - systemCronJobs = localConfiguration.cronJobs; - }; - - logrotate = { - enable = true; - extraConfig = '' - compress - - /tmp/*.euandreh.log { - rotate 5 - daily - olddir /home/andreh/archive/logs/cron/ - createolddir 744 andreh users - su andreh users - } - - /home/andreh/.bash_history { - rotate 30 - daily - olddir /home/andreh/archive/bash_history/ - createolddir 744 andreh users - su andreh users - } - ''; - }; - - xserver = { - enable = true; - layout = "br"; - xkbOptions = "caps:swapescape"; - - # Touchpad support - libinput.enable = true; - - config = '' - Section "Device" - Identifier "Intel Graphics" - Driver "intel01" - Option "Backlight" "intel_backlight" - EndSection - ''; - - windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - }; - desktopManager = { xterm.enable = false; }; - displayManager = { - defaultSession = "none+xmonad"; - - lightdm.enable = true; - - # The config inception was inspired by: - # http://ubuntuforum-br.org/index.php?topic=13784.0 - # Lambda symbol name taken from: - # http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap - # To test a keycode: - # xmodmap -e 'keycode 118 = bar Greek_lamda' - sessionCommands = '' - ${pkgs.fvwm}/bin/xpmroot ~/annex/docs/emotion.png & - ''; - }; - }; - - pcscd.enable = true; # required by yubioath - }; - - security = { - sudo.enable = true; - hideProcessInformation = false; - }; - - users = { - mutableUsers = false; - - extraUsers = let - andrehUser = { - andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "docker" ]; - # Generated with: - # mkpasswd -m sha-512 - hashedPassword = localConfiguration.hashedPassword; - }; - }; - # From the Guix manual: - # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup - buildUser = (i: { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = [ "guixbuild" ]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.nologin; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system - }; - }); - # merge all users - in pkgs.lib.fold (str: acc: acc // buildUser str) andrehUser - # for i in `seq -w 1 10` - (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n + 1) 10)); - - extraGroups.guixbuild = { name = "guixbuild"; }; - }; - - systemd = { - services = { - # Derived from Guix guix-daemon.service.in - # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 - guix-daemon = { - enable = true; - description = "Build daemon for GNU Guix"; - serviceConfig = { - ExecStart = - "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; - }; - wantedBy = [ "multi-user.target" ]; - }; - }; - user.services = { - mpris-proxy = { - enable = true; - description = "Mpris proxy, added to support bluetooth media keys"; - serviceConfig = { - After = [ "network.target" "sound.target" ]; - ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; - WantedBy = [ "default.target" ]; - }; - }; - }; - }; - - # This value determines the NixOS release with which your system is to be - # compatible, in order to avoid breaking some software such as database - # servers. You should change this only after NixOS release notes say you - # should. - system.stateVersion = "20.03"; # Did you read the comment? -} diff --git a/nixos/usurpador.nix b/nixos/usurpador.nix deleted file mode 100644 index 79f1ef0..0000000 --- a/nixos/usurpador.nix +++ /dev/null @@ -1,26 +0,0 @@ -{ pkgs }: -let - privateConfiguration = import /etc/nixos/private-configuration.nix; - common = import /etc/nixos/common.nix; -in rec { - hostName = "usurpador-nixos"; - luksDevice = "/dev/nvme0n1p3"; - hashedPassword = privateConfiguration.hashedPassword; - enableFlatpak = true; # for usage with proprietary Skype - proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; - allowUnfree = builtins.length proprietaryPackages > 0; - cronJobs = [ - common.crons.sync-mail - common.crons.deliver-enqueued-emails - - common.crons.report-summary-job - - common.crons.annex-job - common.crons.backup-job - common.crons.repo-update-job - common.crons.notmuch-dump-job - common.crons.mbox-archive-job - common.crons.copy-box-backups-job - common.crons.mr-remotes-backup-job - ]; -} diff --git a/nixos/velhinho.nix b/nixos/velhinho.nix deleted file mode 100644 index 2b25184..0000000 --- a/nixos/velhinho.nix +++ /dev/null @@ -1,13 +0,0 @@ -{ pkgs }: -let - privateConfiguration = import /etc/nixos/private-configuration.nix; - common = import /etc/nixos/common.nix; -in { - hostName = "velhinho-nixos"; - luksDevice = "/dev/sda3"; - hashedPassword = privateConfiguration.hashedPassword; - enableIPFS = false; - allowUnfree = false; - packages = with pkgs; [ transmission-gtk ]; - cronJobs = [ common.cron.nextcloud ]; -} -- cgit v1.2.3 From 2274c051ae55ea30484d4149602358353d46a799 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 12 Feb 2021 10:01:13 -0300 Subject: configuration.nix: (Re)add Fossil and Mercurial DVCS --- configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configuration.nix b/configuration.nix index d5ff21e..90aad73 100644 --- a/configuration.nix +++ b/configuration.nix @@ -184,6 +184,8 @@ in { pass gnupg pinentry_gtk2 + fossil + mercurial ## CLI tools groff -- cgit v1.2.3 From 99b55cd8de3bfb523e9765cf86b600378dea4ec5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Feb 2021 15:36:23 -0300 Subject: fake-symlinks.sh: Remove Autotools flavors of projects --- sh/fake-symlinks.sh | 79 ++++++----------------------------------------------- 1 file changed, 8 insertions(+), 71 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index c50a14f..35111db 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -126,13 +126,7 @@ ln_env() { export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - if [ -f "$PREFIX/Makefile.am" ]; then - export ENABLE_AUTOTOOLS=1 - else - export ENABLE_AUTOTOOLS= - fi - - if [ -f "$PREFIX/Makefile" ] || [ -f "$PREFIX/Makefile.am" ]; then + if [ -f "$PREFIX/Makefile.in" ]; then export ENABLE_CI=1 else export ENABLE_CI= @@ -178,22 +172,7 @@ ln_init() { if [ ! -d "$PREFIX" ]; then git init "$PREFIX" fi -} - -ln_autotools() { - chmod +w "$PREFIX/INSTALL" 2> /dev/null ||: - cp_all AUTHORS \ - bootstrap \ - ChangeLog - - cp_if_not description - - # assumes: - # - ln_workflow for .gitignore - # - ln_git_notes_release for Makefile.am - # - ln_guix_files for Makefile.am - envsubst_if_not ..gitignore - sed_if_not configure.ac Makefile.am + cp_if_not description long-description } ln_build_aux() { @@ -268,49 +247,6 @@ ln_antora() { ln_dicts } -ln_base_autotools_guix_project() { - ln_env "$1" - ln_init - - ln_build_aux - ln_guix_files - ln_git_notes_release - ln_autotools - - ln_agpl - ln_ci - - ln_dicts - - if [ -n "$ENABLE_GUILE" ]; then - cp_all aux/automake/guile.am aux/m4/guile.m4 - fi -} - -ln_texinfo_autotools_guix_project() { - ln_base_autotools_guix_project "$1" - RENAME_TO="doc/$PROJECT.texi" envsubst_if_not rename/empty-texinfo.texi - ln_web_assets_file texinfo - cp_all aux/docbook-xsl.tar.gz -} - -ln_sphinx_autotools_guix_project() { - ln_base_autotools_guix_project "$1" - cp_all aux/assert-docs-spelling.sh doc/_templates/footer.html doc/favicon.ico - envsubst_all doc/conf.py.in doc/_templates/layout.html - envsubst_if_not doc/index.rst - cp_if_not doc/i18n-pagenames.json doc/Makefile -} - -ln_scribble_autotools_guix_project() { - ln_base_autotools_guix_project "$1" - ln_scribble -} - -ln_antora_autotools_guix_project() { - ln_base_autotools_guix_project "$1" - ln_antora -} ln_simple_makefile() { envsubst_if_not Makefile @@ -409,16 +345,17 @@ ln_all() { done } -ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement songbooks -ln_all ln_sphinx_autotools_guix_project mediator +# ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement songbooks +# ln_all ln_sphinx_autotools_guix_project mediator # ln_all ln_scribble_autotools_guix_project -ln_all ln_antora_autotools_guix_project byopds +# ln_all ln_antora_autotools_guix_project byopds ln_all ln_description_foreign_project guix \ apollo-server-demo \ ml-archives \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ - pdfs-da-d-maria + pdfs-da-d-maria \ + euandreh-package-repository \ ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ @@ -433,7 +370,7 @@ ln_all ln_makefile_only_guix_project vps \ standardify \ autoqemu \ yoctoauth \ - euandreh-package-repository + paku ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 20e8a4b02900e972bcd33bbc2ce649a7a19b2d9a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Feb 2021 15:36:55 -0300 Subject: Add long-description --- long-description | 1 + 1 file changed, 1 insertion(+) create mode 100644 long-description diff --git a/long-description b/long-description new file mode 100644 index 0000000..e5ca504 --- /dev/null +++ b/long-description @@ -0,0 +1 @@ +Personal OS configuration files. -- cgit v1.2.3 From 4be388e6afac7b9c5ef9cfbcdb9c3f2b1c97e49b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Feb 2021 15:37:42 -0300 Subject: fake-symlinks: Add configure, Makefile.in and long-description --- aux/ci/ci-build.sh | 2 +- sh/fake-symlinks.sh | 13 ++++++- sh/templates/Makefile | 16 -------- sh/templates/Makefile.am | 16 -------- sh/templates/Makefile.in | 81 +++++++++++++++++++++++++++++++++++++++++ sh/templates/aux/ci/ci-build.sh | 2 +- sh/templates/configure | 42 +++++++++++++++++++++ sh/templates/long-description | 1 + 8 files changed, 138 insertions(+), 35 deletions(-) delete mode 100644 sh/templates/Makefile delete mode 100644 sh/templates/Makefile.am create mode 100644 sh/templates/Makefile.in create mode 100755 sh/templates/configure create mode 100644 sh/templates/long-description diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 81ee1fd..acbc394 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -42,7 +42,7 @@ EOF fi if [ -f ./configure ]; then - COMMAND='./configure && make clean check public' + COMMAND='./configure && make CC=cc clean check public' else COMMAND='make CC=cc clean check public' fi diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 35111db..9893c12 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -162,6 +162,12 @@ ln_env() { else ENABLE_COMMONMARK_SH= fi + + if [ -f "$PREFIX/configure" ]; then + ENABLE_CONFIGURE=1 + else + ENABLE_CONFIGURE= + fi } ln_init() { @@ -249,7 +255,12 @@ ln_antora() { ln_simple_makefile() { - envsubst_if_not Makefile + if [ -n "$ENABLE_CONFIGURE" ]; then + envsubst_if_not Makefile.in + cp_if_not configure + else + envsubst_if_not Makefile + fi if [ -n "$ENABLE_C" ]; then cp_all aux/assert-clang-format.sh diff --git a/sh/templates/Makefile b/sh/templates/Makefile deleted file mode 100644 index 6b2da5e..0000000 --- a/sh/templates/Makefile +++ /dev/null @@ -1,16 +0,0 @@ -.PHONY: check -check: - sh aux/assert-shellcheck.sh - sh aux/workflow/assert-todos.sh - -.PHONY: clean -clean: - rm -rf public/ - -NAME_UC = $PROJECT_UC -NAME = $PROJECT -MAILING_LIST = $MAILING_LIST -public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) - sh aux/workflow/README.sh $(NAME_UC) $(NAME) - sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md diff --git a/sh/templates/Makefile.am b/sh/templates/Makefile.am deleted file mode 100644 index f527581..0000000 --- a/sh/templates/Makefile.am +++ /dev/null @@ -1,16 +0,0 @@ -include $(srcdir)/build-aux/git-notes-release.am -include $(srcdir)/build-aux/dev-checks.am -include $(srcdir)/build-aux/html-files-from-sources.am - -EXTRA_DIST = \ - build-aux/guix/manifest.scm \ - build-aux/guix/pinned-channels.scm \ - build-aux/guix/with-container.sh \ - build-aux/dev-checks.am \ - build-aux/html-files-from-sources.am \ - guix/channel/xyz/euandreh/__PROJECT__/channel.scm \ - description \ - $(TESTS) - -check-local: check-local-dev-checks -clean-local: clean-local-html-files-from-sources diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in new file mode 100644 index 0000000..8086b30 --- /dev/null +++ b/sh/templates/Makefile.in @@ -0,0 +1,81 @@ +.POSIX: +CC = c99 +CFLAGS = -std=c99 -Wall -Wextra -Wpedantic +LDFLAGS = +LDLIBS = +PREFIX = @PREFIX@ +MANPREFIX = $(PREFIX)/share/man +DATE = @DATE@ +VERSION = @VERSION@ + +scripts = +sysconfs = +manpages = + +sources = +headers = + +objects = $(sources:.c=.o) + +.SUFFIXES: .c .o + +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + +all: + +check: + if [ -d .git ]; then \ + echo 'Assuming Git repository, running development check.'; \ + $(MAKE) dev-check; \ + fi + +dev-check: + sh aux/assert-shellcheck.sh + sh aux/workflow/assert-todos.sh + +dist: + if git show v$(VERSION) 1>/dev/null 2>/dev/null; then \ + echo 'Version "v$(VERSION)" already exists.'; \ + exit 1; \ + fi + + if [ '$(DATE)' != "$$(git log -1 --format=%cd --date=short HEAD)" ]; then \ + echo 'Date "$(DATE)" is not up-to-date.'; \ + exit 1; \ + fi + + git tag v$(VERSION) + +do_subst = sed \ + -e 's:[@]VERSION[@]:$(VERSION):g' \ + -e 's:[@]DATE[@]:$(DATE):g' + +install: all + for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basenae $$h`; done + for s in $(scripts); do install -m 755 -D $$s $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done + for s in $(sysconfs); do install -m 644 -D $$s $(DESTDIR)$(PREFIX)/$$s; done + for m in $(manpages); do \ + n=$${m##*.}; \ + mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ + $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$s`.gz; \ + done + +uninstall: + for h in $(headers); do rm -f $(DESTDIR)$(PREFIX)/include/`basename $$h`; done + for s in $(scripts); do rm -f $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done + for s in $(sysconfs); do rm -f $(DESTDIR)$(PREFIX)/$$s; done + for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${m##*.}/`basename $$m`.gz; done + +clean: + rm -rf public/ + +NAME_UC = $PROJECT_UC +NAME = $PROJECT +MAILING_LIST = $MAILING_LIST +public: README.md TODOs.md CHANGELOG.md + sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) + sh aux/workflow/README.sh $(NAME_UC) $(NAME) + sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md + +.PHONY: all clean check dev-check dist install uninstall diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 81ee1fd..acbc394 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -42,7 +42,7 @@ EOF fi if [ -f ./configure ]; then - COMMAND='./configure && make clean check public' + COMMAND='./configure && make CC=cc clean check public' else COMMAND='make CC=cc clean check public' fi diff --git a/sh/templates/configure b/sh/templates/configure new file mode 100755 index 0000000..24b4ff4 --- /dev/null +++ b/sh/templates/configure @@ -0,0 +1,42 @@ +#!/bin/sh +set -eu + +DATE=1970-01-01 +VERSION=0.1.0 + +# shellcheck disable=2068 +for f in $@; do + case "$f" in + --prefix) + shift + CLI_PREFIX="$1" + shift + ;; + --prefix=*) + CLI_PREFIX="${f#--prefix=}" + shift + ;; + *) + if [ -n "${1:-}" ]; then + shift + fi + ;; + esac +done + +PREFIX="${CLI_PREFIX:-/usr/local}" + +OUT_FILES=' +Makefile +' + +for f in $OUT_FILES; do + printf 'generating "%s"...\n' "$f" + sed "$f.in" \ + -e "s:@PREFIX@:$PREFIX:g" \ + -e "s:@VERSION@:$VERSION:g" \ + -e "s:@DATE@:$DATE:g" \ + > "$f" +done + +echo Done. >&2 diff --git a/sh/templates/long-description b/sh/templates/long-description new file mode 100644 index 0000000..4c28ea5 --- /dev/null +++ b/sh/templates/long-description @@ -0,0 +1 @@ +FIXME \ No newline at end of file -- cgit v1.2.3 From b8ce900eb4ed37cb7ef58da7a0a390e4293d23ce Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Feb 2021 15:41:09 -0300 Subject: fake-symlinks: Add Makefile --- sh/templates/Makefile | 81 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 81 insertions(+) create mode 100644 sh/templates/Makefile diff --git a/sh/templates/Makefile b/sh/templates/Makefile new file mode 100644 index 0000000..1127169 --- /dev/null +++ b/sh/templates/Makefile @@ -0,0 +1,81 @@ +.POSIX: +CC = c99 +CFLAGS = -std=c99 -Wall -Wextra -Wpedantic +LDFLAGS = +LDLIBS = +PREFIX = /usr/local +MANPREFIX = $(PREFIX)/share/man +DATE = 1970 +VERSION = 0.1.0 + +scripts = +sysconfs = +manpages = + +sources = +headers = + +objects = $(sources:.c=.o) + +.SUFFIXES: .c .o + +.c.o: + $(CC) -c $(CFLAGS) -o $@ $< + +all: + +check: + if [ -d .git ]; then \ + echo 'Assuming Git repository, running development check.'; \ + $(MAKE) dev-check; \ + fi + +dev-check: + sh aux/assert-shellcheck.sh + sh aux/workflow/assert-todos.sh + +dist: + if git show v$(VERSION) 1>/dev/null 2>/dev/null; then \ + echo 'Version "v$(VERSION)" already exists.'; \ + exit 1; \ + fi + + if [ '$(DATE)' != "$$(git log -1 --format=%cd --date=short HEAD)" ]; then \ + echo 'Date "$(DATE)" is not up-to-date.'; \ + exit 1; \ + fi + + git tag v$(VERSION) + +do_subst = sed \ + -e 's:[@]VERSION[@]:$(VERSION):g' \ + -e 's:[@]DATE[@]:$(DATE):g' + +install: all + for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basenae $$h`; done + for s in $(scripts); do install -m 755 -D $$s $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done + for s in $(sysconfs); do install -m 644 -D $$s $(DESTDIR)$(PREFIX)/$$s; done + for m in $(manpages); do \ + n=$${m##*.}; \ + mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ + $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$s`.gz; \ + done + +uninstall: + for h in $(headers); do rm -f $(DESTDIR)$(PREFIX)/include/`basename $$h`; done + for s in $(scripts); do rm -f $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done + for s in $(sysconfs); do rm -f $(DESTDIR)$(PREFIX)/$$s; done + for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${m##*.}/`basename $$m`.gz; done + +clean: + rm -rf public/ + +NAME_UC = $PROJECT_UC +NAME = $PROJECT +MAILING_LIST = $MAILING_LIST +public: README.md TODOs.md CHANGELOG.md + sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) + sh aux/workflow/README.sh $(NAME_UC) $(NAME) + sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md + +.PHONY: all clean check dev-check dist install uninstall -- cgit v1.2.3 From 1e955e9eef6b3faaf74ffc4f87bcdadf41a5f547 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Feb 2021 15:45:02 -0300 Subject: fake-symlinks.sh: Remove traling backslashes --- sh/fake-symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 9893c12..1e103d8 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -366,7 +366,7 @@ ln_all ln_description_foreign_project guix \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ - euandreh-package-repository \ + euandreh-package-repository ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ @@ -388,6 +388,6 @@ ln_all ln_bare_project brinquedoteca \ swift2nix \ swift2nix-demo \ cargo2nix \ - cargo2nix-demo \ + cargo2nix-demo popd &> /dev/null || exit 1 -- cgit v1.2.3 From c6669ecf41e3aa37a63d7f3d33f6d15e60f8b439 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 14 Feb 2021 02:34:34 -0300 Subject: euandreh-package-repository -> package-repository --- aux/guix/pinned-channels.scm | 2 +- configuration.nix | 4 ++-- guix/channels.scm | 2 +- sh/fake-symlinks.sh | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index 941a3b2..0a58742 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -2,7 +2,7 @@ ;; used for nixfmt (channel (name 'xyz-euandreh) - (url "git://git.euandreh.xyz/euandreh-package-repository") + (url "git://git.euandreh.xyz/package-repository") (branch "main") (introduction (make-channel-introduction diff --git a/configuration.nix b/configuration.nix index 90aad73..a38b2fa 100644 --- a/configuration.nix +++ b/configuration.nix @@ -329,11 +329,11 @@ in { version = "main"; use-local = false; euandreh-nixpkgs = import (if use-local then - ../euandreh-package-repository/default.nix + ../package-repository/default.nix else fetchTarball { url = - "https://git.euandreh.xyz/euandreh-package-repository/snapshot/euandreh-package-repository-${version}.tar.gz"; + "https://git.euandreh.xyz/package-repository/snapshot/package-repository-${version}.tar.gz"; }) { inherit pkgs; }; in [ euandreh-nixpkgs ]; diff --git a/guix/channels.scm b/guix/channels.scm index d7a4f4d..4a8fa99 100644 --- a/guix/channels.scm +++ b/guix/channels.scm @@ -2,7 +2,7 @@ (list (channel (name 'xyz-euandreh) - (url "git://git.euandreh.xyz/euandreh-package-repository") + (url "git://git.euandreh.xyz/package-repository") (branch "main") (introduction (make-channel-introduction diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1e103d8..d0d6af4 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -366,7 +366,7 @@ ln_all ln_description_foreign_project guix \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ - euandreh-package-repository + package-repository ln_all ln_makefile_only_guix_project vps \ pires \ remembering \ -- cgit v1.2.3 From 49211830ee9c536330d88cf9d895f9652adc5b18 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 14 Feb 2021 02:56:40 -0300 Subject: fake-symlinks.sh: Remove left-over rm of assert-shellcheck.sh --- sh/fake-symlinks.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index d0d6af4..c09714b 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -277,7 +277,6 @@ ln_makefile_only_project() { ln_agpl ln_ci ln_simple_makefile - rm -f "$PREFIX/aux/assert-shellcheck.sh" } ln_makefile_only_guix_project() { -- cgit v1.2.3 From aee75739d98d8a16143b80c4eb74f36c04910e6a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 14 Feb 2021 03:00:08 -0300 Subject: fake-symlinks.sh: Also enable CI for projects with Makefile only --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index c09714b..1b44c9b 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -126,7 +126,7 @@ ln_env() { export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - if [ -f "$PREFIX/Makefile.in" ]; then + if [ -f "$PREFIX/Makefile.in" ] || [ -f "$PREFIX/Makefile" ]; then export ENABLE_CI=1 else export ENABLE_CI= -- cgit v1.2.3 From 1bc6895da1c9f0baf4348e7281e01c341772d64d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 14 Feb 2021 11:55:24 -0300 Subject: fake-symlinks.sh: s/allocfail/fallible/g --- sh/fake-symlinks.sh | 6 +++--- sh/templates/src/vendor/allocfail | 1 - sh/templates/src/vendor/fallible | 1 + 3 files changed, 4 insertions(+), 4 deletions(-) delete mode 120000 sh/templates/src/vendor/allocfail create mode 120000 sh/templates/src/vendor/fallible diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1b44c9b..e2d0101 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -317,7 +317,7 @@ declare -A ML_FOR_PROJECT=( [libedn]=mediator [konformigado]=mediator [gluilo]=mediator - [allocfail]=mediator + [fallible]=mediator [sharedc]=mediator [eq]=mediator [songbooks]=songbooks @@ -339,7 +339,7 @@ declare -A C_PROJECT=( [gluilo]=1 [konformigado]=1 [libedn]=1 - [allocfail]=1 + [fallible]=1 [sharedc]=1 ) @@ -375,7 +375,7 @@ ln_all ln_makefile_only_guix_project vps \ konformigado \ libedn \ eq \ - allocfail \ + fallible \ sharedc \ standardify \ autoqemu \ diff --git a/sh/templates/src/vendor/allocfail b/sh/templates/src/vendor/allocfail deleted file mode 120000 index b608486..0000000 --- a/sh/templates/src/vendor/allocfail +++ /dev/null @@ -1 +0,0 @@ -../../../../../allocfail/src \ No newline at end of file diff --git a/sh/templates/src/vendor/fallible b/sh/templates/src/vendor/fallible new file mode 120000 index 0000000..3920d6c --- /dev/null +++ b/sh/templates/src/vendor/fallible @@ -0,0 +1 @@ +../../../../../fallible/src \ No newline at end of file -- cgit v1.2.3 From e28ce5ae0450a0166e30c4c0eec726fdc0a67d22 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 16 Feb 2021 19:21:26 -0300 Subject: fake-symlinks.sh: Add enforce_uniform_manpages --- sh/fake-symlinks.sh | 46 ++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index e2d0101..6d147e5 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -271,12 +271,58 @@ ln_simple_makefile() { fi } +enforce_uniform_manpages() { + if [ -d "$PREFIX/doc" ]; then + for f in $(find "$PREFIX/doc" -type f -name '*.[0-9]'); do + if grep -Eq '^\.SH AUTHORS$' "$f"; then + EXPECTED="$(cat < Date: Wed, 17 Feb 2021 02:32:25 -0300 Subject: fake-symlinks: Makefile.in: Fix typo --- sh/templates/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 8086b30..02b15f1 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -52,7 +52,7 @@ do_subst = sed \ -e 's:[@]DATE[@]:$(DATE):g' install: all - for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basenae $$h`; done + for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basename $$h`; done for s in $(scripts); do install -m 755 -D $$s $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done for s in $(sysconfs); do install -m 644 -D $$s $(DESTDIR)$(PREFIX)/$$s; done for m in $(manpages); do \ -- cgit v1.2.3 From 07b4d931507eaec91112abb02631bf99db5d74d6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 17 Feb 2021 10:29:44 -0300 Subject: fake-symlinks.sh: Fix bootstrap of Makefile.in and configure --- sh/fake-symlinks.sh | 10 ++++------ sh/templates/Makefile.in | 6 +++--- 2 files changed, 7 insertions(+), 9 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 6d147e5..9ea36bc 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -163,7 +163,7 @@ ln_env() { ENABLE_COMMONMARK_SH= fi - if [ -f "$PREFIX/configure" ]; then + if [ -f "$PREFIX/configure" ] && [ ! -x "$PREFIX/configure" ]; then ENABLE_CONFIGURE=1 else ENABLE_CONFIGURE= @@ -256,8 +256,9 @@ ln_antora() { ln_simple_makefile() { if [ -n "$ENABLE_CONFIGURE" ]; then - envsubst_if_not Makefile.in - cp_if_not configure + sed_all Makefile.in + rm -f "$PREFIX/configure" + cp_all configure else envsubst_if_not Makefile fi @@ -304,9 +305,6 @@ Discussions: .UE EOF )" - # echo "expected is for $f" - # echo "$EXPECTED" - if ! diff <(tail -n "$(wc -l <<< "$EXPECTED")" "$f") <(echo "$EXPECTED"); then cat "$f" <(echo "$EXPECTED") | sponge "$f" echo "$f" diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 02b15f1..65a311d 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -70,9 +70,9 @@ uninstall: clean: rm -rf public/ -NAME_UC = $PROJECT_UC -NAME = $PROJECT -MAILING_LIST = $MAILING_LIST +NAME_UC = __PROJECT_UC__ +NAME = __PROJECT__ +MAILING_LIST = __MAILING_LIST__ public: README.md TODOs.md CHANGELOG.md sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) sh aux/workflow/README.sh $(NAME_UC) $(NAME) -- cgit v1.2.3 From 01412ba8912970cf9e60860d693d3d17da7c2f5f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 17 Feb 2021 18:09:10 -0300 Subject: fake-symlinks: Add aux/ci/report.sh --- aux/ci/ci-build.sh | 9 +++-- aux/ci/report.sh | 69 +++++++++++++++++++++++++++++++++++ aux/workflow/preamble.md | 2 +- sh/fake-symlinks.sh | 1 + sh/templates/Makefile.in | 7 ++-- sh/templates/aux/ci/ci-build.sh | 9 +++-- sh/templates/aux/ci/report.sh | 69 +++++++++++++++++++++++++++++++++++ sh/templates/aux/guix/manifest.scm | 1 + sh/templates/aux/workflow/preamble.md | 2 +- 9 files changed, 156 insertions(+), 13 deletions(-) create mode 100755 aux/ci/report.sh create mode 100755 sh/templates/aux/ci/report.sh diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index acbc394..7e17a7c 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -20,7 +20,7 @@ See CI logs with: git notes --ref=refs/notes/ci-logs show $SHA git notes --ref=refs/notes/ci-data show $SHA EOF - ) +) git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME" git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" @@ -29,11 +29,12 @@ EOF trap finish EXIT unset GIT_DIR - CLONE="$(mktemp -d)" - git clone . "$CLONE" - cd "$CLONE" + REMOTE="$PWD" + cd "$(mktemp -d)" + git clone "$REMOTE" . git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' + git fetch origin refs/notes/*:refs/notes/* if [ -f aux/guix/with-container.sh ]; then RUNNER='./aux/guix/with-container.sh' diff --git a/aux/ci/report.sh b/aux/ci/report.sh new file mode 100755 index 0000000..b82c061 --- /dev/null +++ b/aux/ci/report.sh @@ -0,0 +1,69 @@ +#!/bin/sh +set -eu + +PROJECT_UC="$1" + +PASS='✅' +FAIL='❌' + +mkdir -p public/ci-logs public/ci-data + +OUT="$(mktemp)" +chmod 644 "$OUT" + +git fetch origin refs/notes/*:refs/notes/* ||: + +for c in $(git notes list | cut -d\ -f2); do + DATA="$(git notes --ref=refs/notes/ci-data show "$c")" + FILENAME="$(echo "$DATA" | cut -d\ -f2)" + echo "$DATA" > "public/ci-data/$FILENAME" + git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" +done + +cat <> "$OUT" + + + + + + + + + +

    + CI logs for $PROJECT_UC +

    +
    + + +EOF + +mv "$OUT" public/ci.html diff --git a/aux/workflow/preamble.md b/aux/workflow/preamble.md index c6ae56e..7413f58 100644 --- a/aux/workflow/preamble.md +++ b/aux/workflow/preamble.md @@ -2,7 +2,7 @@ TODOs for $PROJECT_UC. -See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/) and [CI logs](https://$PROJECT.euandreh.xyz/ci.html). Register a new one at [~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 9ea36bc..adb5467 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -224,6 +224,7 @@ ln_ci() { EXECUTABLE=1 sed_all aux/ci/git-pre-push.sh cp_all aux/assert-shellcheck.sh \ aux/ci/ci-build.sh \ + aux/ci/report.sh \ aux/ci/git-post-receive.sh ln -s "$PREFIX/aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" else diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 65a311d..89c7271 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -74,8 +74,9 @@ NAME_UC = __PROJECT_UC__ NAME = __PROJECT__ MAILING_LIST = __MAILING_LIST__ public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) - sh aux/workflow/README.sh $(NAME_UC) $(NAME) - sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md + sh aux/workflow/TODOs.sh '$(NAME_UC)' $(NAME) $(MAILING_LIST) + sh aux/workflow/README.sh '$(NAME_UC)' $(NAME) + sh aux/workflow/commonmark.sh $(NAME_UC)' CHANGELOG.md + sh aux/ci/report.sh '$(NAME_UC)' .PHONY: all clean check dev-check dist install uninstall diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index acbc394..7e17a7c 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -20,7 +20,7 @@ See CI logs with: git notes --ref=refs/notes/ci-logs show $SHA git notes --ref=refs/notes/ci-data show $SHA EOF - ) +) git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME" git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" @@ -29,11 +29,12 @@ EOF trap finish EXIT unset GIT_DIR - CLONE="$(mktemp -d)" - git clone . "$CLONE" - cd "$CLONE" + REMOTE="$PWD" + cd "$(mktemp -d)" + git clone "$REMOTE" . git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' + git fetch origin refs/notes/*:refs/notes/* if [ -f aux/guix/with-container.sh ]; then RUNNER='./aux/guix/with-container.sh' diff --git a/sh/templates/aux/ci/report.sh b/sh/templates/aux/ci/report.sh new file mode 100755 index 0000000..b82c061 --- /dev/null +++ b/sh/templates/aux/ci/report.sh @@ -0,0 +1,69 @@ +#!/bin/sh +set -eu + +PROJECT_UC="$1" + +PASS='✅' +FAIL='❌' + +mkdir -p public/ci-logs public/ci-data + +OUT="$(mktemp)" +chmod 644 "$OUT" + +git fetch origin refs/notes/*:refs/notes/* ||: + +for c in $(git notes list | cut -d\ -f2); do + DATA="$(git notes --ref=refs/notes/ci-data show "$c")" + FILENAME="$(echo "$DATA" | cut -d\ -f2)" + echo "$DATA" > "public/ci-data/$FILENAME" + git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" +done + +cat <> "$OUT" + + + + + + + + + +

    + CI logs for $PROJECT_UC +

    +
      +EOF + +for f in $(find public/ci-data/ -type f | LANG=C.UTF-8 sort -r); do + DATA="$(cat "$f")" + STATUS="$(echo "$DATA" | cut -d\ -f1)" + FILENAME="$(echo "$DATA" | cut -d\ -f2)" + + if [ "$STATUS" = 0 ]; then + STATUS_MARKER="$PASS" + else + STATUS_MARKER="$FAIL" + fi + + cat <> "$OUT" +
    • + + $STATUS_MARKER
      $FILENAME
      +
      +
    • +EOF +done + +cat <> "$OUT" +
    + + +EOF + +mv "$OUT" public/ci.html diff --git a/sh/templates/aux/guix/manifest.scm b/sh/templates/aux/guix/manifest.scm index 7b508b6..9d3b266 100644 --- a/sh/templates/aux/guix/manifest.scm +++ b/sh/templates/aux/guix/manifest.scm @@ -14,4 +14,5 @@ perl shellcheck gettext + groff pandoc))) diff --git a/sh/templates/aux/workflow/preamble.md b/sh/templates/aux/workflow/preamble.md index c6ae56e..7413f58 100644 --- a/sh/templates/aux/workflow/preamble.md +++ b/sh/templates/aux/workflow/preamble.md @@ -2,7 +2,7 @@ TODOs for $PROJECT_UC. -See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/). +See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/) and [CI logs](https://$PROJECT.euandreh.xyz/ci.html). Register a new one at [~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) -- cgit v1.2.3 From d9a1dd9094dfe13bd7fd3557a097932396a026e4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 18 Feb 2021 00:16:46 -0300 Subject: fake-symlinks: Makefile.in: Use $(NAME) instead of $(NAME_UC) for report.sh --- sh/templates/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 89c7271..11059b6 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -77,6 +77,6 @@ public: README.md TODOs.md CHANGELOG.md sh aux/workflow/TODOs.sh '$(NAME_UC)' $(NAME) $(MAILING_LIST) sh aux/workflow/README.sh '$(NAME_UC)' $(NAME) sh aux/workflow/commonmark.sh $(NAME_UC)' CHANGELOG.md - sh aux/ci/report.sh '$(NAME_UC)' + sh aux/ci/report.sh '$(NAME)' .PHONY: all clean check dev-check dist install uninstall -- cgit v1.2.3 From 780e47bec0eda22ac613e351583203f80cfc12ba Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 18 Feb 2021 00:17:33 -0300 Subject: fake-symlinks.sh: ci-build.sh: Generate CI report after run finishes --- aux/ci/ci-build.sh | 5 +++++ sh/templates/aux/ci/ci-build.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 7e17a7c..87c4815 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -24,6 +24,11 @@ EOF git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME" git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" + + if [ -f ./aux/ci/report.sh ]; then + sh aux/ci/report.sh "$PACKAGE" + fi + printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" } trap finish EXIT diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 7e17a7c..87c4815 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -24,6 +24,11 @@ EOF git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME" git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" + + if [ -f ./aux/ci/report.sh ]; then + sh aux/ci/report.sh "$PACKAGE" + fi + printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" } trap finish EXIT -- cgit v1.2.3 From 6d4d35b1539141966385580b564d9b4f30d83707 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 18 Feb 2021 00:27:20 -0300 Subject: fake-symlinks: Finalize ci-build.sh and report.sh --- aux/ci/ci-build.sh | 2 ++ aux/ci/report.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 ++ sh/templates/aux/ci/report.sh | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 87c4815..1159204 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -25,8 +25,10 @@ EOF git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" + cd - if [ -f ./aux/ci/report.sh ]; then sh aux/ci/report.sh "$PACKAGE" + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete fi printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" diff --git a/aux/ci/report.sh b/aux/ci/report.sh index b82c061..cb7242f 100755 --- a/aux/ci/report.sh +++ b/aux/ci/report.sh @@ -1,5 +1,5 @@ #!/bin/sh -set -eu +set -eux PROJECT_UC="$1" diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 87c4815..1159204 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -25,8 +25,10 @@ EOF git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" + cd - if [ -f ./aux/ci/report.sh ]; then sh aux/ci/report.sh "$PACKAGE" + rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete fi printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" diff --git a/sh/templates/aux/ci/report.sh b/sh/templates/aux/ci/report.sh index b82c061..cb7242f 100755 --- a/sh/templates/aux/ci/report.sh +++ b/sh/templates/aux/ci/report.sh @@ -1,5 +1,5 @@ #!/bin/sh -set -eu +set -eux PROJECT_UC="$1" -- cgit v1.2.3 From 27539a915e43e34b5ae41ca5681b3fc1e1163ea2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 18 Feb 2021 00:33:36 -0300 Subject: report.sh: Remove set -x option --- aux/ci/report.sh | 2 +- sh/templates/aux/ci/report.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/ci/report.sh b/aux/ci/report.sh index cb7242f..b82c061 100755 --- a/aux/ci/report.sh +++ b/aux/ci/report.sh @@ -1,5 +1,5 @@ #!/bin/sh -set -eux +set -eu PROJECT_UC="$1" diff --git a/sh/templates/aux/ci/report.sh b/sh/templates/aux/ci/report.sh index cb7242f..b82c061 100755 --- a/sh/templates/aux/ci/report.sh +++ b/sh/templates/aux/ci/report.sh @@ -1,5 +1,5 @@ #!/bin/sh -set -eux +set -eu PROJECT_UC="$1" -- cgit v1.2.3 From a730d364ecaf1be7f3b78967d875af6326a7377c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 10:35:52 -0300 Subject: fake-symlinks: configure: print to stderr --- sh/templates/configure | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/configure b/sh/templates/configure index 24b4ff4..e8a56cf 100755 --- a/sh/templates/configure +++ b/sh/templates/configure @@ -31,7 +31,7 @@ Makefile ' for f in $OUT_FILES; do - printf 'generating "%s"...\n' "$f" + printf 'generating "%s"...\n' "$f" >&2 sed "$f.in" \ -e "s:@PREFIX@:$PREFIX:g" \ -e "s:@VERSION@:$VERSION:g" \ -- cgit v1.2.3 From d60df33cbf58d26a0b8f14f52453ee2c2fc540bf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 10:36:18 -0300 Subject: configuration.nix: Turn off docker --- configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index a38b2fa..d5932a4 100644 --- a/configuration.nix +++ b/configuration.nix @@ -104,8 +104,6 @@ in { # Set your time zone. time.timeZone = "America/Sao_Paulo"; - virtualisation.docker.enable = true; - fonts.fonts = with pkgs; [ source-code-pro fira-code -- cgit v1.2.3 From 90dc803cb0e237851c03116b52d91827e4b4e761 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 17:25:50 -0300 Subject: fake-symlinks.sh: Remove paky repository --- sh/fake-symlinks.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index adb5467..84cbd76 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -424,8 +424,7 @@ ln_all ln_makefile_only_guix_project vps \ sharedc \ standardify \ autoqemu \ - yoctoauth \ - paku + yoctoauth ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 88d2c0180abee900ed9d6d06d2a4f03ec47fc7d1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 18:56:55 -0300 Subject: fake-symlinks: Makefile.in: Fix variable name in install target --- sh/templates/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 11059b6..3fe7fce 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -58,7 +58,7 @@ install: all for m in $(manpages); do \ n=$${m##*.}; \ mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ - $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$s`.gz; \ + $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`.gz; \ done uninstall: -- cgit v1.2.3 From f3da6a86fd7fd4c713b7013f4a4f83fb2b11286d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 18:58:09 -0300 Subject: fake-symlinks: Makefile.in: Indent variable names --- sh/templates/Makefile.in | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 3fe7fce..6892de6 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -70,8 +70,8 @@ uninstall: clean: rm -rf public/ -NAME_UC = __PROJECT_UC__ -NAME = __PROJECT__ +NAME_UC = __PROJECT_UC__ +NAME = __PROJECT__ MAILING_LIST = __MAILING_LIST__ public: README.md TODOs.md CHANGELOG.md sh aux/workflow/TODOs.sh '$(NAME_UC)' $(NAME) $(MAILING_LIST) -- cgit v1.2.3 From af46a425b15b766bbceeaa94011761ad6f569cc2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 19:05:03 -0300 Subject: fake-symlinks.sh: Move mediator to proper project category --- sh/fake-symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 84cbd76..656293a 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -401,7 +401,6 @@ ln_all() { } # ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement songbooks -# ln_all ln_sphinx_autotools_guix_project mediator # ln_all ln_scribble_autotools_guix_project # ln_all ln_antora_autotools_guix_project byopds ln_all ln_description_foreign_project guix \ @@ -424,7 +423,8 @@ ln_all ln_makefile_only_guix_project vps \ sharedc \ standardify \ autoqemu \ - yoctoauth + yoctoauth \ + mediator ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 417603df4594f042580e65c430db219b54ddc398 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 19:53:16 -0300 Subject: fake-symlinks: Makefile.in: Fix typo on missing single-quote --- sh/templates/Makefile.in | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index 6892de6..d4a59da 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -76,7 +76,7 @@ MAILING_LIST = __MAILING_LIST__ public: README.md TODOs.md CHANGELOG.md sh aux/workflow/TODOs.sh '$(NAME_UC)' $(NAME) $(MAILING_LIST) sh aux/workflow/README.sh '$(NAME_UC)' $(NAME) - sh aux/workflow/commonmark.sh $(NAME_UC)' CHANGELOG.md + sh aux/workflow/commonmark.sh '$(NAME_UC)' CHANGELOG.md sh aux/ci/report.sh '$(NAME)' .PHONY: all clean check dev-check dist install uninstall -- cgit v1.2.3 From d3c8b6dc9aae38262050a184916f7c18d3c56cd8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 20:17:04 -0300 Subject: TODOs.md: Add #task-18eb3dfe-c667-4d18-967c-d406a28e94be --- TODOs.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/TODOs.md b/TODOs.md index 017c0a1..4e90150 100644 --- a/TODOs.md +++ b/TODOs.md @@ -1,5 +1,8 @@ # Tasks +## TODO Support tags in tasks? {#task-18eb3dfe-c667-4d18-967c-d406a28e94be} +- TODO in 2021-02-19 + # Bugs # Improvements -- cgit v1.2.3 From ee1c6a9d34ead494eb777b35fe705a81b3d935a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 19 Feb 2021 20:24:24 -0300 Subject: gc.sh: Conditionally GC docker things --- scripts/gc.sh | 19 ++++++++++--------- 1 file changed, 10 insertions(+), 9 deletions(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index 3ea5b52..71505ee 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -23,19 +23,20 @@ sudo rm -rf ~/.local/share/Trash/files/* # https://askubuntu.com/a/609396 sudo find /tmp -type f -atime +10 -delete +if which docker; then -yellow "Erasing docker images\n" -set -x + yellow "Erasing docker images\n" -echo y | docker system prune -a -docker rmi "$(docker images -a -q)" ||: -docker rm "$(docker ps -a -f status=exited -q)" ||: + echo y | docker system prune -a + docker rmi "$(docker images -a -q)" ||: + docker rm "$(docker ps -a -f status=exited -q)" ||: -docker stop "$(docker ps -a -q)" ||: -docker rm "$(docker ps -a -q)" ||: + docker stop "$(docker ps -a -q)" ||: + docker rm "$(docker ps -a -q)" ||: -echo y | docker volume prune -echo y | docker container prune + echo y | docker volume prune + echo y | docker container prune +fi gc-mail.sh -- cgit v1.2.3 From df3f888ab57a8efd67a84a630b5fbf9ae8554c86 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 00:19:06 -0300 Subject: fake-symlinks.sh: Move songbooks category --- sh/fake-symlinks.sh | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 656293a..8d4e390 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -400,7 +400,7 @@ ln_all() { done } -# ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement songbooks +# ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement # ln_all ln_scribble_autotools_guix_project # ln_all ln_antora_autotools_guix_project byopds ln_all ln_description_foreign_project guix \ @@ -424,7 +424,8 @@ ln_all ln_makefile_only_guix_project vps \ standardify \ autoqemu \ yoctoauth \ - mediator + mediator \ + songbooks ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From c208e5d71a8651a1ed6415bbbe0caa2f359b104c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 01:23:29 -0300 Subject: configuration.nix: Add xyz-euandreh.fallible dependency --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index d5932a4..7601f2a 100644 --- a/configuration.nix +++ b/configuration.nix @@ -299,6 +299,7 @@ in { ## EuAndreh overlay xyz-euandreh.remembering xyz-euandreh.autoqemu + xyz-euandreh.fallible ## GUI programs audacity -- cgit v1.2.3 From 922eee7ecc8d36c1de378b0a06fd797e936c771f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 11:49:20 -0300 Subject: fake-symlinks.sh: Remove commented projects --- sh/fake-symlinks.sh | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 8d4e390..4153ae9 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -400,9 +400,6 @@ ln_all() { done } -# ln_all ln_texinfo_autotools_guix_project guile-quickcheck guile-pds cement -# ln_all ln_scribble_autotools_guix_project -# ln_all ln_antora_autotools_guix_project byopds ln_all ln_description_foreign_project guix \ apollo-server-demo \ ml-archives \ @@ -425,7 +422,11 @@ ln_all ln_makefile_only_guix_project vps \ autoqemu \ yoctoauth \ mediator \ - songbooks + songbooks \ + cement \ + guile-quickcheck \ + guile-pds \ + byopds ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From d9cd3da3df397494882f55765ad405548087f63c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 11:49:52 -0300 Subject: fake-symlinks.sh: Align list of projects --- sh/fake-symlinks.sh | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 4153ae9..057e051 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -407,22 +407,22 @@ ln_all ln_description_foreign_project guix \ ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ package-repository -ln_all ln_makefile_only_guix_project vps \ - pires \ - remembering \ - website \ - dotfiles \ - gluilo \ - konformigado \ - libedn \ - eq \ - fallible \ - sharedc \ - standardify \ - autoqemu \ - yoctoauth \ - mediator \ - songbooks \ +ln_all ln_makefile_only_guix_project vps \ + pires \ + remembering \ + website \ + dotfiles \ + gluilo \ + konformigado \ + libedn \ + eq \ + fallible \ + sharedc \ + standardify \ + autoqemu \ + yoctoauth \ + mediator \ + songbooks \ cement \ guile-quickcheck \ guile-pds \ -- cgit v1.2.3 From 9a7f7eb10d5f13590e2d476cc0642c12dcd43ca3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 15:50:06 -0300 Subject: fake-symlinks: Remove configure.ac --- sh/templates/configure.ac | 25 ------------------------- 1 file changed, 25 deletions(-) delete mode 100644 sh/templates/configure.ac diff --git a/sh/templates/configure.ac b/sh/templates/configure.ac deleted file mode 100644 index 79079ec..0000000 --- a/sh/templates/configure.ac +++ /dev/null @@ -1,25 +0,0 @@ -AC_PREREQ([2.69]) -AC_INIT([__PROJECT__], - [v0.0.0], - [~euandreh/__MAILING_LIST__@lists.sr.ht], - [__PROJECT__], - [https://__PROJECT__.euandreh.xyz]) -AC_CONFIG_SRCDIR([FIXME]) -AC_CONFIG_AUX_DIR([build-aux]) -AC_CONFIG_MACRO_DIR([m4]) -AM_INIT_AUTOMAKE([-Wall -Werror parallel-tests subdir-objects]) - -EU_PROGRAMMER_MODE -AM_MISSING_PROG([GUIX], [guix]) - -TLD="euandreh.xyz" -EU_LINKS - -AC_CONFIG_FILES([Makefile - README - guix/channel/xyz/euandreh/__PROJECT__/channel.scm - build-aux/workflow/preamble.org]) - -AC_CONFIG_FILES([build-aux/ci/git-pre-push.sh], [chmod +x build-aux/ci/git-pre-push.sh]) - -AC_OUTPUT -- cgit v1.2.3 From 60de8ea1408e4cebfdc60cf83670229fe7ed4d23 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 15:50:33 -0300 Subject: fake-symlinks: Remove INSTALL --- sh/templates/INSTALL | 368 --------------------------------------------------- 1 file changed, 368 deletions(-) delete mode 100644 sh/templates/INSTALL diff --git a/sh/templates/INSTALL b/sh/templates/INSTALL deleted file mode 100644 index 8865734..0000000 --- a/sh/templates/INSTALL +++ /dev/null @@ -1,368 +0,0 @@ -Installation Instructions -************************* - - Copyright (C) 1994-1996, 1999-2002, 2004-2016 Free Software -Foundation, Inc. - - Copying and distribution of this file, with or without modification, -are permitted in any medium without royalty provided the copyright -notice and this notice are preserved. This file is offered as-is, -without warranty of any kind. - -Basic Installation -================== - - Briefly, the shell command './configure && make && make install' -should configure, build, and install this package. The following -more-detailed instructions are generic; see the 'README' file for -instructions specific to this package. Some packages provide this -'INSTALL' file but do not implement all of the features documented -below. The lack of an optional feature in a given package is not -necessarily a bug. More recommendations for GNU packages can be found -in *note Makefile Conventions: (standards)Makefile Conventions. - - The 'configure' shell script attempts to guess correct values for -various system-dependent variables used during compilation. It uses -those values to create a 'Makefile' in each directory of the package. -It may also create one or more '.h' files containing system-dependent -definitions. Finally, it creates a shell script 'config.status' that -you can run in the future to recreate the current configuration, and a -file 'config.log' containing compiler output (useful mainly for -debugging 'configure'). - - It can also use an optional file (typically called 'config.cache' and -enabled with '--cache-file=config.cache' or simply '-C') that saves the -results of its tests to speed up reconfiguring. Caching is disabled by -default to prevent problems with accidental use of stale cache files. - - If you need to do unusual things to compile the package, please try -to figure out how 'configure' could check whether to do them, and mail -diffs or instructions to the address given in the 'README' so they can -be considered for the next release. If you are using the cache, and at -some point 'config.cache' contains results you don't want to keep, you -may remove or edit it. - - The file 'configure.ac' (or 'configure.in') is used to create -'configure' by a program called 'autoconf'. You need 'configure.ac' if -you want to change it or regenerate 'configure' using a newer version of -'autoconf'. - - The simplest way to compile this package is: - - 1. 'cd' to the directory containing the package's source code and type - './configure' to configure the package for your system. - - Running 'configure' might take a while. While running, it prints - some messages telling which features it is checking for. - - 2. Type 'make' to compile the package. - - 3. Optionally, type 'make check' to run any self-tests that come with - the package, generally using the just-built uninstalled binaries. - - 4. Type 'make install' to install the programs and any data files and - documentation. When installing into a prefix owned by root, it is - recommended that the package be configured and built as a regular - user, and only the 'make install' phase executed with root - privileges. - - 5. Optionally, type 'make installcheck' to repeat any self-tests, but - this time using the binaries in their final installed location. - This target does not install anything. Running this target as a - regular user, particularly if the prior 'make install' required - root privileges, verifies that the installation completed - correctly. - - 6. You can remove the program binaries and object files from the - source code directory by typing 'make clean'. To also remove the - files that 'configure' created (so you can compile the package for - a different kind of computer), type 'make distclean'. There is - also a 'make maintainer-clean' target, but that is intended mainly - for the package's developers. If you use it, you may have to get - all sorts of other programs in order to regenerate files that came - with the distribution. - - 7. Often, you can also type 'make uninstall' to remove the installed - files again. In practice, not all packages have tested that - uninstallation works correctly, even though it is required by the - GNU Coding Standards. - - 8. Some packages, particularly those that use Automake, provide 'make - distcheck', which can by used by developers to test that all other - targets like 'make install' and 'make uninstall' work correctly. - This target is generally not run by end users. - -Compilers and Options -===================== - - Some systems require unusual options for compilation or linking that -the 'configure' script does not know about. Run './configure --help' -for details on some of the pertinent environment variables. - - You can give 'configure' initial values for configuration parameters -by setting variables in the command line or in the environment. Here is -an example: - - ./configure CC=c99 CFLAGS=-g LIBS=-lposix - - *Note Defining Variables::, for more details. - -Compiling For Multiple Architectures -==================================== - - You can compile the package for more than one kind of computer at the -same time, by placing the object files for each architecture in their -own directory. To do this, you can use GNU 'make'. 'cd' to the -directory where you want the object files and executables to go and run -the 'configure' script. 'configure' automatically checks for the source -code in the directory that 'configure' is in and in '..'. This is known -as a "VPATH" build. - - With a non-GNU 'make', it is safer to compile the package for one -architecture at a time in the source code directory. After you have -installed the package for one architecture, use 'make distclean' before -reconfiguring for another architecture. - - On MacOS X 10.5 and later systems, you can create libraries and -executables that work on multiple system types--known as "fat" or -"universal" binaries--by specifying multiple '-arch' options to the -compiler but only a single '-arch' option to the preprocessor. Like -this: - - ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ - CPP="gcc -E" CXXCPP="g++ -E" - - This is not guaranteed to produce working output in all cases, you -may have to build one architecture at a time and combine the results -using the 'lipo' tool if you have problems. - -Installation Names -================== - - By default, 'make install' installs the package's commands under -'/usr/local/bin', include files under '/usr/local/include', etc. You -can specify an installation prefix other than '/usr/local' by giving -'configure' the option '--prefix=PREFIX', where PREFIX must be an -absolute file name. - - You can specify separate installation prefixes for -architecture-specific files and architecture-independent files. If you -pass the option '--exec-prefix=PREFIX' to 'configure', the package uses -PREFIX as the prefix for installing programs and libraries. -Documentation and other data files still use the regular prefix. - - In addition, if you use an unusual directory layout you can give -options like '--bindir=DIR' to specify different values for particular -kinds of files. Run 'configure --help' for a list of the directories -you can set and what kinds of files go in them. In general, the default -for these options is expressed in terms of '${prefix}', so that -specifying just '--prefix' will affect all of the other directory -specifications that were not explicitly provided. - - The most portable way to affect installation locations is to pass the -correct locations to 'configure'; however, many packages provide one or -both of the following shortcuts of passing variable assignments to the -'make install' command line to change installation locations without -having to reconfigure or recompile. - - The first method involves providing an override variable for each -affected directory. For example, 'make install -prefix=/alternate/directory' will choose an alternate location for all -directory configuration variables that were expressed in terms of -'${prefix}'. Any directories that were specified during 'configure', -but not in terms of '${prefix}', must each be overridden at install time -for the entire installation to be relocated. The approach of makefile -variable overrides for each directory variable is required by the GNU -Coding Standards, and ideally causes no recompilation. However, some -platforms have known limitations with the semantics of shared libraries -that end up requiring recompilation when using this method, particularly -noticeable in packages that use GNU Libtool. - - The second method involves providing the 'DESTDIR' variable. For -example, 'make install DESTDIR=/alternate/directory' will prepend -'/alternate/directory' before all installation names. The approach of -'DESTDIR' overrides is not required by the GNU Coding Standards, and -does not work on platforms that have drive letters. On the other hand, -it does better at avoiding recompilation issues, and works well even -when some directory options were not specified in terms of '${prefix}' -at 'configure' time. - -Optional Features -================= - - If the package supports it, you can cause programs to be installed -with an extra prefix or suffix on their names by giving 'configure' the -option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. - - Some packages pay attention to '--enable-FEATURE' options to -'configure', where FEATURE indicates an optional part of the package. -They may also pay attention to '--with-PACKAGE' options, where PACKAGE -is something like 'gnu-as' or 'x' (for the X Window System). The -'README' should mention any '--enable-' and '--with-' options that the -package recognizes. - - For packages that use the X Window System, 'configure' can usually -find the X include and library files automatically, but if it doesn't, -you can use the 'configure' options '--x-includes=DIR' and -'--x-libraries=DIR' to specify their locations. - - Some packages offer the ability to configure how verbose the -execution of 'make' will be. For these packages, running './configure ---enable-silent-rules' sets the default to minimal output, which can be -overridden with 'make V=1'; while running './configure ---disable-silent-rules' sets the default to verbose, which can be -overridden with 'make V=0'. - -Particular systems -================== - - On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC -is not installed, it is recommended to use the following options in -order to use an ANSI C compiler: - - ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" - -and if that doesn't work, install pre-built binaries of GCC for HP-UX. - - HP-UX 'make' updates targets which have the same time stamps as their -prerequisites, which makes it generally unusable when shipped generated -files such as 'configure' are involved. Use GNU 'make' instead. - - On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot -parse its '' header file. The option '-nodtk' can be used as a -workaround. If GNU CC is not installed, it is therefore recommended to -try - - ./configure CC="cc" - -and if that doesn't work, try - - ./configure CC="cc -nodtk" - - On Solaris, don't put '/usr/ucb' early in your 'PATH'. This -directory contains several dysfunctional programs; working variants of -these programs are available in '/usr/bin'. So, if you need '/usr/ucb' -in your 'PATH', put it _after_ '/usr/bin'. - - On Haiku, software installed for all users goes in '/boot/common', -not '/usr/local'. It is recommended to use the following options: - - ./configure --prefix=/boot/common - -Specifying the System Type -========================== - - There may be some features 'configure' cannot figure out -automatically, but needs to determine by the type of machine the package -will run on. Usually, assuming the package is built to be run on the -_same_ architectures, 'configure' can figure that out, but if it prints -a message saying it cannot guess the machine type, give it the -'--build=TYPE' option. TYPE can either be a short name for the system -type, such as 'sun4', or a canonical name which has the form: - - CPU-COMPANY-SYSTEM - -where SYSTEM can have one of these forms: - - OS - KERNEL-OS - - See the file 'config.sub' for the possible values of each field. If -'config.sub' isn't included in this package, then this package doesn't -need to know the machine type. - - If you are _building_ compiler tools for cross-compiling, you should -use the option '--target=TYPE' to select the type of system they will -produce code for. - - If you want to _use_ a cross compiler, that generates code for a -platform different from the build platform, you should specify the -"host" platform (i.e., that on which the generated programs will -eventually be run) with '--host=TYPE'. - -Sharing Defaults -================ - - If you want to set default values for 'configure' scripts to share, -you can create a site shell script called 'config.site' that gives -default values for variables like 'CC', 'cache_file', and 'prefix'. -'configure' looks for 'PREFIX/share/config.site' if it exists, then -'PREFIX/etc/config.site' if it exists. Or, you can set the -'CONFIG_SITE' environment variable to the location of the site script. -A warning: not all 'configure' scripts look for a site script. - -Defining Variables -================== - - Variables not defined in a site shell script can be set in the -environment passed to 'configure'. However, some packages may run -configure again during the build, and the customized values of these -variables may be lost. In order to avoid this problem, you should set -them in the 'configure' command line, using 'VAR=value'. For example: - - ./configure CC=/usr/local2/bin/gcc - -causes the specified 'gcc' to be used as the C compiler (unless it is -overridden in the site shell script). - -Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an -Autoconf limitation. Until the limitation is lifted, you can use this -workaround: - - CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash - -'configure' Invocation -====================== - - 'configure' recognizes the following options to control how it -operates. - -'--help' -'-h' - Print a summary of all of the options to 'configure', and exit. - -'--help=short' -'--help=recursive' - Print a summary of the options unique to this package's - 'configure', and exit. The 'short' variant lists options used only - in the top level, while the 'recursive' variant lists options also - present in any nested packages. - -'--version' -'-V' - Print the version of Autoconf used to generate the 'configure' - script, and exit. - -'--cache-file=FILE' - Enable the cache: use and save the results of the tests in FILE, - traditionally 'config.cache'. FILE defaults to '/dev/null' to - disable caching. - -'--config-cache' -'-C' - Alias for '--cache-file=config.cache'. - -'--quiet' -'--silent' -'-q' - Do not print messages saying which checks are being made. To - suppress all normal output, redirect it to '/dev/null' (any error - messages will still be shown). - -'--srcdir=DIR' - Look for the package's source code in directory DIR. Usually - 'configure' can determine that directory automatically. - -'--prefix=DIR' - Use DIR as the installation prefix. *note Installation Names:: for - more details, including other options available for fine-tuning the - installation locations. - -'--no-create' -'-n' - Run the configure checks, but stop before creating any output - files. - -'configure' also accepts some other, not widely useful, options. Run -'configure --help' for more details. -- cgit v1.2.3 From c452f4eb846fbbdc5111abed48652179bf7930ef Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 16:28:17 -0300 Subject: ~/.cache/andreh -> ~/.cache/euandreh --- sh/aliases.sh | 2 +- xmonad/scripts/rotate-mpris-player.sh | 4 ++-- xmonad/scripts/xmobar-mpris.sh | 2 +- xmonad/xmonad.hs | 10 +++++----- 4 files changed, 9 insertions(+), 9 deletions(-) diff --git a/sh/aliases.sh b/sh/aliases.sh index 6a83d54..0a1bb22 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -19,7 +19,7 @@ alias mm="mbsync -A && notmuch new" alias m="mbsync EuAndreh && notmuch new" alias n='neomutt' alias p='ping euandre.org -c 3' -alias playerctl="playerctl --player=\"\$(cat ~/.cache/andreh/mpris-player.txt)\"" +alias playerctl="playerctl --player=\"\$(cat ~/.cache/euandreh/mpris-player.txt)\"" alias mux="tmuxinator start" alias s="git status" alias d="git diff" diff --git a/xmonad/scripts/rotate-mpris-player.sh b/xmonad/scripts/rotate-mpris-player.sh index cc47284..fccc338 100755 --- a/xmonad/scripts/rotate-mpris-player.sh +++ b/xmonad/scripts/rotate-mpris-player.sh @@ -1,8 +1,8 @@ #!/bin/sh set -eu -mkdir -p "$HOME/.cache/andreh/" -CURRENT_PLAYER_PATH="$HOME/.cache/andreh/mpris-player.txt" +mkdir -p "$HOME/.cache/euandreh/" +CURRENT_PLAYER_PATH="$HOME/.cache/euandreh/mpris-player.txt" AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" CURRENT_PLAYER="$(cat "$CURRENT_PLAYER_PATH" ||:)" diff --git a/xmonad/scripts/xmobar-mpris.sh b/xmonad/scripts/xmobar-mpris.sh index 0b06004..4e8fd28 100755 --- a/xmonad/scripts/xmobar-mpris.sh +++ b/xmonad/scripts/xmobar-mpris.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -CUR_PATH="$HOME/.cache/andreh/mpris-player.txt" +CUR_PATH="$HOME/.cache/euandreh/mpris-player.txt" mkdir -p "$(dirname "$CUR_PATH")" touch "$CUR_PATH" diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 8dcf008..f43266c 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -37,12 +37,12 @@ myKeyPBindings = , ("", spawn "amixer -q sset Master 5%+ unmute") -- Playback - , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5-") - , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) previous") - , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) play-pause") + , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5-") + , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) previous") + , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) play-pause") , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/rotate-mpris-player.sh") - , ("", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) position 5+") - , ("S-", spawn "playerctl --player=$(cat ~/.cache/andreh/mpris-player.txt) next") + , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5+") + , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) next") -- Brightness , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh -10") -- cgit v1.2.3 From f0e3ea40be44cbf1e899a4f33df026af7b677fa5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 16:52:53 -0300 Subject: Use solution that is both more elegant AND faster for xmobar-mpris stuff --- xmonad/scripts/playerctl-play-pause.sh | 14 ++++++++++++++ xmonad/scripts/rotate-mpris-player.sh | 2 ++ xmonad/scripts/xmobar-mpris.sh | 12 ++---------- xmonad/xmonad.hs | 2 +- 4 files changed, 19 insertions(+), 11 deletions(-) create mode 100755 xmonad/scripts/playerctl-play-pause.sh diff --git a/xmonad/scripts/playerctl-play-pause.sh b/xmonad/scripts/playerctl-play-pause.sh new file mode 100755 index 0000000..a24733a --- /dev/null +++ b/xmonad/scripts/playerctl-play-pause.sh @@ -0,0 +1,14 @@ +#!/bin/sh + +if [ -z "${1:-}" ]; then + playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" play-pause +fi + +if [ "$(playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" status)" = 'Paused' ]; then + cat ~/.cache/euandreh/mpris-player.txt >> ~/.cache/euandreh/mpris-player-xmobar.txt +elif [ "$(playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" status)" = 'Playing' ]; then + printf '%s: %s\n' \ + "$(cat ~/.cache/euandreh/mpris-player.txt)" \ + "$(playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" metadata xesam:title)" \ + >> ~/.cache/euandreh/mpris-player-xmobar.txt +fi diff --git a/xmonad/scripts/rotate-mpris-player.sh b/xmonad/scripts/rotate-mpris-player.sh index fccc338..ce93e95 100755 --- a/xmonad/scripts/rotate-mpris-player.sh +++ b/xmonad/scripts/rotate-mpris-player.sh @@ -26,3 +26,5 @@ else echo "$AVAILABLE_PLAYERS" | awk -v idx="$INDEX" 'NR == idx+1 {print}' > "$CURRENT_PLAYER_PATH" fi fi + +sh ~/dev/libre/dotfiles/xmonad/scripts/playerctl-play-pause.sh --refresh-only diff --git a/xmonad/scripts/xmobar-mpris.sh b/xmonad/scripts/xmobar-mpris.sh index 4e8fd28..3ac4886 100755 --- a/xmonad/scripts/xmobar-mpris.sh +++ b/xmonad/scripts/xmobar-mpris.sh @@ -1,16 +1,8 @@ #!/bin/sh set -eu -CUR_PATH="$HOME/.cache/euandreh/mpris-player.txt" +CUR_PATH="$HOME/.cache/euandreh/mpris-player-xmobar.txt" mkdir -p "$(dirname "$CUR_PATH")" touch "$CUR_PATH" -while true; do - CUR="$(cat "$CUR_PATH")" - if [ "$(playerctl --player="$CUR" status)" = 'Paused' ]; then - printf '%s\n' "$CUR" - else - printf "%s: %s\n" "$CUR" "$(playerctl --player="$CUR" metadata xesam:title)" - fi - sleep 1 -done +tail -f "$CUR_PATH" 2> /dev/null diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index f43266c..6410b05 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -39,7 +39,7 @@ myKeyPBindings = -- Playback , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5-") , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) previous") - , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) play-pause") + , ("", spawn "~/dev/libre/dotfiles/xmonad/scripts/playerctl-play-pause.sh") , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/rotate-mpris-player.sh") , ("", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5+") , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) next") -- cgit v1.2.3 From a98ac34e479b4beeff29126b1abbedf5b5a71d1d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 17:09:41 -0300 Subject: Add minimalistic notifications with xmobar --- scripts/notify | 10 ++++++++++ xmonad/scripts/xmobar-notifications.sh | 8 ++++++++ xmonad/xmobar.hs | 3 ++- 3 files changed, 20 insertions(+), 1 deletion(-) create mode 100755 scripts/notify create mode 100755 xmonad/scripts/xmobar-notifications.sh diff --git a/scripts/notify b/scripts/notify new file mode 100755 index 0000000..984c7ac --- /dev/null +++ b/scripts/notify @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +# Derived from: +# https://unix.stackexchange.com/questions/61205/how-to-supress-the-display-of-previous-job-details +( ( + echo "$1" > ~/.cache/euandreh/xmobar-notifications.txt + sleep 10 + echo "" > ~/.cache/euandreh/xmobar-notifications.txt +) &) diff --git a/xmonad/scripts/xmobar-notifications.sh b/xmonad/scripts/xmobar-notifications.sh new file mode 100755 index 0000000..d05a2d4 --- /dev/null +++ b/xmonad/scripts/xmobar-notifications.sh @@ -0,0 +1,8 @@ +#!/bin/sh +set -eu + +CUR_PATH="$HOME/.cache/euandreh/xmobar-notifications.txt" +mkdir -p "$(dirname "$CUR_PATH")" +touch "$CUR_PATH" + +tail -f "$CUR_PATH" 2> /dev/null diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 459fe9d..2107ed6 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -19,7 +19,8 @@ Config { "-l", "red"] 10 , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-mpris.sh" "mpris" + , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notifications.sh" "notifications" , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notmuch.sh" "notmuch" ] - , template = " %date% | %default:Master%| %mpris% } { | %notmuch% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " + , template = " %date% | %default:Master%| %mpris% } { %notifications% | %notmuch% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From 250117393a0503f66bb5a10cd0199f8748d32cda Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 20:34:00 -0300 Subject: fake-symlinks: aux/workflow/: Support tags in TODOs.md --- aux/workflow/TODOs.sh | 11 ++++++++--- aux/workflow/style.css | 10 +++++++++- sh/templates/aux/workflow/TODOs.sh | 11 ++++++++--- sh/templates/aux/workflow/style.css | 10 +++++++++- 4 files changed, 34 insertions(+), 8 deletions(-) diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh index 5dbc761..00fef6f 100755 --- a/aux/workflow/TODOs.sh +++ b/aux/workflow/TODOs.sh @@ -7,10 +7,15 @@ export PROJECT_UC="$1" export PROJECT="$2" export MAILING_LIST="$3" -REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' +TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' -envsubst < aux/workflow/preamble.md | \ - printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ +TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' + +envsubst < aux/workflow/preamble.md | \ + printf '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | \ + perl -pe "$TAGS_REGEX")" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ diff --git a/aux/workflow/style.css b/aux/workflow/style.css index ac0144c..d7935d0 100644 --- a/aux/workflow/style.css +++ b/aux/workflow/style.css @@ -3,10 +3,18 @@ background-color: #ccc; } - span.header-anchor { + div.header-anchor { opacity: 0.5; } + span.tag { + font-family: monospace; + font-size: 70%; + background-color: lightgray; + padding: 3px; + border-radius: 5px; + } + /* Replicate colors from: https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866 diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh index 5dbc761..00fef6f 100755 --- a/sh/templates/aux/workflow/TODOs.sh +++ b/sh/templates/aux/workflow/TODOs.sh @@ -7,10 +7,15 @@ export PROJECT_UC="$1" export PROJECT="$2" export MAILING_LIST="$3" -REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' +TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' -envsubst < aux/workflow/preamble.md | \ - printf '%s\n\n%s' "$(cat -)" "$(perl -pe "$REGEX" TODOs.md)" | \ +TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' + +envsubst < aux/workflow/preamble.md | \ + printf '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | \ + perl -pe "$TAGS_REGEX")" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ diff --git a/sh/templates/aux/workflow/style.css b/sh/templates/aux/workflow/style.css index ac0144c..d7935d0 100644 --- a/sh/templates/aux/workflow/style.css +++ b/sh/templates/aux/workflow/style.css @@ -3,10 +3,18 @@ background-color: #ccc; } - span.header-anchor { + div.header-anchor { opacity: 0.5; } + span.tag { + font-family: monospace; + font-size: 70%; + background-color: lightgray; + padding: 3px; + border-radius: 5px; + } + /* Replicate colors from: https://git.euandreh.xyz/dotfiles/tree/spacemacs.el?id=fcd9f9c4ef399d45d54927382dc1cdde251ebb0a#n866 -- cgit v1.2.3 From c626462e6e65831e2ccc24f33bf452f1f80af2d6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 21:00:45 -0300 Subject: fake-symlinks.sh: Add discussions-page --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 057e051..2973e24 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -426,7 +426,8 @@ ln_all ln_makefile_only_guix_project vps \ cement \ guile-quickcheck \ guile-pds \ - byopds + byopds \ + discussions-page ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 1f3d0380dc058b7eb116327ac27f484930d86c85 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 20 Feb 2021 22:01:54 -0300 Subject: fake-symlinks.sh: Assert public keys are in sync --- sh/fake-symlinks.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 2973e24..a59e3a2 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -18,6 +18,8 @@ for job in pacheco; do chmod +x "$HOME/annex/bin/cron/generated/$job-job.sh" done +cp ~/dev/libre/package-repository/EuAndreh.key ~/dev/libre/website/public-key.txt + mkdir -p ~/archive/torrent/ find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; -- cgit v1.2.3 From 033a108ad18008c7da4cb7ca7642dec883006298 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 00:46:49 -0300 Subject: aux/guix/: Use upstream nixfmt --- aux/guix/manifest.scm | 2 +- aux/guix/pinned-channels.scm | 12 +----------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm index e8c1cd1..914d0dc 100644 --- a/aux/guix/manifest.scm +++ b/aux/guix/manifest.scm @@ -15,4 +15,4 @@ shellcheck pandoc clang - nixfmt))) + ghc-nixfmt))) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index 0a58742..a619cfd 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -1,19 +1,9 @@ (list - ;; used for nixfmt - (channel - (name 'xyz-euandreh) - (url "git://git.euandreh.xyz/package-repository") - (branch "main") - (introduction - (make-channel-introduction - "d749e053e6db365069cb9b2ef47a78b06f9e7361" - (openpgp-fingerprint - "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "d265809b782293eb42dd663b4611ca19dd2bf1b3") + "5ab0ca056691aaf88570a8c719e0104ab0a17c48") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From abfe96744eabafd5e103ce7152618d57f62ef2c0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 00:51:56 -0300 Subject: s/discussions-page/discussions-site/g --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index a59e3a2..05c0e2c 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -429,7 +429,7 @@ ln_all ln_makefile_only_guix_project vps \ guile-quickcheck \ guile-pds \ byopds \ - discussions-page + discussions-site ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 5a0811f2f3a7d1a615bb8674a0dd63305c22ab66 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 01:15:12 -0300 Subject: fake-symlinks: Update commit for pinned-channels.scm --- sh/templates/aux/guix/pinned-channels.scm | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm index f8269ff..a619cfd 100644 --- a/sh/templates/aux/guix/pinned-channels.scm +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -3,7 +3,7 @@ (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "f2130228ed86fed81806a662ed59aa74ed2398ed") + "5ab0ca056691aaf88570a8c719e0104ab0a17c48") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From 88e7949718e81c056920830a3f4534d94f5d82b3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 15:34:45 -0300 Subject: s/vps/servers/g --- sh/fake-symlinks.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 05c0e2c..43ee032 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -347,7 +347,7 @@ ln_description_foreign_project() { } declare -A PROJECT_NAMES=( - [vps]=VPS + [servers]=Servers [cement]=Cement [songbooks]=Songbooks [mediator]=Mediator @@ -409,7 +409,7 @@ ln_all ln_description_foreign_project guix \ ln_all ln_makefile_only_project boneco \ pdfs-da-d-maria \ package-repository -ln_all ln_makefile_only_guix_project vps \ +ln_all ln_makefile_only_guix_project servers \ pires \ remembering \ website \ -- cgit v1.2.3 From 8cc56b6a21cee57b6840754fa9104ac78847dc4a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 15:35:10 -0300 Subject: fake-symlinks: ci-build.sh: Add git annex get command --- aux/ci/ci-build.sh | 1 + sh/templates/aux/ci/ci-build.sh | 1 + 2 files changed, 2 insertions(+) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 1159204..311abf9 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -42,6 +42,7 @@ EOF git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' git fetch origin refs/notes/*:refs/notes/* + git annex get ||: if [ -f aux/guix/with-container.sh ]; then RUNNER='./aux/guix/with-container.sh' diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 1159204..311abf9 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -42,6 +42,7 @@ EOF git config --global user.email git@euandre.org git config --global user.name 'EuAndreh CI' git fetch origin refs/notes/*:refs/notes/* + git annex get ||: if [ -f aux/guix/with-container.sh ]; then RUNNER='./aux/guix/with-container.sh' -- cgit v1.2.3 From 9fba5a28c966f3e7b57a0a76be508f2e48db709c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 21:19:54 -0300 Subject: fake-symlinks: Move "dist" target to aux/workflow/dist.sh --- sh/fake-symlinks.sh | 9 +++++---- sh/templates/Makefile.in | 12 +----------- sh/templates/aux/workflow/dist.sh | 17 +++++++++++++++++ 3 files changed, 23 insertions(+), 15 deletions(-) create mode 100755 sh/templates/aux/workflow/dist.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 43ee032..b6f0ac6 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -160,9 +160,9 @@ ln_env() { fi if [ -f "$PREFIX/CHANGELOG.md" ]; then - ENABLE_COMMONMARK_SH=1 + ENABLE_CHANGELOG=1 else - ENABLE_COMMONMARK_SH= + ENABLE_CHANGELOG= fi if [ -f "$PREFIX/configure" ] && [ ! -x "$PREFIX/configure" ]; then @@ -194,8 +194,9 @@ ln_build_aux() { cp_all aux/workflow/README.sh fi - if [ "$ENABLE_COMMONMARK_SH" ]; then - cp_all aux/workflow/commonmark.sh + if [ "$ENABLE_CHANGELOG" ]; then + cp_all aux/workflow/commonmark.sh \ + aux/workflow/dist.sh fi cp_if_not TODOs.md diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in index d4a59da..f622dcc 100644 --- a/sh/templates/Makefile.in +++ b/sh/templates/Makefile.in @@ -35,17 +35,7 @@ dev-check: sh aux/workflow/assert-todos.sh dist: - if git show v$(VERSION) 1>/dev/null 2>/dev/null; then \ - echo 'Version "v$(VERSION)" already exists.'; \ - exit 1; \ - fi - - if [ '$(DATE)' != "$$(git log -1 --format=%cd --date=short HEAD)" ]; then \ - echo 'Date "$(DATE)" is not up-to-date.'; \ - exit 1; \ - fi - - git tag v$(VERSION) + sh aux/workflow/dist.sh $(DATE) $(VERSION) do_subst = sed \ -e 's:[@]VERSION[@]:$(VERSION):g' \ diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh new file mode 100755 index 0000000..bc01a8f --- /dev/null +++ b/sh/templates/aux/workflow/dist.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +DATE="$1" +VERSION="v$2" + +if git show "$VERSION" 1>/dev/null 2>/dev/null; then + echo 'Version "$VERSION" already exists.' + exit 1 +fi + +if [ '$DATE' != "$(git log -1 --format=%cd --date=short HEAD)" ]; then + echo 'Date "$DATE" is not up-to-date.' + exit 1 +fi + +git tag "$VERSION" -- cgit v1.2.3 From 1b848eae0d5b935bb596bb14670ae781c1e2355e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Feb 2021 21:21:49 -0300 Subject: configuration.nix: Use -latest version of packages from personal overlay --- configuration.nix | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/configuration.nix b/configuration.nix index 7601f2a..b59bb01 100644 --- a/configuration.nix +++ b/configuration.nix @@ -297,9 +297,9 @@ in { yad ## EuAndreh overlay - xyz-euandreh.remembering - xyz-euandreh.autoqemu - xyz-euandreh.fallible + xyz-euandreh.remembering-latest + xyz-euandreh.autoqemu-latest + xyz-euandreh.fallible-latest ## GUI programs audacity -- cgit v1.2.3 From 5cf9a4fe3f7a53829cfdc5f736a325f0013ad5e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 03:32:32 -0300 Subject: util.sh: Always commit in task() --- sh/util.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/util.sh b/sh/util.sh index a3ca37d..18e0be0 100644 --- a/sh/util.sh +++ b/sh/util.sh @@ -47,11 +47,11 @@ task() { TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$TITLE" "$ID" "$(date -I)")" if [ "${2:-}" = '-c' ] && [ "$TITLE" != 'FIXME' ]; then echo "$TITLE_LINE" | insert_at_line 2 TODOs.md - git add TODOs.md - git commit -m "TODOs.md: Add $ID" else printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line 2 TODOs.md fi + git add TODOs.md + git commit -m "TODOs.md: Add $ID" } gvi() { -- cgit v1.2.3 From 31bbc90ce6039f0e9a8e25dd5995e91dabe97d9a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 03:32:55 -0300 Subject: fake-symlinks: aux/workflow/dist.sh: Fix quotation --- sh/templates/aux/workflow/dist.sh | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index bc01a8f..45fc30a 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -5,12 +5,12 @@ DATE="$1" VERSION="v$2" if git show "$VERSION" 1>/dev/null 2>/dev/null; then - echo 'Version "$VERSION" already exists.' + echo "Version '$VERSION' already exists." exit 1 fi -if [ '$DATE' != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo 'Date "$DATE" is not up-to-date.' +if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then + echo "Date '$DATE' is not up-to-date." exit 1 fi -- cgit v1.2.3 From 2e073af74bbc8d6a9f170b1233ea9ba141d3978c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 03:33:17 -0300 Subject: gc.sh: Delete previous generations of Guix profiles --- scripts/gc.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/gc.sh b/scripts/gc.sh index 71505ee..f432c0c 100755 --- a/scripts/gc.sh +++ b/scripts/gc.sh @@ -14,7 +14,7 @@ gc-nix.sh yellow "Cleaning up Guix store\n" -guix gc +guix gc -d yellow "Cleaning up up the Trash and /tmp folders\n" -- cgit v1.2.3 From 8a91bd0f1d03c38b19ac8e6df956853e8d582aac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 10:58:07 -0300 Subject: aux/guix/: Rename ghc-nixfmt, following upstream --- aux/guix/manifest.scm | 2 +- aux/guix/pinned-channels.scm | 2 +- sh/templates/aux/guix/pinned-channels.scm | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm index 914d0dc..e8c1cd1 100644 --- a/aux/guix/manifest.scm +++ b/aux/guix/manifest.scm @@ -15,4 +15,4 @@ shellcheck pandoc clang - ghc-nixfmt))) + nixfmt))) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index a619cfd..418e923 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -3,7 +3,7 @@ (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "5ab0ca056691aaf88570a8c719e0104ab0a17c48") + "dbc10e747428f31e5c84a2d9712af116ed6529b1") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm index a619cfd..418e923 100644 --- a/sh/templates/aux/guix/pinned-channels.scm +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -3,7 +3,7 @@ (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") (commit - "5ab0ca056691aaf88570a8c719e0104ab0a17c48") + "dbc10e747428f31e5c84a2d9712af116ed6529b1") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From 589352db5d487f3f55c379411b46c4283b13a90b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 11:06:55 -0300 Subject: fake-symlinks: pinned-channels.scm: Use Guix "master" branch by default --- aux/guix/pinned-channels.scm | 3 +-- sh/fake-symlinks.sh | 2 +- sh/templates/aux/guix/pinned-channels.scm | 3 +-- 3 files changed, 3 insertions(+), 5 deletions(-) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index 418e923..826a352 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -2,8 +2,7 @@ (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") - (commit - "dbc10e747428f31e5c84a2d9712af116ed6529b1") + (branch "master") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index b6f0ac6..20989ca 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -147,7 +147,7 @@ ln_env() { fi if [ -f "$PREFIX/aux/guix/pinned-channels.scm" ] && - [ "$(wc -l < "$PREFIX/aux/guix/pinned-channels.scm")" = 11 ]; then + [ "$(wc -l < "$PREFIX/aux/guix/pinned-channels.scm")" = 10 ]; then ENABLE_OVERWRITE_PINNED_CHANNELS=1 else ENABLE_OVERWRITE_PINNED_CHANNELS= diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm index 418e923..826a352 100644 --- a/sh/templates/aux/guix/pinned-channels.scm +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -2,8 +2,7 @@ (channel (name 'guix) (url "https://git.savannah.gnu.org/git/guix.git") - (commit - "dbc10e747428f31e5c84a2d9712af116ed6529b1") + (branch "master") (introduction (make-channel-introduction "9edb3f66fd807b096b48283debdcddccfea34bad" -- cgit v1.2.3 From a0716269e8a1b019d17a626a7150c451cd3185e7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 19:56:48 -0300 Subject: tmux.conf: Remove message displaying when selecting with mouse Lesses the distraction when doing screencasts. --- tmux.conf | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/tmux.conf b/tmux.conf index fee8739..fc1d58a 100644 --- a/tmux.conf +++ b/tmux.conf @@ -12,7 +12,7 @@ bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded" # Holy answer that properly implements copying from tmux! # https://unix.stackexchange.com/a/349020/276661 -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied! Long-live tmux!" +bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \; bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!" # Moving around panes -- cgit v1.2.3 From 4f7e1281b002b426f39157197f7e931bc3a9431a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 22:40:38 -0300 Subject: fake-symlinks: README: Remove unused file --- sh/templates/README | 6 ------ 1 file changed, 6 deletions(-) delete mode 100644 sh/templates/README diff --git a/sh/templates/README b/sh/templates/README deleted file mode 100644 index f39ca70..0000000 --- a/sh/templates/README +++ /dev/null @@ -1,6 +0,0 @@ -$PROJECT_UC - -FIXME - -Online documentation available at: -https://$PROJECT.euandreh.xyz \ No newline at end of file -- cgit v1.2.3 From 045f4415ea51d0c82f63322c94ca0adfbd02a404 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Feb 2021 22:41:40 -0300 Subject: fake-symlinks: README.sh: Generate "Links" section --- aux/workflow/README.sh | 17 +++++++++++++++-- sh/templates/aux/workflow/README.sh | 17 +++++++++++++++-- 2 files changed, 30 insertions(+), 4 deletions(-) diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh index b9fa38e..8313274 100755 --- a/aux/workflow/README.sh +++ b/aux/workflow/README.sh @@ -5,7 +5,7 @@ mkdir -p public PROJECT_UC="$1" PROJECT="$2" -README="${3:-README.md}" +MAILING_LIST="$3" RELEASES_LIST="$(mktemp)" for version in $(git tag); do @@ -18,7 +18,20 @@ if [ -s "$RELEASES_LIST" ]; then cat "$RELEASES_LIST" >> "$RELEASES" fi -cat "$README" "$RELEASES" | \ +LINKS="$(mktemp)" +cat < "$LINKS" + +# Links + +- [home page](https://$PROJECT.euandreh.xyz) +- [source code](https://git.euandreh.xyz/$PROJECT/about/) +- [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) +- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) +- [CI logs](https://$PROJECT.euandreh.xyz/ci.html) +- [CHANGELOG](https://$PROJECT.euandreh.xyz/CHANGELOG.html) +EOF + +cat "README.md" "$LINKS" "$RELEASES" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh index b9fa38e..8313274 100755 --- a/sh/templates/aux/workflow/README.sh +++ b/sh/templates/aux/workflow/README.sh @@ -5,7 +5,7 @@ mkdir -p public PROJECT_UC="$1" PROJECT="$2" -README="${3:-README.md}" +MAILING_LIST="$3" RELEASES_LIST="$(mktemp)" for version in $(git tag); do @@ -18,7 +18,20 @@ if [ -s "$RELEASES_LIST" ]; then cat "$RELEASES_LIST" >> "$RELEASES" fi -cat "$README" "$RELEASES" | \ +LINKS="$(mktemp)" +cat < "$LINKS" + +# Links + +- [home page](https://$PROJECT.euandreh.xyz) +- [source code](https://git.euandreh.xyz/$PROJECT/about/) +- [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) +- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) +- [CI logs](https://$PROJECT.euandreh.xyz/ci.html) +- [CHANGELOG](https://$PROJECT.euandreh.xyz/CHANGELOG.html) +EOF + +cat "README.md" "$LINKS" "$RELEASES" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ -- cgit v1.2.3 From e27c9d2c9cf17358731ff44b126fb49e702a79e9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 21:45:03 -0300 Subject: git/gitignore: Ignore all Nix files by default --- git/gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/git/gitignore b/git/gitignore index 062f818..904bb36 100644 --- a/git/gitignore +++ b/git/gitignore @@ -6,3 +6,4 @@ req.http /.ignore /tmp/ /patches/ +*.nix -- cgit v1.2.3 From 675e8279de66f2934a89dcd8b1c17c57236cc0eb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 21:45:35 -0300 Subject: guix/os.scm: Add Guix development environment by default --- guix/os.scm | 1 + 1 file changed, 1 insertion(+) diff --git a/guix/os.scm b/guix/os.scm index 9524ef7..972c42d 100644 --- a/guix/os.scm +++ b/guix/os.scm @@ -17,6 +17,7 @@ %base-user-accounts)) (packages (append + (list (package-inputs guix)) (map (compose list specification->package+output symbol->string) '(;; Base nss-certs ;; suggested by Guix -- cgit v1.2.3 From 98cb6f92cb37cfe370107516c2e133a25c320d0a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 21:46:20 -0300 Subject: sh/bash-config.sh: Enable "hash" command --- sh/bash-config.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/bash-config.sh b/sh/bash-config.sh index a8f86cb..df3f236 100644 --- a/sh/bash-config.sh +++ b/sh/bash-config.sh @@ -53,3 +53,4 @@ shopt -s cmdhist PROMPT_COMMAND='history -a' bind -x '"\e\C-l": c' +set -h -- cgit v1.2.3 From d8feabd87062c0a7addbf7667fe7bea13a6670ca Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 21:47:29 -0300 Subject: sh/symlinks.sh: Keep a placeholder logfile to satisfy logrotate --- sh/symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index e20bf2b..e474c98 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -22,6 +22,7 @@ ln -fs "$DOTFILES/npmrc.sh" ~/.npmrc mkdir -p ~/tmp/ touch ~/tmp/scratch.txt +touch /tmp/fp.euandreh.log mkdir -p ~/.gnupg ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf -- cgit v1.2.3 From d4188f40742b9f73ad5856bffe8c9c7655e6c996 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 21:48:54 -0300 Subject: Update aux/ --- aux/ci/ci-build.sh | 12 +++--------- aux/guix/pinned-channels.scm | 13 +++++++------ aux/workflow/commonmark.sh | 17 +++++++++++++++++ aux/workflow/dist.sh | 17 +++++++++++++++++ aux/workflow/public.sh | 15 +++++++++++++++ 5 files changed, 59 insertions(+), 15 deletions(-) create mode 100755 aux/workflow/commonmark.sh create mode 100755 aux/workflow/dist.sh create mode 100644 aux/workflow/public.sh diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 311abf9..fb49e71 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -28,7 +28,7 @@ EOF cd - if [ -f ./aux/ci/report.sh ]; then sh aux/ci/report.sh "$PACKAGE" - rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete + rsync -avzzP public/ "/srv/http/$PACKAGE/" fi printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" @@ -50,13 +50,7 @@ EOF RUNNER='sh -c' fi - if [ -f ./configure ]; then - COMMAND='./configure && make CC=cc clean check public' - else - COMMAND='make CC=cc clean check public' - fi - - $RUNNER "$COMMAND" + $RUNNER 'make clean check public' rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete -} | tee "$LOGFILE" 2>&1 +} 2>&1 | tee "$LOGFILE" diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index 826a352..b026813 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -1,10 +1,11 @@ -(list +(cons* (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (branch "master") + (name 'xyz-euandreh) + (url "git://git.euandreh.xyz/package-repository") + (branch "main") (introduction (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" + "d749e053e6db365069cb9b2ef47a78b06f9e7361" (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) + "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) + %default-channels) diff --git a/aux/workflow/commonmark.sh b/aux/workflow/commonmark.sh new file mode 100755 index 0000000..e9609c2 --- /dev/null +++ b/aux/workflow/commonmark.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT_UC="$1" +F="$2" + +pandoc --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - ${F%.*}" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + < "$F" > "public/${F%.*}.html" diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh new file mode 100755 index 0000000..45fc30a --- /dev/null +++ b/aux/workflow/dist.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +DATE="$1" +VERSION="v$2" + +if git show "$VERSION" 1>/dev/null 2>/dev/null; then + echo "Version '$VERSION' already exists." + exit 1 +fi + +if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then + echo "Date '$DATE' is not up-to-date." + exit 1 +fi + +git tag "$VERSION" diff --git a/aux/workflow/public.sh b/aux/workflow/public.sh new file mode 100644 index 0000000..4c90225 --- /dev/null +++ b/aux/workflow/public.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -eu + +PROJECT_UC="$1" +PROJECT="$2" +MAILING_LIST="$3" + +sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/README.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" + +if [ -f CHANGELOG.md ]; then + sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md +fi + +sh aux/ci/report.sh "$PROJECT" -- cgit v1.2.3 From 2434980bfd444b155d1668a73869cab0d8df34d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:01:15 -0300 Subject: fake-symlinks: aux/ci/ci-build.sh: properly capture stderr in logfile --- sh/templates/aux/ci/ci-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 311abf9..6d40f45 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -59,4 +59,4 @@ EOF $RUNNER "$COMMAND" rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete -} | tee "$LOGFILE" 2>&1 +} 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From 65a6da5413108cff6f08a21d197f0ba4c2d9c6c2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:01:31 -0300 Subject: fake-symlinks: aux/ci/ci-build.sh: stop looking for a ./configure file --- sh/templates/aux/ci/ci-build.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 6d40f45..0679cbd 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -50,13 +50,7 @@ EOF RUNNER='sh -c' fi - if [ -f ./configure ]; then - COMMAND='./configure && make CC=cc clean check public' - else - COMMAND='make CC=cc clean check public' - fi - - $RUNNER "$COMMAND" + $RUNNER 'make clean check public' rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From 5d5ee5859be29eb643846352f8fdd1c846c0a615 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:01:55 -0300 Subject: fake-symlinks: aux/ci/ci-build.sh: remove --delete to avoid erasing website when "check" fails --- sh/templates/aux/ci/ci-build.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 0679cbd..fb49e71 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -28,7 +28,7 @@ EOF cd - if [ -f ./aux/ci/report.sh ]; then sh aux/ci/report.sh "$PACKAGE" - rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete + rsync -avzzP public/ "/srv/http/$PACKAGE/" fi printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" -- cgit v1.2.3 From e0115f7b91490199457d0b92012026136f0b2a9f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:02:32 -0300 Subject: fake-symlinks: aux/ci/: Use /opt/ci instead of /srv/ci --- sh/templates/aux/ci/git-post-receive.sh | 4 ++-- sh/templates/aux/ci/git-pre-push.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/sh/templates/aux/ci/git-post-receive.sh b/sh/templates/aux/ci/git-post-receive.sh index b169489..f8986ed 100755 --- a/sh/templates/aux/ci/git-post-receive.sh +++ b/sh/templates/aux/ci/git-post-receive.sh @@ -10,5 +10,5 @@ for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do done PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/srv/ci/$PACKAGE/logs" -"/srv/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" +LOGS_DIR="/opt/ci/$PACKAGE/logs" +"/opt/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/sh/templates/aux/ci/git-pre-push.sh b/sh/templates/aux/ci/git-pre-push.sh index 39e1f50..e540686 100644 --- a/sh/templates/aux/ci/git-pre-push.sh +++ b/sh/templates/aux/ci/git-pre-push.sh @@ -2,7 +2,7 @@ set -eux PACKAGE="$(basename "$PWD")" -__ENABLE_CI__ LOGS_DIR="/srv/ci/$PACKAGE/logs" +__ENABLE_CI__ LOGS_DIR="/opt/ci/$PACKAGE/logs" REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" -- cgit v1.2.3 From 7745985457bb652823b68901c34ceae389f5d67c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:03:16 -0300 Subject: fake-symlinks: aux/guix/pinned-channels.scm: Use xyz-euandreh by default, use %default-channels --- sh/templates/aux/guix/pinned-channels.scm | 13 +++++++------ 1 file changed, 7 insertions(+), 6 deletions(-) diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm index 826a352..b026813 100644 --- a/sh/templates/aux/guix/pinned-channels.scm +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -1,10 +1,11 @@ -(list +(cons* (channel - (name 'guix) - (url "https://git.savannah.gnu.org/git/guix.git") - (branch "master") + (name 'xyz-euandreh) + (url "git://git.euandreh.xyz/package-repository") + (branch "main") (introduction (make-channel-introduction - "9edb3f66fd807b096b48283debdcddccfea34bad" + "d749e053e6db365069cb9b2ef47a78b06f9e7361" (openpgp-fingerprint - "BBB0 2DDF 2CEA F6A8 0D1D E643 A2A0 6DF2 A33A 54FA"))))) + "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) + %default-channels) -- cgit v1.2.3 From 5087b8a4beb9777fb04352e9cccf25b842a4afa2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:03:41 -0300 Subject: fake-symlinks: Add aux/workflow/public.sh --- sh/templates/aux/workflow/public.sh | 15 +++++++++++++++ 1 file changed, 15 insertions(+) create mode 100644 sh/templates/aux/workflow/public.sh diff --git a/sh/templates/aux/workflow/public.sh b/sh/templates/aux/workflow/public.sh new file mode 100644 index 0000000..4c90225 --- /dev/null +++ b/sh/templates/aux/workflow/public.sh @@ -0,0 +1,15 @@ +#!/bin/sh +set -eu + +PROJECT_UC="$1" +PROJECT="$2" +MAILING_LIST="$3" + +sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/README.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" + +if [ -f CHANGELOG.md ]; then + sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md +fi + +sh aux/ci/report.sh "$PROJECT" -- cgit v1.2.3 From aa27b0a1bd0af39a221b30db523f77e87e397df7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:06:07 -0300 Subject: fake-symlinks: Remove Makefile.in, improve Makefile --- sh/templates/Makefile | 104 +++++++++++++++++++++++++++++------------------ sh/templates/Makefile.in | 72 -------------------------------- 2 files changed, 64 insertions(+), 112 deletions(-) delete mode 100644 sh/templates/Makefile.in diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 1127169..019c3ea 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -1,81 +1,105 @@ .POSIX: CC = c99 -CFLAGS = -std=c99 -Wall -Wextra -Wpedantic +CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g LDFLAGS = LDLIBS = PREFIX = /usr/local MANPREFIX = $(PREFIX)/share/man -DATE = 1970 -VERSION = 0.1.0 +DATE = 1970-01-01 +MAJOR = 0 +MINOR = 1 +PATCH = 0 +VERSION = $(MAJOR).$(MINOR).$(PATCH) -scripts = -sysconfs = -manpages = +headers = \ + src/f.h + +sources = \ + src/f.c + +manpages = \ + doc/f.1 -sources = -headers = objects = $(sources:.c=.o) .SUFFIXES: .c .o .c.o: - $(CC) -c $(CFLAGS) -o $@ $< + $(CC) -c $(CFLAGS) $(LDFLAGS) -o $@ $< + +libname = lib__PROJECT__ +liba = $(libname).a +libso = $(libname).so +libso-real = $(libso).$(MAJOR).$(MINOR).$(PATCH) +soaliases = $(libso).$(MAJOR).$(MINOR) $(libso).$(MAJOR) $(libso) + +all: $(liba) $(libso-real) run-tests + +$(liba): $(headers) $(objects) + ar rcsv $@-t $(objects) + ranlib $@-t + mv $@-t $@ + +$(libso-real): $(headers) $(objects) + $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(libso).$(MAJOR) -o $@ $(objects) + +$(soaliases): $(libso-real) + ln -sf $? $@ + +run-tests: $(headers) $(sources) tests/tests.c + $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ tests/tests.c $(sources) $(LDLIBS) -all: +fallible-tests: $(headers) $(sources) tests/tests.c + $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -DFALLIBLE -o $@ tests/tests.c $(sources) $(LDLIBS) -lfallible -check: +check: all + ./run-tests if [ -d .git ]; then \ echo 'Assuming Git repository, running development check.'; \ $(MAKE) dev-check; \ fi -dev-check: +VALGRIND_FLAGS= \ + --show-error-list=yes \ + --show-leak-kinds=all \ + --leak-check=full \ + --track-origins=yes \ + --error-exitcode=1 + +dev-check: all fallible-tests + valgrind $(VALGRIND_FLAGS) ./run-tests + fallible-check ./fallible-tests + sh aux/assert-clang-format.sh sh aux/assert-shellcheck.sh sh aux/workflow/assert-todos.sh -dist: - if git show v$(VERSION) 1>/dev/null 2>/dev/null; then \ - echo 'Version "v$(VERSION)" already exists.'; \ - exit 1; \ - fi - - if [ '$(DATE)' != "$$(git log -1 --format=%cd --date=short HEAD)" ]; then \ - echo 'Date "$(DATE)" is not up-to-date.'; \ - exit 1; \ - fi - - git tag v$(VERSION) - do_subst = sed \ -e 's:[@]VERSION[@]:$(VERSION):g' \ -e 's:[@]DATE[@]:$(DATE):g' -install: all - for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basenae $$h`; done - for s in $(scripts); do install -m 755 -D $$s $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done - for s in $(sysconfs); do install -m 644 -D $$s $(DESTDIR)$(PREFIX)/$$s; done +install: all $(soaliases) + for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basename $$h`; done + for f in $(liba) $(libso-real); do install -m 755 -D $$f $(DESTDIR)$(PREFIX)/lib/$$f; done + for a in $(soaliases); do mv $$a $(DESTDIR)$(PREFIX)/lib/; done for m in $(manpages); do \ n=$${m##*.}; \ - mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ - $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$s`.gz; \ + mkdir -p $(DESTDIR)$(MANPREFIX)/man$$m; \ + $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`.gz; \ done uninstall: for h in $(headers); do rm -f $(DESTDIR)$(PREFIX)/include/`basename $$h`; done - for s in $(scripts); do rm -f $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done - for s in $(sysconfs); do rm -f $(DESTDIR)$(PREFIX)/$$s; done + for l in $(liba) $(libso-real) $(soaliases); do rm -f $(DESTDIR)$(PREFIX)/lib/$$l; done for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${m##*.}/`basename $$m`.gz; done clean: - rm -rf public/ + rm -rf public/ $(objects) $(liba) $(libso-real) $(soaliases) run-tests fallible* vgcore* + +dist: + sh aux/workflow/dist.sh $(DATE) $(VERSION) -NAME_UC = $PROJECT_UC -NAME = $PROJECT -MAILING_LIST = $MAILING_LIST public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/TODOs.sh $(NAME_UC) $(NAME) $(MAILING_LIST) - sh aux/workflow/README.sh $(NAME_UC) $(NAME) - sh aux/workflow/commonmark.sh $(NAME_UC) CHANGELOG.md + sh aux/workflow/public.sh __PROJECT_UC__ __PROJECT__ __MAILING_LIST__ .PHONY: all clean check dev-check dist install uninstall diff --git a/sh/templates/Makefile.in b/sh/templates/Makefile.in deleted file mode 100644 index f622dcc..0000000 --- a/sh/templates/Makefile.in +++ /dev/null @@ -1,72 +0,0 @@ -.POSIX: -CC = c99 -CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -LDFLAGS = -LDLIBS = -PREFIX = @PREFIX@ -MANPREFIX = $(PREFIX)/share/man -DATE = @DATE@ -VERSION = @VERSION@ - -scripts = -sysconfs = -manpages = - -sources = -headers = - -objects = $(sources:.c=.o) - -.SUFFIXES: .c .o - -.c.o: - $(CC) -c $(CFLAGS) -o $@ $< - -all: - -check: - if [ -d .git ]; then \ - echo 'Assuming Git repository, running development check.'; \ - $(MAKE) dev-check; \ - fi - -dev-check: - sh aux/assert-shellcheck.sh - sh aux/workflow/assert-todos.sh - -dist: - sh aux/workflow/dist.sh $(DATE) $(VERSION) - -do_subst = sed \ - -e 's:[@]VERSION[@]:$(VERSION):g' \ - -e 's:[@]DATE[@]:$(DATE):g' - -install: all - for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basename $$h`; done - for s in $(scripts); do install -m 755 -D $$s $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done - for s in $(sysconfs); do install -m 644 -D $$s $(DESTDIR)$(PREFIX)/$$s; done - for m in $(manpages); do \ - n=$${m##*.}; \ - mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ - $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`.gz; \ - done - -uninstall: - for h in $(headers); do rm -f $(DESTDIR)$(PREFIX)/include/`basename $$h`; done - for s in $(scripts); do rm -f $(DESTDIR)$(PREFIX)/bin/`basename $$s`; done - for s in $(sysconfs); do rm -f $(DESTDIR)$(PREFIX)/$$s; done - for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${m##*.}/`basename $$m`.gz; done - -clean: - rm -rf public/ - -NAME_UC = __PROJECT_UC__ -NAME = __PROJECT__ -MAILING_LIST = __MAILING_LIST__ -public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/TODOs.sh '$(NAME_UC)' $(NAME) $(MAILING_LIST) - sh aux/workflow/README.sh '$(NAME_UC)' $(NAME) - sh aux/workflow/commonmark.sh '$(NAME_UC)' CHANGELOG.md - sh aux/ci/report.sh '$(NAME)' - -.PHONY: all clean check dev-check dist install uninstall -- cgit v1.2.3 From 4dec0061013c1f55b4d11c0f7e60d598b8b2f0d8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:06:36 -0300 Subject: .gitignore: Add public/ --- .gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/.gitignore b/.gitignore index 21a67be..3a2db9e 100644 --- a/.gitignore +++ b/.gitignore @@ -1,2 +1,3 @@ /cron/generated/ /aux/workflow/assert-todos.sh +/public/ -- cgit v1.2.3 From eca16e0f8432d2ca1ab6a5abd149ced075ea4c31 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:06:52 -0300 Subject: Update files under aux/ci/ --- aux/ci/git-post-receive.sh | 4 ++-- aux/ci/git-pre-push.sh | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/aux/ci/git-post-receive.sh b/aux/ci/git-post-receive.sh index b169489..f8986ed 100755 --- a/aux/ci/git-post-receive.sh +++ b/aux/ci/git-post-receive.sh @@ -10,5 +10,5 @@ for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do done PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/srv/ci/$PACKAGE/logs" -"/srv/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" +LOGS_DIR="/opt/ci/$PACKAGE/logs" +"/opt/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/aux/ci/git-pre-push.sh b/aux/ci/git-pre-push.sh index d90a4b4..5546cb2 100755 --- a/aux/ci/git-pre-push.sh +++ b/aux/ci/git-pre-push.sh @@ -2,7 +2,7 @@ set -eux PACKAGE="$(basename "$PWD")" -LOGS_DIR="/srv/ci/$PACKAGE/logs" +LOGS_DIR="/opt/ci/$PACKAGE/logs" REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" -- cgit v1.2.3 From cc7e9d4b044d1f8e5f59d6ac316fa1eafc891cb1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:07:31 -0300 Subject: configuration.nix: decrease frequency of email fetching cronjob --- configuration.nix | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/configuration.nix b/configuration.nix index b59bb01..1c64b60 100644 --- a/configuration.nix +++ b/configuration.nix @@ -7,14 +7,12 @@ let daily-at-12h30min = "30 12 * * *"; every-x-hours = "0 * * * *"; pub-crons = { - no-mail = { - sync-mail = every-x-hours; - deliver-enqueued-emails = every-x-hours; - }; + no-mail = { deliver-enqueued-emails = every-x-hours; }; with-mail = { report-summary-job = "30 13 * * *"; + sync-mail = daily-at-12h30min; annex-job = daily-at-12h30min; backup-job = daily-at-12h30min; repo-update-job = daily-at-12h30min; -- cgit v1.2.3 From adf8cc55100b63812b5504245ffce19ea7ef40cf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:08:19 -0300 Subject: configuration.nix: Add documentation and manpages --- configuration.nix | 427 ++++++++++++++++++++++++++++-------------------------- 1 file changed, 223 insertions(+), 204 deletions(-) diff --git a/configuration.nix b/configuration.nix index 1c64b60..ddea588 100644 --- a/configuration.nix +++ b/configuration.nix @@ -111,211 +111,230 @@ in { symbola ]; - environment.systemPackages = let - pkgs-19-09 = import (pkgs.fetchzip { - url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; - sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; - }) { }; - - noTestAttrs = { - doCheck = false; - doInstallCheck = false; - meta = { broken = false; }; - }; - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet = - pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - fallback-quodlibet = - pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - active-quodlibet = untested-quodlibet; - - gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { - propagatedBuildInputs = oldAttrs.propagatedBuildInputs - ++ [ pkgs.python3Packages.youtube-dl ]; - }); - bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/bmake $out/bin/make - ''; - }); - tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/tcc $out/bin/c99 - ''; - }); - flex-with-posix-alias = pkgs.flex.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/flex $out/bin/lex - ''; - }); - pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { - postPatch = '' - substituteInPlace ar_io.c --replace 'putenv' '// putenv' - ${({ postPatch = ""; } // oldAttrs).postPatch} - ''; - }); + documentation = { + enable = true; + man.enable = true; + dev.enable = true; + man.generateCaches = true; + }; + + environment = { + enableDebugInfo = true; - nu-packages = with pkgs; [ - awscli - yubioath-desktop - leiningen - openjdk8 - clojure # =clj= - kubernetes - nssTools # =pk12util= - python3 - ]; - - in with pkgs; - [ - ## Personal data tools - gitAndTools.git-open - gitAndTools.gitFull - gitAndTools.git-annex - gitAndTools.gitRemoteGcrypt - git-crypt - git-lfs - mr - borgbackup - pass - gnupg - pinentry_gtk2 - fossil - mercurial - - ## CLI tools - groff - mktorrent - diffoscope - bundix - bash-completion - nix-bash-completions - youtube-dl - wget - tmux - tmuxinator - sox # =play=, SoX - Sound eXchange - gettext - rlwrap - jq - rq - openvpn - xclip - psmisc # =killall= - xorg.xkill - gksu - tree - unzip # used by extract bash function and Clojure go-to-source - feh - nixUnstable # =nix= - bind # =dig= - rsync - moreutils # =vipe=, =sponge= - graphviz # =dot= and others - graph-easy # ASCII drawings for GraphViz output - mkpasswd - direnv - recutils - sqlite - trash-cli - entr - mailutils - ffmpeg-full - ledger - gnuplot - ranger - electrum - zathura - st - pavucontrol - newsboat - acpi - xsel - pinentry - nixfmt - # nvi # broken, now using the one from Guix - fzf - calcurse - pandoc - buku # replaces Firefox bookmarks - cloc - inetutils # telnet - doas - - ## Mail - notmuch - isync - - ## Conversations - mutt - gomuks - weechat # replacing ERC - poezio - - ## Programming tools - perl - shellcheck - mrsh - dash - gcc - clang-tools - valgrind - - ## POSIX - bmake-with-alias - byacc - bc - pax-with-good-path - lzip - flex-with-posix-alias - gnugrep - file - ed - tinycc-with-posix-alias - m4 - llvmPackages.bintools # ar, nm and friends - units - - ## Containers and VMs - qemu - expect - - ## xmonad - xorg.xmodmap - xorg.xmessage - dmenu - escrotum - xorg.xbacklight - playerctl - lightdm - fvwm # =xpmroot= - haskellPackages.xmobar - arandr - alsaUtils # for xmonad volume commands - yad - - ## EuAndreh overlay - xyz-euandreh.remembering-latest - xyz-euandreh.autoqemu-latest - xyz-euandreh.fallible-latest - - ## GUI programs - audacity - zbar - calibre - qutebrowser - (mpv-with-scripts.override { - scripts = with mpvScripts; [ mpris sponsorblock ]; - }) - - ## Candidates to be replaced by alternatives - emacs # just missing configuring mutt - active-quodlibet # cmus + mutagen - gpodder-with-youtube-dl # podboat? - transmission-gtk # Transmission TUI - firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better - tdesktop # telegram -> gomuks - ] ++ proprietaryPackages ++ nu-packages; + systemPackages = let + pkgs-19-09 = import (pkgs.fetchzip { + url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; + sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; + }) { }; + + noTestAttrs = { + doCheck = false; + doInstallCheck = false; + meta = { broken = false; }; + }; + # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 + untested-quodlibet = + pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + fallback-quodlibet = + pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); + active-quodlibet = untested-quodlibet; + + gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { + propagatedBuildInputs = oldAttrs.propagatedBuildInputs + ++ [ pkgs.python3Packages.youtube-dl ]; + }); + bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/bmake $out/bin/make + ''; + }); + tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/tcc $out/bin/c99 + ''; + }); + flex-with-posix-alias = pkgs.flex.overrideAttrs (oldAttrs: { + postInstall = '' + ln -s $out/bin/flex $out/bin/lex + ''; + }); + pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { + postPatch = '' + substituteInPlace ar_io.c --replace 'putenv' '// putenv' + ${({ postPatch = ""; } // oldAttrs).postPatch} + ''; + }); + + nu-packages = with pkgs; [ + awscli + yubioath-desktop + leiningen + openjdk8 + clojure # =clj= + kubernetes + nssTools # =pk12util= + python3 + ]; + + in with pkgs; + [ + ## Documentation + man-pages + posix_man_pages + scheme-manpages + stdman + stdmanpages + + ## Personal data tools + gitAndTools.git-open + gitAndTools.gitFull + gitAndTools.git-annex + gitAndTools.gitRemoteGcrypt + git-crypt + git-lfs + mr + borgbackup + pass + gnupg + pinentry_gtk2 + fossil + mercurial + + ## CLI tools + groff + mktorrent + diffoscope + bundix + bash-completion + nix-bash-completions + youtube-dl + wget + tmux + tmuxinator + sox # =play=, SoX - Sound eXchange + gettext + rlwrap + jq + rq + openvpn + xclip + psmisc # =killall= + xorg.xkill + gksu + tree + unzip # used by extract bash function and Clojure go-to-source + feh + nixUnstable # =nix= + bind # =dig= + rsync + moreutils # =vipe=, =sponge= + graphviz # =dot= and others + graph-easy # ASCII drawings for GraphViz output + mkpasswd + direnv + recutils + sqlite + trash-cli + entr + mailutils + ffmpeg-full + ledger + gnuplot + ranger + electrum + zathura + st + pavucontrol + newsboat + acpi + xsel + pinentry + nixfmt + # nvi # broken, now using the one from Guix + fzf + calcurse + pandoc + buku # replaces Firefox bookmarks + cloc + inetutils # telnet + doas + nodePackages.node2nix + + ## Mail + notmuch + isync + + ## Conversations + mutt + gomuks + weechat # replacing ERC + poezio + + ## Programming tools + perl + shellcheck + mrsh + dash + gcc + clang-tools + valgrind + + ## POSIX + bmake-with-alias + byacc + bc + pax-with-good-path + lzip + flex-with-posix-alias + gnugrep + file + ed + tinycc-with-posix-alias + m4 + llvmPackages.bintools # ar, nm and friends + units + + ## Containers and VMs + qemu + expect + + ## xmonad + xorg.xmodmap + xorg.xmessage + dmenu + escrotum + xorg.xbacklight + playerctl + lightdm + fvwm # =xpmroot= + haskellPackages.xmobar + arandr + alsaUtils # for xmonad volume commands + yad + + ## EuAndreh overlay + xyz-euandreh.remembering-latest # FIX ME + xyz-euandreh.autoqemu-latest + # xyz-euandreh.fallible-latest + + ## GUI programs + audacity + zbar + calibre + qutebrowser + (mpv-with-scripts.override { + scripts = with mpvScripts; [ mpris sponsorblock ]; + }) + + ## Candidates to be replaced by alternatives + emacs # just missing configuring mutt + active-quodlibet # cmus + mutagen + gpodder-with-youtube-dl # podboat? + transmission-gtk # Transmission TUI + firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better + tdesktop # telegram -> gomuks + ] ++ proprietaryPackages ++ nu-packages; + }; nixpkgs = { config = { -- cgit v1.2.3 From 5e66a2bebe71e3e0585d2d728b79309071a7a5f8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:09:19 -0300 Subject: fake-symlinks.sh: Generalize ln_build_aux and ln_guix_files --- sh/fake-symlinks.sh | 37 +++++++------------------------------ 1 file changed, 7 insertions(+), 30 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 20989ca..4072c39 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -146,25 +146,12 @@ ln_env() { ENABLE_C= fi - if [ -f "$PREFIX/aux/guix/pinned-channels.scm" ] && - [ "$(wc -l < "$PREFIX/aux/guix/pinned-channels.scm")" = 10 ]; then - ENABLE_OVERWRITE_PINNED_CHANNELS=1 - else - ENABLE_OVERWRITE_PINNED_CHANNELS= - fi - if { [ -f "$PREFIX/README.md" ] || [ -f "$PREFIX/README" ]; } && [ -z "${NO_README_SH[$PROJECT]}" ]; then ENABLE_README_SH=1 else ENABLE_README_SH= fi - if [ -f "$PREFIX/CHANGELOG.md" ]; then - ENABLE_CHANGELOG=1 - else - ENABLE_CHANGELOG= - fi - if [ -f "$PREFIX/configure" ] && [ ! -x "$PREFIX/configure" ]; then ENABLE_CONFIGURE=1 else @@ -188,16 +175,11 @@ ln_build_aux() { aux/workflow/assert-todos.sh \ aux/workflow/TODOs.sh \ aux/workflow/style.css \ - aux/workflow/preamble.md - - if [ "$ENABLE_README_SH" ]; then - cp_all aux/workflow/README.sh - fi - - if [ "$ENABLE_CHANGELOG" ]; then - cp_all aux/workflow/commonmark.sh \ - aux/workflow/dist.sh - fi + aux/workflow/preamble.md \ + aux/workflow/README.sh \ + aux/workflow/commonmark.sh \ + aux/workflow/dist.sh \ + aux/workflow/public.sh cp_if_not TODOs.md @@ -212,13 +194,8 @@ ln_agpl() { ln_guix_files() { cp_all aux/guix/with-container.sh \ aux/assert-shellcheck.sh - cp_if_not aux/guix/manifest.scm - - if [ -n "$ENABLE_OVERWRITE_PINNED_CHANNELS" ]; then - cp_all aux/guix/pinned-channels.scm - else - cp_if_not aux/guix/pinned-channels.scm - fi + cp_if_not aux/guix/manifest.scm \ + aux/guix/pinned-channels.scm } ln_ci() { -- cgit v1.2.3 From c7f0b10b0bd4b7812e3fcc15e62d8d40c6c9f159 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:09:52 -0300 Subject: fake-symlinks.sh: Add projects to the list --- sh/fake-symlinks.sh | 48 +++++++++++++++++++++++++----------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 4072c39..43901d0 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -385,29 +385,31 @@ ln_all ln_description_foreign_project guix \ ml-archives \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ - pdfs-da-d-maria \ - package-repository -ln_all ln_makefile_only_guix_project servers \ - pires \ - remembering \ - website \ - dotfiles \ - gluilo \ - konformigado \ - libedn \ - eq \ - fallible \ - sharedc \ - standardify \ - autoqemu \ - yoctoauth \ - mediator \ - songbooks \ - cement \ - guile-quickcheck \ - guile-pds \ - byopds \ - discussions-site + pdfs-da-d-maria +ln_all ln_makefile_only_guix_project servers \ + pires \ + remembering \ + website \ + dotfiles \ + gluilo \ + konformigado \ + libedn \ + eq \ + fallible \ + sharedc \ + standardify \ + autoqemu \ + yoctoauth \ + mediator \ + songbooks \ + cement \ + guile-quickcheck \ + guile-pds \ + byopds \ + discussions-site \ + package-repository \ + std-tools \ + ssmtp ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From a76f8e128076482a5611990c5b00fba4117aaac2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 24 Feb 2021 22:14:05 -0300 Subject: configuration.nix: Re-enable system cronjobs --- configuration.nix | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/configuration.nix b/configuration.nix index ddea588..64f2f83 100644 --- a/configuration.nix +++ b/configuration.nix @@ -23,12 +23,12 @@ let }; }; priv-crons = { pacheco-job = "0 12 5 * *"; }; - crons = - builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") - pub-crons.no-mail // builtins.mapAttrs - (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") - pub-crons.with-mail - // builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons; + crons = builtins.attrValues + (builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") + pub-crons.no-mail) ++ builtins.attrValues (builtins.mapAttrs + (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") + pub-crons.with-mail) ++ builtins.attrValues + (builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons); privateConfiguration = import /etc/nixos/private-configuration.nix; enableFlatpak = true; # for usage with proprietary Skype proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; @@ -382,7 +382,7 @@ in { # We can see the actual generated crontab at /etc/crontab cron = { enable = true; - #systemCronJobs = crons; + systemCronJobs = crons; }; logrotate = { -- cgit v1.2.3 From 8824f47ead2bbe3cb9729c9c9cf717c0c5899815 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 25 Feb 2021 11:26:53 -0300 Subject: fake-symlinks: aux/workflow/dist.sh: Check CHANGELOG.md before creating tag --- aux/workflow/dist.sh | 16 +++++++++++----- sh/templates/aux/workflow/dist.sh | 16 +++++++++++----- 2 files changed, 22 insertions(+), 10 deletions(-) diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh index 45fc30a..8f8f617 100755 --- a/aux/workflow/dist.sh +++ b/aux/workflow/dist.sh @@ -2,16 +2,22 @@ set -eu DATE="$1" -VERSION="v$2" +VERSION="$2" +VVERSION="v$2" -if git show "$VERSION" 1>/dev/null 2>/dev/null; then - echo "Version '$VERSION' already exists." +if git show "$VVERSION" 1>/dev/null 2>/dev/null; then + echo "Version '$VVERSION' already exists." >&2 exit 1 fi if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo "Date '$DATE' is not up-to-date." + echo "Date '$DATE' is not up-to-date." >&2 exit 1 fi -git tag "$VERSION" +if ! grep -q "^# $VERSION - $DATE$" CHANGELOG.md; then + echo "Missing '# $VERSION - $DATE' entry from CHANGELOG.md" >&2 + exit 1 +fi + +git tag "$VVERSION" diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index 45fc30a..8f8f617 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -2,16 +2,22 @@ set -eu DATE="$1" -VERSION="v$2" +VERSION="$2" +VVERSION="v$2" -if git show "$VERSION" 1>/dev/null 2>/dev/null; then - echo "Version '$VERSION' already exists." +if git show "$VVERSION" 1>/dev/null 2>/dev/null; then + echo "Version '$VVERSION' already exists." >&2 exit 1 fi if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo "Date '$DATE' is not up-to-date." + echo "Date '$DATE' is not up-to-date." >&2 exit 1 fi -git tag "$VERSION" +if ! grep -q "^# $VERSION - $DATE$" CHANGELOG.md; then + echo "Missing '# $VERSION - $DATE' entry from CHANGELOG.md" >&2 + exit 1 +fi + +git tag "$VVERSION" -- cgit v1.2.3 From 8a5acb7ceac0a69bc9ef76c8950784adb3c829ea Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 25 Feb 2021 11:34:56 -0300 Subject: configuration.nix: Add fallible back --- configuration.nix | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index 64f2f83..fe0555c 100644 --- a/configuration.nix +++ b/configuration.nix @@ -313,9 +313,9 @@ in { yad ## EuAndreh overlay - xyz-euandreh.remembering-latest # FIX ME + xyz-euandreh.remembering-latest xyz-euandreh.autoqemu-latest - # xyz-euandreh.fallible-latest + xyz-euandreh.fallible-latest ## GUI programs audacity -- cgit v1.2.3 From 9dffe13a69204c4915440a93afcde93601346358 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 25 Feb 2021 11:39:44 -0300 Subject: configuration.nix: Remove hideProcessInformation --- configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index fe0555c..4635664 100644 --- a/configuration.nix +++ b/configuration.nix @@ -451,7 +451,6 @@ in { security = { sudo.enable = true; - hideProcessInformation = false; }; users = { -- cgit v1.2.3 From 58ca345ec799df2537e837a5ccfda9e027229c67 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 25 Feb 2021 11:52:37 -0300 Subject: configuration.nix: Enable doas command --- configuration.nix | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 4635664..aa6f5ce 100644 --- a/configuration.nix +++ b/configuration.nix @@ -257,7 +257,6 @@ in { buku # replaces Firefox bookmarks cloc inetutils # telnet - doas nodePackages.node2nix ## Mail @@ -451,6 +450,12 @@ in { security = { sudo.enable = true; + doas = { + enable = true; + extraConfig = '' + permit persist setenv { NIX_PATH } :wheel + ''; + }; }; users = { -- cgit v1.2.3 From db0fe28c8166ae40c36d579c95054f97cbc1e957 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 25 Feb 2021 11:57:40 -0300 Subject: sh/aliases.sh: Add sudo alias to encourage myself to use doas --- sh/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/aliases.sh b/sh/aliases.sh index 0a1bb22..3ca0d6c 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -46,3 +46,4 @@ alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp alias :x='echo "Already out of vi XD"' alias :w='echo "Not inside vi!" && false' +alias sudo='echo "did you mean \"doas\""? && false' -- cgit v1.2.3 From a0b21ac60b84bb7d80b01fc174b90ef95e7dbd42 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 26 Feb 2021 21:24:21 -0300 Subject: configuration.nix: Add sharedc-latest from overlay --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index aa6f5ce..71d6854 100644 --- a/configuration.nix +++ b/configuration.nix @@ -314,6 +314,7 @@ in { ## EuAndreh overlay xyz-euandreh.remembering-latest xyz-euandreh.autoqemu-latest + xyz-euandreh.sharedc-latest xyz-euandreh.fallible-latest ## GUI programs -- cgit v1.2.3 From 19ff95fb56404247582f8ca81f30b8d7bff86c50 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 26 Feb 2021 22:22:02 -0300 Subject: fake-symlinks.sh: Add paku --- sh/fake-symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 43901d0..3a9a227 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -408,6 +408,7 @@ ln_all ln_makefile_only_guix_project servers \ byopds \ discussions-site \ package-repository \ + paku \ std-tools \ ssmtp ln_all ln_bare_project brinquedoteca \ -- cgit v1.2.3 From 85239d63c299a68628602d422cd38601253f0999 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Feb 2021 19:29:32 -0300 Subject: fzf.sh: Remove deleted file from list --- sh/fzf.sh | 1 - 1 file changed, 1 deletion(-) diff --git a/sh/fzf.sh b/sh/fzf.sh index d181f2b..776b36f 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -49,7 +49,6 @@ f() { V_FILES=' Sync/TODOs.md tmp/scratch.txt -annex/txt/things.md annex/bin/misc/git/mrconfig.ini archive/vid/playlist.txt dev/libre/others/dinheiros/money.ledger -- cgit v1.2.3 From 89443547e453755e87cb0086dfb90aa4c26cbc92 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Feb 2021 22:39:10 -0300 Subject: fake-symlinks: Remove unused git-notes-release.sh and NEWS --- sh/fake-symlinks.sh | 5 -- sh/templates/NEWS | 7 --- sh/templates/aux/workflow/git-notes-release.sh | 77 -------------------------- 3 files changed, 89 deletions(-) delete mode 100644 sh/templates/NEWS delete mode 100644 sh/templates/aux/workflow/git-notes-release.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 3a9a227..65f7c07 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -212,11 +212,6 @@ ln_ci() { fi } -ln_git_notes_release() { - cp_all aux/workflow/git-notes-release.sh - cp_if_not NEWS -} - ln_dicts() { cp_if_not doc/dictionaries/international.txt doc/dictionaries/en.txt } diff --git a/sh/templates/NEWS b/sh/templates/NEWS deleted file mode 100644 index 76f6a7f..0000000 --- a/sh/templates/NEWS +++ /dev/null @@ -1,7 +0,0 @@ -* Unreleased -** Added -** Changed -** Deprecated -** Removed -** Fixed -** Security diff --git a/sh/templates/aux/workflow/git-notes-release.sh b/sh/templates/aux/workflow/git-notes-release.sh deleted file mode 100644 index 4d55645..0000000 --- a/sh/templates/aux/workflow/git-notes-release.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh -set -eux - -DIST_ARCHIVES="$1" -VERSION="$2" -PACKAGE="$3" -BIN="${4:-}" - -if [ "$BIN" != --bin ]; then - # Assert version - if git rev-parse "$VERSION" > /dev/null; then - echo "Tar $VERSION already exists, exitting." - exit 2 - fi - - # Update NEWS - sed -i "s/^\* Unreleased$$/* $VERSION - $(date -I)/" NEWS - cat < $DIST_ARCHIVES - git cat-file -p $SHA_SIG > $DIST_ARCHIVES.asc -EOF -) - git notes append -m "$NOTE" - sed -i -e "s/blob?id=.*\"/blob?id=$(git notes --ref=refs/notes/tarballs list "$VERSION")\"/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - sed -i -e "s/(base32 \".*\")/(base32 \"$(guix download "$DIST_ARCHIVES" | tail -n 1)\")/" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - ./configure --enable-programmer-mode - git add "guix/channel/xyz/euandreh/$PACKAGE/channel.scm" "guix/channel/xyz/euandreh/$PACKAGE/channel.scm.in" - git commit -m "Update released version $VERSION in channel.scm.in file." - - # Publish release artifacts - git push --tags - git push origin refs/notes/tarballs - git push origin refs/notes/signatures - git push origin refs/notes/commits - git push -else - guix pull - BINARY_TARBALL="$(guix pack -RR -S /bin=bin -S /etc=etc "$PACKAGE")" - SHA_BIN="$(git hash-object -w "$BINARY_TARBALL")" - git notes --ref=refs/notes/binaries add -f -C "$SHA_BIN" "$VERSION" - NOTE=$(cat < $PACKAGE-bin.tar.gz - tar xf $PACKAGE-bin.tar.gz - bin/$PACKAGE -EOF -) - git notes append -m "$NOTE" - git push origin refs/notes/binaries - git push origin refs/notes/commits -fi -- cgit v1.2.3 From 479ccbdcc580a8758fed2bb427e45c15c79180de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Feb 2021 23:25:48 -0300 Subject: fake-symlinks: Add aux/workflow/sign-tarballs.sh --- aux/workflow/README.sh | 2 +- aux/workflow/dist.sh | 3 +++ aux/workflow/sign-tarballs.sh | 17 +++++++++++++++++ sh/fake-symlinks.sh | 1 + sh/templates/Makefile | 6 ++++-- sh/templates/aux/workflow/README.sh | 2 +- sh/templates/aux/workflow/dist.sh | 3 +++ sh/templates/aux/workflow/sign-tarballs.sh | 17 +++++++++++++++++ 8 files changed, 47 insertions(+), 4 deletions(-) create mode 100755 aux/workflow/sign-tarballs.sh create mode 100755 sh/templates/aux/workflow/sign-tarballs.sh diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh index 8313274..c14fe3b 100755 --- a/aux/workflow/README.sh +++ b/aux/workflow/README.sh @@ -9,7 +9,7 @@ MAILING_LIST="$3" RELEASES_LIST="$(mktemp)" for version in $(git tag); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" done RELEASES="$(mktemp)" diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh index 8f8f617..b337ef0 100755 --- a/aux/workflow/dist.sh +++ b/aux/workflow/dist.sh @@ -4,6 +4,7 @@ set -eu DATE="$1" VERSION="$2" VVERSION="v$2" +PROJECT="$3" if git show "$VVERSION" 1>/dev/null 2>/dev/null; then echo "Version '$VVERSION' already exists." >&2 @@ -21,3 +22,5 @@ if ! grep -q "^# $VERSION - $DATE$" CHANGELOG.md; then fi git tag "$VVERSION" + +sh aux/workflow/sign-tarballs.sh "$PROJECT" diff --git a/aux/workflow/sign-tarballs.sh b/aux/workflow/sign-tarballs.sh new file mode 100755 index 0000000..b88ff33 --- /dev/null +++ b/aux/workflow/sign-tarballs.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +PROJECT="$1" + +SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" +for tag in $(git tag); do + COMMIT="$(git rev-list -n1 "$tag")" + if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then + echo "Adding missing signature to $tag" >&2 + git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( + git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | + gpg --output - --armor --detach-sign | + git hash-object -w --stdin + )" "$tag" + fi +done diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 65f7c07..b17c30c 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -179,6 +179,7 @@ ln_build_aux() { aux/workflow/README.sh \ aux/workflow/commonmark.sh \ aux/workflow/dist.sh \ + aux/workflow/sign-tarballs.sh \ aux/workflow/public.sh cp_if_not TODOs.md diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 019c3ea..e50022f 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -96,10 +96,12 @@ uninstall: clean: rm -rf public/ $(objects) $(liba) $(libso-real) $(soaliases) run-tests fallible* vgcore* +NAME = __PROJECT__ + dist: - sh aux/workflow/dist.sh $(DATE) $(VERSION) + sh aux/workflow/dist.sh $(DATE) $(VERSION) $(NAME) public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/public.sh __PROJECT_UC__ __PROJECT__ __MAILING_LIST__ + sh aux/workflow/public.sh __PROJECT_UC__ $(NAME) __MAILING_LIST__ .PHONY: all clean check dev-check dist install uninstall diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh index 8313274..c14fe3b 100755 --- a/sh/templates/aux/workflow/README.sh +++ b/sh/templates/aux/workflow/README.sh @@ -9,7 +9,7 @@ MAILING_LIST="$3" RELEASES_LIST="$(mktemp)" for version in $(git tag); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" done RELEASES="$(mktemp)" diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index 8f8f617..b337ef0 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -4,6 +4,7 @@ set -eu DATE="$1" VERSION="$2" VVERSION="v$2" +PROJECT="$3" if git show "$VVERSION" 1>/dev/null 2>/dev/null; then echo "Version '$VVERSION' already exists." >&2 @@ -21,3 +22,5 @@ if ! grep -q "^# $VERSION - $DATE$" CHANGELOG.md; then fi git tag "$VVERSION" + +sh aux/workflow/sign-tarballs.sh "$PROJECT" diff --git a/sh/templates/aux/workflow/sign-tarballs.sh b/sh/templates/aux/workflow/sign-tarballs.sh new file mode 100755 index 0000000..b88ff33 --- /dev/null +++ b/sh/templates/aux/workflow/sign-tarballs.sh @@ -0,0 +1,17 @@ +#!/bin/sh +set -eu + +PROJECT="$1" + +SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" +for tag in $(git tag); do + COMMIT="$(git rev-list -n1 "$tag")" + if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then + echo "Adding missing signature to $tag" >&2 + git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( + git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | + gpg --output - --armor --detach-sign | + git hash-object -w --stdin + )" "$tag" + fi +done -- cgit v1.2.3 From f196e0f2a6e160618d95de25c92221c533e9c079 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 27 Feb 2021 23:37:56 -0300 Subject: fake-symlinks: README.sh: Reverse list of tags --- aux/workflow/README.sh | 2 +- sh/templates/aux/workflow/README.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh index c14fe3b..e30344f 100755 --- a/aux/workflow/README.sh +++ b/aux/workflow/README.sh @@ -8,7 +8,7 @@ PROJECT="$2" MAILING_LIST="$3" RELEASES_LIST="$(mktemp)" -for version in $(git tag); do +for version in $(git tag | perl -e 'print reverse <>'); do echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" done diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh index c14fe3b..e30344f 100755 --- a/sh/templates/aux/workflow/README.sh +++ b/sh/templates/aux/workflow/README.sh @@ -8,7 +8,7 @@ PROJECT="$2" MAILING_LIST="$3" RELEASES_LIST="$(mktemp)" -for version in $(git tag); do +for version in $(git tag | perl -e 'print reverse <>'); do echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" done -- cgit v1.2.3 From 9577603ed88821593fa68001ce7672173af8e98f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 17:22:32 -0300 Subject: fake-symlinks: Add assert-changelog.sh, adapt other files accordingly --- aux/workflow/assert-changelog.sh | 13 +++++++++++++ aux/workflow/dist.sh | 5 +---- sh/fake-symlinks.sh | 19 ++++++++++--------- sh/templates/Makefile | 6 +++--- sh/templates/aux/workflow/assert-changelog.sh | 13 +++++++++++++ sh/templates/aux/workflow/dist.sh | 5 +---- 6 files changed, 41 insertions(+), 20 deletions(-) create mode 100755 aux/workflow/assert-changelog.sh create mode 100755 sh/templates/aux/workflow/assert-changelog.sh diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh new file mode 100755 index 0000000..981ff9d --- /dev/null +++ b/aux/workflow/assert-changelog.sh @@ -0,0 +1,13 @@ +#!/bin/sh +set -eu + +DATE="$1" +VERSION="$2" +VVERSION="v$2" +PROJECT="$3" + +CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" +if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_REGEX' entry from CHANGELOG.md" >&2 + exit 1 +fi diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh index b337ef0..afe2c92 100755 --- a/aux/workflow/dist.sh +++ b/aux/workflow/dist.sh @@ -16,10 +16,7 @@ if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then exit 1 fi -if ! grep -q "^# $VERSION - $DATE$" CHANGELOG.md; then - echo "Missing '# $VERSION - $DATE' entry from CHANGELOG.md" >&2 - exit 1 -fi +sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" git tag "$VVERSION" diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index b17c30c..51c0219 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -171,15 +171,16 @@ ln_init() { } ln_build_aux() { - cp_all aux/assert-shellcheck.sh \ - aux/workflow/assert-todos.sh \ - aux/workflow/TODOs.sh \ - aux/workflow/style.css \ - aux/workflow/preamble.md \ - aux/workflow/README.sh \ - aux/workflow/commonmark.sh \ - aux/workflow/dist.sh \ - aux/workflow/sign-tarballs.sh \ + cp_all aux/assert-shellcheck.sh \ + aux/workflow/assert-todos.sh \ + aux/workflow/assert-changelog.sh \ + aux/workflow/TODOs.sh \ + aux/workflow/style.css \ + aux/workflow/preamble.md \ + aux/workflow/README.sh \ + aux/workflow/commonmark.sh \ + aux/workflow/dist.sh \ + aux/workflow/sign-tarballs.sh \ aux/workflow/public.sh cp_if_not TODOs.md diff --git a/sh/templates/Makefile b/sh/templates/Makefile index e50022f..b4bfe72 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -10,6 +10,7 @@ MAJOR = 0 MINOR = 1 PATCH = 0 VERSION = $(MAJOR).$(MINOR).$(PATCH) +NAME = __PROJECT__ headers = \ src/f.h @@ -28,7 +29,7 @@ objects = $(sources:.c=.o) .c.o: $(CC) -c $(CFLAGS) $(LDFLAGS) -o $@ $< -libname = lib__PROJECT__ +libname = lib$(NAME) liba = $(libname).a libso = $(libname).so libso-real = $(libso).$(MAJOR).$(MINOR).$(PATCH) @@ -73,6 +74,7 @@ dev-check: all fallible-tests sh aux/assert-clang-format.sh sh aux/assert-shellcheck.sh sh aux/workflow/assert-todos.sh + sh aux/workflow/assert-changelog.sh $(DATE) $(VERSION) $(NAME) do_subst = sed \ -e 's:[@]VERSION[@]:$(VERSION):g' \ @@ -96,8 +98,6 @@ uninstall: clean: rm -rf public/ $(objects) $(liba) $(libso-real) $(soaliases) run-tests fallible* vgcore* -NAME = __PROJECT__ - dist: sh aux/workflow/dist.sh $(DATE) $(VERSION) $(NAME) diff --git a/sh/templates/aux/workflow/assert-changelog.sh b/sh/templates/aux/workflow/assert-changelog.sh new file mode 100755 index 0000000..981ff9d --- /dev/null +++ b/sh/templates/aux/workflow/assert-changelog.sh @@ -0,0 +1,13 @@ +#!/bin/sh +set -eu + +DATE="$1" +VERSION="$2" +VVERSION="v$2" +PROJECT="$3" + +CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" +if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_REGEX' entry from CHANGELOG.md" >&2 + exit 1 +fi diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index b337ef0..afe2c92 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -16,10 +16,7 @@ if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then exit 1 fi -if ! grep -q "^# $VERSION - $DATE$" CHANGELOG.md; then - echo "Missing '# $VERSION - $DATE' entry from CHANGELOG.md" >&2 - exit 1 -fi +sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" git tag "$VVERSION" -- cgit v1.2.3 From 2fc6ae548e90a79c87c9d235fda30b66fe6749a0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 17:28:38 -0300 Subject: fake-symlinks: Revert order of check -> dev-check dependency --- aux/ci/ci-build.sh | 2 +- sh/templates/Makefile | 8 ++------ sh/templates/aux/ci/ci-build.sh | 2 +- 3 files changed, 4 insertions(+), 8 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index fb49e71..1c033fe 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -50,7 +50,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean check public' + $RUNNER 'make clean dev-check public' rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" diff --git a/sh/templates/Makefile b/sh/templates/Makefile index b4bfe72..e5d6e3b 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -54,12 +54,8 @@ run-tests: $(headers) $(sources) tests/tests.c fallible-tests: $(headers) $(sources) tests/tests.c $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -DFALLIBLE -o $@ tests/tests.c $(sources) $(LDLIBS) -lfallible -check: all +check: run-tests ./run-tests - if [ -d .git ]; then \ - echo 'Assuming Git repository, running development check.'; \ - $(MAKE) dev-check; \ - fi VALGRIND_FLAGS= \ --show-error-list=yes \ @@ -68,7 +64,7 @@ VALGRIND_FLAGS= \ --track-origins=yes \ --error-exitcode=1 -dev-check: all fallible-tests +dev-check: all check fallible-tests valgrind $(VALGRIND_FLAGS) ./run-tests fallible-check ./fallible-tests sh aux/assert-clang-format.sh diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index fb49e71..1c033fe 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -50,7 +50,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean check public' + $RUNNER 'make clean dev-check public' rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From b8ef016220086d81cb1ab8d71268be7ffe34be3a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 17:28:57 -0300 Subject: Add mailcap.conf for alot HTML reading --- mailcap.conf | 1 + sh/symlinks.sh | 1 + 2 files changed, 2 insertions(+) create mode 100644 mailcap.conf diff --git a/mailcap.conf b/mailcap.conf new file mode 100644 index 0000000..aeea68d --- /dev/null +++ b/mailcap.conf @@ -0,0 +1 @@ +text/html; w3m -dump -o document_charset=%{charset} '%s'; nametemplate=%s.html; copiousoutput diff --git a/sh/symlinks.sh b/sh/symlinks.sh index e474c98..7a6b152 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -19,6 +19,7 @@ ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/npmrc.sh" ~/.npmrc +ln -fs "$DOTFILES/mailcap.conf" ~/.mailcap mkdir -p ~/tmp/ touch ~/tmp/scratch.txt -- cgit v1.2.3 From 369ee532037bba2a99f7c2628af519aaed02fdbf Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 17:31:45 -0300 Subject: configuration.nix: Add alot and w3m, remove mutt --- configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 71d6854..ce49fe9 100644 --- a/configuration.nix +++ b/configuration.nix @@ -262,9 +262,10 @@ in { ## Mail notmuch isync + alot + w3m ## Conversations - mutt gomuks weechat # replacing ERC poezio -- cgit v1.2.3 From fa60e1eb6fb948d3ec336c69c729162e15d18653 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 18:42:23 -0300 Subject: fake-symlinks.sh: Remove logic that looks for ./configure and Makefile.in files --- sh/fake-symlinks.sh | 16 ++-------------- 1 file changed, 2 insertions(+), 14 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 51c0219..e119803 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -128,7 +128,7 @@ ln_env() { export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - if [ -f "$PREFIX/Makefile.in" ] || [ -f "$PREFIX/Makefile" ]; then + if [ -f "$PREFIX/Makefile" ]; then export ENABLE_CI=1 else export ENABLE_CI= @@ -151,12 +151,6 @@ ln_env() { else ENABLE_README_SH= fi - - if [ -f "$PREFIX/configure" ] && [ ! -x "$PREFIX/configure" ]; then - ENABLE_CONFIGURE=1 - else - ENABLE_CONFIGURE= - fi } ln_init() { @@ -233,13 +227,7 @@ ln_antora() { ln_simple_makefile() { - if [ -n "$ENABLE_CONFIGURE" ]; then - sed_all Makefile.in - rm -f "$PREFIX/configure" - cp_all configure - else - envsubst_if_not Makefile - fi + sed_if_not Makefile if [ -n "$ENABLE_C" ]; then cp_all aux/assert-clang-format.sh -- cgit v1.2.3 From 923c57ad4c22fa01cdfff043624551e278737628 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 18:43:11 -0300 Subject: fake-symlinks: Makefile: Align NAME variable --- sh/templates/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index e5d6e3b..a0fb003 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -10,7 +10,7 @@ MAJOR = 0 MINOR = 1 PATCH = 0 VERSION = $(MAJOR).$(MINOR).$(PATCH) -NAME = __PROJECT__ +NAME = __PROJECT__ headers = \ src/f.h -- cgit v1.2.3 From 32abb0a911c33814deaf6514b0a6f03386d9e6bc Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 18:49:33 -0300 Subject: fake-symlinks: assert-changelog.sh: Fix typoed name --- aux/workflow/assert-changelog.sh | 2 +- sh/templates/aux/workflow/assert-changelog.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh index 981ff9d..83d7fe5 100755 --- a/aux/workflow/assert-changelog.sh +++ b/aux/workflow/assert-changelog.sh @@ -8,6 +8,6 @@ PROJECT="$3" CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_REGEX' entry from CHANGELOG.md" >&2 + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 exit 1 fi diff --git a/sh/templates/aux/workflow/assert-changelog.sh b/sh/templates/aux/workflow/assert-changelog.sh index 981ff9d..83d7fe5 100755 --- a/sh/templates/aux/workflow/assert-changelog.sh +++ b/sh/templates/aux/workflow/assert-changelog.sh @@ -8,6 +8,6 @@ PROJECT="$3" CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_REGEX' entry from CHANGELOG.md" >&2 + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 exit 1 fi -- cgit v1.2.3 From 7bda7348c74fd61557186b73661e29ae4cb7ce2b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 18:50:02 -0300 Subject: Makefile: Add stub dev-check target --- Makefile | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index bd3da54..9ace5fa 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,15 @@ -.PHONY: check check: sh aux/assert-shellcheck.sh sh aux/assert-todos.sh sh aux/assert-nixfmt.sh sh sh/templates/aux/assert-clang-format.sh -.PHONY: clean +dev-check: check + clean: rm -rf public/ public: mkdir -p public + +.PHONY: clean check dev-check -- cgit v1.2.3 From 78540438dab21981da5fdf522e772efe95334736 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 21:24:08 -0300 Subject: fake-symlinks: assert-changelog.sh: Iterate on tags instead of getting the tag as an argument --- aux/workflow/assert-changelog.sh | 19 ++++++++++--------- sh/templates/Makefile | 2 +- sh/templates/aux/workflow/assert-changelog.sh | 19 ++++++++++--------- 3 files changed, 21 insertions(+), 19 deletions(-) diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh index 83d7fe5..d39f527 100755 --- a/aux/workflow/assert-changelog.sh +++ b/aux/workflow/assert-changelog.sh @@ -1,13 +1,14 @@ #!/bin/sh set -eu -DATE="$1" -VERSION="$2" -VVERSION="v$2" -PROJECT="$3" +PROJECT="$1" -CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" -if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 - exit 1 -fi +for VVERSION in $(git tag); do + VERSION="${VVERSION#v}" + DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" + CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" + if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 + exit 1 + fi +done diff --git a/sh/templates/Makefile b/sh/templates/Makefile index a0fb003..65e3e69 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -70,7 +70,7 @@ dev-check: all check fallible-tests sh aux/assert-clang-format.sh sh aux/assert-shellcheck.sh sh aux/workflow/assert-todos.sh - sh aux/workflow/assert-changelog.sh $(DATE) $(VERSION) $(NAME) + sh aux/workflow/assert-changelog.sh $(NAME) do_subst = sed \ -e 's:[@]VERSION[@]:$(VERSION):g' \ diff --git a/sh/templates/aux/workflow/assert-changelog.sh b/sh/templates/aux/workflow/assert-changelog.sh index 83d7fe5..d39f527 100755 --- a/sh/templates/aux/workflow/assert-changelog.sh +++ b/sh/templates/aux/workflow/assert-changelog.sh @@ -1,13 +1,14 @@ #!/bin/sh set -eu -DATE="$1" -VERSION="$2" -VVERSION="v$2" -PROJECT="$3" +PROJECT="$1" -CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" -if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 - exit 1 -fi +for VVERSION in $(git tag); do + VERSION="${VVERSION#v}" + DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" + CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" + if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 + exit 1 + fi +done -- cgit v1.2.3 From a7ad3119f881b820840c4024969ea933e7554d76 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 21:24:22 -0300 Subject: sh/bashrc.sh: Rename env.sh -> priv.sh --- sh/bashrc.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/bashrc.sh b/sh/bashrc.sh index edb7340..2012e67 100644 --- a/sh/bashrc.sh +++ b/sh/bashrc.sh @@ -14,5 +14,5 @@ export DOTFILES=~/dev/libre/dotfiles . $DOTFILES/sh/util.sh . $DOTFILES/sh/agents.sh . $DOTFILES/sh/symlinks.sh -. "$HOME/annex/bin/misc/env.sh" -. "$HOME/.nurc" +. ~/annex/bin/misc/priv.sh +. ~/.nurc -- cgit v1.2.3 From dfbb8c8f3138d93092d9260883926539a48b7b27 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 21:27:07 -0300 Subject: aliases.sh: Simplify email aliases --- sh/aliases.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sh/aliases.sh b/sh/aliases.sh index 3ca0d6c..9f08cbd 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -15,8 +15,7 @@ alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" alias watch="watch --color " alias mr="mr -s" alias ncdu="ncdu --color dark" -alias mm="mbsync -A && notmuch new" -alias m="mbsync EuAndreh && notmuch new" +alias m="mbsync -a && notmuch new" alias n='neomutt' alias p='ping euandre.org -c 3' alias playerctl="playerctl --player=\"\$(cat ~/.cache/euandreh/mpris-player.txt)\"" -- cgit v1.2.3 From f738181cd90a8ddf5f4d1c22fd52d060c6d14b3f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 21:27:21 -0300 Subject: cron/backup.sh: Get passphrase from pass --- cron/backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cron/backup.sh b/cron/backup.sh index 7f53c12..588a6b8 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -3,7 +3,7 @@ set -eux # shellcheck source=/dev/null . "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" -BORG_PASSPHRASE="$(cat ~/annex/secret/Borg/passphrase.txt)" +BORG_PASSPHRASE="$(pass show Borg)" export BORG_PASSPHRASE R='16686@ch-s010.rsync.net' export BORG_REMOTE_PATH='borg1' -- cgit v1.2.3 From 33996610613e78d6f1eb61da36c40ed725ea3265 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 21:31:06 -0300 Subject: Re-add cron/notmuch-dump.sh and scripts/notmuch-restore.sh --- cron/notmuch-dump.sh | 6 ++++++ scripts/notmuch-restore.sh | 4 ++++ 2 files changed, 10 insertions(+) create mode 100755 cron/notmuch-dump.sh create mode 100755 scripts/notmuch-restore.sh diff --git a/cron/notmuch-dump.sh b/cron/notmuch-dump.sh new file mode 100755 index 0000000..4215831 --- /dev/null +++ b/cron/notmuch-dump.sh @@ -0,0 +1,6 @@ +#!/bin/sh -eux + +[ -f ~/archive/notmuch-archive.today.txt ] && { + mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt +} +notmuch dump --output ~/archive/notmuch-archive.today.txt diff --git a/scripts/notmuch-restore.sh b/scripts/notmuch-restore.sh new file mode 100755 index 0000000..f3dc386 --- /dev/null +++ b/scripts/notmuch-restore.sh @@ -0,0 +1,4 @@ +#!/bin/sh -eux + +notmuch new +notmuch restore --input ~/archive/notmuch-archive.today.txt -- cgit v1.2.3 From 04ba92155385795b3285a0583f8b27386cbb5ce3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 28 Feb 2021 21:33:30 -0300 Subject: configuration.nix: Add afew package --- configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index ce49fe9..f68cf06 100644 --- a/configuration.nix +++ b/configuration.nix @@ -260,8 +260,9 @@ in { nodePackages.node2nix ## Mail - notmuch isync + notmuch + afew alot w3m -- cgit v1.2.3 From 5df9da5125ae035a930f932d5bb4ee01fb82b74c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Mar 2021 00:26:42 -0300 Subject: fzf.sh: Add dependencies.dot v() list --- sh/fzf.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/fzf.sh b/sh/fzf.sh index 776b36f..845042a 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -50,6 +50,7 @@ V_FILES=' Sync/TODOs.md tmp/scratch.txt annex/bin/misc/git/mrconfig.ini +annex/bin/misc/dependencies.dot archive/vid/playlist.txt dev/libre/others/dinheiros/money.ledger ' -- cgit v1.2.3 From d991e171d406e24ebe6c3d00c10b722e5254201c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Mar 2021 00:32:42 -0300 Subject: fake-symlinks.sh: Remove ssmtp --- sh/fake-symlinks.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index e119803..1ee08d0 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -394,8 +394,7 @@ ln_all ln_makefile_only_guix_project servers \ discussions-site \ package-repository \ paku \ - std-tools \ - ssmtp + std-tools ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From c081ea1fdb22fc174bb13a1fe87f14e9348d9c2c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Mar 2021 09:57:49 -0300 Subject: sh/symlinks.sh: mkdir -p Guix config directory --- sh/symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 7a6b152..2197dc6 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -64,6 +64,7 @@ ln -fs "${DOTFILES}/ranger.conf" ~/.config/ranger/rc.conf ln -fs "$HOME/annex/bin/misc/nurc.sh" ~/.nurc ## Guix +mkdir -p ~/.config/guix ln -fs "$DOTFILES/guix/channels.scm" ~/.config/guix/channels.scm ## pimutils -- cgit v1.2.3 From ebeeb4d0149929b29342b0d14d2257fc39303a5d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Mar 2021 09:58:01 -0300 Subject: configuration.nix: Switch to msmtp from ssmtp --- configuration.nix | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) diff --git a/configuration.nix b/configuration.nix index f68cf06..4f9fb7d 100644 --- a/configuration.nix +++ b/configuration.nix @@ -363,22 +363,16 @@ in { programs = { bash.enableCompletion = true; autojump.enable = true; + msmtp = { + enable = true; + extraConfig = builtins.readFile /home/andreh/.config/msmtp/config; + setSendmail = true; + }; }; xdg.portal.enable = true; services = { flatpak.enable = enableFlatpak; - ssmtp = { - enable = true; - authPassFile = "/home/andreh/annex/secret/SMTP/euandreh.txt"; - authUser = "eu@euandre.org"; - domain = "euandre.org"; - hostName = "box.euandre.org:587"; - root = "root@euandre.org"; - setSendmail = true; - useSTARTTLS = true; - useTLS = true; - }; blueman.enable = true; # We can see the actual generated crontab at /etc/crontab -- cgit v1.2.3 From 7fb7cbd3e9098e5ae499ba3c2a4793ed4d9ce4f3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 1 Mar 2021 22:38:47 -0300 Subject: fake-symlinks: Makefile: Add -rpath to LDFLAGS --- sh/templates/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 65e3e69..fde0daf 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -1,7 +1,7 @@ .POSIX: CC = c99 CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g -LDFLAGS = +LDFLAGS = -Wl,-rpath,$$LIBRARY_PATH LDLIBS = PREFIX = /usr/local MANPREFIX = $(PREFIX)/share/man -- cgit v1.2.3 From 1457bb20b1320ee3db6313234ed6536f9f1ea482 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Mar 2021 09:59:28 -0300 Subject: configuration.nix: Remove Emacs *dramatic chipmunk* --- configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 4f9fb7d..bff8fef 100644 --- a/configuration.nix +++ b/configuration.nix @@ -329,7 +329,6 @@ in { }) ## Candidates to be replaced by alternatives - emacs # just missing configuring mutt active-quodlibet # cmus + mutagen gpodder-with-youtube-dl # podboat? transmission-gtk # Transmission TUI -- cgit v1.2.3 From 76485a37cfa54a9fce37145d56a4b58559766143 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 2 Mar 2021 11:52:31 -0300 Subject: configuration.nix: cmus+mutagen over QuodLibet --- configuration.nix | 22 ++++------------------ 1 file changed, 4 insertions(+), 18 deletions(-) diff --git a/configuration.nix b/configuration.nix index bff8fef..95aef75 100644 --- a/configuration.nix +++ b/configuration.nix @@ -122,23 +122,6 @@ in { enableDebugInfo = true; systemPackages = let - pkgs-19-09 = import (pkgs.fetchzip { - url = "https://github.com/NixOS/nixpkgs/archive/19.09.zip"; - sha256 = "0mhqhq21y5vrr1f30qd2bvydv4bbbslvyzclhw0kdxmkgg3z4c92"; - }) { }; - - noTestAttrs = { - doCheck = false; - doInstallCheck = false; - meta = { broken = false; }; - }; - # See https://github.com/NixOS/nixpkgs/issues/53938#issuecomment-454158967 - untested-quodlibet = - pkgs.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - fallback-quodlibet = - pkgs-19-09.quodlibet-full.overrideAttrs (oldAttrs: noTestAttrs); - active-quodlibet = untested-quodlibet; - gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { propagatedBuildInputs = oldAttrs.propagatedBuildInputs ++ [ pkgs.python3Packages.youtube-dl ]; @@ -328,8 +311,11 @@ in { scripts = with mpvScripts; [ mpris sponsorblock ]; }) + ## Desktop programs + cmus + mutagen + ## Candidates to be replaced by alternatives - active-quodlibet # cmus + mutagen gpodder-with-youtube-dl # podboat? transmission-gtk # Transmission TUI firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better -- cgit v1.2.3 From b70475a3613c9faa73e26e74cebd588a59e5b137 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Mar 2021 12:54:39 -0300 Subject: configuration.nix: Remove qutebrowser --- configuration.nix | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index 95aef75..5a9a768 100644 --- a/configuration.nix +++ b/configuration.nix @@ -306,10 +306,10 @@ in { audacity zbar calibre - qutebrowser (mpv-with-scripts.override { scripts = with mpvScripts; [ mpris sponsorblock ]; }) + firefox ## Desktop programs cmus @@ -318,7 +318,6 @@ in { ## Candidates to be replaced by alternatives gpodder-with-youtube-dl # podboat? transmission-gtk # Transmission TUI - firefox # qutebrowser: the ad-blocker working, but uBlock Origin is still much better tdesktop # telegram -> gomuks ] ++ proprietaryPackages ++ nu-packages; }; -- cgit v1.2.3 From 56b3175f1384112d55d3436238e702104fbc9e4d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Mar 2021 13:21:12 -0300 Subject: xmonad/scripts/xmobar-notmuch.sh: Update to alot tags --- xmonad/scripts/xmobar-notmuch.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/scripts/xmobar-notmuch.sh b/xmonad/scripts/xmobar-notmuch.sh index 691d570..3d41a3c 100755 --- a/xmonad/scripts/xmobar-notmuch.sh +++ b/xmonad/scripts/xmobar-notmuch.sh @@ -2,7 +2,7 @@ set -eu while true; do - printf "mail: %s/%s\n" "$(notmuch count 'tag:unread AND (NOT tag:ml OR thread:{tag:track})')" "$(notmuch count tag:inbox)" + printf "mail: %s/%s\n" "$(notmuch count tag:unread AND NOT tag:lists AND NOT tag:killed)" "$(notmuch count tag:inbox AND NOT tag:lists tag:killed)" if acpi -a | grep -q off-line; then sleep $((60 * 15)) else -- cgit v1.2.3 From a69296f1ab2b6b97a8a9add8c1fb19931fe8b286 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Mar 2021 13:38:08 -0300 Subject: scripts/open: Open DJVU files with Zathura --- scripts/open | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/open b/scripts/open index 5680549..36ff3b9 100755 --- a/scripts/open +++ b/scripts/open @@ -11,7 +11,7 @@ case "$1" in http*|*.svg|*.html) "$BROWSER" "$1" ;; - *.pdf) + *.pdf|*.djvu) zathura "$1" ;; *.flac|*.ogg|*.mkv) -- cgit v1.2.3 From 29dc5a829ab8d043cc5c6ebe3462c6b869ea59fe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Mar 2021 14:34:16 -0300 Subject: sh/fzf.sh: Add fcm --- sh/fzf.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sh/fzf.sh b/sh/fzf.sh index 845042a..7c0d8e5 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -66,3 +66,7 @@ v() { vi "$HOME/$f" fi } + +fcm() { + git log --oneline | fzf | cut -d\ -f1 +} -- cgit v1.2.3 From 6d8efececc4ad0bb44b5b2fccab49ca45dc6ce23 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 4 Mar 2021 14:41:32 -0300 Subject: fake-symlinks.sh: Add lex-yacc --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1ee08d0..ef4faaf 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -370,7 +370,8 @@ ln_all ln_description_foreign_project guix \ ml-archives \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ - pdfs-da-d-maria + pdfs-da-d-maria \ + lex-yacc ln_all ln_makefile_only_guix_project servers \ pires \ remembering \ -- cgit v1.2.3 From 649b3af213447f4c457b8d495ea3f4caa5aed501 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 5 Mar 2021 06:50:21 -0300 Subject: configuration.nix: Remove libs from system installation --- configuration.nix | 2 -- 1 file changed, 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index 5a9a768..a7ba48a 100644 --- a/configuration.nix +++ b/configuration.nix @@ -299,8 +299,6 @@ in { ## EuAndreh overlay xyz-euandreh.remembering-latest xyz-euandreh.autoqemu-latest - xyz-euandreh.sharedc-latest - xyz-euandreh.fallible-latest ## GUI programs audacity -- cgit v1.2.3 From 648acaab5b45d5c616b0c30b004a921d09392996 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 5 Mar 2021 06:54:00 -0300 Subject: configuration.nix: Remove C++ and Linux manpages, stick to POSIX man pages --- configuration.nix | 3 --- 1 file changed, 3 deletions(-) diff --git a/configuration.nix b/configuration.nix index a7ba48a..07dd918 100644 --- a/configuration.nix +++ b/configuration.nix @@ -162,11 +162,8 @@ in { in with pkgs; [ ## Documentation - man-pages posix_man_pages scheme-manpages - stdman - stdmanpages ## Personal data tools gitAndTools.git-open -- cgit v1.2.3 From 5aba761adf24222536bd2741bb134533d4867a06 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 5 Mar 2021 07:33:00 -0300 Subject: fake-symlinks: Makefile: Inherit Valgrind flags from fallible --- sh/templates/Makefile | 9 +-------- 1 file changed, 1 insertion(+), 8 deletions(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index fde0daf..6c15524 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -57,15 +57,8 @@ fallible-tests: $(headers) $(sources) tests/tests.c check: run-tests ./run-tests -VALGRIND_FLAGS= \ - --show-error-list=yes \ - --show-leak-kinds=all \ - --leak-check=full \ - --track-origins=yes \ - --error-exitcode=1 - dev-check: all check fallible-tests - valgrind $(VALGRIND_FLAGS) ./run-tests + valgrind `fallible-check --valgrind-flags` ./run-tests fallible-check ./fallible-tests sh aux/assert-clang-format.sh sh aux/assert-shellcheck.sh -- cgit v1.2.3 From 1325cefdda4b8ecf51a246f7ecf2ae129b67adc6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 5 Mar 2021 17:04:12 -0300 Subject: configuration.nix: Add gdb package --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index 07dd918..e068a03 100644 --- a/configuration.nix +++ b/configuration.nix @@ -259,6 +259,7 @@ in { gcc clang-tools valgrind + gdb ## POSIX bmake-with-alias -- cgit v1.2.3 From 88d1a32ef9496c01f7fcd7ee80eecb73549c2445 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 5 Mar 2021 17:04:26 -0300 Subject: fake-symlinks: Makefile: Add -O3 to CFLAGS --- sh/templates/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 6c15524..37c4594 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -1,6 +1,6 @@ .POSIX: CC = c99 -CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g +CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g -O3 LDFLAGS = -Wl,-rpath,$$LIBRARY_PATH LDLIBS = PREFIX = /usr/local -- cgit v1.2.3 From 3c61b26d4530e1b74188a7b9f0eb5033761b21c9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 5 Mar 2021 17:57:54 -0300 Subject: fake-symlinks.sh: Add gitstatic --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index ef4faaf..4ea859c 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -395,7 +395,8 @@ ln_all ln_makefile_only_guix_project servers \ discussions-site \ package-repository \ paku \ - std-tools + std-tools \ + gistatic ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 76f519a51c4c07d03e397537269656c249597973 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 16:07:44 -0300 Subject: scripts/open: Launch zathura async --- scripts/open | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/scripts/open b/scripts/open index 36ff3b9..a8e3501 100755 --- a/scripts/open +++ b/scripts/open @@ -12,7 +12,8 @@ case "$1" in "$BROWSER" "$1" ;; *.pdf|*.djvu) - zathura "$1" + zathura "$1" 1>&2 2>/dev/null & + disown ;; *.flac|*.ogg|*.mkv) vid "$1" -- cgit v1.2.3 From 4ada95235dccd4567ad0c0b61b641900653aaf1f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 16:08:08 -0300 Subject: fake-symlinks: Makefile: Add default $(binaries) installation --- sh/templates/Makefile | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 37c4594..f9b261c 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -18,6 +18,9 @@ headers = \ sources = \ src/f.c +binaries = \ + f + manpages = \ doc/f.1 @@ -73,6 +76,7 @@ install: all $(soaliases) for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basename $$h`; done for f in $(liba) $(libso-real); do install -m 755 -D $$f $(DESTDIR)$(PREFIX)/lib/$$f; done for a in $(soaliases); do mv $$a $(DESTDIR)$(PREFIX)/lib/; done + for b in $(binaries); do install -m 755 -D $$b $(DESTDIR)$(PREFIX)/bin/$$b; done for m in $(manpages); do \ n=$${m##*.}; \ mkdir -p $(DESTDIR)$(MANPREFIX)/man$$m; \ -- cgit v1.2.3 From b0b8c8d50b7d931e4ffc6b92718453bdb02d3e1d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 16:08:20 -0300 Subject: fake-symlinks.sh: Add listatic --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 4ea859c..e6479e3 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -396,7 +396,8 @@ ln_all ln_makefile_only_guix_project servers \ package-repository \ paku \ std-tools \ - gistatic + gistatic \ + listatic ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 3f25843e1e34858c64eabf2c985e85eae24916bb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 16:10:07 -0300 Subject: fake-symlinks: aux/workflow/dist.sh: Assert commit message --- aux/workflow/dist.sh | 5 +++++ sh/templates/aux/workflow/dist.sh | 5 +++++ 2 files changed, 10 insertions(+) diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh index afe2c92..0ae0ec4 100755 --- a/aux/workflow/dist.sh +++ b/aux/workflow/dist.sh @@ -16,6 +16,11 @@ if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then exit 1 fi +if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then + echo "Commit message isn't 'Release $VVERSION'." >&2 + exit 1 +fi + sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" git tag "$VVERSION" diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index afe2c92..0ae0ec4 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -16,6 +16,11 @@ if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then exit 1 fi +if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then + echo "Commit message isn't 'Release $VVERSION'." >&2 + exit 1 +fi + sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" git tag "$VVERSION" -- cgit v1.2.3 From 42e48b27d613ff1b410e2a4646cde34705f72b8d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 16:12:21 -0300 Subject: scripts/open: Use nohup over disown --- scripts/open | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/scripts/open b/scripts/open index a8e3501..7fa2d50 100755 --- a/scripts/open +++ b/scripts/open @@ -12,8 +12,7 @@ case "$1" in "$BROWSER" "$1" ;; *.pdf|*.djvu) - zathura "$1" 1>&2 2>/dev/null & - disown + nohup zathura "$1" 1>&2 2>/dev/null & ;; *.flac|*.ogg|*.mkv) vid "$1" -- cgit v1.2.3 From f0ab04f2fad00c67356a35e025055cdbf7bbfb9a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 18:16:40 -0300 Subject: sh/env.sh: Add $PREFIX --- sh/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/env.sh b/sh/env.sh index baf0eac..16509da 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -17,6 +17,7 @@ export PKG_CONFIG_PATH="${PKG_CONFIG_PATH:-}${PKG_CONFIG_PATH:+:}$HOME/.local/li export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}${LD_LIBRARY_PATH:+:}$HOME/.local/lib" MANPATH="${MANPATH:-$HOME/.local/share/man:$(manpath)}" export MANPATH +export PREFIX="$HOME/.local" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From 571da2fe82fbcb8294910e30b1e78954afb7b8a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 18:45:37 -0300 Subject: configuration.nix: Add clang package --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index e068a03..124d236 100644 --- a/configuration.nix +++ b/configuration.nix @@ -257,6 +257,7 @@ in { mrsh dash gcc + clang clang-tools valgrind gdb -- cgit v1.2.3 From 54efc3d90bdc8c65c185c112e3f5d54030c11a24 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 19:40:04 -0300 Subject: fake-symlinks: ci-build.sh: Suppress rsync stderr from CI logs --- aux/ci/ci-build.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 1c033fe..12eb677 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -52,5 +52,5 @@ EOF $RUNNER 'make clean dev-check public' - rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete + rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 1c033fe..12eb677 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -52,5 +52,5 @@ EOF $RUNNER 'make clean dev-check public' - rsync -avzzP public/ "/srv/http/$PACKAGE/" --delete + rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From a87c6c403b75a88b1062773ff45910ce66de5606 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 20:50:27 -0300 Subject: fake-symlinks: README.sh: Remove about/ suffix from Git repo link --- aux/workflow/README.sh | 2 +- sh/templates/aux/workflow/README.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh index e30344f..aa5cbe6 100755 --- a/aux/workflow/README.sh +++ b/aux/workflow/README.sh @@ -24,7 +24,7 @@ cat < "$LINKS" # Links - [home page](https://$PROJECT.euandreh.xyz) -- [source code](https://git.euandreh.xyz/$PROJECT/about/) +- [source code](https://git.euandreh.xyz/$PROJECT/) - [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) - [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) - [CI logs](https://$PROJECT.euandreh.xyz/ci.html) diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh index e30344f..aa5cbe6 100755 --- a/sh/templates/aux/workflow/README.sh +++ b/sh/templates/aux/workflow/README.sh @@ -24,7 +24,7 @@ cat < "$LINKS" # Links - [home page](https://$PROJECT.euandreh.xyz) -- [source code](https://git.euandreh.xyz/$PROJECT/about/) +- [source code](https://git.euandreh.xyz/$PROJECT/) - [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) - [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) - [CI logs](https://$PROJECT.euandreh.xyz/ci.html) -- cgit v1.2.3 From 1ed50779b65e62d009376917f255df80ecd6a3f1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 6 Mar 2021 21:21:02 -0300 Subject: fake-symlinks: ci-build.sh: Also omit output of second rsync --- aux/ci/ci-build.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 12eb677..45e4075 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -28,7 +28,7 @@ EOF cd - if [ -f ./aux/ci/report.sh ]; then sh aux/ci/report.sh "$PACKAGE" - rsync -avzzP public/ "/srv/http/$PACKAGE/" + rsync -a public/ "/srv/http/$PACKAGE/" fi printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 12eb677..45e4075 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -28,7 +28,7 @@ EOF cd - if [ -f ./aux/ci/report.sh ]; then sh aux/ci/report.sh "$PACKAGE" - rsync -avzzP public/ "/srv/http/$PACKAGE/" + rsync -a public/ "/srv/http/$PACKAGE/" fi printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" -- cgit v1.2.3 From 652dbb0178b0fa1349649d3b4f8b8473c799c4e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Mar 2021 16:47:36 -0300 Subject: configuration.nix: Add scdoc package --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index 124d236..cdabf74 100644 --- a/configuration.nix +++ b/configuration.nix @@ -261,6 +261,7 @@ in { clang-tools valgrind gdb + scdoc ## POSIX bmake-with-alias -- cgit v1.2.3 From 5c0f2bcdeed164a470227440c3466dec4e769a98 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Mar 2021 19:47:30 -0300 Subject: TODOs.sh: Use sed to remove dependency on gettext --- aux/workflow/TODOs.sh | 20 ++++++++++++-------- aux/workflow/preamble.md | 8 ++++---- 2 files changed, 16 insertions(+), 12 deletions(-) diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh index 00fef6f..d84e6f7 100755 --- a/aux/workflow/TODOs.sh +++ b/aux/workflow/TODOs.sh @@ -3,19 +3,23 @@ set -eu mkdir -p public -export PROJECT_UC="$1" -export PROJECT="$2" -export MAILING_LIST="$3" +PROJECT_UC="$1" +PROJECT="$2" +MAILING_LIST="$3" TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' -envsubst < aux/workflow/preamble.md | \ - printf '%s\n\n%s' \ - "$(cat -)" \ - "$(perl -pe "$TODOS_REGEX" TODOs.md | \ - perl -pe "$TAGS_REGEX")" | \ +SED_REGEX="s:@PROJECT_UC@:$PROJECT_UC:g" + +sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ + -e "s:@PROJECT@:$PROJECT:g" \ + -e "s:@MAILING_LIST@:$MAILING_LIST:g" < aux/workflow/preamble.md | \ + printf '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | \ + perl -pe "$TAGS_REGEX")" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ diff --git a/aux/workflow/preamble.md b/aux/workflow/preamble.md index 7413f58..9fbbd2c 100644 --- a/aux/workflow/preamble.md +++ b/aux/workflow/preamble.md @@ -1,12 +1,12 @@ # About -TODOs for $PROJECT_UC. +TODOs for @PROJECT_UC@. -See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/) and [CI logs](https://$PROJECT.euandreh.xyz/ci.html). +See also [@PROJECT@.euandreh.xyz](https://@PROJECT@.euandreh.xyz/) and [CI logs](https://@PROJECT@.euandreh.xyz/ci.html). Register a new one at -[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) -and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). +[~euandreh/@MAILING_LIST@@lists.sr.ht](mailto:~euandreh/@MAILING_LIST@@lists.sr.ht?subject=%5B@PROJECT@%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) +and see [existing discussions](https://lists.sr.ht/~euandreh/@MAILING_LIST@?search=%5B@PROJECT@%5D). *Você também pode escrever em português*. -- cgit v1.2.3 From c98e1e232c29f00e4a192a4446134af5f2c2e096 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Mar 2021 19:53:08 -0300 Subject: fake-symlinks: assert-todos.sh: Remove reference to deprecated docbook-xsl/ directory --- sh/templates/aux/workflow/assert-todos.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/aux/workflow/assert-todos.sh b/sh/templates/aux/workflow/assert-todos.sh index 203d465..cd7b611 100755 --- a/sh/templates/aux/workflow/assert-todos.sh +++ b/sh/templates/aux/workflow/assert-todos.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -if git grep FIXME | grep -v '^TODOs.md' | grep -v '^aux/workflow/assert-todos.sh' | grep -v '^aux/docbook-xsl/'; then +if git grep FIXME | grep -v '^TODOs.md' | grep -v '^aux/workflow/assert-todos.sh'; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.md." exit 1 -- cgit v1.2.3 From 988cd6596831eebf9bcbbb6dbab9c39b894dae61 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Mar 2021 19:53:31 -0300 Subject: fake-symlinks: Use sed over envsubst to avoid dependency on gettext --- sh/templates/aux/guix/manifest.scm | 1 - sh/templates/aux/workflow/TODOs.sh | 20 ++++++++++++-------- sh/templates/aux/workflow/preamble.md | 8 ++++---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/sh/templates/aux/guix/manifest.scm b/sh/templates/aux/guix/manifest.scm index 9d3b266..a689235 100644 --- a/sh/templates/aux/guix/manifest.scm +++ b/sh/templates/aux/guix/manifest.scm @@ -13,6 +13,5 @@ make perl shellcheck - gettext groff pandoc))) diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh index 00fef6f..d84e6f7 100755 --- a/sh/templates/aux/workflow/TODOs.sh +++ b/sh/templates/aux/workflow/TODOs.sh @@ -3,19 +3,23 @@ set -eu mkdir -p public -export PROJECT_UC="$1" -export PROJECT="$2" -export MAILING_LIST="$3" +PROJECT_UC="$1" +PROJECT="$2" +MAILING_LIST="$3" TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' -envsubst < aux/workflow/preamble.md | \ - printf '%s\n\n%s' \ - "$(cat -)" \ - "$(perl -pe "$TODOS_REGEX" TODOs.md | \ - perl -pe "$TAGS_REGEX")" | \ +SED_REGEX="s:@PROJECT_UC@:$PROJECT_UC:g" + +sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ + -e "s:@PROJECT@:$PROJECT:g" \ + -e "s:@MAILING_LIST@:$MAILING_LIST:g" < aux/workflow/preamble.md | \ + printf '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | \ + perl -pe "$TAGS_REGEX")" | \ pandoc --toc \ --highlight-style pygments \ --toc-depth=2 \ diff --git a/sh/templates/aux/workflow/preamble.md b/sh/templates/aux/workflow/preamble.md index 7413f58..9fbbd2c 100644 --- a/sh/templates/aux/workflow/preamble.md +++ b/sh/templates/aux/workflow/preamble.md @@ -1,12 +1,12 @@ # About -TODOs for $PROJECT_UC. +TODOs for @PROJECT_UC@. -See also [$PROJECT.euandreh.xyz](https://$PROJECT.euandreh.xyz/) and [CI logs](https://$PROJECT.euandreh.xyz/ci.html). +See also [@PROJECT@.euandreh.xyz](https://@PROJECT@.euandreh.xyz/) and [CI logs](https://@PROJECT@.euandreh.xyz/ci.html). Register a new one at -[~euandreh/$MAILING_LIST@lists.sr.ht](mailto:~euandreh/$MAILING_LIST@lists.sr.ht?subject=%5B$PROJECT%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) -and see [existing discussions](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D). +[~euandreh/@MAILING_LIST@@lists.sr.ht](mailto:~euandreh/@MAILING_LIST@@lists.sr.ht?subject=%5B@PROJECT@%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) +and see [existing discussions](https://lists.sr.ht/~euandreh/@MAILING_LIST@?search=%5B@PROJECT@%5D). *Você também pode escrever em português*. -- cgit v1.2.3 From 1fa6057155107402f6a9582692743a86c2ee11d7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 7 Mar 2021 19:54:21 -0300 Subject: fake-symlinks.sh: Use $PPREFIX over $PREFIX to avoid conflict with make and $MAKEFLAGS --- sh/fake-symlinks.sh | 38 +++++++++++++++++++------------------- 1 file changed, 19 insertions(+), 19 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index e6479e3..03e8d90 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -35,7 +35,7 @@ normalize_name() { cp_all() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" mkdir -p "$(dirname "$OUT")" cp "$f" "$OUT" done @@ -43,7 +43,7 @@ cp_all() { cp_if_not() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" if [ ! -f "$OUT" ]; then cp_all "$f" fi @@ -52,7 +52,7 @@ cp_if_not() { cp_if() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" if [ -f "$OUT" ]; then rm -f "$OUT" cp_all "$f" @@ -62,7 +62,7 @@ cp_if() { envsubst_all() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" mkdir -p "$(dirname "$OUT")" envsubst < "$f" > "$OUT" @@ -74,7 +74,7 @@ envsubst_all() { envsubst_if_not() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" if [ ! -f "$OUT" ]; then envsubst_all "$f" fi @@ -83,7 +83,7 @@ envsubst_if_not() { sed_all() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" mkdir -p "$(dirname "$OUT")" if [ -n "$ENABLE_CI" ]; then @@ -115,7 +115,7 @@ sed_all() { sed_if_not() { for f in "$@"; do - OUT="$PREFIX/$(normalize_name "$f")" + OUT="$PPREFIX/$(normalize_name "$f")" if [ ! -f "$OUT" ]; then sed_all "$f" fi @@ -124,11 +124,11 @@ sed_if_not() { ln_env() { export PROJECT="$1" - export PREFIX="${PREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}" + export PPREFIX="${PPREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}" export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - if [ -f "$PREFIX/Makefile" ]; then + if [ -f "$PPREFIX/Makefile" ]; then export ENABLE_CI=1 else export ENABLE_CI= @@ -146,7 +146,7 @@ ln_env() { ENABLE_C= fi - if { [ -f "$PREFIX/README.md" ] || [ -f "$PREFIX/README" ]; } && [ -z "${NO_README_SH[$PROJECT]}" ]; then + if { [ -f "$PPREFIX/README.md" ] || [ -f "$PPREFIX/README" ]; } && [ -z "${NO_README_SH[$PROJECT]}" ]; then ENABLE_README_SH=1 else ENABLE_README_SH= @@ -158,8 +158,8 @@ ln_init() { red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")\n" fi - if [ ! -d "$PREFIX" ]; then - git init "$PREFIX" + if [ ! -d "$PPREFIX" ]; then + git init "$PPREFIX" fi cp_if_not description long-description } @@ -195,14 +195,14 @@ ln_guix_files() { } ln_ci() { - rm -f "$PREFIX/.git/hooks/pre-push" + rm -f "$PPREFIX/.git/hooks/pre-push" if [ -n "$ENABLE_CI" ]; then EXECUTABLE=1 sed_all aux/ci/git-pre-push.sh cp_all aux/assert-shellcheck.sh \ aux/ci/ci-build.sh \ aux/ci/report.sh \ aux/ci/git-post-receive.sh - ln -s "$PREFIX/aux/ci/git-pre-push.sh" "$PREFIX/.git/hooks/pre-push" + ln -s "$PPREFIX/aux/ci/git-pre-push.sh" "$PPREFIX/.git/hooks/pre-push" else EXECUTABLE=1 sed_all ..git/hooks/pre-push fi @@ -213,8 +213,8 @@ ln_dicts() { } ln_web_assets_file() { - mkdir -p "$PREFIX/aux/" - cp "aux/$1-build-web-assets.sh" "$PREFIX/aux/build-web-assets.sh" + mkdir -p "$PPREFIX/aux/" + cp "aux/$1-build-web-assets.sh" "$PPREFIX/aux/build-web-assets.sh" } ln_scribble() { @@ -239,8 +239,8 @@ ln_simple_makefile() { } enforce_uniform_manpages() { - if [ -d "$PREFIX/doc" ]; then - for f in $(find "$PREFIX/doc" -type f -name '*.[0-9]'); do + if [ -d "$PPREFIX/doc" ]; then + for f in $(find "$PPREFIX/doc" -type f -name '*.[0-9]'); do if grep -Eq '^\.SH AUTHORS$' "$f"; then EXPECTED="$(cat < Date: Sun, 7 Mar 2021 19:59:16 -0300 Subject: fake-symlinks: TODOs.sh: Remove unused $SED_REGEX --- aux/workflow/TODOs.sh | 2 -- sh/templates/aux/workflow/TODOs.sh | 2 -- 2 files changed, 4 deletions(-) diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh index d84e6f7..468b3a8 100755 --- a/aux/workflow/TODOs.sh +++ b/aux/workflow/TODOs.sh @@ -11,8 +11,6 @@ TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.* TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' -SED_REGEX="s:@PROJECT_UC@:$PROJECT_UC:g" - sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ -e "s:@PROJECT@:$PROJECT:g" \ -e "s:@MAILING_LIST@:$MAILING_LIST:g" < aux/workflow/preamble.md | \ diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh index d84e6f7..468b3a8 100755 --- a/sh/templates/aux/workflow/TODOs.sh +++ b/sh/templates/aux/workflow/TODOs.sh @@ -11,8 +11,6 @@ TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.* TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' -SED_REGEX="s:@PROJECT_UC@:$PROJECT_UC:g" - sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ -e "s:@PROJECT@:$PROJECT:g" \ -e "s:@MAILING_LIST@:$MAILING_LIST:g" < aux/workflow/preamble.md | \ -- cgit v1.2.3 From ae9a7d4e17634ce840690c1f2b387841cc86ab32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:49:44 -0300 Subject: fake-symlinks: Remove leftover Autotools files --- sh/templates/AUTHORS | 2 -- sh/templates/ChangeLog | 2 -- sh/templates/HACKING.in | 5 ----- sh/templates/bootstrap | 3 --- sh/templates/configure | 42 ------------------------------------------ 5 files changed, 54 deletions(-) delete mode 100644 sh/templates/AUTHORS delete mode 100644 sh/templates/ChangeLog delete mode 100644 sh/templates/HACKING.in delete mode 100755 sh/templates/bootstrap delete mode 100755 sh/templates/configure diff --git a/sh/templates/AUTHORS b/sh/templates/AUTHORS deleted file mode 100644 index 119be5e..0000000 --- a/sh/templates/AUTHORS +++ /dev/null @@ -1,2 +0,0 @@ -The AUTHORS file is auto-generated when releasing. -If you are seeing this, use 'git shortlog --summary --email' for a list of authors. diff --git a/sh/templates/ChangeLog b/sh/templates/ChangeLog deleted file mode 100644 index 9001919..0000000 --- a/sh/templates/ChangeLog +++ /dev/null @@ -1,2 +0,0 @@ -The ChangeLog file is auto-generated when releasing. -If you are seeing this, use 'git log' for a detailed list of changes. diff --git a/sh/templates/HACKING.in b/sh/templates/HACKING.in deleted file mode 100644 index f8d72d9..0000000 --- a/sh/templates/HACKING.in +++ /dev/null @@ -1,5 +0,0 @@ -See the manual for useful hacking information, either by running - - info -f doc/@PACKAGE@.info "Contributing" - -or by checking the web copy of the manual: @PACKAGE_URL@/Contributing.html diff --git a/sh/templates/bootstrap b/sh/templates/bootstrap deleted file mode 100755 index a8fd885..0000000 --- a/sh/templates/bootstrap +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh - -autoreconf --verbose --install --force diff --git a/sh/templates/configure b/sh/templates/configure deleted file mode 100755 index e8a56cf..0000000 --- a/sh/templates/configure +++ /dev/null @@ -1,42 +0,0 @@ -#!/bin/sh -set -eu - -DATE=1970-01-01 -VERSION=0.1.0 - -# shellcheck disable=2068 -for f in $@; do - case "$f" in - --prefix) - shift - CLI_PREFIX="$1" - shift - ;; - --prefix=*) - CLI_PREFIX="${f#--prefix=}" - shift - ;; - *) - if [ -n "${1:-}" ]; then - shift - fi - ;; - esac -done - -PREFIX="${CLI_PREFIX:-/usr/local}" - -OUT_FILES=' -Makefile -' - -for f in $OUT_FILES; do - printf 'generating "%s"...\n' "$f" >&2 - sed "$f.in" \ - -e "s:@PREFIX@:$PREFIX:g" \ - -e "s:@VERSION@:$VERSION:g" \ - -e "s:@DATE@:$DATE:g" \ - > "$f" -done - -echo Done. >&2 -- cgit v1.2.3 From cb017821d44940c37abaeaf233d931206729d4b5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:52:19 -0300 Subject: fake-symlinks: Remove unused aux/docbook-xsl.tar.gz --- sh/templates/aux/docbook-xsl.tar.gz | Bin 5181440 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 sh/templates/aux/docbook-xsl.tar.gz diff --git a/sh/templates/aux/docbook-xsl.tar.gz b/sh/templates/aux/docbook-xsl.tar.gz deleted file mode 100644 index a7a4ce6..0000000 Binary files a/sh/templates/aux/docbook-xsl.tar.gz and /dev/null differ -- cgit v1.2.3 From 759fa9735502f2696c38709e6f8e405f68affdec Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:52:45 -0300 Subject: fake-symlinks: Remove src/vendor/ --- sh/fake-symlinks.sh | 4 ---- sh/templates/src/vendor/fallible | 1 - sh/templates/src/vendor/sharedc | 1 - 3 files changed, 6 deletions(-) delete mode 120000 sh/templates/src/vendor/fallible delete mode 120000 sh/templates/src/vendor/sharedc diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 03e8d90..fc1a300 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -231,10 +231,6 @@ ln_simple_makefile() { if [ -n "$ENABLE_C" ]; then cp_all aux/assert-clang-format.sh - - cp_if $(find -L src/vendor/ -type f) \ - tests/lib.sh \ - aux/utils.sh fi } diff --git a/sh/templates/src/vendor/fallible b/sh/templates/src/vendor/fallible deleted file mode 120000 index 3920d6c..0000000 --- a/sh/templates/src/vendor/fallible +++ /dev/null @@ -1 +0,0 @@ -../../../../../fallible/src \ No newline at end of file diff --git a/sh/templates/src/vendor/sharedc b/sh/templates/src/vendor/sharedc deleted file mode 120000 index 76206c2..0000000 --- a/sh/templates/src/vendor/sharedc +++ /dev/null @@ -1 +0,0 @@ -../../../../../sharedc/src \ No newline at end of file -- cgit v1.2.3 From 79a5898ae0c44bd39662220652c4e6fe9b9d91a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:53:21 -0300 Subject: fake-symlinks: Remove rename/empty-texinfo.texi --- sh/templates/rename/empty-texinfo.texi | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 sh/templates/rename/empty-texinfo.texi diff --git a/sh/templates/rename/empty-texinfo.texi b/sh/templates/rename/empty-texinfo.texi deleted file mode 100644 index adf8221..0000000 --- a/sh/templates/rename/empty-texinfo.texi +++ /dev/null @@ -1,5 +0,0 @@ -\input texinfo -@settitle $PROJECT Documentation -@documentencoding UTF-8 - -@bye -- cgit v1.2.3 From 35c1ea9e1180302cfbfb8b7be156b9a3481375ae Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:54:07 -0300 Subject: fake-symlinks: Remove aux/automake/ --- sh/templates/aux/automake/guile.am | 16 ---------------- 1 file changed, 16 deletions(-) delete mode 100644 sh/templates/aux/automake/guile.am diff --git a/sh/templates/aux/automake/guile.am b/sh/templates/aux/automake/guile.am deleted file mode 100644 index e56b31f..0000000 --- a/sh/templates/aux/automake/guile.am +++ /dev/null @@ -1,16 +0,0 @@ -guilescmdir=$(datadir)/guile/site/$(GUILE_EFFECTIVE_VERSION)/xyz/euandreh -guilegodir=$(libdir)/guile/$(GUILE_EFFECTIVE_VERSION)/site-ccache/xyz/euandreh - -GUILE_OBJECTS = $(SOURCES:.scm=.go) - -dist_guilescm_DATA = $(SOURCES) -guilego_DATA = $(GUILE_OBJECTS) - -CLEANFILES = $(GUILE_OBJECTS) - -SUFFIXES = .scm .go -.scm.go: - $(GUILD) compile -o "$@" "$<" - -TEST_EXTENSIONS = .scm -SCM_LOG_COMPILER = $(GUILE) -L $(top_srcdir)/src -- cgit v1.2.3 From 825fe135f3f0c4e726a799d5ee4e8ebf5228d84e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:54:52 -0300 Subject: fake-symlinks: Remove ..gitignore --- sh/templates/..gitignore | 46 ---------------------------------------------- 1 file changed, 46 deletions(-) delete mode 100644 sh/templates/..gitignore diff --git a/sh/templates/..gitignore b/sh/templates/..gitignore deleted file mode 100644 index 88a8afc..0000000 --- a/sh/templates/..gitignore +++ /dev/null @@ -1,46 +0,0 @@ -# GNU Autotools -/Makefile.in -/INSTALL - -autom4te.cache -/autoscan.log -/autoscan-*.log -/aclocal.m4 -/compile -/config.guess -/config.h.in -/config.log -/config.status -/config.sub -/configure -/configure~ -/configure.scan -/depcomp -/install-sh -/missing -/stamp-h1 - -/.deps/ -/Makefile -/config.h - -/test-suite.log - -/build-aux/compile -/build-aux/depcomp -/build-aux/install-sh -/build-aux/install-sh~ -/build-aux/missing -/build-aux/test-driver -/build-aux/texinfo.tex - -/build-aux/ci/git-pre-push.sh - -/$PROJECT-*.tar.gz -/$PROJECT-*.tar.gz.asc -/$PROJECT-*/ - -/doc/dictionaries/all.txt - - -/public/ -- cgit v1.2.3 From 8a064bd217e14a1a2264e2b7c81cbbddbcb6ebe6 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:56:40 -0300 Subject: fake-symlinks: Remove aux/m4/ --- sh/templates/aux/m4/guile.m4 | 397 ------------------------------------------- 1 file changed, 397 deletions(-) delete mode 100644 sh/templates/aux/m4/guile.m4 diff --git a/sh/templates/aux/m4/guile.m4 b/sh/templates/aux/m4/guile.m4 deleted file mode 100644 index 6968973..0000000 --- a/sh/templates/aux/m4/guile.m4 +++ /dev/null @@ -1,397 +0,0 @@ -## Autoconf macros for working with Guile. -## -## Copyright (C) 1998,2001, 2006, 2010, 2012, 2013, 2014 Free Software Foundation, Inc. -## -## This library is free software; you can redistribute it and/or -## modify it under the terms of the GNU Lesser General Public License -## as published by the Free Software Foundation; either version 3 of -## the License, or (at your option) any later version. -## -## This library is distributed in the hope that it will be useful, -## but WITHOUT ANY WARRANTY; without even the implied warranty of -## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU -## Lesser General Public License for more details. -## -## You should have received a copy of the GNU Lesser General Public -## License along with this library; if not, write to the Free Software -## Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA -## 02110-1301 USA - -# serial 10 - -## Index -## ----- -## -## GUILE_PKG -- find Guile development files -## GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -## GUILE_FLAGS -- set flags for compiling and linking with Guile -## GUILE_SITE_DIR -- find path to Guile "site" directories -## GUILE_CHECK -- evaluate Guile Scheme code and capture the return value -## GUILE_MODULE_CHECK -- check feature of a Guile Scheme module -## GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module -## GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable -## GUILE_MODULE_EXPORTS -- check if a module exports a variable -## GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable - -## Code -## ---- - -## NOTE: Comments preceding an AC_DEFUN (starting from "Usage:") are massaged -## into doc/ref/autoconf-macros.texi (see Makefile.am in that directory). - -# GUILE_PKG -- find Guile development files -# -# Usage: GUILE_PKG([VERSIONS]) -# -# This macro runs the @code{pkg-config} tool to find development files -# for an available version of Guile. -# -# By default, this macro will search for the latest stable version of -# Guile (e.g. 3.0), falling back to the previous stable version -# (e.g. 2.2) if it is available. If no guile-@var{VERSION}.pc file is -# found, an error is signalled. The found version is stored in -# @var{GUILE_EFFECTIVE_VERSION}. -# -# If @code{GUILE_PROGS} was already invoked, this macro ensures that the -# development files have the same effective version as the Guile -# program. -# -# @var{GUILE_EFFECTIVE_VERSION} is marked for substitution, as by -# @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PKG], - [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) - if test "x$PKG_CONFIG" = x; then - AC_MSG_ERROR([pkg-config is missing, please install it]) - fi - _guile_versions_to_search="m4_default([$1], [3.0 2.2 2.0])" - if test -n "$GUILE_EFFECTIVE_VERSION"; then - _guile_tmp="" - for v in $_guile_versions_to_search; do - if test "$v" = "$GUILE_EFFECTIVE_VERSION"; then - _guile_tmp=$v - fi - done - if test -z "$_guile_tmp"; then - AC_MSG_FAILURE([searching for guile development files for versions $_guile_versions_to_search, but previously found $GUILE version $GUILE_EFFECTIVE_VERSION]) - fi - _guile_versions_to_search=$GUILE_EFFECTIVE_VERSION - fi - GUILE_EFFECTIVE_VERSION="" - _guile_errors="" - for v in $_guile_versions_to_search; do - if test -z "$GUILE_EFFECTIVE_VERSION"; then - AC_MSG_NOTICE([checking for guile $v]) - PKG_CHECK_EXISTS([guile-$v], [GUILE_EFFECTIVE_VERSION=$v], []) - fi - done - - if test -z "$GUILE_EFFECTIVE_VERSION"; then - AC_MSG_ERROR([ -No Guile development packages were found. - -Please verify that you have Guile installed. If you installed Guile -from a binary distribution, please verify that you have also installed -the development packages. If you installed it yourself, you might need -to adjust your PKG_CONFIG_PATH; see the pkg-config man page for more. -]) - fi - AC_MSG_NOTICE([found guile $GUILE_EFFECTIVE_VERSION]) - AC_SUBST([GUILE_EFFECTIVE_VERSION]) - ]) - -# GUILE_FLAGS -- set flags for compiling and linking with Guile -# -# Usage: GUILE_FLAGS -# -# This macro runs the @code{pkg-config} tool to find out how to compile -# and link programs against Guile. It sets four variables: -# @var{GUILE_CFLAGS}, @var{GUILE_LDFLAGS}, @var{GUILE_LIBS}, and -# @var{GUILE_LTLIBS}. -# -# @var{GUILE_CFLAGS}: flags to pass to a C or C++ compiler to build code that -# uses Guile header files. This is almost always just one or more @code{-I} -# flags. -# -# @var{GUILE_LDFLAGS}: flags to pass to the compiler to link a program -# against Guile. This includes @code{-lguile-@var{VERSION}} for the -# Guile library itself, and may also include one or more @code{-L} flag -# to tell the compiler where to find the libraries. But it does not -# include flags that influence the program's runtime search path for -# libraries, and will therefore lead to a program that fails to start, -# unless all necessary libraries are installed in a standard location -# such as @file{/usr/lib}. -# -# @var{GUILE_LIBS} and @var{GUILE_LTLIBS}: flags to pass to the compiler or to -# libtool, respectively, to link a program against Guile. It includes flags -# that augment the program's runtime search path for libraries, so that shared -# libraries will be found at the location where they were during linking, even -# in non-standard locations. @var{GUILE_LIBS} is to be used when linking the -# program directly with the compiler, whereas @var{GUILE_LTLIBS} is to be used -# when linking the program is done through libtool. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_FLAGS], - [AC_REQUIRE([GUILE_PKG]) - PKG_CHECK_MODULES(GUILE, [guile-$GUILE_EFFECTIVE_VERSION]) - - dnl GUILE_CFLAGS and GUILE_LIBS are already defined and AC_SUBST'd by - dnl PKG_CHECK_MODULES. But GUILE_LIBS to pkg-config is GUILE_LDFLAGS - dnl to us. - - GUILE_LDFLAGS=$GUILE_LIBS - - dnl Determine the platform dependent parameters needed to use rpath. - dnl AC_LIB_LINKFLAGS_FROM_LIBS is defined in gnulib/m4/lib-link.m4 and needs - dnl the file gnulib/build-aux/config.rpath. - AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LIBS], [$GUILE_LDFLAGS], []) - GUILE_LIBS="$GUILE_LDFLAGS $GUILE_LIBS" - AC_LIB_LINKFLAGS_FROM_LIBS([GUILE_LTLIBS], [$GUILE_LDFLAGS], [yes]) - GUILE_LTLIBS="$GUILE_LDFLAGS $GUILE_LTLIBS" - - AC_SUBST([GUILE_EFFECTIVE_VERSION]) - AC_SUBST([GUILE_CFLAGS]) - AC_SUBST([GUILE_LDFLAGS]) - AC_SUBST([GUILE_LIBS]) - AC_SUBST([GUILE_LTLIBS]) - ]) - -# GUILE_SITE_DIR -- find path to Guile site directories -# -# Usage: GUILE_SITE_DIR -# -# This looks for Guile's "site" directories. The variable @var{GUILE_SITE} will -# be set to Guile's "site" directory for Scheme source files (usually something -# like PREFIX/share/guile/site). @var{GUILE_SITE_CCACHE} will be set to the -# directory for compiled Scheme files also known as @code{.go} files -# (usually something like -# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/site-ccache). -# @var{GUILE_EXTENSION} will be set to the directory for compiled C extensions -# (usually something like -# PREFIX/lib/guile/@var{GUILE_EFFECTIVE_VERSION}/extensions). The latter two -# are set to blank if the particular version of Guile does not support -# them. Note that this macro will run the macros @code{GUILE_PKG} and -# @code{GUILE_PROGS} if they have not already been run. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_SITE_DIR], - [AC_REQUIRE([GUILE_PKG]) - AC_REQUIRE([GUILE_PROGS]) - AC_MSG_CHECKING(for Guile site directory) - GUILE_SITE=`$PKG_CONFIG --print-errors --variable=sitedir guile-$GUILE_EFFECTIVE_VERSION` - AC_MSG_RESULT($GUILE_SITE) - if test "$GUILE_SITE" = ""; then - AC_MSG_FAILURE(sitedir not found) - fi - AC_SUBST(GUILE_SITE) - AC_MSG_CHECKING([for Guile site-ccache directory using pkgconfig]) - GUILE_SITE_CCACHE=`$PKG_CONFIG --variable=siteccachedir guile-$GUILE_EFFECTIVE_VERSION` - if test "$GUILE_SITE_CCACHE" = ""; then - AC_MSG_RESULT(no) - AC_MSG_CHECKING([for Guile site-ccache directory using interpreter]) - GUILE_SITE_CCACHE=`$GUILE -c "(display (if (defined? '%site-ccache-dir) (%site-ccache-dir) \"\"))"` - if test $? != "0" -o "$GUILE_SITE_CCACHE" = ""; then - AC_MSG_RESULT(no) - GUILE_SITE_CCACHE="" - AC_MSG_WARN([siteccachedir not found]) - fi - fi - AC_MSG_RESULT($GUILE_SITE_CCACHE) - AC_SUBST([GUILE_SITE_CCACHE]) - AC_MSG_CHECKING(for Guile extensions directory) - GUILE_EXTENSION=`$PKG_CONFIG --print-errors --variable=extensiondir guile-$GUILE_EFFECTIVE_VERSION` - AC_MSG_RESULT($GUILE_EXTENSION) - if test "$GUILE_EXTENSION" = ""; then - GUILE_EXTENSION="" - AC_MSG_WARN(extensiondir not found) - fi - AC_SUBST(GUILE_EXTENSION) - ]) - -# GUILE_PROGS -- set paths to Guile interpreter, config and tool programs -# -# Usage: GUILE_PROGS([VERSION]) -# -# This macro looks for programs @code{guile} and @code{guild}, setting -# variables @var{GUILE} and @var{GUILD} to their paths, respectively. -# The macro will attempt to find @code{guile} with the suffix of -# @code{-X.Y}, followed by looking for it with the suffix @code{X.Y}, and -# then fall back to looking for @code{guile} with no suffix. If -# @code{guile} is still not found, signal an error. The suffix, if any, -# that was required to find @code{guile} will be used for @code{guild} -# as well. -# -# By default, this macro will search for the latest stable version of -# Guile (e.g. 3.0). x.y or x.y.z versions can be specified. If an older -# version is found, the macro will signal an error. -# -# The effective version of the found @code{guile} is set to -# @var{GUILE_EFFECTIVE_VERSION}. This macro ensures that the effective -# version is compatible with the result of a previous invocation of -# @code{GUILE_FLAGS}, if any. -# -# As a legacy interface, it also looks for @code{guile-config} and -# @code{guile-tools}, setting @var{GUILE_CONFIG} and @var{GUILE_TOOLS}. -# -# The variables are marked for substitution, as by @code{AC_SUBST}. -# -AC_DEFUN([GUILE_PROGS], - [_guile_required_version="m4_default([$1], [$GUILE_EFFECTIVE_VERSION])" - if test -z "$_guile_required_version"; then - _guile_required_version=3.0 - fi - - _guile_candidates=guile - _tmp= - for v in `echo "$_guile_required_version" | tr . ' '`; do - if test -n "$_tmp"; then _tmp=$_tmp.; fi - _tmp=$_tmp$v - _guile_candidates="guile-$_tmp guile$_tmp $_guile_candidates" - done - - AC_PATH_PROGS(GUILE,[$_guile_candidates]) - if test -z "$GUILE"; then - AC_MSG_ERROR([guile required but not found]) - fi - - _guile_suffix=`echo "$GUILE" | sed -e 's,^.*/guile\(.*\)$,\1,'` - _guile_effective_version=`$GUILE -c "(display (effective-version))"` - if test -z "$GUILE_EFFECTIVE_VERSION"; then - GUILE_EFFECTIVE_VERSION=$_guile_effective_version - elif test "$GUILE_EFFECTIVE_VERSION" != "$_guile_effective_version"; then - AC_MSG_ERROR([found development files for Guile $GUILE_EFFECTIVE_VERSION, but $GUILE has effective version $_guile_effective_version]) - fi - - _guile_major_version=`$GUILE -c "(display (major-version))"` - _guile_minor_version=`$GUILE -c "(display (minor-version))"` - _guile_micro_version=`$GUILE -c "(display (micro-version))"` - _guile_prog_version="$_guile_major_version.$_guile_minor_version.$_guile_micro_version" - - AC_MSG_CHECKING([for Guile version >= $_guile_required_version]) - _major_version=`echo $_guile_required_version | cut -d . -f 1` - _minor_version=`echo $_guile_required_version | cut -d . -f 2` - _micro_version=`echo $_guile_required_version | cut -d . -f 3` - if test "$_guile_major_version" -gt "$_major_version"; then - true - elif test "$_guile_major_version" -eq "$_major_version"; then - if test "$_guile_minor_version" -gt "$_minor_version"; then - true - elif test "$_guile_minor_version" -eq "$_minor_version"; then - if test -n "$_micro_version"; then - if test "$_guile_micro_version" -lt "$_micro_version"; then - AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) - fi - fi - elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then - # Allow prereleases that have the right effective version. - true - else - as_fn_error $? "Guile $_guile_required_version required, but $_guile_prog_version found" "$LINENO" 5 - fi - elif test "$GUILE_EFFECTIVE_VERSION" = "$_major_version.$_minor_version" -a -z "$_micro_version"; then - # Allow prereleases that have the right effective version. - true - else - AC_MSG_ERROR([Guile $_guile_required_version required, but $_guile_prog_version found]) - fi - AC_MSG_RESULT([$_guile_prog_version]) - - AC_PATH_PROG(GUILD,[guild$_guile_suffix]) - AC_SUBST(GUILD) - - AC_PATH_PROG(GUILE_CONFIG,[guile-config$_guile_suffix]) - AC_SUBST(GUILE_CONFIG) - if test -n "$GUILD"; then - GUILE_TOOLS=$GUILD - else - AC_PATH_PROG(GUILE_TOOLS,[guile-tools$_guile_suffix]) - fi - AC_SUBST(GUILE_TOOLS) - ]) - -# GUILE_CHECK -- evaluate Guile Scheme code and capture the return value -# -# Usage: GUILE_CHECK_RETVAL(var,check) -# -# @var{var} is a shell variable name to be set to the return value. -# @var{check} is a Guile Scheme expression, evaluated with "$GUILE -c", and -# returning either 0 or non-#f to indicate the check passed. -# Non-0 number or #f indicates failure. -# Avoid using the character "#" since that confuses autoconf. -# -AC_DEFUN([GUILE_CHECK], - [AC_REQUIRE([GUILE_PROGS]) - $GUILE -c "$2" > /dev/null 2>&1 - $1=$? - ]) - -# GUILE_MODULE_CHECK -- check feature of a Guile Scheme module -# -# Usage: GUILE_MODULE_CHECK(var,module,featuretest,description) -# -# @var{var} is a shell variable name to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{featuretest} is an expression acceptable to GUILE_CHECK, q.v. -# @var{description} is a present-tense verb phrase (passed to AC_MSG_CHECKING). -# -AC_DEFUN([GUILE_MODULE_CHECK], - [AC_MSG_CHECKING([if $2 $4]) - GUILE_CHECK($1,(use-modules $2) (exit ((lambda () $3)))) - if test "$$1" = "0" ; then $1=yes ; else $1=no ; fi - AC_MSG_RESULT($$1) - ]) - -# GUILE_MODULE_AVAILABLE -- check availability of a Guile Scheme module -# -# Usage: GUILE_MODULE_AVAILABLE(var,module) -# -# @var{var} is a shell variable name to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# -AC_DEFUN([GUILE_MODULE_AVAILABLE], - [GUILE_MODULE_CHECK($1,$2,0,is available) - ]) - -# GUILE_MODULE_REQUIRED -- fail if a Guile Scheme module is unavailable -# -# Usage: GUILE_MODULE_REQUIRED(symlist) -# -# @var{symlist} is a list of symbols, WITHOUT surrounding parens, -# like: ice-9 common-list. -# -AC_DEFUN([GUILE_MODULE_REQUIRED], - [GUILE_MODULE_AVAILABLE(ac_guile_module_required, ($1)) - if test "$ac_guile_module_required" = "no" ; then - AC_MSG_ERROR([required guile module not found: ($1)]) - fi - ]) - -# GUILE_MODULE_EXPORTS -- check if a module exports a variable -# -# Usage: GUILE_MODULE_EXPORTS(var,module,modvar) -# -# @var{var} is a shell variable to be set to "yes" or "no". -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{modvar} is the Guile Scheme variable to check. -# -AC_DEFUN([GUILE_MODULE_EXPORTS], - [GUILE_MODULE_CHECK($1,$2,$3,exports `$3') - ]) - -# GUILE_MODULE_REQUIRED_EXPORT -- fail if a module doesn't export a variable -# -# Usage: GUILE_MODULE_REQUIRED_EXPORT(module,modvar) -# -# @var{module} is a list of symbols, like: (ice-9 common-list). -# @var{modvar} is the Guile Scheme variable to check. -# -AC_DEFUN([GUILE_MODULE_REQUIRED_EXPORT], - [GUILE_MODULE_EXPORTS(guile_module_required_export,$1,$2) - if test "$guile_module_required_export" = "no" ; then - AC_MSG_ERROR([module $1 does not export $2; required]) - fi - ]) - -## guile.m4 ends here -- cgit v1.2.3 From 7186730a29fe583124eb73701fa0069d88d47d86 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:57:39 -0300 Subject: fake-symlinks: rm doc/ (Sphinx directory structure) --- sh/fake-symlinks.sh | 18 -------- sh/templates/doc/Makefile | 20 -------- sh/templates/doc/_templates/footer.html | 7 --- sh/templates/doc/_templates/layout.html | 59 ------------------------ sh/templates/doc/conf.py.in | 56 ---------------------- sh/templates/doc/dictionaries/en.txt | 0 sh/templates/doc/dictionaries/international.txt | 0 sh/templates/doc/favicon.ico | Bin 1150 -> 0 bytes sh/templates/doc/i18n-pagenames.json | 3 -- sh/templates/doc/index.rst | 31 ------------- 10 files changed, 194 deletions(-) delete mode 100644 sh/templates/doc/Makefile delete mode 100644 sh/templates/doc/_templates/footer.html delete mode 100644 sh/templates/doc/_templates/layout.html delete mode 100644 sh/templates/doc/conf.py.in delete mode 100644 sh/templates/doc/dictionaries/en.txt delete mode 100644 sh/templates/doc/dictionaries/international.txt delete mode 100644 sh/templates/doc/favicon.ico delete mode 100644 sh/templates/doc/i18n-pagenames.json delete mode 100644 sh/templates/doc/index.rst diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index fc1a300..6acef25 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -208,24 +208,6 @@ ln_ci() { fi } -ln_dicts() { - cp_if_not doc/dictionaries/international.txt doc/dictionaries/en.txt -} - -ln_web_assets_file() { - mkdir -p "$PPREFIX/aux/" - cp "aux/$1-build-web-assets.sh" "$PPREFIX/aux/build-web-assets.sh" -} - -ln_scribble() { - ln_dicts -} - -ln_antora() { - ln_dicts -} - - ln_simple_makefile() { sed_if_not Makefile diff --git a/sh/templates/doc/Makefile b/sh/templates/doc/Makefile deleted file mode 100644 index d4bb2cb..0000000 --- a/sh/templates/doc/Makefile +++ /dev/null @@ -1,20 +0,0 @@ -# Minimal makefile for Sphinx documentation -# - -# You can set these variables from the command line, and also -# from the environment for the first two. -SPHINXOPTS ?= -SPHINXBUILD ?= sphinx-build -SOURCEDIR = . -BUILDDIR = _build - -# Put it first so that "make" without argument is like "make help". -help: - @$(SPHINXBUILD) -M help "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) - -.PHONY: help Makefile - -# Catch-all target: route all unknown targets to Sphinx using the new -# "make mode" option. $(O) is meant as a shortcut for $(SPHINXOPTS). -%: Makefile - @$(SPHINXBUILD) -M $@ "$(SOURCEDIR)" "$(BUILDDIR)" $(SPHINXOPTS) $(O) diff --git a/sh/templates/doc/_templates/footer.html b/sh/templates/doc/_templates/footer.html deleted file mode 100644 index a710a48..0000000 --- a/sh/templates/doc/_templates/footer.html +++ /dev/null @@ -1,7 +0,0 @@ -{%- extends "!footer.html" %} - -{% block extrafooter %} - -{% endblock %} diff --git a/sh/templates/doc/_templates/layout.html b/sh/templates/doc/_templates/layout.html deleted file mode 100644 index 3182c8c..0000000 --- a/sh/templates/doc/_templates/layout.html +++ /dev/null @@ -1,59 +0,0 @@ -{%- extends "!layout.html" %} - -{# -Taken from: -https://github.com/readthedocs/sphinx_rtd_theme/blob/1d856256676d2b801a12c30e4a849c5abc466da9/docs/_templates/layout.html -#} - -{% block footer %} -
    - - {{project}} - {{version}} | {{ current_lang }} - - -
    -
    -
    Versions
    - {% for v in all_versions %} -
    - - {% if v == version %} - - {{ v }} - - {% else %} - {{ v }} - {% endif %} - -
    - {% endfor %} -
    Languages
    - {% for l in langs %} -
    - - {% if l == current_lang %} - - {{ l }} - - {% else %} - {{ l }} - {% endif %} - -
    - {% endfor %} -
    Downloads
    -
    - - PDF - -
    -
    - - EPUB - -
    -
    -
    -
    -{% endblock %} diff --git a/sh/templates/doc/conf.py.in b/sh/templates/doc/conf.py.in deleted file mode 100644 index 8727603..0000000 --- a/sh/templates/doc/conf.py.in +++ /dev/null @@ -1,56 +0,0 @@ -import json -with open("../metadata.json", "r") as f: - metadata = json.loads(f.read()) - -import subprocess -all_versions = ["master"] + ( - subprocess - .check_output(["git", "tag"]) - .decode("ascii") - .strip() - .split() -) - -project = metadata["project_name"] -author = metadata["authors"][0] -version = metadata["version"] -release = version -epub_copyright = "CC BY-SA 4.0" -nitpicky = True - -extensions = [ - "sphinx.ext.extlinks", - "sphinx.ext.graphviz", - "sphinx.ext.todo", -] - -graphviz_output_format = "svg" - -todo_include_todos = True - -templates_path = ["_templates"] -html_theme = "sphinx_rtd_theme" -html_theme_options = { - "style_external_links": True -} - -html_show_sphinx = False -html_show_copyright = False - -extlinks = { - "src": ("https://git.euandreh.xyz/$PROJECT/tree/%s", ""), - "bug": ("https://$PROJECT.euandreh.xyz/tasks-and-bugs.html#%s", "bug "), -} - -with open("i18n-pagenames.json", "r") as f: - i18n_pagenames = json.loads(f.read()) - -html_context = { - "all_versions": all_versions, - "langs": metadata["langs"], - "current_lang": metadata["current_lang"], - "source_url_prefix": "https://git.euandreh.xyz/$PROJECT/tree/docs/", - "i18n_pagenames": i18n_pagenames -} - -gettext_compact = False diff --git a/sh/templates/doc/dictionaries/en.txt b/sh/templates/doc/dictionaries/en.txt deleted file mode 100644 index e69de29..0000000 diff --git a/sh/templates/doc/dictionaries/international.txt b/sh/templates/doc/dictionaries/international.txt deleted file mode 100644 index e69de29..0000000 diff --git a/sh/templates/doc/favicon.ico b/sh/templates/doc/favicon.ico deleted file mode 100644 index 8ebd54f..0000000 Binary files a/sh/templates/doc/favicon.ico and /dev/null differ diff --git a/sh/templates/doc/i18n-pagenames.json b/sh/templates/doc/i18n-pagenames.json deleted file mode 100644 index 6b674df..0000000 --- a/sh/templates/doc/i18n-pagenames.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "en": {} -} diff --git a/sh/templates/doc/index.rst b/sh/templates/doc/index.rst deleted file mode 100644 index 78baef3..0000000 --- a/sh/templates/doc/index.rst +++ /dev/null @@ -1,31 +0,0 @@ -$PROJECT_UC -======== - -FIXME: description - -Useful links: -~~~~~~~~~~~~~ - -- `documentation`_ (`single page documentation`_) -- `mailing list`_ -- `source code`_ -- `tasks and bugs`_ -- `build logs`_ - -See also: - -- `repository statistics`_ - -.. _`documentation`: https://$PROJECT.euandreh.xyz/en/master/ -.. _`single page documentation`: https://$PROJECT.euandreh.xyz/en/master/single/ -.. _`mailing list`: https://lists.sr.ht/~euandreh/$MAILING_LIST -.. _`source code`: https://git.euandreh.xyz/$PROJECT/about/ -.. _`tasks and bugs`: https://$PROJECT.euandreh.xyz/tasks-and-bugs.html -.. _`build logs`: https://ci.euandreh.xyz/#$PROJECT -.. _`repository statistics`: https://$PROJECT.euandreh.xyz/gitstats/ - -Introduction -~~~~~~~~~~~~ - -.. toctree:: - :maxdepth: 2 -- cgit v1.2.3 From 5424b99a82bddffd92c63a8bf1532193761e795d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:58:14 -0300 Subject: fake-symlinks: Remove unused aux/malloc-fail-test.sh --- sh/templates/aux/malloc-fail-test.sh | 20 -------------------- 1 file changed, 20 deletions(-) delete mode 100755 sh/templates/aux/malloc-fail-test.sh diff --git a/sh/templates/aux/malloc-fail-test.sh b/sh/templates/aux/malloc-fail-test.sh deleted file mode 100755 index 4319992..0000000 --- a/sh/templates/aux/malloc-fail-test.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -set -eu - -BIN="$1" -FLAGS="$2" - -# shellcheck source=/dev/null -. aux/utils.sh - -# MALLOCFAIL_FILE="malloc-failko" -# export MALLOCFAIL_FILE - -# echo valgrind $FLAGS $1 - -exit 0 - -# shellcheck disable=2086 -while ! valgrind $FLAGS $BIN; do - echo dbg -done -- cgit v1.2.3 From 49b2e44619fe2eb7e36c6d6a62401b3edbe6b6de Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:58:43 -0300 Subject: fake-symlinks: Remove unused aux/texinfo-build-web-assets.sh --- sh/templates/aux/texinfo-build-web-assets.sh | 55 ---------------------------- 1 file changed, 55 deletions(-) delete mode 100755 sh/templates/aux/texinfo-build-web-assets.sh diff --git a/sh/templates/aux/texinfo-build-web-assets.sh b/sh/templates/aux/texinfo-build-web-assets.sh deleted file mode 100755 index 241ebb8..0000000 --- a/sh/templates/aux/texinfo-build-web-assets.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$1" -shift - -dictname() { - case "$1" in - en) - echo en_US-large - ;; - *) - echo "Unsupported dictionary type $1" - exit 1 - ;; - esac -} - -OUT="$(mktemp)" -CLONE="$(mktemp -d)" -rsync -a . "$CLONE" -cd "$CLONE" - -for tag in master $(git tag); do - git checkout "$tag" - for lang in "$@"; do - mkdir -p "public/$lang/$tag/" - - make html - mv "doc/$PACKAGE.html/" "public/$lang/$tag/doc/" - - make MAKEINFOFLAGS=--no-split html ps dvi pdf - mv -t "public/$lang/$tag/" "doc/$PACKAGE.dvi" "doc/$PACKAGE.ps" "doc/$PACKAGE.pdf" "doc/$PACKAGE.html" - - makeinfo --docbook "doc/$PACKAGE.texi" -o "$PACKAGE.docbook" - xsltproc build-aux/docbook-xsl/epub/docbook.xsl "$PACKAGE.docbook" - echo "application/epub+zip" > mimetype - zip -0Xq "$PACKAGE.epub" mimetype - zip -Xr9D "$PACKAGE.epub" META-INF OEBPS - mv "$PACKAGE.epub" "public/$lang/$tag/" - - cat doc/dictionaries/international.txt "doc/dictionaries/$lang.txt" > doc/dictionaries/curr.txt - hunspell -u -H -d "$(dictname "$lang")" -p doc/dictionaries/curr.txt "public/$lang/$tag/$PACKAGE.html" | tee -a "$OUT" - done -done - -cd - -rm -rf public/ -mv "$CLONE/public/" public/ - -if [ -s "$OUT" ]; then - echo "Misspelled words detected:" - cat "$OUT" - exit 1 -fi -- cgit v1.2.3 From f5c22f7c2b99385758d7cce4319d7e5ff2dc0168 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 08:59:10 -0300 Subject: fake-symlinks: Remove old aux/compile-readme.sh --- sh/templates/aux/compile-readme.sh | 9 --------- 1 file changed, 9 deletions(-) delete mode 100755 sh/templates/aux/compile-readme.sh diff --git a/sh/templates/aux/compile-readme.sh b/sh/templates/aux/compile-readme.sh deleted file mode 100755 index 91f6065..0000000 --- a/sh/templates/aux/compile-readme.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -eux - -pandoc -s \ - --metadata title="$1 - EuAndreh" \ - -c styles.css \ - -o public/index.html \ - -r markdown \ - README -- cgit v1.2.3 From d48e2139ea3cfa219853aa0c3735a145072121a4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 09:00:56 -0300 Subject: fake-symlinks: Remove aux/assert-nixfmt.sh --- sh/fake-symlinks.sh | 3 +-- sh/templates/aux/assert-nixfmt.sh | 11 ----------- 2 files changed, 1 insertion(+), 13 deletions(-) delete mode 100755 sh/templates/aux/assert-nixfmt.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 6acef25..5333f0a 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -179,8 +179,7 @@ ln_build_aux() { cp_if_not TODOs.md - cp_if aux/assert-nixfmt.sh \ - aux/assert-perltidy.sh + cp_if aux/assert-perltidy.sh } ln_agpl() { diff --git a/sh/templates/aux/assert-nixfmt.sh b/sh/templates/aux/assert-nixfmt.sh deleted file mode 100755 index 19bd0a2..0000000 --- a/sh/templates/aux/assert-nixfmt.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -set -eux - -# shellcheck disable=2016 -find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c ' - nixfmt < "$1" | diff - "$1" || { - echo "The file \"$1\" is unformatted. To fix it, run:" - echo " nixfmt $1" - exit 1 - } -' _ {} \; -- cgit v1.2.3 From b6c15015c6eb9db2abf39e0a6b88f52339a8359e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 09:01:52 -0300 Subject: fake-symlinks: Remove aux/assert-docs-spelling.sh --- sh/templates/aux/assert-docs-spelling.sh | 32 -------------------------------- 1 file changed, 32 deletions(-) delete mode 100755 sh/templates/aux/assert-docs-spelling.sh diff --git a/sh/templates/aux/assert-docs-spelling.sh b/sh/templates/aux/assert-docs-spelling.sh deleted file mode 100755 index 5340319..0000000 --- a/sh/templates/aux/assert-docs-spelling.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -set -eu - -export LANG=C.UTF-8 - -for DICT in dictionaries/*.txt; do - sort "$DICT" | diff - "$DICT" || { - echo "The $DICT dictionary is unsorted. To fix it, run:" >&2 - echo " LANG=C.UTF-8 sort doc/$DICT | sponge docs/$DICT" >&2 - exit 1 - } -done - -OUT="$(mktemp)" -LANGS="$(jq -r .langs[] < ../metadata.json)" - -for l in ${LANGS}; do - make SPHINXOPTS="-D language=$l" html - DICT="$(mktemp)" - cat dictionaries/international.txt "dictionaries/$l.txt" > "$DICT" - hunspell -u3 -H -d "$l" -p "$DICT" _build/html/*.html | tee -a "$OUT" -done - -if [ -s "$OUT" ]; then - printf "\nvvv Mispelled words detected by hunspell.\n\n" - sort < "$OUT" | uniq - printf "\n^^^\n" >&2 - exit 1 -else - echo "No spelling errors detected" - exit 0 -fi -- cgit v1.2.3 From 1c8f0132183592b5a256774a0352e5e9574191d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 09:03:10 -0300 Subject: fake-symlinks: Remove guix/channel/ --- sh/templates/guix/channel/euandreh.key | 63 ---------------------------------- 1 file changed, 63 deletions(-) delete mode 100644 sh/templates/guix/channel/euandreh.key diff --git a/sh/templates/guix/channel/euandreh.key b/sh/templates/guix/channel/euandreh.key deleted file mode 100644 index 3046d6b..0000000 --- a/sh/templates/guix/channel/euandreh.key +++ /dev/null @@ -1,63 +0,0 @@ ------BEGIN PGP PUBLIC KEY BLOCK----- - -mQINBFjVvh4BEADIlHUiO6IfkhcNm3J7ilXERgimvKuFNyLIUPZlDcESC1ORrv4y -9slMDA5uojXctuLRC7nNdynLP+eFFfVUQ+hUXcV24AzyOE0CYo5c4PQA5TLe2AUC -E9YqqfQF4XuNddY+UpcG47MuVDR+6SHkFkF29ATzpmShJj41lc7a9CdRib+62Wpe -h7WJOFj/YoxMCBBzic4tiFNgoYobu+lLxyA4T2kCmxEaiZzc6eXBDDgJ0STL4+S8 -avpglaQ+mb5gHbH0yOtuwDG3sWyHKf7LSRVtzWvOqaGmRUmmDsSPjb5vQqvT8EMq -UfqFFZhScLalthF3PhG0SLXPvoCoRm2aLkN+O3sv057RqaN8E39223mmz6EMXmLk -H/U5qk2SUl3dx86dIQcB+2WUVu5zuFyfR1g6tD+DcqzxGc9XB7Gz/0TTDf3OimHb -rp1x5i/04198ocRZT3MzXx8H25tLMS/rHmE87YdgPhMTWheSUevyhoGNHfAOcDwX -P2oGzELXbLqHxtjENMEw2E996KrSmpcz7WOqIl3PHS1J6eRZoYQesXE+SZTeIiYb -wD0kkZGYhBZbtLC4VWIuU2T3AL/2hF6aUh1tj1B6vcV0i3HpIHNbvPAF/I0NUhhc -Gxwwi+ggG/MBHBbxkq7LvG5DfDbav0ZoZaov5dyhtX0CBWjVYATvjRfeAwARAQAB -tBlFdUFuZHJlaCA8ZXVAZXVhbmRyZS5vcmc+iQJWBBMBCgBAAhsDBwsJCAcDAgEG -FQgCCQoLBBYCAwECHgECF4AWIQRb2um4svbGvLsNbOWB+Q7DzTVgYAUCXxBk/wUJ -Cf0N4QAKCRCB+Q7DzTVgYKYFD/4080rAAYvmB/XlMgjxwwxVwAlJxm45iNN4/Ar3 -A4H+kpoPIQFivQgkE51XK7vuKo0LacND8EmBtl6nJf4xqN3/xW0xM7LNhBEo9uLe -66/ABpSTBRDAydOpshtoAtjaEGGHF0wpvneGaYKqYdpRwlPgKr3N3yCXq2u7TGcX -Msdr1wtXVY6PoeC0ry5Li7dUQNUV5VJPRrJ4iHNWJohl1ZU39Hne0HiRYMXnl2lg -NdSX9gsyyZuuZ+xHgfIR6QQuqsZ1kOaKt0EosVWbqS9fBw8t3GOy1LFgwu4A+2JQ -gdV9+SsMmHHEHdTgVvoMtOv0Yg0NVBaAd0tqKMjfnVfk/6RqKjkgQ7/CmDLSNBsK -dq1P5oVjmfA1U2N//MNtyd0gyAGgsTazUOL7DuVi8CCh6NTIpNIyMNXSccIM0//8 -fTcMJQr/Xpfcrlcp5d62GDTFqfMlb4ItQkMa4I3T33T9R5Dc5hoLFbVdytEuzxPn -OD2qVRl6hptnr1VfXXK1WD7KzuPI+gvGgf/iPCGMjLpwKWXBRD1K4AiPkS2zKoiQ -/bXCjM6Cj2wldwsJmTlwDuubkNDnfhueZORBdC9GwWeJ/ilD3ZRM6WoJS89blZc9 -FfDFyHBDNP8fnHYJvC3fbFvOV7C8xjwv3oXmjc4dQzhpmdldI1qcBxU73PYqEQG8 -ibfKA4kCOQQTAQgAIwUCWNW+HgIbAwcLCQgHAwIBBhUIAgkKCwQWAgMBAh4BAheA -AAoJEIH5DsPNNWBgls4P/0LQ6cIGw2PbgmPWv0YFLG6hgGM0iJ7G8gwl6wAIVhs5 -AzCz3hadN0sPUMgg3tMFrvC9h+IVfxTefPuBut+dyEsJKrH/Ufj/ZULP+XcBu5ae -fxns/G2St8u8xa3bVcHDgm+A3vvX4T7ID/aUVPHR6SzaPFIvSM24mJWu2hsV0HZF -1NnLzrhKIrhYL3FlNSljTlq4yJgE3AvBBfFWhGmWBkV8/JTC/CoLAFMa4xZJOras -azJTi042NAbs3GGabeVy2djbkiA2AaEom7gUNR+wyxmvq9IZzY1RAZjDrxQNYW1m -t94dQMmI2IaHlZQWKaB7g6LBBapMGfqLc87yJmkQDjhV9SHoYn0xhBYnt4prjh3V -bkY12/EhrvAoHm8tE9PegP73/i9Ut+Z3NpnUQlBP0iFEVuoXx+7k+iqqaJFPOr6M -ypjcyHFd84QFyfVGMEKmYINh9wznE7WchI1QZdoJbKaHJbH0dtE/oPqj6jQwIKA2 -wu9XxAG1EwAkGrtetrraR4mm6IO3u78oSIKOcXY8QPMW9ybZ9/aWM24O+QK2aj28 -RzWd/JtNBAbQuRJA+AxYdHKUNqXrmSIdZHOW62oArfKOnFfbeI2qvk7Vb+D6xRD6 -hHfsNRaqsGmwat8UrCICoNl+a10JJLcpgbp/qDeNcKH7k2SKBjbfJ5xm/rJBQcYM -uQINBFjVvh4BEADzt2iKa1gSksHtTFkPQ5ULqUF2sHDClr3ykbLq/AxgSCON58eP -A9SKQy2O+qDpojHAN1UULJgHEn34afzMkBzjxcJXMRgaTV2M+1trjwx/VluD9OKX -wmnhmSdvCIP7Z0qdhU78maLq10UG1vVwej3kVlxsf4Eu2ZA+NeIr7Tj0DERqEDQo -DRtNPVEy3h1xoYruy/VjNDi1CI3yFkM6HW1CgRA50rI7GDtvOuitZy+9Lpqs0mWq -vdApWZxoQwslFcziNd+ZVaQjgO6LSnkDttRkAOblFiD710OQy3/Yo97i7bqsKrnZ -qQMRUk0n12VXY9I94c7ELfViVqGk123ELtTViiIz5BT5iQRkJj1GiizTgGY6cfsj -kwWwvabpmWYdyQ85sYoVuNAPz3yDaLdtStWRNHWi4+UHC03J2BiBgIrQbuXoNGuc -j0b1fsntdntaBoZgFygwW6kXUjHLeEfnrGX3C2X49zg0rBTvEzdZwr2K0xgc2z26 -1EEf5ObmOGRt27K1fwrCxKHbKTscReHv78S4v3uN/9LvHfvIEaBoYHqMCcxy7Aii -dk+02dNDO/jZDnTAJH2NWhyB+PJvrlnK34zHhUMVH0i5nUjaCDL/n07Vd2sbE5qW -ivE2MWeayVKRGPci80tEGA1i42FJzGiA1uZrxXNImnsyxQyS8cr9iKoTIQARAQAB -iQIfBBgBCAAJBQJY1b4eAhsMAAoJEIH5DsPNNWBg+bYQALJyD1nyuz8+vl8rqj7K -Z9aRSW+XeG/wz6xrAqdY3OVvHwXYw33pgOmhNhfMUgP/Uy5OsxZdjIO7NzyKa2H9 -JoVSsAs/eLQDOQCcwXruBND6zuxt99kZh6o/Xp4lII9vuLafKner+fWluFHhOy/w -E3Q3VwCbC9npbmzweEl9Q83R7IxbEhtFF5HV0wKVRzW/GX7iWADoHpkAAQ2sUnQp -HhE1wOrdPm0dD9BEbTRQHekUiIQ8cFoORyWbJBwbflY64ioaFjyM+Ji49pNMykie -LzQFW1UYyhkXJeTvv93ym4XyMi2mhsOzna7mG1bonKvbKj6qaXb7gFHUXHh/ARuu -6CNARzBh6BTp+7c1brthGjT/L8CxrAeW2oE5wVIRuk8mdKiFoK3BuXc1P+vsnp36 -ioOQ0y+KPcp+PSbw6oDp7hTHztcW/3EoAgyHneWCmtYYi6RmVptTNpeeyHwqRP/O -elCN1cw9zopofVQhnxDEUgzVPrWWaE7UR6vrHbzlXvWMeGTYtmdmo/9xkYbQzZW7 -y90QLUGyDwQ+KeCG29W3EhygGy3myVQbRaXywgzzO2YvovjATDa7wZQrXNoVE7J9 -uLonNtRlyRlTAfFP6hCLDXwuE6WRHXhdu7aFKbq0LQGFv5hY4wPUp8vnUtGYT/wo -qqSkuSYhzNvmuKBIHPs6YD8d -=d7Et ------END PGP PUBLIC KEY BLOCK----- -- cgit v1.2.3 From d306d42328e16adb1eb3a361ef36f38859df09c1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 09:03:43 -0300 Subject: fake-symlinks: Remove default.nix --- sh/templates/default.nix | 14 -------------- 1 file changed, 14 deletions(-) delete mode 100644 sh/templates/default.nix diff --git a/sh/templates/default.nix b/sh/templates/default.nix deleted file mode 100644 index adbefea..0000000 --- a/sh/templates/default.nix +++ /dev/null @@ -1,14 +0,0 @@ -let - niv-sources = import ./nix/sources.nix; - pkgs = import niv-sources.nixpkgs { overlays = [ ]; }; - src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; - utils-i18n = pkgs.callPackage ./nix/utils-i18n.nix { }; - - projectBuildInputs = with pkgs; - [ ] ++ pkgs.callPackage ./nix/base-packages.nix { inherit utils-i18n; }; - - preTestPhaseSetup = ""; - utils = import ./nix/utils.nix { - inherit pkgs src projectBuildInputs preTestPhaseSetup; - }; -in { inherit (utils) test site shell publishScript remotePublishScript; } -- cgit v1.2.3 From d44c3e53d2ca24a81a1637f22bef3f89ea0b40e0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 12:32:25 -0300 Subject: Move task() from sh/util.sh to scripts/task --- scripts/task | 47 +++++++++++++++++++++++++++++++++++++++++++++++ sh/util.sh | 23 ----------------------- 2 files changed, 47 insertions(+), 23 deletions(-) create mode 100755 scripts/task diff --git a/scripts/task b/scripts/task new file mode 100755 index 0000000..6a7cba1 --- /dev/null +++ b/scripts/task @@ -0,0 +1,47 @@ +#!/bin/sh +set -eu + +uuid() { + # Taken from: + # https://serverfault.com/a/799198 + od -xN20 /dev/urandom | \ + head -1 | \ + awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' +} + +insert_at_line() { + N="$1" + F="$2" + TMP="$(mktemp)" + printf '%s\n\n%s\n\n%s\n' \ + "$(head "-n$N" "$F")" \ + "$(cat -)" \ + "$(tail "-n+$((N+1))" "$F")" \ + > "$TMP" + mv "$TMP" "$F" +} + +SHORT= +while getopts 'c' flag; do + case "$flag" in + c) + SHORT=1 + ;; + *) + ;; + esac +done + +TITLE="${1:-FIXME}" +ID="#task-$(uuid)" +TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$TITLE" "$ID" "$(date -I)")" + +if [ "$SHORT" = '1' ] && [ "$TITLE" != 'FIXME' ]; then + echo "$TITLE_LINE" | insert_at_line 2 TODOs.md +else + printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line 2 TODOs.md +fi + +git reset . +git add TODOs.md +git commit -m "TODOs.md: Add $ID" diff --git a/sh/util.sh b/sh/util.sh index 18e0be0..fcad65d 100644 --- a/sh/util.sh +++ b/sh/util.sh @@ -31,29 +31,6 @@ t() { expand "$1" -t2 | sponge "$1" } -insert_at_line() { - N="$1" - F="$2" - printf '%s\n\n%s\n\n%s\n' \ - "$(head "-n$N" "$F")" \ - "$(cat -)" \ - "$(tail "-n+$((N+1))" "$F")" \ - | sponge "$F" -} - -task() { - TITLE="${1:-FIXME}" - ID="#task-$(uuidgen)" - TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$TITLE" "$ID" "$(date -I)")" - if [ "${2:-}" = '-c' ] && [ "$TITLE" != 'FIXME' ]; then - echo "$TITLE_LINE" | insert_at_line 2 TODOs.md - else - printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line 2 TODOs.md - fi - git add TODOs.md - git commit -m "TODOs.md: Add $ID" -} - gvi() { if [ -e "$1" ]; then INIT="gpg -qd" -- cgit v1.2.3 From e12203646cbb9f4002a937dec3e4bc284a61e35f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 12:32:33 -0300 Subject: sh/util.sh: Remove extract() --- aux/assert-todos.sh | 2 +- sh/util.sh | 22 ---------------------- 2 files changed, 1 insertion(+), 23 deletions(-) diff --git a/aux/assert-todos.sh b/aux/assert-todos.sh index c40c718..0430f37 100755 --- a/aux/assert-todos.sh +++ b/aux/assert-todos.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -EXCLUDE='(sh/templates/|aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|sh/util.sh|docbook-xsl.tar.gz)' +EXCLUDE='(sh/templates/|aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|scripts/task)' if git grep FIXME | grep -Ev "$EXCLUDE"; then echo "Found dangling FIXME markers on the project." echo "You should write them down properly on TODOs.org." diff --git a/sh/util.sh b/sh/util.sh index fcad65d..bb63620 100644 --- a/sh/util.sh +++ b/sh/util.sh @@ -1,27 +1,5 @@ #!/bin/sh -extract () { - if [ -f "$1" ] ; then - case "$1" in - *.tar.bz2) tar xvjf "$1" ;; - *.tar.gz) tar xvzf "$1" ;; - *.bz2) bunzip2 "$1" ;; - *.rar) unrar x "$1" ;; - *.gz) gunzip "$1" ;; - *.tar) tar xvf "$1" ;; - *.tbz2) tar xvjf "$1" ;; - *.tgz) tar xvzf "$1" ;; - *.zip) unzip "$1" ;; - *.Z) uncompress "$1" ;; - *.7z) 7z x "$1" ;; - *.xz) unxz "$1" ;; - *) echo "don't know how to extract '$1'..." ;; - esac - else - echo "'$1' is not a valid file!" - fi -} - genpassword() { length="${1-99}" tr -cd '[:alnum:]' < /dev/urandom | fold "-w$length" | head -n1 ||: -- cgit v1.2.3 From 8c5f13e98d8e10871f3f5d36d63a548a47466168 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 15:20:09 -0300 Subject: fake-symlinks: Makefile: Fix typo in install target --- sh/templates/Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index f9b261c..8d4758f 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -79,7 +79,7 @@ install: all $(soaliases) for b in $(binaries); do install -m 755 -D $$b $(DESTDIR)$(PREFIX)/bin/$$b; done for m in $(manpages); do \ n=$${m##*.}; \ - mkdir -p $(DESTDIR)$(MANPREFIX)/man$$m; \ + mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`.gz; \ done -- cgit v1.2.3 From 00ee6da72c4ea328c80497b638581997cbc2f796 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 15:49:46 -0300 Subject: fake-symlinks.sh: Add enforce_uniform_readme --- sh/fake-symlinks.sh | 35 +++++++++++++++++++++++++---------- 1 file changed, 25 insertions(+), 10 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 5333f0a..65fc2f1 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -145,12 +145,6 @@ ln_env() { else ENABLE_C= fi - - if { [ -f "$PPREFIX/README.md" ] || [ -f "$PPREFIX/README" ]; } && [ -z "${NO_README_SH[$PROJECT]}" ]; then - ENABLE_README_SH=1 - else - ENABLE_README_SH= - fi } ln_init() { @@ -257,6 +251,30 @@ EOF fi } +enforce_uniform_readme() { + if [ -f "$PPREFIX/CHANGELOG.md" ] && grep -q '^## Contributing$' "$PPREFIX/README.md"; then + EXPECTED="$(cat < Date: Mon, 8 Mar 2021 20:12:24 -0300 Subject: configuration.nix: Remove flatpak --- configuration.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/configuration.nix b/configuration.nix index cdabf74..4d60920 100644 --- a/configuration.nix +++ b/configuration.nix @@ -30,8 +30,7 @@ let pub-crons.with-mail) ++ builtins.attrValues (builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons); privateConfiguration = import /etc/nixos/private-configuration.nix; - enableFlatpak = true; # for usage with proprietary Skype - proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn ]; + proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn skype ]; allowUnfree = builtins.length proprietaryPackages > 0; in { imports = [ # Include the results of the hardware scan. @@ -354,7 +353,6 @@ in { xdg.portal.enable = true; services = { - flatpak.enable = enableFlatpak; blueman.enable = true; # We can see the actual generated crontab at /etc/crontab -- cgit v1.2.3 From 5c28dd75eac261ba13c0d3bb636a3cf33f420ba9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 22:04:09 -0300 Subject: scripts/task: Add missing shift --- scripts/task | 1 + 1 file changed, 1 insertion(+) diff --git a/scripts/task b/scripts/task index 6a7cba1..e2d14a1 100755 --- a/scripts/task +++ b/scripts/task @@ -26,6 +26,7 @@ while getopts 'c' flag; do case "$flag" in c) SHORT=1 + shift ;; *) ;; -- cgit v1.2.3 From 055c823e4257f76eae6f5de696a363aa2647dd64 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 8 Mar 2021 22:16:20 -0300 Subject: fake-symlinks: Stop using -0 from xargs --- aux/assert-shellcheck.sh | 4 ++-- sh/templates/aux/assert-clang-format.sh | 2 +- sh/templates/aux/assert-shellcheck.sh | 4 ++-- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/aux/assert-shellcheck.sh b/aux/assert-shellcheck.sh index 334a875..fcbb1c7 100755 --- a/aux/assert-shellcheck.sh +++ b/aux/assert-shellcheck.sh @@ -1,6 +1,6 @@ #!/bin/sh set -eux -git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ +git ls-files | \ + xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ xargs shellcheck diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index c7ee6d7..17931de 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -7,7 +7,7 @@ if [ "${1:-}" = '--fix-in-place' ]; then fi # shellcheck disable=2016 -find . -type f \( -name '*.h' -o -name '*.c' \) -print0 | xargs -0 -I{} sh -c ' +find . -type f \( -name '*.h' -o -name '*.c' \) | xargs -I{} sh -c ' clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" echo " ./aux/assert-clang-format.sh --fix-in-place" diff --git a/sh/templates/aux/assert-shellcheck.sh b/sh/templates/aux/assert-shellcheck.sh index 334a875..fcbb1c7 100755 --- a/sh/templates/aux/assert-shellcheck.sh +++ b/sh/templates/aux/assert-shellcheck.sh @@ -1,6 +1,6 @@ #!/bin/sh set -eux -git ls-files -z | \ - xargs -0 awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ +git ls-files | \ + xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ xargs shellcheck -- cgit v1.2.3 From e4019a931020d3a49569fa2c5d826fe64eb1e87d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:18:30 -0300 Subject: configuration.nix: write down btpd as a replacement for transmission --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 4d60920..6315686 100644 --- a/configuration.nix +++ b/configuration.nix @@ -314,7 +314,7 @@ in { ## Candidates to be replaced by alternatives gpodder-with-youtube-dl # podboat? - transmission-gtk # Transmission TUI + transmission-gtk # https://github.com/btpd/btpd tdesktop # telegram -> gomuks ] ++ proprietaryPackages ++ nu-packages; }; -- cgit v1.2.3 From d159b2aeaf5971e87db33cee0ec742e68fa443cb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:22:58 -0300 Subject: TODOs.md: Mark #task-18eb3dfe-c667-4d18-967c-d406a28e94be as DONE --- TODOs.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/TODOs.md b/TODOs.md index 4e90150..9665cb9 100644 --- a/TODOs.md +++ b/TODOs.md @@ -1,6 +1,10 @@ # Tasks ## TODO Support tags in tasks? {#task-18eb3dfe-c667-4d18-967c-d406a28e94be} +- DONE in 2021-02-20 + + Done in + [`250117393a0503f66bb5a10cd0199f8748d32cda`](http://git.euandreh.xyz/dotfiles/commit/?id=250117393a0503f66bb5a10cd0199f8748d32cda) - TODO in 2021-02-19 # Bugs -- cgit v1.2.3 From 37ea744811858aa7b3813f8a025a41675d524f15 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:28:16 -0300 Subject: aux/assert-todos.sh: Add checks to TODOs.md --- TODOs.md | 2 +- aux/assert-todos.sh | 49 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 50 insertions(+), 1 deletion(-) diff --git a/TODOs.md b/TODOs.md index 9665cb9..ef10ac7 100644 --- a/TODOs.md +++ b/TODOs.md @@ -1,6 +1,6 @@ # Tasks -## TODO Support tags in tasks? {#task-18eb3dfe-c667-4d18-967c-d406a28e94be} +## DONE Support tags in tasks? {#task-18eb3dfe-c667-4d18-967c-d406a28e94be} - DONE in 2021-02-20 Done in diff --git a/aux/assert-todos.sh b/aux/assert-todos.sh index 0430f37..5827e34 100755 --- a/aux/assert-todos.sh +++ b/aux/assert-todos.sh @@ -7,3 +7,52 @@ if git grep FIXME | grep -Ev "$EXCLUDE"; then echo "You should write them down properly on TODOs.org." exit 1 fi + +awk -F'{#' ' +BEGIN { + exitstatus = 0 + h2flag = 0 + h2status = "" + prevline = "" + idx = 0 + delete ids[0] +} +h2flag == 1 { + split($0, l, " ") + timelinestatus = l[2] + if (h2status != timelinestatus) { + print "h2/timeline status mismatch for line " NR-1 + print prevline + print $0 + exitstatus = 1 + } + h2status = "" + h2flag = 0 +} + +/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { + if (match($0, / \{#.*?\}$/) == 0) { + print "Missing ID for line " NR ":\n" $0 + exitstatus = 1 + } + id_with_prefix = substr($2, 0, length($2) - 1) + match(id_with_prefix, /^\w+-/) + id = substr(id_with_prefix, RLENGTH + 1) + if (id in arr) { + print "Duplicate ID: " id + exitstatus = 1 + } else { + arr[id] = 1 + } + + split($0, l, " ") + h2status = l[2] + h2flag = 1 + prevline = $0 +} + + +/^# Scratch$/ { + exit exitstatus +} +' TODOs.md -- cgit v1.2.3 From 8881b16c2dda535e8efab000454cc8399bc79610 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:28:55 -0300 Subject: Makefile: Generate HTML in "public" target --- Makefile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Makefile b/Makefile index 9ace5fa..609997e 100644 --- a/Makefile +++ b/Makefile @@ -10,6 +10,6 @@ clean: rm -rf public/ public: - mkdir -p public + sh aux/workflow/public.sh dotfiles dotfiles public-inbox .PHONY: clean check dev-check -- cgit v1.2.3 From a71741d9512477aafa1b62be1271fd76ac761628 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:35:30 -0300 Subject: fake-symlinks: assert-clang-format.sh: ShellCheck --- sh/templates/aux/assert-clang-format.sh | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh index 17931de..cf3fbb4 100755 --- a/sh/templates/aux/assert-clang-format.sh +++ b/sh/templates/aux/assert-clang-format.sh @@ -7,10 +7,10 @@ if [ "${1:-}" = '--fix-in-place' ]; then fi # shellcheck disable=2016 -find . -type f \( -name '*.h' -o -name '*.c' \) | xargs -I{} sh -c ' +find . -type f \( -name '*.h' -o -name '*.c' \) -exec sh -c ' clang-format "$1" | diff - "$1" || { echo "Unformatted C code. To fix it, run:" echo " ./aux/assert-clang-format.sh --fix-in-place" exit 1 } -' _ {} \; +' _ {} + -- cgit v1.2.3 From c60c9feb3ec78fb3110770a77a207f9c45fa7281 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:40:02 -0300 Subject: TODOs.md --- TODOs.md | 1 + 1 file changed, 1 insertion(+) diff --git a/TODOs.md b/TODOs.md index ef10ac7..fa1521b 100644 --- a/TODOs.md +++ b/TODOs.md @@ -16,3 +16,4 @@ # Resources # Scratch +http://r-36.net/scm/zs/file/README.md.html -- cgit v1.2.3 From e661e3faa021a85336981943ddfbc0ead4703e46 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 08:50:41 -0300 Subject: fake-symlinks: ci-build.sh: Publish CI logs even when dev-check fails --- aux/ci/ci-build.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 45e4075..79b41f0 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -50,7 +50,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean dev-check public' + $RUNNER 'make clean dev-check; make public' rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 45e4075..79b41f0 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -50,7 +50,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean dev-check public' + $RUNNER 'make clean dev-check; make public' rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From 32dfcd1cd8c8ed12829ee64bb20335b95a83f75d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 9 Mar 2021 13:53:00 -0300 Subject: fake-symlinks.sh: Add cl-fun --- configuration.nix | 1 + sh/fake-symlinks.sh | 3 ++- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 6315686..e46ed05 100644 --- a/configuration.nix +++ b/configuration.nix @@ -261,6 +261,7 @@ in { valgrind gdb scdoc + sbcl ## POSIX bmake-with-alias diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 65fc2f1..9293178 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -389,7 +389,8 @@ ln_all ln_makefile_only_guix_project servers \ paku \ std-tools \ gistatic \ - listatic + listatic \ + cl-fun ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 548cc798b509e2205c2ca973ef315cb217cf1605 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 10 Mar 2021 07:11:42 -0300 Subject: Revert e661e3faa021a85336981943ddfbc0ead4703e46 --- aux/ci/ci-build.sh | 2 +- sh/templates/aux/ci/ci-build.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 79b41f0..45e4075 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -50,7 +50,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean dev-check; make public' + $RUNNER 'make clean dev-check public' rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 79b41f0..45e4075 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -50,7 +50,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean dev-check; make public' + $RUNNER 'make clean dev-check public' rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From 3334c09365b4ae50c032e7f7f1f0cffc6acc99e3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 10 Mar 2021 07:16:33 -0300 Subject: fake-symlinks.sh: cp-if-not .gitignore --- sh/fake-symlinks.sh | 2 +- sh/templates/..gitignore | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) create mode 100644 sh/templates/..gitignore diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 9293178..c86a19b 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -155,7 +155,7 @@ ln_init() { if [ ! -d "$PPREFIX" ]; then git init "$PPREFIX" fi - cp_if_not description long-description + cp_if_not description long-description ..gitignore } ln_build_aux() { diff --git a/sh/templates/..gitignore b/sh/templates/..gitignore new file mode 100644 index 0000000..87174b6 --- /dev/null +++ b/sh/templates/..gitignore @@ -0,0 +1 @@ +/public/ -- cgit v1.2.3 From c79bdc1c0913e729508ff9209ec981c87646ec4e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 11 Mar 2021 17:42:53 -0300 Subject: sh/env.sh: Add -fPIC and -g to $CFLAGS --- sh/env.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/env.sh b/sh/env.sh index 16509da..60f70b9 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -8,7 +8,7 @@ export BORG_REMOTE_PATH='borg1' export GOPATH="$HOME/dev/go" export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" export RLWRAP_HOME="$HOME/.cache/rlwrap" -export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror' +export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror -fPIC -g' export CC=gcc export C_INCLUDE_PATH="${C_INCLUDE_PATH:-}${C_INCLUDE_PATH:+:}$HOME/.local/include" -- cgit v1.2.3 From 168716bf5650edbe09c712567b31304fa290b706 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 13 Mar 2021 11:09:35 -0300 Subject: fake-symlinks: with-container.sh: Add --fallback to guix commands --- aux/guix/with-container.sh | 13 ++++++------- sh/templates/aux/guix/with-container.sh | 13 ++++++------- 2 files changed, 12 insertions(+), 14 deletions(-) diff --git a/aux/guix/with-container.sh b/aux/guix/with-container.sh index 6561b2c..13b6cd3 100755 --- a/aux/guix/with-container.sh +++ b/aux/guix/with-container.sh @@ -2,13 +2,12 @@ set -eux if [ -z "${1:-}" ]; then - guix time-machine -C aux/guix/pinned-channels.scm -- \ - environment -m aux/guix/manifest.scm + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm elif [ "$1" = '-p' ]; then - guix time-machine -C aux/guix/pinned-channels.scm -- \ - environment --pure -C -m aux/guix/manifest.scm + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C else - guix time-machine -C aux/guix/pinned-channels.scm -- \ - environment --pure -C -m aux/guix/manifest.scm -- \ - sh -c "$@" + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" fi diff --git a/sh/templates/aux/guix/with-container.sh b/sh/templates/aux/guix/with-container.sh index 6561b2c..13b6cd3 100755 --- a/sh/templates/aux/guix/with-container.sh +++ b/sh/templates/aux/guix/with-container.sh @@ -2,13 +2,12 @@ set -eux if [ -z "${1:-}" ]; then - guix time-machine -C aux/guix/pinned-channels.scm -- \ - environment -m aux/guix/manifest.scm + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm elif [ "$1" = '-p' ]; then - guix time-machine -C aux/guix/pinned-channels.scm -- \ - environment --pure -C -m aux/guix/manifest.scm + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C else - guix time-machine -C aux/guix/pinned-channels.scm -- \ - environment --pure -C -m aux/guix/manifest.scm -- \ - sh -c "$@" + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" fi -- cgit v1.2.3 From a3f7d61fea448b9045918723ca6e6694842cbadb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 16 Mar 2021 15:34:49 -0300 Subject: sh/env.sh: Add ~/.local/info to $INFOPATH --- sh/env.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/env.sh b/sh/env.sh index 60f70b9..dd0b4b6 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -18,6 +18,7 @@ export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}${LD_LIBRARY_PATH:+:}$HOME/.local/li MANPATH="${MANPATH:-$HOME/.local/share/man:$(manpath)}" export MANPATH export PREFIX="$HOME/.local" +export INFOPATH="${INFOPATH:-}${INFOPATH:+:}$HOME/.local/info" # https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287 export NIX_BUILD_CORES=0 -- cgit v1.2.3 From c2318367e3675572620456d4c70ee9c56346f8c9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 16 Mar 2021 19:02:21 -0300 Subject: configuration.nix: Add lsof and lsscsi packages --- configuration.nix | 2 ++ 1 file changed, 2 insertions(+) diff --git a/configuration.nix b/configuration.nix index e46ed05..d39ea97 100644 --- a/configuration.nix +++ b/configuration.nix @@ -237,6 +237,8 @@ in { cloc inetutils # telnet nodePackages.node2nix + lsof + lsscsi ## Mail isync -- cgit v1.2.3 From 8500e5ba9812b9f647cb13d29cff7e7cbaffcd7f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 17 Mar 2021 14:43:38 -0300 Subject: Move GPG config to gpg/ --- gpg/gpg-agent.conf | 6 ++++++ gpg/gpg.conf | 1 + sh/symlinks.sh | 6 +++--- 3 files changed, 10 insertions(+), 3 deletions(-) create mode 100644 gpg/gpg-agent.conf create mode 100644 gpg/gpg.conf diff --git a/gpg/gpg-agent.conf b/gpg/gpg-agent.conf new file mode 100644 index 0000000..e21ae64 --- /dev/null +++ b/gpg/gpg-agent.conf @@ -0,0 +1,6 @@ +default-cache-ttl 172800 +default-cache-ttl-ssh 172800 +max-cache-ttl 604800 +max-cache-ttl-ssh 604800 +enable-ssh-support +pinentry-program /run/current-system/sw/bin/pinentry-gtk-2 diff --git a/gpg/gpg.conf b/gpg/gpg.conf new file mode 100644 index 0000000..fbc8053 --- /dev/null +++ b/gpg/gpg.conf @@ -0,0 +1 @@ +keyserver pool.sks-keyservers.net \ No newline at end of file diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 2197dc6..a9531ca 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -26,9 +26,9 @@ touch ~/tmp/scratch.txt touch /tmp/fp.euandreh.log mkdir -p ~/.gnupg -ln -fs "${HOME}/annex/bin/misc/gpg/gpg.conf" ~/.gnupg/gpg.conf -ln -fs "${HOME}/annex/bin/misc/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf -ln -fs "${HOME}/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig +ln -fs "$DOTFILES/gpg/gpg.conf" ~/.gnupg/gpg.conf +ln -fs "$DOTFILES/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf +ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig mkdir -p ~/.newsboat ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls -- cgit v1.2.3 From 2c78bf48c0129428b5520a646c7203c5d60e4944 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 17 Mar 2021 17:01:13 -0300 Subject: Add gpg/sshcontrol --- gpg/sshcontrol | 1 + sh/symlinks.sh | 1 + 2 files changed, 2 insertions(+) create mode 100644 gpg/sshcontrol diff --git a/gpg/sshcontrol b/gpg/sshcontrol new file mode 100644 index 0000000..2328461 --- /dev/null +++ b/gpg/sshcontrol @@ -0,0 +1 @@ +F861365DDF2313683DFEFA6DB2F05BBF9D2960EC diff --git a/sh/symlinks.sh b/sh/symlinks.sh index a9531ca..08436f3 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -28,6 +28,7 @@ touch /tmp/fp.euandreh.log mkdir -p ~/.gnupg ln -fs "$DOTFILES/gpg/gpg.conf" ~/.gnupg/gpg.conf ln -fs "$DOTFILES/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf +ln -fs "$DOTFILES/gpg/sshcontrol" ~/.gnupg/sshcontrol ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig mkdir -p ~/.newsboat -- cgit v1.2.3 From 20e7c5054209de4958a255f29c7af399ad66cdd8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Mar 2021 11:45:24 -0300 Subject: sh/symlinks.sh: Add ASDF 3 friendly symlink to project sources --- sh/symlinks.sh | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 08436f3..9ce3bc1 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -21,6 +21,10 @@ ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/npmrc.sh" ~/.npmrc ln -fs "$DOTFILES/mailcap.conf" ~/.mailcap + +mkdir -p ~/.local/share/common-lisp +ln -fs ~/dev/libre ~/.local/share/common-lisp/source + mkdir -p ~/tmp/ touch ~/tmp/scratch.txt touch /tmp/fp.euandreh.log -- cgit v1.2.3 From 023cc5cf552923fe6043e120e74319067ea2d1da Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Mar 2021 16:10:40 -0300 Subject: fake-symlinks.sh: Add git-permalink and lisp-cli repos --- sh/fake-symlinks.sh | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index c86a19b..e498537 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -390,7 +390,9 @@ ln_all ln_makefile_only_guix_project servers \ std-tools \ gistatic \ listatic \ - cl-fun + cl-fun \ + git-permalink \ + lisp-cli ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 38264af1211b5f0e58d677e45fb2552b967990b9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 21 Mar 2021 20:33:00 -0300 Subject: fake-symlinks.sh: Remove unused envsubst_* functions --- sh/fake-symlinks.sh | 21 --------------------- 1 file changed, 21 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index e498537..3ed966e 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -60,27 +60,6 @@ cp_if() { done } -envsubst_all() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - mkdir -p "$(dirname "$OUT")" - envsubst < "$f" > "$OUT" - - if [ -n "$EXECUTABLE" ]; then - chmod +x "$OUT" - fi - done -} - -envsubst_if_not() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - if [ ! -f "$OUT" ]; then - envsubst_all "$f" - fi - done -} - sed_all() { for f in "$@"; do OUT="$PPREFIX/$(normalize_name "$f")" -- cgit v1.2.3 From ce6390c73452b32085b16381f30de2960783fcc5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 05:25:29 -0300 Subject: fake-symlinks.sh: Add curth repo --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 3ed966e..0977e58 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -371,7 +371,8 @@ ln_all ln_makefile_only_guix_project servers \ listatic \ cl-fun \ git-permalink \ - lisp-cli + lisp-cli \ + curth ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 2c8e7b156e18e832390b7275cff783786df3bc8a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 08:32:54 -0300 Subject: fake-symlinks.sh: Remove lex-yacc --- sh/fake-symlinks.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 0977e58..11839e8 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -341,8 +341,7 @@ ln_all ln_description_foreign_project guix \ ml-archives \ 3rd-party-archives ln_all ln_makefile_only_project boneco \ - pdfs-da-d-maria \ - lex-yacc + pdfs-da-d-maria ln_all ln_makefile_only_guix_project servers \ pires \ remembering \ -- cgit v1.2.3 From e13a153b6c939301c24caa8fa516579ef4d0f18b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 08:47:20 -0300 Subject: fake-symlinks.sh: Remove SharedC --- sh/fake-symlinks.sh | 3 --- 1 file changed, 3 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 11839e8..5847c7f 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -303,7 +303,6 @@ declare -A ML_FOR_PROJECT=( [konformigado]=mediator [gluilo]=mediator [fallible]=mediator - [sharedc]=mediator [eq]=mediator [songbooks]=songbooks [pires]=pires @@ -325,7 +324,6 @@ declare -A C_PROJECT=( [konformigado]=1 [libedn]=1 [fallible]=1 - [sharedc]=1 ) ln_all() { @@ -352,7 +350,6 @@ ln_all ln_makefile_only_guix_project servers \ libedn \ eq \ fallible \ - sharedc \ standardify \ autoqemu \ yoctoauth \ -- cgit v1.2.3 From 889ae5546e8c4da40a363a5a68d80e0787a5b8d9 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 11:35:02 -0300 Subject: sh/symlinks.sh: Avoid duplicating symlink within itself --- sh/symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 9ce3bc1..c4e0a27 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -23,7 +23,7 @@ ln -fs "$DOTFILES/mailcap.conf" ~/.mailcap mkdir -p ~/.local/share/common-lisp -ln -fs ~/dev/libre ~/.local/share/common-lisp/source +[ ! -e ~/.local/share/common-lisp/source ] && ln -fs ~/dev/libre ~/.local/share/common-lisp/source mkdir -p ~/tmp/ touch ~/tmp/scratch.txt -- cgit v1.2.3 From 84a8c16739b5aa99a1f000f663e17027af2cada8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 11:37:25 -0300 Subject: fake-symlinks: aux/workflow/public.sh: Mark as executable --- sh/templates/aux/workflow/public.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 sh/templates/aux/workflow/public.sh diff --git a/sh/templates/aux/workflow/public.sh b/sh/templates/aux/workflow/public.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 85e209b3f173755e0f137aa2e45146f95127f0c5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 12:38:43 -0300 Subject: Remove default.nix --- default.nix | 13 - sh/symlinks.sh | 4 - spacemacs.el | 1106 -------------------------------------------------------- 3 files changed, 1123 deletions(-) delete mode 100644 default.nix delete mode 100644 spacemacs.el diff --git a/default.nix b/default.nix deleted file mode 100644 index 49df575..0000000 --- a/default.nix +++ /dev/null @@ -1,13 +0,0 @@ -with import { }; { - test = pkgs.stdenv.mkDerivation { - src = pkgs.nix-gitignore.gitignoreSource [ "!.git" ] ./.; - name = "dotfiles-test"; - phases = [ "unpackPhase" "buildPhase" ]; - buildInputs = [ nixfmt gitMinimal shellcheck ]; - buildPhase = '' - patchShebangs . - ./tests.sh - touch $out - ''; - }; -} diff --git a/sh/symlinks.sh b/sh/symlinks.sh index c4e0a27..36f74cb 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -45,10 +45,6 @@ upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER ## tmux ln -fs "$DOTFILES/tmux.conf" ~/.tmux.conf -## Emacs -mkdir -p "$HOME/.emacs.d/private/layers/" -ln -fs "$DOTFILES/spacemacs.el" ~/.spacemacs - ## vi ln -fs "$DOTFILES/exrc.conf" ~/.exrc diff --git a/spacemacs.el b/spacemacs.el deleted file mode 100644 index 7b70a26..0000000 --- a/spacemacs.el +++ /dev/null @@ -1,1106 +0,0 @@ -(defun po-with-temp-buffer (&rest _) nil) -(defun evil-set-undo-system (&rest _) nil) - -;; (defun org-time-add (&rest r) nil) - -(defun dotspacemacs/layers () - "Layer configuration: -This function should only modify configuration layer settings." - (setq-default - ;; Base distribution to use. This is a layer contained in the directory - ;; `+distribution'. For now available distributions are `spacemacs-base' - ;; or `spacemacs'. (default 'spacemacs) - dotspacemacs-distribution 'spacemacs - - ;; Lazy installation of layers (i.e. layers are installed only when a file - ;; with a supported type is opened). Possible values are `all', `unused' - ;; and `nil'. `unused' will lazy install only unused layers (i.e. layers - ;; not listed in variable `dotspacemacs-configuration-layers'), `all' will - ;; lazy install any layer that support lazy installation even the layers - ;; listed in `dotspacemacs-configuration-layers'. `nil' disable the lazy - ;; installation feature and you have to explicitly list a layer in the - ;; variable `dotspacemacs-configuration-layers' to install it. - ;; (default 'unused) - dotspacemacs-enable-lazy-installation 'unused - - ;; If non-nil then Spacemacs will ask for confirmation before installing - ;; a layer lazily. (default t) - dotspacemacs-ask-for-lazy-installation t - - ;; If non-nil layers with lazy install support are lazy installed. - ;; List of additional paths where to look for configuration layers. - ;; Paths must have a trailing slash (i.e. `~/.mycontribs/') - dotspacemacs-configuration-layer-path '() - - ;; List of configuration layers to load. - dotspacemacs-configuration-layers - `(dart - php - go - graphviz - systemd - asciidoc - ansible - auto-completion - better-defaults - c-c++ - common-lisp - csv - docker - elixir - erc - elm - emacs-lisp - epub - erlang - finance - git - gnus - haskell - helm - html - javascript - latex - lua - markdown - nixos - notmuch - pdf - perl5 - purescript - python - react - restclient - ruby - rust - scheme - selectric - shell-scripts - sql - swift - syntax-checking - (terraform :variables terraform-auto-format-on-save t) - typescript - unicode-fonts - version-control - windows-scripts - yaml - (clojure :variables - clojure-enable-fancify-symbols t - clojure-enable-clj-refactor t) - (org :variables - org-enable-reveal-js-support t) - (shell :variables - shell-default-height 30 - shell-default-position 'bottom) - (spell-checking :variables - spell-checking-enable-by-default t - spell-checking-enable-auto-dictionary t) - (haskell :variables - haskell-enable-hindent t - haskell-completion-backend 'dante - haskell-process-type 'cabal-new-repl)) - - ;; List of additional packages that will be installed without being - ;; wrapped in a layer. If you need some configuration for these - ;; packages, then consider creating a layer. You can also put the - ;; configuration in `dotspacemacs/user-config'. - ;; To use a local version of a package, use the `:location' property: - ;; '(your-package :location "~/path/to/your-package/") - ;; Also include the dependencies as they will not be resolved automatically. - dotspacemacs-additional-packages '(paredit - po-mode - interleave - debbugs - fireplace - emidje - ob-rust - guix - direnv - nix-sandbox) - ;; A list of packages that cannot be updated. - dotspacemacs-frozen-packages '() - - ;; A list of packages that will not be installed and loaded. - dotspacemacs-excluded-packages '() - - ;; Defines the behaviour of Spacemacs when installing packages. - ;; Possible values are `used-only', `used-but-keep-unused' and `all'. - ;; `used-only' installs only explicitly used packages and deletes any unused - ;; packages as well as their unused dependencies. `used-but-keep-unused' - ;; installs only the used packages but won't delete unused ones. `all' - ;; installs *all* packages supported by Spacemacs and never uninstalls them. - ;; (default is `used-only') - dotspacemacs-install-packages 'used-only - - ;; If non-nil activate `snoopy-mode' which shifts your number row - ;; to match the set of signs given in `dotspacemacs-snoopy-keyrow' - ;; in programming modes (insert-mode only). (default nil) - dotspacemacs-use-snoopy-mode nil - - ;; Text of shifted values from your - ;; keyboard's number row. (default '!@#$%^&*()') - dotspacemacs-snoopy-keyrow "!@#$%^&*()")) - -(defun dotspacemacs/init () - "Initialization: -This function is called at the very beginning of Spacemacs startup, -before layer configuration. -It should only modify the values of Spacemacs settings." - ;; This setq-default sexp is an exhaustive list of all the supported - ;; spacemacs settings. - (setq-default - ;; If non-nil then enable support for the portable dumper. You'll need - ;; to compile Emacs 27 from source following the instructions in file - ;; EXPERIMENTAL.org at to root of the git repository. - ;; (default nil) - dotspacemacs-enable-emacs-pdumper nil - - ;; File path pointing to emacs 27.1 executable compiled with support - ;; for the portable dumper (this is currently the branch pdumper). - ;; (default "emacs-27.0.50") - dotspacemacs-emacs-pdumper-executable-file "emacs-27.0.50" - - ;; Name of the Spacemacs dump file. This is the file will be created by the - ;; portable dumper in the cache directory under dumps sub-directory. - ;; To load it when starting Emacs add the parameter `--dump-file' - ;; when invoking Emacs 27.1 executable on the command line, for instance: - ;; ./emacs --dump-file=~/.emacs.d/.cache/dumps/spacemacs.pdmp - ;; (default spacemacs.pdmp) - dotspacemacs-emacs-dumper-dump-file "spacemacs.pdmp" - - ;; If non-nil ELPA repositories are contacted via HTTPS whenever it's - ;; possible. Set it to nil if you have no way to use HTTPS in your - ;; environment, otherwise it is strongly recommended to let it set to t. - ;; This variable has no effect if Emacs is launched with the parameter - ;; `--insecure' which forces the value of this variable to nil. - ;; (default t) - dotspacemacs-elpa-https t - - ;; Maximum allowed time in seconds to contact an ELPA repository. - ;; (default 5) - dotspacemacs-elpa-timeout 5 - - ;; Set `gc-cons-threshold' and `gc-cons-percentage' when startup finishes. - ;; This is an advanced option and should not be changed unless you suspect - ;; performance issues due to garbage collection operations. - ;; (default '(100000000 0.1)) - dotspacemacs-gc-cons '(100000000 0.1) - - ;; If non-nil then Spacelpa repository is the primary source to install - ;; a locked version of packages. If nil then Spacemacs will install the - ;; latest version of packages from MELPA. (default nil) - dotspacemacs-use-spacelpa nil - - ;; If non-nil then verify the signature for downloaded Spacelpa archives. - ;; (default nil) - dotspacemacs-verify-spacelpa-archives nil - - ;; If non-nil then spacemacs will check for updates at startup - ;; when the current branch is not `develop'. Note that checking for - ;; new versions works via git commands, thus it calls GitHub services - ;; whenever you start Emacs. (default nil) - dotspacemacs-check-for-update nil - - ;; If non-nil, a form that evaluates to a package directory. For example, to - ;; use different package directories for different Emacs versions, set this - ;; to `emacs-version'. (default 'emacs-version) - dotspacemacs-elpa-subdirectory 'emacs-version - - ;; One of `vim', `emacs' or `hybrid'. - ;; `hybrid' is like `vim' except that `insert state' is replaced by the - ;; `hybrid state' with `emacs' key bindings. The value can also be a list - ;; with `:variables' keyword (similar to layers). Check the editing styles - ;; section of the documentation for details on available variables. - ;; (default 'vim) - dotspacemacs-editing-style 'hybrid - - ;; If non-nil output loading progress in `*Messages*' buffer. (default nil) - dotspacemacs-verbose-loading nil - - ;; Specify the startup banner. Default value is `official', it displays - ;; the official spacemacs logo. An integer value is the index of text - ;; banner, `random' chooses a random text banner in `core/banners' - ;; directory. A string value must be a path to an image format supported - ;; by your Emacs build. - ;; If the value is nil then no banner is displayed. (default 'official) - dotspacemacs-startup-banner 'official - - ;; List of items to show in startup buffer or an association list of - ;; the form `(list-type . list-size)`. If nil then it is disabled. - ;; Possible values for list-type are: - ;; `recents' `bookmarks' `projects' `agenda' `todos'. - ;; List sizes may be nil, in which case - ;; `spacemacs-buffer-startup-lists-length' takes effect. - dotspacemacs-startup-lists '((recents . 5) - (projects . 7)) - - ;; True if the home buffer should respond to resize events. (default t) - dotspacemacs-startup-buffer-responsive t - - ;; Default major mode of the scratch buffer (default `text-mode') - dotspacemacs-scratch-mode 'text-mode - - ;; Initial message in the scratch buffer, such as "Welcome to Spacemacs!" - ;; (default nil) - dotspacemacs-initial-scratch-message nil - - ;; List of themes, the first of the list is loaded when spacemacs starts. - ;; Press `SPC T n' to cycle to the next theme in the list (works great - ;; with 2 themes variants, one dark and one light) - dotspacemacs-themes '(spacemacs-dark - spacemacs-light) - - ;; Set the theme for the Spaceline. Supported themes are `spacemacs', - ;; `all-the-icons', `custom', `vim-powerline' and `vanilla'. The first three - ;; are spaceline themes. `vanilla' is default Emacs mode-line. `custom' is a - ;; user defined themes, refer to the DOCUMENTATION.org for more info on how - ;; to create your own spaceline theme. Value can be a symbol or list with\ - ;; additional properties. - ;; (default '(spacemacs :separator wave :separator-scale 1.5)) - dotspacemacs-mode-line-theme '(spacemacs :separator wave :separator-scale 1.5) - - ;; If non-nil the cursor color matches the state color in GUI Emacs. - ;; (default t) - dotspacemacs-colorize-cursor-according-to-state t - - ;; Default font, or prioritized list of fonts. `powerline-scale' allows to - ;; quickly tweak the mode-line size to make separators look not too crappy. - ;; Alternatives: "FreeMono", "Fira Code", "Default" - dotspacemacs-default-font '("Source Code Pro" - :size 16 - :weight normal - :width normal) - - ;; The leader key (default "SPC") - dotspacemacs-leader-key "SPC" - - ;; The key used for Emacs commands `M-x' (after pressing on the leader key). - ;; (default "SPC") - dotspacemacs-emacs-command-key "SPC" - - ;; The key used for Vim Ex commands (default ":") - dotspacemacs-ex-command-key ":" - - ;; The leader key accessible in `emacs state' and `insert state' - ;; (default "M-m") - dotspacemacs-emacs-leader-key "M-m" - - ;; Major mode leader key is a shortcut key which is the equivalent of - ;; pressing ` m`. Set it to `nil` to disable it. (default ",") - dotspacemacs-major-mode-leader-key "," - - ;; Major mode leader key accessible in `emacs state' and `insert state'. - ;; (default "C-M-m") - dotspacemacs-major-mode-emacs-leader-key "C-M-m" - - ;; If non-nil, the shift mappings `<' and `>' retain visual state if used - ;; there. (default t) - dotspacemacs-retain-visual-state-on-shift t - - ;; If non-nil, `J' and `K' move lines up and down when in visual mode. - ;; (default nil) - dotspacemacs-visual-line-move-text t - - ;; These variables control whether separate commands are bound in the GUI to - ;; the key pairs `C-i', `TAB' and `C-m', `RET'. - ;; Setting it to a non-nil value, allows for separate commands under `C-i' - ;; and TAB or `C-m' and `RET'. - ;; In the terminal, these pairs are generally indistinguishable, so this only - ;; works in the GUI. (default nil) - dotspacemacs-distinguish-gui-tab nil - - ;; Name of the default layout (default "Default") - dotspacemacs-default-layout-name "home" - - ;; If non-nil the default layout name is displayed in the mode-line. - ;; (default nil) - dotspacemacs-display-default-layout t - - ;; If non-nil then the last auto saved layouts are resumed automatically upon - ;; start. (default nil) - dotspacemacs-auto-resume-layouts nil - - ;; If non-nil, auto-generate layout name when creating new layouts. Only has - ;; effect when using the "jump to layout by number" commands. (default nil) - dotspacemacs-auto-generate-layout-names nil - - ;; Size (in MB) above which spacemacs will prompt to open the large file - ;; literally to avoid performance issues. Opening a file literally means that - ;; no major mode or minor modes are active. (default is 1) - dotspacemacs-large-file-size 15 - - ;; Location where to auto-save files. Possible values are `original' to - ;; auto-save the file in-place, `cache' to auto-save the file to another - ;; file stored in the cache directory and `nil' to disable auto-saving. - ;; (default 'cache) - dotspacemacs-auto-save-file-location 'cache - - ;; Maximum number of rollback slots to keep in the cache. (default 5) - dotspacemacs-max-rollback-slots 5 - - ;; If non-nil, the paste transient-state is enabled. While enabled, pressing - ;; `p' several times cycles through the elements in the `kill-ring'. - ;; (default nil) - dotspacemacs-enable-paste-transient-state nil - - ;; Which-key delay in seconds. The which-key buffer is the popup listing - ;; the commands bound to the current keystroke sequence. (default 0.4) - dotspacemacs-which-key-delay 0.4 - - ;; Which-key frame position. Possible values are `right', `bottom' and - ;; `right-then-bottom'. right-then-bottom tries to display the frame to the - ;; right; if there is insufficient space it displays it at the bottom. - ;; (default 'bottom) - dotspacemacs-which-key-position 'bottom - - ;; Control where `switch-to-buffer' displays the buffer. If nil, - ;; `switch-to-buffer' displays the buffer in the current window even if - ;; another same-purpose window is available. If non-nil, `switch-to-buffer' - ;; displays the buffer in a same-purpose window even if the buffer can be - ;; displayed in the current window. (default nil) - dotspacemacs-switch-to-buffer-prefers-purpose nil - - ;; If non-nil a progress bar is displayed when spacemacs is loading. This - ;; may increase the boot time on some systems and emacs builds, set it to - ;; nil to boost the loading time. (default t) - dotspacemacs-loading-progress-bar t - - ;; If non-nil the frame is fullscreen when Emacs starts up. (default nil) - ;; (Emacs 24.4+ only) - dotspacemacs-fullscreen-at-startup t - - ;; If non-nil `spacemacs/toggle-fullscreen' will not use native fullscreen. - ;; Use to disable fullscreen animations in OSX. (default nil) - dotspacemacs-fullscreen-use-non-native nil - - ;; If non-nil the frame is maximized when Emacs starts up. - ;; Takes effect only if `dotspacemacs-fullscreen-at-startup' is nil. - ;; (default nil) (Emacs 24.4+ only) - dotspacemacs-maximized-at-startup nil - - ;; A value from the range (0..100), in increasing opacity, which describes - ;; the transparency level of a frame when it's active or selected. - ;; Transparency can be toggled through `toggle-transparency'. (default 90) - dotspacemacs-active-transparency 90 - - ;; A value from the range (0..100), in increasing opacity, which describes - ;; the transparency level of a frame when it's inactive or deselected. - ;; Transparency can be toggled through `toggle-transparency'. (default 90) - dotspacemacs-inactive-transparency 90 - - ;; If non-nil show the titles of transient states. (default t) - dotspacemacs-show-transient-state-title t - - ;; If non-nil show the color guide hint for transient state keys. (default t) - dotspacemacs-show-transient-state-color-guide t - - ;; If non-nil unicode symbols are displayed in the mode line. - ;; If you use Emacs as a daemon and wants unicode characters only in GUI set - ;; the value to quoted `display-graphic-p'. (default t) - dotspacemacs-mode-line-unicode-symbols t - - ;; If non-nil smooth scrolling (native-scrolling) is enabled. Smooth - ;; scrolling overrides the default behavior of Emacs which recenters point - ;; when it reaches the top or bottom of the screen. (default t) - dotspacemacs-smooth-scrolling t - - ;; Control line numbers activation. - ;; If set to `t' or `relative' line numbers are turned on in all `prog-mode' and - ;; `text-mode' derivatives. If set to `relative', line numbers are relative. - ;; This variable can also be set to a property list for finer control: - ;; '(:relative nil - ;; :disabled-for-modes dired-mode - ;; doc-view-mode - ;; markdown-mode - ;; org-mode - ;; pdf-view-mode - ;; text-mode - ;; :size-limit-kb 1000) - ;; (default nil) - dotspacemacs-line-numbers '(:relative t - :disabled-for-modes org-mode - pdf-view-mode - texinfo-mode - :size-limit-kb 1000) - - ;; Code folding method. Possible values are `evil' and `origami'. - ;; (default 'evil) - dotspacemacs-folding-method 'evil - - ;; If non-nil `smartparens-strict-mode' will be enabled in programming modes. - ;; (default nil) - dotspacemacs-smartparens-strict-mode nil - - ;; If non-nil pressing the closing parenthesis `)' key in insert mode passes - ;; over any automatically added closing parenthesis, bracket, quote, etc… - ;; This can be temporary disabled by pressing `C-q' before `)'. (default nil) - dotspacemacs-smart-closing-parenthesis nil - - ;; Select a scope to highlight delimiters. Possible values are `any', - ;; `current', `all' or `nil'. Default is `all' (highlight any scope and - ;; emphasis the current one). (default 'all) - dotspacemacs-highlight-delimiters 'all - - ;; If non-nil, start an Emacs server if one is not already running. - ;; (default nil) - dotspacemacs-enable-server nil - - ;; Set the emacs server socket location. - ;; If nil, uses whatever the Emacs default is, otherwise a directory path - ;; like \"~/.emacs.d/server\". It has no effect if - ;; `dotspacemacs-enable-server' is nil. - ;; (default nil) - dotspacemacs-server-socket-dir nil - - ;; If non-nil, advise quit functions to keep server open when quitting. - ;; (default nil) - dotspacemacs-persistent-server nil - - ;; List of search tool executable names. Spacemacs uses the first installed - ;; tool of the list. Supported tools are `rg', `ag', `pt', `ack' and `grep'. - ;; (default '("rg" "ag" "pt" "ack" "grep")) - dotspacemacs-search-tools '("ag" "grep") - - ;; Format specification for setting the frame title. - ;; %a - the `abbreviated-file-name', or `buffer-name' - ;; %t - `projectile-project-name' - ;; %I - `invocation-name' - ;; %S - `system-name' - ;; %U - contents of $USER - ;; %b - buffer name - ;; %f - visited file name - ;; %F - frame name - ;; %s - process status - ;; %p - percent of buffer above top of window, or Top, Bot or All - ;; %P - percent of buffer above bottom of window, perhaps plus Top, or Bot or All - ;; %m - mode name - ;; %n - Narrow if appropriate - ;; %z - mnemonics of buffer, terminal, and keyboard coding systems - ;; %Z - like %z, but including the end-of-line format - ;; (default "%I@%S") - dotspacemacs-frame-title-format "%I@%S" - - ;; Format specification for setting the icon title format - ;; (default nil - same as frame-title-format) - dotspacemacs-icon-title-format nil - - ;; Delete whitespace while saving buffer. Possible values are `all' - ;; to aggressively delete empty line and long sequences of whitespace, - ;; `trailing' to delete only the whitespace at end of lines, `changed' to - ;; delete only whitespace for changed lines or `nil' to disable cleanup. - ;; (default nil) - dotspacemacs-whitespace-cleanup 'trailing - - ;; If non nil activate `clean-aindent-mode' which tries to correct - ;; virtual indentation of simple modes. This can interfer with mode specific - ;; indent handling like has been reported for `go-mode'. - ;; If it does deactivate it here. - ;; (default t) - dotspacemacs-use-clean-aindent-mode t - - ;; If non-nil shift your number row to match the entered keyboard layout - ;; (only in insert mode). Currently the keyboard layouts - ;; (qwerty-us qwertz-de) are supported. - ;; New layouts can be added in `spacemacs-editing' layer. - ;; (default nil) - dotspacemacs-swap-number-row nil - - ;; Either nil or a number of seconds. If non-nil zone out after the specified - ;; number of seconds. (default nil) - dotspacemacs-zone-out-when-idle nil - - ;; Run `spacemacs/prettify-org-buffer' when - ;; visiting README.org files of Spacemacs. - ;; (default nil) - dotspacemacs-pretty-docs nil - - ;; If nil the home buffer shows the full path of agenda items - ;; and todos. If non nil only the file name is shown. - dotspacemacs-home-shorten-agenda-source nil)) - -(defun dotspacemacs/user-env () - "Environment variables setup. -This function defines the environment variables for your Emacs session. By -default it calls `spacemacs/load-spacemacs-env' which loads the environment -variables declared in `~/.spacemacs.env' or `~/.spacemacs.d/.spacemacs.env'. -See the header of this file for more information." - (spacemacs/load-spacemacs-env)) - -(defun dotspacemacs/user-init () - "Initialization for user code: -This function is called immediately after `dotspacemacs/init', before layer -configuration. -It is mostly for variables that should be set before packages are loaded. -If you are unsure, try setting them in `dotspacemacs/user-config' first." - ) - -(defun dotspacemacs/user-load () - "Library to load while dumping. -This function is called only while dumping Spacemacs configuration. You can -`require' or `load' the libraries of your choice that will be included in the -dump." - ) - - -(defun set-custom-clj-indent () - "dom/* indentation rules: React/Native helper fns" - (define-clojure-indent - ;; React - (view 'defun) - (text 'defun) - (touchable-highlight 'defun) - (image 'defun) - (scroll-view 'defun) - (camera 'defun) - (li 'defun) - (ul 'defun) - (div 'defun) - (button 'defun) - (a 'defun) - (span 'defun) - (svg 'defun) - (options 'defun) - - (pipeline 1) - (stage 1) - (job 1) - - (let-entities 4) - - (action 1) - (as-user 1) - (without-logs 0) - - (tabular 'defun) - (for-all 'defun) - - (flow 1) - (facts 1) - (fact 1) - - (assoc 1))) - -(defun euandreh/clear-repl-and-eval () - (interactive) - (cider-find-and-clear-repl-output t) - (cider-eval-defun-at-point)) - -(defun euandreh/save-and-run-focused-test () - (interactive) - (save-buffer) - (spacemacs/cider-test-run-focused-test)) - -(defun euandreh/save-and-eval-buffer () - (interactive) - (save-buffer) - (cider-eval-buffer)) - -(defalias 'scissors 'message-mark-inserted-region) - -(defvar paredit-modes '(lisp-mode - lisp-interaction-mode - emacs-lisp-mode - ielm-mode - clojure-mode - cider-mode - cider-repl-mode - clojurec-mode - clojurescript-mode - clojurex-mode - cider-clojure-interaction-mode - scheme-mode)) - -(setq custom-keybindings '(("M-ç" . euandreh/find-bookmarked-files) - ("C-M-y" . helm-show-kill-ring) - ("M-[" . (lambda () (interactive) (find-file "~/tmp/scratch.txt"))) - ("M-SPC" . (lambda () (interactive) (just-one-space -1))))) - -(defvar custom-el-files '("~/annex/bin/misc/mail/notmuch.el")) - -(defmacro measure-time (&rest body) - "Measure and return the running time of the code block." - (declare (indent defun)) - (let ((start (make-symbol "start"))) - `(let ((,start (float-time))) - ,@body - (- (float-time) ,start)))) - -(defmacro comment (&rest body) - nil) - -(defun recompile-el-files () - (dolist (path custom-el-files) - (when (file-exists-p path) - (byte-compile-file path t)))) - -(defun euandreh/projectile-reload-known-projects () - (interactive) - (projectile-load-known-projects)) - -(defun euandreh/find-os-declaration-file () - (interactive) - (find-file-existing (concat (getenv "DOTFILES") "/nixos/configuration.nix"))) - -(defun euandreh/find-fake-symlinks-file () - (interactive) - (find-file-existing (concat (getenv "DOTFILES") "/sh/fake-symlinks.sh"))) - -;; Taken from: -;; https://notmuchmail.org/emacstips/#index25h2 -(defun euandreh/notmuch-show-view-as-patch () - "View the the current message as a patch." - (interactive) - (let* ((id (notmuch-show-get-message-id)) - (msg (notmuch-show-get-message-properties)) - (part (notmuch-show-get-part-properties)) - (subject (concat "Subject: " (notmuch-show-get-subject) "\n")) - (diff-default-read-only t) - (buf (get-buffer-create (concat "*notmuch-patch-" id "*"))) - (map (make-sparse-keymap))) - (define-key map "q" 'notmuch-bury-or-kill-this-buffer) - (switch-to-buffer buf) - (let ((inhibit-read-only t)) - (erase-buffer) - (insert subject) - (insert (notmuch-get-bodypart-text msg part nil))) - (set-buffer-modified-p nil) - (diff-mode) - (lexical-let ((new-ro-bind (cons 'buffer-read-only map))) - (add-to-list 'minor-mode-overriding-map-alist new-ro-bind)) - (goto-char (point-min)))) - -(defun euandreh/notmuch-copy-git-am-command () - "View the the current message as a patch." - (interactive) - (let* ((id (notmuch-show-get-message-id)) - (cmd (format "notmuch show --format=raw %s | git am" id))) - (kill-new cmd) - (message cmd))) - -(defun comp (&rest fns) - (lexical-let ((fns fns)) - (lambda (arg) - (if fns - (funcall (car fns) (funcall (apply #'comp (cdr fns)) arg)) - arg)))) - -(defun euandreh/notmuch-copy-git-send-email-command () - "View the the current message as a patch." - (interactive) - (let* ((id (notmuch-show-get-message-id t)) - (from (car (notmuch-clean-address (notmuch-show-get-from)))) - (ccs (reduce #'concat - (mapcar (comp (apply-partially #'concat " --cc=") - #'string-trim - #'car - #'notmuch-clean-address) - (split-string (notmuch-show-get-cc) ",")))) - (cmd (format "git send-email --in-reply-to=%s --to=%s%s HEAD^" id from ccs))) - (kill-new cmd) - (message cmd))) - -(defun euandreh/copy-url (ml) - (let* ((ml (if (string= ml "help-guix") - "guix-user" - ml)) - (url (format "https://yhetil.org/%s/%s" ml id))) - (kill-new url) - (message url))) - -(defvar candidates '("help-guix" - "guix-devel" - "guix-user" - "guix-science" - "gwl" - "guix-bugs" - "guix-patches")) - -(defun euandreh/notmuch-copy-archive-url () - "View the current message on the browser." - (interactive) - ;; (setq helm-kill-ring--truncated-flag nil) - (let* ((id (notmuch-show-get-message-id t)) - (tags (notmuch-show-get-tags)) - (matches (cl-intersection tags candidates :test 'string=))) - (if matches - (euandreh/copy-url (car matches)) - (helm :sources - (helm-build-sync-source "mailint lists" - :candidates candidates - :action '(("Kill Register" . euandreh/copy-url))))))) - -;; Taken from: -;; https://notmuchmail.org/pipermail/notmuch/2018/026414.html -(defcustom euandreh/notmuch-attach-regex - "\\b\\(attache\?ment\\|attached\\|attach\\|pi[èe]ce\s+jointe?\\)\\b" - "Pattern of text announcing there should be an attachment. - -This is used by `notmuch-message-check-attach' to check email -bodies for words that might indicate the email should have an -attachement. If the pattern matches and there is no attachment (a -`<#part ...>' magic block), notmuch will show a confirmation -prompt before sending the email. - -The default regular expression is deliberately liberal: we prefer -false positive than forgotten attachments. This should be -customized for non-english languages and notmuch welcomes -additions to the pattern for your native language, unless it -conflicts with common words in other languages." - :type '(regexp) - :group 'notmuch-send) - -(defun euandreh/notmuch-message-check-attach () - "Check for missing attachments. - -This is normally added to `message-send-hook' and is configured -through `notmuch-message-attach-regex'." - (save-excursion ;; XXX: this fails somehow: point is at the end of the buffer on error - (goto-char (point-min)) - (if (re-search-forward euandreh/notmuch-attach-regex nil t) - (progn - (goto-char (point-min)) - (unless (re-search-forward "<#part [^>]*filename=[^>]*>" nil t) - (or (y-or-n-p "Email seem to refer to attachment, but nothing attached, send anyways?") - (error "No attachment found, aborting"))))))) - -(defun euandreh/prevent-sending-mail-without-subject () - (save-excursion - (save-restriction - (message-narrow-to-headers) - (when (not (message-fetch-field "subject")) - (or (y-or-n-p "Email without subject. Really send?") - (error "No subject found, aborting")))))) - -(defun euandreh/add-bug-id () - (interactive) - (let ((id (uuidgen-4))) - (insert (format ":PROPERTIES:\n:CUSTOM_ID: %s\n:END:" id id id)))) - -(defun git-link-cgit (hostname dirname filename _branch commit start _end) - (let* ((project-name (car (last (split-string dirname "/")))) - (format-string (pcase hostname - ("git.euandreh.xyz" "https://%s/%s/tree/%s?id=%s#n%s") - ("git.savannah.gnu.org" "https://%s/cgit/%s.git/tree/%s?id=%s#n%s") - (t "https://%s/%s.git/tree/%s?id=%s#n%s")))) - (format format-string - hostname - project-name - filename - commit - start))) - -(defun euandreh/find-bookmarked-files () - (interactive) - (helm :sources - (helm-build-sync-source "mailint lists" - :candidates '("annex/TODOs.org" - "annex/txt/Work.org" - "annex/txt/Things.org" - "annex/txt/writing.org" - ;; "annex/txt/archive/Things.old.org" - "annex/bin/misc/git/mrconfig.ini" - "annex/bin/misc/erc.el" - "annex/bin/misc/weechat/irc.conf" - "annex/bin/misc/mail/notmuch-post.sh" - "annex/bin/misc/mail/notmuch.el" - "tmp/scratch.txt" - "archive/vid/playlist.txt" - "annex/txt/Meeting Notes.org" - "dev/libre/others/dinheiros/money.ledger") - :action '(("Find file" . (lambda (f) - (find-file (concat "~/" f)))))))) - -(defun dotspacemacs/user-config () - "Configuration function for user code. -This function is called at the very end of Spacemacs initialization after layers configuration. -This is the place where most of your configurations should be done. Unless it is explicitly specified that a variable should be set before a package is loaded, you should place your code here." - (require 'notmuch) - (define-key 'notmuch-show-part-map "d" 'euandreh/notmuch-show-view-as-patch) - (define-key 'notmuch-show-part-map "y" 'euandreh/notmuch-copy-git-am-command) - (define-key 'notmuch-show-part-map "b" 'euandreh/notmuch-copy-archive-url) - (define-key 'notmuch-show-part-map "r" 'euandreh/notmuch-copy-git-send-email-command) - (define-key 'notmuch-search-mode-map "e" 'euandreh/notmuch-extend-current-query-with-tag) - (define-key 'notmuch-search-mode-map "E" 'euandreh/notmuch-extend-current-query) - (add-hook 'message-send-hook 'euandreh/notmuch-message-check-attach) - (add-hook 'message-send-hook 'euandreh/prevent-sending-mail-without-subject) - - (add-hook 'markdown-mode-hook 'turn-on-auto-fill) - (add-hook 'rst-mode-hook 'turn-on-auto-fill) - (add-hook 'org-mode-hook 'turn-on-auto-fill) - - (eval-after-load 'clojure-mode '(set-custom-clj-indent)) - (eval-after-load 'midje-mode '(set-custom-clj-indent)) - (add-hook 'dante-mode-hook 'flycheck-mode) - - (spacemacs/set-leader-keys - "p C-r" 'euandreh/projectile-reload-known-projects - "an" 'notmuch - "ai" 'erc-track-switch-buffer - "w/" 'split-window-right-and-focus - "w-" 'split-window-below-and-focus - "glh" 'git-link-homepage - "feo" 'euandreh/find-os-declaration-file - "feb" 'euandreh/find-fake-symlinks-file) - - (spacemacs/set-leader-keys-for-major-mode 'typescript-mode - "." 'spacemacs/jump-to-definition - "," 'tide-jump-back) - - ;; (global-evil-mc-mode) - - ;; https://github.com/syl20bnr/spacemacs/issues/774 - (unless (file-exists-p (concat spacemacs-cache-directory "undo")) - (make-directory (concat spacemacs-cache-directory "undo"))) - - (add-hook 'org-mode-hook (lambda () - (org-indent-mode 1))) - - ;; https://emacs.stackexchange.com/questions/3747/how-to-disable-line-wrapping-in-spacemacs - (add-hook 'hack-local-variables-hook (lambda () - (spacemacs/toggle-truncate-lines-off))) - - (dolist (mode-pair '(("\\.tsx?$" . typescript-mode) - ("\\.json\\.base$" . json-mode))) - (setq auto-mode-alist (cons mode-pair auto-mode-alist))) - - (dolist (path custom-el-files) - (when (file-exists-p path) - (load path))) - - (dolist (mode paredit-modes :done) - (let ((mode-hook (intern (concat (symbol-name mode) "-hook"))) - (mode-map (intern (concat (symbol-name mode) "-map")))) - (add-hook mode-hook 'paredit-mode) - (add-hook mode-hook (lambda () - (rainbow-delimiters-mode 1))) - (spacemacs/set-leader-keys-for-major-mode mode - "k" 'paredit-copy-as-kill - "." 'spacemacs/jump-to-definition - "," 'cider-pop-back))) - - (spacemacs/set-leader-keys-for-major-mode 'clojure-mode - "l" 'clojure-align - "eF" 'euandreh/clear-repl-and-eval - "tt" 'euandreh/save-and-run-focused-test - "eb" 'euandreh/save-and-eval-buffer) - - ;; From the documentation: - ;; https://cider.readthedocs.io/en/latest/code_completion/ - (global-set-key (kbd "TAB") #'company-indent-or-complete-common) - (add-hook 'cider-repl-mode-hook #'cider-company-enable-fuzzy-completion) - (add-hook 'cider-mode-hook #'cider-company-enable-fuzzy-completion) - - (dolist (keybinding custom-keybindings) - (global-set-key (kbd (car keybinding)) (cdr keybinding))) - - (org-babel-do-load-languages - 'org-babel-load-languages - '((elixir . t) - (http . t) - (restclient . t) - (shell . t) - (clojure . t) - (ruby . t) - (python . t) - (perl . t) - (js . t) - (C . t) - (emacs-lisp . t) - (rust . t))) - - (setq standard-indent 2 - git-link-use-commit t - vc-follow-symlinks t - default-truncate-lines nil - ispell-program-name "aspell" - - ;; Indentation - typescript-indent-level 2 - js2-basic-offset 2 - js-indent-level 2 - css-indent-offset 2 - web-mode-markup-indent-offset 2 - web-mode-css-indent-offset 2 - web-mode-code-indent-offset 2 - web-mode-attr-indent-offset 2 - perl6-indent-offset 2 - cperl-indent-level 2 - c-basic-offset 2 - sh-basic-offset 2 - sh-indentation 2 - smie-indent-basic 2 - perl-indent-level 2 - - ;; Clojure - cljr-warn-on-eval nil - cljr-eagerly-build-asts-on-startup nil - cljr-assume-language-context "clj" - cider-repl-display-help-banner nil - - ;; Common Lisp - inferior-lisp-program "sbcl" - common-lisp-hyperspec-root (concat "file:" (expand-file-name "~/annex/docs/programming/hyperspec/HyperSpec/")) - - ;; Persistent undo - undo-tree-auto-save-history t - undo-tree-history-directory-alist `(("." . ,(concat spacemacs-cache-directory "undo"))) - - ;; org-mode - ;; Taken from: - ;; - http://cachestocaches.com/2016/9/my-workflow-org-agenda - ;; - http://doc.norang.ca/org-mode.html - - - org-log-done 'time - org-log-into-drawer nil - org-log-state-notes-insert-after-drawers nil - - - org-todo-keywords '((sequence "TODO(t!)" "NEXT(n!)" "WAITING(w!)" "MEETING(m!)" "INACTIVE(i!)" "DOING(d!)" "|" "CANCELLED(c@)" "DONE(x@)")) - org-todo-keyword-faces '(("TODO" . (:foreground "brown" :weight bold)) - - ("DOING" . (:foreground "yellow" :weight bold)) - ("WAITING" . (:foreground "white" :weight bold)) - ("MEETING" . (:foreground "white" :weight bold)) - - ("INACTIVE" . (:foreground "orange" :weight bold)) - - ("NEXT" . (:foreground "red" :weight bold)) - - ("CANCELLED" . (:foreground "green" :weight bold)) - ("DONE" . (:foreground "green" :weight bold))) - org-agenda-files (list "~/annex/txt/Agenda.org") - org-columns-default-format "%50ITEM(Task) %10CLOCKSUM %16TIMESTAMP_IA" - - org-capture-templates '(("c" "Dump" entry (file "~/annex/txt/Dump.org") " ") - ("d" "Diary" entry (file+datetree "~/annex/txt/Diary.org") "* %?\n%U\n" :clock-in t :clock-resume t) - ("D" "Decision" entry (file+datetree "~/annex/txt/Decisions.org") "* %?\n%U\n" :clock-in t :clock-resume t) - ("t" "Terapia" entry (file+datetree "~/annex/txt/Terapia.org") "* %?\n%U\n" :clock-in t :clock-resume t) - ("S" "Dream" entry (file+datetree "~/annex/txt/Dreams.org") "* %?\n%U\n" :clock-in t :clock-resume t) - ("m" "Meeting notes" entry (file+datetree "~/annex/txt/Meeting Notes.org") "* MEETING with %?\n")) - - ;; Make splitting vertically more likely on smaller (velhinho) screens - split-width-threshold 120 - - ledger-reports '(("cleared-balance" "%(binary) -f %(ledger-file) balance Assets Liabilities --cleared")) - - browse-url-browser-function 'browse-url-default-browser ;; 'eww-browse-url - - auth-source-debug t - - magit-diff-refine-hunk t - magit-published-branches '() - - helm-ag-base-command "ag --nocolor --nogroup --hidden" - - epa-replace-original-text t) - - (set-language-environment "UTF-8") - (set-default-coding-systems 'utf-8) - - (setq org-export-allow-bind-keywords t) - (setq org-html-postamble t) - - - (with-eval-after-load 'geiser-guile - (add-to-list 'geiser-guile-load-path "~/dev/guix/guix")) - (with-eval-after-load 'yasnippet - (add-to-list 'yas-snippet-dirs "~/dev/guix/guix/etc/snippets")) - (setq geiser-active-implementations '(guile)) - (put 't:test-equal 'scheme-indent-function 1) - (put 't:test-assert 'scheme-indent-function 1) - (put 'srfi-9:define-record-type 'scheme-indent-function 1) - (put 'srfi-9-gnu:set-record-type-printer! 'scheme-indent-function 1) - (put 'with-claps 'scheme-indent-function 2) - (put 'when-let 'scheme-indent-function 1) - (put 'if-let 'scheme-indent-function 1) - (put 'if 'scheme-indent-function 1) - - (with-eval-after-load 'info-lookup-mode - (turn-off-evil-mode)) - - (with-eval-after-load 'git-link - (add-to-list 'git-link-remote-alist '("git.savannah.gnu.org" git-link-cgit)) - (add-to-list 'git-link-remote-alist '("git.euandreh.xyz" git-link-cgit))) - - t) - -(defun dotspacemacs/emacs-custom-settings () - "Emacs custom settings. -This is an auto-generated function, do not modify its content directly, use -Emacs customize menu instead. -This function is called at the very end of Spacemacs initialization." -(custom-set-variables - ;; custom-set-variables was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - '(package-selected-packages - '(po-mode lsp-dart dap-mode posframe flutter dart-server dart-mode tern ron-mode phpunit phpcbf php-extras php-auto-yasnippets geben drupal-mode counsel swiper ivy company-phpactor phpactor composer php-runtime company-php ac-php-core xcscope php-mode circe oauth2 erc-yt erc-view-log erc-social-graph erc-image erc-hl-nicks websocket emojify emoji-cheat-sheet-plus company-emoji direnv anaconda-mode nix-sandbox lsp-ui lsp-treemacs helm-lsp cquery company-lsp ccls lsp-python-ms python epc ctable concurrent deferred blacken pythonic helm-gtags godoctor go-tag go-rename go-impl go-guru go-gen-test go-fill-struct go-eldoc ggtags flycheck-gometalinter flycheck-golangci-lint counsel-gtags company-go go-mode company-terraform terraform-mode hcl-mode graphviz-dot-mode ace-jump-mode noflet treemacs-projectile treemacs-evil treemacs ht pfuture yasnippet-snippets yapfify yaml-mode xterm-color ws-butler writeroom-mode winum which-key web-mode web-beautify volatile-highlights vi-tilde-fringe uuidgen use-package unicode-fonts unfill toml-mode toc-org tide tagedit systemd symon swift-mode string-inflection sql-indent spaceline-all-the-icons smeargle slime-company slim-mode shell-pop selectric-mode seeing-is-believing scss-mode sass-mode rvm ruby-tools ruby-test-mode ruby-refactor ruby-hash-syntax rubocop rspec-mode robe rjsx-mode restclient-helm restart-emacs rbenv rake rainbow-delimiters racer pyvenv pytest pyenv-mode py-isort pug-mode psci psc-ide prettier-js powershell popwin pippel pipenv pip-requirements persp-mode pdf-tools password-generator paradox ox-reveal overseer orgit org-projectile org-present org-pomodoro org-mime org-download org-bullets org-brain open-junk-file ob-rust ob-restclient ob-http ob-elixir nov nix-mode neotree nameless mwim multi-term move-text mmm-mode minitest markdown-toc magit-svn magit-gitflow lorem-ipsum livid-mode live-py-mode link-hint json-navigator js2-refactor js-doc jinja2-mode interleave insert-shebang indent-guide importmagic impatient-mode hungry-delete hlint-refactor hl-todo hindent highlight-parentheses highlight-numbers highlight-indentation helm-xref helm-themes helm-swoop helm-rtags helm-pydoc helm-purpose helm-projectile helm-org-rifle helm-notmuch helm-nixos-options helm-mode-manager helm-make helm-hoogle helm-gitignore helm-git-grep helm-flx helm-descbinds helm-css-scss helm-company helm-c-yasnippet helm-ag haskell-snippets google-translate google-c-style golden-ratio gnuplot gitignore-templates gitconfig-mode gitattributes-mode git-timemachine git-messenger git-link git-gutter-fringe git-gutter-fringe+ gh-md geiser fuzzy font-lock+ flyspell-correct-helm flycheck-rust flycheck-rtags flycheck-pos-tip flycheck-perl6 flycheck-mix flycheck-ledger flycheck-haskell flycheck-elm flycheck-credo flycheck-bashate flx-ido fish-mode fireplace fill-column-indicator fancy-battery eyebrowse expand-region evil-visualstar evil-visual-mark-mode evil-unimpaired evil-tutor evil-surround evil-org evil-numbers evil-nerd-commenter evil-matchit evil-magit evil-lisp-state evil-lion evil-ledger evil-indent-plus evil-iedit-state evil-goggles evil-exchange evil-escape evil-ediff evil-cleverparens evil-args evil-anzu eshell-z eshell-prompt-extras esh-help erlang emmet-mode emidje elm-test-runner elm-mode elisp-slime-nav editorconfig dumb-jump dotenv-mode doom-modeline dockerfile-mode docker disaster diminish diff-hl define-word debbugs cython-mode csv-mode counsel-projectile company-web company-tern company-statistics company-shell company-rtags company-restclient company-plsense company-nixos-options company-lua company-ghci company-cabal company-c-headers company-auctex company-ansible company-anaconda common-lisp-snippets column-enforce-mode cmm-mode clojure-snippets clojure-cheatsheet clj-refactor clean-aindent-mode clang-format cider-eval-sexp-fu chruby centered-cursor-mode cargo bundler browse-at-remote auto-yasnippet auto-highlight-symbol auto-dictionary auto-compile auctex-latexmk ansible-doc ansible alchemist aggressive-indent adoc-mode ace-window ace-link ace-jump-helm-line ac-ispell)) - '(safe-local-variable-values - '((eval add-hook 'before-save-hook 'time-stamp) - (javascript-backend . tide) - (go-backend . go-mode) - (go-backend . lsp) - (eval let - ((root-dir-unexpanded - (locate-dominating-file default-directory ".dir-locals.el"))) - (when root-dir-unexpanded - (let* - ((root-dir - (expand-file-name root-dir-unexpanded)) - (root-dir* - (directory-file-name root-dir))) - (unless - (boundp 'geiser-guile-load-path) - (defvar geiser-guile-load-path 'nil)) - (make-local-variable 'geiser-guile-load-path) - (require 'cl-lib) - (cl-pushnew root-dir* geiser-guile-load-path :test #'string-equal)))) - (eval setq-local guix-directory - (locate-dominating-file default-directory ".dir-locals.el")) - (eval let* - ((root-dir - (expand-file-name - (locate-dominating-file default-directory ".dir-locals.el"))) - (root-dir* - (directory-file-name root-dir))) - (unless - (boundp 'geiser-guile-load-path) - (defvar geiser-guile-load-path 'nil)) - (make-local-variable 'geiser-guile-load-path) - (require 'cl-lib) - (cl-pushnew root-dir* geiser-guile-load-path :test #'string-equal)) - (eval setq guix-directory - (locate-dominating-file default-directory ".dir-locals.el")) - (eval c-set-offset 'inlambda 0) - (eval c-set-offset 'access-label '-) - (eval c-set-offset 'substatement-open 0) - (eval c-set-offset 'arglist-cont-nonempty '+) - (eval c-set-offset 'arglist-cont 0) - (eval c-set-offset 'arglist-intro '+) - (eval c-set-offset 'inline-open 0) - (eval c-set-offset 'defun-open 0) - (eval c-set-offset 'innamespace 0) - (indicate-empty-lines . t) - (c-block-comment-prefix . " ") - (eval progn - (pp-buffer) - (indent-buffer)) - (eval modify-syntax-entry 43 "'") - (eval modify-syntax-entry 36 "'") - (eval modify-syntax-entry 126 "'") - (typescript-backend . tide) - (typescript-backend . lsp) - (javascript-backend . tern) - (javascript-backend . lsp) - (elixir-enable-compilation-checking . t) - (elixir-enable-compilation-checking)))) -(custom-set-faces - ;; custom-set-faces was added by Custom. - ;; If you edit it by hand, you could mess it up, so be careful. - ;; Your init file should contain only one such instance. - ;; If there is more than one, they won't work right. - ) -) -- cgit v1.2.3 From f654ab754498ea4086f0425bf731e28b9e2c2d1d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 22 Mar 2021 12:50:42 -0300 Subject: configuration.nix: Remove extraHosts configuration As I stick with Firefox, its adblocker serves in place of hosts blocking. --- configuration.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/configuration.nix b/configuration.nix index d39ea97..1add95d 100644 --- a/configuration.nix +++ b/configuration.nix @@ -78,11 +78,6 @@ in { networking = { hostName = "usurpador-nixos"; networkmanager.enable = true; - extraHosts = builtins.readFile (builtins.fetchurl { - url = - "https://raw.githubusercontent.com/StevenBlack/hosts/885d870134093060d15e3a295c4d5a8efb84e20e/alternates/fakenews-gambling-porn-social/hosts"; - sha256 = "0mv61ki66jrzyzd8l7kf3xhfzk7z93c2rb76bxr35jg78wp252q0"; - }); }; system.autoUpgrade = { -- cgit v1.2.3 From 783eab0e9c42ce88a787cc61c6eb893f8ceb9f19 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 23 Mar 2021 02:44:30 -0300 Subject: fake-symlinks.sh: Add libpds --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 5847c7f..1be9487 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -368,7 +368,8 @@ ln_all ln_makefile_only_guix_project servers \ cl-fun \ git-permalink \ lisp-cli \ - curth + curth \ + libpds ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From dd61578f9e046f2f17ad31d165f58ebf4e46dcff Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 23 Mar 2021 08:11:15 -0300 Subject: Update path to repos in ~/dev/others/ --- cron/backup.sh | 2 +- sh/env.sh | 4 ++-- sh/fzf.sh | 2 +- sh/symlinks.sh | 2 +- xmonad/scripts/dmenu-pass.sh | 2 +- 5 files changed, 6 insertions(+), 6 deletions(-) diff --git a/cron/backup.sh b/cron/backup.sh index 588a6b8..12827dd 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -30,7 +30,7 @@ borg create \ # borg prune --keep-last 60 --verbose "$R:desktop-borg" -cd ~/dev/libre/others/borg/ +cd ~/dev/others/borg/ git add . git commit -m 'JOB: automated update of borg config files after backup.sh' git push origin master diff --git a/sh/env.sh b/sh/env.sh index dd0b4b6..a56b570 100644 --- a/sh/env.sh +++ b/sh/env.sh @@ -6,7 +6,7 @@ export BROWSER=firefox export INPUTRC=~/.inputrc export BORG_REMOTE_PATH='borg1' export GOPATH="$HOME/dev/go" -export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" +export PASSWORD_STORE_DIR="$HOME/dev/others/password-store" export RLWRAP_HOME="$HOME/.cache/rlwrap" export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror -fPIC -g' export CC=gcc @@ -26,4 +26,4 @@ export NIX_BUILD_CORES=0 export GUIX_PROFILE="$HOME/.guix-profile" export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$DOTFILES/cron:$DOTFILES/cron/generated:$HOME/annex/bin/scripts:$PATH" +PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$DOTFILES/cron:$DOTFILES/cron/generated:$HOME/annex/bin/scripts:$PATH" diff --git a/sh/fzf.sh b/sh/fzf.sh index 7c0d8e5..5b92915 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -52,7 +52,7 @@ tmp/scratch.txt annex/bin/misc/git/mrconfig.ini annex/bin/misc/dependencies.dot archive/vid/playlist.txt -dev/libre/others/dinheiros/money.ledger +dev/others/dinheiros/money.ledger ' v() { diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 36f74cb..4af31f7 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -8,7 +8,7 @@ upsert_dir_symlink() { } } -upsert_dir_symlink "$HOME/dev/libre/others/borg/config" ~/.config/borg +upsert_dir_symlink "$HOME/dev/others/borg/config" ~/.config/borg ln -fs "$DOTFILES/sh/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/sh/bash_profile.sh" ~/.bash_profile diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh index 5e941dd..6edd135 100755 --- a/xmonad/scripts/dmenu-pass.sh +++ b/xmonad/scripts/dmenu-pass.sh @@ -1,7 +1,7 @@ #!/bin/sh set -eu -export PASSWORD_STORE_DIR="$HOME/dev/libre/others/password-store" +export PASSWORD_STORE_DIR="$HOME/dev/others/password-store" choice="$(find "$PASSWORD_STORE_DIR" -type f | \ grep -Ev '(.git|.gpg-id)' | \ -- cgit v1.2.3 From 210f06cead3f72fe9e42933f272406031a80875f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 23 Mar 2021 10:40:15 -0300 Subject: aux/ci/ci-build.sh: Run build target before tests, so we have HTML files when tests fail --- aux/ci/ci-build.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 45e4075..21788f4 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -25,12 +25,6 @@ EOF git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" - cd - - if [ -f ./aux/ci/report.sh ]; then - sh aux/ci/report.sh "$PACKAGE" - rsync -a public/ "/srv/http/$PACKAGE/" - fi - printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" } trap finish EXIT @@ -50,7 +44,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean dev-check public' + $RUNNER 'make clean public dev-check' rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From c2d949e59564bedfcaeb132ac55d9fc9ebf2e94d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 23 Mar 2021 10:46:28 -0300 Subject: aux/workflow/public.sh: Mark as executable --- aux/workflow/public.sh | 0 1 file changed, 0 insertions(+), 0 deletions(-) mode change 100644 => 100755 aux/workflow/public.sh diff --git a/aux/workflow/public.sh b/aux/workflow/public.sh old mode 100644 new mode 100755 -- cgit v1.2.3 From 0a855b0b2c6d8d752ecb2cb11a144b8dde307d91 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 23 Mar 2021 10:54:19 -0300 Subject: fake-symlinks: aux/ci/ci-build.sh: Run build target before tests, so we have HTML files when tests fail --- sh/templates/aux/ci/ci-build.sh | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 45e4075..21788f4 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -25,12 +25,6 @@ EOF git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" git notes append -m "$NOTE" - cd - - if [ -f ./aux/ci/report.sh ]; then - sh aux/ci/report.sh "$PACKAGE" - rsync -a public/ "/srv/http/$PACKAGE/" - fi - printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" } trap finish EXIT @@ -50,7 +44,7 @@ EOF RUNNER='sh -c' fi - $RUNNER 'make clean dev-check public' + $RUNNER 'make clean public dev-check' rsync -a public/ "/srv/http/$PACKAGE/" --delete } 2>&1 | tee "$LOGFILE" -- cgit v1.2.3 From 5b2d6f91aee16b55586c09d46521b02ff167b045 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 23 Mar 2021 10:54:34 -0300 Subject: sh/aliases.sh: Add mk alias --- sh/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/aliases.sh b/sh/aliases.sh index 9f08cbd..19aa443 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -46,3 +46,4 @@ alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp alias :x='echo "Already out of vi XD"' alias :w='echo "Not inside vi!" && false' alias sudo='echo "did you mean \"doas\""? && false' +alias mk='make clean public dev-check' -- cgit v1.2.3 From 891f679694c471cc50f92e410167d1f13f62b87a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 Jun 2021 13:39:55 -0300 Subject: xmonad/xmobar.hs: Update name of the wireless interface card --- xmonad/xmobar.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index 2107ed6..b9e6cd2 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -6,7 +6,7 @@ Config { , Run Swap [] 30 , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10 , Run DiskU [("/", "/")] [] 600 - , Run Wireless "wlp59s0" [] 100 + , Run Wireless "wlp0s20f3" [] 100 , Run Volume "default" "Master" [] 10 , Run Battery [ "-t", ": % - ", @@ -22,5 +22,5 @@ Config { , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notifications.sh" "notifications" , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notmuch.sh" "notmuch" ] - , template = " %date% | %default:Master%| %mpris% } { %notifications% | %notmuch% | %wlp59s0wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " + , template = " %date% | %default:Master%| %mpris% } { %notifications% | %notmuch% | %wlp0s20f3wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From 58243f8fc5601104222bd76b299f1cea0b7cd1c0 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 Jun 2021 13:40:23 -0300 Subject: gpg/sshcontrol: Update GPG SSH key --- gpg/sshcontrol | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gpg/sshcontrol b/gpg/sshcontrol index 2328461..1ae03ed 100644 --- a/gpg/sshcontrol +++ b/gpg/sshcontrol @@ -1 +1 @@ -F861365DDF2313683DFEFA6DB2F05BBF9D2960EC +750154E135FD7B11FDDF0107CC0904F92EBD2AE4 -- cgit v1.2.3 From 3f88b2fd277673f605fc4b8ad0d5a01247cf786a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 Jun 2021 13:40:48 -0300 Subject: sh/aliases.sh: Add alias for "mail" command --- sh/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/aliases.sh b/sh/aliases.sh index 19aa443..69499a5 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -47,3 +47,4 @@ alias :x='echo "Already out of vi XD"' alias :w='echo "Not inside vi!" && false' alias sudo='echo "did you mean \"doas\""? && false' alias mk='make clean public dev-check' +alias mail='mail -aFrom:eu@euandre.org' -- cgit v1.2.3 From e17f283299693b506c835e4a638963813c316070 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 Jun 2021 13:41:15 -0300 Subject: sh/bash-config.sh: Add completion for "doas" command --- sh/bash-config.sh | 2 ++ 1 file changed, 2 insertions(+) diff --git a/sh/bash-config.sh b/sh/bash-config.sh index df3f236..416f5e8 100644 --- a/sh/bash-config.sh +++ b/sh/bash-config.sh @@ -54,3 +54,5 @@ PROMPT_COMMAND='history -a' bind -x '"\e\C-l": c' set -h + +complete -cf doas -- cgit v1.2.3 From 384074a7bc3f7df5b5b39ada3a41cbfcf0bef2ec Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 5 Jun 2021 13:41:48 -0300 Subject: sh/symlinks.sh: Symlink to ssh.conf file --- sh/symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 4af31f7..34cfe2e 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -33,6 +33,7 @@ mkdir -p ~/.gnupg ln -fs "$DOTFILES/gpg/gpg.conf" ~/.gnupg/gpg.conf ln -fs "$DOTFILES/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf ln -fs "$DOTFILES/gpg/sshcontrol" ~/.gnupg/sshcontrol +ln -fs "$DOTFILES/../servers/ssh.conf" ~/.ssh/config ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig mkdir -p ~/.newsboat -- cgit v1.2.3 From 9e0e01c58eb77bfab4a920a43f64755ef911de3c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Jun 2021 15:49:44 -0300 Subject: Revamp cron/backup.sh Now instead of doing backups of specific hand-picked folders, I'm doing backups of *everything* under ~/, with only 2 folders excluded: 1. ~/.cache/ - it contains cache data for apps, builds, etc. 2. ~/Downloads/ - it would generate too much churn to include it for now. I've also now included the "borg prune" command. Where it was previously commented, I chose a conservative number to it. --- cron/backup.sh | 46 ++++++++++++++++++++++++---------------------- 1 file changed, 24 insertions(+), 22 deletions(-) diff --git a/cron/backup.sh b/cron/backup.sh index 12827dd..5786799 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -1,9 +1,15 @@ #!/bin/sh set -eux +LABEL="${1:-job}" + # shellcheck source=/dev/null . "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" + +set +x BORG_PASSPHRASE="$(pass show Borg)" +set -x + export BORG_PASSPHRASE R='16686@ch-s010.rsync.net' export BORG_REMOTE_PATH='borg1' @@ -11,26 +17,22 @@ export BORG_REMOTE_PATH='borg1' # env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' # borg init -e repokey-blake2 $R:desktop-borg -borg create \ - --exclude ~/mbsync/.notmuch/ \ - --exclude ~/gPodder/Downloads \ - --verbose \ - --stats \ - --progress \ - --compression lzma,6 \ - "$R:desktop-borg::{hostname}-{now}-job" \ - ~/Sync/ \ - ~/BigSync/ \ - ~/mbsync/ \ - ~/archive/ \ - ~/gPodder/ \ - ~/.local/share/buku/ \ - ~/dev/libre/website/ - # add folders to be backed up here - -# borg prune --keep-last 60 --verbose "$R:desktop-borg" +# What about the ~/Downloads folder? +echo borg create \ + --exclude ~/.cache/ \ + --exclude ~/Downloads/ \ + --verbose \ + --stats \ + --progress \ + --compression lzma,9 \ + "$R:desktop-borg::{hostname}-{now}-$LABEL" \ + ~/ -cd ~/dev/others/borg/ -git add . -git commit -m 'JOB: automated update of borg config files after backup.sh' -git push origin master +borg prune \ + --verbose \ + --list \ + --keep-within=6m \ + --keep-weekly=52 \ + --keep-monthly=24 \ + --save-space \ + $R:desktop-borg -- cgit v1.2.3 From 042cf1c2b2b08173e3acf0c5b97175d696fff2b1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Mon, 7 Jun 2021 23:19:56 -0300 Subject: tmux.conf: Add commands to swap tmux windows --- tmux.conf | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/tmux.conf b/tmux.conf index fc1d58a..377984e 100644 --- a/tmux.conf +++ b/tmux.conf @@ -27,6 +27,13 @@ bind-key -n M-J resize-pane -D 5 bind-key -n M-K resize-pane -U 5 bind-key -n M-L resize-pane -R 5 +# Reorder windows +bind-key -n C-S-Left swap-window -t -1\; select-window -t -1 +bind-key -n C-S-Right swap-window -t +1\; select-window -t +1 +# +# To change the number of a window, use: PREFIX-., and pick a new unused number +# + # "C-x m" to actually clear the pane history bind-key m send-keys -R \; clear-history -- cgit v1.2.3 From 77d56d89fbb8a5bccb1e50f544e6be79171a664a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:43:38 -0300 Subject: exrc.conf: Enable showmatch --- exrc.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/exrc.conf b/exrc.conf index f369a38..d737a1a 100644 --- a/exrc.conf +++ b/exrc.conf @@ -4,3 +4,4 @@ set tabstop=2 set shiftwidth=2 set ruler set showmode +set showmatch -- cgit v1.2.3 From 2685289505cebefb811107c112c8fea87d22d123 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:44:09 -0300 Subject: sh/util.sh: Add ut(), the tabbing variant of t() --- sh/util.sh | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/sh/util.sh b/sh/util.sh index bb63620..89199c1 100644 --- a/sh/util.sh +++ b/sh/util.sh @@ -6,7 +6,11 @@ genpassword() { } t() { - expand "$1" -t2 | sponge "$1" + expand "$1" -t2 | sponge "$1" +} + +ut() { + unexpand "$1" -t2 | sponge "$1" } gvi() { -- cgit v1.2.3 From 7871cd4f6ff6031aeafb7b3c920915fac5d284be Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:46:41 -0300 Subject: xmonad/xmonad.hs: Put escrotum screeshots in ~/Downloads/Screenshots/ --- xmonad/xmonad.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 6410b05..1ca3a40 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -59,9 +59,9 @@ myKeyPBindings = , ("C-M-l", spawn "dm-tool switch-to-greeter") -- print whole screen - , ("M-", spawn "escrotum ~/Bureau/%Y-%m-%d-%T-screenshot.png") + , ("M-", spawn "escrotum ~/Downloads/Screenshots/%Y-%m-%d-%T-screenshot.png") -- print screen of clicked window - , ("C-M-", spawn "escrotum ~/Bureau/%Y-%m-%d-%T-screenshot.png -s") + , ("C-M-", spawn "escrotum ~/Downloads/Screenshots/%Y-%m-%d-%T-screenshot.png -s") -- xrandr single monitor setup , ("C-M-1", spawn "~/dev/libre/dotfiles/xmonad/scripts/single-monitor.sh") -- cgit v1.2.3 From e454dfad1fa901156eb09a57dc99c4097a684dfa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:48:58 -0300 Subject: Update files under aux/ --- aux/assert-shellcheck.sh | 4 +-- aux/ci/ci-build.sh | 74 ++++++++++++++++++++------------------- aux/ci/git-post-receive.sh | 10 +++--- aux/ci/git-pre-push.sh | 14 ++++---- aux/ci/report.sh | 69 ++++++++++++++++++------------------ aux/guix/pinned-channels.scm | 2 +- aux/guix/with-container.sh | 12 +++---- aux/tld.txt | 1 + aux/workflow/README.sh | 43 ----------------------- aux/workflow/TODOs.sh | 39 ++++++++++++--------- aux/workflow/assert-changelog.sh | 14 ++++---- aux/workflow/assert-readme.sh | 59 +++++++++++++++++++++++++++++++ aux/workflow/commonmark.sh | 21 ++++++----- aux/workflow/dist.sh | 12 +++---- aux/workflow/favicon.html | 1 + aux/workflow/favicon.png | Bin 0 -> 2372 bytes aux/workflow/favicon.svg | 62 ++++++++++++++++++++++++++++++++ aux/workflow/preamble.md | 2 +- aux/workflow/public.sh | 6 ++-- aux/workflow/sign-tarballs.sh | 18 +++++----- 20 files changed, 279 insertions(+), 184 deletions(-) create mode 100644 aux/tld.txt delete mode 100755 aux/workflow/README.sh create mode 100755 aux/workflow/assert-readme.sh create mode 100644 aux/workflow/favicon.html create mode 100644 aux/workflow/favicon.png create mode 100644 aux/workflow/favicon.svg diff --git a/aux/assert-shellcheck.sh b/aux/assert-shellcheck.sh index fcbb1c7..cc01f3a 100755 --- a/aux/assert-shellcheck.sh +++ b/aux/assert-shellcheck.sh @@ -2,5 +2,5 @@ set -eux git ls-files | \ - xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ - xargs shellcheck + xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ + xargs shellcheck diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh index 21788f4..b6769a9 100755 --- a/aux/ci/ci-build.sh +++ b/aux/ci/ci-build.sh @@ -8,43 +8,45 @@ FILENAME="$(date -Is)-$SHA.log" LOGFILE="$LOGS_DIR/$FILENAME" { - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>> exit status was %s\n" "$STATUS" + echo "Finishing CI job at: $(date -Is)" + cd - + NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" - } - trap finish EXIT - - unset GIT_DIR - REMOTE="$PWD" - cd "$(mktemp -d)" - git clone "$REMOTE" . - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - git fetch origin refs/notes/*:refs/notes/* - git annex get ||: - - if [ -f aux/guix/with-container.sh ]; then - RUNNER='./aux/guix/with-container.sh' - else - RUNNER='sh -c' - fi - - $RUNNER 'make clean public dev-check' - - rsync -a public/ "/srv/http/$PACKAGE/" --delete + git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME" + git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" + git notes append -m "$NOTE" + + cd - + sh aux/ci/report.sh "$PACKAGE" + rsync -a public/ "/srv/http/$PACKAGE/" --delete + + printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" + } + trap finish EXIT + + unset GIT_DIR + REMOTE="$PWD" + cd "$(mktemp -d)" + git clone "$REMOTE" . + git config --global user.email git@euandre.org + git config --global user.name 'EuAndreh CI' + git fetch origin refs/notes/*:refs/notes/* + git annex get ||: + + if [ -f aux/guix/with-container.sh ]; then + RUNNER='./aux/guix/with-container.sh' + else + RUNNER='sh -c' + fi + + $RUNNER 'make clean public dev-check' } 2>&1 | tee "$LOGFILE" diff --git a/aux/ci/git-post-receive.sh b/aux/ci/git-post-receive.sh index f8986ed..ee8075f 100755 --- a/aux/ci/git-post-receive.sh +++ b/aux/ci/git-post-receive.sh @@ -2,11 +2,11 @@ set -eu for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do - opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" - if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then - printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" - exit 0 - fi + opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" + if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then + printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" + exit 0 + fi done PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix diff --git a/aux/ci/git-pre-push.sh b/aux/ci/git-pre-push.sh index 5546cb2..e73b9b8 100755 --- a/aux/ci/git-pre-push.sh +++ b/aux/ci/git-pre-push.sh @@ -1,6 +1,8 @@ #!/bin/sh set -eux +TLD="$(cat aux/tld.txt)" + PACKAGE="$(basename "$PWD")" LOGS_DIR="/opt/ci/$PACKAGE/logs" REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" @@ -8,12 +10,12 @@ REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" if [ -f description ] then - cp description "$DESCRIPTION" + cp description "$DESCRIPTION" else - git config euandreh.description > "$DESCRIPTION" + git config euandreh.description > "$DESCRIPTION" fi -scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" -ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" -scp aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" -scp aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" +scp "$DESCRIPTION" "$TLD:$REMOTE_GIT_DIR/description" +ssh "$TLD" mkdir -p "$LOGS_DIR" +scp aux/ci/ci-build.sh "$TLD:$(dirname "$LOGS_DIR")/ci-build.sh" +scp aux/ci/git-post-receive.sh "$TLD:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/aux/ci/report.sh b/aux/ci/report.sh index b82c061..65d3335 100755 --- a/aux/ci/report.sh +++ b/aux/ci/report.sh @@ -14,55 +14,56 @@ chmod 644 "$OUT" git fetch origin refs/notes/*:refs/notes/* ||: for c in $(git notes list | cut -d\ -f2); do - DATA="$(git notes --ref=refs/notes/ci-data show "$c")" - FILENAME="$(echo "$DATA" | cut -d\ -f2)" - echo "$DATA" > "public/ci-data/$FILENAME" - git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" + DATA="$(git notes --ref=refs/notes/ci-data show "$c")" + FILENAME="$(echo "$DATA" | cut -d\ -f2)" + echo "$DATA" > "public/ci-data/$FILENAME" + git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" done cat <> "$OUT" - - - + + + + - - - -

    - CI logs for $PROJECT_UC -

    -
      + + + +

      + CI logs for $PROJECT_UC +

      +
        EOF for f in $(find public/ci-data/ -type f | LANG=C.UTF-8 sort -r); do - DATA="$(cat "$f")" - STATUS="$(echo "$DATA" | cut -d\ -f1)" - FILENAME="$(echo "$DATA" | cut -d\ -f2)" + DATA="$(cat "$f")" + STATUS="$(echo "$DATA" | cut -d\ -f1)" + FILENAME="$(echo "$DATA" | cut -d\ -f2)" - if [ "$STATUS" = 0 ]; then - STATUS_MARKER="$PASS" - else - STATUS_MARKER="$FAIL" - fi + if [ "$STATUS" = 0 ]; then + STATUS_MARKER="$PASS" + else + STATUS_MARKER="$FAIL" + fi - cat <> "$OUT" -
      • - - $STATUS_MARKER
        $FILENAME
        -
        -
      • + cat <> "$OUT" +
      • + + $STATUS_MARKER
        $FILENAME
        +
        +
      • EOF done cat <> "$OUT" -
      - +
    + EOF diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm index b026813..504406f 100644 --- a/aux/guix/pinned-channels.scm +++ b/aux/guix/pinned-channels.scm @@ -1,7 +1,7 @@ (cons* (channel (name 'xyz-euandreh) - (url "git://git.euandreh.xyz/package-repository") + (url "git://euandreh.xyz/package-repository") (branch "main") (introduction (make-channel-introduction diff --git a/aux/guix/with-container.sh b/aux/guix/with-container.sh index 13b6cd3..b521c82 100755 --- a/aux/guix/with-container.sh +++ b/aux/guix/with-container.sh @@ -2,12 +2,12 @@ set -eux if [ -z "${1:-}" ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm elif [ "$1" = '-p' ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C else - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" fi diff --git a/aux/tld.txt b/aux/tld.txt new file mode 100644 index 0000000..0cb8b8b --- /dev/null +++ b/aux/tld.txt @@ -0,0 +1 @@ +euandreh.xyz diff --git a/aux/workflow/README.sh b/aux/workflow/README.sh deleted file mode 100755 index aa5cbe6..0000000 --- a/aux/workflow/README.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -PROJECT="$2" -MAILING_LIST="$3" - -RELEASES_LIST="$(mktemp)" -for version in $(git tag | perl -e 'print reverse <>'); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" -done - -RELEASES="$(mktemp)" -if [ -s "$RELEASES_LIST" ]; then - printf '\n# Releases\n\n' >> "$RELEASES" - cat "$RELEASES_LIST" >> "$RELEASES" -fi - -LINKS="$(mktemp)" -cat < "$LINKS" - -# Links - -- [home page](https://$PROJECT.euandreh.xyz) -- [source code](https://git.euandreh.xyz/$PROJECT/) -- [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) -- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) -- [CI logs](https://$PROJECT.euandreh.xyz/ci.html) -- [CHANGELOG](https://$PROJECT.euandreh.xyz/CHANGELOG.html) -EOF - -cat "README.md" "$LINKS" "$RELEASES" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - README" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - > public/index.html diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh index 468b3a8..80059ee 100755 --- a/aux/workflow/TODOs.sh +++ b/aux/workflow/TODOs.sh @@ -6,25 +6,30 @@ mkdir -p public PROJECT_UC="$1" PROJECT="$2" MAILING_LIST="$3" +TLD="$(cat aux/tld.txt)" TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' -sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ - -e "s:@PROJECT@:$PROJECT:g" \ - -e "s:@MAILING_LIST@:$MAILING_LIST:g" < aux/workflow/preamble.md | \ - printf '%s\n\n%s' \ - "$(cat -)" \ - "$(perl -pe "$TODOS_REGEX" TODOs.md | \ - perl -pe "$TAGS_REGEX")" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - TODOs" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - -H aux/workflow/style.css \ - > public/TODOs.html +sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ + -e "s:@PROJECT@:$PROJECT:g" \ + -e "s:@MAILING_LIST@:$MAILING_LIST:g" \ + -e "s:@TLD@:$TLD:g" \ + < aux/workflow/preamble.md | \ + printf \ + '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | perl -pe "$TAGS_REGEX")" | \ + pandoc \ + --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + -H aux/workflow/favicon.html \ + -H aux/workflow/style.css \ + > public/TODOs.html diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh index d39f527..8e81f1f 100755 --- a/aux/workflow/assert-changelog.sh +++ b/aux/workflow/assert-changelog.sh @@ -4,11 +4,11 @@ set -eu PROJECT="$1" for VVERSION in $(git tag); do - VERSION="${VVERSION#v}" - DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" - CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" - if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 - exit 1 - fi + VERSION="${VVERSION#v}" + DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" + CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" + if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 + exit 1 + fi done diff --git a/aux/workflow/assert-readme.sh b/aux/workflow/assert-readme.sh new file mode 100755 index 0000000..cef75dd --- /dev/null +++ b/aux/workflow/assert-readme.sh @@ -0,0 +1,59 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT="$1" +MAILING_LIST="$2" +TLD="$(cat aux/tld.txt)" + +EXPECTED="$(mktemp)" +cat <> "$EXPECTED" + +For running the extra development-only checks, run: + +\`\`\`shell +$ make dev-check +\`\`\` + +and for generating the documentation HTML and website, run: + +\`\`\`shell +$ make public +\`\`\` + + +## Links + +- [home page](https://$TLD/$PROJECT/) +- [source code](https://git.euandreh.xyz/$PROJECT/) +- [bug tracking](https://$TLD/$PROJECT/TODOs.html) +- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) +- [CI logs](https://$TLD/$PROJECT/ci.html) +- [CHANGELOG](https://$TLD/$PROJECT/CHANGELOG.html) +EOF + +RELEASES_LIST="$(mktemp)" +for version in $(git tag | perl -e 'print reverse <>'); do + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" +done + +if [ -s "$RELEASES_LIST" ]; then + printf '\n\n## Releases\n\n' >> "$EXPECTED" + cat "$RELEASES_LIST" >> "$EXPECTED" +fi + +cat <> "$EXPECTED" + + +## License + +The code is licensed under [GNU Affero General Public License v3.0 or later][AGPL-3.0-or-later] (AGPL-3.0-or-later). + +[AGPL-3.0-or-later]: https://www.gnu.org/licenses/agpl-3.0.en.html +EOF + +if ! tail -n "$(wc -l < "$EXPECTED")" README.md | diff - "$EXPECTED"; then + echo 'Missing metadata at the end of README.md file' + exit 1 +fi diff --git a/aux/workflow/commonmark.sh b/aux/workflow/commonmark.sh index e9609c2..6016f51 100755 --- a/aux/workflow/commonmark.sh +++ b/aux/workflow/commonmark.sh @@ -5,13 +5,16 @@ mkdir -p public PROJECT_UC="$1" F="$2" +OUT="${3:-${F%.*}.html}" -pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - ${F%.*}" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - < "$F" > "public/${F%.*}.html" +pandoc \ + --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - ${F%.*}" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + -H aux/workflow/favicon.html \ + < "$F" > "public/$OUT" diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh index 0ae0ec4..45f8d7e 100755 --- a/aux/workflow/dist.sh +++ b/aux/workflow/dist.sh @@ -7,18 +7,18 @@ VVERSION="v$2" PROJECT="$3" if git show "$VVERSION" 1>/dev/null 2>/dev/null; then - echo "Version '$VVERSION' already exists." >&2 - exit 1 + echo "Version '$VVERSION' already exists." >&2 + exit 1 fi if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo "Date '$DATE' is not up-to-date." >&2 - exit 1 + echo "Date '$DATE' is not up-to-date." >&2 + exit 1 fi if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then - echo "Commit message isn't 'Release $VVERSION'." >&2 - exit 1 + echo "Commit message isn't 'Release $VVERSION'." >&2 + exit 1 fi sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" diff --git a/aux/workflow/favicon.html b/aux/workflow/favicon.html new file mode 100644 index 0000000..8f9327c --- /dev/null +++ b/aux/workflow/favicon.html @@ -0,0 +1 @@ + diff --git a/aux/workflow/favicon.png b/aux/workflow/favicon.png new file mode 100644 index 0000000..051fdf1 Binary files /dev/null and b/aux/workflow/favicon.png differ diff --git a/aux/workflow/favicon.svg b/aux/workflow/favicon.svg new file mode 100644 index 0000000..ce566b2 --- /dev/null +++ b/aux/workflow/favicon.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aux/workflow/preamble.md b/aux/workflow/preamble.md index 9fbbd2c..30efe0b 100644 --- a/aux/workflow/preamble.md +++ b/aux/workflow/preamble.md @@ -2,7 +2,7 @@ TODOs for @PROJECT_UC@. -See also [@PROJECT@.euandreh.xyz](https://@PROJECT@.euandreh.xyz/) and [CI logs](https://@PROJECT@.euandreh.xyz/ci.html). +See also [@TLD@/@PROJECT@/](https://@TLD@/@PROJECT@/) and [CI logs](https://@TLD@/@PROJECT@/ci.html). Register a new one at [~euandreh/@MAILING_LIST@@lists.sr.ht](mailto:~euandreh/@MAILING_LIST@@lists.sr.ht?subject=%5B@PROJECT@%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) diff --git a/aux/workflow/public.sh b/aux/workflow/public.sh index 4c90225..8ecb855 100755 --- a/aux/workflow/public.sh +++ b/aux/workflow/public.sh @@ -5,11 +5,13 @@ PROJECT_UC="$1" PROJECT="$2" MAILING_LIST="$3" -sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" -sh aux/workflow/README.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/commonmark.sh "$PROJECT" README.md index.html ||: if [ -f CHANGELOG.md ]; then sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md fi sh aux/ci/report.sh "$PROJECT" + +cp aux/workflow/favicon.* public/ diff --git a/aux/workflow/sign-tarballs.sh b/aux/workflow/sign-tarballs.sh index b88ff33..8de6ac4 100755 --- a/aux/workflow/sign-tarballs.sh +++ b/aux/workflow/sign-tarballs.sh @@ -5,13 +5,13 @@ PROJECT="$1" SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" for tag in $(git tag); do - COMMIT="$(git rev-list -n1 "$tag")" - if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then - echo "Adding missing signature to $tag" >&2 - git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( - git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | - gpg --output - --armor --detach-sign | - git hash-object -w --stdin - )" "$tag" - fi + COMMIT="$(git rev-list -n1 "$tag")" + if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then + echo "Adding missing signature to $tag" >&2 + git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( + git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | + gpg --output - --armor --detach-sign | + git hash-object -w --stdin + )" "$tag" + fi done -- cgit v1.2.3 From 5efbed6ceb5a23849e97fc283c4be45deb0de4c4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:50:26 -0300 Subject: configuration.nix: Add chromium package --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 1add95d..99325fd 100644 --- a/configuration.nix +++ b/configuration.nix @@ -30,7 +30,7 @@ let pub-crons.with-mail) ++ builtins.attrValues (builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons); privateConfiguration = import /etc/nixos/private-configuration.nix; - proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn skype ]; + proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn skype chromium ]; allowUnfree = builtins.length proprietaryPackages > 0; in { imports = [ # Include the results of the hardware scan. -- cgit v1.2.3 From d183386031853c71fd886fa138591f780e423bd5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:51:04 -0300 Subject: configuration.nix: Remove gpodder --- configuration.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/configuration.nix b/configuration.nix index 99325fd..980d247 100644 --- a/configuration.nix +++ b/configuration.nix @@ -116,10 +116,6 @@ in { enableDebugInfo = true; systemPackages = let - gpodder-with-youtube-dl = pkgs.gpodder.overrideAttrs (oldAttrs: { - propagatedBuildInputs = oldAttrs.propagatedBuildInputs - ++ [ pkgs.python3Packages.youtube-dl ]; - }); bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { postInstall = '' ln -s $out/bin/bmake $out/bin/make @@ -311,7 +307,6 @@ in { mutagen ## Candidates to be replaced by alternatives - gpodder-with-youtube-dl # podboat? transmission-gtk # https://github.com/btpd/btpd tdesktop # telegram -> gomuks ] ++ proprietaryPackages ++ nu-packages; -- cgit v1.2.3 From 8fe28df848c2690bd6765c57e4e6437e1067e139 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:51:42 -0300 Subject: configuration.nix: Update luks devices configuration for new laptop --- configuration.nix | 11 ++++------- 1 file changed, 4 insertions(+), 7 deletions(-) diff --git a/configuration.nix b/configuration.nix index 980d247..133a314 100644 --- a/configuration.nix +++ b/configuration.nix @@ -43,13 +43,10 @@ in { systemd-boot.enable = true; efi.canTouchEfiVariables = true; }; - initrd = { - luks.devices = { - root = { - name = "root"; - device = "/dev/nvme0n1p3"; - preLVM = true; - }; + initrd.luks.devices = { + crypted = { + device = "/dev/nvme0n1p2"; + preLVM = true; }; }; }; -- cgit v1.2.3 From 0d46f77cf1849b4a2be0079776df01526302df80 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 08:54:02 -0300 Subject: configuration.nix: Disable users.mutableUsers option --- configuration.nix | 5 ----- 1 file changed, 5 deletions(-) diff --git a/configuration.nix b/configuration.nix index 133a314..2f0f212 100644 --- a/configuration.nix +++ b/configuration.nix @@ -426,8 +426,6 @@ in { }; users = { - mutableUsers = false; - extraUsers = let andrehUser = { andreh = { @@ -435,9 +433,6 @@ in { uid = 1000; description = "EuAndreh"; extraGroups = [ "wheel" "networkmanager" "docker" ]; - # Generated with: - # mkpasswd -m sha-512 - hashedPassword = privateConfiguration.hashedPassword; }; }; # From the Guix manual: -- cgit v1.2.3 From 133b50f21b7c8538bb22646179f9f2d34604181e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:01:04 -0300 Subject: sh/templates/: Remove assert-clang-format.sh --- Makefile | 1 - sh/templates/Makefile | 1 - sh/templates/aux/assert-clang-format.sh | 16 ---------------- 3 files changed, 18 deletions(-) delete mode 100755 sh/templates/aux/assert-clang-format.sh diff --git a/Makefile b/Makefile index 609997e..cbce89b 100644 --- a/Makefile +++ b/Makefile @@ -2,7 +2,6 @@ check: sh aux/assert-shellcheck.sh sh aux/assert-todos.sh sh aux/assert-nixfmt.sh - sh sh/templates/aux/assert-clang-format.sh dev-check: check diff --git a/sh/templates/Makefile b/sh/templates/Makefile index 8d4758f..c8618a2 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -63,7 +63,6 @@ check: run-tests dev-check: all check fallible-tests valgrind `fallible-check --valgrind-flags` ./run-tests fallible-check ./fallible-tests - sh aux/assert-clang-format.sh sh aux/assert-shellcheck.sh sh aux/workflow/assert-todos.sh sh aux/workflow/assert-changelog.sh $(NAME) diff --git a/sh/templates/aux/assert-clang-format.sh b/sh/templates/aux/assert-clang-format.sh deleted file mode 100755 index cf3fbb4..0000000 --- a/sh/templates/aux/assert-clang-format.sh +++ /dev/null @@ -1,16 +0,0 @@ -#!/bin/sh -set -eu - -if [ "${1:-}" = '--fix-in-place' ]; then - find . -type f \( -name '*.h' -o -name '*.c' \) -exec clang-format -i {} \; - exit 0 -fi - -# shellcheck disable=2016 -find . -type f \( -name '*.h' -o -name '*.c' \) -exec sh -c ' - clang-format "$1" | diff - "$1" || { - echo "Unformatted C code. To fix it, run:" - echo " ./aux/assert-clang-format.sh --fix-in-place" - exit 1 - } -' _ {} + -- cgit v1.2.3 From cab1bc869ec735a1cea0bd40313268aff2f90f50 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:01:20 -0300 Subject: sh/aliases.sh: Add borg alias --- sh/aliases.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/aliases.sh b/sh/aliases.sh index 69499a5..8b93c1a 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -48,3 +48,4 @@ alias :w='echo "Not inside vi!" && false' alias sudo='echo "did you mean \"doas\""? && false' alias mk='make clean public dev-check' alias mail='mail -aFrom:eu@euandre.org' +alias borg="BORG_PASSPHRASE=$(pass show Borg) borg" -- cgit v1.2.3 From 73f7b92df0e37625e8d21593fd456fd2187b452b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:01:53 -0300 Subject: sh/symlinks.sh: Remove upsert_dir_symlinks cases --- sh/symlinks.sh | 14 -------------- 1 file changed, 14 deletions(-) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 34cfe2e..89e67ba 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -1,15 +1,5 @@ #!/bin/sh -upsert_dir_symlink() { - from="$1" - to="$2" - { [ -d "$to" ] || [ -L "$to" ]; } || { - ln -s "$from" "$to" - } -} - -upsert_dir_symlink "$HOME/dev/others/borg/config" ~/.config/borg - ln -fs "$DOTFILES/sh/bashrc.sh" ~/.bashrc ln -fs "$DOTFILES/sh/bash_profile.sh" ~/.bash_profile ln -fs "$DOTFILES/git/gitattributes" ~/.gitattributes @@ -39,10 +29,6 @@ ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig mkdir -p ~/.newsboat ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls -MEDIA_PREFIX=/run/media/andreh -upsert_dir_symlink "$MEDIA_PREFIX/UTCLOUD" ~/UTCLOUD -upsert_dir_symlink "$MEDIA_PREFIX/SNEAKER" ~/SNEAKER - ## tmux ln -fs "$DOTFILES/tmux.conf" ~/.tmux.conf -- cgit v1.2.3 From ecf85a4b94b8138c2f53c352ab853a18de490fd2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:02:12 -0300 Subject: sh/symlinks.sh: Assert ~/Downloads/Screenshots/ always exists --- sh/symlinks.sh | 1 + 1 file changed, 1 insertion(+) diff --git a/sh/symlinks.sh b/sh/symlinks.sh index 89e67ba..20e0dbb 100644 --- a/sh/symlinks.sh +++ b/sh/symlinks.sh @@ -11,6 +11,7 @@ ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap ln -fs "$DOTFILES/npmrc.sh" ~/.npmrc ln -fs "$DOTFILES/mailcap.conf" ~/.mailcap +mkdir -p ~/Downloads/Screenshots/ mkdir -p ~/.local/share/common-lisp [ ! -e ~/.local/share/common-lisp/source ] && ln -fs ~/dev/libre ~/.local/share/common-lisp/source -- cgit v1.2.3 From 52c62d6e634abd197ec748008a683a21ea79fd51 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:02:50 -0300 Subject: sh/fake-symlinks.sh: Disable CI for website repository --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1be9487..d819530 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -107,7 +107,7 @@ ln_env() { export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - if [ -f "$PPREFIX/Makefile" ]; then + if [ -f "$PPREFIX/Makefile" ] && [ "$PROJECT" != website ]; then export ENABLE_CI=1 else export ENABLE_CI= -- cgit v1.2.3 From 3d31819bff3a294f0220bcabee56c1bc9dc0c97c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:03:39 -0300 Subject: sh/fake-symlinks.sh: Remove enforce_uniform_readme function --- sh/fake-symlinks.sh | 25 ------------------------- 1 file changed, 25 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index d819530..584de4a 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -230,30 +230,6 @@ EOF fi } -enforce_uniform_readme() { - if [ -f "$PPREFIX/CHANGELOG.md" ] && grep -q '^## Contributing$' "$PPREFIX/README.md"; then - EXPECTED="$(cat < Date: Tue, 8 Jun 2021 09:04:27 -0300 Subject: sh/fake-symlinks.sh: Remove $ENABLE_C and $C_PROJECT variables --- sh/fake-symlinks.sh | 18 ------------------ 1 file changed, 18 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 584de4a..3a0b3e5 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -118,12 +118,6 @@ ln_env() { else ENABLE_GUILE= fi - - if [ -n "${C_PROJECT[$PROJECT]}" ]; then - ENABLE_C=1 - else - ENABLE_C= - fi } ln_init() { @@ -182,10 +176,6 @@ ln_ci() { ln_simple_makefile() { sed_if_not Makefile - - if [ -n "$ENABLE_C" ]; then - cp_all aux/assert-clang-format.sh - fi } enforce_uniform_manpages() { @@ -293,14 +283,6 @@ declare -A GUILE_PROJECTS=( [songbooks]=1 ) -declare -A C_PROJECT=( - [remembering]=1 - [gluilo]=1 - [konformigado]=1 - [libedn]=1 - [fallible]=1 -) - ln_all() { LN_FN="$1" shift -- cgit v1.2.3 From cf15b1fc1a258627a73ac10c14f0da0dd227ae16 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:05:29 -0300 Subject: sh/fake-symlinks.sh: Add a few newer projects --- sh/fake-symlinks.sh | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 3a0b3e5..4bb7104 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -325,8 +325,14 @@ ln_all ln_makefile_only_guix_project servers \ cl-fun \ git-permalink \ lisp-cli \ - curth \ - libpds + caju \ + libpds \ + libmustache \ + libjson \ + parsec \ + sys-langs \ + r2h \ + book-queue ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From d4e4f1b0a3f2edc93975f39fa56ab128c3a6a5c4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:06:03 -0300 Subject: sh/fake-symlinks.sh: Update files under aux/workflow/ --- sh/fake-symlinks.sh | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 4bb7104..a0e7479 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -133,16 +133,20 @@ ln_init() { ln_build_aux() { cp_all aux/assert-shellcheck.sh \ + aux/tld.txt \ aux/workflow/assert-todos.sh \ aux/workflow/assert-changelog.sh \ + aux/workflow/assert-readme.sh \ aux/workflow/TODOs.sh \ aux/workflow/style.css \ + aux/workflow/favicon.html \ aux/workflow/preamble.md \ - aux/workflow/README.sh \ aux/workflow/commonmark.sh \ aux/workflow/dist.sh \ aux/workflow/sign-tarballs.sh \ - aux/workflow/public.sh + aux/workflow/public.sh \ + aux/workflow/favicon.svg \ + aux/workflow/favicon.png cp_if_not TODOs.md -- cgit v1.2.3 From 931ad7e36e41885cbf7d1985fb3ead489d7694c3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:06:39 -0300 Subject: sh/templates/: Use tabs and include favicons --- sh/templates/aux/assert-shellcheck.sh | 4 +- sh/templates/aux/ci/ci-build.sh | 74 +++++++++++++------------- sh/templates/aux/ci/git-post-receive.sh | 10 ++-- sh/templates/aux/ci/git-pre-push.sh | 14 ++--- sh/templates/aux/ci/report.sh | 69 ++++++++++++------------ sh/templates/aux/guix/pinned-channels.scm | 2 +- sh/templates/aux/guix/with-container.sh | 12 ++--- sh/templates/aux/tld.txt | 1 + sh/templates/aux/workflow/README.sh | 43 --------------- sh/templates/aux/workflow/TODOs.sh | 39 ++++++++------ sh/templates/aux/workflow/assert-changelog.sh | 14 ++--- sh/templates/aux/workflow/assert-readme.sh | 59 ++++++++++++++++++++ sh/templates/aux/workflow/assert-todos.sh | 74 +++++++++++++------------- sh/templates/aux/workflow/commonmark.sh | 21 ++++---- sh/templates/aux/workflow/dist.sh | 12 ++--- sh/templates/aux/workflow/favicon.html | 1 + sh/templates/aux/workflow/favicon.png | Bin 0 -> 2372 bytes sh/templates/aux/workflow/favicon.svg | 62 +++++++++++++++++++++ sh/templates/aux/workflow/preamble.md | 2 +- sh/templates/aux/workflow/public.sh | 6 ++- sh/templates/aux/workflow/sign-tarballs.sh | 18 +++---- 21 files changed, 316 insertions(+), 221 deletions(-) create mode 100644 sh/templates/aux/tld.txt delete mode 100755 sh/templates/aux/workflow/README.sh create mode 100755 sh/templates/aux/workflow/assert-readme.sh create mode 100644 sh/templates/aux/workflow/favicon.html create mode 100644 sh/templates/aux/workflow/favicon.png create mode 100644 sh/templates/aux/workflow/favicon.svg diff --git a/sh/templates/aux/assert-shellcheck.sh b/sh/templates/aux/assert-shellcheck.sh index fcbb1c7..cc01f3a 100755 --- a/sh/templates/aux/assert-shellcheck.sh +++ b/sh/templates/aux/assert-shellcheck.sh @@ -2,5 +2,5 @@ set -eux git ls-files | \ - xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ - xargs shellcheck + xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ + xargs shellcheck diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh index 21788f4..b6769a9 100755 --- a/sh/templates/aux/ci/ci-build.sh +++ b/sh/templates/aux/ci/ci-build.sh @@ -8,43 +8,45 @@ FILENAME="$(date -Is)-$SHA.log" LOGFILE="$LOGS_DIR/$FILENAME" { - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>> exit status was %s\n" "$STATUS" + echo "Finishing CI job at: $(date -Is)" + cd - + NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" - } - trap finish EXIT - - unset GIT_DIR - REMOTE="$PWD" - cd "$(mktemp -d)" - git clone "$REMOTE" . - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - git fetch origin refs/notes/*:refs/notes/* - git annex get ||: - - if [ -f aux/guix/with-container.sh ]; then - RUNNER='./aux/guix/with-container.sh' - else - RUNNER='sh -c' - fi - - $RUNNER 'make clean public dev-check' - - rsync -a public/ "/srv/http/$PACKAGE/" --delete + git notes --ref=refs/notes/ci-data add -f -m "$STATUS $FILENAME" + git notes --ref=refs/notes/ci-logs add -f -F "$LOGFILE" + git notes append -m "$NOTE" + + cd - + sh aux/ci/report.sh "$PACKAGE" + rsync -a public/ "/srv/http/$PACKAGE/" --delete + + printf "\n>>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" + } + trap finish EXIT + + unset GIT_DIR + REMOTE="$PWD" + cd "$(mktemp -d)" + git clone "$REMOTE" . + git config --global user.email git@euandre.org + git config --global user.name 'EuAndreh CI' + git fetch origin refs/notes/*:refs/notes/* + git annex get ||: + + if [ -f aux/guix/with-container.sh ]; then + RUNNER='./aux/guix/with-container.sh' + else + RUNNER='sh -c' + fi + + $RUNNER 'make clean public dev-check' } 2>&1 | tee "$LOGFILE" diff --git a/sh/templates/aux/ci/git-post-receive.sh b/sh/templates/aux/ci/git-post-receive.sh index f8986ed..ee8075f 100755 --- a/sh/templates/aux/ci/git-post-receive.sh +++ b/sh/templates/aux/ci/git-post-receive.sh @@ -2,11 +2,11 @@ set -eu for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do - opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" - if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then - printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" - exit 0 - fi + opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" + if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then + printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" + exit 0 + fi done PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix diff --git a/sh/templates/aux/ci/git-pre-push.sh b/sh/templates/aux/ci/git-pre-push.sh index e540686..0580c87 100644 --- a/sh/templates/aux/ci/git-pre-push.sh +++ b/sh/templates/aux/ci/git-pre-push.sh @@ -1,6 +1,8 @@ #!/bin/sh set -eux +TLD="$(cat aux/tld.txt)" + PACKAGE="$(basename "$PWD")" __ENABLE_CI__ LOGS_DIR="/opt/ci/$PACKAGE/logs" REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" @@ -8,12 +10,12 @@ REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" DESCRIPTION="$(mktemp)" if [ -f description ] then - cp description "$DESCRIPTION" + cp description "$DESCRIPTION" else - git config euandreh.description > "$DESCRIPTION" + git config euandreh.description > "$DESCRIPTION" fi -scp "$DESCRIPTION" "git.euandreh.xyz:$REMOTE_GIT_DIR/description" -__ENABLE_CI__ ssh git.euandreh.xyz mkdir -p "$LOGS_DIR" -__ENABLE_CI__ scp aux/ci/ci-build.sh "git.euandreh.xyz:$(dirname "$LOGS_DIR")/ci-build.sh" -__ENABLE_CI__ scp aux/ci/git-post-receive.sh "git.euandreh.xyz:$REMOTE_GIT_DIR/hooks/post-receive" +scp "$DESCRIPTION" "$TLD:$REMOTE_GIT_DIR/description" +__ENABLE_CI__ ssh "$TLD" mkdir -p "$LOGS_DIR" +__ENABLE_CI__ scp aux/ci/ci-build.sh "$TLD:$(dirname "$LOGS_DIR")/ci-build.sh" +__ENABLE_CI__ scp aux/ci/git-post-receive.sh "$TLD:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/sh/templates/aux/ci/report.sh b/sh/templates/aux/ci/report.sh index b82c061..65d3335 100755 --- a/sh/templates/aux/ci/report.sh +++ b/sh/templates/aux/ci/report.sh @@ -14,55 +14,56 @@ chmod 644 "$OUT" git fetch origin refs/notes/*:refs/notes/* ||: for c in $(git notes list | cut -d\ -f2); do - DATA="$(git notes --ref=refs/notes/ci-data show "$c")" - FILENAME="$(echo "$DATA" | cut -d\ -f2)" - echo "$DATA" > "public/ci-data/$FILENAME" - git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" + DATA="$(git notes --ref=refs/notes/ci-data show "$c")" + FILENAME="$(echo "$DATA" | cut -d\ -f2)" + echo "$DATA" > "public/ci-data/$FILENAME" + git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" done cat <> "$OUT" - - - + + + + - - - -

    - CI logs for $PROJECT_UC -

    -
    + EOF diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm index b026813..504406f 100644 --- a/sh/templates/aux/guix/pinned-channels.scm +++ b/sh/templates/aux/guix/pinned-channels.scm @@ -1,7 +1,7 @@ (cons* (channel (name 'xyz-euandreh) - (url "git://git.euandreh.xyz/package-repository") + (url "git://euandreh.xyz/package-repository") (branch "main") (introduction (make-channel-introduction diff --git a/sh/templates/aux/guix/with-container.sh b/sh/templates/aux/guix/with-container.sh index 13b6cd3..b521c82 100755 --- a/sh/templates/aux/guix/with-container.sh +++ b/sh/templates/aux/guix/with-container.sh @@ -2,12 +2,12 @@ set -eux if [ -z "${1:-}" ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm elif [ "$1" = '-p' ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C else - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" + guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ + environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" fi diff --git a/sh/templates/aux/tld.txt b/sh/templates/aux/tld.txt new file mode 100644 index 0000000..0cb8b8b --- /dev/null +++ b/sh/templates/aux/tld.txt @@ -0,0 +1 @@ +euandreh.xyz diff --git a/sh/templates/aux/workflow/README.sh b/sh/templates/aux/workflow/README.sh deleted file mode 100755 index aa5cbe6..0000000 --- a/sh/templates/aux/workflow/README.sh +++ /dev/null @@ -1,43 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -PROJECT="$2" -MAILING_LIST="$3" - -RELEASES_LIST="$(mktemp)" -for version in $(git tag | perl -e 'print reverse <>'); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" -done - -RELEASES="$(mktemp)" -if [ -s "$RELEASES_LIST" ]; then - printf '\n# Releases\n\n' >> "$RELEASES" - cat "$RELEASES_LIST" >> "$RELEASES" -fi - -LINKS="$(mktemp)" -cat < "$LINKS" - -# Links - -- [home page](https://$PROJECT.euandreh.xyz) -- [source code](https://git.euandreh.xyz/$PROJECT/) -- [bug tracking](https://$PROJECT.euandreh.xyz/TODOs.html) -- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) -- [CI logs](https://$PROJECT.euandreh.xyz/ci.html) -- [CHANGELOG](https://$PROJECT.euandreh.xyz/CHANGELOG.html) -EOF - -cat "README.md" "$LINKS" "$RELEASES" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - README" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - > public/index.html diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh index 468b3a8..80059ee 100755 --- a/sh/templates/aux/workflow/TODOs.sh +++ b/sh/templates/aux/workflow/TODOs.sh @@ -6,25 +6,30 @@ mkdir -p public PROJECT_UC="$1" PROJECT="$2" MAILING_LIST="$3" +TLD="$(cat aux/tld.txt)" TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' -sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ - -e "s:@PROJECT@:$PROJECT:g" \ - -e "s:@MAILING_LIST@:$MAILING_LIST:g" < aux/workflow/preamble.md | \ - printf '%s\n\n%s' \ - "$(cat -)" \ - "$(perl -pe "$TODOS_REGEX" TODOs.md | \ - perl -pe "$TAGS_REGEX")" | \ - pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - TODOs" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - -H aux/workflow/style.css \ - > public/TODOs.html +sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ + -e "s:@PROJECT@:$PROJECT:g" \ + -e "s:@MAILING_LIST@:$MAILING_LIST:g" \ + -e "s:@TLD@:$TLD:g" \ + < aux/workflow/preamble.md | \ + printf \ + '%s\n\n%s' \ + "$(cat -)" \ + "$(perl -pe "$TODOS_REGEX" TODOs.md | perl -pe "$TAGS_REGEX")" | \ + pandoc \ + --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - TODOs" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + -H aux/workflow/favicon.html \ + -H aux/workflow/style.css \ + > public/TODOs.html diff --git a/sh/templates/aux/workflow/assert-changelog.sh b/sh/templates/aux/workflow/assert-changelog.sh index d39f527..8e81f1f 100755 --- a/sh/templates/aux/workflow/assert-changelog.sh +++ b/sh/templates/aux/workflow/assert-changelog.sh @@ -4,11 +4,11 @@ set -eu PROJECT="$1" for VVERSION in $(git tag); do - VERSION="${VVERSION#v}" - DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" - CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" - if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 - exit 1 - fi + VERSION="${VVERSION#v}" + DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" + CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" + if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then + echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 + exit 1 + fi done diff --git a/sh/templates/aux/workflow/assert-readme.sh b/sh/templates/aux/workflow/assert-readme.sh new file mode 100755 index 0000000..cef75dd --- /dev/null +++ b/sh/templates/aux/workflow/assert-readme.sh @@ -0,0 +1,59 @@ +#!/bin/sh +set -eu + +mkdir -p public + +PROJECT="$1" +MAILING_LIST="$2" +TLD="$(cat aux/tld.txt)" + +EXPECTED="$(mktemp)" +cat <> "$EXPECTED" + +For running the extra development-only checks, run: + +\`\`\`shell +$ make dev-check +\`\`\` + +and for generating the documentation HTML and website, run: + +\`\`\`shell +$ make public +\`\`\` + + +## Links + +- [home page](https://$TLD/$PROJECT/) +- [source code](https://git.euandreh.xyz/$PROJECT/) +- [bug tracking](https://$TLD/$PROJECT/TODOs.html) +- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) +- [CI logs](https://$TLD/$PROJECT/ci.html) +- [CHANGELOG](https://$TLD/$PROJECT/CHANGELOG.html) +EOF + +RELEASES_LIST="$(mktemp)" +for version in $(git tag | perl -e 'print reverse <>'); do + echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" +done + +if [ -s "$RELEASES_LIST" ]; then + printf '\n\n## Releases\n\n' >> "$EXPECTED" + cat "$RELEASES_LIST" >> "$EXPECTED" +fi + +cat <> "$EXPECTED" + + +## License + +The code is licensed under [GNU Affero General Public License v3.0 or later][AGPL-3.0-or-later] (AGPL-3.0-or-later). + +[AGPL-3.0-or-later]: https://www.gnu.org/licenses/agpl-3.0.en.html +EOF + +if ! tail -n "$(wc -l < "$EXPECTED")" README.md | diff - "$EXPECTED"; then + echo 'Missing metadata at the end of README.md file' + exit 1 +fi diff --git a/sh/templates/aux/workflow/assert-todos.sh b/sh/templates/aux/workflow/assert-todos.sh index cd7b611..ca73b7f 100755 --- a/sh/templates/aux/workflow/assert-todos.sh +++ b/sh/templates/aux/workflow/assert-todos.sh @@ -2,56 +2,56 @@ set -eu if git grep FIXME | grep -v '^TODOs.md' | grep -v '^aux/workflow/assert-todos.sh'; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.md." - exit 1 + echo "Found dangling FIXME markers on the project." + echo "You should write them down properly on TODOs.md." + exit 1 fi awk -F'{#' ' BEGIN { - exitstatus = 0 - h2flag = 0 - h2status = "" - prevline = "" - idx = 0 - delete ids[0] + exitstatus = 0 + h2flag = 0 + h2status = "" + prevline = "" + idx = 0 + delete ids[0] } h2flag == 1 { - split($0, l, " ") - timelinestatus = l[2] - if (h2status != timelinestatus) { - print "h2/timeline status mismatch for line " NR-1 - print prevline - print $0 - exitstatus = 1 - } - h2status = "" - h2flag = 0 + split($0, l, " ") + timelinestatus = l[2] + if (h2status != timelinestatus) { + print "h2/timeline status mismatch for line " NR-1 + print prevline + print $0 + exitstatus = 1 + } + h2status = "" + h2flag = 0 } /^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { - if (match($0, / \{#.*?\}$/) == 0) { - print "Missing ID for line " NR ":\n" $0 - exitstatus = 1 - } - id_with_prefix = substr($2, 0, length($2) - 1) - match(id_with_prefix, /^\w+-/) - id = substr(id_with_prefix, RLENGTH + 1) - if (id in arr) { - print "Duplicate ID: " id - exitstatus = 1 - } else { - arr[id] = 1 - } + if (match($0, / \{#.*?\}$/) == 0) { + print "Missing ID for line " NR ":\n" $0 + exitstatus = 1 + } + id_with_prefix = substr($2, 0, length($2) - 1) + match(id_with_prefix, /^\w+-/) + id = substr(id_with_prefix, RLENGTH + 1) + if (id in arr) { + print "Duplicate ID: " id + exitstatus = 1 + } else { + arr[id] = 1 + } - split($0, l, " ") - h2status = l[2] - h2flag = 1 - prevline = $0 + split($0, l, " ") + h2status = l[2] + h2flag = 1 + prevline = $0 } /^# Scratch$/ { - exit exitstatus + exit exitstatus } ' TODOs.md diff --git a/sh/templates/aux/workflow/commonmark.sh b/sh/templates/aux/workflow/commonmark.sh index e9609c2..6016f51 100755 --- a/sh/templates/aux/workflow/commonmark.sh +++ b/sh/templates/aux/workflow/commonmark.sh @@ -5,13 +5,16 @@ mkdir -p public PROJECT_UC="$1" F="$2" +OUT="${3:-${F%.*}.html}" -pandoc --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - ${F%.*}" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - < "$F" > "public/${F%.*}.html" +pandoc \ + --toc \ + --highlight-style pygments \ + --toc-depth=2 \ + -s \ + --metadata title="$PROJECT_UC - ${F%.*}" \ + --metadata lang=en \ + -r commonmark \ + -w html \ + -H aux/workflow/favicon.html \ + < "$F" > "public/$OUT" diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index 0ae0ec4..45f8d7e 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -7,18 +7,18 @@ VVERSION="v$2" PROJECT="$3" if git show "$VVERSION" 1>/dev/null 2>/dev/null; then - echo "Version '$VVERSION' already exists." >&2 - exit 1 + echo "Version '$VVERSION' already exists." >&2 + exit 1 fi if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo "Date '$DATE' is not up-to-date." >&2 - exit 1 + echo "Date '$DATE' is not up-to-date." >&2 + exit 1 fi if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then - echo "Commit message isn't 'Release $VVERSION'." >&2 - exit 1 + echo "Commit message isn't 'Release $VVERSION'." >&2 + exit 1 fi sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" diff --git a/sh/templates/aux/workflow/favicon.html b/sh/templates/aux/workflow/favicon.html new file mode 100644 index 0000000..8f9327c --- /dev/null +++ b/sh/templates/aux/workflow/favicon.html @@ -0,0 +1 @@ + diff --git a/sh/templates/aux/workflow/favicon.png b/sh/templates/aux/workflow/favicon.png new file mode 100644 index 0000000..051fdf1 Binary files /dev/null and b/sh/templates/aux/workflow/favicon.png differ diff --git a/sh/templates/aux/workflow/favicon.svg b/sh/templates/aux/workflow/favicon.svg new file mode 100644 index 0000000..ce566b2 --- /dev/null +++ b/sh/templates/aux/workflow/favicon.svg @@ -0,0 +1,62 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/sh/templates/aux/workflow/preamble.md b/sh/templates/aux/workflow/preamble.md index 9fbbd2c..30efe0b 100644 --- a/sh/templates/aux/workflow/preamble.md +++ b/sh/templates/aux/workflow/preamble.md @@ -2,7 +2,7 @@ TODOs for @PROJECT_UC@. -See also [@PROJECT@.euandreh.xyz](https://@PROJECT@.euandreh.xyz/) and [CI logs](https://@PROJECT@.euandreh.xyz/ci.html). +See also [@TLD@/@PROJECT@/](https://@TLD@/@PROJECT@/) and [CI logs](https://@TLD@/@PROJECT@/ci.html). Register a new one at [~euandreh/@MAILING_LIST@@lists.sr.ht](mailto:~euandreh/@MAILING_LIST@@lists.sr.ht?subject=%5B@PROJECT@%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) diff --git a/sh/templates/aux/workflow/public.sh b/sh/templates/aux/workflow/public.sh index 4c90225..8ecb855 100755 --- a/sh/templates/aux/workflow/public.sh +++ b/sh/templates/aux/workflow/public.sh @@ -5,11 +5,13 @@ PROJECT_UC="$1" PROJECT="$2" MAILING_LIST="$3" -sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" -sh aux/workflow/README.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" +sh aux/workflow/commonmark.sh "$PROJECT" README.md index.html ||: if [ -f CHANGELOG.md ]; then sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md fi sh aux/ci/report.sh "$PROJECT" + +cp aux/workflow/favicon.* public/ diff --git a/sh/templates/aux/workflow/sign-tarballs.sh b/sh/templates/aux/workflow/sign-tarballs.sh index b88ff33..8de6ac4 100755 --- a/sh/templates/aux/workflow/sign-tarballs.sh +++ b/sh/templates/aux/workflow/sign-tarballs.sh @@ -5,13 +5,13 @@ PROJECT="$1" SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" for tag in $(git tag); do - COMMIT="$(git rev-list -n1 "$tag")" - if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then - echo "Adding missing signature to $tag" >&2 - git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( - git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | - gpg --output - --armor --detach-sign | - git hash-object -w --stdin - )" "$tag" - fi + COMMIT="$(git rev-list -n1 "$tag")" + if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then + echo "Adding missing signature to $tag" >&2 + git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( + git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | + gpg --output - --armor --detach-sign | + git hash-object -w --stdin + )" "$tag" + fi done -- cgit v1.2.3 From 9966c829b067d749e8436a185255f96b92bf1a32 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:09:43 -0300 Subject: sh/: Disable SC1091 ShellCheck rule --- sh/bashrc.sh | 2 +- sh/reload.sh | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/sh/bashrc.sh b/sh/bashrc.sh index 2012e67..80aff07 100644 --- a/sh/bashrc.sh +++ b/sh/bashrc.sh @@ -1,5 +1,5 @@ #!/bin/sh -# shellcheck disable=SC1090 +# shellcheck disable=SC1090 disable=SC1091 export DOTFILES=~/dev/libre/dotfiles diff --git a/sh/reload.sh b/sh/reload.sh index d448607..6eeb53a 100644 --- a/sh/reload.sh +++ b/sh/reload.sh @@ -1,5 +1,5 @@ #!/bin/sh -# shellcheck disable=SC1090 +# shellcheck disable=SC1090 disable=SC1091 . ~/.bashrc . "$DOTFILES/sh/x.sh" -- cgit v1.2.3 From d512ac4f6d991c181b88946ab00389c76e58f362 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:12:23 -0300 Subject: cron/backup.sh: Remove "echo" leftover from debugging prune --- cron/backup.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/cron/backup.sh b/cron/backup.sh index 5786799..3630dce 100755 --- a/cron/backup.sh +++ b/cron/backup.sh @@ -18,7 +18,7 @@ export BORG_REMOTE_PATH='borg1' # borg init -e repokey-blake2 $R:desktop-borg # What about the ~/Downloads folder? -echo borg create \ +borg create \ --exclude ~/.cache/ \ --exclude ~/Downloads/ \ --verbose \ -- cgit v1.2.3 From b613b9df3439cb6477e548d96fa7b3ba02773324 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 09:45:22 -0300 Subject: sh/fzf.sh: Change path of TODOs.md --- sh/fzf.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fzf.sh b/sh/fzf.sh index 5b92915..7a81ec9 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -47,7 +47,7 @@ f() { } V_FILES=' -Sync/TODOs.md +annex/TODOs.md tmp/scratch.txt annex/bin/misc/git/mrconfig.ini annex/bin/misc/dependencies.dot -- cgit v1.2.3 From d358d7229458fe97ea79f341d478d5162c913bc7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 8 Jun 2021 19:03:47 -0300 Subject: scripts/pastebin.sh: Tweak to remove color dependency and update publishing method --- scripts/pastebin.sh | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/scripts/pastebin.sh b/scripts/pastebin.sh index e12096b..d306f87 100755 --- a/scripts/pastebin.sh +++ b/scripts/pastebin.sh @@ -2,8 +2,9 @@ set -eu usage() { - red "Missing argument <${1}>.\n" cat <. + Usage: pastebin.sh [-|FILE] @@ -51,7 +52,7 @@ fi cd ~/dev/libre/website > /dev/null [ -f "$OUT" ] && { - red "Pastebin named $OUT already exists." + echo "Pastebin named $OUT already exists." exit 1 } @@ -78,6 +79,6 @@ EOF git reset . git add "$OUT" git commit -m "$0: Auto-add $OUT" -"$(nix-build -A publishScript)/bin/publish.sh" +make publish open "https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" cd - > /dev/null -- cgit v1.2.3 From cc5a1be0ae1be13622eb9d5216104cdfb734ed4b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:06:14 -0300 Subject: sh/aliases.sh: Add alot to chain of commands in "m" alias --- sh/aliases.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/aliases.sh b/sh/aliases.sh index 8b93c1a..7c32b42 100644 --- a/sh/aliases.sh +++ b/sh/aliases.sh @@ -15,7 +15,7 @@ alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn" alias watch="watch --color " alias mr="mr -s" alias ncdu="ncdu --color dark" -alias m="mbsync -a && notmuch new" +alias m="mbsync -a && notmuch new && alot" alias n='neomutt' alias p='ping euandre.org -c 3' alias playerctl="playerctl --player=\"\$(cat ~/.cache/euandreh/mpris-player.txt)\"" -- cgit v1.2.3 From b31e314ae8f5e8812c620558bfd58b4495eb6f4f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:06:51 -0300 Subject: sh/fake-symlinks.sh: Rename parsec to yoctoparsec --- sh/fake-symlinks.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index a0e7479..577f64f 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -333,7 +333,7 @@ ln_all ln_makefile_only_guix_project servers \ libpds \ libmustache \ libjson \ - parsec \ + yoctoparsec \ sys-langs \ r2h \ book-queue -- cgit v1.2.3 From 53500a9fc26612ac1c9d0bc1aeb71b9e4f1e1969 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:07:06 -0300 Subject: sh/fake-symlinks.sh: Add makecheck project --- sh/fake-symlinks.sh | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 577f64f..c96a69b 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -336,7 +336,8 @@ ln_all ln_makefile_only_guix_project servers \ yoctoparsec \ sys-langs \ r2h \ - book-queue + book-queue \ + makecheck ln_all ln_bare_project brinquedoteca \ casa-do-caminho \ music \ -- cgit v1.2.3 From 7a8dd14f3402e95daa585ce53c570a1c928ea523 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:07:45 -0300 Subject: tmux.conf: Add keybinding to join windows --- tmux.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tmux.conf b/tmux.conf index 377984e..d87885c 100644 --- a/tmux.conf +++ b/tmux.conf @@ -34,6 +34,10 @@ bind-key -n C-S-Right swap-window -t +1\; select-window -t +1 # To change the number of a window, use: PREFIX-., and pick a new unused number # +# Join windows +bind-key -n C-S-M-Left join-pane -s :-0 -t :-1 +bind-key -n C-S-M-Right join-pane -s :-0 -t :+1 + # "C-x m" to actually clear the pane history bind-key m send-keys -R \; clear-history -- cgit v1.2.3 From 1e2c473651abff1a988aba81546dca0a3d5d84fb Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:08:05 -0300 Subject: git/gitignore: Add nohup.out --- git/gitignore | 1 + 1 file changed, 1 insertion(+) diff --git a/git/gitignore b/git/gitignore index 904bb36..ac4f89f 100644 --- a/git/gitignore +++ b/git/gitignore @@ -7,3 +7,4 @@ req.http /tmp/ /patches/ *.nix +nohup.out -- cgit v1.2.3 From 65d76aea8525a15064b085c52cb97aba9f0b74a1 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:08:29 -0300 Subject: configuration.nix: Add urlscan (to be used by alot client) --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index 2f0f212..f1dc019 100644 --- a/configuration.nix +++ b/configuration.nix @@ -234,6 +234,7 @@ in { afew alot w3m + urlscan ## Conversations gomuks -- cgit v1.2.3 From d9803d092cbd69b0c2f9827e1f1250adcf578f21 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:08:45 -0300 Subject: tmux.conf: Remove unused key binding --- tmux.conf | 3 --- 1 file changed, 3 deletions(-) diff --git a/tmux.conf b/tmux.conf index d87885c..f2b7118 100644 --- a/tmux.conf +++ b/tmux.conf @@ -57,9 +57,6 @@ set-option -g history-limit 150000 # How many lines of history to keep set -g base-index 1 set-window-option -g pane-base-index 1 -# Set key to re-order current window to the first position -bind-key P swap-window -t 1 - # Automatically set window title set-window-option -g automatic-rename on set-option -g set-titles on -- cgit v1.2.3 From db0645f1ec225a6353aa2adb58426bae2f75542a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 22:28:57 -0300 Subject: scripts/open: Do nothing when no argument is given --- scripts/open | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/scripts/open b/scripts/open index 7fa2d50..23f12fe 100755 --- a/scripts/open +++ b/scripts/open @@ -1,5 +1,11 @@ #!/bin/sh -set -eux +set -eu + +if [ -z "${1:-}" ]; then + exit +fi + +set -x case "$1" in *.ico|*.jpg|*.jpeg|*.png) -- cgit v1.2.3 From 676479423b5c56e931fdb48839b796be3d35e910 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 23:04:21 -0300 Subject: configuration.nix: Use queued version of msmtp as sendmail --- configuration.nix | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index f1dc019..90b15fd 100644 --- a/configuration.nix +++ b/configuration.nix @@ -338,12 +338,20 @@ in { msmtp = { enable = true; extraConfig = builtins.readFile /home/andreh/.config/msmtp/config; - setSendmail = true; + setSendmail = false; }; }; xdg.portal.enable = true; services = { + + mail.sendmailSetuidWrapper = { + program = "sendmail"; + source = "${pkgs.msmtp}/bin/msmtpq"; + setuid = false; + setgid = false; + }; + blueman.enable = true; # We can see the actual generated crontab at /etc/crontab -- cgit v1.2.3 From f516b618a180ae4cefce50d5ef27f2af9bde927e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Thu, 10 Jun 2021 23:04:56 -0300 Subject: xmobar: Rename xmobar-{notmuch => mail}.sh and show queued emails on it --- xmonad/scripts/xmobar-mail.sh | 11 +++++++++++ xmonad/scripts/xmobar-notmuch.sh | 11 ----------- xmonad/xmobar.hs | 2 +- 3 files changed, 12 insertions(+), 12 deletions(-) create mode 100755 xmonad/scripts/xmobar-mail.sh delete mode 100755 xmonad/scripts/xmobar-notmuch.sh diff --git a/xmonad/scripts/xmobar-mail.sh b/xmonad/scripts/xmobar-mail.sh new file mode 100755 index 0000000..05ab8a5 --- /dev/null +++ b/xmonad/scripts/xmobar-mail.sh @@ -0,0 +1,11 @@ +#!/bin/sh +set -eu + +while true; do + printf "mail: %s/%s - %s\n" "$(notmuch count tag:unread AND NOT tag:lists AND NOT tag:killed)" "$(notmuch count tag:inbox AND NOT tag:lists tag:killed)" "$(msmtp-queue -d | grep -c '^From')" + if acpi -a | grep -q off-line; then + sleep $((60 * 15)) + else + sleep $((60 * 1)) + fi +done diff --git a/xmonad/scripts/xmobar-notmuch.sh b/xmonad/scripts/xmobar-notmuch.sh deleted file mode 100755 index 3d41a3c..0000000 --- a/xmonad/scripts/xmobar-notmuch.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -set -eu - -while true; do - printf "mail: %s/%s\n" "$(notmuch count tag:unread AND NOT tag:lists AND NOT tag:killed)" "$(notmuch count tag:inbox AND NOT tag:lists tag:killed)" - if acpi -a | grep -q off-line; then - sleep $((60 * 15)) - else - sleep $((60 * 1)) - fi -done diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs index b9e6cd2..1526b60 100644 --- a/xmonad/xmobar.hs +++ b/xmonad/xmobar.hs @@ -20,7 +20,7 @@ Config { 10 , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-mpris.sh" "mpris" , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notifications.sh" "notifications" - , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notmuch.sh" "notmuch" + , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-mail.sh" "notmuch" ] , template = " %date% | %default:Master%| %mpris% } { %notifications% | %notmuch% | %wlp0s20f3wi% | %battery% | %memory% * %swap% | %cpu% | %disku% " } -- cgit v1.2.3 From 47e7ba1cc111fbd3b7e00cdd5aa41541b6284242 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 11 Jun 2021 11:42:22 -0300 Subject: mv scripts/{task => todo}; Support more types of todos --- scripts/task | 48 ----------------------------------- scripts/todo | 82 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 82 insertions(+), 48 deletions(-) delete mode 100755 scripts/task create mode 100755 scripts/todo diff --git a/scripts/task b/scripts/task deleted file mode 100755 index e2d14a1..0000000 --- a/scripts/task +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -set -eu - -uuid() { - # Taken from: - # https://serverfault.com/a/799198 - od -xN20 /dev/urandom | \ - head -1 | \ - awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' -} - -insert_at_line() { - N="$1" - F="$2" - TMP="$(mktemp)" - printf '%s\n\n%s\n\n%s\n' \ - "$(head "-n$N" "$F")" \ - "$(cat -)" \ - "$(tail "-n+$((N+1))" "$F")" \ - > "$TMP" - mv "$TMP" "$F" -} - -SHORT= -while getopts 'c' flag; do - case "$flag" in - c) - SHORT=1 - shift - ;; - *) - ;; - esac -done - -TITLE="${1:-FIXME}" -ID="#task-$(uuid)" -TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$TITLE" "$ID" "$(date -I)")" - -if [ "$SHORT" = '1' ] && [ "$TITLE" != 'FIXME' ]; then - echo "$TITLE_LINE" | insert_at_line 2 TODOs.md -else - printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line 2 TODOs.md -fi - -git reset . -git add TODOs.md -git commit -m "TODOs.md: Add $ID" diff --git a/scripts/todo b/scripts/todo new file mode 100755 index 0000000..6905784 --- /dev/null +++ b/scripts/todo @@ -0,0 +1,82 @@ +#!/bin/sh +set -eu + +usage() { + cat < "$TMP" + mv "$TMP" "$F" +} + +SHORT=false +TYPE=task +MESSAGE=FIXME +while getopts 'hct:m:' flag; do + case "$flag" in + h) + usage + exit + ;; + c) + SHORT=true + ;; + t) + TYPE="$OPTARG" + ;; + m) + MESSAGE="$OPTARG" + ;; + *) + ;; + esac +done + +case "$TYPE" in + task|bug|improvement|question) + ;; + *) + echo "Unsupported type: $TYPE" + exit 2 + ;; +esac + +ID="#$TYPE-$(uuid)" +TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$MESSAGE" "$ID" "$(date -I)")" +TYPE_LINE="$(grep -in "^# ${TYPE}s$" TODOs.md | cut -d: -f1)" +INSERT_LINE=$((TYPE_LINE + 1)) + +if [ "$SHORT" = 'true' ] && [ "$MESSAGE" != 'FIXME' ]; then + echo "$TITLE_LINE" | insert_at_line "$INSERT_LINE" TODOs.md +else + printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line "$INSERT_LINE" TODOs.md +fi + +git reset . +git add TODOs.md +git commit -m "TODOs.md: Add $ID" -- cgit v1.2.3 From 016853fa7c4a968055f77c52ca875d97d75162fe Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 11 Jun 2021 12:19:24 -0300 Subject: sh/templates/TODOs.md: Add empty line between h1 headers --- sh/templates/TODOs.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/sh/templates/TODOs.md b/sh/templates/TODOs.md index 017c0a1..6a96f29 100644 --- a/sh/templates/TODOs.md +++ b/sh/templates/TODOs.md @@ -1,11 +1,16 @@ # Tasks + # Bugs + # Improvements + # Questions + # Resources + # Scratch -- cgit v1.2.3 From 08abd3c16616ee9617ccafe5aecca0810410d85b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 11 Jun 2021 22:32:26 -0300 Subject: mv cron/{backup => run-local-backup}.sh; add scripts/backup symlink --- cron/backup.sh | 38 -------------------------------------- cron/run-local-backup.sh | 38 ++++++++++++++++++++++++++++++++++++++ scripts/backup | 1 + 3 files changed, 39 insertions(+), 38 deletions(-) delete mode 100755 cron/backup.sh create mode 100755 cron/run-local-backup.sh create mode 120000 scripts/backup diff --git a/cron/backup.sh b/cron/backup.sh deleted file mode 100755 index 3630dce..0000000 --- a/cron/backup.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -set -eux - -LABEL="${1:-job}" - -# shellcheck source=/dev/null -. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" - -set +x -BORG_PASSPHRASE="$(pass show Borg)" -set -x - -export BORG_PASSPHRASE -R='16686@ch-s010.rsync.net' -export BORG_REMOTE_PATH='borg1' - -# env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' -# borg init -e repokey-blake2 $R:desktop-borg - -# What about the ~/Downloads folder? -borg create \ - --exclude ~/.cache/ \ - --exclude ~/Downloads/ \ - --verbose \ - --stats \ - --progress \ - --compression lzma,9 \ - "$R:desktop-borg::{hostname}-{now}-$LABEL" \ - ~/ - -borg prune \ - --verbose \ - --list \ - --keep-within=6m \ - --keep-weekly=52 \ - --keep-monthly=24 \ - --save-space \ - $R:desktop-borg diff --git a/cron/run-local-backup.sh b/cron/run-local-backup.sh new file mode 100755 index 0000000..3630dce --- /dev/null +++ b/cron/run-local-backup.sh @@ -0,0 +1,38 @@ +#!/bin/sh +set -eux + +LABEL="${1:-job}" + +# shellcheck source=/dev/null +. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" + +set +x +BORG_PASSPHRASE="$(pass show Borg)" +set -x + +export BORG_PASSPHRASE +R='16686@ch-s010.rsync.net' +export BORG_REMOTE_PATH='borg1' + +# env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' +# borg init -e repokey-blake2 $R:desktop-borg + +# What about the ~/Downloads folder? +borg create \ + --exclude ~/.cache/ \ + --exclude ~/Downloads/ \ + --verbose \ + --stats \ + --progress \ + --compression lzma,9 \ + "$R:desktop-borg::{hostname}-{now}-$LABEL" \ + ~/ + +borg prune \ + --verbose \ + --list \ + --keep-within=6m \ + --keep-weekly=52 \ + --keep-monthly=24 \ + --save-space \ + $R:desktop-borg diff --git a/scripts/backup b/scripts/backup new file mode 120000 index 0000000..2343098 --- /dev/null +++ b/scripts/backup @@ -0,0 +1 @@ +../cron/run-local-backup.sh \ No newline at end of file -- cgit v1.2.3 From f6ac2e57d5eac8aa935156a37e7defb4836a950b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Fri, 11 Jun 2021 22:33:32 -0300 Subject: aux/workflow/dist.sh: Remove unused variables --- aux/workflow/dist.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh index 45f8d7e..c061a04 100755 --- a/aux/workflow/dist.sh +++ b/aux/workflow/dist.sh @@ -2,7 +2,6 @@ set -eu DATE="$1" -VERSION="$2" VVERSION="v$2" PROJECT="$3" @@ -21,7 +20,7 @@ if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then exit 1 fi -sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" +sh aux/workflow/assert-changelog.sh "$PROJECT" git tag "$VVERSION" -- cgit v1.2.3 From 03ba75f4ebc66e75b9c5e6f95a03a609ca7f8115 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 13:11:05 -0300 Subject: scripts/git-permalink: Initial version --- scripts/git-permalink | 87 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 87 insertions(+) create mode 100755 scripts/git-permalink diff --git a/scripts/git-permalink b/scripts/git-permalink new file mode 100755 index 0000000..846a68d --- /dev/null +++ b/scripts/git-permalink @@ -0,0 +1,87 @@ +#!/bin/sh +set -eu + +FILE="${1:-}" +MYLINENO="${2:-}" +COMMIT="$(git rev-parse HEAD)" +ORIGIN="$(git config --get remote.origin.url)" +REPOSITORY="$(basename "$PWD")" + +usage() { + cat < Date: Sat, 12 Jun 2021 13:43:29 -0300 Subject: scripts/git-permalink: Show usage on stderr --- scripts/git-permalink | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scripts/git-permalink b/scripts/git-permalink index 846a68d..3d54ab3 100755 --- a/scripts/git-permalink +++ b/scripts/git-permalink @@ -16,7 +16,7 @@ EOF if [ -z "$FILE" ]; then echo 'Missing $FILE argument' - usage + usage >&2 exit 2 fi -- cgit v1.2.3 From 2e65e6a60a5623d795177fb16b9afa00a2c658bd Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:23:43 -0300 Subject: xmonad/scripts/xmobar-mail.sh: Show queuede emails in xmobar --- xmonad/scripts/xmobar-mail.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/scripts/xmobar-mail.sh b/xmonad/scripts/xmobar-mail.sh index 05ab8a5..259e81b 100755 --- a/xmonad/scripts/xmobar-mail.sh +++ b/xmonad/scripts/xmobar-mail.sh @@ -2,7 +2,7 @@ set -eu while true; do - printf "mail: %s/%s - %s\n" "$(notmuch count tag:unread AND NOT tag:lists AND NOT tag:killed)" "$(notmuch count tag:inbox AND NOT tag:lists tag:killed)" "$(msmtp-queue -d | grep -c '^From')" + printf "mail: %s/%s - %s\n" "$(notmuch count tag:unread AND NOT tag:lists AND NOT tag:killed)" "$(notmuch count tag:inbox AND NOT tag:lists AND NOT tag:killed)" "$(msmtp-queue -d | grep -c '^From')" if acpi -a | grep -q off-line; then sleep $((60 * 15)) else -- cgit v1.2.3 From 32ea1c80448e4b5affb78ef8088137f9bd2c3cac Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:28:09 -0300 Subject: xmonad/: Use mod-v for toggling PulseAudio output --- xmonad/scripts/toggle-pulseaudio-sink.sh | 16 ++++++++++++++++ xmonad/xmonad.hs | 8 ++++++-- 2 files changed, 22 insertions(+), 2 deletions(-) create mode 100755 xmonad/scripts/toggle-pulseaudio-sink.sh diff --git a/xmonad/scripts/toggle-pulseaudio-sink.sh b/xmonad/scripts/toggle-pulseaudio-sink.sh new file mode 100755 index 0000000..b20f575 --- /dev/null +++ b/xmonad/scripts/toggle-pulseaudio-sink.sh @@ -0,0 +1,16 @@ +#!/bin/sh +set -eu + +# This script assumes that at most 2 sinks exist at any time. +# When this premise is no longer true, it needs to be upgraded. + +CURRENT="$(pacmd list-sinks | grep '\* index' | cut -d: -f2 | tr -d ' ')" +echo $CURRENT + +if [ "$CURRENT" = 0 ]; then + pacmd set-default-sink 10 +elif [ "$CURRENT" = 10 ]; then + pacmd set-default-sink 0 +else + echo "I don't know what to do now." +fi diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs index 1ca3a40..465cde5 100644 --- a/xmonad/xmonad.hs +++ b/xmonad/xmonad.hs @@ -83,9 +83,13 @@ myKeyPBindings = , ("M-a", sendMessage MirrorExpand) , ("M-z", sendMessage MirrorShrink) + + -- Toggle PulseAudio sink + , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/toggle-pulseaudio-sink.sh") + -- Enqueue link on clipboard in VLC - , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vid.sh") - , ("C-M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-videq.sh") + -- , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vid.sh") + -- , ("C-M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-videq.sh") ] myLayoutHook = -- cgit v1.2.3 From d88b283e4f0b6a447e57b46304d2b008c71359ed Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:30:31 -0300 Subject: Rename generated XXX-job.sh scripts to job-XXX.sh --- configuration.nix | 18 +++++++++--------- sh/fake-symlinks.sh | 10 +++++----- sh/templates/cronjob-with-email.sh | 2 +- 3 files changed, 15 insertions(+), 15 deletions(-) diff --git a/configuration.nix b/configuration.nix index 90b15fd..36c9fab 100644 --- a/configuration.nix +++ b/configuration.nix @@ -10,19 +10,19 @@ let no-mail = { deliver-enqueued-emails = every-x-hours; }; with-mail = { - report-summary-job = "30 13 * * *"; + report-summary = "30 13 * * *"; sync-mail = daily-at-12h30min; - annex-job = daily-at-12h30min; - backup-job = daily-at-12h30min; - repo-update-job = daily-at-12h30min; - notmuch-dump-job = daily-at-12h30min; - mbox-archive-job = daily-at-12h30min; - copy-box-backups-job = daily-at-12h30min; - mr-remotes-backup-job = daily-at-12h30min; + job-annex = daily-at-12h30min; + job-repo-update = daily-at-12h30min; + job-notmuch-dump = daily-at-12h30min; + job-mbox-archive = daily-at-12h30min; + job-copy-box-backups = daily-at-12h30min; + job-run-local-backup = daily-at-12h30min; + job-mr-remotes-backup = daily-at-12h30min; }; }; - priv-crons = { pacheco-job = "0 12 5 * *"; }; + priv-crons = { pacheco = "0 12 5 * *"; }; crons = builtins.attrValues (builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") pub-crons.no-mail) ++ builtins.attrValues (builtins.mapAttrs diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index c96a69b..5e1f834 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -3,19 +3,19 @@ pushd "$DOTFILES/sh/templates/" &>/dev/null || exit 1 mkdir -p "$DOTFILES/cron/generated/" -for job in report-summary annex backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/generated/$job-job.sh" +for job in report-summary annex run-local-backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do + sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/generated/job-$job.sh" chmod +x "$HOME/dev/libre/dotfiles/cron/$job.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/generated/$job-job.sh" + chmod +x "$HOME/dev/libre/dotfiles/cron/generated/job-$job.sh" done mkdir -p "$HOME/annex/bin/cron/generated/" # shellcheck disable=2043 for job in pacheco; do prefix="$HOME/annex/bin/cron" - sed "s/__JOB__-job/$job-job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/$job-job.sh" + sed "s/job-__JOB__/job-$job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/generated/job-$job.sh" chmod +x "$HOME/annex/bin/cron/$job.sh" - chmod +x "$HOME/annex/bin/cron/generated/$job-job.sh" + chmod +x "$HOME/annex/bin/cron/generated/job-$job.sh" done cp ~/dev/libre/package-repository/EuAndreh.key ~/dev/libre/website/public-key.txt diff --git a/sh/templates/cronjob-with-email.sh b/sh/templates/cronjob-with-email.sh index b486ce5..304e51d 100644 --- a/sh/templates/cronjob-with-email.sh +++ b/sh/templates/cronjob-with-email.sh @@ -16,7 +16,7 @@ LOG_FILE="$(mktemp)" echo "Sending report email..." - SUBJECT="Job report on $(hostname): ${STATUS} for __JOB__-job.sh" + SUBJECT="Job report on $(hostname): ${STATUS} for job-__JOB__.sh" gpg -easr eu@euandre.org < "$LOG_FILE" | \ mail eu@euandre.org \ -s "$SUBJECT" \ -- cgit v1.2.3 From 35ed726ba70aee0406c4aa664e1a9d3173ff3ad2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:31:51 -0300 Subject: sh/fake-symlinks.sh: Add xq --- sh/fake-symlinks.sh | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 5e1f834..1f6f7d1 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -169,6 +169,7 @@ ln_ci() { if [ -n "$ENABLE_CI" ]; then EXECUTABLE=1 sed_all aux/ci/git-pre-push.sh cp_all aux/assert-shellcheck.sh \ + aux/tld.txt \ aux/ci/ci-build.sh \ aux/ci/report.sh \ aux/ci/git-post-receive.sh @@ -273,6 +274,7 @@ declare -A ML_FOR_PROJECT=( [gluilo]=mediator [fallible]=mediator [eq]=mediator + [xq]=mediator [songbooks]=songbooks [pires]=pires ) @@ -310,6 +312,7 @@ ln_all ln_makefile_only_guix_project servers \ konformigado \ libedn \ eq \ + xq \ fallible \ standardify \ autoqemu \ -- cgit v1.2.3 From 9b6616e891f89e44f3017e6bc99cab864644f48b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:33:15 -0300 Subject: sh/templates/Makefile: Add dependencies to "dist" target --- sh/templates/Makefile | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/sh/templates/Makefile b/sh/templates/Makefile index c8618a2..5e04401 100644 --- a/sh/templates/Makefile +++ b/sh/templates/Makefile @@ -1,16 +1,17 @@ .POSIX: -CC = c99 -CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g -O3 -LDFLAGS = -Wl,-rpath,$$LIBRARY_PATH -LDLIBS = -PREFIX = /usr/local -MANPREFIX = $(PREFIX)/share/man -DATE = 1970-01-01 -MAJOR = 0 -MINOR = 1 -PATCH = 0 -VERSION = $(MAJOR).$(MINOR).$(PATCH) -NAME = __PROJECT__ +CC = c99 +CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g -O3 +LDFLAGS = -Wl,-rpath,$$LIBRARY_PATH +LDLIBS = +PREFIX = /usr/local +MANPREFIX = $(PREFIX)/share/man +DATE = 1970-01-01 +MAJOR = 0 +MINOR = 1 +PATCH = 0 +VERSION = $(MAJOR).$(MINOR).$(PATCH) +NAME = __PROJECT__ +MAILING_LIST = __MAILING_LIST__ headers = \ src/f.h @@ -90,10 +91,10 @@ uninstall: clean: rm -rf public/ $(objects) $(liba) $(libso-real) $(soaliases) run-tests fallible* vgcore* -dist: +dist: clean public dev-check sh aux/workflow/dist.sh $(DATE) $(VERSION) $(NAME) public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/public.sh __PROJECT_UC__ $(NAME) __MAILING_LIST__ + sh aux/workflow/public.sh __PROJECT_UC__ $(NAME) $(MAILING_LIST) .PHONY: all clean check dev-check dist install uninstall -- cgit v1.2.3 From 4538a6875e86c2fd2bce55a3ac7c896a0e8aed8e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:33:30 -0300 Subject: sh/templates/aux/workflow/dist.sh: Remove unused variables --- sh/templates/aux/workflow/dist.sh | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh index 45f8d7e..c061a04 100755 --- a/sh/templates/aux/workflow/dist.sh +++ b/sh/templates/aux/workflow/dist.sh @@ -2,7 +2,6 @@ set -eu DATE="$1" -VERSION="$2" VVERSION="v$2" PROJECT="$3" @@ -21,7 +20,7 @@ if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then exit 1 fi -sh aux/workflow/assert-changelog.sh "$DATE" "$VERSION" "$PROJECT" +sh aux/workflow/assert-changelog.sh "$PROJECT" git tag "$VVERSION" -- cgit v1.2.3 From 14b58cab028888456c654930ab2552416b24d29f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 14:41:53 -0300 Subject: scripts/git-permalink: Make it a symlink to the project that was promoted from the script --- scripts/git-permalink | 88 +-------------------------------------------------- 1 file changed, 1 insertion(+), 87 deletions(-) mode change 100755 => 120000 scripts/git-permalink diff --git a/scripts/git-permalink b/scripts/git-permalink deleted file mode 100755 index 3d54ab3..0000000 --- a/scripts/git-permalink +++ /dev/null @@ -1,87 +0,0 @@ -#!/bin/sh -set -eu - -FILE="${1:-}" -MYLINENO="${2:-}" -COMMIT="$(git rev-parse HEAD)" -ORIGIN="$(git config --get remote.origin.url)" -REPOSITORY="$(basename "$PWD")" - -usage() { - cat <&2 - exit 2 -fi - -euandreh() { - printf 'https://git.euandreh.xyz/%s/tree/%s?id=%s%s\n' "$REPOSITORY" "$FILE" "$COMMIT" "${MYLINENO:+#n$MYLINENO}" -} - -sourcehut() { - printf '%s/tree/%s/item/%s%s\n' "$ORIGIN" "$COMMIT" "$FILE" "${MYLINENO:+#L$MYLINENO}" -} - -savannah() { - printf '%s/tree/%s?id=%s%s\n' "$(echo "$ORIGIN" | sed 's|gnu.org/git|gnu.org/cgit|')" "$FILE" "$COMMIT" "${MYLINENO:+#n$MYLINENO}" -} - -gitlab() { - if echo "$ORIGIN" | grep -q '^git@gitlab.com:'; then - NAME="$(echo "$ORIGIN" | cut -d: -f2 | cut -d/ -f1)" - ORIGIN="https://gitlab.com/$NAME/$REPOSITORY" - fi - printf '%s/-/blob/%s/%s%s\n' "$ORIGIN" "$COMMIT" "$FILE" "${MYLINENO:+#L$MYLINENO}" -} - -damnyou_github() { - if echo "$MYLINENO" | grep -q -- -; then - P1="$(echo "$MYLINENO" | cut -d- -f1)" - P2="$(echo "$MYLINENO" | cut -d- -f2)" - printf '#L%s-L%s' "$P1" "$P2" - elif [ -n "$MYLINENO" ]; then - printf '#L%s' "${MYLINENO}" - else - printf '' - fi -} - -github() { - if echo "$ORIGIN" | grep -q '^git@github.com:'; then - NAME="$(echo "$ORIGIN" | cut -d: -f2 | cut -d/ -f1)" - ORIGIN="https://github.com/$NAME/$REPOSITORY" - fi - printf '%s/blob/%s/%s%s\n' "$ORIGIN" "$COMMIT" "$FILE" "$(damnyou_github)" -} - -guess_permalink() { - case "$ORIGIN" in - *euandreh.xyz*) - euandreh - ;; - *git.sr.ht*) - sourcehut - ;; - *git.savannah.gnu.org*) - savannah - ;; - *gitlab.com*) - gitlab - ;; - *github.com*) - github - ;; - *) - echo "Unsupported origin: $ORIGIN" - exit 1 - ;; - esac -} - -open `guess_permalink` diff --git a/scripts/git-permalink b/scripts/git-permalink new file mode 120000 index 0000000..031ddba --- /dev/null +++ b/scripts/git-permalink @@ -0,0 +1 @@ +../../git-permalink/src/git-permalink.sh \ No newline at end of file -- cgit v1.2.3 From 10ef66725c60d88a7fced1dda7302daa8f21521d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 19:13:41 -0300 Subject: scripts/commit-md: Add initial version --- scripts/commit-md | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100755 scripts/commit-md diff --git a/scripts/commit-md b/scripts/commit-md new file mode 100755 index 0000000..91610b6 --- /dev/null +++ b/scripts/commit-md @@ -0,0 +1,26 @@ +#!/bin/sh +set -eu + +LAST_COMMIT="$(git rev-parse HEAD)" +COMMIT="${1:-$LAST_COMMIT}" +REPOSITORY="$(basename "$PWD")" + +usage() { + cat <&2 + exit 2 +fi + +LINK="$(printf 'https://git.euandreh.xyz/%s/commit/?id=%s' "$REPOSITORY" "$COMMIT")" +MD="$(printf '[`%s`](%s)' "$COMMIT" "$LINK")" + +xdg-open "$LINK" +printf '%s' "$MD" | xclip -sel clip +printf 'Copied %s to the clipboard!\n' "$MD" >&2 -- cgit v1.2.3 From de46bebc1912bac4553dd89a81f20c9d88eca52e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 19:35:25 -0300 Subject: configuration.nix: Add bpytop package --- configuration.nix | 1 + 1 file changed, 1 insertion(+) diff --git a/configuration.nix b/configuration.nix index 36c9fab..979c3d1 100644 --- a/configuration.nix +++ b/configuration.nix @@ -227,6 +227,7 @@ in { nodePackages.node2nix lsof lsscsi + bpytop ## Mail isync -- cgit v1.2.3 From c76350210b1f723370ea6596106d28cf14e3df78 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sat, 12 Jun 2021 20:33:24 -0300 Subject: sh/fake-symlinks.sh: Add aux/tests-lib.sh --- sh/fake-symlinks.sh | 4 +- sh/templates/aux/tests-lib.sh | 93 +++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 96 insertions(+), 1 deletion(-) create mode 100755 sh/templates/aux/tests-lib.sh diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh index 1f6f7d1..06b9fe9 100644 --- a/sh/fake-symlinks.sh +++ b/sh/fake-symlinks.sh @@ -150,7 +150,9 @@ ln_build_aux() { cp_if_not TODOs.md - cp_if aux/assert-perltidy.sh + cp_if \ + aux/assert-perltidy.sh + aux/tests-lib.sh } ln_agpl() { diff --git a/sh/templates/aux/tests-lib.sh b/sh/templates/aux/tests-lib.sh new file mode 100755 index 0000000..e075974 --- /dev/null +++ b/sh/templates/aux/tests-lib.sh @@ -0,0 +1,93 @@ +#!/bin/sh + +OUT= +ERR= +STATUS= + +assert_status() { + if [ "$STATUS" != "$1" ]; then + printf '\nERR: Bad status.\n\nexpected: %s\ngot: %s\n' \ + "$1" "$STATUS" >&2 + exit 1 + fi +} + +assert_usage() { + if ! grep -Fq 'Usage' "$1"; then + echo 'Expected to find "Usage" text, it was missing:' >&2 + cat "$1" >&2 + exit 1 + fi +} + +assert_empty_stream() { + if [ -s "$2" ]; then + printf '\nERR: Expected %s (%s) to be empty, but has content:\n%s\n' \ + "$1" "$2" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_empty_stdout() { + assert_empty_stream STDOUT "$OUT" +} + +assert_empty_stderr() { + assert_empty_stream STDERR "$ERR" +} + +assert_stream() { + if [ "$(cat "$2")" != "$3" ]; then + printf '\nERR: Bad %s (%s)\n\nexpected: %s\ngot: %s\n' \ + "$1" "$2" "$3" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_stdout() { + assert_stream STDOUT "$OUT" "$1" +} + +assert_stderr() { + assert_stream STDERR "$ERR" "$1" +} + +assert_grep_stream() { + if ! grep -qE "$3" "$2"; then + printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \ + "$1" "$2" "$3" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_grep_stdout() { + assert_grep_stream STDOUT "$OUT" "$1" +} + +assert_grep_stderr() { + assert_grep_stream STDERR "$ERR" "$1" +} + +assert_fgrep_stream() { + if ! grep -Fq -- "$3" "$2"; then + printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \ + "$1" "$2" "$3" "$(cat "$2")" >&2 + exit 1 + fi +} + +assert_fgrep_stdout() { + assert_fgrep_stream STDOUT "$OUT" "$1" +} + +assert_fgrep_stderr() { + assert_fgrep_stream STDERR "$ERR" "$1" +} + +testing() { + printf 'testing: %s...' "$1" >&2 +} + +test_ok() { + printf ' OK.\n' >&2 +} -- cgit v1.2.3 From b682848755ea336ee246054e3c654f1368f21688 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jun 2021 10:26:42 -0300 Subject: TODOs.md: Add #task-83505972-2c0c-3569-5cb5-017daa628afd --- TODOs.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/TODOs.md b/TODOs.md index fa1521b..4f8a73b 100644 --- a/TODOs.md +++ b/TODOs.md @@ -1,5 +1,8 @@ # Tasks +## TODO Make code examples use monospaced font for manpage generated HTML {#task-83505972-2c0c-3569-5cb5-017daa628afd} +- TODO in 2021-06-13 + ## DONE Support tags in tasks? {#task-18eb3dfe-c667-4d18-967c-d406a28e94be} - DONE in 2021-02-20 @@ -17,3 +20,12 @@ # Scratch http://r-36.net/scm/zs/file/README.md.html +guix command on 'doas guix' +bkp gpg key +keepass better recovery +move mailing list emails out of INBOX +notmuch backup tags +Downloads folder being included on backup: does pruning help with this? +rsync.net pricing for borg: should it be $18GB a year? +backup cron +revisit cron/ now that borg backs up everything -- cgit v1.2.3 From eec228d25f7853cca0e0d9fc3f0d7678fee1e672 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Sun, 13 Jun 2021 12:00:30 -0300 Subject: sh/fzf.sh: Improve fcm(), rename to cm() --- sh/fzf.sh | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/sh/fzf.sh b/sh/fzf.sh index 7a81ec9..4c26eb2 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -67,6 +67,8 @@ v() { fi } -fcm() { - git log --oneline | fzf | cut -d\ -f1 +cm() { + CHOICE="$(git log --oneline | fzf)" + INDEX="$(git log --oneline | grep -nF "$CHOICE" | cut -d: -f1)" + git rev-parse "HEAD~$INDEX" } -- cgit v1.2.3 From 3e0715604dc36f30b7464949d77a3ccb0083f440 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 15 Jun 2021 09:36:03 -0300 Subject: sh/fzf.sh: Create separate cn() (commit number) and cm() (commit) functions --- scripts/pastebin | 84 +++++++++++++++++++++++++++++++++++++++++++++++++++++ scripts/pastebin.sh | 84 ----------------------------------------------------- sh/fzf.sh | 9 ++++-- 3 files changed, 90 insertions(+), 87 deletions(-) create mode 100755 scripts/pastebin delete mode 100755 scripts/pastebin.sh diff --git a/scripts/pastebin b/scripts/pastebin new file mode 100755 index 0000000..319b126 --- /dev/null +++ b/scripts/pastebin @@ -0,0 +1,84 @@ +#!/bin/sh +set -eu + +usage() { + cat <. + +Usage: + $0 [-|FILE] + + Reads contents from [FILE], from stdin if '-' is given, and opens the + editor on the content. + + Arguments: + FULL_TITLE Full title of the pastebin + +Examples: + pastebin 'My example pastebin title' + pastebin 'My example pastebin title' - < file + cat file | pastebin 'My example pastebin title' - +EOF +} + +FULL_TITLE="${1:-}" +[ -z "$FULL_TITLE" ] && { + usage 'FULL_TITLE' + exit 2 +} + +# Derived from: +# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 +slugify() { + echo "$1" | \ + tr '[:upper:]' '[:lower:]' | \ + perl -ne 'tr/\000-\177//cd; + s/[^\w\s-]//g; + s/^\s+|\s+$//g; + s/[-\s]+/-/g; + print;' +} + +SLUG_TITLE="$(slugify "$FULL_TITLE")" +PASTE_DATE="$(date -I)" +OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" +if [ -n "${2:-}" ]; then + shift + CONTENT=$(cat "$@") +else + CONTENT='FIXME' +fi + +cd ~/dev/libre/website > /dev/null + +[ -f "$OUT" ] && { + echo "Pastebin named $OUT already exists." + exit 1 +} + +cat < "$OUT" +--- + +title: ${FULL_TITLE} + +date: ${PASTE_DATE} + +layout: post + +lang: en + +ref: $SLUG_TITLE + +--- + +\`\`\`FIXME +$CONTENT +\`\`\` +EOF + +git reset . +git add "$OUT" +git commit -m "$0: Auto-add $OUT" +make clean publish +open "https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" +cd - > /dev/null diff --git a/scripts/pastebin.sh b/scripts/pastebin.sh deleted file mode 100755 index d306f87..0000000 --- a/scripts/pastebin.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <. - -Usage: - pastebin.sh [-|FILE] - - Reads contents from [FILE], from stdin if '-' is given, and opens the - editor on the content. - - Arguments: - FULL_TITLE Full title of the pastebin - -Examples: - pastebin.sh 'My example pastebin title' - pastebin.sh 'My example pastebin title' - < file - cat file | pastebin.sh 'My example pastebin title' - -EOF -} - -FULL_TITLE="${1:-}" -[ -z "$FULL_TITLE" ] && { - usage 'FULL_TITLE' - exit 2 -} - -# Derived from: -# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 -slugify() { - echo "$1" | \ - tr '[:upper:]' '[:lower:]' | \ - perl -ne 'tr/\000-\177//cd; - s/[^\w\s-]//g; - s/^\s+|\s+$//g; - s/[-\s]+/-/g; - print;' -} - -SLUG_TITLE="$(slugify "$FULL_TITLE")" -PASTE_DATE="$(date -I)" -OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" -if [ -n "${2:-}" ]; then - shift - CONTENT=$(cat "$@") -else - CONTENT='FIXME' -fi - -cd ~/dev/libre/website > /dev/null - -[ -f "$OUT" ] && { - echo "Pastebin named $OUT already exists." - exit 1 -} - -cat < "$OUT" ---- - -title: ${FULL_TITLE} - -date: ${PASTE_DATE} - -layout: post - -lang: en - -ref: $SLUG_TITLE - ---- - -\`\`\`FIXME -$CONTENT -\`\`\` -EOF - -git reset . -git add "$OUT" -git commit -m "$0: Auto-add $OUT" -make publish -open "https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" -cd - > /dev/null diff --git a/sh/fzf.sh b/sh/fzf.sh index 4c26eb2..5b693c1 100644 --- a/sh/fzf.sh +++ b/sh/fzf.sh @@ -67,8 +67,11 @@ v() { fi } -cm() { +cn() { CHOICE="$(git log --oneline | fzf)" - INDEX="$(git log --oneline | grep -nF "$CHOICE" | cut -d: -f1)" - git rev-parse "HEAD~$INDEX" + git log --oneline | grep -nF "$CHOICE" | cut -d: -f1 +} + +cm() { + git rev-parse "HEAD~$(cn)" } -- cgit v1.2.3 From 3e0dd934e11e5dd289277d469f90d3977f46d750 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 14:49:57 -0300 Subject: Move VCS files into vcs/ --- git/gitconfig.ini | 67 ---------------------------------------------------- hgrc.ini | 2 -- vcs/gitconfig.ini | 70 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ vcs/hgrc.ini | 2 ++ 4 files changed, 72 insertions(+), 69 deletions(-) delete mode 100644 git/gitconfig.ini delete mode 100644 hgrc.ini create mode 100644 vcs/gitconfig.ini create mode 100644 vcs/hgrc.ini diff --git a/git/gitconfig.ini b/git/gitconfig.ini deleted file mode 100644 index 578a013..0000000 --- a/git/gitconfig.ini +++ /dev/null @@ -1,67 +0,0 @@ -[user] - email = eu@euandre.org - name = EuAndreh - signingkey = 81F90EC3CD356060 -[transfer] - # https://matthiasbussonnier.com/posts/33-sign-commits-on-github.md.html - fsckobjects = true -[log] - # https://git-scm.com/docs/git-config#git-config-logshowSignature - # showSignature = true -[diff "sqlite3"] - # drops a db file into sqlite3 and runs .dump before any diff comparisons - binary = true - textconv = "echo .dump | sqlite3" -[core] - editor = vi - excludesfile = ~/.gitignore_global - - # https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important#5834094 - # https://help.github.com/articles/dealing-with-line-endings/ - autocrlf = input - attributesfile = ~/.gitattributes -[push] - # https://stackoverflow.com/a/22933955 - default = current -[filter "lfs"] - clean = git-lfs clean -- %f - smudge = git-lfs smudge -- %f - process = git-lfs filter-process - required = true - fetchrecentalways = true - fetchrecentrefsdays = 15 - fetchrecentcommitsdays = 7 - fetchrecentremoterefs = true - followTags = true -[alias] - sha = rev-parse HEAD - sha7 = ! git sha | head -c 7 - prune-branches = !git branch --merged | grep -v master | xargs git branch -d - sync = !git annex sync s3 && git annex sync origin - tarball = !git-tarball.sh -[annex] - gnupg-options = --no-tty - gnupg-decrypt-options = --no-tty - autocommit = false - synccontent = true - genmetadata = true -[commit] - gpgsign = true -[fetch] - prune = true -[pack] - packSizeLimit = 2g -[pull] - rebase = false -[sendemail] - assume8bitEncoding = UTF-8 - smtpuser = eu@euandre.org - smtpserver = box.euandre.org - smtpencryption = tls - smtpserverport = 587 - annotate = yes - confirm = never -[include] - path = ~/annex/secret/Git/gitconfig.ini -[init] - defaultBranch = main diff --git a/hgrc.ini b/hgrc.ini deleted file mode 100644 index 656f40b..0000000 --- a/hgrc.ini +++ /dev/null @@ -1,2 +0,0 @@ -[ui] -username = EuAndreh diff --git a/vcs/gitconfig.ini b/vcs/gitconfig.ini new file mode 100644 index 0000000..c4c4a51 --- /dev/null +++ b/vcs/gitconfig.ini @@ -0,0 +1,70 @@ +[user] + email = eu@euandre.org + name = EuAndreh + signingkey = 81F90EC3CD356060 +[transfer] + # https://matthiasbussonnier.com/posts/33-sign-commits-on-github.md.html + fsckobjects = true +[log] + # https://git-scm.com/docs/git-config#git-config-logshowSignature + # showSignature = true +[diff "sqlite3"] + # drops a db file into sqlite3 and runs .dump before any diff comparisons + binary = true + textconv = "echo .dump | sqlite3" +[core] + editor = vi + excludesfile = ~/.gitignore_global + + # https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important#5834094 + # https://help.github.com/articles/dealing-with-line-endings/ + autocrlf = input + attributesfile = ~/.gitattributes +[push] + # https://stackoverflow.com/a/22933955 + default = current +[filter "lfs"] + clean = git-lfs clean -- %f + smudge = git-lfs smudge -- %f + process = git-lfs filter-process + required = true + fetchrecentalways = true + fetchrecentrefsdays = 15 + fetchrecentcommitsdays = 7 + fetchrecentremoterefs = true + followTags = true +[alias] + sha = rev-parse HEAD + sha7 = ! git sha | head -c 7 + prune-branches = !git branch --merged | grep -v main | xargs git branch -d + sync = !git annex sync s3 && git annex sync origin + tarball = !git-tarball.sh +[annex] + gnupg-options = --no-tty + gnupg-decrypt-options = --no-tty + autocommit = false + synccontent = true + genmetadata = true +[commit] + gpgsign = true +[fetch] + prune = true +[pack] + packSizeLimit = 2g +[pull] + rebase = false +[sendemail] + assume8bitEncoding = UTF-8 + smtpuser = eu@euandre.org + smtpserver = box.euandre.org + smtpencryption = tls + smtpserverport = 587 + annotate = yes + confirm = never +[include] + path = ~/annex/secret/Git/gitconfig.ini +[init] + defaultBranch = main +[tar "tar.xz"] + command = xz -c +# git config format.signOff yes diff --git a/vcs/hgrc.ini b/vcs/hgrc.ini new file mode 100644 index 0000000..656f40b --- /dev/null +++ b/vcs/hgrc.ini @@ -0,0 +1,2 @@ +[ui] +username = EuAndreh -- cgit v1.2.3 From 4386019ab6b44052ddf29ac4cbfbe1204bbbf68a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 14:53:20 -0300 Subject: scripts/: Delete unused scripts --- scripts/c | 8 --- scripts/git-permalink | 1 - scripts/hd.sh | 12 ---- scripts/mailing-list-import-mbox.sh | 116 ------------------------------------ scripts/notify | 10 ---- scripts/notmuch-restore.sh | 4 -- scripts/vid | 6 -- scripts/viddq | 18 ------ scripts/videq | 5 -- scripts/vidrm | 30 ---------- 10 files changed, 210 deletions(-) delete mode 100755 scripts/c delete mode 120000 scripts/git-permalink delete mode 100755 scripts/hd.sh delete mode 100755 scripts/mailing-list-import-mbox.sh delete mode 100755 scripts/notify delete mode 100755 scripts/notmuch-restore.sh delete mode 100755 scripts/vid delete mode 100755 scripts/viddq delete mode 100755 scripts/videq delete mode 100755 scripts/vidrm diff --git a/scripts/c b/scripts/c deleted file mode 100755 index 630eb63..0000000 --- a/scripts/c +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -if [ -n "${TMUX:-}" ]; then - tmux send-keys -R \; clear-history -else - clear -fi diff --git a/scripts/git-permalink b/scripts/git-permalink deleted file mode 120000 index 031ddba..0000000 --- a/scripts/git-permalink +++ /dev/null @@ -1 +0,0 @@ -../../git-permalink/src/git-permalink.sh \ No newline at end of file diff --git a/scripts/hd.sh b/scripts/hd.sh deleted file mode 100755 index e9d64d1..0000000 --- a/scripts/hd.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -set -eux - -annex.sh - -rsync -avzP --delete "$R:vps-borg/" ~/UTCLOUD/backups/vps-borg/ -rsync -avzP --delete "$R:desktop-borg/" ~/UTCLOUD/backups/desktop-borg/ -rsync -avzP --delete "$R:box-duplicity" ~/UTCLOUD/backups/box-duplicity/ -rsync -avzP --delete euandre.org:/home/user-data/ ~/UTCLOUD/backups/box-ssd/ - -cd ~/dev/ -mr -s -j4 hd diff --git a/scripts/mailing-list-import-mbox.sh b/scripts/mailing-list-import-mbox.sh deleted file mode 100755 index d69c42f..0000000 --- a/scripts/mailing-list-import-mbox.sh +++ /dev/null @@ -1,116 +0,0 @@ -#!/usr/bin/env nix-shell -#!nix-shell -i bash -p bash wget mb2md -# shellcheck shell=bash -set -Eeuo pipefail - -MAILING_LIST_PROVIDER="${1:-}" -MAILING_LIST_NAME="${2:-}" -GNU_MBOX_ARCHIVE_URL='ftp://lists.gnu.org' -OUT_MAILDIR="$HOME/mbsync/EuAndreh/mailing-lists/" -TMP_DIR="$HOME/tmp/mbox-import" -usage() { - cat < - - Arguments - MAILING_LIST_NAME The name of the mailing list, e.g.: info-guix. - MAILING_LIST_PROVIDER The name of the host of the mailing list, e.g.: gnu. - Supported providers: - 'gnu' for GNU mailing lists - 'google' for Google Groups - -Examples: - Download and import into mbsync the MBOX archive from info-guix mailing-list: - mailing-list-import-mbox.sh gnu info-guix - - Download and import into mbsync the contents for lisp-br Google Groups: - mailing-list-import-mbox.sh google lisp-br -EOF -} - -gnu_mailing_list_import() { - mkdir -p "${TMP_DIR}" - pushd "${TMP_DIR}" - - # Subscribe to the mailing list - local -r recipient="${MAILING_LIST_NAME}-join@gnu.org" - local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail "$recipient" \ - -s "$subject" \ - -aFrom:mailing-list@euandre.org <<<'' - - # Download existing archive as MBOX files - wget -c -r "${GNU_MBOX_ARCHIVE_URL}/${MAILING_LIST_NAME}/" - - # Concatenate all MBOX files into as single MBOX file - cat "lists.gnu.org/${MAILING_LIST_NAME}/"* > "${MAILING_LIST_NAME}.all.mbox" - - # Transform the MBOX file into a MailDir format and put it on the right place - mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" - popd -} - -google_groups_import() { - [[ -f ~/dev/misc/google-group-crawler/crawler.sh ]] || { - red "Missing ${HOME}/dev/misc/google-group-crawler/crawler.sh file." - red "Clone it before importing Google Groups emails." - exit 1 - } - mkdir -p "${TMP_DIR}" - pushd "${TMP_DIR}" - - # Subscribe to the mailing list - local -r recipient="${MAILING_LIST_NAME}+subscribe@googlegroups.com" - local -r subject="Subscribe to ${MAILING_LIST_NAME} mailing list" - mail.sh "${recipient}" "${subject}" ' ' 'mailing-list@euandre.org' - - # Download existing messages into MBOX Files - CRAWLER_FILE="${TMP_DIR}/${MAILING_LIST_NAME}-crawler.sh" - export _GROUP="${MAILING_LIST_NAME}" - ~/dev/misc/google-group-crawler/crawler.sh -sh > "${CRAWLER_FILE}" - bash "${CRAWLER_FILE}" - - cat "${MAILING_LIST_NAME}/mbox/"* > "${MAILING_LIST_NAME}.all.mbox" - - echo before - echo mb2md -s "${TMP_DIR}/${MAILING_LIST_NAME}.all.mbox" -d "${OUT_MAILDIR}" - echo after - popd -} - -main() { - [[ -z "${MAILING_LIST_PROVIDER}" ]] && { - red "Missing input argument 'MAILING_LIST_PROVIDER'.\n" - usage - exit 2 - } - - [[ -z "${MAILING_LIST_NAME}" ]] && { - red "Missing input argument 'MAILING_LIST_NAME'.\n" - usage - exit 2 - } - - case "${MAILING_LIST_PROVIDER}" in - "gnu") - gnu_mailing_list_import - ;; - "google") - google_groups_import - ;; - *) - red "Unsupported mailing list provider '${MAILING_LIST_PROVIDER}'." - usage - exit 2 - ;; - esac - - echo "${MAILING_LIST_PROVIDER} ${MAILING_LIST_NAME}" >> ~/annex/txt/mailing-list-subscriptions.txt - - green "Done." - yellow "Make sure to add the correct tagging rules for notmuch post-hook!" - blue "Remember to sync new changes by running sync-mail.sh!" -} - -main "$@" diff --git a/scripts/notify b/scripts/notify deleted file mode 100755 index 984c7ac..0000000 --- a/scripts/notify +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -eu - -# Derived from: -# https://unix.stackexchange.com/questions/61205/how-to-supress-the-display-of-previous-job-details -( ( - echo "$1" > ~/.cache/euandreh/xmobar-notifications.txt - sleep 10 - echo "" > ~/.cache/euandreh/xmobar-notifications.txt -) &) diff --git a/scripts/notmuch-restore.sh b/scripts/notmuch-restore.sh deleted file mode 100755 index f3dc386..0000000 --- a/scripts/notmuch-restore.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -eux - -notmuch new -notmuch restore --input ~/archive/notmuch-archive.today.txt diff --git a/scripts/vid b/scripts/vid deleted file mode 100755 index 2d9f08c..0000000 --- a/scripts/vid +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p ~/archive/vid/ -echo "$1" >> ~/archive/vid/history.txt -nohup mpv "$1" 1>/dev/null 2>/dev/null & diff --git a/scripts/viddq b/scripts/viddq deleted file mode 100755 index 6abb66a..0000000 --- a/scripts/viddq +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh -set -eu - -QUEUE="$HOME/archive/vid/queue.txt" -NEXT="$(head -n1 "$QUEUE")" -if [ -z "$NEXT" ]; then - echo 'Queue is empty!' -else - if mpv "$NEXT" 2>/dev/null | tail -n1 | grep '^Exiting\.\.\. (End of file)$'; then - echo "Finished playing '$NEXT', getting next on the queue." >&2 - NEW_QUEUE="$(mktemp)" - tail -n+2 "$QUEUE" > "$NEW_QUEUE" - mv "$NEW_QUEUE" "$QUEUE" - viddq - else - echo "Quit playing '$NEXT' without finishing, not removing it from the queue." - fi -fi diff --git a/scripts/videq b/scripts/videq deleted file mode 100755 index 067875b..0000000 --- a/scripts/videq +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p ~/archive/vid/ -echo "$1" >> ~/archive/vid/queue.txt diff --git a/scripts/vidrm b/scripts/vidrm deleted file mode 100755 index dbdc6d4..0000000 --- a/scripts/vidrm +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -set -eu - -QUEUE="$HOME/archive/vid/queue.txt" -DB="$HOME/archive/vid/metadata-database.txt" - -LIST="$(mktemp)" -touch "$DB" -while IFS='' read -r url; do - MATCH="$(grep -F "$url" "$DB" || echo "$url")" - echo "$MATCH" >> "$LIST" -done < "$QUEUE" - -file_and_stuff="$(fzf < "$LIST")" - -if [ -n "$file_and_stuff" ]; then - file="$(echo "$file_and_stuff" | awk -F' - ' '{print $NF}')" - NEW_QUEUE="$(mktemp)" - awk -v file="$file" ' - BEGIN { - once=0 - } - once == 0 && $0 == file { - once=1 - print file - } - $0 != file { print } - ' "$QUEUE" > "$NEW_QUEUE" - mv "$NEW_QUEUE" "$QUEUE" -fi -- cgit v1.2.3 From 556aee85d5fc94f96e0d54a2a86b01c6d5c47d5c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:05:28 -0300 Subject: tmux.conf: Remove default status bar info --- tmux.conf | 1 + 1 file changed, 1 insertion(+) diff --git a/tmux.conf b/tmux.conf index f2b7118..06f70b5 100644 --- a/tmux.conf +++ b/tmux.conf @@ -51,6 +51,7 @@ set-option -g status-bg "#666666" # Status bar background color set-option -g status-fg "#aaaaaa" # Status bar foreground color set-option -g status-left-length 50 # session name in status bar length =[annex]= part set-option -g history-limit 150000 # How many lines of history to keep +set-option -g status-right "" # Set the panes initial index value to 1 instead of 0 # 0 is too far from ` ;) -- cgit v1.2.3 From c936d1f6c8a4b2203ebfad0249d2e5aadb93cfaa Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:05:51 -0300 Subject: tmux.conf: Add bind-key for u and t --- tmux.conf | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tmux.conf b/tmux.conf index 06f70b5..8dd08b2 100644 --- a/tmux.conf +++ b/tmux.conf @@ -76,3 +76,7 @@ set-option -gw xterm-keys on # Display pane numbers for longer # https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q set -g display-panes-time 2500 + +bind-key u capture-pane \; save-buffer /tmp/tmux-urlscan-buffer \; new-window -n "urlscan" '$SHELL -c "urlscan < /tmp/tmux-urlscan-buffer"' + +bind-key t resize-pane -x 80 -- cgit v1.2.3 From 2ab4dacad87426ead47b6c78deb68922b6000657 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:06:08 -0300 Subject: .tdrc: Add config file --- .tdrc | 1 + 1 file changed, 1 insertion(+) create mode 100644 .tdrc diff --git a/.tdrc b/.tdrc new file mode 100644 index 0000000..c30c6ee --- /dev/null +++ b/.tdrc @@ -0,0 +1 @@ +TD_USE_BUILTIN_HOOKS='git' -- cgit v1.2.3 From 2595fe1f1bc6d65926811819c7737bfd5f2d4706 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:07:05 -0300 Subject: long-description: Write actual content for long-description --- long-description | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/long-description b/long-description index e5ca504..3dfc42e 100644 --- a/long-description +++ b/long-description @@ -1 +1,2 @@ -Personal OS configuration files. +Repository with OS configuration files, including the support files that are +automatically generated for other repositories. -- cgit v1.2.3 From e7c3c9ae32b7f7f39f0ca722d0f47966d002c42f Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:07:43 -0300 Subject: exrc.conf: Embrace tabs, use 8 spaces for viewing them --- exrc.conf | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/exrc.conf b/exrc.conf index d737a1a..d1e8407 100644 --- a/exrc.conf +++ b/exrc.conf @@ -1,7 +1,7 @@ " set number set autoindent -set tabstop=2 -set shiftwidth=2 +set tabstop=8 +set shiftwidth=8 set ruler set showmode set showmatch -- cgit v1.2.3 From ff6bb4ef3170c2971acb122f824b068d2554c735 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:09:14 -0300 Subject: configuration.nix: Remove custom installed fonts --- configuration.nix | 9 --------- 1 file changed, 9 deletions(-) diff --git a/configuration.nix b/configuration.nix index 979c3d1..e3ba91d 100644 --- a/configuration.nix +++ b/configuration.nix @@ -93,15 +93,6 @@ in { # Set your time zone. time.timeZone = "America/Sao_Paulo"; - fonts.fonts = with pkgs; [ - source-code-pro - fira-code - fira-mono - fira-code-symbols - freefont_ttf - symbola - ]; - documentation = { enable = true; man.enable = true; -- cgit v1.2.3 From a8a6458c4fb3f7e89070325c53be85e858d0fbc5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:09:44 -0300 Subject: configuration.nix: Add note on doing rollbacks --- configuration.nix | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/configuration.nix b/configuration.nix index e3ba91d..881ffd8 100644 --- a/configuration.nix +++ b/configuration.nix @@ -1,5 +1,10 @@ { config, pkgs, ... }: +# rollback to a previously working channel version, useful +# when "doas nixos-rebuild switch --upgrade" breaks: +# +# $ doas nix-channel --rollback + let log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; cron-for-name = prefix: name: cron: -- cgit v1.2.3 From 13a060e789a67dab0d06d6c6ae7bd81b3609155e Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:13:44 -0300 Subject: configuration.nix: Simplify how cron logs are captured and reported --- configuration.nix | 72 +++++++++++++++++++++++++++++++++---------------------- 1 file changed, 43 insertions(+), 29 deletions(-) diff --git a/configuration.nix b/configuration.nix index 881ffd8..2d0ed49 100644 --- a/configuration.nix +++ b/configuration.nix @@ -6,37 +6,8 @@ # $ doas nix-channel --rollback let - log-redirect = name: ">> /tmp/cron-dbg.${name}.euandreh.log 2>&1"; - cron-for-name = prefix: name: cron: - "${cron} andreh ${prefix}/${name}.sh ${log-redirect name}"; - daily-at-12h30min = "30 12 * * *"; - every-x-hours = "0 * * * *"; - pub-crons = { - no-mail = { deliver-enqueued-emails = every-x-hours; }; - - with-mail = { - report-summary = "30 13 * * *"; - - sync-mail = daily-at-12h30min; - job-annex = daily-at-12h30min; - job-repo-update = daily-at-12h30min; - job-notmuch-dump = daily-at-12h30min; - job-mbox-archive = daily-at-12h30min; - job-copy-box-backups = daily-at-12h30min; - job-run-local-backup = daily-at-12h30min; - job-mr-remotes-backup = daily-at-12h30min; }; }; - priv-crons = { pacheco = "0 12 5 * *"; }; - crons = builtins.attrValues - (builtins.mapAttrs (cron-for-name "/home/andreh/dev/libre/dotfiles/cron") - pub-crons.no-mail) ++ builtins.attrValues (builtins.mapAttrs - (cron-for-name "/home/andreh/dev/libre/dotfiles/cron/generated") - pub-crons.with-mail) ++ builtins.attrValues - (builtins.mapAttrs (cron-for-name "/home/andreh/annex/cron") priv-crons); - privateConfiguration = import /etc/nixos/private-configuration.nix; - proprietaryPackages = with pkgs; [ slack zoom-us openfortivpn skype chromium ]; - allowUnfree = builtins.length proprietaryPackages > 0; in { imports = [ # Include the results of the hardware scan. /etc/nixos/hardware-configuration.nix @@ -305,6 +276,40 @@ in { transmission-gtk # https://github.com/btpd/btpd tdesktop # telegram -> gomuks ] ++ proprietaryPackages ++ nu-packages; + + etc = { + "with-email.sh".text = '' + #!/bin/sh + set -u + while getopts 's:' flag; do + case "$flag" in + s) + SUBJECT="$OPTARG" + ;; + *) + exit 2 + ;; + esac + done + shift $((OPTIND - 1)) + + now() { + date '+%Y-%m-%dT%H:%M:%S%Z' + } + + OUT="$(echo 'mkstemp(template)' | m4 -D template="${"\${TMPDIR:-/tmp}"}/m4-tmpname.")" + printf 'Running command: %s\nStarting at: %s\n\n' "$*" "$(now)" >> "$OUT" + ("$@" 2>&1) >> "$OUT" + STATUS="$?" + printf '\nFinished at: %s\n' "$(now)" >> "$OUT" + + mail \ + -a 'Content-Type: text/plain; charset=UTF-8' \ + -a 'From:cron@euandre.org' \ + -s " (exit status: $STATUS) - ${"\${SUBJECT:-NO SUBJECT}"}" \ + eu@euandre.org < "$OUT" + ''; + }; }; nixpkgs = { @@ -378,6 +383,15 @@ in { su andreh users } ''; + # Keep this so that when the "mail" command fails I also get a notification email + mailto = "eu@euandre.org"; + systemCronJobs = [ + "10 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: mr update' -- env SSH_AUTH_SOCK=`gpgconf --list-dirs agent-ssh-socket` mr -s safeupdate" + "20 */6 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: email flush' -- msmtp-queue -r" + "30 */6 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: email sync' -- sh -c 'mbsync -a && notmuch new'" + "50 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: borg backup' -- sh ~/dev/libre/dotfiles/src/bin/backup" + # FIXME: add job to update Guix + ]; }; xserver = { -- cgit v1.2.3 From 2503b41d56ed7d7505e5142c1ea02c280e7fafb8 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:15:37 -0300 Subject: configuration.nix: Better split between work and personal packages --- configuration.nix | 25 +++++++++++++++++++++---- 1 file changed, 21 insertions(+), 4 deletions(-) diff --git a/configuration.nix b/configuration.nix index 2d0ed49..21f6649 100644 --- a/configuration.nix +++ b/configuration.nix @@ -6,6 +6,22 @@ # $ doas nix-channel --rollback let + work = { + packages = with pkgs; { + proprietary = [ + slack + zoom-us + openfortivpn + skype + chromium + ]; + libre = [ + yubioath-desktop + clojure # =clj= + ]; + }; + config = { + yubioauth-support = true; }; }; in { @@ -275,7 +291,7 @@ in { ## Candidates to be replaced by alternatives transmission-gtk # https://github.com/btpd/btpd tdesktop # telegram -> gomuks - ] ++ proprietaryPackages ++ nu-packages; + ] ++ work.packages.libre ++ work.packages.proprietary; etc = { "with-email.sh".text = '' @@ -312,10 +328,11 @@ in { }; }; - nixpkgs = { + nixpkgs = let allow-unfree = builtins.length work.packages.proprietary > 0; + in { config = { - android_sdk.accept_license = allowUnfree; - allowUnfree = allowUnfree; + android_sdk.accept_license = allow-unfree; + allowUnfree = allow-unfree; }; overlays = let version = "main"; -- cgit v1.2.3 From 44726192dc10540edcf5292426c30bf7b89120e5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:17:23 -0300 Subject: configuration.nix: Formatting of config around, same meaning --- configuration.nix | 27 ++++++++++++--------------- 1 file changed, 12 insertions(+), 15 deletions(-) diff --git a/configuration.nix b/configuration.nix index 21f6649..31414f9 100644 --- a/configuration.nix +++ b/configuration.nix @@ -25,9 +25,7 @@ let }; }; in { - imports = [ # Include the results of the hardware scan. - /etc/nixos/hardware-configuration.nix - ]; + imports = [ /etc/nixos/hardware-configuration.nix ]; # Use the systemd-boot EFI boot loader. boot = { @@ -44,7 +42,7 @@ in { }; hardware = { - bluetooth = { enable = true; }; + bluetooth.enable = true; pulseaudio = { package = pkgs.pulseaudioFull; enable = true; @@ -69,18 +67,15 @@ in { networkmanager.enable = true; }; - system.autoUpgrade = { - enable = true; - channel = "https://nixos.org/channels/nixos-unstable"; - }; - console = { keyMap = "br-abnt2"; font = "Lat2-Terminus16"; }; # Select internationalisation properties. - i18n = { defaultLocale = "fr_FR.UTF-8"; }; + i18n = { + defaultLocale = "fr_FR.UTF-8"; + }; # Set your time zone. time.timeZone = "America/Sao_Paulo"; @@ -519,9 +514,11 @@ in { }; }; - # This value determines the NixOS release with which your system is to be - # compatible, in order to avoid breaking some software such as database - # servers. You should change this only after NixOS release notes say you - # should. - system.stateVersion = "20.03"; # Did you read the comment? + system = { + stateVersion = "20.03"; + autoUpgrade = { + enable = true; + dates = "0:10"; + }; + }; } -- cgit v1.2.3 From e8c30af4ce0128a37f0df24624392a2ffd1468b2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:17:54 -0300 Subject: configuration.nix: Change hostname to be "usurpador" --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 31414f9..728b122 100644 --- a/configuration.nix +++ b/configuration.nix @@ -63,7 +63,7 @@ in { }; networking = { - hostName = "usurpador-nixos"; + hostName = "usurpador"; networkmanager.enable = true; }; -- cgit v1.2.3 From de0f3b3a62ac7bff8e314700ec12335cd3a23620 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:18:11 -0300 Subject: configuration.nix: Explicitly configure grub --- configuration.nix | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/configuration.nix b/configuration.nix index 728b122..b05cf11 100644 --- a/configuration.nix +++ b/configuration.nix @@ -32,6 +32,12 @@ in { loader = { systemd-boot.enable = true; efi.canTouchEfiVariables = true; + grub = { + enable = true; + version = 2; + efiSupport = true; + device = "nodev"; + }; }; initrd.luks.devices = { crypted = { -- cgit v1.2.3 From 01965ad00b095bb16d93a8e21e87e32492635156 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:18:24 -0300 Subject: configuration.nix: Remove custom terminal font --- configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index b05cf11..8aa5279 100644 --- a/configuration.nix +++ b/configuration.nix @@ -75,7 +75,6 @@ in { console = { keyMap = "br-abnt2"; - font = "Lat2-Terminus16"; }; # Select internationalisation properties. -- cgit v1.2.3 From 97c4af17e99279ca0bf828c99afb3951690c2aa3 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:19:09 -0300 Subject: configuration.nix: Update package list --- configuration.nix | 126 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 69 insertions(+), 57 deletions(-) diff --git a/configuration.nix b/configuration.nix index 8aa5279..5915811 100644 --- a/configuration.nix +++ b/configuration.nix @@ -96,6 +96,12 @@ in { enableDebugInfo = true; systemPackages = let + pkgs-19 = import (fetchTarball + "https://github.com/NixOS/nixpkgs/archive/b0d748e244df6c977b2a1db3873ffdc271e59615.tar.gz") + { }; + pkgs-21 = import (fetchTarball + "https://github.com/NixOS/nixpkgs/archive/e6377ff35544226392b49fa2cf05590f9f0c4b43.tar.gz") + { }; bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { postInstall = '' ln -s $out/bin/bmake $out/bin/make @@ -106,80 +112,70 @@ in { ln -s $out/bin/tcc $out/bin/c99 ''; }); - flex-with-posix-alias = pkgs.flex.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/flex $out/bin/lex - ''; + timidity-with-more-formats = pkgs.timidity.overrideAttrs (oldAttrs: { + configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; + buildInputs = oldAttrs.buildInputs ++ (with pkgs; [ libogg libvorbis flac ]); }); - pax-with-good-path = pkgs.pax.overrideAttrs (oldAttrs: { - postPatch = '' - substituteInPlace ar_io.c --replace 'putenv' '// putenv' - ${({ postPatch = ""; } // oldAttrs).postPatch} - ''; + mktorrent-latest = pkgs.mktorrent.overrideAttrs (oldAttrs: rec { + version = "de7d011b35458de1472665f50b96c9cf6c303f39"; + src = pkgs.fetchFromGitHub { + owner = "Rudde"; + repo = "mktorrent"; + rev = version; + sha256 = "1gsky1ijxrfsw07lvfjw4annjkdfpmnp8nnddi1wakbzqn6v5dwq"; + }; }); - nu-packages = with pkgs; [ - awscli - yubioath-desktop - leiningen - openjdk8 - clojure # =clj= - kubernetes - nssTools # =pk12util= - python3 - ]; - in with pkgs; [ + ## Documentation posix_man_pages scheme-manpages - ## Personal data tools - gitAndTools.git-open + ## DVCS + mr + fossil + mercurial + cvs + pkgs-19.bitkeeper + pkgs-19.packer gitAndTools.gitFull - gitAndTools.git-annex gitAndTools.gitRemoteGcrypt - git-crypt - git-lfs - mr + + ## Personal data tools borgbackup pass gnupg pinentry_gtk2 - fossil - mercurial ## CLI tools groff - mktorrent + mktorrent-latest + pkgs-21.diffoscope diffoscope - bundix bash-completion nix-bash-completions youtube-dl wget tmux - tmuxinator sox # =play=, SoX - Sound eXchange gettext + perlPackages.Po4a rlwrap jq rq openvpn xclip psmisc # =killall= - xorg.xkill - gksu tree - unzip # used by extract bash function and Clojure go-to-source feh + libqrencode nixUnstable # =nix= bind # =dig= rsync - moreutils # =vipe=, =sponge= + moreutils # =vipe=, =sponge=, errno graphviz # =dot= and others - graph-easy # ASCII drawings for GraphViz output mkpasswd direnv recutils @@ -198,19 +194,22 @@ in { newsboat acpi xsel - pinentry nixfmt - # nvi # broken, now using the one from Guix + nvi fzf calcurse pandoc - buku # replaces Firefox bookmarks cloc inetutils # telnet - nodePackages.node2nix lsof lsscsi - bpytop + gotop + imagemagick + enscript + tcl + + ## System utilities + pmutils ## Mail isync @@ -219,38 +218,45 @@ in { alot w3m urlscan + md4c + docutils + timidity-with-more-formats ## Conversations - gomuks - weechat # replacing ERC - poezio + # gomuks + weechat + # poezio ## Programming tools perl shellcheck - mrsh - dash gcc + musl.dev clang clang-tools valgrind gdb - scdoc sbcl + openssl.dev + openssl + nodejs_latest + quickjs + deno + lilypond + ghostscript + pdftk ## POSIX bmake-with-alias byacc bc - pax-with-good-path lzip - flex-with-posix-alias gnugrep file ed tinycc-with-posix-alias m4 - llvmPackages.bintools # ar, nm and friends + bintools-unwrapped units ## Containers and VMs @@ -270,27 +276,33 @@ in { arandr alsaUtils # for xmonad volume commands yad + amfora + cmus # remove it, use just mpv? + mutagen ## EuAndreh overlay - xyz-euandreh.remembering-latest - xyz-euandreh.autoqemu-latest + # xyz-euandreh.remembering-latest + # xyz-euandreh.git-permalink-latest + # xyz-euandreh.autoqemu-latest ## GUI programs + frescobaldi + inkscape + # dino + fractal + poedit audacity zbar - calibre (mpv-with-scripts.override { scripts = with mpvScripts; [ mpris sponsorblock ]; }) firefox - - ## Desktop programs - cmus - mutagen + libreoffice ## Candidates to be replaced by alternatives transmission-gtk # https://github.com/btpd/btpd tdesktop # telegram -> gomuks + whatsapp-for-linux ] ++ work.packages.libre ++ work.packages.proprietary; etc = { -- cgit v1.2.3 From 63b4fe89de92a12b6f5b3bbb789321321e160569 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:27:41 -0300 Subject: configuration.nix: Update address of overlay in package-repository, stick to "main" branch --- configuration.nix | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/configuration.nix b/configuration.nix index 5915811..9ed9dbd 100644 --- a/configuration.nix +++ b/configuration.nix @@ -347,15 +347,13 @@ in { allowUnfree = allow-unfree; }; overlays = let - version = "main"; use-local = false; euandreh-nixpkgs = import (if use-local then ../package-repository/default.nix else fetchTarball { url = - "https://git.euandreh.xyz/package-repository/snapshot/package-repository-${version}.tar.gz"; - + "https://euandreh.xyz/package-repository.git/snapshot/package-repository-main.tar.gz"; }) { inherit pkgs; }; in [ euandreh-nixpkgs ]; }; -- cgit v1.2.3 From c1b9b3aeef1dea2f79581e24c6f129002adae3d2 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:29:35 -0300 Subject: configuration.nix: Inline msmtp configuration --- configuration.nix | 42 ++++++++++++++++++++++++++++++++++-------- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/configuration.nix b/configuration.nix index 9ed9dbd..a6f5f4d 100644 --- a/configuration.nix +++ b/configuration.nix @@ -366,19 +366,45 @@ in { autojump.enable = true; msmtp = { enable = true; - extraConfig = builtins.readFile /home/andreh/.config/msmtp/config; - setSendmail = false; + extraConfig = '' + defaults + auth on + tls on + port 587 + syslog on + + account euandreh + host box.euandre.org + from eu@euandre.org + user eu@euandre.org + # msmtp in cron's MAILTO environment doesn't include PASSWORD_STORE_DIR + passwordeval pass show Mail-in-a-Box + + account euandrehxyz + host mail.euandreh.xyz + from eu@euandreh.xyz + user eu@euandreh.xyz + passwordeval pass show VPS/kuvira/mail + + account euandreharrobaponto + host mail.arrobaponto.org + from euandreh@arrobaponto.org + user euandreh@arrobaponto.org + passwordeval pass show VPS/toph/mail + + account nubank + host smtp.gmail.com + from andre.moreira@nubank.com.br + user andre.moreira@nubank.com.br + passwordeval pass show andre.moreira@nubank.com.br + + account default : euandreh + ''; }; }; xdg.portal.enable = true; services = { - - mail.sendmailSetuidWrapper = { - program = "sendmail"; - source = "${pkgs.msmtp}/bin/msmtpq"; - setuid = false; - setgid = false; }; blueman.enable = true; -- cgit v1.2.3 From 19acba7612640aa0be086e1e13ab41bfdcaf4c63 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:31:55 -0300 Subject: configuration.nix: Move xdg.portal config to the bottom of the file --- configuration.nix | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index a6f5f4d..6dd89c9 100644 --- a/configuration.nix +++ b/configuration.nix @@ -403,7 +403,6 @@ in { }; }; - xdg.portal.enable = true; services = { }; @@ -562,4 +561,6 @@ in { dates = "0:10"; }; }; + + xdg.portal.enable = true; } -- cgit v1.2.3 From 4c9c45ce050f2fc79a789949a6166bb96c754b55 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:32:56 -0300 Subject: configuration.nix: Add custom driver for printer --- configuration.nix | 49 +++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 47 insertions(+), 2 deletions(-) diff --git a/configuration.nix b/configuration.nix index 6dd89c9..654583a 100644 --- a/configuration.nix +++ b/configuration.nix @@ -404,14 +404,59 @@ in { }; services = { + # Required for local network printer + avahi = { + enable = true; + nssmdns = true; }; blueman.enable = true; # We can see the actual generated crontab at /etc/crontab - cron = { + printing = { enable = true; - systemCronJobs = crons; + drivers = let + epson-201401w = with pkgs; + stdenv.mkDerivation rec { + v = "201401w"; + pname = "epson-${v}"; + version = "1.0.0"; + + src = fetchurl { + urls = [ + "https://download.ebz.epson.net/dsc/op/stable/SRPMS/epson-inkjet-printer-${v}-${version}-1lsb3.2.src.rpm" + "https://download3.ebz.epson.net/dsc/f/03/00/03/45/41/92e9c9254f0ee4230a069545ba27ec2858a2c457/epson-inkjet-printer-201401w-1.0.0-1lsb3.2.src.rpm" + ]; + sha256 = "0c60m1sd59s4sda38dc5nniwa7dh1b0kv1maajr0x9d38gqlyk3x"; + }; + + nativeBuildInputs = [ rpmextract autoreconfHook file ]; + + buildInputs = [ libjpeg cups ]; + + unpackPhase = '' + rpmextract $src + tar -zxf epson-inkjet-printer-${v}-${version}.tar.gz + tar -zxf epson-inkjet-printer-filter-${version}.tar.gz + for ppd in epson-inkjet-printer-${v}-${version}/ppds/*; do + substituteInPlace $ppd --replace "/opt/epson-inkjet-printer-${v}" "$out" + substituteInPlace $ppd --replace "/cups/lib" "/lib/cups" + done + cd epson-inkjet-printer-filter-${version} + ''; + + postInstall = '' + cd ../epson-inkjet-printer-${v}-${version} + cp -a lib64 resource watermark $out + mkdir -p $out/share/cups/model/epson-inkjet-printer-${v} + cp -a ppds $out/share/cups/model/epson-inkjet-printer-${v}/ + cp -a Manual.txt $out/doc/ + cp -a README $out/doc/README.driver + ''; + }; + in [ + epson-201401w + ]; }; logrotate = { -- cgit v1.2.3 From 02b8066587f6d3f77d616a6059ff710ce7bbcc39 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:33:29 -0300 Subject: configuration.nix: Remove logrotate configuration --- configuration.nix | 21 +-------------------- 1 file changed, 1 insertion(+), 20 deletions(-) diff --git a/configuration.nix b/configuration.nix index 654583a..16d3248 100644 --- a/configuration.nix +++ b/configuration.nix @@ -459,27 +459,8 @@ in { ]; }; - logrotate = { + cron = { enable = true; - extraConfig = '' - compress - - /tmp/*.euandreh.log { - rotate 5 - daily - olddir /home/andreh/archive/logs/cron/ - createolddir 744 andreh users - su andreh users - } - - /home/andreh/.bash_history { - rotate 30 - daily - olddir /home/andreh/archive/bash_history/ - createolddir 744 andreh users - su andreh users - } - ''; # Keep this so that when the "mail" command fails I also get a notification email mailto = "eu@euandre.org"; systemCronJobs = [ -- cgit v1.2.3 From faefa057b6930402a30f6dccea677f6ec5c0d31a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:33:55 -0300 Subject: configuration.nix: group together services using the default configuration --- configuration.nix | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/configuration.nix b/configuration.nix index 16d3248..e093f07 100644 --- a/configuration.nix +++ b/configuration.nix @@ -410,9 +410,6 @@ in { nssmdns = true; }; - blueman.enable = true; - - # We can see the actual generated crontab at /etc/crontab printing = { enable = true; drivers = let @@ -510,7 +507,9 @@ in { }; }; - pcscd.enable = true; # required by yubioath + clipmenu.enable = true; + blueman.enable = true; + pcscd.enable = work.config.yubioauth-support; }; security = { -- cgit v1.2.3 From a8e0d8c0c80f2af64498e72b6f2ebd9dffd87f07 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:34:12 -0300 Subject: configuration.nix: Remove desktopManager configuration --- configuration.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index e093f07..03209d6 100644 --- a/configuration.nix +++ b/configuration.nix @@ -489,7 +489,6 @@ in { enable = true; enableContribAndExtras = true; }; - desktopManager = { xterm.enable = false; }; displayManager = { defaultSession = "none+xmonad"; -- cgit v1.2.3 From 01b9b93e1cfba105128c1af101cf9cc9d8908480 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:34:44 -0300 Subject: configuration.nix: Remove "sudo", after a reasonable time with only "doas" --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 03209d6..52e2f21 100644 --- a/configuration.nix +++ b/configuration.nix @@ -512,7 +512,7 @@ in { }; security = { - sudo.enable = true; + sudo.enable = false; doas = { enable = true; extraConfig = '' -- cgit v1.2.3 From ba525e8782924ccd8eb41e8e78adfc0f3b3e3ade Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:34:56 -0300 Subject: configuration.nix: Remove "docker" group from andreh user --- configuration.nix | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration.nix b/configuration.nix index 52e2f21..3697951 100644 --- a/configuration.nix +++ b/configuration.nix @@ -528,7 +528,7 @@ in { isNormalUser = true; uid = 1000; description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "docker" ]; + extraGroups = [ "wheel" "networkmanager" ]; }; }; # From the Guix manual: -- cgit v1.2.3 From 636846ded4504faf0dc5202d1b67d3b2794c7802 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:35:52 -0300 Subject: .gitignore: Remove /cron/generated/ --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 3a2db9e..baec669 100644 --- a/.gitignore +++ b/.gitignore @@ -1,3 +1,2 @@ -/cron/generated/ /aux/workflow/assert-todos.sh /public/ -- cgit v1.2.3 From 8b9a649ac05469881e17a63112cef69bdc19ed08 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:41:32 -0300 Subject: scripts/: Move executables to src/bin/, and add a proper CLI interface to them --- scripts/backup | 1 - scripts/commit-md | 26 --------------- scripts/fim | 4 --- scripts/gc-mail.sh | 10 ------ scripts/gc-nix.sh | 19 ----------- scripts/gc.sh | 48 --------------------------- scripts/open | 29 ----------------- scripts/xdg-open | 1 - scripts/yt | 80 --------------------------------------------- src/bin/backup | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/commit-md | 59 +++++++++++++++++++++++++++++++++ src/bin/fim | 50 ++++++++++++++++++++++++++++ src/bin/gc | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/open | 96 ++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/xdg-open | 1 + src/bin/yt | 90 ++++++++++++++++++++++++++++++++++++++++++++++++++ 16 files changed, 478 insertions(+), 218 deletions(-) delete mode 120000 scripts/backup delete mode 100755 scripts/commit-md delete mode 100755 scripts/fim delete mode 100755 scripts/gc-mail.sh delete mode 100755 scripts/gc-nix.sh delete mode 100755 scripts/gc.sh delete mode 100755 scripts/open delete mode 120000 scripts/xdg-open delete mode 100755 scripts/yt create mode 100755 src/bin/backup create mode 100755 src/bin/commit-md create mode 100755 src/bin/fim create mode 100755 src/bin/gc create mode 100755 src/bin/open create mode 120000 src/bin/xdg-open create mode 100755 src/bin/yt diff --git a/scripts/backup b/scripts/backup deleted file mode 120000 index 2343098..0000000 --- a/scripts/backup +++ /dev/null @@ -1 +0,0 @@ -../cron/run-local-backup.sh \ No newline at end of file diff --git a/scripts/commit-md b/scripts/commit-md deleted file mode 100755 index 91610b6..0000000 --- a/scripts/commit-md +++ /dev/null @@ -1,26 +0,0 @@ -#!/bin/sh -set -eu - -LAST_COMMIT="$(git rev-parse HEAD)" -COMMIT="${1:-$LAST_COMMIT}" -REPOSITORY="$(basename "$PWD")" - -usage() { - cat <&2 - exit 2 -fi - -LINK="$(printf 'https://git.euandreh.xyz/%s/commit/?id=%s' "$REPOSITORY" "$COMMIT")" -MD="$(printf '[`%s`](%s)' "$COMMIT" "$LINK")" - -xdg-open "$LINK" -printf '%s' "$MD" | xclip -sel clip -printf 'Copied %s to the clipboard!\n' "$MD" >&2 diff --git a/scripts/fim b/scripts/fim deleted file mode 100755 index 040dbe9..0000000 --- a/scripts/fim +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eu - -play "$DOTFILES/sh/Positive.ogg" 2> /dev/null diff --git a/scripts/gc-mail.sh b/scripts/gc-mail.sh deleted file mode 100755 index 9a04cdd..0000000 --- a/scripts/gc-mail.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -eux - -# shellcheck source=/dev/null -. "$DOTFILES/sh/colors.sh" - -# Source: https://www.reddit.com/r/emacs/comments/6wqfp3/notmuch_delete_mail/ -yellow "Clean up deleted email files" -notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -notmuch new diff --git a/scripts/gc-nix.sh b/scripts/gc-nix.sh deleted file mode 100755 index 7c22c1d..0000000 --- a/scripts/gc-nix.sh +++ /dev/null @@ -1,19 +0,0 @@ -#!/bin/sh -set -eu - -# shellcheck source=/dev/null -. "$DOTFILES/sh/colors.sh" -yellow "Cleaning up the NixOS store\n" - -PROFILES="$(mktemp)" -printf "per-user/root/channels\nper-user/andreh/profile\nper-user/andreh/channels\nsystem\n" > "$PROFILES" - -while IFS='' read -r p; do - sudo nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" -done < "$PROFILES" - -# Current profile, change when installing with =nix-env -iA nixpkgs.bsdgames= -nix-env --delete-generations old - -nix-store --gc -nix-collect-garbage -d diff --git a/scripts/gc.sh b/scripts/gc.sh deleted file mode 100755 index f432c0c..0000000 --- a/scripts/gc.sh +++ /dev/null @@ -1,48 +0,0 @@ -#!/bin/sh -set -eu - -# shellcheck source=/dev/null -. "$DOTFILES/sh/colors.sh" - -disk_space() { - u | awk '{print $5" "$6}' -} - -before=$(disk_space) - -gc-nix.sh - -yellow "Cleaning up Guix store\n" - -guix gc -d - - -yellow "Cleaning up up the Trash and /tmp folders\n" - -sudo rm -rf ~/.local/share/Trash/files/* -# https://askubuntu.com/a/609396 -sudo find /tmp -type f -atime +10 -delete - -if which docker; then - - yellow "Erasing docker images\n" - - echo y | docker system prune -a - docker rmi "$(docker images -a -q)" ||: - docker rm "$(docker ps -a -f status=exited -q)" ||: - - docker stop "$(docker ps -a -q)" ||: - docker rm "$(docker ps -a -q)" ||: - - echo y | docker volume prune - echo y | docker container prune -fi - -gc-mail.sh - -after=$(disk_space) - -green "Done.\n" -green "Disk space before and after:\n" -blue " before: ${before}\n" -blue " after: ${after}\n" diff --git a/scripts/open b/scripts/open deleted file mode 100755 index 23f12fe..0000000 --- a/scripts/open +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh -set -eu - -if [ -z "${1:-}" ]; then - exit -fi - -set -x - -case "$1" in - *.ico|*.jpg|*.jpeg|*.png) - feh "$1" - ;; - https://www.youtube.com/watch*) - vid "$1" - ;; - http*|*.svg|*.html) - "$BROWSER" "$1" - ;; - *.pdf|*.djvu) - nohup zathura "$1" 1>&2 2>/dev/null & - ;; - *.flac|*.ogg|*.mkv) - vid "$1" - ;; - *) - /run/current-system/sw/bin/xdg-open "$1" - ;; -esac diff --git a/scripts/xdg-open b/scripts/xdg-open deleted file mode 120000 index ce4a72b..0000000 --- a/scripts/xdg-open +++ /dev/null @@ -1 +0,0 @@ -open \ No newline at end of file diff --git a/scripts/yt b/scripts/yt deleted file mode 100755 index ba7feb2..0000000 --- a/scripts/yt +++ /dev/null @@ -1,80 +0,0 @@ -#!/bin/sh -set -eu - -export DEFAULT_PLAYLIST_END=15 -export DEFAULT_INC_STEP=10 -export YT_TEMPLATE="${HOME}/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" - -download() { - youtube-dl "$1" \ - --download-archive ~/archive/youtube-dl-seen.conf \ - --prefer-free-formats \ - --playlist-end "$2" \ - --write-description \ - --output "$YT_TEMPLATE" -} - -download_user() { - download "https://www.youtube.com/user/$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -download_channel() { - download "https://www.youtube.com/channel/$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -download_playlist() { - download "https://www.youtube.com/playlist?list=$1" "${2-$DEFAULT_PLAYLIST_END}" -} - -inc_download() { - fn="$1" - id="$2" - step="${3-$DEFAULT_INC_STEP}" - - file="$HOME/.yt-db/$id" - mkdir -p "$HOME/.yt-db" - cat "$file" 2> /dev/null - n_count="$(cat "$file" 2> /dev/null || printf 10)" - n_count_new="$((n_count + step))" - - echo "$n_count_new" > "$file" - - "$fn" "$id" "$n_count" -} - -# Always downloads video, doesn't look at the download-archive - -URL_OR_PATH="${1:-}" -[ -z "${URL_OR_PATH}" ] && { - # shellcheck disable=2016 - echo 'Input "$URL_OR_PATH" is undefined.' > /dev/stderr - exit 2 -} - -if [ -f "${URL_OR_PATH}" ]; then - echo "File '${URL_OR_PATH}' exists, loading URLs from it..." > /dev/stderr - youtube-dl --batch-file "${URL_OR_PATH}" \ - --format best \ - --output "${YT_TEMPLATE}" \ - --write-description \ - 1>&2 - FILES="$(youtube-dl --batch-file "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --format best \ - --get-filename)" -else - echo "File '${URL_OR_PATH}' doesn't exist, treating it as an URL..." > /dev/stderr - youtube-dl "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --format best \ - --write-description \ - 1>&2 - FILES="$(youtube-dl "${URL_OR_PATH}" \ - --output "${YT_TEMPLATE}" \ - --format best \ - --get-filename)" -fi - -for f in $FILES; do - videq "$f" -done diff --git a/src/bin/backup b/src/bin/backup new file mode 100755 index 0000000..1e51d09 --- /dev/null +++ b/src/bin/backup @@ -0,0 +1,91 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + backup [ARCHIVE_TAG [COMMENT]] + backup -h +EOF +} + +help() { + cat <<-'EOF' + + ARCHIVE_TAG defaults to "cronjob". + COMMENT defaults to an empty string. + + Options: + -h, --help show this message +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + + +set -x + +finish() { + STATUS=$? + printf '\n>>>\n>>> exit status: %s\n>>>\n\n' "$STATUS" >&2 +} +trap finish EXIT + +R='16686@ch-s010.rsync.net' +export BORG_REMOTE_PATH='borg1' +export BORG_PASSCOMMAND='pass show Usurpador/borg/passphrase' +SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" +export SSH_AUTH_SOCK + +borg init -e repokey-blake2 $R:usurpador-borg ||: +borg key export $R:usurpador-borg ~/archive/usurpador-borg-key.txt + +borg create \ + --stats \ + --compression lzma,9 \ + --comment "${2:-}" \ + "$R:usurpador-borg::{hostname}-{now}-${1:-cronjob}" \ + ~/ + +borg check \ + --verbose \ + --last 3 \ + $R:usurpador-borg + +borg prune \ + --verbose \ + --list \ + --keep-within=6m \ + --keep-weekly=52 \ + --keep-monthly=24 \ + $R:usurpador-borg + +ssh $R quota diff --git a/src/bin/commit-md b/src/bin/commit-md new file mode 100755 index 0000000..3d4d5f6 --- /dev/null +++ b/src/bin/commit-md @@ -0,0 +1,59 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + commit-md [COMMIT] + commit-md -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +COMMIT="${1:-$(git rev-parse HEAD)}" +REPOSITORY="$(basename "$PWD")" + +LINK="$(printf 'https://euandreh.xyz/%s.git/commit/?id=%s' "$REPOSITORY" "$COMMIT")" +# shellcheck disable=2016 +MD="$(printf '[`%s`](%s)' "$COMMIT" "$LINK")" + +xdg-open "$LINK" +printf ' Done in\n%s.' "$MD" | xclip -sel clip +printf 'Copied %s to the clipboard!\n' "$MD" >&2 diff --git a/src/bin/fim b/src/bin/fim new file mode 100755 index 0000000..7a21a51 --- /dev/null +++ b/src/bin/fim @@ -0,0 +1,50 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + fim + fim -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +play "$DOTFILES/sh/Positive.ogg" 2> /dev/null diff --git a/src/bin/gc b/src/bin/gc new file mode 100755 index 0000000..0fd2ca7 --- /dev/null +++ b/src/bin/gc @@ -0,0 +1,91 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + gc + gc -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +set -x +before="$(df -h .)" + +PROFILES=' +per-user/root/channels +per-user/andreh/profile +per-user/andreh/channels +system +' + +for p in $PROFILES; do + doas nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" +done +nix-env --delete-generations old +nix-store --gc +nix-collect-garbage -d + +guix gc -d + +find ~/ -name 'nohup.out' -exec rm {} \; +rm -rf ~/.local/share/Trash/files/* +find /tmp/ -type f -atime +10 -exec rm {} \; ||: + +if command -V docker; then + echo y | docker system prune -a + docker rmi "$(docker images -a -q)" ||: + docker rm "$(docker ps -a -f status=exited -q)" ||: + docker stop "$(docker ps -a -q)" ||: + docker rm "$(docker ps -a -q)" ||: + echo y | docker volume prune + echo y | docker container prune +fi + +notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" +notmuch new + +after="$(df -h .)" + +set +x +echo 'Disk space before and after:' +echo " before: $before" +echo " after: $after" diff --git a/src/bin/open b/src/bin/open new file mode 100755 index 0000000..8ede1b7 --- /dev/null +++ b/src/bin/open @@ -0,0 +1,96 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + open FILE... + open -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -h, --help show this message + + Examples: + + Open an HTML file on the current $BROWSER: + open index.html + + Open multiple PDF files (with zathura): + open *.pdf +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'h' flag; do + case "$flag" in + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +if [ -z "${1:-}" ]; then + usage >&2 + exit 2 +fi + +for f in "$@"; do + case "$f" in + *.ico|*.jpg|*.jpeg|*.png) + feh "$f" + ;; + https://www.youtube.com/watch*) + nohup mpv "$f" 1>&2 2>/dev/null & + ;; + *.flac|*.ogg|*.mkv|*.avi|*.mp4) + nohup mpv "$f" 1>&2 2>/dev/null & + ;; + http*|*.svg|*.html) + "$BROWSER" "$f" + ;; + gopher://*) + amfora "$f" + ;; + gemini://*) + amfora "$f" + ;; + *.pdf|*.djvu|*.ps|*.epub) + nohup zathura "$f" 1>&2 2>/dev/null & + ;; + *.txt) + less "$f" + ;; + *.midi) + timidity "$f" + ;; + *) + /run/current-system/sw/bin/xdg-open "$f" + ;; + esac +done diff --git a/src/bin/xdg-open b/src/bin/xdg-open new file mode 120000 index 0000000..ce4a72b --- /dev/null +++ b/src/bin/xdg-open @@ -0,0 +1 @@ +open \ No newline at end of file diff --git a/src/bin/yt b/src/bin/yt new file mode 100755 index 0000000..0ef5932 --- /dev/null +++ b/src/bin/yt @@ -0,0 +1,90 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + yt [-f] URL... [PLAYLIST_COUNT:-15] + yt [-f] FILE... [PLAYLIST_COUNT:-15] + yt -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -f force to download a video already + in the archive + -h, --help show this message +EOF +} + +mkstemp() { + echo 'mkstemp(template)' | m4 -D template="${TMPDIR:-/tmp}/m4-tmpname." +} + + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +while getopts 'fh:' flag; do + case "$flag" in + f) + FORCE=1 + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +if [ -z "${1:-}" ]; then + echo 'Missing URL|FILE argument' >&2 + usage >&2 + exit 2 +fi + + +if [ ! -e "$1" ]; then + F="$(mkstemp)" + printf '%s\n' "$1" > "$F" +else + F="$1" +fi + + +DEFAULT_PLAYLIST_END=15 +YT_TEMPLATE="$HOME/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" + +if [ -z "${FORCE:-}" ]; then + ARCHIVE_OPTION="--download-archive $HOME/archive/youtube-dl-seen.conf" +fi + +youtube-dl \ + --batch-file "$F" \ + --format best \ + --prefer-free-formats \ + --playlist-end "${2:-$DEFAULT_PLAYLIST_END}" \ + --write-description \ + --output "$YT_TEMPLATE" \ + ${ARCHIVE_OPTION:-} -- cgit v1.2.3 From 4b54ceae03549d234ab8f996607b391096ca69d4 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:42:05 -0300 Subject: scripts/todo: Remove script, which became the "td" project --- scripts/todo | 82 ------------------------------------------------------------ 1 file changed, 82 deletions(-) delete mode 100755 scripts/todo diff --git a/scripts/todo b/scripts/todo deleted file mode 100755 index 6905784..0000000 --- a/scripts/todo +++ /dev/null @@ -1,82 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat < "$TMP" - mv "$TMP" "$F" -} - -SHORT=false -TYPE=task -MESSAGE=FIXME -while getopts 'hct:m:' flag; do - case "$flag" in - h) - usage - exit - ;; - c) - SHORT=true - ;; - t) - TYPE="$OPTARG" - ;; - m) - MESSAGE="$OPTARG" - ;; - *) - ;; - esac -done - -case "$TYPE" in - task|bug|improvement|question) - ;; - *) - echo "Unsupported type: $TYPE" - exit 2 - ;; -esac - -ID="#$TYPE-$(uuid)" -TITLE_LINE="$(printf '## TODO %s {%s}\n- TODO in %s\n' "$MESSAGE" "$ID" "$(date -I)")" -TYPE_LINE="$(grep -in "^# ${TYPE}s$" TODOs.md | cut -d: -f1)" -INSERT_LINE=$((TYPE_LINE + 1)) - -if [ "$SHORT" = 'true' ] && [ "$MESSAGE" != 'FIXME' ]; then - echo "$TITLE_LINE" | insert_at_line "$INSERT_LINE" TODOs.md -else - printf '%s\n\n---\n\nFIXME\n' "$TITLE_LINE" | vipe | insert_at_line "$INSERT_LINE" TODOs.md -fi - -git reset . -git add TODOs.md -git commit -m "TODOs.md: Add $ID" -- cgit v1.2.3 From 0900f817a0a88eb8b209265e464aa1153ab4e76b Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:42:33 -0300 Subject: scripts/{post,pastebin}.sh: Remove scripts, which moved to the "website" project --- scripts/pastebin.sh | 84 -------------------------------- scripts/post.sh | 136 ---------------------------------------------------- 2 files changed, 220 deletions(-) delete mode 100755 scripts/pastebin.sh delete mode 100755 scripts/post.sh diff --git a/scripts/pastebin.sh b/scripts/pastebin.sh deleted file mode 100755 index d306f87..0000000 --- a/scripts/pastebin.sh +++ /dev/null @@ -1,84 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <. - -Usage: - pastebin.sh [-|FILE] - - Reads contents from [FILE], from stdin if '-' is given, and opens the - editor on the content. - - Arguments: - FULL_TITLE Full title of the pastebin - -Examples: - pastebin.sh 'My example pastebin title' - pastebin.sh 'My example pastebin title' - < file - cat file | pastebin.sh 'My example pastebin title' - -EOF -} - -FULL_TITLE="${1:-}" -[ -z "$FULL_TITLE" ] && { - usage 'FULL_TITLE' - exit 2 -} - -# Derived from: -# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 -slugify() { - echo "$1" | \ - tr '[:upper:]' '[:lower:]' | \ - perl -ne 'tr/\000-\177//cd; - s/[^\w\s-]//g; - s/^\s+|\s+$//g; - s/[-\s]+/-/g; - print;' -} - -SLUG_TITLE="$(slugify "$FULL_TITLE")" -PASTE_DATE="$(date -I)" -OUT="_pastebins/$PASTE_DATE-$SLUG_TITLE.md" -if [ -n "${2:-}" ]; then - shift - CONTENT=$(cat "$@") -else - CONTENT='FIXME' -fi - -cd ~/dev/libre/website > /dev/null - -[ -f "$OUT" ] && { - echo "Pastebin named $OUT already exists." - exit 1 -} - -cat < "$OUT" ---- - -title: ${FULL_TITLE} - -date: ${PASTE_DATE} - -layout: post - -lang: en - -ref: $SLUG_TITLE - ---- - -\`\`\`FIXME -$CONTENT -\`\`\` -EOF - -git reset . -git add "$OUT" -git commit -m "$0: Auto-add $OUT" -make publish -open "https://euandre.org/pastebin/$(echo "$PASTE_DATE" | tr '-' '/')/$SLUG_TITLE.html" -cd - > /dev/null diff --git a/scripts/post.sh b/scripts/post.sh deleted file mode 100755 index 3c4b483..0000000 --- a/scripts/post.sh +++ /dev/null @@ -1,136 +0,0 @@ -#!/bin/sh -set -eu - -# shellcheck source=/dev/null -. "$DOTFILES/sh/colors.sh" - -missing() { - red "Missing argument <${1}>.\n" >&2 -} - -usage() { - cat <&2 -Usage: - $0 - - Arguments: - TYPE The type of the article: article, til, slides, podcast, screencast - FULL_TITLE Full title of the post - -Examples: - $0 til 'I just learned this' - $0 article 'My example article title' -EOF -} - -TYPE="${1:-}" -[ -z "$TYPE" ] && { - missing 'TYPE' - usage - exit 2 -} - -EXTRA='' -case "$TYPE" in - article|til) - LAYOUT=post - DIR="_${TYPE}s" - EXT=md - ;; - podcast|screencast) - LAYOUT=post - DIR="_${TYPE}s" - EXT=md - EXTRA=" -$TYPE: true -" - ;; - slides) - LAYOUT=slides - DIR=_slides - EXT=slides - ;; - *) - red "Invalid type '$TYPE'\n" >&2 - usage - exit 2 - ;; -esac - -FULL_TITLE="${2:-}" -[ -z "$FULL_TITLE" ] && { - missing 'FULL_TITLE' - usage - exit 2 -} - -# Derived from: -# https://stackoverflow.com/questions/4009281/how-can-i-generate-url-slugs-in-perl/4009519#4009519 -slugify() { - echo "$1" | \ - tr '[:upper:]' '[:lower:]' | \ - perl -ne 'tr/\000-\177//cd; - s/[^\w\s-]//g; - s/^\s+|\s+$//g; - s/[-\s]+/-/g; - print;' -} - -WEBSITE_REPO="$HOME/dev/libre/website" -SLUG_TITLE="$(slugify "$FULL_TITLE")" -PASTE_DATE="$(date -I)" -OUT="$WEBSITE_REPO/$DIR/$PASTE_DATE-$SLUG_TITLE.$EXT" - -cd "$WEBSITE_REPO" - -if [ -f "$OUT" ]; then - exec vi "$OUT" -fi - -if [ "$LAYOUT" = 'slides' ]; then - ARTICLE="$($0 article "$FULL_TITLE")" - cat< "$OUT" ---- - -title: $FULL_TITLE - -date: $PASTE_DATE - -layout: $LAYOUT - -lang: en - -ref: $SLUG_TITLE - -article: $ARTICLE -$EXTRA ---- - ---- - -## Thank you! - -References: - -1. FIXME -2. FIXME -EOF -else - cat < "$OUT" ---- - -title: $FULL_TITLE - -date: $PASTE_DATE - -layout: $LAYOUT - -lang: en - -ref: $SLUG_TITLE - ---- -EOF -fi - -vi "$OUT" -- cgit v1.2.3 From fca54bb0832cd350e1003d014130468bdea23cd7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:43:05 -0300 Subject: scripts/record-my-screen.sh: Remove unused script --- scripts/record-my-screen.sh | 55 --------------------------------------------- 1 file changed, 55 deletions(-) delete mode 100755 scripts/record-my-screen.sh diff --git a/scripts/record-my-screen.sh b/scripts/record-my-screen.sh deleted file mode 100755 index 65d01b9..0000000 --- a/scripts/record-my-screen.sh +++ /dev/null @@ -1,55 +0,0 @@ -#!/bin/sh -set -eux - -usage() { - red "Missing argument $1.\n" - cat < -[a|v] - - Arguments: - OUTPUT_PATH Path of the final WebM file - -a Include audio - -v Video only - -Examples: - Capture the screen without audio and save it in 'output.webm' - record-my-screen.sh output.webm -v -EOF -} - -OUTPUT_PATH="${1:-}" -[ -z "${OUTPUT_PATH}" ] && { - usage 'OUTPUT_PATH' - exit 2 -} -shift - -SCREEN_RESOLUTION="$(xrandr -q --current | grep '[*]' | awk '{print$1}')" -DEFAULT_FLAGS=" --f x11grab --s $SCREEN_RESOLUTION --i :0 -" -while getopts 'av' flag; do - case "$flag" in - a) - FLAGS="$DEFAULT_FLAGS" - ;; - v) - FLAGS="$DEFAULT_FLAGS -f pulse -i default" - ;; - *) - ;; - esac -done - -if [ -z "${FLAGS:-}" ]; then - usage '[a|b]' - exit 2 -fi - -# shellcheck disable=2086 -ffmpeg $FLAGS "$OUTPUT_PATH" - -# https://github.com/georgmartius/vid.stab -- cgit v1.2.3 From 0cdfec3802b031483bb480904e86a262a6e91401 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:44:05 -0300 Subject: cron/: Remove ad-hoc cron scripts, which were either deleted or inlined in configuration.nix --- cron/annex.sh | 15 ------------ cron/archive-box.sh | 53 ----------------------------------------- cron/copy-box-backups.sh | 8 ------- cron/delever-enqueued-emails.sh | 4 ---- cron/gpg-cron-setup.sh | 7 ------ cron/mbox-archive.sh | 5 ---- cron/mr-remotes-backup.sh | 8 ------- cron/notmuch-dump.sh | 6 ----- cron/repo-update.sh | 7 ------ cron/report-summary.sh | 9 ------- cron/run-local-backup.sh | 38 ----------------------------- cron/sync-mail.sh | 5 ---- 12 files changed, 165 deletions(-) delete mode 100755 cron/annex.sh delete mode 100755 cron/archive-box.sh delete mode 100755 cron/copy-box-backups.sh delete mode 100755 cron/delever-enqueued-emails.sh delete mode 100644 cron/gpg-cron-setup.sh delete mode 100755 cron/mbox-archive.sh delete mode 100755 cron/mr-remotes-backup.sh delete mode 100755 cron/notmuch-dump.sh delete mode 100755 cron/repo-update.sh delete mode 100755 cron/report-summary.sh delete mode 100755 cron/run-local-backup.sh delete mode 100755 cron/sync-mail.sh diff --git a/cron/annex.sh b/cron/annex.sh deleted file mode 100755 index 6443a05..0000000 --- a/cron/annex.sh +++ /dev/null @@ -1,15 +0,0 @@ -#!/bin/sh -set -eux - -# Required for properly running Git Annex, related issue: -# https://git-annex.branchable.com/bugs/assistant_crashes_in_TransferScanner/ -export LANG=C.UTF-8 -AWS_ACCESS_KEY_ID="$(cat ~/annex/secret/AWS/annex/key-id.txt)" -AWS_SECRET_ACCESS_KEY="$(cat ~/annex/secret/AWS/annex/access-key.txt)" -export AWS_ACCESS_KEY_ID -export AWS_SECRET_ACCESS_KEY -# shellcheck source=/dev/null -. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" - -cd ~/annex/ -git annex sync diff --git a/cron/archive-box.sh b/cron/archive-box.sh deleted file mode 100755 index bd3298f..0000000 --- a/cron/archive-box.sh +++ /dev/null @@ -1,53 +0,0 @@ -#!/bin/sh -set -eux - -# https://archivy.github.io/ -# Derived from ArchiveBox: -# https://github.com/pirate/ArchiveBox/blob/db1f6efc934bbcdf53377bf51a064c6fd0fc5b1d/bin/archivebox-export-browser-history#L23-L37 -QUERY=$(cat < ArchiveBox.conf -[SERVER_CONFIG] -SECRET_KEY = c2.o66u!7!tdfohba7r7w!qhgb9.+1hmjtg_lfvebucus6pow3 -SAVE_MEDIA=False -EOF -sqlite3 "$TMPDB" "${QUERY}" | docker run -v "$PWD:/data" -i archivebox/archivebox add - -# Start server with: -# $ cd "$HOME/UTCLOUD/archive-box/" -# $ docker run -v $PWD:/data -it -p 8000:8000 archivebox/archivebox diff --git a/cron/copy-box-backups.sh b/cron/copy-box-backups.sh deleted file mode 100755 index 7557916..0000000 --- a/cron/copy-box-backups.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eux - -# shellcheck source=/dev/null -. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" -R='16686@ch-s010.rsync.net' - -ssh euandre.org rsync -avzP --delete-after /home/user-data/backup/ "$R:box-duplicity/" diff --git a/cron/delever-enqueued-emails.sh b/cron/delever-enqueued-emails.sh deleted file mode 100755 index 98cbafe..0000000 --- a/cron/delever-enqueued-emails.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eux - -: diff --git a/cron/gpg-cron-setup.sh b/cron/gpg-cron-setup.sh deleted file mode 100644 index 85e2400..0000000 --- a/cron/gpg-cron-setup.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh - -unset SSH_AGENT_PID -if [ "${gnupg_SSH_AUTH_SOCK_by:-0}" -ne $$ ]; then - SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" - export SSH_AUTH_SOCK -fi diff --git a/cron/mbox-archive.sh b/cron/mbox-archive.sh deleted file mode 100755 index 337cbd2..0000000 --- a/cron/mbox-archive.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -eux - -echo 'TODO: Download MBOX archive of mailing lists, see:' -echo 'https://todo.sr.ht/~sircmpwn/lists.sr.ht/162' diff --git a/cron/mr-remotes-backup.sh b/cron/mr-remotes-backup.sh deleted file mode 100755 index 272bd97..0000000 --- a/cron/mr-remotes-backup.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eux - -# shellcheck source=/dev/null -. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" -cd ~/dev/libre/ -mr -s push rsyncnet -mr -s push gitlab diff --git a/cron/notmuch-dump.sh b/cron/notmuch-dump.sh deleted file mode 100755 index 4215831..0000000 --- a/cron/notmuch-dump.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -eux - -[ -f ~/archive/notmuch-archive.today.txt ] && { - mv ~/archive/notmuch-archive.today.txt ~/archive/notmuch-archive.yesterday.txt -} -notmuch dump --output ~/archive/notmuch-archive.today.txt diff --git a/cron/repo-update.sh b/cron/repo-update.sh deleted file mode 100755 index 10f79b1..0000000 --- a/cron/repo-update.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -set -eu - -# shellcheck source=/dev/null -. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" -cd "${HOME}" -mr -s safeupdate diff --git a/cron/report-summary.sh b/cron/report-summary.sh deleted file mode 100755 index b69c0b3..0000000 --- a/cron/report-summary.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh -set -eux - -F="/tmp/cron-dbg.summary.$(date -I).euandreh.log" -if grep ^1 "$F"; then - echo 'Some report failed for today:' - grep ^1 "$F" - exit 1 -fi diff --git a/cron/run-local-backup.sh b/cron/run-local-backup.sh deleted file mode 100755 index 3630dce..0000000 --- a/cron/run-local-backup.sh +++ /dev/null @@ -1,38 +0,0 @@ -#!/bin/sh -set -eux - -LABEL="${1:-job}" - -# shellcheck source=/dev/null -. "$HOME/dev/libre/dotfiles/cron/gpg-cron-setup.sh" - -set +x -BORG_PASSPHRASE="$(pass show Borg)" -set -x - -export BORG_PASSPHRASE -R='16686@ch-s010.rsync.net' -export BORG_REMOTE_PATH='borg1' - -# env has BORG_PASSPHRASE='...' BORG_REMOTE_PATH='...' -# borg init -e repokey-blake2 $R:desktop-borg - -# What about the ~/Downloads folder? -borg create \ - --exclude ~/.cache/ \ - --exclude ~/Downloads/ \ - --verbose \ - --stats \ - --progress \ - --compression lzma,9 \ - "$R:desktop-borg::{hostname}-{now}-$LABEL" \ - ~/ - -borg prune \ - --verbose \ - --list \ - --keep-within=6m \ - --keep-weekly=52 \ - --keep-monthly=24 \ - --save-space \ - $R:desktop-borg diff --git a/cron/sync-mail.sh b/cron/sync-mail.sh deleted file mode 100755 index cdee275..0000000 --- a/cron/sync-mail.sh +++ /dev/null @@ -1,5 +0,0 @@ -#!/bin/sh -set -eux - -mbsync -a -notmuch new -- cgit v1.2.3 From 19a5c0d645c0cc4787b09366cce0a40d5e721d81 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:44:28 -0300 Subject: git/: Remove unused files --- git/gitattributes | 3 --- git/gitignore | 10 ---------- 2 files changed, 13 deletions(-) delete mode 100644 git/gitattributes delete mode 100644 git/gitignore diff --git a/git/gitattributes b/git/gitattributes deleted file mode 100644 index 6ef9672..0000000 --- a/git/gitattributes +++ /dev/null @@ -1,3 +0,0 @@ -*.gif diff=image -*.jpg diff=image -*.png diff=image diff --git a/git/gitignore b/git/gitignore deleted file mode 100644 index ac4f89f..0000000 --- a/git/gitignore +++ /dev/null @@ -1,10 +0,0 @@ -playground.clj -req.http -.postman-ns -*.swp -/gemset.nix -/.ignore -/tmp/ -/patches/ -*.nix -nohup.out -- cgit v1.2.3 From 47eb156e9aa1472cee47558bd2a3bcd2176dc268 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:45:04 -0300 Subject: git mv guix/os.scm os.scm --- guix/os.scm | 181 ------------------------------------------------------------ os.scm | 181 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 181 insertions(+), 181 deletions(-) delete mode 100644 guix/os.scm create mode 100644 os.scm diff --git a/guix/os.scm b/guix/os.scm deleted file mode 100644 index 972c42d..0000000 --- a/guix/os.scm +++ /dev/null @@ -1,181 +0,0 @@ -(use-modules (gnu) - (srfi srfi-1)) -(use-service-modules desktop networking ssh xorg) - -(operating-system - (locale "en_US.utf8") - (timezone "America/Sao_Paulo") - (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape" "esperanto:qwerty"))) - (host-name "velhinho-guix-system") - (users (cons* (user-account - (name "andreh") - (comment "andreh") - (group "users") - (home-directory "/home/andreh") - (supplementary-groups - '("wheel" "netdev" "audio" "video"))) - %base-user-accounts)) - (packages - (append - (list (package-inputs guix)) - (map (compose list specification->package+output symbol->string) - '(;; Base - nss-certs ;; suggested by Guix - - ;; Personal data tools - git - git:send-email - git-lfs - git-annex - myrepos - git-remote-gcrypt - git-crypt - fossil - git-open - borg - gnupg - syncthing - - ;; CLI tools - groff - mktorrent - diffoscope - bash-completion - youtube-dl - ;;; wget - both already included? - ;;; curl - tmux - ;; tmuxinator - sox ; SoX - Sound eXchange - gettext - rlwrap - jq - ;; rq - openvpn - xclip - psmisc ; killall - xkill - ;; gksu - tree - unzip - feh - bind:utils - rsync - moreutils - graphviz - ;; graph-easy - ;; mkpasswd, is this required? - direnv - recutils - sqlite - trash-cli - entr ; need patch - mailutils - ffmpeg - ledger - gnuplot - ranger - electrum - zathura - ;; zathura-ps - ;; zathura-pdf-poppler - ;; zathura-djvu - ;; zathura-cb - ;; zathura-pdf-mupdf - st - pavucontrol - weechat - newsboat - acpi - xsel - pinentry - nvi - go-github-com-junegunn-fzf - autojump - calcurse - pandoc - openssh - festival ;; TTS software - - ;; Mail - notmuch - isync - neomutt - - ;; Programming tools - perl - shellcheck - ;; mrsh - dash - - ;; POSIX - ;; bmake - ;; byacc - ;; pax - flex - ;;; gnugrep - already included? - - ;; Containers and VMs - qemu - - ;; xmonad - xmodmap - xmessage - dmenu - ;; escrotum - xbacklight - playerctl - ;; lightdm - fvwm ; xpmroot - xmonad - ghc - ghc-xmonad-contrib - xmobar - remembering - arandr - alsa-utils ; for xmonad volume controls - xset - xmodmap - setxkbmap - - ;; GUI programs - audacity - zbar - ;; fractal - dino - calibre - vlc - gpodder - qutebrowser - blueman - bluez)) - %base-packages)) - (services - (append - (list (service gnome-desktop-service-type) - (set-xorg-configuration - (xorg-configuration - (keyboard-layout keyboard-layout)))) - %desktop-services)) - (bootloader - (bootloader-configuration - (bootloader grub-efi-bootloader) - (target "/boot/efi") - (keyboard-layout keyboard-layout))) - (mapped-devices - (list (mapped-device - (source - (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) - (target "cryptroot") - (type luks-device-mapping)))) - (file-systems - (cons* (file-system - (mount-point "/") - (device "/dev/mapper/cryptroot") - (type "btrfs") - (dependencies mapped-devices)) - (file-system - (mount-point "/boot/efi") - (device (uuid "1B26-9F4E" 'fat32)) - (type "vfat")) - %base-file-systems))) diff --git a/os.scm b/os.scm new file mode 100644 index 0000000..972c42d --- /dev/null +++ b/os.scm @@ -0,0 +1,181 @@ +(use-modules (gnu) + (srfi srfi-1)) +(use-service-modules desktop networking ssh xorg) + +(operating-system + (locale "en_US.utf8") + (timezone "America/Sao_Paulo") + (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape" "esperanto:qwerty"))) + (host-name "velhinho-guix-system") + (users (cons* (user-account + (name "andreh") + (comment "andreh") + (group "users") + (home-directory "/home/andreh") + (supplementary-groups + '("wheel" "netdev" "audio" "video"))) + %base-user-accounts)) + (packages + (append + (list (package-inputs guix)) + (map (compose list specification->package+output symbol->string) + '(;; Base + nss-certs ;; suggested by Guix + + ;; Personal data tools + git + git:send-email + git-lfs + git-annex + myrepos + git-remote-gcrypt + git-crypt + fossil + git-open + borg + gnupg + syncthing + + ;; CLI tools + groff + mktorrent + diffoscope + bash-completion + youtube-dl + ;;; wget - both already included? + ;;; curl + tmux + ;; tmuxinator + sox ; SoX - Sound eXchange + gettext + rlwrap + jq + ;; rq + openvpn + xclip + psmisc ; killall + xkill + ;; gksu + tree + unzip + feh + bind:utils + rsync + moreutils + graphviz + ;; graph-easy + ;; mkpasswd, is this required? + direnv + recutils + sqlite + trash-cli + entr ; need patch + mailutils + ffmpeg + ledger + gnuplot + ranger + electrum + zathura + ;; zathura-ps + ;; zathura-pdf-poppler + ;; zathura-djvu + ;; zathura-cb + ;; zathura-pdf-mupdf + st + pavucontrol + weechat + newsboat + acpi + xsel + pinentry + nvi + go-github-com-junegunn-fzf + autojump + calcurse + pandoc + openssh + festival ;; TTS software + + ;; Mail + notmuch + isync + neomutt + + ;; Programming tools + perl + shellcheck + ;; mrsh + dash + + ;; POSIX + ;; bmake + ;; byacc + ;; pax + flex + ;;; gnugrep - already included? + + ;; Containers and VMs + qemu + + ;; xmonad + xmodmap + xmessage + dmenu + ;; escrotum + xbacklight + playerctl + ;; lightdm + fvwm ; xpmroot + xmonad + ghc + ghc-xmonad-contrib + xmobar + remembering + arandr + alsa-utils ; for xmonad volume controls + xset + xmodmap + setxkbmap + + ;; GUI programs + audacity + zbar + ;; fractal + dino + calibre + vlc + gpodder + qutebrowser + blueman + bluez)) + %base-packages)) + (services + (append + (list (service gnome-desktop-service-type) + (set-xorg-configuration + (xorg-configuration + (keyboard-layout keyboard-layout)))) + %desktop-services)) + (bootloader + (bootloader-configuration + (bootloader grub-efi-bootloader) + (target "/boot/efi") + (keyboard-layout keyboard-layout))) + (mapped-devices + (list (mapped-device + (source + (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) + (target "cryptroot") + (type luks-device-mapping)))) + (file-systems + (cons* (file-system + (mount-point "/") + (device "/dev/mapper/cryptroot") + (type "btrfs") + (dependencies mapped-devices)) + (file-system + (mount-point "/boot/efi") + (device (uuid "1B26-9F4E" 'fat32)) + (type "vfat")) + %base-file-systems))) -- cgit v1.2.3 From 2fefc7a55bf143a4d6ef5914670c2d0b9a92ee8d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:45:33 -0300 Subject: guix/channels.scm: Remove unused channels file --- guix/channels.scm | 12 ------------ 1 file changed, 12 deletions(-) delete mode 100644 guix/channels.scm diff --git a/guix/channels.scm b/guix/channels.scm deleted file mode 100644 index 4a8fa99..0000000 --- a/guix/channels.scm +++ /dev/null @@ -1,12 +0,0 @@ -(append - (list - (channel - (name 'xyz-euandreh) - (url "git://git.euandreh.xyz/package-repository") - (branch "main") - (introduction - (make-channel-introduction - "d749e053e6db365069cb9b2ef47a78b06f9e7361" - (openpgp-fingerprint - "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060"))))) - %default-channels) -- cgit v1.2.3 From 5f5b7f23073150e9ce68d8d83027ea8a2b9ffced Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:48:45 -0300 Subject: src/bin/{duplex,qr,rfc}: Add new executable utilities --- src/bin/duplex | 140 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ src/bin/qr | 56 +++++++++++++++++++++++ src/bin/rfc | 98 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 294 insertions(+) create mode 100755 src/bin/duplex create mode 100755 src/bin/qr create mode 100755 src/bin/rfc diff --git a/src/bin/duplex b/src/bin/duplex new file mode 100755 index 0000000..12b254e --- /dev/null +++ b/src/bin/duplex @@ -0,0 +1,140 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + duplex [-q QUALITY] [FILE...] + duplex -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -q QUALITY choose the print quality, either: + low, medium (default) or high. + -h, --help show this message + + Examples: + + Print the given PostScript file with default quality: + duplex f1.ps + + Print multiple PDF files with high quality: + duplex -q high *.pdf + + Print the file from STDIN: + cat f2.ps | duplex +EOF +} + +mkdtemp() { + name="$(echo 'mkstemp(template)' | + m4 -D template="${TMPDIR:-/tmp}/m4-tmpname.")" + rm -f "$name" + mkdir "$name" + echo "$name" +} + +n_pages() { + pdftk "$1" dump_data | awk '/NumberOfPages/ { print $2 }' +} + +main() { + if file -b in-tmp | grep -q PostScript; then + ps2pdf in-tmp in.pdf + elif file -b in-tmp | grep -q PDF; then + cp in-tmp in.pdf + else + printf "Don't know how to duplex print input file:\n" >&2 + file in-tmp >&2 + printf '\nGive me either a PostScript or PDF file instead.\n' >&2 + exit 2 + fi + + FULL="$(n_pages in.pdf)" + if [ "$FULL" = '1' ]; then + lp in.pdf + return + fi + + pdftk A=in.pdf cat Aodd output odd.pdf + pdftk A=in.pdf cat Aeven output even.pdf + + NODD="$(n_pages odd.pdf)" + NEVEN="$(n_pages even.pdf)" + + printf 'Printing odd pages...\n' >&2 + lp odd.pdf + printf 'Has printing finished yet? Once it does, reload the pages and hit it enter to continue. ' + read -r < /dev/tty + lp even.pdf + + if [ "$NODD" != "$NEVEN" ]; then + printf '\n' | lp + fi +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +lpoptions -o PrintQuality=standard +while getopts 'hq:' flag; do + case "$flag" in + q) + case "$OPTARG" in + low) + lpoptions -o PrintQuality=draft + ;; + medium) + lpoptions -o PrintQuality=standard + ;; + high) + lpoptions -o PrintQuality=high + ;; + *) + echo "Bad QUALITY option: \"$OPTARG\"" >&2 + exit 2 + ;; + esac + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +OLDDIR="$PWD" +cd "$(mkdtemp)" #FIXME +if [ -z "${1:-}" ]; then + cat - > in-tmp + main +else + for f in "$@"; do + # ABS="$(echo "$(cd "$(dirname "$f")"; pwd -P)/$(basename "$f")")" + # echo "$ABS" + cp "$OLDDIR/$(basename "$f")" in-tmp + main + done +fi diff --git a/src/bin/qr b/src/bin/qr new file mode 100755 index 0000000..0fce234 --- /dev/null +++ b/src/bin/qr @@ -0,0 +1,56 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + qr [-s PIXEL_SIZE] [DATA|-] + qr -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -s size of the pixel (default 10) + -h, --help show this help message +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +PIXEL_SIZE=10 +while getopts 's:h' flag; do + case "$flag" in + s) + PIXEL_SIZE="$OPTARG" + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + + +echo "${1:-$(cat -)}" | qrencode -s "$PIXEL_SIZE" -o- | feh - diff --git a/src/bin/rfc b/src/bin/rfc new file mode 100755 index 0000000..27d5357 --- /dev/null +++ b/src/bin/rfc @@ -0,0 +1,98 @@ +#!/bin/sh +set -eu +set -o pipefail + +usage() { + cat <<-'EOF' + Usage: + rfc [-w FORMAT] RFC_NUMBER + rfc -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -w FORMAT Choose between text (txt, the default) and + JSON (json) + -h, --help show this message +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +FORMAT='txt' +while getopts 'w:h' flag; do + case "$flag" in + w) + case "$OPTARG" in + json|txt) + FORMAT="$OPTARG" + ;; + *) + printf 'Bad FORMAT options: %s\n' \ + "$OPTARG" >&2 + exit 2 + ;; + esac + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + + +if [ -z "${1:-}" ]; then + echo 'Missing argument RFC_NUMBER' >&2 + usage >&2 + exit 2 +fi + +if [ ! -e "$HOME/.local/share/doc/rfc/rfc$1.$FORMAT" ]; then + printf 'Given RFC_NUMBER "%s" does not exist\n' "$1" >&2 + exit 2 +fi + +view() { + if [ -t 1 ]; then + $PAGER + else + cat - + fi +} + +case "$FORMAT" in + txt) + cat "$HOME/.local/share/doc/rfc/rfc$1.txt" | view + ;; + json) + jq < "$HOME/.local/share/doc/rfc/rfc$1.json" | view + ;; + *) + printf 'Unreachable: unsupported FORMAT "%s"\n' \ + "$FORMAT" >&2 + exit 2 + ;; +esac -- cgit v1.2.3 From 569087787f9f2560ece03d8b2b28119da8374576 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 15:49:07 -0300 Subject: src/bin/copy: Promote from shell alias to executable --- src/bin/copy | 67 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 67 insertions(+) create mode 100755 src/bin/copy diff --git a/src/bin/copy b/src/bin/copy new file mode 100755 index 0000000..04dc265 --- /dev/null +++ b/src/bin/copy @@ -0,0 +1,67 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + copy [-n] < STDIN + copy -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -n remove newlines + -h, --help show this message + + Examples: + + Copy numbers to clipboard: + seq 10 | copy + + Copy string without newline: + echo 'with automatic newline' | copy -n +EOF +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +TRIM=false +while getopts 'nh' flag; do + case "$flag" in + n) + TRIM=true + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +if [ "$TRIM" = 'true' ]; then + cat - | tr -d '\n' | xclip -sel clip +else + cat - | xclip -sel clip +fi -- cgit v1.2.3 From 835d902eda49ce39b87c5b23761781c43e284518 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 17:13:25 -0300 Subject: git mv xmonad/scripts/{list-emoji,emoji-list}.txt --- xmonad/scripts/emoji-list.txt | 1432 ----------------------------------------- xmonad/scripts/list-emoji.txt | 1432 +++++++++++++++++++++++++++++++++++++++++ 2 files changed, 1432 insertions(+), 1432 deletions(-) delete mode 100755 xmonad/scripts/emoji-list.txt create mode 100644 xmonad/scripts/list-emoji.txt diff --git a/xmonad/scripts/emoji-list.txt b/xmonad/scripts/emoji-list.txt deleted file mode 100755 index 06b5a58..0000000 --- a/xmonad/scripts/emoji-list.txt +++ /dev/null @@ -1,1432 +0,0 @@ -grinning face 😀 -smiling face with open mouth 😃 -smiling face with open mouth & smiling eyes 😄 -grinning face with smiling eyes 😁 -smiling face with open mouth & closed eyes 😆 -smiling face with open mouth & cold sweat 😅 -face with tears of joy 😂 -rolling on the floor laughing 🤣 -smiling face ☺️ -smiling face with smiling eyes 😊 -smiling face with halo 😇 -slightly smiling face 🙂 -upside-down face 🙃 -winking face 😉 -relieved face 😌 -smiling face with heart-eyes 😍 -face blowing a kiss 😘 -kissing face 😗 -kissing face with smiling eyes 😙 -kissing face with closed eyes 😚 -face savouring delicious food 😋 -face with stuck-out tongue & winking eye 😜 -face with stuck-out tongue & closed eyes 😝 -face with stuck-out tongue 😛 -money-mouth face 🤑 -hugging face 🤗 -nerd face 🤓 -smiling face with sunglasses 😎 -clown face 🤡 -cowboy hat face 🤠 -smirking face 😏 -unamused face 😒 -disappointed face 😞 -pensive face 😔 -worried face 😟 -confused face 😕 -slightly frowning face 🙁 -frowning face ☹️ -persevering face 😣 -confounded face 😖 -tired face 😫 -weary face 😩 -face with steam from nose 😤 -angry face 😠 -pouting face 😡 -face without mouth 😶 -neutral face 😐 -expressionless face 😑 -hushed face 😯 -frowning face with open mouth 😦 -anguished face 😧 -face with open mouth 😮 -astonished face 😲 -dizzy face 😵 -flushed face 😳 -face screaming in fear 😱 -fearful face 😨 -face with open mouth & cold sweat 😰 -crying face 😢 -disappointed but relieved face 😥 -drooling face 🤤 -loudly crying face 😭 -face with cold sweat 😓 -sleepy face 😪 -sleeping face 😴 -face with rolling eyes 🙄 -thinking face 🤔 -lying face 🤥 -grimacing face 😬 -zipper-mouth face 🤐 -nauseated face 🤢 -sneezing face 🤧 -face with medical mask 😷 -face with thermometer 🤒 -face with head-bandage 🤕 -smiling face with horns 😈 -angry face with horns 👿 -ogre 👹 -goblin 👺 -pile of poo 💩 -ghost 👻 -skull 💀 -skull and crossbones ☠️ -alien 👽 -alien monster 👾 -robot face 🤖 -jack-o-lantern 🎃 -smiling cat face with open mouth 😺 -grinning cat face with smiling eyes 😸 -cat face with tears of joy 😹 -smiling cat face with heart-eyes 😻 -cat face with wry smile 😼 -kissing cat face with closed eyes 😽 -weary cat face 🙀 -crying cat face 😿 -pouting cat face 😾 -open hands 👐 -raising hands 🙌 -clapping hands 👏 -folded hands 🙏 -handshake 🤝 -thumbs up 👍 -thumbs down 👎 -oncoming fist 👊 -raised fist ✊ -left-facing fist 🤛 -right-facing fist 🤜 -crossed fingers 🤞 -victory hand ✌️ -sign of the horns 🤘 -OK hand 👌 -backhand index pointing left 👈 -backhand index pointing right 👉 -backhand index pointing up 👆 -backhand index pointing down 👇 -index pointing up ☝️ -raised hand ✋ -raised back of hand 🤚 -raised hand with fingers splayed 🖐 -vulcan salute 🖖 -waving hand 👋 -call me hand 🤙 -flexed biceps 💪 -middle finger 🖕 -writing hand ✍️ -selfie 🤳 -nail polish 💅 -ring 💍 -lipstick 💄 -kiss mark 💋 -mouth 👄 -tongue 👅 -ear 👂 -nose 👃 -footprints 👣 -eye 👁 -eyes 👀 -speaking head 🗣 -bust in silhouette 👤 -busts in silhouette 👥 -baby 👶 -boy 👦 -girl 👧 -man 👨 -woman 👩 -blond-haired woman 👱‍♀ -blond-haired person 👱 -old man 👴 -old woman 👵 -man with Chinese cap 👲 -woman wearing turban 👳‍♀ -person wearing turban 👳 -woman police officer 👮‍♀ -police officer 👮 -woman construction worker 👷‍♀ -construction worker 👷 -woman guard 💂‍♀ -guard 💂 -woman detective 🕵️‍♀️ -detective 🕵 -woman health worker 👩‍⚕ -man health worker 👨‍⚕ -woman farmer 👩‍🌾 -man farmer 👨‍🌾 -woman cook 👩‍🍳 -man cook 👨‍🍳 -woman student 👩‍🎓 -man student 👨‍🎓 -woman singer 👩‍🎤 -man singer 👨‍🎤 -woman teacher 👩‍🏫 -man teacher 👨‍🏫 -woman factory worker 👩‍🏭 -man factory worker 👨‍🏭 -woman technologist 👩‍💻 -man technologist 👨‍💻 -woman office worker 👩‍💼 -man office worker 👨‍💼 -woman mechanic 👩‍🔧 -man mechanic 👨‍🔧 -woman scientist 👩‍🔬 -man scientist 👨‍🔬 -woman artist 👩‍🎨 -man artist 👨‍🎨 -woman firefighter 👩‍🚒 -man firefighter 👨‍🚒 -woman pilot 👩‍✈ -man pilot 👨‍✈ -woman astronaut 👩‍🚀 -man astronaut 👨‍🚀 -woman judge 👩‍⚖ -man judge 👨‍⚖ -Mrs. Claus 🤶 -Santa Claus 🎅 -princess 👸 -prince 🤴 -bride with veil 👰 -man in tuxedo 🤵 -baby angel 👼 -pregnant woman 🤰 -woman bowing 🙇‍♀ -person bowing 🙇 -person tipping hand 💁 -man tipping hand 💁‍♂ -person gesturing NO 🙅 -man gesturing NO 🙅‍♂ -person gesturing OK 🙆 -man gesturing OK 🙆‍♂ -person raising hand 🙋 -man raising hand 🙋‍♂ -woman facepalming 🤦‍♀ -man facepalming 🤦‍♂ -woman shrugging 🤷‍♀ -man shrugging 🤷‍♂ -person pouting 🙎 -man pouting 🙎‍♂ -person frowning 🙍 -man frowning 🙍‍♂ -person getting haircut 💇 -man getting haircut 💇‍♂ -person getting massage 💆 -man getting massage 💆‍♂ -man in business suit levitating 🕴 -woman dancing 💃 -man dancing 🕺 -people with bunny ears partying 👯 -men with bunny ears partying 👯‍♂ -woman walking 🚶‍♀ -person walking 🚶 -woman running 🏃‍♀ -person running 🏃 -man and woman holding hands 👫 -two women holding hands 👭 -two men holding hands 👬 -couple with heart 💑 -couple with heart: woman woman 👩‍❤️‍👩 -couple with heart: man man 👨‍❤️‍👨 -kiss 💏 -kiss: woman woman 👩‍❤️‍💋‍👩 -kiss: man man 👨‍❤️‍💋‍👨 -family 👪 -family: man woman girl 👨‍👩‍👧 -family: man woman girl boy 👨‍👩‍👧‍👦 -family: man woman boy boy 👨‍👩‍👦‍👦 -family: man woman girl girl 👨‍👩‍👧‍👧 -family: woman woman boy 👩‍👩‍👦 -family: woman woman girl 👩‍👩‍👧 -family: woman woman girl boy 👩‍👩‍👧‍👦 -family: woman woman boy boy 👩‍👩‍👦‍👦 -family: woman woman girl girl 👩‍👩‍👧‍👧 -family: man man boy 👨‍👨‍👦 -family: man man girl 👨‍👨‍👧 -family: man man girl boy 👨‍👨‍👧‍👦 -family: man man boy boy 👨‍👨‍👦‍👦 -family: man man girl girl 👨‍👨‍👧‍👧 -family: woman boy 👩‍👦 -family: woman girl 👩‍👧 -family: woman girl boy 👩‍👧‍👦 -family: woman boy boy 👩‍👦‍👦 -family: woman girl girl 👩‍👧‍👧 -family: man boy 👨‍👦 -family: man girl 👨‍👧 -family: man girl boy 👨‍👧‍👦 -family: man boy boy 👨‍👦‍👦 -family: man girl girl 👨‍👧‍👧 -woman’s clothes 👚 -t-shirt 👕 -jeans 👖 -necktie 👔 -dress 👗 -bikini 👙 -kimono 👘 -high-heeled shoe 👠 -woman’s sandal 👡 -woman’s boot 👢 -man’s shoe 👞 -running shoe 👟 -woman’s hat 👒 -top hat 🎩 -graduation cap 🎓 -crown 👑 -rescue worker’s helmet ⛑ -school backpack 🎒 -clutch bag 👝 -purse 👛 -handbag 👜 -briefcase 💼 -glasses 👓 -sunglasses 🕶 -closed umbrella 🌂 -umbrella ☂️ -dog face 🐶 -cat face 🐱 -mouse face 🐭 -hamster face 🐹 -rabbit face 🐰 -fox face 🦊 -bear face 🐻 -panda face 🐼 -koala 🐨 -tiger face 🐯 -lion face 🦁 -cow face 🐮 -pig face 🐷 -pig nose 🐽 -frog face 🐸 -monkey face 🐵 -see-no-evil monkey 🙈 -hear-no-evil monkey 🙉 -speak-no-evil monkey 🙊 -monkey 🐒 -chicken 🐔 -penguin 🐧 -bird 🐦 -baby chick 🐤 -hatching chick 🐣 -front-facing baby chick 🐥 -duck 🦆 -eagle 🦅 -owl 🦉 -bat 🦇 -wolf face 🐺 -boar 🐗 -horse face 🐴 -unicorn face 🦄 -honeybee 🐝 -bug 🐛 -butterfly 🦋 -snail 🐌 -spiral shell 🐚 -lady beetle 🐞 -ant 🐜 -spider 🕷 -spider web 🕸 -turtle 🐢 -snake 🐍 -lizard 🦎 -scorpion 🦂 -crab 🦀 -squid 🦑 -octopus 🐙 -shrimp 🦐 -tropical fish 🐠 -fish 🐟 -blowfish 🐡 -dolphin 🐬 -shark 🦈 -spouting whale 🐳 -whale 🐋 -crocodile 🐊 -leopard 🐆 -tiger 🐅 -water buffalo 🐃 -ox 🐂 -cow 🐄 -deer 🦌 -camel 🐪 -two-hump camel 🐫 -elephant 🐘 -rhinoceros 🦏 -gorilla 🦍 -horse 🐎 -pig 🐖 -goat 🐐 -ram 🐏 -sheep 🐑 -dog 🐕 -poodle 🐩 -cat 🐈 -rooster 🐓 -turkey 🦃 -dove 🕊 -rabbit 🐇 -mouse 🐁 -rat 🐀 -chipmunk 🐿 -paw prints 🐾 -dragon 🐉 -dragon face 🐲 -cactus 🌵 -Christmas tree 🎄 -evergreen tree 🌲 -deciduous tree 🌳 -palm tree 🌴 -seedling 🌱 -herb 🌿 -shamrock ☘️ -four leaf clover 🍀 -pine decoration 🎍 -tanabata tree 🎋 -leaf fluttering in wind 🍃 -fallen leaf 🍂 -maple leaf 🍁 -mushroom 🍄 -sheaf of rice 🌾 -bouquet 💐 -tulip 🌷 -rose 🌹 -wilted flower 🥀 -sunflower 🌻 -blossom 🌼 -cherry blossom 🌸 -hibiscus 🌺 -globe showing Americas 🌎 -globe showing Europe-Africa 🌍 -globe showing Asia-Australia 🌏 -full moon 🌕 -waning gibbous moon 🌖 -last quarter moon 🌗 -waning crescent moon 🌘 -new moon 🌑 -waxing crescent moon 🌒 -first quarter moon 🌓 -waxing gibbous moon 🌔 -new moon face 🌚 -full moon with face 🌝 -sun with face 🌞 -first quarter moon with face 🌛 -last quarter moon with face 🌜 -crescent moon 🌙 -dizzy 💫 -white medium star ⭐️ -glowing star 🌟 -sparkles ✨ -high voltage ⚡️ -fire 🔥 -collision 💥 -comet ☄ -sun ☀️ -sun behind small cloud 🌤 -sun behind cloud ⛅️ -sun behind large cloud 🌥 -sun behind rain cloud 🌦 -rainbow 🌈 -cloud ☁️ -cloud with rain 🌧 -cloud with lightning and rain ⛈ -cloud with lightning 🌩 -cloud with snow 🌨 -snowman ☃️ -snowman without snow ⛄️ -snowflake ❄️ -wind face 🌬 -dashing away 💨 -tornado 🌪 -fog 🌫 -water wave 🌊 -droplet 💧 -sweat droplets 💦 -umbrella with rain drops ☔️ -green apple 🍏 -red apple 🍎 -pear 🍐 -tangerine 🍊 -lemon 🍋 -banana 🍌 -watermelon 🍉 -grapes 🍇 -strawberry 🍓 -melon 🍈 -cherries 🍒 -peach 🍑 -pineapple 🍍 -kiwi fruit 🥝 -avocado 🥑 -tomato 🍅 -eggplant 🍆 -cucumber 🥒 -carrot 🥕 -ear of corn 🌽 -hot pepper 🌶 -potato 🥔 -roasted sweet potato 🍠 -chestnut 🌰 -peanuts 🥜 -honey pot 🍯 -croissant 🥐 -bread 🍞 -baguette bread 🥖 -cheese wedge 🧀 -egg 🥚 -cooking 🍳 -bacon 🥓 -pancakes 🥞 -fried shrimp 🍤 -poultry leg 🍗 -meat on bone 🍖 -pizza 🍕 -hot dog 🌭 -hamburger 🍔 -french fries 🍟 -stuffed flatbread 🥙 -taco 🌮 -burrito 🌯 -green salad 🥗 -shallow pan of food 🥘 -spaghetti 🍝 -steaming bowl 🍜 -pot of food 🍲 -fish cake with swirl 🍥 -sushi 🍣 -bento box 🍱 -curry rice 🍛 -cooked rice 🍚 -rice ball 🍙 -rice cracker 🍘 -oden 🍢 -dango 🍡 -shaved ice 🍧 -ice cream 🍨 -soft ice cream 🍦 -shortcake 🍰 -birthday cake 🎂 -custard 🍮 -lollipop 🍭 -candy 🍬 -chocolate bar 🍫 -popcorn 🍿 -doughnut 🍩 -cookie 🍪 -glass of milk 🥛 -baby bottle 🍼 -hot beverage ☕️ -teacup without handle 🍵 -sake 🍶 -beer mug 🍺 -clinking beer mugs 🍻 -clinking glasses 🥂 -wine glass 🍷 -tumbler glass 🥃 -cocktail glass 🍸 -tropical drink 🍹 -bottle with popping cork 🍾 -spoon 🥄 -fork and knife 🍴 -fork and knife with plate 🍽 -soccer ball ⚽️ -basketball 🏀 -american football 🏈 -baseball ⚾️ -tennis 🎾 -volleyball 🏐 -rugby football 🏉 -pool 8 ball 🎱 -ping pong 🏓 -badminton 🏸 -goal net 🥅 -ice hockey 🏒 -field hockey 🏑 -cricket 🏏 -flag in hole ⛳️ -bow and arrow 🏹 -fishing pole 🎣 -boxing glove 🥊 -martial arts uniform 🥋 -ice skate ⛸ -skis 🎿 -skier ⛷ -snowboarder 🏂 -woman lifting weights 🏋️‍♀️ -person lifting weights 🏋 -person fencing 🤺 -women wrestling 🤼‍♀ -men wrestling 🤼‍♂ -woman cartwheeling 🤸‍♀ -man cartwheeling 🤸‍♂ -woman bouncing ball ⛹️‍♀️ -person bouncing ball ⛹ -woman playing handball 🤾‍♀ -man playing handball 🤾‍♂ -woman golfing 🏌️‍♀️ -person golfing 🏌 -woman surfing 🏄‍♀ -person surfing 🏄 -woman swimming 🏊‍♀ -person swimming 🏊 -woman playing water polo 🤽‍♀ -man playing water polo 🤽‍♂ -woman rowing boat 🚣‍♀ -person rowing boat 🚣 -horse racing 🏇 -woman biking 🚴‍♀ -person biking 🚴 -woman mountain biking 🚵‍♀ -person mountain biking 🚵 -running shirt 🎽 -sports medal 🏅 -military medal 🎖 -1st place medal 🥇 -2nd place medal 🥈 -3rd place medal 🥉 -trophy 🏆 -rosette 🏵 -reminder ribbon 🎗 -ticket 🎫 -admission tickets 🎟 -circus tent 🎪 -woman juggling 🤹‍♀ -man juggling 🤹‍♂ -performing arts 🎭 -artist palette 🎨 -clapper board 🎬 -microphone 🎤 -headphone 🎧 -musical score 🎼 -musical keyboard 🎹 -drum 🥁 -saxophone 🎷 -trumpet 🎺 -guitar 🎸 -violin 🎻 -game die 🎲 -direct hit 🎯 -bowling 🎳 -video game 🎮 -slot machine 🎰 -automobile 🚗 -taxi 🚕 -sport utility vehicle 🚙 -bus 🚌 -trolleybus 🚎 -racing car 🏎 -police car 🚓 -ambulance 🚑 -fire engine 🚒 -minibus 🚐 -delivery truck 🚚 -articulated lorry 🚛 -tractor 🚜 -kick scooter 🛴 -bicycle 🚲 -motor scooter 🛵 -motorcycle 🏍 -police car light 🚨 -oncoming police car 🚔 -oncoming bus 🚍 -oncoming automobile 🚘 -oncoming taxi 🚖 -aerial tramway 🚡 -mountain cableway 🚠 -suspension railway 🚟 -railway car 🚃 -tram car 🚋 -mountain railway 🚞 -monorail 🚝 -high-speed train 🚄 -high-speed train with bullet nose 🚅 -light rail 🚈 -locomotive 🚂 -train 🚆 -metro 🚇 -tram 🚊 -station 🚉 -helicopter 🚁 -small airplane 🛩 -airplane ✈️ -airplane departure 🛫 -airplane arrival 🛬 -rocket 🚀 -satellite 🛰 -seat 💺 -canoe 🛶 -sailboat ⛵️ -motor boat 🛥 -speedboat 🚤 -passenger ship 🛳 -ferry ⛴ -ship 🚢 -anchor ⚓️ -construction 🚧 -fuel pump ⛽️ -bus stop 🚏 -vertical traffic light 🚦 -horizontal traffic light 🚥 -world map 🗺 -moai 🗿 -Statue of Liberty 🗽 -fountain ⛲️ -Tokyo tower 🗼 -castle 🏰 -Japanese castle 🏯 -stadium 🏟 -ferris wheel 🎡 -roller coaster 🎢 -carousel horse 🎠 -umbrella on ground ⛱ -beach with umbrella 🏖 -desert island 🏝 -mountain ⛰ -snow-capped mountain 🏔 -mount fuji 🗻 -volcano 🌋 -desert 🏜 -camping 🏕 -tent ⛺️ -railway track 🛤 -motorway 🛣 -building construction 🏗 -factory 🏭 -house 🏠 -house with garden 🏡 -house 🏘 -derelict house 🏚 -office building 🏢 -department store 🏬 -Japanese post office 🏣 -post office 🏤 -hospital 🏥 -bank 🏦 -hotel 🏨 -convenience store 🏪 -school 🏫 -love hotel 🏩 -wedding 💒 -classical building 🏛 -church ⛪️ -mosque 🕌 -synagogue 🕍 -kaaba 🕋 -shinto shrine ⛩ -map of Japan 🗾 -moon viewing ceremony 🎑 -national park 🏞 -sunrise 🌅 -sunrise over mountains 🌄 -shooting star 🌠 -sparkler 🎇 -fireworks 🎆 -sunset 🌇 -cityscape at dusk 🌆 -cityscape 🏙 -night with stars 🌃 -milky way 🌌 -bridge at night 🌉 -foggy 🌁 -watch ⌚️ -mobile phone 📱 -mobile phone with arrow 📲 -laptop computer 💻 -keyboard ⌨️ -desktop computer 🖥 -printer 🖨 -computer mouse 🖱 -trackball 🖲 -joystick 🕹 -clamp 🗜 -computer disk 💽 -floppy disk 💾 -optical disk 💿 -dvd 📀 -videocassette 📼 -camera 📷 -camera with flash 📸 -video camera 📹 -movie camera 🎥 -film projector 📽 -film frames 🎞 -telephone receiver 📞 -telephone ☎️ -pager 📟 -fax machine 📠 -television 📺 -radio 📻 -studio microphone 🎙 -level slider 🎚 -control knobs 🎛 -stopwatch ⏱ -timer clock ⏲ -alarm clock ⏰ -mantelpiece clock 🕰 -hourglass ⌛️ -hourglass with flowing sand ⏳ -satellite antenna 📡 -battery 🔋 -electric plug 🔌 -light bulb 💡 -flashlight 🔦 -candle 🕯 -wastebasket 🗑 -oil drum 🛢 -money with wings 💸 -dollar banknote 💵 -yen banknote 💴 -euro banknote 💶 -pound banknote 💷 -money bag 💰 -credit card 💳 -gem stone 💎 -balance scale ⚖️ -wrench 🔧 -hammer 🔨 -hammer and pick ⚒ -hammer and wrench 🛠 -pick ⛏ -nut and bolt 🔩 -gear ⚙️ -chains ⛓ -pistol 🔫 -bomb 💣 -kitchen knife 🔪 -dagger 🗡 -crossed swords ⚔️ -shield 🛡 -cigarette 🚬 -coffin ⚰️ -funeral urn ⚱️ -amphora 🏺 -crystal ball 🔮 -prayer beads 📿 -barber pole 💈 -alembic ⚗️ -telescope 🔭 -microscope 🔬 -hole 🕳 -pill 💊 -syringe 💉 -thermometer 🌡 -toilet 🚽 -potable water 🚰 -shower 🚿 -bathtub 🛁 -person taking bath 🛀 -bellhop bell 🛎 -key 🔑 -old key 🗝 -door 🚪 -couch and lamp 🛋 -bed 🛏 -person in bed 🛌 -framed picture 🖼 -shopping bags 🛍 -shopping cart 🛒 -wrapped gift 🎁 -balloon 🎈 -carp streamer 🎏 -ribbon 🎀 -confetti ball 🎊 -party popper 🎉 -Japanese dolls 🎎 -red paper lantern 🏮 -wind chime 🎐 -envelope ✉️ -envelope with arrow 📩 -incoming envelope 📨 -e-mail 📧 -love letter 💌 -inbox tray 📥 -outbox tray 📤 -package 📦 -label 🏷 -closed mailbox with lowered flag 📪 -closed mailbox with raised flag 📫 -open mailbox with raised flag 📬 -open mailbox with lowered flag 📭 -postbox 📮 -postal horn 📯 -scroll 📜 -page with curl 📃 -page facing up 📄 -bookmark tabs 📑 -bar chart 📊 -chart increasing 📈 -chart decreasing 📉 -spiral notepad 🗒 -spiral calendar 🗓 -tear-off calendar 📆 -calendar 📅 -card index 📇 -card file box 🗃 -ballot box with ballot 🗳 -file cabinet 🗄 -clipboard 📋 -file folder 📁 -open file folder 📂 -card index dividers 🗂 -rolled-up newspaper 🗞 -newspaper 📰 -notebook 📓 -notebook with decorative cover 📔 -ledger 📒 -closed book 📕 -green book 📗 -blue book 📘 -orange book 📙 -books 📚 -open book 📖 -bookmark 🔖 -link 🔗 -paperclip 📎 -linked paperclips 🖇 -triangular ruler 📐 -straight ruler 📏 -pushpin 📌 -round pushpin 📍 -scissors ✂️ -pen 🖊 -fountain pen 🖋 -black nib ✒️ -paintbrush 🖌 -crayon 🖍 -memo 📝 -pencil ✏️ -left-pointing magnifying glass 🔍 -right-pointing magnifying glass 🔎 -locked with pen 🔏 -locked with key 🔐 -locked 🔒 -unlocked 🔓 -red heart ❤️ -yellow heart 💛 -green heart 💚 -blue heart 💙 -purple heart 💜 -black heart 🖤 -broken heart 💔 -heavy heart exclamation ❣️ -two hearts 💕 -revolving hearts 💞 -beating heart 💓 -growing heart 💗 -sparkling heart 💖 -heart with arrow 💘 -heart with ribbon 💝 -heart decoration 💟 -peace symbol ☮️ -latin cross ✝️ -star and crescent ☪️ -om 🕉 -wheel of dharma ☸️ -star of David ✡️ -dotted six-pointed star 🔯 -menorah 🕎 -yin yang ☯️ -orthodox cross ☦️ -place of worship 🛐 -Ophiuchus ⛎ -Aries ♈️ -Taurus ♉️ -Gemini ♊️ -Cancer ♋️ -Leo ♌️ -Virgo ♍️ -Libra ♎️ -Scorpius ♏️ -Sagittarius ♐️ -Capricorn ♑️ -Aquarius ♒️ -Pisces ♓️ -ID button 🆔 -atom symbol ⚛️ -Japanese “acceptable” button 🉑 -radioactive ☢️ -biohazard ☣️ -mobile phone off 📴 -vibration mode 📳 -Japanese “not free of charge” button 🈶 -Japanese “free of charge” button 🈚️ -Japanese “application” button 🈸 -Japanese “open for business” button 🈺 -Japanese “monthly amount” button 🈷️ -eight-pointed star ✴️ -VS button 🆚 -white flower 💮 -Japanese “bargain” button 🉐 -Japanese “secret” button ㊙️ -Japanese “congratulations” button ㊗️ -Japanese “passing grade” button 🈴 -Japanese “no vacancy” button 🈵 -Japanese “discount” button 🈹 -Japanese “prohibited” button 🈲 -A button (blood type) 🅰️ -B button (blood type) 🅱️ -AB button (blood type) 🆎 -CL button 🆑 -O button (blood type) 🅾️ -SOS button 🆘 -cross mark ❌ -heavy large circle ⭕️ -stop sign 🛑 -no entry ⛔️ -name badge 📛 -prohibited 🚫 -hundred points 💯 -anger symbol 💢 -hot springs ♨️ -no pedestrians 🚷 -no littering 🚯 -no bicycles 🚳 -non-potable water 🚱 -no one under eighteen 🔞 -no mobile phones 📵 -no smoking 🚭 -exclamation mark ❗️ -white exclamation mark ❕ -question mark ❓ -white question mark ❔ -double exclamation mark ‼️ -exclamation question mark ⁉️ -dim button 🔅 -bright button 🔆 -part alternation mark 〽️ -warning ⚠️ -children crossing 🚸 -trident emblem 🔱 -fleur-de-lis ⚜️ -Japanese symbol for beginner 🔰 -recycling symbol ♻️ -white heavy check mark ✅ -Japanese “reserved” button 🈯️ -chart increasing with yen 💹 -sparkle ❇️ -eight-spoked asterisk ✳️ -cross mark button ❎ -globe with meridians 🌐 -diamond with a dot 💠 -circled M Ⓜ️ -cyclone 🌀 -zzz 💤 -ATM sign 🏧 -water closet 🚾 -wheelchair symbol ♿️ -P button 🅿️ -Japanese “vacancy” button 🈳 -Japanese “service charge” button 🈂️ -passport control 🛂 -customs 🛃 -baggage claim 🛄 -left luggage 🛅 -men’s room 🚹 -women’s room 🚺 -baby symbol 🚼 -restroom 🚻 -litter in bin sign 🚮 -cinema 🎦 -antenna bars 📶 -Japanese “here” button 🈁 -input symbols 🔣 -information ℹ️ -input latin letters 🔤 -input latin lowercase 🔡 -input latin uppercase 🔠 -NG button 🆖 -OK button 🆗 -UP! button 🆙 -COOL button 🆒 -NEW button 🆕 -FREE button 🆓 -keycap: 0 0️⃣ -keycap: 1 1️⃣ -keycap: 2 2️⃣ -keycap: 3 3️⃣ -keycap: 4 4️⃣ -keycap: 5 5️⃣ -keycap: 6 6️⃣ -keycap: 7 7️⃣ -keycap: 8 8️⃣ -keycap: 9 9️⃣ -keycap 10 🔟 -input numbers 🔢 -keycap: # #️⃣ -keycap: * *️⃣ -play button ▶️ -pause button ⏸ -play or pause button ⏯ -stop button ⏹ -record button ⏺ -next track button ⏭ -last track button ⏮ -fast-forward button ⏩ -fast reverse button ⏪ -fast up button ⏫ -fast down button ⏬ -reverse button ◀️ -up button 🔼 -down button 🔽 -right arrow ➡️ -left arrow ⬅️ -up arrow ⬆️ -down arrow ⬇️ -up-right arrow ↗️ -down-right arrow ↘️ -down-left arrow ↙️ -up-left arrow ↖️ -up-down arrow ↕️ -left-right arrow ↔️ -left arrow curving right ↪️ -right arrow curving left ↩️ -right arrow curving up ⤴️ -right arrow curving down ⤵️ -shuffle tracks button 🔀 -repeat button 🔁 -repeat single button 🔂 -anticlockwise arrows button 🔄 -clockwise vertical arrows 🔃 -musical note 🎵 -musical notes 🎶 -heavy plus sign ➕ -heavy minus sign ➖ -heavy division sign ➗ -heavy multiplication x ✖️ -heavy dollar sign 💲 -currency exchange 💱 -trade mark ™️ -copyright ©️ -registered ®️ -wavy dash 〰️ -curly loop ➰ -double curly loop ➿ -END arrow 🔚 -BACK arrow 🔙 -ON! arrow 🔛 -TOP arrow 🔝 -SOON arrow 🔜 -heavy check mark ✔️ -ballot box with check ☑️ -radio button 🔘 -white circle ⚪️ -black circle ⚫️ -red circle 🔴 -blue circle 🔵 -red triangle pointed up 🔺 -red triangle pointed down 🔻 -small orange diamond 🔸 -small blue diamond 🔹 -large orange diamond 🔶 -large blue diamond 🔷 -white square button 🔳 -black square button 🔲 -black small square ▪️ -white small square ▫️ -black medium-small square ◾️ -white medium-small square ◽️ -black medium square ◼️ -white medium square ◻️ -black large square ⬛️ -white large square ⬜️ -speaker low volume 🔈 -muted speaker 🔇 -speaker medium volume 🔉 -speaker high volume 🔊 -bell 🔔 -bell with slash 🔕 -megaphone 📣 -loudspeaker 📢 -eye in speech bubble 👁‍🗨 -speech balloon 💬 -thought balloon 💭 -right anger bubble 🗯 -spade suit ♠️ -club suit ♣️ -heart suit ♥️ -diamond suit ♦️ -joker 🃏 -flower playing cards 🎴 -mahjong red dragon 🀄️ -one o’clock 🕐 -two o’clock 🕑 -three o’clock 🕒 -four o’clock 🕓 -five o’clock 🕔 -six o’clock 🕕 -seven o’clock 🕖 -eight o’clock 🕗 -nine o’clock 🕘 -ten o’clock 🕙 -eleven o’clock 🕚 -twelve o’clock 🕛 -one-thirty 🕜 -two-thirty 🕝 -three-thirty 🕞 -four-thirty 🕟 -five-thirty 🕠 -six-thirty 🕡 -seven-thirty 🕢 -eight-thirty 🕣 -nine-thirty 🕤 -ten-thirty 🕥 -eleven-thirty 🕦 -twelve-thirty 🕧 -white flag 🏳️ -black flag 🏴 -chequered flag 🏁 -triangular flag 🚩 -rainbow flag 🏳️‍🌈 -Afghanistan 🇦🇫 -Åland Islands 🇦🇽 -Albania 🇦🇱 -Algeria 🇩🇿 -American Samoa 🇦🇸 -Andorra 🇦🇩 -Angola 🇦🇴 -Anguilla 🇦🇮 -Antarctica 🇦🇶 -Antigua & Barbuda 🇦🇬 -Argentina 🇦🇷 -Armenia 🇦🇲 -Aruba 🇦🇼 -Australia 🇦🇺 -Austria 🇦🇹 -Azerbaijan 🇦🇿 -Bahamas 🇧🇸 -Bahrain 🇧🇭 -Bangladesh 🇧🇩 -Barbados 🇧🇧 -Belarus 🇧🇾 -Belgium 🇧🇪 -Belize 🇧🇿 -Benin 🇧🇯 -Bermuda 🇧🇲 -Bhutan 🇧🇹 -Bolivia 🇧🇴 -Caribbean Netherlands 🇧🇶 -Bosnia & Herzegovina 🇧🇦 -Botswana 🇧🇼 -Brazil 🇧🇷 -British Indian Ocean Territory 🇮🇴 -British Virgin Islands 🇻🇬 -Brunei 🇧🇳 -Bulgaria 🇧🇬 -Burkina Faso 🇧🇫 -Burundi 🇧🇮 -Cape Verde 🇨🇻 -Cambodia 🇰🇭 -Cameroon 🇨🇲 -Canada 🇨🇦 -Canary Islands 🇮🇨 -Cayman Islands 🇰🇾 -Central African Republic 🇨🇫 -Chad 🇹🇩 -Chile 🇨🇱 -China 🇨🇳 -Christmas Island 🇨🇽 -Cocos (Keeling) Islands 🇨🇨 -Colombia 🇨🇴 -Comoros 🇰🇲 -Congo - Brazzaville 🇨🇬 -Congo - Kinshasa 🇨🇩 -Cook Islands 🇨🇰 -Costa Rica 🇨🇷 -Côte d’Ivoire 🇨🇮 -Croatia 🇭🇷 -Cuba 🇨🇺 -Curaçao 🇨🇼 -Cyprus 🇨🇾 -Czech Republic 🇨🇿 -Denmark 🇩🇰 -Djibouti 🇩🇯 -Dominica 🇩🇲 -Dominican Republic 🇩🇴 -Ecuador 🇪🇨 -Egypt 🇪🇬 -El Salvador 🇸🇻 -Equatorial Guinea 🇬🇶 -Eritrea 🇪🇷 -Estonia 🇪🇪 -Ethiopia 🇪🇹 -European Union 🇪🇺 -Falkland Islands 🇫🇰 -Faroe Islands 🇫🇴 -Fiji 🇫🇯 -Finland 🇫🇮 -France 🇫🇷 -French Guiana 🇬🇫 -French Polynesia 🇵🇫 -French Southern Territories 🇹🇫 -Gabon 🇬🇦 -Gambia 🇬🇲 -Georgia 🇬🇪 -Germany 🇩🇪 -Ghana 🇬🇭 -Gibraltar 🇬🇮 -Greece 🇬🇷 -Greenland 🇬🇱 -Grenada 🇬🇩 -Guadeloupe 🇬🇵 -Guam 🇬🇺 -Guatemala 🇬🇹 -Guernsey 🇬🇬 -Guinea 🇬🇳 -Guinea-Bissau 🇬🇼 -Guyana 🇬🇾 -Haiti 🇭🇹 -Honduras 🇭🇳 -Hong Kong SAR China 🇭🇰 -Hungary 🇭🇺 -Iceland 🇮🇸 -India 🇮🇳 -Indonesia 🇮🇩 -Iran 🇮🇷 -Iraq 🇮🇶 -Ireland 🇮🇪 -Isle of Man 🇮🇲 -Israel 🇮🇱 -Italy 🇮🇹 -Jamaica 🇯🇲 -Japan 🇯🇵 -crossed flags 🎌 -Jersey 🇯🇪 -Jordan 🇯🇴 -Kazakhstan 🇰🇿 -Kenya 🇰🇪 -Kiribati 🇰🇮 -Kosovo 🇽🇰 -Kuwait 🇰🇼 -Kyrgyzstan 🇰🇬 -Laos 🇱🇦 -Latvia 🇱🇻 -Lebanon 🇱🇧 -Lesotho 🇱🇸 -Liberia 🇱🇷 -Libya 🇱🇾 -Liechtenstein 🇱🇮 -Lithuania 🇱🇹 -Luxembourg 🇱🇺 -Macau SAR China 🇲🇴 -Macedonia 🇲🇰 -Madagascar 🇲🇬 -Malawi 🇲🇼 -Malaysia 🇲🇾 -Maldives 🇲🇻 -Mali 🇲🇱 -Malta 🇲🇹 -Marshall Islands 🇲🇭 -Martinique 🇲🇶 -Mauritania 🇲🇷 -Mauritius 🇲🇺 -Mayotte 🇾🇹 -Mexico 🇲🇽 -Micronesia 🇫🇲 -Moldova 🇲🇩 -Monaco 🇲🇨 -Mongolia 🇲🇳 -Montenegro 🇲🇪 -Montserrat 🇲🇸 -Morocco 🇲🇦 -Mozambique 🇲🇿 -Myanmar (Burma) 🇲🇲 -Namibia 🇳🇦 -Nauru 🇳🇷 -Nepal 🇳🇵 -Netherlands 🇳🇱 -New Caledonia 🇳🇨 -New Zealand 🇳🇿 -Nicaragua 🇳🇮 -Niger 🇳🇪 -Nigeria 🇳🇬 -Niue 🇳🇺 -Norfolk Island 🇳🇫 -Northern Mariana Islands 🇲🇵 -North Korea 🇰🇵 -Norway 🇳🇴 -Oman 🇴🇲 -Pakistan 🇵🇰 -Palau 🇵🇼 -Palestinian Territories 🇵🇸 -Panama 🇵🇦 -Papua New Guinea 🇵🇬 -Paraguay 🇵🇾 -Peru 🇵🇪 -Philippines 🇵🇭 -Pitcairn Islands 🇵🇳 -Poland 🇵🇱 -Portugal 🇵🇹 -Puerto Rico 🇵🇷 -Qatar 🇶🇦 -Réunion 🇷🇪 -Romania 🇷🇴 -Russia 🇷🇺 -Rwanda 🇷🇼 -St. Barthélemy 🇧🇱 -St. Helena 🇸🇭 -St. Kitts & Nevis 🇰🇳 -St. Lucia 🇱🇨 -St. Pierre & Miquelon 🇵🇲 -St. Vincent & Grenadines 🇻🇨 -Samoa 🇼🇸 -San Marino 🇸🇲 -São Tomé & Príncipe 🇸🇹 -Saudi Arabia 🇸🇦 -Senegal 🇸🇳 -Serbia 🇷🇸 -Seychelles 🇸🇨 -Sierra Leone 🇸🇱 -Singapore 🇸🇬 -Sint Maarten 🇸🇽 -Slovakia 🇸🇰 -Slovenia 🇸🇮 -Solomon Islands 🇸🇧 -Somalia 🇸🇴 -South Africa 🇿🇦 -South Georgia & South Sandwich Islands 🇬🇸 -South Korea 🇰🇷 -South Sudan 🇸🇸 -Spain 🇪🇸 -Sri Lanka 🇱🇰 -Sudan 🇸🇩 -Suriname 🇸🇷 -Swaziland 🇸🇿 -Sweden 🇸🇪 -Switzerland 🇨🇭 -Syria 🇸🇾 -Taiwan 🇹🇼 -Tajikistan 🇹🇯 -Tanzania 🇹🇿 -Thailand 🇹🇭 -Timor-Leste 🇹🇱 -Togo 🇹🇬 -Tokelau 🇹🇰 -Tonga 🇹🇴 -Trinidad & Tobago 🇹🇹 -Tunisia 🇹🇳 -Turkey 🇹🇷 -Turkmenistan 🇹🇲 -Turks & Caicos Islands 🇹🇨 -Tuvalu 🇹🇻 -Uganda 🇺🇬 -Ukraine 🇺🇦 -United Arab Emirates 🇦🇪 -United Kingdom 🇬🇧 -United States 🇺🇸 -U.S. Virgin Islands 🇻🇮 -Uruguay 🇺🇾 -Uzbekistan 🇺🇿 -Vanuatu 🇻🇺 -Vatican City 🇻🇦 -Venezuela 🇻🇪 -Vietnam 🇻🇳 -Wallis & Futuna 🇼🇫 -Western Sahara 🇪🇭 -Yemen 🇾🇪 -Zambia 🇿🇲 -Zimbabwe 🇿🇼 diff --git a/xmonad/scripts/list-emoji.txt b/xmonad/scripts/list-emoji.txt new file mode 100644 index 0000000..06b5a58 --- /dev/null +++ b/xmonad/scripts/list-emoji.txt @@ -0,0 +1,1432 @@ +grinning face 😀 +smiling face with open mouth 😃 +smiling face with open mouth & smiling eyes 😄 +grinning face with smiling eyes 😁 +smiling face with open mouth & closed eyes 😆 +smiling face with open mouth & cold sweat 😅 +face with tears of joy 😂 +rolling on the floor laughing 🤣 +smiling face ☺️ +smiling face with smiling eyes 😊 +smiling face with halo 😇 +slightly smiling face 🙂 +upside-down face 🙃 +winking face 😉 +relieved face 😌 +smiling face with heart-eyes 😍 +face blowing a kiss 😘 +kissing face 😗 +kissing face with smiling eyes 😙 +kissing face with closed eyes 😚 +face savouring delicious food 😋 +face with stuck-out tongue & winking eye 😜 +face with stuck-out tongue & closed eyes 😝 +face with stuck-out tongue 😛 +money-mouth face 🤑 +hugging face 🤗 +nerd face 🤓 +smiling face with sunglasses 😎 +clown face 🤡 +cowboy hat face 🤠 +smirking face 😏 +unamused face 😒 +disappointed face 😞 +pensive face 😔 +worried face 😟 +confused face 😕 +slightly frowning face 🙁 +frowning face ☹️ +persevering face 😣 +confounded face 😖 +tired face 😫 +weary face 😩 +face with steam from nose 😤 +angry face 😠 +pouting face 😡 +face without mouth 😶 +neutral face 😐 +expressionless face 😑 +hushed face 😯 +frowning face with open mouth 😦 +anguished face 😧 +face with open mouth 😮 +astonished face 😲 +dizzy face 😵 +flushed face 😳 +face screaming in fear 😱 +fearful face 😨 +face with open mouth & cold sweat 😰 +crying face 😢 +disappointed but relieved face 😥 +drooling face 🤤 +loudly crying face 😭 +face with cold sweat 😓 +sleepy face 😪 +sleeping face 😴 +face with rolling eyes 🙄 +thinking face 🤔 +lying face 🤥 +grimacing face 😬 +zipper-mouth face 🤐 +nauseated face 🤢 +sneezing face 🤧 +face with medical mask 😷 +face with thermometer 🤒 +face with head-bandage 🤕 +smiling face with horns 😈 +angry face with horns 👿 +ogre 👹 +goblin 👺 +pile of poo 💩 +ghost 👻 +skull 💀 +skull and crossbones ☠️ +alien 👽 +alien monster 👾 +robot face 🤖 +jack-o-lantern 🎃 +smiling cat face with open mouth 😺 +grinning cat face with smiling eyes 😸 +cat face with tears of joy 😹 +smiling cat face with heart-eyes 😻 +cat face with wry smile 😼 +kissing cat face with closed eyes 😽 +weary cat face 🙀 +crying cat face 😿 +pouting cat face 😾 +open hands 👐 +raising hands 🙌 +clapping hands 👏 +folded hands 🙏 +handshake 🤝 +thumbs up 👍 +thumbs down 👎 +oncoming fist 👊 +raised fist ✊ +left-facing fist 🤛 +right-facing fist 🤜 +crossed fingers 🤞 +victory hand ✌️ +sign of the horns 🤘 +OK hand 👌 +backhand index pointing left 👈 +backhand index pointing right 👉 +backhand index pointing up 👆 +backhand index pointing down 👇 +index pointing up ☝️ +raised hand ✋ +raised back of hand 🤚 +raised hand with fingers splayed 🖐 +vulcan salute 🖖 +waving hand 👋 +call me hand 🤙 +flexed biceps 💪 +middle finger 🖕 +writing hand ✍️ +selfie 🤳 +nail polish 💅 +ring 💍 +lipstick 💄 +kiss mark 💋 +mouth 👄 +tongue 👅 +ear 👂 +nose 👃 +footprints 👣 +eye 👁 +eyes 👀 +speaking head 🗣 +bust in silhouette 👤 +busts in silhouette 👥 +baby 👶 +boy 👦 +girl 👧 +man 👨 +woman 👩 +blond-haired woman 👱‍♀ +blond-haired person 👱 +old man 👴 +old woman 👵 +man with Chinese cap 👲 +woman wearing turban 👳‍♀ +person wearing turban 👳 +woman police officer 👮‍♀ +police officer 👮 +woman construction worker 👷‍♀ +construction worker 👷 +woman guard 💂‍♀ +guard 💂 +woman detective 🕵️‍♀️ +detective 🕵 +woman health worker 👩‍⚕ +man health worker 👨‍⚕ +woman farmer 👩‍🌾 +man farmer 👨‍🌾 +woman cook 👩‍🍳 +man cook 👨‍🍳 +woman student 👩‍🎓 +man student 👨‍🎓 +woman singer 👩‍🎤 +man singer 👨‍🎤 +woman teacher 👩‍🏫 +man teacher 👨‍🏫 +woman factory worker 👩‍🏭 +man factory worker 👨‍🏭 +woman technologist 👩‍💻 +man technologist 👨‍💻 +woman office worker 👩‍💼 +man office worker 👨‍💼 +woman mechanic 👩‍🔧 +man mechanic 👨‍🔧 +woman scientist 👩‍🔬 +man scientist 👨‍🔬 +woman artist 👩‍🎨 +man artist 👨‍🎨 +woman firefighter 👩‍🚒 +man firefighter 👨‍🚒 +woman pilot 👩‍✈ +man pilot 👨‍✈ +woman astronaut 👩‍🚀 +man astronaut 👨‍🚀 +woman judge 👩‍⚖ +man judge 👨‍⚖ +Mrs. Claus 🤶 +Santa Claus 🎅 +princess 👸 +prince 🤴 +bride with veil 👰 +man in tuxedo 🤵 +baby angel 👼 +pregnant woman 🤰 +woman bowing 🙇‍♀ +person bowing 🙇 +person tipping hand 💁 +man tipping hand 💁‍♂ +person gesturing NO 🙅 +man gesturing NO 🙅‍♂ +person gesturing OK 🙆 +man gesturing OK 🙆‍♂ +person raising hand 🙋 +man raising hand 🙋‍♂ +woman facepalming 🤦‍♀ +man facepalming 🤦‍♂ +woman shrugging 🤷‍♀ +man shrugging 🤷‍♂ +person pouting 🙎 +man pouting 🙎‍♂ +person frowning 🙍 +man frowning 🙍‍♂ +person getting haircut 💇 +man getting haircut 💇‍♂ +person getting massage 💆 +man getting massage 💆‍♂ +man in business suit levitating 🕴 +woman dancing 💃 +man dancing 🕺 +people with bunny ears partying 👯 +men with bunny ears partying 👯‍♂ +woman walking 🚶‍♀ +person walking 🚶 +woman running 🏃‍♀ +person running 🏃 +man and woman holding hands 👫 +two women holding hands 👭 +two men holding hands 👬 +couple with heart 💑 +couple with heart: woman woman 👩‍❤️‍👩 +couple with heart: man man 👨‍❤️‍👨 +kiss 💏 +kiss: woman woman 👩‍❤️‍💋‍👩 +kiss: man man 👨‍❤️‍💋‍👨 +family 👪 +family: man woman girl 👨‍👩‍👧 +family: man woman girl boy 👨‍👩‍👧‍👦 +family: man woman boy boy 👨‍👩‍👦‍👦 +family: man woman girl girl 👨‍👩‍👧‍👧 +family: woman woman boy 👩‍👩‍👦 +family: woman woman girl 👩‍👩‍👧 +family: woman woman girl boy 👩‍👩‍👧‍👦 +family: woman woman boy boy 👩‍👩‍👦‍👦 +family: woman woman girl girl 👩‍👩‍👧‍👧 +family: man man boy 👨‍👨‍👦 +family: man man girl 👨‍👨‍👧 +family: man man girl boy 👨‍👨‍👧‍👦 +family: man man boy boy 👨‍👨‍👦‍👦 +family: man man girl girl 👨‍👨‍👧‍👧 +family: woman boy 👩‍👦 +family: woman girl 👩‍👧 +family: woman girl boy 👩‍👧‍👦 +family: woman boy boy 👩‍👦‍👦 +family: woman girl girl 👩‍👧‍👧 +family: man boy 👨‍👦 +family: man girl 👨‍👧 +family: man girl boy 👨‍👧‍👦 +family: man boy boy 👨‍👦‍👦 +family: man girl girl 👨‍👧‍👧 +woman’s clothes 👚 +t-shirt 👕 +jeans 👖 +necktie 👔 +dress 👗 +bikini 👙 +kimono 👘 +high-heeled shoe 👠 +woman’s sandal 👡 +woman’s boot 👢 +man’s shoe 👞 +running shoe 👟 +woman’s hat 👒 +top hat 🎩 +graduation cap 🎓 +crown 👑 +rescue worker’s helmet ⛑ +school backpack 🎒 +clutch bag 👝 +purse 👛 +handbag 👜 +briefcase 💼 +glasses 👓 +sunglasses 🕶 +closed umbrella 🌂 +umbrella ☂️ +dog face 🐶 +cat face 🐱 +mouse face 🐭 +hamster face 🐹 +rabbit face 🐰 +fox face 🦊 +bear face 🐻 +panda face 🐼 +koala 🐨 +tiger face 🐯 +lion face 🦁 +cow face 🐮 +pig face 🐷 +pig nose 🐽 +frog face 🐸 +monkey face 🐵 +see-no-evil monkey 🙈 +hear-no-evil monkey 🙉 +speak-no-evil monkey 🙊 +monkey 🐒 +chicken 🐔 +penguin 🐧 +bird 🐦 +baby chick 🐤 +hatching chick 🐣 +front-facing baby chick 🐥 +duck 🦆 +eagle 🦅 +owl 🦉 +bat 🦇 +wolf face 🐺 +boar 🐗 +horse face 🐴 +unicorn face 🦄 +honeybee 🐝 +bug 🐛 +butterfly 🦋 +snail 🐌 +spiral shell 🐚 +lady beetle 🐞 +ant 🐜 +spider 🕷 +spider web 🕸 +turtle 🐢 +snake 🐍 +lizard 🦎 +scorpion 🦂 +crab 🦀 +squid 🦑 +octopus 🐙 +shrimp 🦐 +tropical fish 🐠 +fish 🐟 +blowfish 🐡 +dolphin 🐬 +shark 🦈 +spouting whale 🐳 +whale 🐋 +crocodile 🐊 +leopard 🐆 +tiger 🐅 +water buffalo 🐃 +ox 🐂 +cow 🐄 +deer 🦌 +camel 🐪 +two-hump camel 🐫 +elephant 🐘 +rhinoceros 🦏 +gorilla 🦍 +horse 🐎 +pig 🐖 +goat 🐐 +ram 🐏 +sheep 🐑 +dog 🐕 +poodle 🐩 +cat 🐈 +rooster 🐓 +turkey 🦃 +dove 🕊 +rabbit 🐇 +mouse 🐁 +rat 🐀 +chipmunk 🐿 +paw prints 🐾 +dragon 🐉 +dragon face 🐲 +cactus 🌵 +Christmas tree 🎄 +evergreen tree 🌲 +deciduous tree 🌳 +palm tree 🌴 +seedling 🌱 +herb 🌿 +shamrock ☘️ +four leaf clover 🍀 +pine decoration 🎍 +tanabata tree 🎋 +leaf fluttering in wind 🍃 +fallen leaf 🍂 +maple leaf 🍁 +mushroom 🍄 +sheaf of rice 🌾 +bouquet 💐 +tulip 🌷 +rose 🌹 +wilted flower 🥀 +sunflower 🌻 +blossom 🌼 +cherry blossom 🌸 +hibiscus 🌺 +globe showing Americas 🌎 +globe showing Europe-Africa 🌍 +globe showing Asia-Australia 🌏 +full moon 🌕 +waning gibbous moon 🌖 +last quarter moon 🌗 +waning crescent moon 🌘 +new moon 🌑 +waxing crescent moon 🌒 +first quarter moon 🌓 +waxing gibbous moon 🌔 +new moon face 🌚 +full moon with face 🌝 +sun with face 🌞 +first quarter moon with face 🌛 +last quarter moon with face 🌜 +crescent moon 🌙 +dizzy 💫 +white medium star ⭐️ +glowing star 🌟 +sparkles ✨ +high voltage ⚡️ +fire 🔥 +collision 💥 +comet ☄ +sun ☀️ +sun behind small cloud 🌤 +sun behind cloud ⛅️ +sun behind large cloud 🌥 +sun behind rain cloud 🌦 +rainbow 🌈 +cloud ☁️ +cloud with rain 🌧 +cloud with lightning and rain ⛈ +cloud with lightning 🌩 +cloud with snow 🌨 +snowman ☃️ +snowman without snow ⛄️ +snowflake ❄️ +wind face 🌬 +dashing away 💨 +tornado 🌪 +fog 🌫 +water wave 🌊 +droplet 💧 +sweat droplets 💦 +umbrella with rain drops ☔️ +green apple 🍏 +red apple 🍎 +pear 🍐 +tangerine 🍊 +lemon 🍋 +banana 🍌 +watermelon 🍉 +grapes 🍇 +strawberry 🍓 +melon 🍈 +cherries 🍒 +peach 🍑 +pineapple 🍍 +kiwi fruit 🥝 +avocado 🥑 +tomato 🍅 +eggplant 🍆 +cucumber 🥒 +carrot 🥕 +ear of corn 🌽 +hot pepper 🌶 +potato 🥔 +roasted sweet potato 🍠 +chestnut 🌰 +peanuts 🥜 +honey pot 🍯 +croissant 🥐 +bread 🍞 +baguette bread 🥖 +cheese wedge 🧀 +egg 🥚 +cooking 🍳 +bacon 🥓 +pancakes 🥞 +fried shrimp 🍤 +poultry leg 🍗 +meat on bone 🍖 +pizza 🍕 +hot dog 🌭 +hamburger 🍔 +french fries 🍟 +stuffed flatbread 🥙 +taco 🌮 +burrito 🌯 +green salad 🥗 +shallow pan of food 🥘 +spaghetti 🍝 +steaming bowl 🍜 +pot of food 🍲 +fish cake with swirl 🍥 +sushi 🍣 +bento box 🍱 +curry rice 🍛 +cooked rice 🍚 +rice ball 🍙 +rice cracker 🍘 +oden 🍢 +dango 🍡 +shaved ice 🍧 +ice cream 🍨 +soft ice cream 🍦 +shortcake 🍰 +birthday cake 🎂 +custard 🍮 +lollipop 🍭 +candy 🍬 +chocolate bar 🍫 +popcorn 🍿 +doughnut 🍩 +cookie 🍪 +glass of milk 🥛 +baby bottle 🍼 +hot beverage ☕️ +teacup without handle 🍵 +sake 🍶 +beer mug 🍺 +clinking beer mugs 🍻 +clinking glasses 🥂 +wine glass 🍷 +tumbler glass 🥃 +cocktail glass 🍸 +tropical drink 🍹 +bottle with popping cork 🍾 +spoon 🥄 +fork and knife 🍴 +fork and knife with plate 🍽 +soccer ball ⚽️ +basketball 🏀 +american football 🏈 +baseball ⚾️ +tennis 🎾 +volleyball 🏐 +rugby football 🏉 +pool 8 ball 🎱 +ping pong 🏓 +badminton 🏸 +goal net 🥅 +ice hockey 🏒 +field hockey 🏑 +cricket 🏏 +flag in hole ⛳️ +bow and arrow 🏹 +fishing pole 🎣 +boxing glove 🥊 +martial arts uniform 🥋 +ice skate ⛸ +skis 🎿 +skier ⛷ +snowboarder 🏂 +woman lifting weights 🏋️‍♀️ +person lifting weights 🏋 +person fencing 🤺 +women wrestling 🤼‍♀ +men wrestling 🤼‍♂ +woman cartwheeling 🤸‍♀ +man cartwheeling 🤸‍♂ +woman bouncing ball ⛹️‍♀️ +person bouncing ball ⛹ +woman playing handball 🤾‍♀ +man playing handball 🤾‍♂ +woman golfing 🏌️‍♀️ +person golfing 🏌 +woman surfing 🏄‍♀ +person surfing 🏄 +woman swimming 🏊‍♀ +person swimming 🏊 +woman playing water polo 🤽‍♀ +man playing water polo 🤽‍♂ +woman rowing boat 🚣‍♀ +person rowing boat 🚣 +horse racing 🏇 +woman biking 🚴‍♀ +person biking 🚴 +woman mountain biking 🚵‍♀ +person mountain biking 🚵 +running shirt 🎽 +sports medal 🏅 +military medal 🎖 +1st place medal 🥇 +2nd place medal 🥈 +3rd place medal 🥉 +trophy 🏆 +rosette 🏵 +reminder ribbon 🎗 +ticket 🎫 +admission tickets 🎟 +circus tent 🎪 +woman juggling 🤹‍♀ +man juggling 🤹‍♂ +performing arts 🎭 +artist palette 🎨 +clapper board 🎬 +microphone 🎤 +headphone 🎧 +musical score 🎼 +musical keyboard 🎹 +drum 🥁 +saxophone 🎷 +trumpet 🎺 +guitar 🎸 +violin 🎻 +game die 🎲 +direct hit 🎯 +bowling 🎳 +video game 🎮 +slot machine 🎰 +automobile 🚗 +taxi 🚕 +sport utility vehicle 🚙 +bus 🚌 +trolleybus 🚎 +racing car 🏎 +police car 🚓 +ambulance 🚑 +fire engine 🚒 +minibus 🚐 +delivery truck 🚚 +articulated lorry 🚛 +tractor 🚜 +kick scooter 🛴 +bicycle 🚲 +motor scooter 🛵 +motorcycle 🏍 +police car light 🚨 +oncoming police car 🚔 +oncoming bus 🚍 +oncoming automobile 🚘 +oncoming taxi 🚖 +aerial tramway 🚡 +mountain cableway 🚠 +suspension railway 🚟 +railway car 🚃 +tram car 🚋 +mountain railway 🚞 +monorail 🚝 +high-speed train 🚄 +high-speed train with bullet nose 🚅 +light rail 🚈 +locomotive 🚂 +train 🚆 +metro 🚇 +tram 🚊 +station 🚉 +helicopter 🚁 +small airplane 🛩 +airplane ✈️ +airplane departure 🛫 +airplane arrival 🛬 +rocket 🚀 +satellite 🛰 +seat 💺 +canoe 🛶 +sailboat ⛵️ +motor boat 🛥 +speedboat 🚤 +passenger ship 🛳 +ferry ⛴ +ship 🚢 +anchor ⚓️ +construction 🚧 +fuel pump ⛽️ +bus stop 🚏 +vertical traffic light 🚦 +horizontal traffic light 🚥 +world map 🗺 +moai 🗿 +Statue of Liberty 🗽 +fountain ⛲️ +Tokyo tower 🗼 +castle 🏰 +Japanese castle 🏯 +stadium 🏟 +ferris wheel 🎡 +roller coaster 🎢 +carousel horse 🎠 +umbrella on ground ⛱ +beach with umbrella 🏖 +desert island 🏝 +mountain ⛰ +snow-capped mountain 🏔 +mount fuji 🗻 +volcano 🌋 +desert 🏜 +camping 🏕 +tent ⛺️ +railway track 🛤 +motorway 🛣 +building construction 🏗 +factory 🏭 +house 🏠 +house with garden 🏡 +house 🏘 +derelict house 🏚 +office building 🏢 +department store 🏬 +Japanese post office 🏣 +post office 🏤 +hospital 🏥 +bank 🏦 +hotel 🏨 +convenience store 🏪 +school 🏫 +love hotel 🏩 +wedding 💒 +classical building 🏛 +church ⛪️ +mosque 🕌 +synagogue 🕍 +kaaba 🕋 +shinto shrine ⛩ +map of Japan 🗾 +moon viewing ceremony 🎑 +national park 🏞 +sunrise 🌅 +sunrise over mountains 🌄 +shooting star 🌠 +sparkler 🎇 +fireworks 🎆 +sunset 🌇 +cityscape at dusk 🌆 +cityscape 🏙 +night with stars 🌃 +milky way 🌌 +bridge at night 🌉 +foggy 🌁 +watch ⌚️ +mobile phone 📱 +mobile phone with arrow 📲 +laptop computer 💻 +keyboard ⌨️ +desktop computer 🖥 +printer 🖨 +computer mouse 🖱 +trackball 🖲 +joystick 🕹 +clamp 🗜 +computer disk 💽 +floppy disk 💾 +optical disk 💿 +dvd 📀 +videocassette 📼 +camera 📷 +camera with flash 📸 +video camera 📹 +movie camera 🎥 +film projector 📽 +film frames 🎞 +telephone receiver 📞 +telephone ☎️ +pager 📟 +fax machine 📠 +television 📺 +radio 📻 +studio microphone 🎙 +level slider 🎚 +control knobs 🎛 +stopwatch ⏱ +timer clock ⏲ +alarm clock ⏰ +mantelpiece clock 🕰 +hourglass ⌛️ +hourglass with flowing sand ⏳ +satellite antenna 📡 +battery 🔋 +electric plug 🔌 +light bulb 💡 +flashlight 🔦 +candle 🕯 +wastebasket 🗑 +oil drum 🛢 +money with wings 💸 +dollar banknote 💵 +yen banknote 💴 +euro banknote 💶 +pound banknote 💷 +money bag 💰 +credit card 💳 +gem stone 💎 +balance scale ⚖️ +wrench 🔧 +hammer 🔨 +hammer and pick ⚒ +hammer and wrench 🛠 +pick ⛏ +nut and bolt 🔩 +gear ⚙️ +chains ⛓ +pistol 🔫 +bomb 💣 +kitchen knife 🔪 +dagger 🗡 +crossed swords ⚔️ +shield 🛡 +cigarette 🚬 +coffin ⚰️ +funeral urn ⚱️ +amphora 🏺 +crystal ball 🔮 +prayer beads 📿 +barber pole 💈 +alembic ⚗️ +telescope 🔭 +microscope 🔬 +hole 🕳 +pill 💊 +syringe 💉 +thermometer 🌡 +toilet 🚽 +potable water 🚰 +shower 🚿 +bathtub 🛁 +person taking bath 🛀 +bellhop bell 🛎 +key 🔑 +old key 🗝 +door 🚪 +couch and lamp 🛋 +bed 🛏 +person in bed 🛌 +framed picture 🖼 +shopping bags 🛍 +shopping cart 🛒 +wrapped gift 🎁 +balloon 🎈 +carp streamer 🎏 +ribbon 🎀 +confetti ball 🎊 +party popper 🎉 +Japanese dolls 🎎 +red paper lantern 🏮 +wind chime 🎐 +envelope ✉️ +envelope with arrow 📩 +incoming envelope 📨 +e-mail 📧 +love letter 💌 +inbox tray 📥 +outbox tray 📤 +package 📦 +label 🏷 +closed mailbox with lowered flag 📪 +closed mailbox with raised flag 📫 +open mailbox with raised flag 📬 +open mailbox with lowered flag 📭 +postbox 📮 +postal horn 📯 +scroll 📜 +page with curl 📃 +page facing up 📄 +bookmark tabs 📑 +bar chart 📊 +chart increasing 📈 +chart decreasing 📉 +spiral notepad 🗒 +spiral calendar 🗓 +tear-off calendar 📆 +calendar 📅 +card index 📇 +card file box 🗃 +ballot box with ballot 🗳 +file cabinet 🗄 +clipboard 📋 +file folder 📁 +open file folder 📂 +card index dividers 🗂 +rolled-up newspaper 🗞 +newspaper 📰 +notebook 📓 +notebook with decorative cover 📔 +ledger 📒 +closed book 📕 +green book 📗 +blue book 📘 +orange book 📙 +books 📚 +open book 📖 +bookmark 🔖 +link 🔗 +paperclip 📎 +linked paperclips 🖇 +triangular ruler 📐 +straight ruler 📏 +pushpin 📌 +round pushpin 📍 +scissors ✂️ +pen 🖊 +fountain pen 🖋 +black nib ✒️ +paintbrush 🖌 +crayon 🖍 +memo 📝 +pencil ✏️ +left-pointing magnifying glass 🔍 +right-pointing magnifying glass 🔎 +locked with pen 🔏 +locked with key 🔐 +locked 🔒 +unlocked 🔓 +red heart ❤️ +yellow heart 💛 +green heart 💚 +blue heart 💙 +purple heart 💜 +black heart 🖤 +broken heart 💔 +heavy heart exclamation ❣️ +two hearts 💕 +revolving hearts 💞 +beating heart 💓 +growing heart 💗 +sparkling heart 💖 +heart with arrow 💘 +heart with ribbon 💝 +heart decoration 💟 +peace symbol ☮️ +latin cross ✝️ +star and crescent ☪️ +om 🕉 +wheel of dharma ☸️ +star of David ✡️ +dotted six-pointed star 🔯 +menorah 🕎 +yin yang ☯️ +orthodox cross ☦️ +place of worship 🛐 +Ophiuchus ⛎ +Aries ♈️ +Taurus ♉️ +Gemini ♊️ +Cancer ♋️ +Leo ♌️ +Virgo ♍️ +Libra ♎️ +Scorpius ♏️ +Sagittarius ♐️ +Capricorn ♑️ +Aquarius ♒️ +Pisces ♓️ +ID button 🆔 +atom symbol ⚛️ +Japanese “acceptable” button 🉑 +radioactive ☢️ +biohazard ☣️ +mobile phone off 📴 +vibration mode 📳 +Japanese “not free of charge” button 🈶 +Japanese “free of charge” button 🈚️ +Japanese “application” button 🈸 +Japanese “open for business” button 🈺 +Japanese “monthly amount” button 🈷️ +eight-pointed star ✴️ +VS button 🆚 +white flower 💮 +Japanese “bargain” button 🉐 +Japanese “secret” button ㊙️ +Japanese “congratulations” button ㊗️ +Japanese “passing grade” button 🈴 +Japanese “no vacancy” button 🈵 +Japanese “discount” button 🈹 +Japanese “prohibited” button 🈲 +A button (blood type) 🅰️ +B button (blood type) 🅱️ +AB button (blood type) 🆎 +CL button 🆑 +O button (blood type) 🅾️ +SOS button 🆘 +cross mark ❌ +heavy large circle ⭕️ +stop sign 🛑 +no entry ⛔️ +name badge 📛 +prohibited 🚫 +hundred points 💯 +anger symbol 💢 +hot springs ♨️ +no pedestrians 🚷 +no littering 🚯 +no bicycles 🚳 +non-potable water 🚱 +no one under eighteen 🔞 +no mobile phones 📵 +no smoking 🚭 +exclamation mark ❗️ +white exclamation mark ❕ +question mark ❓ +white question mark ❔ +double exclamation mark ‼️ +exclamation question mark ⁉️ +dim button 🔅 +bright button 🔆 +part alternation mark 〽️ +warning ⚠️ +children crossing 🚸 +trident emblem 🔱 +fleur-de-lis ⚜️ +Japanese symbol for beginner 🔰 +recycling symbol ♻️ +white heavy check mark ✅ +Japanese “reserved” button 🈯️ +chart increasing with yen 💹 +sparkle ❇️ +eight-spoked asterisk ✳️ +cross mark button ❎ +globe with meridians 🌐 +diamond with a dot 💠 +circled M Ⓜ️ +cyclone 🌀 +zzz 💤 +ATM sign 🏧 +water closet 🚾 +wheelchair symbol ♿️ +P button 🅿️ +Japanese “vacancy” button 🈳 +Japanese “service charge” button 🈂️ +passport control 🛂 +customs 🛃 +baggage claim 🛄 +left luggage 🛅 +men’s room 🚹 +women’s room 🚺 +baby symbol 🚼 +restroom 🚻 +litter in bin sign 🚮 +cinema 🎦 +antenna bars 📶 +Japanese “here” button 🈁 +input symbols 🔣 +information ℹ️ +input latin letters 🔤 +input latin lowercase 🔡 +input latin uppercase 🔠 +NG button 🆖 +OK button 🆗 +UP! button 🆙 +COOL button 🆒 +NEW button 🆕 +FREE button 🆓 +keycap: 0 0️⃣ +keycap: 1 1️⃣ +keycap: 2 2️⃣ +keycap: 3 3️⃣ +keycap: 4 4️⃣ +keycap: 5 5️⃣ +keycap: 6 6️⃣ +keycap: 7 7️⃣ +keycap: 8 8️⃣ +keycap: 9 9️⃣ +keycap 10 🔟 +input numbers 🔢 +keycap: # #️⃣ +keycap: * *️⃣ +play button ▶️ +pause button ⏸ +play or pause button ⏯ +stop button ⏹ +record button ⏺ +next track button ⏭ +last track button ⏮ +fast-forward button ⏩ +fast reverse button ⏪ +fast up button ⏫ +fast down button ⏬ +reverse button ◀️ +up button 🔼 +down button 🔽 +right arrow ➡️ +left arrow ⬅️ +up arrow ⬆️ +down arrow ⬇️ +up-right arrow ↗️ +down-right arrow ↘️ +down-left arrow ↙️ +up-left arrow ↖️ +up-down arrow ↕️ +left-right arrow ↔️ +left arrow curving right ↪️ +right arrow curving left ↩️ +right arrow curving up ⤴️ +right arrow curving down ⤵️ +shuffle tracks button 🔀 +repeat button 🔁 +repeat single button 🔂 +anticlockwise arrows button 🔄 +clockwise vertical arrows 🔃 +musical note 🎵 +musical notes 🎶 +heavy plus sign ➕ +heavy minus sign ➖ +heavy division sign ➗ +heavy multiplication x ✖️ +heavy dollar sign 💲 +currency exchange 💱 +trade mark ™️ +copyright ©️ +registered ®️ +wavy dash 〰️ +curly loop ➰ +double curly loop ➿ +END arrow 🔚 +BACK arrow 🔙 +ON! arrow 🔛 +TOP arrow 🔝 +SOON arrow 🔜 +heavy check mark ✔️ +ballot box with check ☑️ +radio button 🔘 +white circle ⚪️ +black circle ⚫️ +red circle 🔴 +blue circle 🔵 +red triangle pointed up 🔺 +red triangle pointed down 🔻 +small orange diamond 🔸 +small blue diamond 🔹 +large orange diamond 🔶 +large blue diamond 🔷 +white square button 🔳 +black square button 🔲 +black small square ▪️ +white small square ▫️ +black medium-small square ◾️ +white medium-small square ◽️ +black medium square ◼️ +white medium square ◻️ +black large square ⬛️ +white large square ⬜️ +speaker low volume 🔈 +muted speaker 🔇 +speaker medium volume 🔉 +speaker high volume 🔊 +bell 🔔 +bell with slash 🔕 +megaphone 📣 +loudspeaker 📢 +eye in speech bubble 👁‍🗨 +speech balloon 💬 +thought balloon 💭 +right anger bubble 🗯 +spade suit ♠️ +club suit ♣️ +heart suit ♥️ +diamond suit ♦️ +joker 🃏 +flower playing cards 🎴 +mahjong red dragon 🀄️ +one o’clock 🕐 +two o’clock 🕑 +three o’clock 🕒 +four o’clock 🕓 +five o’clock 🕔 +six o’clock 🕕 +seven o’clock 🕖 +eight o’clock 🕗 +nine o’clock 🕘 +ten o’clock 🕙 +eleven o’clock 🕚 +twelve o’clock 🕛 +one-thirty 🕜 +two-thirty 🕝 +three-thirty 🕞 +four-thirty 🕟 +five-thirty 🕠 +six-thirty 🕡 +seven-thirty 🕢 +eight-thirty 🕣 +nine-thirty 🕤 +ten-thirty 🕥 +eleven-thirty 🕦 +twelve-thirty 🕧 +white flag 🏳️ +black flag 🏴 +chequered flag 🏁 +triangular flag 🚩 +rainbow flag 🏳️‍🌈 +Afghanistan 🇦🇫 +Åland Islands 🇦🇽 +Albania 🇦🇱 +Algeria 🇩🇿 +American Samoa 🇦🇸 +Andorra 🇦🇩 +Angola 🇦🇴 +Anguilla 🇦🇮 +Antarctica 🇦🇶 +Antigua & Barbuda 🇦🇬 +Argentina 🇦🇷 +Armenia 🇦🇲 +Aruba 🇦🇼 +Australia 🇦🇺 +Austria 🇦🇹 +Azerbaijan 🇦🇿 +Bahamas 🇧🇸 +Bahrain 🇧🇭 +Bangladesh 🇧🇩 +Barbados 🇧🇧 +Belarus 🇧🇾 +Belgium 🇧🇪 +Belize 🇧🇿 +Benin 🇧🇯 +Bermuda 🇧🇲 +Bhutan 🇧🇹 +Bolivia 🇧🇴 +Caribbean Netherlands 🇧🇶 +Bosnia & Herzegovina 🇧🇦 +Botswana 🇧🇼 +Brazil 🇧🇷 +British Indian Ocean Territory 🇮🇴 +British Virgin Islands 🇻🇬 +Brunei 🇧🇳 +Bulgaria 🇧🇬 +Burkina Faso 🇧🇫 +Burundi 🇧🇮 +Cape Verde 🇨🇻 +Cambodia 🇰🇭 +Cameroon 🇨🇲 +Canada 🇨🇦 +Canary Islands 🇮🇨 +Cayman Islands 🇰🇾 +Central African Republic 🇨🇫 +Chad 🇹🇩 +Chile 🇨🇱 +China 🇨🇳 +Christmas Island 🇨🇽 +Cocos (Keeling) Islands 🇨🇨 +Colombia 🇨🇴 +Comoros 🇰🇲 +Congo - Brazzaville 🇨🇬 +Congo - Kinshasa 🇨🇩 +Cook Islands 🇨🇰 +Costa Rica 🇨🇷 +Côte d’Ivoire 🇨🇮 +Croatia 🇭🇷 +Cuba 🇨🇺 +Curaçao 🇨🇼 +Cyprus 🇨🇾 +Czech Republic 🇨🇿 +Denmark 🇩🇰 +Djibouti 🇩🇯 +Dominica 🇩🇲 +Dominican Republic 🇩🇴 +Ecuador 🇪🇨 +Egypt 🇪🇬 +El Salvador 🇸🇻 +Equatorial Guinea 🇬🇶 +Eritrea 🇪🇷 +Estonia 🇪🇪 +Ethiopia 🇪🇹 +European Union 🇪🇺 +Falkland Islands 🇫🇰 +Faroe Islands 🇫🇴 +Fiji 🇫🇯 +Finland 🇫🇮 +France 🇫🇷 +French Guiana 🇬🇫 +French Polynesia 🇵🇫 +French Southern Territories 🇹🇫 +Gabon 🇬🇦 +Gambia 🇬🇲 +Georgia 🇬🇪 +Germany 🇩🇪 +Ghana 🇬🇭 +Gibraltar 🇬🇮 +Greece 🇬🇷 +Greenland 🇬🇱 +Grenada 🇬🇩 +Guadeloupe 🇬🇵 +Guam 🇬🇺 +Guatemala 🇬🇹 +Guernsey 🇬🇬 +Guinea 🇬🇳 +Guinea-Bissau 🇬🇼 +Guyana 🇬🇾 +Haiti 🇭🇹 +Honduras 🇭🇳 +Hong Kong SAR China 🇭🇰 +Hungary 🇭🇺 +Iceland 🇮🇸 +India 🇮🇳 +Indonesia 🇮🇩 +Iran 🇮🇷 +Iraq 🇮🇶 +Ireland 🇮🇪 +Isle of Man 🇮🇲 +Israel 🇮🇱 +Italy 🇮🇹 +Jamaica 🇯🇲 +Japan 🇯🇵 +crossed flags 🎌 +Jersey 🇯🇪 +Jordan 🇯🇴 +Kazakhstan 🇰🇿 +Kenya 🇰🇪 +Kiribati 🇰🇮 +Kosovo 🇽🇰 +Kuwait 🇰🇼 +Kyrgyzstan 🇰🇬 +Laos 🇱🇦 +Latvia 🇱🇻 +Lebanon 🇱🇧 +Lesotho 🇱🇸 +Liberia 🇱🇷 +Libya 🇱🇾 +Liechtenstein 🇱🇮 +Lithuania 🇱🇹 +Luxembourg 🇱🇺 +Macau SAR China 🇲🇴 +Macedonia 🇲🇰 +Madagascar 🇲🇬 +Malawi 🇲🇼 +Malaysia 🇲🇾 +Maldives 🇲🇻 +Mali 🇲🇱 +Malta 🇲🇹 +Marshall Islands 🇲🇭 +Martinique 🇲🇶 +Mauritania 🇲🇷 +Mauritius 🇲🇺 +Mayotte 🇾🇹 +Mexico 🇲🇽 +Micronesia 🇫🇲 +Moldova 🇲🇩 +Monaco 🇲🇨 +Mongolia 🇲🇳 +Montenegro 🇲🇪 +Montserrat 🇲🇸 +Morocco 🇲🇦 +Mozambique 🇲🇿 +Myanmar (Burma) 🇲🇲 +Namibia 🇳🇦 +Nauru 🇳🇷 +Nepal 🇳🇵 +Netherlands 🇳🇱 +New Caledonia 🇳🇨 +New Zealand 🇳🇿 +Nicaragua 🇳🇮 +Niger 🇳🇪 +Nigeria 🇳🇬 +Niue 🇳🇺 +Norfolk Island 🇳🇫 +Northern Mariana Islands 🇲🇵 +North Korea 🇰🇵 +Norway 🇳🇴 +Oman 🇴🇲 +Pakistan 🇵🇰 +Palau 🇵🇼 +Palestinian Territories 🇵🇸 +Panama 🇵🇦 +Papua New Guinea 🇵🇬 +Paraguay 🇵🇾 +Peru 🇵🇪 +Philippines 🇵🇭 +Pitcairn Islands 🇵🇳 +Poland 🇵🇱 +Portugal 🇵🇹 +Puerto Rico 🇵🇷 +Qatar 🇶🇦 +Réunion 🇷🇪 +Romania 🇷🇴 +Russia 🇷🇺 +Rwanda 🇷🇼 +St. Barthélemy 🇧🇱 +St. Helena 🇸🇭 +St. Kitts & Nevis 🇰🇳 +St. Lucia 🇱🇨 +St. Pierre & Miquelon 🇵🇲 +St. Vincent & Grenadines 🇻🇨 +Samoa 🇼🇸 +San Marino 🇸🇲 +São Tomé & Príncipe 🇸🇹 +Saudi Arabia 🇸🇦 +Senegal 🇸🇳 +Serbia 🇷🇸 +Seychelles 🇸🇨 +Sierra Leone 🇸🇱 +Singapore 🇸🇬 +Sint Maarten 🇸🇽 +Slovakia 🇸🇰 +Slovenia 🇸🇮 +Solomon Islands 🇸🇧 +Somalia 🇸🇴 +South Africa 🇿🇦 +South Georgia & South Sandwich Islands 🇬🇸 +South Korea 🇰🇷 +South Sudan 🇸🇸 +Spain 🇪🇸 +Sri Lanka 🇱🇰 +Sudan 🇸🇩 +Suriname 🇸🇷 +Swaziland 🇸🇿 +Sweden 🇸🇪 +Switzerland 🇨🇭 +Syria 🇸🇾 +Taiwan 🇹🇼 +Tajikistan 🇹🇯 +Tanzania 🇹🇿 +Thailand 🇹🇭 +Timor-Leste 🇹🇱 +Togo 🇹🇬 +Tokelau 🇹🇰 +Tonga 🇹🇴 +Trinidad & Tobago 🇹🇹 +Tunisia 🇹🇳 +Turkey 🇹🇷 +Turkmenistan 🇹🇲 +Turks & Caicos Islands 🇹🇨 +Tuvalu 🇹🇻 +Uganda 🇺🇬 +Ukraine 🇺🇦 +United Arab Emirates 🇦🇪 +United Kingdom 🇬🇧 +United States 🇺🇸 +U.S. Virgin Islands 🇻🇮 +Uruguay 🇺🇾 +Uzbekistan 🇺🇿 +Vanuatu 🇻🇺 +Vatican City 🇻🇦 +Venezuela 🇻🇪 +Vietnam 🇻🇳 +Wallis & Futuna 🇼🇫 +Western Sahara 🇪🇭 +Yemen 🇾🇪 +Zambia 🇿🇲 +Zimbabwe 🇿🇼 -- cgit v1.2.3 From f24cd9ce9a6972053d5744d1b966f4f190bde849 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 18:26:59 -0300 Subject: xmonad/scripts/: remove unused scripts --- xmonad/scripts/dmenu-vid.sh | 25 ------------------------- xmonad/scripts/dmenu-videq.sh | 10 ---------- xmonad/scripts/ezran.sh | 3 --- xmonad/scripts/single-monitor.sh | 3 --- xmonad/scripts/three-monitors.sh | 2 -- xmonad/scripts/usurpador.sh | 3 --- xmonad/scripts/yad-buku.sh | 8 -------- 7 files changed, 54 deletions(-) delete mode 100755 xmonad/scripts/dmenu-vid.sh delete mode 100755 xmonad/scripts/dmenu-videq.sh delete mode 100755 xmonad/scripts/ezran.sh delete mode 100755 xmonad/scripts/single-monitor.sh delete mode 100755 xmonad/scripts/three-monitors.sh delete mode 100755 xmonad/scripts/usurpador.sh delete mode 100755 xmonad/scripts/yad-buku.sh diff --git a/xmonad/scripts/dmenu-vid.sh b/xmonad/scripts/dmenu-vid.sh deleted file mode 100755 index 8b5ec40..0000000 --- a/xmonad/scripts/dmenu-vid.sh +++ /dev/null @@ -1,25 +0,0 @@ -#!/bin/sh -set -eu -set -x - -QUEUE="$HOME/archive/vid/queue.txt" -DB="$HOME/archive/vid/metadata-database.txt" - -LIST="$(mktemp)" -touch "$DB" -while IFS='' read -r url; do - MATCH="$(grep -F "$url" "$DB" ||:)" - if [ -n "$MATCH" ]; then - echo "$MATCH" >> "$LIST" - else - printf '%s - %s\n' "$(youtube-dl "$url" -o '%(title)s - %(uploader)s' --get-filename)" "$url" >> "$DB" & - echo "$url" >> "$LIST" - fi -done < "$QUEUE" - -file_and_stuff="$(dmenu -l 20 -p 'Media: ' < "$LIST")" - -if [ -n "$file_and_stuff" ]; then - file="$(echo "$file_and_stuff" | awk -F' - ' '{print $NF}')" - "$HOME/dev/libre/dotfiles/scripts/vid" "$file" -fi diff --git a/xmonad/scripts/dmenu-videq.sh b/xmonad/scripts/dmenu-videq.sh deleted file mode 100755 index 9e64bfd..0000000 --- a/xmonad/scripts/dmenu-videq.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -eu - -URL="$(xsel -bo)" - -res="$(printf 'yes\nno\n' | dmenu -l 2 -p "$(printf 'Add to media queue: %s' "$URL")")" - -if [ "$res" = 'yes' ]; then - videq "$URL" -fi diff --git a/xmonad/scripts/ezran.sh b/xmonad/scripts/ezran.sh deleted file mode 100755 index cabc578..0000000 --- a/xmonad/scripts/ezran.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -eu -xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output DP-2 --off --output DP-3 --mode 1360x768 --pos 1920x0 --rotate normal diff --git a/xmonad/scripts/single-monitor.sh b/xmonad/scripts/single-monitor.sh deleted file mode 100755 index ec0815a..0000000 --- a/xmonad/scripts/single-monitor.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -eux -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --off --output DP2 --off diff --git a/xmonad/scripts/three-monitors.sh b/xmonad/scripts/three-monitors.sh deleted file mode 100755 index d1ef7c6..0000000 --- a/xmonad/scripts/three-monitors.sh +++ /dev/null @@ -1,2 +0,0 @@ -#!/bin/sh -xrandr --output VIRTUAL1 --off --output eDP1 --primary --mode 1920x1080 --pos 640x1440 --rotate normal --output DP1 --off --output HDMI2 --off --output HDMI1 --mode 2560x1440 --pos 0x0 --rotate normal --output DP2 --mode 2560x1440 --pos 2560x0 --rotate left diff --git a/xmonad/scripts/usurpador.sh b/xmonad/scripts/usurpador.sh deleted file mode 100755 index cd24199..0000000 --- a/xmonad/scripts/usurpador.sh +++ /dev/null @@ -1,3 +0,0 @@ -#!/bin/sh -set -eu -xrandr --output eDP-1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output DP-1 --off --output DP-2 --off --output DP-3 --off diff --git a/xmonad/scripts/yad-buku.sh b/xmonad/scripts/yad-buku.sh deleted file mode 100755 index 20d2f8e..0000000 --- a/xmonad/scripts/yad-buku.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -euo - -URL="$(yad --title 'Add the URL' --form --field 'URL')" - -if [ -n "$URL" ]; then - buku -a "$URL" -fi -- cgit v1.2.3 From 7a9b2ebcebd0a6998e3e4b43c04b71db0a5dbed7 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 18:48:40 -0300 Subject: xmonad/scripts/brightness.sh: Remove ${BRACES} around variables --- xmonad/scripts/brightness.sh | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/xmonad/scripts/brightness.sh b/xmonad/scripts/brightness.sh index 77dc9b3..be256bb 100755 --- a/xmonad/scripts/brightness.sh +++ b/xmonad/scripts/brightness.sh @@ -1,30 +1,30 @@ #!/bin/sh set -eux -BRIGHTNESS_DIFF="${1}" +BRIGHTNESS_DIFF="$1" # base dir for backlight class BASEDIR='/sys/class/backlight/' # get the backlight handler -HANDLER="${BASEDIR}$(ls "${BASEDIR}")" +HANDLER="$BASEDIR$(ls "$BASEDIR")" # get current brightness -OLD_BRIGHTNESS="$(cat "${HANDLER}/brightness")" +OLD_BRIGHTNESS="$(cat "$HANDLER/brightness")" # get max brightness -MAX_BRIGHTNESS="$(cat "${HANDLER}/max_brightness")" +MAX_BRIGHTNESS="$(cat "$HANDLER/max_brightness")" # get current brightness % -OLD_BRIGHTNESS_P=$(( 100 * "${OLD_BRIGHTNESS}" / "${MAX_BRIGHTNESS}" )) +OLD_BRIGHTNESS_P=$(( 100 * "$OLD_BRIGHTNESS" / "$MAX_BRIGHTNESS" )) # calculate new brightness %, bounded by 0 100 range -NEW_BRIGHTNESS_P=$(("${OLD_BRIGHTNESS_P}" + "${BRIGHTNESS_DIFF}")) -NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" > 100 ? 100 : "${NEW_BRIGHTNESS_P}")) -NEW_BRIGHTNESS_P=$(("${NEW_BRIGHTNESS_P}" < 1 ? 1 : "${NEW_BRIGHTNESS_P}")) +NEW_BRIGHTNESS_P=$(("$OLD_BRIGHTNESS_P" + "$BRIGHTNESS_DIFF")) +NEW_BRIGHTNESS_P=$(("$NEW_BRIGHTNESS_P" > 100 ? 100 : "$NEW_BRIGHTNESS_P")) +NEW_BRIGHTNESS_P=$(("$NEW_BRIGHTNESS_P" < 1 ? 1 : "$NEW_BRIGHTNESS_P")) # calculate new brightness value -NEW_BRIGHTNESS=$(( "${MAX_BRIGHTNESS}" * "${NEW_BRIGHTNESS_P}" / 100 )) +NEW_BRIGHTNESS=$(( "$MAX_BRIGHTNESS" * "$NEW_BRIGHTNESS_P" / 100 )) # set the new brightness value -echo "${NEW_BRIGHTNESS}" > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" +echo "$NEW_BRIGHTNESS" > "$HANDLER/brightness" || sudo chmod 666 "$HANDLER/brightness" -- cgit v1.2.3 From 8f91a789411cacef7f436ae91a25b4d674898136 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 18:49:12 -0300 Subject: xmonad/scripts/brightness.sh: Replace sudo with doas --- xmonad/scripts/brightness.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/scripts/brightness.sh b/xmonad/scripts/brightness.sh index be256bb..7eae0e5 100755 --- a/xmonad/scripts/brightness.sh +++ b/xmonad/scripts/brightness.sh @@ -27,4 +27,4 @@ NEW_BRIGHTNESS_P=$(("$NEW_BRIGHTNESS_P" < 1 ? 1 : "$NEW_BRIGHTNESS_P")) NEW_BRIGHTNESS=$(( "$MAX_BRIGHTNESS" * "$NEW_BRIGHTNESS_P" / 100 )) # set the new brightness value -echo "$NEW_BRIGHTNESS" > "$HANDLER/brightness" || sudo chmod 666 "$HANDLER/brightness" +echo "$NEW_BRIGHTNESS" > "$HANDLER/brightness" || doas chmod 666 "$HANDLER/brightness" -- cgit v1.2.3 From 8b6ec31695ca5cce8d780de355e283017ec9f08d Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 18:51:38 -0300 Subject: xmonad/scripts/xmobar-mail.sh: Fix notmuch query --- xmonad/scripts/xmobar-mail.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/xmonad/scripts/xmobar-mail.sh b/xmonad/scripts/xmobar-mail.sh index 259e81b..5f31705 100755 --- a/xmonad/scripts/xmobar-mail.sh +++ b/xmonad/scripts/xmobar-mail.sh @@ -2,7 +2,7 @@ set -eu while true; do - printf "mail: %s/%s - %s\n" "$(notmuch count tag:unread AND NOT tag:lists AND NOT tag:killed)" "$(notmuch count tag:inbox AND NOT tag:lists AND NOT tag:killed)" "$(msmtp-queue -d | grep -c '^From')" + printf "mail: %s/%s - %s\n" "$(notmuch count tag:unread AND \(tag:to-me OR to:nubank.com.br OR to:euandre.org\) AND NOT tag:killed AND NOT tag:archive)" "$(notmuch count tag:inbox AND \(tag:to-me OR to:nubank.com.br OR to:euandre.org\) AND NOT tag:killed AND NOT tag:archive)" "$(msmtp-queue -d | grep -c '^From')" if acpi -a | grep -q off-line; then sleep $((60 * 15)) else -- cgit v1.2.3 From 07ab1cf45aebd988124b7625ac9bce3a1ee6da3a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 18:52:46 -0300 Subject: xmonad/scripts/toggle-pulseaudio-sink.sh: Fix logic and add default behaviour --- xmonad/scripts/toggle-pulseaudio-sink.sh | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/xmonad/scripts/toggle-pulseaudio-sink.sh b/xmonad/scripts/toggle-pulseaudio-sink.sh index b20f575..90f5734 100755 --- a/xmonad/scripts/toggle-pulseaudio-sink.sh +++ b/xmonad/scripts/toggle-pulseaudio-sink.sh @@ -5,12 +5,10 @@ set -eu # When this premise is no longer true, it needs to be upgraded. CURRENT="$(pacmd list-sinks | grep '\* index' | cut -d: -f2 | tr -d ' ')" -echo $CURRENT +OTHER="$(pacmd list-sinks | grep index | grep -v '\* index' | tail -n1 | cut -d: -f2 | tr -d ' ')" if [ "$CURRENT" = 0 ]; then - pacmd set-default-sink 10 -elif [ "$CURRENT" = 10 ]; then - pacmd set-default-sink 0 + pacmd set-default-sink "$OTHER" else - echo "I don't know what to do now." + pacmd set-default-sink 0 fi -- cgit v1.2.3 From 1035fb7c57cdc3ce98dd1e2ad3c5d3c7983081a5 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Tue, 4 Jan 2022 18:54:22 -0300 Subject: xmonad/scripts/dmenu-clipmenu.sh: Add working version of clipboard menu --- xmonad/scripts/dmenu-clipmenu.sh | 4 ++++ 1 file changed, 4 insertions(+) create mode 100755 xmonad/scripts/dmenu-clipmenu.sh diff --git a/xmonad/scripts/dmenu-clipmenu.sh b/xmonad/scripts/dmenu-clipmenu.sh new file mode 100755 index 0000000..d1e9fc9 --- /dev/null +++ b/xmonad/scripts/dmenu-clipmenu.sh @@ -0,0 +1,4 @@ +#!/bin/sh +set -eu + +clipmenu -l 20 -i -p 'Entry: ' -fn Monospace-18 -- cgit v1.2.3 From fcddcba4a1eb59fe6d020b4ca666fa5a43a5063a Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jan 2022 11:40:54 -0300 Subject: src/bin/duplex: make it print single-sided pages too and rename to src/bin/print --- src/bin/duplex | 140 ------------------------------------------------------ src/bin/print | 146 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 146 insertions(+), 140 deletions(-) delete mode 100755 src/bin/duplex create mode 100755 src/bin/print diff --git a/src/bin/duplex b/src/bin/duplex deleted file mode 100755 index 12b254e..0000000 --- a/src/bin/duplex +++ /dev/null @@ -1,140 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - duplex [-q QUALITY] [FILE...] - duplex -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -q QUALITY choose the print quality, either: - low, medium (default) or high. - -h, --help show this message - - Examples: - - Print the given PostScript file with default quality: - duplex f1.ps - - Print multiple PDF files with high quality: - duplex -q high *.pdf - - Print the file from STDIN: - cat f2.ps | duplex -EOF -} - -mkdtemp() { - name="$(echo 'mkstemp(template)' | - m4 -D template="${TMPDIR:-/tmp}/m4-tmpname.")" - rm -f "$name" - mkdir "$name" - echo "$name" -} - -n_pages() { - pdftk "$1" dump_data | awk '/NumberOfPages/ { print $2 }' -} - -main() { - if file -b in-tmp | grep -q PostScript; then - ps2pdf in-tmp in.pdf - elif file -b in-tmp | grep -q PDF; then - cp in-tmp in.pdf - else - printf "Don't know how to duplex print input file:\n" >&2 - file in-tmp >&2 - printf '\nGive me either a PostScript or PDF file instead.\n' >&2 - exit 2 - fi - - FULL="$(n_pages in.pdf)" - if [ "$FULL" = '1' ]; then - lp in.pdf - return - fi - - pdftk A=in.pdf cat Aodd output odd.pdf - pdftk A=in.pdf cat Aeven output even.pdf - - NODD="$(n_pages odd.pdf)" - NEVEN="$(n_pages even.pdf)" - - printf 'Printing odd pages...\n' >&2 - lp odd.pdf - printf 'Has printing finished yet? Once it does, reload the pages and hit it enter to continue. ' - read -r < /dev/tty - lp even.pdf - - if [ "$NODD" != "$NEVEN" ]; then - printf '\n' | lp - fi -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -lpoptions -o PrintQuality=standard -while getopts 'hq:' flag; do - case "$flag" in - q) - case "$OPTARG" in - low) - lpoptions -o PrintQuality=draft - ;; - medium) - lpoptions -o PrintQuality=standard - ;; - high) - lpoptions -o PrintQuality=high - ;; - *) - echo "Bad QUALITY option: \"$OPTARG\"" >&2 - exit 2 - ;; - esac - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -OLDDIR="$PWD" -cd "$(mkdtemp)" #FIXME -if [ -z "${1:-}" ]; then - cat - > in-tmp - main -else - for f in "$@"; do - # ABS="$(echo "$(cd "$(dirname "$f")"; pwd -P)/$(basename "$f")")" - # echo "$ABS" - cp "$OLDDIR/$(basename "$f")" in-tmp - main - done -fi diff --git a/src/bin/print b/src/bin/print new file mode 100755 index 0000000..ce06941 --- /dev/null +++ b/src/bin/print @@ -0,0 +1,146 @@ +#!/bin/sh +set -eu + +usage() { + cat <<-'EOF' + Usage: + print [-d] [-q QUALITY] [FILE...] + print -h +EOF +} + +help() { + cat <<-'EOF' + + Options: + -d print duplex/double-sided + -q QUALITY choose the print quality, either: + low, medium (default) or high. + -h, --help show this message + + Examples: + + Print the given PostScript file with default quality: + print f1.ps + + Print multiple PDF files with high quality: + print -q high *.pdf + + Print the file from STDIN, double-sided: + print -d < f2.ps +EOF +} + +mkdtemp() { + name="$(echo 'mkstemp(template)' | + m4 -D template="${TMPDIR:-/tmp}/m4-tmpname.")" + rm -f "$name" + mkdir "$name" + echo "$name" +} + +n_pages() { + pdftk "$1" dump_data | awk '/NumberOfPages/ { print $2 }' +} + +main() { + if file -b in-tmp | grep -q PostScript; then + ps2pdf in-tmp in.pdf + elif file -b in-tmp | grep -q PDF; then + cp in-tmp in.pdf + else + enscript -o- in-tmp | ps2pdf - in.pdf + fi + + if [ -z "$DUPLEX" ]; then + lp in.pdf + return + fi + + if [ "$(n_pages in.pdf)" = '1' ]; then + lp in.pdf + return + fi + + pdftk A=in.pdf cat Aodd output odd.pdf + pdftk A=in.pdf cat Aeven output even.pdf + + NODD="$(n_pages odd.pdf)" + NEVEN="$(n_pages even.pdf)" + + printf 'Printing odd pages...\n' >&2 + lp odd.pdf + printf 'Has printing finished yet? Once it does, reload the pages and hit it enter to continue. ' + read -r < /dev/tty + lp even.pdf + + if [ "$NODD" != "$NEVEN" ]; then + printf '\n' | lp + fi +} + +for flag in "$@"; do + case "$flag" in + --) + break + ;; + --help) + usage + help + exit + ;; + *) + ;; + esac +done + +lpoptions -o PrintQuality=standard +DUPLEX= +while getopts 'dq:h' flag; do + case "$flag" in + d) + DUPLEX=1 + ;; + q) + case "$OPTARG" in + low) + lpoptions -o PrintQuality=draft + ;; + medium) + lpoptions -o PrintQuality=standard + ;; + high) + lpoptions -o PrintQuality=high + ;; + *) + echo "Bad QUALITY option: \"$OPTARG\"" >&2 + exit 2 + ;; + esac + ;; + h) + usage + help + exit + ;; + *) + usage >&2 + exit 2 + ;; + esac +done +shift $((OPTIND - 1)) + +NEWDIR="$(mkdtemp)" +if [ -z "${1:-}" ]; then + cd "$NEWDIR" + cat - > in-tmp + main +else + for f in "$@"; do + cp "$f" "$NEWDIR"/in-tmp + cd "$NEWDIR" + main + cd - > /dev/null + done +fi -- cgit v1.2.3 From 174bf418ed519283f81c59c383cc71005db98f68 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jan 2022 12:12:35 -0300 Subject: xmonad/scripts/dmenu-pass.sh: Adjust to clipctl, add dmenu-pass-login equivalent --- xmonad/scripts/dmenu-pass-login.sh | 10 ++++++++++ xmonad/scripts/dmenu-pass.sh | 14 +++++++------- 2 files changed, 17 insertions(+), 7 deletions(-) create mode 100755 xmonad/scripts/dmenu-pass-login.sh diff --git a/xmonad/scripts/dmenu-pass-login.sh b/xmonad/scripts/dmenu-pass-login.sh new file mode 100755 index 0000000..915048d --- /dev/null +++ b/xmonad/scripts/dmenu-pass-login.sh @@ -0,0 +1,10 @@ +#!/bin/sh +set -eu + +choice="$(find ~/.password-store/ -type f -name '*.gpg' | + sed -e "s|^$HOME/.password-store/||" -e 's/\.gpg$//' | + dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18)" + +if [ -n "$choice" ]; then + pass show -c2 "$choice" +fi diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh index 6edd135..33b14dd 100755 --- a/xmonad/scripts/dmenu-pass.sh +++ b/xmonad/scripts/dmenu-pass.sh @@ -1,14 +1,14 @@ #!/bin/sh set -eu -export PASSWORD_STORE_DIR="$HOME/dev/others/password-store" +clipctl disable -choice="$(find "$PASSWORD_STORE_DIR" -type f | \ - grep -Ev '(.git|.gpg-id)' | \ - sed -e "s|$PASSWORD_STORE_DIR/||" -e 's/\.gpg$//' | \ - remembering -p password-store \ - -c "dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18")" +choice="$(find ~/.password-store/ -type f -name '*.gpg' | + sed -e "s|^$HOME/.password-store/||" -e 's/\.gpg$//' | + dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18)" if [ -n "$choice" ]; then - pass show "$choice" -c + pass show -c "$choice" fi + +clipctl enable -- cgit v1.2.3 From d10f2d349226cd71ed980ca10b650ae551fe3730 Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jan 2022 12:22:18 -0300 Subject: xmonad/scripts/dmenu-emoji.sh: Remove raku symbols --- xmonad/scripts/dmenu-emoji.sh | 14 ++++++-------- 1 file changed, 6 insertions(+), 8 deletions(-) diff --git a/xmonad/scripts/dmenu-emoji.sh b/xmonad/scripts/dmenu-emoji.sh index 71ccde8..4ee9352 100755 --- a/xmonad/scripts/dmenu-emoji.sh +++ b/xmonad/scripts/dmenu-emoji.sh @@ -1,14 +1,12 @@ #!/bin/sh -set -eux +set -eu # Derived from: # https://github.com/porras/dmenu-emoji -LIST="$HOME/dev/libre/dotfiles/xmonad/scripts/emoji-list.txt" +cd ~/dev/libre/dotfiles/xmonad/scripts/ -dmenu \ - -l 20 \ - -i \ - -p 'Emoji: ' -fn Monospace-18 \ - < "$LIST" \ - | awk '{print $(NF)}' | tr -d '\n' | xclip -sel clip +dmenu -l 20 -i -p 'Emoji: ' -fn Monospace-18 < list-emoji.txt | + awk '{print $(NF)}' | + tr -d '\n' | + xclip -sel clip -- cgit v1.2.3 From c45e43966669a4f33eb1ce4f9724a79de60bcd2c Mon Sep 17 00:00:00 2001 From: EuAndreh Date: Wed, 5 Jan 2022 12:23:31 -0300 Subject: sh/git-prompt.sh: Remove embedded file --- sh/git-prompt.sh | 589 ------------------------------------------------------- 1 file changed, 589 deletions(-) delete mode 100644 sh/git-prompt.sh diff --git a/sh/git-prompt.sh b/sh/git-prompt.sh deleted file mode 100644 index 79fd908..0000000 --- a/sh/git-prompt.sh +++ /dev/null @@ -1,589 +0,0 @@ -# Taken from: -# curl -L https://raw.github.com/git/git/master/contrib/completion/git-prompt.sh > bash/git-prompt.sh - -# bash/zsh git prompt support -# -# Copyright (C) 2006,2007 Shawn O. Pearce -# Distributed under the GNU General Public License, version 2.0. -# -# This script allows you to see repository status in your prompt. -# -# To enable: -# -# 1) Copy this file to somewhere (e.g. ~/.git-prompt.sh). -# 2) Add the following line to your .bashrc/.zshrc: -# source ~/.git-prompt.sh -# 3a) Change your PS1 to call __git_ps1 as -# command-substitution: -# Bash: PS1='[\u@\h \W$(__git_ps1 " (%s)")]\$ ' -# ZSH: setopt PROMPT_SUBST ; PS1='[%n@%m %c$(__git_ps1 " (%s)")]\$ ' -# the optional argument will be used as format string. -# 3b) Alternatively, for a slightly faster prompt, __git_ps1 can -# be used for PROMPT_COMMAND in Bash or for precmd() in Zsh -# with two parameters,
     and , which are strings
    -#        you would put in $PS1 before and after the status string
    -#        generated by the git-prompt machinery.  e.g.
    -#        Bash: PROMPT_COMMAND='__git_ps1 "\u@\h:\w" "\\\$ "'
    -#          will show username, at-sign, host, colon, cwd, then
    -#          various status string, followed by dollar and SP, as
    -#          your prompt.
    -#        ZSH:  precmd () { __git_ps1 "%n" ":%~$ " "|%s" }
    -#          will show username, pipe, then various status string,
    -#          followed by colon, cwd, dollar and SP, as your prompt.
    -#        Optionally, you can supply a third argument with a printf
    -#        format string to finetune the output of the branch status
    -#
    -# The repository status will be displayed only if you are currently in a
    -# git repository. The %s token is the placeholder for the shown status.
    -#
    -# The prompt status always includes the current branch name.
    -#
    -# In addition, if you set GIT_PS1_SHOWDIRTYSTATE to a nonempty value,
    -# unstaged (*) and staged (+) changes will be shown next to the branch
    -# name.  You can configure this per-repository with the
    -# bash.showDirtyState variable, which defaults to true once
    -# GIT_PS1_SHOWDIRTYSTATE is enabled.
    -#
    -# You can also see if currently something is stashed, by setting
    -# GIT_PS1_SHOWSTASHSTATE to a nonempty value. If something is stashed,
    -# then a '$' will be shown next to the branch name.
    -#
    -# If you would like to see if there're untracked files, then you can set
    -# GIT_PS1_SHOWUNTRACKEDFILES to a nonempty value. If there're untracked
    -# files, then a '%' will be shown next to the branch name.  You can
    -# configure this per-repository with the bash.showUntrackedFiles
    -# variable, which defaults to true once GIT_PS1_SHOWUNTRACKEDFILES is
    -# enabled.
    -#
    -# If you would like to see the difference between HEAD and its upstream,
    -# set GIT_PS1_SHOWUPSTREAM="auto".  A "<" indicates you are behind, ">"
    -# indicates you are ahead, "<>" indicates you have diverged and "="
    -# indicates that there is no difference. You can further control
    -# behaviour by setting GIT_PS1_SHOWUPSTREAM to a space-separated list
    -# of values:
    -#
    -#     verbose       show number of commits ahead/behind (+/-) upstream
    -#     name          if verbose, then also show the upstream abbrev name
    -#     legacy        don't use the '--count' option available in recent
    -#                   versions of git-rev-list
    -#     git           always compare HEAD to @{upstream}
    -#     svn           always compare HEAD to your SVN upstream
    -#
    -# You can change the separator between the branch name and the above
    -# state symbols by setting GIT_PS1_STATESEPARATOR. The default separator
    -# is SP.
    -#
    -# When there is an in-progress operation such as a merge, rebase,
    -# revert, cherry-pick, or bisect, the prompt will include information
    -# related to the operation, often in the form "|".
    -#
    -# When the repository has a sparse-checkout, a notification of the form
    -# "|SPARSE" will be included in the prompt.  This can be shortened to a
    -# single '?' character by setting GIT_PS1_COMPRESSSPARSESTATE, or omitted
    -# by setting GIT_PS1_OMITSPARSESTATE.
    -#
    -# By default, __git_ps1 will compare HEAD to your SVN upstream if it can
    -# find one, or @{upstream} otherwise.  Once you have set
    -# GIT_PS1_SHOWUPSTREAM, you can override it on a per-repository basis by
    -# setting the bash.showUpstream config variable.
    -#
    -# If you would like to see more information about the identity of
    -# commits checked out as a detached HEAD, set GIT_PS1_DESCRIBE_STYLE
    -# to one of these values:
    -#
    -#     contains      relative to newer annotated tag (v1.6.3.2~35)
    -#     branch        relative to newer tag or branch (master~4)
    -#     describe      relative to older annotated tag (v1.6.3.1-13-gdd42c2f)
    -#     tag           relative to any older tag (v1.6.3.1-13-gdd42c2f)
    -#     default       exactly matching tag
    -#
    -# If you would like a colored hint about the current dirty state, set
    -# GIT_PS1_SHOWCOLORHINTS to a nonempty value. The colors are based on
    -# the colored output of "git status -sb" and are available only when
    -# using __git_ps1 for PROMPT_COMMAND or precmd in Bash,
    -# but always available in Zsh.
    -#
    -# If you would like __git_ps1 to do nothing in the case when the current
    -# directory is set up to be ignored by git, then set
    -# GIT_PS1_HIDE_IF_PWD_IGNORED to a nonempty value. Override this on the
    -# repository level by setting bash.hideIfPwdIgnored to "false".
    -
    -# check whether printf supports -v
    -__git_printf_supports_v=
    -printf -v __git_printf_supports_v -- '%s' yes >/dev/null 2>&1
    -
    -# stores the divergence from upstream in $p
    -# used by GIT_PS1_SHOWUPSTREAM
    -__git_ps1_show_upstream ()
    -{
    -	local key value
    -	local svn_remote svn_url_pattern count n
    -	local upstream=git legacy="" verbose="" name=""
    -
    -	svn_remote=()
    -	# get some config options from git-config
    -	local output="$(git config -z --get-regexp '^(svn-remote\..*\.url|bash\.showupstream)$' 2>/dev/null | tr '\0\n' '\n ')"
    -	while read -r key value; do
    -		case "$key" in
    -		bash.showupstream)
    -			GIT_PS1_SHOWUPSTREAM="$value"
    -			if [[ -z "${GIT_PS1_SHOWUPSTREAM}" ]]; then
    -				p=""
    -				return
    -			fi
    -			;;
    -		svn-remote.*.url)
    -			svn_remote[$((${#svn_remote[@]} + 1))]="$value"
    -			svn_url_pattern="$svn_url_pattern\\|$value"
    -			upstream=svn+git # default upstream is SVN if available, else git
    -			;;
    -		esac
    -	done <<< "$output"
    -
    -	# parse configuration values
    -	local option
    -	for option in ${GIT_PS1_SHOWUPSTREAM}; do
    -		case "$option" in
    -		git|svn) upstream="$option" ;;
    -		verbose) verbose=1 ;;
    -		legacy)  legacy=1  ;;
    -		name)    name=1 ;;
    -		esac
    -	done
    -
    -	# Find our upstream
    -	case "$upstream" in
    -	git)    upstream="@{upstream}" ;;
    -	svn*)
    -		# get the upstream from the "git-svn-id: ..." in a commit message
    -		# (git-svn uses essentially the same procedure internally)
    -		local -a svn_upstream
    -		svn_upstream=($(git log --first-parent -1 \
    -					--grep="^git-svn-id: \(${svn_url_pattern#??}\)" 2>/dev/null))
    -		if [[ 0 -ne ${#svn_upstream[@]} ]]; then
    -			svn_upstream=${svn_upstream[${#svn_upstream[@]} - 2]}
    -			svn_upstream=${svn_upstream%@*}
    -			local n_stop="${#svn_remote[@]}"
    -			for ((n=1; n <= n_stop; n++)); do
    -				svn_upstream=${svn_upstream#${svn_remote[$n]}}
    -			done
    -
    -			if [[ -z "$svn_upstream" ]]; then
    -				# default branch name for checkouts with no layout:
    -				upstream=${GIT_SVN_ID:-git-svn}
    -			else
    -				upstream=${svn_upstream#/}
    -			fi
    -		elif [[ "svn+git" = "$upstream" ]]; then
    -			upstream="@{upstream}"
    -		fi
    -		;;
    -	esac
    -
    -	# Find how many commits we are ahead/behind our upstream
    -	if [[ -z "$legacy" ]]; then
    -		count="$(git rev-list --count --left-right \
    -				"$upstream"...HEAD 2>/dev/null)"
    -	else
    -		# produce equivalent output to --count for older versions of git
    -		local commits
    -		if commits="$(git rev-list --left-right "$upstream"...HEAD 2>/dev/null)"
    -		then
    -			local commit behind=0 ahead=0
    -			for commit in $commits
    -			do
    -				case "$commit" in
    -				"<"*) ((behind++)) ;;
    -				*)    ((ahead++))  ;;
    -				esac
    -			done
    -			count="$behind	$ahead"
    -		else
    -			count=""
    -		fi
    -	fi
    -
    -	# calculate the result
    -	if [[ -z "$verbose" ]]; then
    -		case "$count" in
    -		"") # no upstream
    -			p="" ;;
    -		"0	0") # equal to upstream
    -			p="=" ;;
    -		"0	"*) # ahead of upstream
    -			p=">" ;;
    -		*"	0") # behind upstream
    -			p="<" ;;
    -		*)	    # diverged from upstream
    -			p="<>" ;;
    -		esac
    -	else
    -		case "$count" in
    -		"") # no upstream
    -			p="" ;;
    -		"0	0") # equal to upstream
    -			p=" u=" ;;
    -		"0	"*) # ahead of upstream
    -			p=" u+${count#0	}" ;;
    -		*"	0") # behind upstream
    -			p=" u-${count%	0}" ;;
    -		*)	    # diverged from upstream
    -			p=" u+${count#*	}-${count%	*}" ;;
    -		esac
    -		if [[ -n "$count" && -n "$name" ]]; then
    -			__git_ps1_upstream_name=$(git rev-parse \
    -				--abbrev-ref "$upstream" 2>/dev/null)
    -			if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    -				p="$p \${__git_ps1_upstream_name}"
    -			else
    -				p="$p ${__git_ps1_upstream_name}"
    -				# not needed anymore; keep user's
    -				# environment clean
    -				unset __git_ps1_upstream_name
    -			fi
    -		fi
    -	fi
    -
    -}
    -
    -# Helper function that is meant to be called from __git_ps1.  It
    -# injects color codes into the appropriate gitstring variables used
    -# to build a gitstring.
    -__git_ps1_colorize_gitstring ()
    -{
    -	if [[ -n ${ZSH_VERSION-} ]]; then
    -		local c_red='%F{red}'
    -		local c_green='%F{green}'
    -		local c_lblue='%F{blue}'
    -		local c_clear='%f'
    -	else
    -		# Using \[ and \] around colors is necessary to prevent
    -		# issues with command line editing/browsing/completion!
    -		local c_red='\[\e[31m\]'
    -		local c_green='\[\e[32m\]'
    -		local c_lblue='\[\e[1;34m\]'
    -		local c_clear='\[\e[0m\]'
    -	fi
    -	local bad_color=$c_red
    -	local ok_color=$c_green
    -	local flags_color="$c_lblue"
    -
    -	local branch_color=""
    -	if [ $detached = no ]; then
    -		branch_color="$ok_color"
    -	else
    -		branch_color="$bad_color"
    -	fi
    -	c="$branch_color$c"
    -
    -	z="$c_clear$z"
    -	if [ "$w" = "*" ]; then
    -		w="$bad_color$w"
    -	fi
    -	if [ -n "$i" ]; then
    -		i="$ok_color$i"
    -	fi
    -	if [ -n "$s" ]; then
    -		s="$flags_color$s"
    -	fi
    -	if [ -n "$u" ]; then
    -		u="$bad_color$u"
    -	fi
    -	r="$c_clear$r"
    -}
    -
    -# Helper function to read the first line of a file into a variable.
    -# __git_eread requires 2 arguments, the file path and the name of the
    -# variable, in that order.
    -__git_eread ()
    -{
    -	test -r "$1" && IFS=$'\r\n' read "$2" <"$1"
    -}
    -
    -# see if a cherry-pick or revert is in progress, if the user has committed a
    -# conflict resolution with 'git commit' in the middle of a sequence of picks or
    -# reverts then CHERRY_PICK_HEAD/REVERT_HEAD will not exist so we have to read
    -# the todo file.
    -__git_sequencer_status ()
    -{
    -	local todo
    -	if test -f "$g/CHERRY_PICK_HEAD"
    -	then
    -		r="|CHERRY-PICKING"
    -		return 0;
    -	elif test -f "$g/REVERT_HEAD"
    -	then
    -		r="|REVERTING"
    -		return 0;
    -	elif __git_eread "$g/sequencer/todo" todo
    -	then
    -		case "$todo" in
    -		p[\ \	]|pick[\ \	]*)
    -			r="|CHERRY-PICKING"
    -			return 0
    -		;;
    -		revert[\ \	]*)
    -			r="|REVERTING"
    -			return 0
    -		;;
    -		esac
    -	fi
    -	return 1
    -}
    -
    -# __git_ps1 accepts 0 or 1 arguments (i.e., format string)
    -# when called from PS1 using command substitution
    -# in this mode it prints text to add to bash PS1 prompt (includes branch name)
    -#
    -# __git_ps1 requires 2 or 3 arguments when called from PROMPT_COMMAND (pc)
    -# in that case it _sets_ PS1. The arguments are parts of a PS1 string.
    -# when two arguments are given, the first is prepended and the second appended
    -# to the state string when assigned to PS1.
    -# The optional third parameter will be used as printf format string to further
    -# customize the output of the git-status string.
    -# In this mode you can request colored hints using GIT_PS1_SHOWCOLORHINTS=true
    -__git_ps1 ()
    -{
    -	# preserve exit status
    -	local exit=$?
    -	local pcmode=no
    -	local detached=no
    -	local ps1pc_start='\u@\h:\w '
    -	local ps1pc_end='\$ '
    -	local printf_format=' (%s)'
    -
    -	case "$#" in
    -		2|3)	pcmode=yes
    -			ps1pc_start="$1"
    -			ps1pc_end="$2"
    -			printf_format="${3:-$printf_format}"
    -			# set PS1 to a plain prompt so that we can
    -			# simply return early if the prompt should not
    -			# be decorated
    -			PS1="$ps1pc_start$ps1pc_end"
    -		;;
    -		0|1)	printf_format="${1:-$printf_format}"
    -		;;
    -		*)	return $exit
    -		;;
    -	esac
    -
    -	# ps1_expanded:  This variable is set to 'yes' if the shell
    -	# subjects the value of PS1 to parameter expansion:
    -	#
    -	#   * bash does unless the promptvars option is disabled
    -	#   * zsh does not unless the PROMPT_SUBST option is set
    -	#   * POSIX shells always do
    -	#
    -	# If the shell would expand the contents of PS1 when drawing
    -	# the prompt, a raw ref name must not be included in PS1.
    -	# This protects the user from arbitrary code execution via
    -	# specially crafted ref names.  For example, a ref named
    -	# 'refs/heads/$(IFS=_;cmd=sudo_rm_-rf_/;$cmd)' might cause the
    -	# shell to execute 'sudo rm -rf /' when the prompt is drawn.
    -	#
    -	# Instead, the ref name should be placed in a separate global
    -	# variable (in the __git_ps1_* namespace to avoid colliding
    -	# with the user's environment) and that variable should be
    -	# referenced from PS1.  For example:
    -	#
    -	#     __git_ps1_foo=$(do_something_to_get_ref_name)
    -	#     PS1="...stuff...\${__git_ps1_foo}...stuff..."
    -	#
    -	# If the shell does not expand the contents of PS1, the raw
    -	# ref name must be included in PS1.
    -	#
    -	# The value of this variable is only relevant when in pcmode.
    -	#
    -	# Assume that the shell follows the POSIX specification and
    -	# expands PS1 unless determined otherwise.  (This is more
    -	# likely to be correct if the user has a non-bash, non-zsh
    -	# shell and safer than the alternative if the assumption is
    -	# incorrect.)
    -	#
    -	local ps1_expanded=yes
    -	[ -z "${ZSH_VERSION-}" ] || [[ -o PROMPT_SUBST ]] || ps1_expanded=no
    -	[ -z "${BASH_VERSION-}" ] || shopt -q promptvars || ps1_expanded=no
    -
    -	local repo_info rev_parse_exit_code
    -	repo_info="$(git rev-parse --git-dir --is-inside-git-dir \
    -		--is-bare-repository --is-inside-work-tree \
    -		--short HEAD 2>/dev/null)"
    -	rev_parse_exit_code="$?"
    -
    -	if [ -z "$repo_info" ]; then
    -		return $exit
    -	fi
    -
    -	local short_sha=""
    -	if [ "$rev_parse_exit_code" = "0" ]; then
    -		short_sha="${repo_info##*$'\n'}"
    -		repo_info="${repo_info%$'\n'*}"
    -	fi
    -	local inside_worktree="${repo_info##*$'\n'}"
    -	repo_info="${repo_info%$'\n'*}"
    -	local bare_repo="${repo_info##*$'\n'}"
    -	repo_info="${repo_info%$'\n'*}"
    -	local inside_gitdir="${repo_info##*$'\n'}"
    -	local g="${repo_info%$'\n'*}"
    -
    -	if [ "true" = "$inside_worktree" ] &&
    -	   [ -n "${GIT_PS1_HIDE_IF_PWD_IGNORED-}" ] &&
    -	   [ "$(git config --bool bash.hideIfPwdIgnored)" != "false" ] &&
    -	   git check-ignore -q .
    -	then
    -		return $exit
    -	fi
    -
    -	local sparse=""
    -	if [ -z "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    -	   [ -z "${GIT_PS1_OMITSPARSESTATE}" ] &&
    -	   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    -		sparse="|SPARSE"
    -	fi
    -
    -	local r=""
    -	local b=""
    -	local step=""
    -	local total=""
    -	if [ -d "$g/rebase-merge" ]; then
    -		__git_eread "$g/rebase-merge/head-name" b
    -		__git_eread "$g/rebase-merge/msgnum" step
    -		__git_eread "$g/rebase-merge/end" total
    -		r="|REBASE"
    -	else
    -		if [ -d "$g/rebase-apply" ]; then
    -			__git_eread "$g/rebase-apply/next" step
    -			__git_eread "$g/rebase-apply/last" total
    -			if [ -f "$g/rebase-apply/rebasing" ]; then
    -				__git_eread "$g/rebase-apply/head-name" b
    -				r="|REBASE"
    -			elif [ -f "$g/rebase-apply/applying" ]; then
    -				r="|AM"
    -			else
    -				r="|AM/REBASE"
    -			fi
    -		elif [ -f "$g/MERGE_HEAD" ]; then
    -			r="|MERGING"
    -		elif __git_sequencer_status; then
    -			:
    -		elif [ -f "$g/BISECT_LOG" ]; then
    -			r="|BISECTING"
    -		fi
    -
    -		if [ -n "$b" ]; then
    -			:
    -		elif [ -h "$g/HEAD" ]; then
    -			# symlink symbolic ref
    -			b="$(git symbolic-ref HEAD 2>/dev/null)"
    -		else
    -			local head=""
    -			if ! __git_eread "$g/HEAD" head; then
    -				return $exit
    -			fi
    -			# is it a symbolic ref?
    -			b="${head#ref: }"
    -			if [ "$head" = "$b" ]; then
    -				detached=yes
    -				b="$(
    -				case "${GIT_PS1_DESCRIBE_STYLE-}" in
    -				(contains)
    -					git describe --contains HEAD ;;
    -				(branch)
    -					git describe --contains --all HEAD ;;
    -				(tag)
    -					git describe --tags HEAD ;;
    -				(describe)
    -					git describe HEAD ;;
    -				(* | default)
    -					git describe --tags --exact-match HEAD ;;
    -				esac 2>/dev/null)" ||
    -
    -				b="$short_sha..."
    -				b="($b)"
    -			fi
    -		fi
    -	fi
    -
    -	if [ -n "$step" ] && [ -n "$total" ]; then
    -		r="$r $step/$total"
    -	fi
    -
    -	local w=""
    -	local i=""
    -	local s=""
    -	local u=""
    -	local h=""
    -	local c=""
    -	local p=""
    -
    -	if [ "true" = "$inside_gitdir" ]; then
    -		if [ "true" = "$bare_repo" ]; then
    -			c="BARE:"
    -		else
    -			b="GIT_DIR!"
    -		fi
    -	elif [ "true" = "$inside_worktree" ]; then
    -		if [ -n "${GIT_PS1_SHOWDIRTYSTATE-}" ] &&
    -		   [ "$(git config --bool bash.showDirtyState)" != "false" ]
    -		then
    -			git diff --no-ext-diff --quiet || w="*"
    -			git diff --no-ext-diff --cached --quiet || i="+"
    -			if [ -z "$short_sha" ] && [ -z "$i" ]; then
    -				i="#"
    -			fi
    -		fi
    -		if [ -n "${GIT_PS1_SHOWSTASHSTATE-}" ] &&
    -		   git rev-parse --verify --quiet refs/stash >/dev/null
    -		then
    -			s="$"
    -		fi
    -
    -		if [ -n "${GIT_PS1_SHOWUNTRACKEDFILES-}" ] &&
    -		   [ "$(git config --bool bash.showUntrackedFiles)" != "false" ] &&
    -		   git ls-files --others --exclude-standard --directory --no-empty-directory --error-unmatch -- ':/*' >/dev/null 2>/dev/null
    -		then
    -			u="%${ZSH_VERSION+%}"
    -		fi
    -
    -		if [ -n "${GIT_PS1_COMPRESSSPARSESTATE}" ] &&
    -		   [ "$(git config --bool core.sparseCheckout)" = "true" ]; then
    -			h="?"
    -		fi
    -
    -		if [ -n "${GIT_PS1_SHOWUPSTREAM-}" ]; then
    -			__git_ps1_show_upstream
    -		fi
    -	fi
    -
    -	local z="${GIT_PS1_STATESEPARATOR-" "}"
    -
    -	# NO color option unless in PROMPT_COMMAND mode or it's Zsh
    -	if [ -n "${GIT_PS1_SHOWCOLORHINTS-}" ]; then
    -		if [ $pcmode = yes ] || [ -n "${ZSH_VERSION-}" ]; then
    -			__git_ps1_colorize_gitstring
    -		fi
    -	fi
    -
    -	b=${b##refs/heads/}
    -	if [ $pcmode = yes ] && [ $ps1_expanded = yes ]; then
    -		__git_ps1_branch_name=$b
    -		b="\${__git_ps1_branch_name}"
    -	fi
    -
    -	local f="$h$w$i$s$u"
    -	local gitstring="$c$b${f:+$z$f}${sparse}$r$p"
    -
    -	if [ $pcmode = yes ]; then
    -		if [ "${__git_printf_supports_v-}" != yes ]; then
    -			gitstring=$(printf -- "$printf_format" "$gitstring")
    -		else
    -			printf -v gitstring -- "$printf_format" "$gitstring"
    -		fi
    -		PS1="$ps1pc_start$gitstring$ps1pc_end"
    -	else
    -		printf -- "$printf_format" "$gitstring"
    -	fi
    -
    -	return $exit
    -}
    -- 
    cgit v1.2.3
    
    
    From ad0b32c9e20c2f504b87cf11c5a4af45330228c2 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 6 Jan 2022 14:23:38 -0300
    Subject: configuration.nix: Remove nixUnstable package
    
    ---
     configuration.nix | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index 3697951..427bf7e 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -171,7 +171,6 @@ in {
           tree
           feh
           libqrencode
    -      nixUnstable # =nix=
           bind # =dig=
           rsync
           moreutils # =vipe=, =sponge=, errno
    -- 
    cgit v1.2.3
    
    
    From 012cf2539e93a9f29bd303768800a1b44f08d6d9 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 6 Jan 2022 14:24:00 -0300
    Subject: configuration.nix: add empty line in "with-email.sh" file
    
    ---
     configuration.nix | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/configuration.nix b/configuration.nix
    index 427bf7e..fbd3f1d 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -308,6 +308,7 @@ in {
           "with-email.sh".text = ''
             #!/bin/sh
             set -u
    +
             while getopts 's:' flag; do
             	case "$flag" in
             		s)
    -- 
    cgit v1.2.3
    
    
    From e083a63a5baaeae21f67514bf98cfe1e43372e5a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 8 Jan 2022 02:26:31 -0300
    Subject: src/bin/backup: Use "suyin" instead of "$R" for SSH remote
    
    ---
     src/bin/backup | 20 ++++++++++----------
     1 file changed, 10 insertions(+), 10 deletions(-)
    
    diff --git a/src/bin/backup b/src/bin/backup
    index 1e51d09..434eeef 100755
    --- a/src/bin/backup
    +++ b/src/bin/backup
    @@ -59,26 +59,26 @@ finish() {
     }
     trap finish EXIT
     
    -R='16686@ch-s010.rsync.net'
    +
     export BORG_REMOTE_PATH='borg1'
     export BORG_PASSCOMMAND='pass show Usurpador/borg/passphrase'
     SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
     export SSH_AUTH_SOCK
     
    -borg init -e repokey-blake2 $R:usurpador-borg ||:
    -borg key export $R:usurpador-borg ~/archive/usurpador-borg-key.txt
    +borg init -e repokey-blake2 suyin:usurpador-borg ||:
    +borg key export suyin:usurpador-borg ~/archive/usurpador-borg-key.txt
     
     borg create \
    -	--stats                                             \
    -	--compression lzma,9                                \
    -	--comment "${2:-}"                                  \
    -	"$R:usurpador-borg::{hostname}-{now}-${1:-cronjob}" \
    +	--stats                                                \
    +	--compression lzma,9                                   \
    +	--comment "${2:-}"                                     \
    +	"suyin:usurpador-borg::{hostname}-{now}-${1:-cronjob}" \
     	~/
     
     borg check \
     	--verbose \
     	--last 3  \
    -	$R:usurpador-borg
    +	suyin:usurpador-borg
     
     borg prune \
     	--verbose         \
    @@ -86,6 +86,6 @@ borg prune \
     	--keep-within=6m  \
     	--keep-weekly=52  \
     	--keep-monthly=24 \
    -	$R:usurpador-borg
    +	suyin:usurpador-borg
     
    -ssh $R quota
    +ssh suyin quota
    -- 
    cgit v1.2.3
    
    
    From 4485157cdc579b7157d4686b4ee386b7623c5d93 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 27 Jan 2022 12:59:27 -0300
    Subject: TODOs.md: Fix link to repository address
    
    ---
     TODOs.md | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/TODOs.md b/TODOs.md
    index 4f8a73b..9974abd 100644
    --- a/TODOs.md
    +++ b/TODOs.md
    @@ -7,7 +7,7 @@
     - DONE in 2021-02-20
     
       Done in
    -  [`250117393a0503f66bb5a10cd0199f8748d32cda`](http://git.euandreh.xyz/dotfiles/commit/?id=250117393a0503f66bb5a10cd0199f8748d32cda)
    +  [`250117393a0503f66bb5a10cd0199f8748d32cda`](http://euandreh.xyz/dotfiles.git/commit/?id=250117393a0503f66bb5a10cd0199f8748d32cda)
     - TODO in 2021-02-19
     
     # Bugs
    -- 
    cgit v1.2.3
    
    
    From 6035d52eeb2094ee344c60afe5556734a89c846b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Feb 2022 11:38:28 -0300
    Subject: src/bin/backup: exclude ~/.cache from backup
    
    For two reasons:
    1. to reduce the size of the backup.  If there's a candidate folder to
       be removed in order to decrease the size of the backup, ~/.cache is
       that folder;
    2. to stop errors during the backup to happen.  It's common for files to
       come and go while the backup is running, and borg sometimes starts
       backing up a file and it vanishes in the middle of the backup, and
       returns an error.  In the end the backup finishes sucessfully, but
       the backup script halts.
    ---
     src/bin/backup | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/src/bin/backup b/src/bin/backup
    index 434eeef..631e28f 100755
    --- a/src/bin/backup
    +++ b/src/bin/backup
    @@ -69,6 +69,7 @@ borg init -e repokey-blake2 suyin:usurpador-borg ||:
     borg key export suyin:usurpador-borg ~/archive/usurpador-borg-key.txt
     
     borg create \
    +	--exclude ~/.cache                                     \
     	--stats                                                \
     	--compression lzma,9                                   \
     	--comment "${2:-}"                                     \
    -- 
    cgit v1.2.3
    
    
    From 0431ba2d80c5cb71b5acaf6172900cebc3b43c65 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Feb 2022 12:02:27 -0300
    Subject: src/bin/backup: Change remote path usurpador-borg/ -> borg/usurpador/
    
    ---
     src/bin/backup | 10 +++++-----
     1 file changed, 5 insertions(+), 5 deletions(-)
    
    diff --git a/src/bin/backup b/src/bin/backup
    index 631e28f..159f8db 100755
    --- a/src/bin/backup
    +++ b/src/bin/backup
    @@ -65,21 +65,21 @@ export BORG_PASSCOMMAND='pass show Usurpador/borg/passphrase'
     SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)"
     export SSH_AUTH_SOCK
     
    -borg init -e repokey-blake2 suyin:usurpador-borg ||:
    -borg key export suyin:usurpador-borg ~/archive/usurpador-borg-key.txt
    +borg init -e repokey-blake2 suyin:borg/usurpador ||:
    +borg key export suyin:borg/usurpador ~/archive/usurpador-borg-key.txt
     
     borg create \
     	--exclude ~/.cache                                     \
     	--stats                                                \
     	--compression lzma,9                                   \
     	--comment "${2:-}"                                     \
    -	"suyin:usurpador-borg::{hostname}-{now}-${1:-cronjob}" \
    +	"suyin:borg/usurpador::{hostname}-{now}-${1:-cronjob}" \
     	~/
     
     borg check \
     	--verbose \
     	--last 3  \
    -	suyin:usurpador-borg
    +	suyin:borg/usurpador
     
     borg prune \
     	--verbose         \
    @@ -87,6 +87,6 @@ borg prune \
     	--keep-within=6m  \
     	--keep-weekly=52  \
     	--keep-monthly=24 \
    -	suyin:usurpador-borg
    +	suyin:borg/usurpador
     
     ssh suyin quota
    -- 
    cgit v1.2.3
    
    
    From 9e6ea1d9d691ebca7c3ab2a6b8d1e26191bc8ba2 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:09:24 -0300
    Subject: ssh.conf: Include multiple files instead of keeping config here
    
    ---
     ssh.conf | 2 ++
     1 file changed, 2 insertions(+)
     create mode 100644 ssh.conf
    
    diff --git a/ssh.conf b/ssh.conf
    new file mode 100644
    index 0000000..319d6b3
    --- /dev/null
    +++ b/ssh.conf
    @@ -0,0 +1,2 @@
    +Include ~/dev/libre/servers/src/infrastructure/ssh.conf
    +Include ~/dev/others/lawtech/src/infrastructure/ssh.conf
    -- 
    cgit v1.2.3
    
    
    From 9e97a14a6560ad4ca8ede291a379e3312e70a39a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:14:26 -0300
    Subject: infokey: Add custom colors
    
    ---
     infokey | 5 +++++
     1 file changed, 5 insertions(+)
    
    diff --git a/infokey b/infokey
    index f78b9a7..90edc50 100644
    --- a/infokey
    +++ b/infokey
    @@ -1,2 +1,7 @@
     ^e down-line
     ^y up-line
    +
    +#var
    +link-style=cyan
    +active-link-style=blue,bold
    +match-style=underline,bold,bggreen
    -- 
    cgit v1.2.3
    
    
    From 06c1ebbe49c317121672ff2afa7529b77506649d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:18:06 -0300
    Subject: xmonad/xmonad.hs: Old vid-* bindings, add bindings to pass and
     clipmenu
    
    ---
     xmonad/xmonad.hs | 17 +++++------------
     1 file changed, 5 insertions(+), 12 deletions(-)
    
    diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs
    index 465cde5..c3701d3 100644
    --- a/xmonad/xmonad.hs
    +++ b/xmonad/xmonad.hs
    @@ -49,11 +49,11 @@ myKeyPBindings =
         , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/zero-brightness.sh")
         , ("",   spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh +10")
     
    -    , ("M-p", spawnHere "exe=$(dmenu_path | remembering -p dmenu_exec -c dmenu) && exec $exe")
    -    , ("M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh")
    +    , ("M-p", spawnHere "exe=$(dmenu_path | dmenu) && exec $exe")
         , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh")
    -
    -    , ("M-b", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/yad-buku.sh")
    +    , ("M-v", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-clipmenu.sh")
    +    , ("M-i",   spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh")
    +    , ("C-M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass-login.sh")
     
           -- Lock screen
         , ("C-M-l", spawn "dm-tool switch-to-greeter")
    @@ -69,9 +69,6 @@ myKeyPBindings =
           -- xrandr three monitor setup
         , ("C-M-3", spawn "~/dev/libre/dotfiles/xmonad/scripts/three-monitors.sh")
     
    -      -- restart network
    -    , ("M-x", spawn "gksudo -S systemctl restart NetworkManager")
    -
           -- Toggle appearence of xmobar
           -- https://stackoverflow.com/a/27646652
         , ("M-f", sendMessage ToggleStruts)
    @@ -85,11 +82,7 @@ myKeyPBindings =
     
     
           -- Toggle PulseAudio sink
    -    , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/toggle-pulseaudio-sink.sh")
    -
    -      -- Enqueue link on clipboard in VLC
    -    -- , ("M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-vid.sh")
    -    -- , ("C-M-v", spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-videq.sh")
    +    , ("M-s", spawn "~/dev/libre/dotfiles/xmonad/scripts/toggle-pulseaudio-sink.sh")
         ]
     
     myLayoutHook =
    -- 
    cgit v1.2.3
    
    
    From 116a8704f9cce54493cc9c7866ad707e3b28d1fe Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:18:28 -0300
    Subject: xmonad/scripts/dmenu-pass.sh: Use LANG=POSIX.UTF-8 for sorting
    
    ---
     xmonad/scripts/dmenu-pass.sh | 9 ++++++---
     1 file changed, 6 insertions(+), 3 deletions(-)
    
    diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh
    index 33b14dd..5721c08 100755
    --- a/xmonad/scripts/dmenu-pass.sh
    +++ b/xmonad/scripts/dmenu-pass.sh
    @@ -3,9 +3,12 @@ set -eu
     
     clipctl disable
     
    -choice="$(find ~/.password-store/ -type f -name '*.gpg'          |
    -            sed -e "s|^$HOME/.password-store/||" -e 's/\.gpg$//' |
    -            dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18)"
    +choice="$(
    +	find ~/.password-store/ -type f -name '*.gpg'          |
    +		sed -e "s|^$HOME/.password-store/||" -e 's/\.gpg$//' |
    +		LANG=POSIX.UTF-8 sort                                |
    +		dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18
    +)"
     
     if [ -n "$choice" ]; then
     	pass show -c "$choice"
    -- 
    cgit v1.2.3
    
    
    From 6c59bf83073419b76a95855900f90376ba5f4de4 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:19:03 -0300
    Subject: vcs/gitconfig.ini: Enable commit verbose mode by default
    
    This is a quality of life improvement to always include the diff when
    editing the commit message in the text editor, instead of having to
    explicitly type "git commit -v ..." every time.
    ---
     vcs/gitconfig.ini | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/vcs/gitconfig.ini b/vcs/gitconfig.ini
    index c4c4a51..d93050a 100644
    --- a/vcs/gitconfig.ini
    +++ b/vcs/gitconfig.ini
    @@ -47,6 +47,7 @@
       genmetadata = true
     [commit]
       gpgsign = true
    +  verbose = true
     [fetch]
       prune = true
     [pack]
    -- 
    cgit v1.2.3
    
    
    From 8bd8006757f2d1807d22f028d9400f524526dd49 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:20:56 -0300
    Subject: tmux.conf: Add keybinding to set the root on the current session
    
    ---
     tmux.conf | 3 +++
     1 file changed, 3 insertions(+)
    
    diff --git a/tmux.conf b/tmux.conf
    index 8dd08b2..33a5e48 100644
    --- a/tmux.conf
    +++ b/tmux.conf
    @@ -80,3 +80,6 @@ set -g display-panes-time 2500
     bind-key u capture-pane \; save-buffer /tmp/tmux-urlscan-buffer \; new-window -n "urlscan" '$SHELL -c "urlscan < /tmp/tmux-urlscan-buffer"'
     
     bind-key t resize-pane -x 80
    +
    +
    +bind -n M-u attach-session -t . -c '#{pane_current_path}' \; display-message "CWD for session updated to #{pane_current_path}!"
    -- 
    cgit v1.2.3
    
    
    From 837e32d65ef039e0b95472d544f862716a861ecc Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:21:51 -0300
    Subject: src/bin/backup: Indent documentation heredocs
    
    ---
     src/bin/backup | 18 +++++++++---------
     1 file changed, 9 insertions(+), 9 deletions(-)
    
    diff --git a/src/bin/backup b/src/bin/backup
    index 159f8db..934062f 100755
    --- a/src/bin/backup
    +++ b/src/bin/backup
    @@ -3,21 +3,21 @@ set -eu
     
     usage() {
     	cat <<-'EOF'
    -	Usage:
    -	  backup [ARCHIVE_TAG [COMMENT]]
    -	  backup -h
    -EOF
    +		Usage:
    +		  backup [ARCHIVE_TAG [COMMENT]]
    +		  backup -h
    +	EOF
     }
     
     help() {
     	cat <<-'EOF'
     
    -	ARCHIVE_TAG defaults to "cronjob".
    -	COMMENT defaults to an empty string.
    +		ARCHIVE_TAG defaults to "cronjob".
    +		COMMENT defaults to an empty string.
     
    -	Options:
    -	  -h, --help    show this message
    -EOF
    +		Options:
    +		  -h, --help    show this message
    +	EOF
     }
     
     for flag in "$@"; do
    -- 
    cgit v1.2.3
    
    
    From a6ecb0e69e9aa308faccbda508ad4b748ea97557 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:22:10 -0300
    Subject: src/bin/backup: Include "-v" verbose flag
    
    ---
     src/bin/backup | 7 ++++++-
     1 file changed, 6 insertions(+), 1 deletion(-)
    
    diff --git a/src/bin/backup b/src/bin/backup
    index 934062f..65f94b5 100755
    --- a/src/bin/backup
    +++ b/src/bin/backup
    @@ -35,13 +35,17 @@ for flag in "$@"; do
     	esac
     done
     
    -while getopts 'h' flag; do
    +VERBOSE_FLAG=''
    +while getopts 'hv' flag; do
     	case "$flag" in
     		h)
     			usage
     			help
     			exit
     			;;
    +		v)
    +			VERBOSE_FLAG='-v'
    +			;;
     		*)
     			usage >&2
     			exit 2
    @@ -69,6 +73,7 @@ borg init -e repokey-blake2 suyin:borg/usurpador ||:
     borg key export suyin:borg/usurpador ~/archive/usurpador-borg-key.txt
     
     borg create \
    +	$VERBOSE_FLAG                                          \
     	--exclude ~/.cache                                     \
     	--stats                                                \
     	--compression lzma,9                                   \
    -- 
    cgit v1.2.3
    
    
    From 1701c8d19ca93b00a3d700c40a01f98849ca2cf7 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:23:00 -0300
    Subject: src/bin/print: Add more examples in help message
    
    ---
     src/bin/print | 9 ++++++---
     1 file changed, 6 insertions(+), 3 deletions(-)
    
    diff --git a/src/bin/print b/src/bin/print
    index ce06941..f6de2dc 100755
    --- a/src/bin/print
    +++ b/src/bin/print
    @@ -21,13 +21,16 @@ help() {
     	Examples:
     
     	  Print the given PostScript file with default quality:
    -	    print f1.ps
    +	    $ print f1.ps
     
     	  Print multiple PDF files with high quality:
    -	    print -q high *.pdf
    +	    $ print -dq high *.pdf
     
     	  Print the file from STDIN, double-sided:
    -	    print -d < f2.ps
    +	    $ print -d < f2.ps
    +
    +	  Print multiple source code files:
    +	    $ print src/*.{c,h}
     EOF
     }
     
    -- 
    cgit v1.2.3
    
    
    From 881af07eefffcb4463dbae635c611472ec213d9d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:23:18 -0300
    Subject: TODOs.md: Add #td-e2b2e9d5-b8c9-9ce3-a0c1-699963325d4e
    
    ---
     TODOs.md | 3 +++
     1 file changed, 3 insertions(+)
    
    diff --git a/TODOs.md b/TODOs.md
    index 9974abd..396f0d6 100644
    --- a/TODOs.md
    +++ b/TODOs.md
    @@ -1,5 +1,8 @@
     # Tasks
     
    +## TODO Make `src/bin/print` more robust {#td-e2b2e9d5-b8c9-9ce3-a0c1-699963325d4e}
    +- TODO in 2022-03-25
    +
     ## TODO Make code examples use monospaced font for manpage generated HTML {#task-83505972-2c0c-3569-5cb5-017daa628afd}
     - TODO in 2021-06-13
     
    -- 
    cgit v1.2.3
    
    
    From a0f6851577e6a2bc4ec835b8092a0b1304a6640c Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:23:47 -0300
    Subject: src/bin/print: Allow printing files from different directories
    
    ---
     src/bin/print | 22 ++++++++++++----------
     1 file changed, 12 insertions(+), 10 deletions(-)
    
    diff --git a/src/bin/print b/src/bin/print
    index f6de2dc..735d8ba 100755
    --- a/src/bin/print
    +++ b/src/bin/print
    @@ -47,16 +47,18 @@ n_pages() {
     }
     
     main() {
    -	if file -b in-tmp   | grep -q PostScript; then
    -		ps2pdf in-tmp in.pdf
    -	elif file -b in-tmp | grep -q PDF; then
    -		cp in-tmp in.pdf
    +	if file -b "$FILE"   | grep -q PostScript; then
    +		ps2pdf "$FILE" "$NEWDIR"/in.pdf
    +	elif file -b "$FILE" | grep -q PDF; then
    +		cp "$FILE" "$NEWDIR"/in.pdf
     	else
    -		enscript -o- in-tmp | ps2pdf - in.pdf
    +		enscript -o- "$FILE" | ps2pdf - "$NEWDIR"/in.pdf
     	fi
    +	cd "$NEWDIR"
     
     	if [ -z "$DUPLEX" ]; then
     		lp in.pdf
    +		cd - > /dev/null
     		return
     	fi
     
    @@ -80,6 +82,8 @@ main() {
     	if [ "$NODD" != "$NEVEN" ]; then
     		printf '\n' | lp
     	fi
    +
    +	cd - > /dev/null
     }
     
     for flag in "$@"; do
    @@ -136,14 +140,12 @@ shift $((OPTIND - 1))
     
     NEWDIR="$(mkdtemp)"
     if [ -z "${1:-}" ]; then
    -	cd "$NEWDIR"
    -	cat - > in-tmp
    +	FILE="$NEWDIR"/STDIN
    +	cat - > "$FILE"
     	main
     else
     	for f in "$@"; do
    -		cp "$f" "$NEWDIR"/in-tmp
    -		cd "$NEWDIR"
    +		FILE="$f"
     		main
    -		cd - > /dev/null
     	done
     fi
    -- 
    cgit v1.2.3
    
    
    From c85fe01cfb84ef3f8dd17a54c5909221cf9edff2 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:27:03 -0300
    Subject: TODOs.md: Add #td-6982acd2-9949-1293-10cb-85ce623bf627
    
    ---
     TODOs.md | 7 +++++++
     1 file changed, 7 insertions(+)
    
    diff --git a/TODOs.md b/TODOs.md
    index 396f0d6..8431ef6 100644
    --- a/TODOs.md
    +++ b/TODOs.md
    @@ -1,5 +1,12 @@
     # Tasks
     
    +## TODO Revisit `README.md` {#td-6982acd2-9949-1293-10cb-85ce623bf627}
    +- TODO in 2022-03-25
    +
    +---
    +
    +Also look at `description` and `long-description`.
    +
     ## TODO Make `src/bin/print` more robust {#td-e2b2e9d5-b8c9-9ce3-a0c1-699963325d4e}
     - TODO in 2022-03-25
     
    -- 
    cgit v1.2.3
    
    
    From 26bafa4525c3ddeb844438c504e7182ab5806eb0 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:27:50 -0300
    Subject: configuration.nix: Rename "skype" package
    
    ---
     configuration.nix | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index fbd3f1d..e693f22 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -12,7 +12,7 @@ let
             slack
             zoom-us
             openfortivpn
    -        skype
    +        skypeforlinux
             chromium
           ];
           libre = [
    -- 
    cgit v1.2.3
    
    
    From 7a02c3feefbd724d87522422d5be24da162c5953 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:28:55 -0300
    Subject: configuration.nix: Conditionally enable Docker and virtualization
     tools
    
    Use a top-level boolean configuration variable to determine which
    groups, packages and other configurations should be included if
    present.
    ---
     configuration.nix | 15 ++++++++++++---
     1 file changed, 12 insertions(+), 3 deletions(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index e693f22..ee04bbc 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -6,6 +6,10 @@
     # $ doas nix-channel --rollback
     
     let
    +  enable-docker = true;
    +  extra-groups = if enable-docker then [ "docker" ] else [];
    +  extra-packages = with pkgs; [
    +  ] ++ (if enable-docker then [ gitlab-runner ] else []);
       work = {
         packages = with pkgs; {
           proprietary = [
    @@ -302,7 +306,7 @@ in {
           transmission-gtk # https://github.com/btpd/btpd
           tdesktop # telegram -> gomuks
           whatsapp-for-linux
    -    ] ++ work.packages.libre ++ work.packages.proprietary;
    +    ] ++ work.packages.libre ++ work.packages.proprietary ++ extra-packages;
     
         etc = {
           "with-email.sh".text = ''
    @@ -528,7 +532,7 @@ in {
               isNormalUser = true;
               uid = 1000;
               description = "EuAndreh";
    -          extraGroups = [ "wheel" "networkmanager" ];
    +          extraGroups = [ "wheel" "networkmanager" "libvirtd" ] ++ extra-groups ;
             };
           };
           # From the Guix manual:
    @@ -586,5 +590,10 @@ in {
         };
       };
     
    -  xdg.portal.enable = true;
    +  xdg.portal = {
    +    enable = true;
    +  };
    +
    +  virtualisation.libvirtd.enable = true;
    +  virtualisation.docker.enable = enable-docker;
     }
    -- 
    cgit v1.2.3
    
    
    From 2303f88813ffda5625b0abbdb1f958e370186267 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:30:43 -0300
    Subject: configuration.nix: Replace "nologin" with new "shadow" package
    
    ---
     configuration.nix | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index ee04bbc..5070621 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -542,7 +542,7 @@ in {
               group = "guixbuild"; # -g guixbuild
               extraGroups = [ "guixbuild" ]; # -G guixbuild
               home = "/var/empty"; # -d /var/empty
    -          shell = pkgs.nologin; # -s `which nologin`
    +          shell = pkgs.shadow; # -s `which nologin`
               description = "Guix build user ${i}"; # -c "Guix buid user $i"
               isSystemUser = true; # --system
             };
    -- 
    cgit v1.2.3
    
    
    From 0ef04576bc89cae6367efceaaaca5dada1dde979 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:31:07 -0300
    Subject: configuration.nix: Explicitly configure XDG GTK portals
    
    ---
     configuration.nix | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/configuration.nix b/configuration.nix
    index 5070621..22d73df 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -592,6 +592,7 @@ in {
     
       xdg.portal = {
         enable = true;
    +    extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
       };
     
       virtualisation.libvirtd.enable = true;
    -- 
    cgit v1.2.3
    
    
    From 6ef3a9f3a67593d2b68802534279017a21f38107 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:31:53 -0300
    Subject: configuration.nix: Enable documention for all modules
    
    ---
     configuration.nix | 1 +
     1 file changed, 1 insertion(+)
    
    diff --git a/configuration.nix b/configuration.nix
    index 22d73df..ceaad82 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -94,6 +94,7 @@ in {
         man.enable = true;
         dev.enable = true;
         man.generateCaches = true;
    +    nixos.includeAllModules = true;
       };
     
       environment = {
    -- 
    cgit v1.2.3
    
    
    From ed4025b2ae17b59ffc27f48da63d6b5e72ed0627 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:32:23 -0300
    Subject: configuration.nix: Indent with spaces instead of tabs
    
    ---
     configuration.nix | 16 ++++++++--------
     1 file changed, 8 insertions(+), 8 deletions(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index ceaad82..bcadbf7 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -118,17 +118,17 @@ in {
             '';
           });
           timidity-with-more-formats = pkgs.timidity.overrideAttrs (oldAttrs: {
    -	configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ];
    -	buildInputs = oldAttrs.buildInputs ++ (with pkgs; [ libogg libvorbis flac ]);
    +        configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ];
    +        buildInputs = oldAttrs.buildInputs ++ (with pkgs; [ libogg libvorbis flac ]);
           });
           mktorrent-latest = pkgs.mktorrent.overrideAttrs (oldAttrs: rec {
    -	version = "de7d011b35458de1472665f50b96c9cf6c303f39";
    +        version = "de7d011b35458de1472665f50b96c9cf6c303f39";
             src = pkgs.fetchFromGitHub {
    -	  owner = "Rudde";
    -	  repo = "mktorrent";
    -	  rev = version;
    -	  sha256 = "1gsky1ijxrfsw07lvfjw4annjkdfpmnp8nnddi1wakbzqn6v5dwq";
    -	};
    +          owner = "Rudde";
    +          repo = "mktorrent";
    +          rev = version;
    +          sha256 = "1gsky1ijxrfsw07lvfjw4annjkdfpmnp8nnddi1wakbzqn6v5dwq";
    +        };
           });
     
         in with pkgs;
    -- 
    cgit v1.2.3
    
    
    From 2afaaf552a503aca30b39abe4b59e4a7dff9c775 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:33:11 -0300
    Subject: configuration.nix: Add packages
    
    ---
     configuration.nix | 8 ++++++--
     1 file changed, 6 insertions(+), 2 deletions(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index bcadbf7..7a4ec43 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -133,6 +133,7 @@ in {
     
         in with pkgs;
         [
    +      vagrant
     
           ## Documentation
           posix_man_pages
    @@ -147,6 +148,7 @@ in {
           pkgs-19.packer
           gitAndTools.gitFull
           gitAndTools.gitRemoteGcrypt
    +      gitAndTools.git-open
     
           ## Personal data tools
           borgbackup
    @@ -211,9 +213,12 @@ in {
           imagemagick
           enscript
           tcl
    +      python3
    +      unzip
     
           ## System utilities
           pmutils
    +      btrfs-progs
     
           ## Mail
           isync
    @@ -241,14 +246,13 @@ in {
           valgrind
           gdb
           sbcl
    -      openssl.dev
    -      openssl
           nodejs_latest
           quickjs
           deno
           lilypond
           ghostscript
           pdftk
    +      guile_3_0
     
           ## POSIX
           bmake-with-alias
    -- 
    cgit v1.2.3
    
    
    From ad979b752a00e383e7b006530313100bdc8006b5 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:33:29 -0300
    Subject: configuration.nix: Rename "libqrencode" package to "qrencode"
    
    ---
     configuration.nix | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index 7a4ec43..2438a16 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -177,7 +177,7 @@ in {
           psmisc # =killall=
           tree
           feh
    -      libqrencode
    +      qrencode
           bind # =dig=
           rsync
           moreutils # =vipe=, =sponge=, errno
    -- 
    cgit v1.2.3
    
    
    From f3f9937b82b45181a628357dda9c41a37648dddf Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:35:13 -0300
    Subject: configuration.nix: Include configuration when running "with-email.sh"
    
    ---
     configuration.nix | 3 ++-
     1 file changed, 2 insertions(+), 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index 2438a16..e67415d 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -317,6 +317,7 @@ in {
           "with-email.sh".text = ''
             #!/bin/sh
             set -u
    +        . ~/.bashrc
     
             while getopts 's:' flag; do
             	case "$flag" in
    @@ -336,7 +337,7 @@ in {
     
             OUT="$(echo 'mkstemp(template)' | m4 -D template="${"\${TMPDIR:-/tmp}"}/m4-tmpname.")"
             printf 'Running command: %s\nStarting at: %s\n\n' "$*" "$(now)" >> "$OUT"
    -        ("$@" 2>&1) >> "$OUT"
    +        (sh -c "$@" 2>&1) >> "$OUT"
             STATUS="$?"
             printf '\nFinished at: %s\n' "$(now)" >> "$OUT"
     
    -- 
    cgit v1.2.3
    
    
    From ce09b215067f65b43b5bea69370f5811786e901a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:35:52 -0300
    Subject: configuration.nix: Mark "frescobaldi" and "alot" as broken
    
    ---
     configuration.nix | 5 +++--
     1 file changed, 3 insertions(+), 2 deletions(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index e67415d..eb81d71 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -224,7 +224,8 @@ in {
           isync
           notmuch
           afew
    -      alot
    +      # alot FIXME
    +      pkgs-21.alot
           w3m
           urlscan
           md4c
    @@ -294,7 +295,7 @@ in {
           # xyz-euandreh.autoqemu-latest
     
           ## GUI programs
    -      frescobaldi
    +      # frescobaldi broken
           inkscape
           # dino
           fractal
    -- 
    cgit v1.2.3
    
    
    From 533fb9220624dca2329da692c02b6597b514431a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:37:48 -0300
    Subject: configuration.nix: Replace "enable-docker" with
     "enable-virtualization"
    
    ---
     configuration.nix | 13 ++++++++-----
     1 file changed, 8 insertions(+), 5 deletions(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index eb81d71..bb510c1 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -6,10 +6,10 @@
     # $ doas nix-channel --rollback
     
     let
    -  enable-docker = true;
    -  extra-groups = if enable-docker then [ "docker" ] else [];
    +  enable-virtualization = true;
    +  extra-groups = if enable-virtualization then [ "docker" ] else [];
       extra-packages = with pkgs; [
    -  ] ++ (if enable-docker then [ gitlab-runner ] else []);
    +  ] ++ (if enable-virtualization then [ gitlab-runner ] else []);
       work = {
         packages = with pkgs; {
           proprietary = [
    @@ -415,6 +415,9 @@ in {
       };
     
       services = {
    +    # required by vagrant+libvirt
    +    nfs.server.enable = enable-virtualization;
    +
         # Required for local network printer
         avahi = {
           enable = true;
    @@ -602,6 +605,6 @@ in {
         extraPortals = [ pkgs.xdg-desktop-portal-gtk ];
       };
     
    -  virtualisation.libvirtd.enable = true;
    -  virtualisation.docker.enable = enable-docker;
    +  virtualisation.libvirtd.enable = enable-virtualization;
    +  virtualisation.docker.enable = enable-virtualization;
     }
    -- 
    cgit v1.2.3
    
    
    From 289754ad064d15233e8290dc47f765155364fa5b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:38:19 -0300
    Subject: configuration.nix: Disable CUPS by default
    
    ---
     configuration.nix | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index bb510c1..38efc27 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -425,7 +425,7 @@ in {
         };
     
         printing = {
    -      enable = true;
    +      enable = false;
           drivers = let
             epson-201401w = with pkgs;
               stdenv.mkDerivation rec {
    -- 
    cgit v1.2.3
    
    
    From b135a626823b19830ad040f6c21be15218a59d87 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:39:02 -0300
    Subject: configuration.nix: Use GRUB booting only, remove redundant systemd
     configuration
    
    ---
     configuration.nix | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index 38efc27..f847509 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -34,7 +34,6 @@ in {
       # Use the systemd-boot EFI boot loader.
       boot = {
         loader = {
    -      systemd-boot.enable = true;
           efi.canTouchEfiVariables = true;
           grub = {
             enable = true;
    -- 
    cgit v1.2.3
    
    
    From f419bd5d413b4487ddf92069fe5e8a955c607611 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 25 Mar 2022 18:39:28 -0300
    Subject: configuration.nix: Update cronjob schedules
    
    ---
     configuration.nix | 12 +++++++-----
     1 file changed, 7 insertions(+), 5 deletions(-)
    
    diff --git a/configuration.nix b/configuration.nix
    index f847509..99d44ae 100644
    --- a/configuration.nix
    +++ b/configuration.nix
    @@ -474,11 +474,13 @@ in {
           # Keep this so that when the "mail" command fails I also get a notification email
           mailto = "eu@euandre.org";
           systemCronJobs = [
    -        "10 22  * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: mr update'   -- env SSH_AUTH_SOCK=`gpgconf --list-dirs agent-ssh-socket` mr -s safeupdate"
    -        "20 */6 * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: email flush' -- msmtp-queue -r"
    -        "30 */6 * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: email sync'  -- sh -c 'mbsync -a && notmuch new'"
    -        "50 22  * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: borg backup' -- sh ~/dev/libre/dotfiles/src/bin/backup"
    -	# FIXME: add job to update Guix
    +        "40 23  * * *  root    sh /etc/with-email.sh -s '[CRON] usurpador: guix upgrade' -- 'guix pull && guix package -u && systemctl restart guix-daemon.service'"
    +        "40 22  * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: guix upgrade' -- 'guix pull && guix package -u'"
    +        "0  22  * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: guix deploy'  -- 'guix deploy -L ~/dev/libre/servers/src/lib ~/dev/libre/servers/src/machines.scm'"
    +        "10 22  * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: mr update'    -- 'mr -s safeupdate'"
    +        "20 */6 * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: email flush'  -- 'msmtp-queue -r'"
    +        "30 */6 * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: email sync'   -- 'mbsync -a && notmuch new'"
    +        "50 22  * * *  andreh  sh /etc/with-email.sh -s '[CRON] usurpador: borg backup'  -- '~/dev/libre/dotfiles/src/bin/backup'"
           ];
         };
     
    -- 
    cgit v1.2.3
    
    
    From 1028dbfa03c1d62968db6d645a60b75ab0c3c9eb Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 26 Mar 2022 22:16:26 -0300
    Subject: src/bin/backup: Enable next backup steps to proceed even when files
     change while borg is running
    
    ---
     src/bin/backup | 2 +-
     1 file changed, 1 insertion(+), 1 deletion(-)
    
    diff --git a/src/bin/backup b/src/bin/backup
    index 65f94b5..828b96a 100755
    --- a/src/bin/backup
    +++ b/src/bin/backup
    @@ -1,5 +1,5 @@
     #!/bin/sh
    -set -eu
    +set -u
     
     usage() {
     	cat <<-'EOF'
    -- 
    cgit v1.2.3
    
    
    From 369186b2dbfa52b089fbf4469a1000768c9869cf Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:48:57 -0300
    Subject: sh/vcs.sh: Move VCS aliases into here, soon to be replaced with
     vcs-ps1
    
    ---
     sh/bashrc.sh | 2 +-
     sh/vcs.sh    | 6 ++++++
     2 files changed, 7 insertions(+), 1 deletion(-)
     create mode 100644 sh/vcs.sh
    
    diff --git a/sh/bashrc.sh b/sh/bashrc.sh
    index 80aff07..492b42d 100644
    --- a/sh/bashrc.sh
    +++ b/sh/bashrc.sh
    @@ -7,12 +7,12 @@ export DOTFILES=~/dev/libre/dotfiles
     . $DOTFILES/sh/env.sh
     . "$GUIX_PROFILE/etc/profile"
     . $DOTFILES/sh/colors.sh
    -. $DOTFILES/sh/git-prompt.sh
     . $DOTFILES/sh/ps1.sh
     . $DOTFILES/sh/fzf.sh
     . $DOTFILES/sh/aliases.sh
     . $DOTFILES/sh/util.sh
     . $DOTFILES/sh/agents.sh
     . $DOTFILES/sh/symlinks.sh
    +. $DOTFILES/sh/vcs.sh
     . ~/annex/bin/misc/priv.sh
     . ~/.nurc
    diff --git a/sh/vcs.sh b/sh/vcs.sh
    new file mode 100644
    index 0000000..5d6afb5
    --- /dev/null
    +++ b/sh/vcs.sh
    @@ -0,0 +1,6 @@
    +#!/bin/sh
    +
    +alias mr='mr -s'
    +alias s='git status'
    +alias d='git diff'
    +alias ds='git diff --staged'
    -- 
    cgit v1.2.3
    
    
    From 8e237fadf1cc707bea96f69e82d5f96cc4e18a7b Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:50:48 -0300
    Subject: sh/bashrc.sh: Remove GUIX_PROFILE, to be included in sh/env.sh
    
    ---
     sh/bashrc.sh | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/sh/bashrc.sh b/sh/bashrc.sh
    index 492b42d..c8928ca 100644
    --- a/sh/bashrc.sh
    +++ b/sh/bashrc.sh
    @@ -5,7 +5,6 @@ export DOTFILES=~/dev/libre/dotfiles
     
     . $DOTFILES/sh/bash-config.sh
     . $DOTFILES/sh/env.sh
    -. "$GUIX_PROFILE/etc/profile"
     . $DOTFILES/sh/colors.sh
     . $DOTFILES/sh/ps1.sh
     . $DOTFILES/sh/fzf.sh
    -- 
    cgit v1.2.3
    
    
    From 45543666d2804d62a20d7a41f61071e924d9b1ae Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:51:21 -0300
    Subject: sh/aliases.sh: Cleanup unused aliases
    
    ---
     sh/aliases.sh | 60 ++++++++++++++++++++---------------------------------------
     1 file changed, 20 insertions(+), 40 deletions(-)
    
    diff --git a/sh/aliases.sh b/sh/aliases.sh
    index 7c32b42..993f2db 100644
    --- a/sh/aliases.sh
    +++ b/sh/aliases.sh
    @@ -3,49 +3,29 @@
     
     unalias -a
     
    -alias sbcl='rlwrap sbcl'
    -alias sqlite='rlwrap sqlite3'
    -alias guile='rlwrap guile'
    -
    -alias l="ls -lahF --color"
    -alias copy="tr -d '\\n' | xclip -sel clip"
    -alias cop="xclip -sel clip"
    -alias vpn="sudo openvpn --config $DOTFILES/VPN/euandreh.ovpn"
    -# Source: https://unix.stackexchange.com/questions/25327/watch-command-alias-expansion#25329
    -alias watch="watch --color "
    -alias mr="mr -s"
    -alias ncdu="ncdu --color dark"
    -alias m="mbsync -a && notmuch new && alot"
    -alias n='neomutt'
    +alias r='reload'
    +alias rr='rreload'
    +alias rrr='rrreload'
     alias p='ping euandre.org -c 3'
    -alias playerctl="playerctl --player=\"\$(cat ~/.cache/euandreh/mpris-player.txt)\""
    -alias mux="tmuxinator start"
    -alias s="git status"
    -alias d="git diff"
    -alias ds="git diff --staged"
    +alias l='ls -lahF --color'
    +alias c='tmux send-keys -R \; clear-history'
    +alias o='open'
    +alias mail='mail -a "Content-Type: text/plain; charset=UTF-8" -aFrom:eu@euandre.org'
    +# alias info='info --vi-keys'
     
    -u() {
    -  cd ~/annex > /dev/null || exit 1;
    -  git annex info --fast | grep available;
    -  cd - > /dev/null || exit 1;
    -}
    +alias m='mbsync EuAndreh & mbsync EuAndrehXYZ & mbsync Nubank & wait && notmuch new'
    +alias mm='msmtp-queue -r'
     
    -alias reload=". $DOTFILES/sh/reload.sh"
    -alias rr=". $DOTFILES/sh/reload.sh"
    -alias r=". ~/.bashrc"
    +alias mk='make clean && make dev-check'
    +alias wmk='aux/with-container "make clean && make dev-check"'
    +alias tt='mk && wmk'
    +alias todos='make public && open public/TODOs.html'
     
    -alias ag="ag --hidden"
    -alias jk-shell="bundix && nix-shell -E '((import  {}).bundlerEnv { name=\"jekyll-env\"; gemdir = ./.; }).env'"
     alias grep='grep --color=auto'
     alias diff='diff --color=auto'
    -# https://linuxhandbook.com/run-alias-as-sudo/
    -alias sudo='sudo '
    -
    -alias mktorrent='mktorrent -a udp://tracker.coppersurfer.tk:6969/announce -a udp://tracker.ccc.de:80/announce -a udp://tracker.publicbt.com:80 -a udp://tracker.istole.it:80 -a http://tracker.openbittorrent.com:80/announce -a http://tracker.ipv6tracker.org:80/announce'
    -
    -alias :x='echo "Already out of vi XD"'
    -alias :w='echo "Not inside vi!" && false'
    -alias sudo='echo "did you mean \"doas\""? && false'
    -alias mk='make clean public dev-check'
    -alias mail='mail -aFrom:eu@euandre.org'
    -alias borg="BORG_PASSPHRASE=$(pass show Borg) borg"
    +alias make='make -e'
    +alias less='less -R'
    +alias watch='watch --color '
    +alias sbcl='rlwrap sbcl'
    +alias sqlite='rlwrap sqlite3'
    +alias guile='rlwrap guile'
    -- 
    cgit v1.2.3
    
    
    From 6ad4b6e4ae3ce50fd517e6dad6d59ed947e7d883 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:51:51 -0300
    Subject: sh/bash-config.sh: Disable hashing
    
    ---
     sh/bash-config.sh | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/sh/bash-config.sh b/sh/bash-config.sh
    index 416f5e8..dbfdb88 100644
    --- a/sh/bash-config.sh
    +++ b/sh/bash-config.sh
    @@ -53,6 +53,5 @@ shopt -s cmdhist
     PROMPT_COMMAND='history -a'
     
     bind -x '"\e\C-l": c'
    -set -h
     
     complete -cf doas
    -- 
    cgit v1.2.3
    
    
    From 6c516a0fc03ddfcfec36b1714618302b69c2663a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:53:25 -0300
    Subject: sh/reload.sh: Remove tmuxinator-templates.sh
    
    ---
     sh/reload.sh | 1 -
     1 file changed, 1 deletion(-)
    
    diff --git a/sh/reload.sh b/sh/reload.sh
    index 6eeb53a..fd191a7 100644
    --- a/sh/reload.sh
    +++ b/sh/reload.sh
    @@ -5,4 +5,3 @@
     . "$DOTFILES/sh/x.sh"
     . "$DOTFILES/sh/mr-execute.sh"
     . "$DOTFILES/sh/fake-symlinks.sh"
    -. ~/annex/bin/misc/tmuxinator-templates.sh
    -- 
    cgit v1.2.3
    
    
    From 8fd3a199c8b67a2a5dceedc0e021b3c31ec96e4e Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:55:56 -0300
    Subject: sh/ps1.sh: Factor decisions into separate functions
    
    ---
     sh/ps1.sh | 143 +++++++++++++++++++++++++++++++++++++++-----------------------
     1 file changed, 90 insertions(+), 53 deletions(-)
    
    diff --git a/sh/ps1.sh b/sh/ps1.sh
    index 0c03070..c0fdd96 100644
    --- a/sh/ps1.sh
    +++ b/sh/ps1.sh
    @@ -1,5 +1,95 @@
     #!/bin/sh
     
    +repo_status_git() {
    +	BRANCH_NAME="$(git rev-parse --abbrev-ref HEAD)"
    +	OUT="$(git status --short --branch --porcelain)"
    +	BRANCH_LINE="$(echo "$OUT" | head -n 1)"
    +	DIFF_LINES="$(echo "$OUT" | tail -n +2)"
    +
    +	if echo "$BRANCH_LINE" | grep -q 'ahead'; then
    +		IS_AHEAD=1
    +	fi
    +	if echo "$BRANCH_LINE" | grep -q 'behind'; then
    +		IS_BEHIND=1
    +	fi
    +
    +	if [ -n "$IS_AHEAD" ] && [ -n "$IS_BEHIND" ]; then
    +		BRANCH_MARKER="^^^ $BRANCH_NAME vvv"
    +	elif [ -n "$IS_AHEAD" ]; then
    +		BRANCH_MARKER="^ $BRANCH_NAME ^"
    +	elif [ -n "$IS_BEHIND" ]; then
    +		BRANCH_MARKER="v $BRANCH_NAME v"
    +	else
    +		BRANCH_MARKER="$BRANCH_NAME"
    +	fi
    +
    +	if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then
    +		HAS_DIFF=1
    +	fi
    +
    +	if echo "$DIFF_LINES" | grep -q '^[?][?]'; then
    +		HAS_UNTRACKED=1
    +	fi
    +
    +	if [ -n "$HAS_DIFF" ]; then
    +		COLOR_FN=redb
    +		LINE="{$BRANCH_MARKER}"
    +	elif [ -n "$IS_AHEAD" ] || [ -n "$IS_BEHIND" ]; then
    +		COLOR_FN=bluei
    +		LINE="[$BRANCH_MARKER]"
    +	elif [ -n "$HAS_UNTRACKED" ]; then
    +		COLOR_FN=lightblue
    +		LINE="($BRANCH_MARKER)"
    +	else
    +		COLOR_FN=green
    +		LINE="($BRANCH_MARKER)"
    +	fi
    +
    +	"$COLOR_FN" "$LINE"
    +
    +	blacki " - git/$(git rev-parse HEAD)"
    +}
    +
    +repo_status_fossil() {
    +	BRANCH_NAME="$(fossil branch current)"
    +
    +	if [ -n "$(fossil extras)" ]; then
    +		HAS_UNTRACKED=1
    +	fi
    +
    +	BRANCH_MARKER="$BRANCH_NAME"
    +
    +	if [ -n "${HAS_UNTRACKED:-}" ]; then
    +		COLOR_FN=lightblue
    +		LINE="($BRANCH_MARKER)"
    +	else
    +		COLOR_FN=green
    +		LINE="($BRANCH_MARKER)"
    +	fi
    +
    +	"$COLOR_FN" "$LINE"
    +
    +	# echo 'FOSSIL!'
    +	# printf '%s' "$BRANCH_NAME"
    +	blacki " - fossil/$(fossil info | awk '/^checkout:/ { print $2 }')"
    +}
    +
    +repo_status_mercurial() {
    +	BRANCH_NAME="$(hg branch)"
    +}
    +
    +repo_status() {
    +	dir="$(basename "$PWD")"
    +	if   [ -d .git ]; then
    +		repo_status_git
    +	elif [ -f "$dir.fossil" ]; then
    +		repo_status_fossil
    +	elif [ -d .hg ]; then
    +		repo_status_mercurial
    +	fi
    +}
    +
    +
     error_marker() {
       STATUS=$?
       if [ "$STATUS" != 0 ]; then
    @@ -15,59 +105,6 @@ path() {
       yellowb '\w/'
     }
     
    -repo_status() {
    -  inner="$(__git_ps1 "%s")"
    -  if [ -n "$inner" ]; then
    -    OUT="$(git status --short --branch --porcelain 2>/dev/null)"
    -    BRANCH_LINE="$(echo "$OUT" | head -n 1)"
    -    DIFF_LINES="$(echo "$OUT" | tail -n +2)"
    -
    -    if echo "$BRANCH_LINE" | grep -q 'ahead'; then
    -      IS_AHEAD=1
    -    fi
    -    if echo "$BRANCH_LINE" | grep -q 'behind'; then
    -      IS_BEHIND=1
    -    fi
    -
    -    if [ -n "$IS_AHEAD" ] && [ -n "$IS_BEHIND" ]; then
    -      BRANCH_MARKER="^^^ $inner vvv"
    -    elif [ -n "$IS_AHEAD" ]; then
    -      BRANCH_MARKER="^ $inner ^"
    -    elif [ -n "$IS_BEHIND" ]; then
    -      BRANCH_MARKER="v $inner v"
    -    else
    -      BRANCH_MARKER="$inner"
    -    fi
    -
    -    if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then
    -      HAS_DIFF=1
    -    fi
    -
    -    if echo "$DIFF_LINES" | grep -q '^[?][?]'; then
    -      HAS_UNTRACKED=1
    -    fi
    -
    -    if [ -n "$HAS_DIFF" ]; then
    -      COLOR_FN=redb
    -      LINE="{$BRANCH_MARKER}"
    -    elif [ -n "$IS_AHEAD" ] || [ -n "$IS_BEHIND" ]; then
    -      COLOR_FN=bluei
    -      LINE="[$BRANCH_MARKER]"
    -    elif [ -n "$HAS_UNTRACKED" ]; then
    -      COLOR_FN=lightblue
    -      LINE="($BRANCH_MARKER)"
    -    else
    -      COLOR_FN=green
    -      LINE="($BRANCH_MARKER)"
    -    fi
    -
    -    "$COLOR_FN" "$LINE"
    -
    -    printf ' - '
    -    blacki "$(git rev-parse HEAD)"
    -  fi
    -}
    -
     guix_env() {
       if [ "$GUIX_ENVIRONMENT" != '' ]; then
         printf '\n'
    -- 
    cgit v1.2.3
    
    
    From bbb80cb4460520700c83ca5cff6019f06466a1e7 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 08:59:06 -0300
    Subject: sh/symlinks.sh: Link ~/.bash_login to the same file as
     ~/.bash_profile
    
    ---
     sh/fzf.sh      | 63 ++++++++++++++++++++++++++++++++++------------------------
     sh/symlinks.sh |  1 +
     2 files changed, 38 insertions(+), 26 deletions(-)
    
    diff --git a/sh/fzf.sh b/sh/fzf.sh
    index 4c26eb2..529e0ee 100644
    --- a/sh/fzf.sh
    +++ b/sh/fzf.sh
    @@ -1,5 +1,7 @@
     #!/bin/sh
     
    +# FIXME: fix "history" commands
    +
     # shellcheck source=/dev/null
     . "$(fzf-share)/completion.bash"
     # Disable fzf key-bindings
    @@ -14,14 +16,17 @@ export FZF_CTRL_T_OPTS='
     
     export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"'
     
    -fzg() {
    -  fn=$(git grep -n "$1" | \
    -         cut -d: -f -2  | \
    +# FIXME:
    +# g '^\w.*json_destroy('
    +g() {
    +  # shellcheck disable=2086
    +  fn=$(git grep -n -- "$1" ${2:-} | \
    +         cut -d: -f -2            | \
              fzf --select-1 \
                  --exit-0   \
                  --preview "echo {}       | \
                               cut -d: -f1 | \
    -                          xargs -I% awk -v bounds=15 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) '
    +                          xargs -I% awk -v bounds=25 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) '
                                 (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print }
                                 NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print }
                               ' %")
    @@ -29,46 +34,52 @@ fzg() {
         f="$(echo "$fn" | cut -d: -f1)"
         n="$(echo "$fn" | cut -d: -f2)"
         # shellcheck disable=2068
    -    history -s fzg $@
    +    history -s g "$@"
         history -s vi "+$n" "$f"
         vi "+$n" "$f"
       fi
     }
     
     f() {
    -  profile="f-shell-function$(pwd | sed -e 's_/_-_g')"
    -  file="$(git ls-files | remembering -p "$profile" -c "fzf --select-1 --exit-0 --query \"$2\" --preview 'cat {}'")"
    +  # FIXME: speed
    +  # profile="f-shell-function$(pwd | sed -e 's_/_-_g')"
    +  # file="$(git ls-files | grep ${2:-.} | remembering -p "$profile" -c "fzf --select-1 --exit-0 --preview 'cat {}'")"
    +  # shellcheck disable=2086
    +  file="$(git ls-files | grep ${2:-.} | fzf --select-1 --exit-0 --preview 'cat {}')"
       if [ -n "$file" ]; then
         # shellcheck disable=2068
    -    history -s f $@
    +    # history -s f $@
         history -s "$1" "$file"
         "$1" "$file"
       fi
     }
     
    -V_FILES='
    -annex/TODOs.md
    -tmp/scratch.txt
    -annex/bin/misc/git/mrconfig.ini
    -annex/bin/misc/dependencies.dot
    -archive/vid/playlist.txt
    -dev/others/dinheiros/money.ledger
    -'
    +V_FILES="$(echo '
    +~/annex/txt/TODOs.md
    +~/tmp/scratch.txt
    +'"$(find ~/annex/txt/*.md -not -name TODOs.md |
    +	sed 's|^/home/andreh|~|' |
    +	LANG=POSIX.UTF-8 sort)"'
    +~/annex/bin/misc/git/mrconfig.ini
    +~/dev/libre/package-repository/dependencies.dot
    +~/dev/others/dinheiros/dinheiros.ledger
    +~/dev/libre/dotfiles/configuration.nix
    +' | tr ' ' '\n' | grep .)"
     
     v() {
    -  # I want to keep the pre-defined order
    -  f="$(echo "$V_FILES" | awk /./ | fzf --select-1 --exit-0 --query "$1")"
    +  f="$(echo "$V_FILES" | fzf --select-1 --exit-0 --query "$1")"
       if [ -n "$f" ]; then
    -    history -s v "$@"
    -    # shellcheck disable=2088
    -    history -s vi "~/$f"
    -    echo "$f"
    -    vi "$HOME/$f"
    +    history -s vi $f
    +    vi "$HOME/${f#'~/'}"
       fi
     }
     
    -cm() {
    +cn() {
     	CHOICE="$(git log --oneline | fzf)"
    -	INDEX="$(git log --oneline | grep -nF "$CHOICE" | cut -d: -f1)"
    -	git rev-parse "HEAD~$INDEX"
    +	git log --oneline | grep -nF "$CHOICE" | cut -d: -f1
    +}
    +
    +cm() {
    +	n="$(cn)"
    +	git rev-parse "HEAD~$((n - 1))"
     }
    diff --git a/sh/symlinks.sh b/sh/symlinks.sh
    index 20e0dbb..21bc63c 100644
    --- a/sh/symlinks.sh
    +++ b/sh/symlinks.sh
    @@ -1,6 +1,7 @@
     #!/bin/sh
     
     ln -fs "$DOTFILES/sh/bashrc.sh"                 ~/.bashrc
    +ln -fs "$DOTFILES/sh/bash_profile.sh"           ~/.bash_login
     ln -fs "$DOTFILES/sh/bash_profile.sh"           ~/.bash_profile
     ln -fs "$DOTFILES/git/gitattributes"            ~/.gitattributes
     ln -fs "$DOTFILES/git/gitignore"                ~/.gitignore_global
    -- 
    cgit v1.2.3
    
    
    From c444a8eea1816cd4d608cb18e31f33b06745490a Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 09:08:04 -0300
    Subject: sh/symlinks.sh: Move all directory creations to the top, cleanup and
     do better grouping
    
    ---
     sh/symlinks.sh | 76 ++++++++++++++++++++++------------------------------------
     1 file changed, 29 insertions(+), 47 deletions(-)
    
    diff --git a/sh/symlinks.sh b/sh/symlinks.sh
    index 21bc63c..4f95a64 100644
    --- a/sh/symlinks.sh
    +++ b/sh/symlinks.sh
    @@ -1,65 +1,47 @@
     #!/bin/sh
     
    +mkdir -p \
    +	~/Downloads/Screenshots/ ~/.local/share/common-lisp ~/tmp/ ~/.gnupg \
    +	~/.xmonad ~/.config/ranger/ ~/.config/guix                          \
    +	~/.config/khal ~/.config/khard
    +
    +if [ ! -e ~/tmp/scratch.txt ]; then
    +	touch ~/tmp/scratch.txt
    +fi
    +
    +ln -fs ~/dev/libre ~/common-lisp &&
    +	rm -f  ~/dev/libre/libre
    +ln -fs ~/dev/others/password-store ~/.password-store &&
    +	rm -f  ~/dev/others/password-store/password-store
    +
    +# FIXME: guix shell --check complains about this
     ln -fs "$DOTFILES/sh/bashrc.sh"                 ~/.bashrc
     ln -fs "$DOTFILES/sh/bash_profile.sh"           ~/.bash_login
     ln -fs "$DOTFILES/sh/bash_profile.sh"           ~/.bash_profile
    -ln -fs "$DOTFILES/git/gitattributes"            ~/.gitattributes
    -ln -fs "$DOTFILES/git/gitignore"                ~/.gitignore_global
    -ln -fs "$DOTFILES/git/gitconfig.ini"            ~/.gitconfig
    -ln -fs "$DOTFILES/sbclrc.lisp"                  ~/.sbclrc
    +ln -fs "$HOME/annex/bin/misc/nurc.sh"           ~/.nurc
     ln -fs "$DOTFILES/inputrc.conf"                 ~/.inputrc
     ln -fs "$DOTFILES/Xmodmap.conf"                 ~/.Xmodmap
    -ln -fs "$DOTFILES/npmrc.sh"                     ~/.npmrc
    -ln -fs "$DOTFILES/mailcap.conf"                 ~/.mailcap
     
    -mkdir -p ~/Downloads/Screenshots/
    -
    -mkdir -p ~/.local/share/common-lisp
    -[ ! -e ~/.local/share/common-lisp/source ] && ln -fs ~/dev/libre ~/.local/share/common-lisp/source
    -
    -mkdir -p ~/tmp/
    -touch ~/tmp/scratch.txt
    -touch /tmp/fp.euandreh.log
    +ln -fs "$DOTFILES/vcs/hgrc.ini"                 ~/.hgrc
    +ln -fs "$DOTFILES/vcs/gitconfig.ini"            ~/.gitconfig
    +ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini"  ~/.mrconfig
     
    -mkdir -p ~/.gnupg
     ln -fs "$DOTFILES/gpg/gpg.conf"                 ~/.gnupg/gpg.conf
     ln -fs "$DOTFILES/gpg/gpg-agent.conf"           ~/.gnupg/gpg-agent.conf
     ln -fs "$DOTFILES/gpg/sshcontrol"               ~/.gnupg/sshcontrol
    -ln -fs "$DOTFILES/../servers/ssh.conf"          ~/.ssh/config
    -ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini"  ~/.mrconfig
    -
    -mkdir -p ~/.newsboat
    -ln -fs "${HOME}/annex/bin/misc/atom/newsboat-urls.txt" ~/.newsboat/urls
    -
    -## tmux
    -ln -fs "$DOTFILES/tmux.conf"                    ~/.tmux.conf
    +ln -fs "$DOTFILES/ssh.conf"                     ~/.ssh/config
     
    -## vi
    -ln -fs "$DOTFILES/exrc.conf"                    ~/.exrc
    -
    -## xmonad
    -mkdir -p ~/.xmonad
     ln -fs "$DOTFILES/xmonad/xsession.sh"           ~/.xsession
     ln -fs "$DOTFILES/xmonad/xmonad.hs"             ~/.xmonad/xmonad.hs
     ln -fs "$DOTFILES/xmonad/xmobar.hs"             ~/.xmobarrc
     
    -## Mercurial
    -ln -fs "${DOTFILES}/hgrc.ini"                   ~/.hgrc
    -
    -## ranger
    -mkdir -p ~/.config/ranger/
    -ln -fs "${DOTFILES}/ranger.conf"                ~/.config/ranger/rc.conf
    -
    -## nu
    -ln -fs "$HOME/annex/bin/misc/nurc.sh"           ~/.nurc
    -
    -## Guix
    -mkdir -p ~/.config/guix
    +ln -fs "$DOTFILES/npmrc.sh"                     ~/.npmrc
    +ln -fs "$DOTFILES/mailcap.conf"                 ~/.mailcap
    +ln -fs "$DOTFILES/tmux.conf"                    ~/.tmux.conf
    +ln -fs "$DOTFILES/exrc.conf"                    ~/.exrc
    +ln -fs "$DOTFILES/ranger.conf"                  ~/.config/ranger/rc.conf
    +ln -fs "$DOTFILES/infokey"                      ~/.infokey
    +ln -fs "$DOTFILES/sbclrc.lisp"                  ~/.sbclrc
     ln -fs "$DOTFILES/guix/channels.scm"            ~/.config/guix/channels.scm
    -
    -## pimutils
    -mkdir -p ~/.config/vdirsyncer/ ~/.config/khal
    -ln -fs "$HOME/annex/bin/misc/pimutils/vdirsyncer.conf" ~/.config/vdirsyncer/config
    -ln -fs "$HOME/annex/bin/misc/pimutils/khal.conf"       ~/.config/khal/config
    -
    -ln -fs "$DOTFILES/infokey" ~/.infokey
    +ln -fs "$HOME/annex/bin/misc/khard.conf" ~/.config/khard/khard.conf
    +ln -fs "$HOME/annex/bin/misc/khal.conf"  ~/.config/khal/config
    -- 
    cgit v1.2.3
    
    
    From 9d4f0261ce86aed02200ece43fb42f4997e651e6 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 28 Mar 2022 09:16:50 -0300
    Subject: sh/env.sh: Cleanup and organize
    
    ---
     sh/aliases.sh |  2 +-
     sh/env.sh     | 39 +++++++++++++++++++++------------------
     2 files changed, 22 insertions(+), 19 deletions(-)
    
    diff --git a/sh/aliases.sh b/sh/aliases.sh
    index 993f2db..8ccbb3f 100644
    --- a/sh/aliases.sh
    +++ b/sh/aliases.sh
    @@ -11,7 +11,6 @@ alias l='ls -lahF --color'
     alias c='tmux send-keys -R \; clear-history'
     alias o='open'
     alias mail='mail -a "Content-Type: text/plain; charset=UTF-8" -aFrom:eu@euandre.org'
    -# alias info='info --vi-keys'
     
     alias m='mbsync EuAndreh & mbsync EuAndrehXYZ & mbsync Nubank & wait && notmuch new'
     alias mm='msmtp-queue -r'
    @@ -20,6 +19,7 @@ alias mk='make clean && make dev-check'
     alias wmk='aux/with-container "make clean && make dev-check"'
     alias tt='mk && wmk'
     alias todos='make public && open public/TODOs.html'
    +alias valgrind='valgrind --show-error-list=yes --show-leak-kinds=all --leak-check=full --track-origins=yes --error-exitcode=1'
     
     alias grep='grep --color=auto'
     alias diff='diff --color=auto'
    diff --git a/sh/env.sh b/sh/env.sh
    index a56b570..a632ac8 100644
    --- a/sh/env.sh
    +++ b/sh/env.sh
    @@ -1,29 +1,32 @@
     #!/bin/sh
     
    -export R='16686@ch-s010.rsync.net'
     export EDITOR=vi
    +export VISUAL="$EDITOR"
     export BROWSER=firefox
     export INPUTRC=~/.inputrc
    -export BORG_REMOTE_PATH='borg1'
    -export GOPATH="$HOME/dev/go"
    -export PASSWORD_STORE_DIR="$HOME/dev/others/password-store"
     export RLWRAP_HOME="$HOME/.cache/rlwrap"
    -export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -Werror -fPIC -g'
    -export CC=gcc
     
    -export C_INCLUDE_PATH="${C_INCLUDE_PATH:-}${C_INCLUDE_PATH:+:}$HOME/.local/include"
    -export LIBRARY_PATH="${LIBRARY_PATH:-}${LIBRARY_PATH:+:}$HOME/.local/lib"
    -export PKG_CONFIG_PATH="${PKG_CONFIG_PATH:-}${PKG_CONFIG_PATH:+:}$HOME/.local/lib/pkgconfig"
    -export LD_LIBRARY_PATH="${LD_LIBRARY_PATH:-}${LD_LIBRARY_PATH:+:}$HOME/.local/lib"
    -MANPATH="${MANPATH:-$HOME/.local/share/man:$(manpath)}"
    -export MANPATH
    -export PREFIX="$HOME/.local"
    -export INFOPATH="${INFOPATH:-}${INFOPATH:+:}$HOME/.local/info"
    +export BORG_REMOTE_PATH='borg1'
    +export BORG_PASSCOMMAND='pass show Usurpador/borg/passphrase'
     
    -# https://git.savannah.gnu.org/cgit/guix.git/tree/doc/guix.texi?id=cd6ae1cee95644b9aa712a7192bc9677a04c146b#n1287
    -export NIX_BUILD_CORES=0
    +export GOPATH="$HOME/dev/go"
    +export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -g -flto -Werror'
    +export CC=musl-gcc
    +export AR=gcc-ar
    +export LEX=flex
    +export LDFLAGS='-flto'
    +MAKEFLAGS="-j$(nproc)"
    +export MAKEFLAGS
    +export NIXPREFIX='/run/current-system/sw'
    +export PREFIX="$HOME/.p"
    +export C_INCLUDE_PATH="$PREFIX/include:$NIXPREFIX/include/:${C_INCLUDE_PATH:-}"
    +export LIBRARY_PATH="$PREFIX/lib:$NIXPREFIX/lib/:${LIBRARY_PATH:-}"
    +export INFOPATH="$PREFIX/share/info:$HOME/.config/guix/current/share/info:$INFOPATH"
    +export MANPATH="$PREFIX/share/man:$(manpath -q)"
    +export LISP='sbcl --eval'
     
    -export GUIX_PROFILE="$HOME/.guix-profile"
     export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale"
    +. ~/.guix-profile/etc/profile
    +GUIX_PROFILE= . ~/.config/guix/current/etc/profile
     
    -PATH="$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/others/dinheiros:$DOTFILES/scripts:$DOTFILES/xmonad/scripts:$DOTFILES/cron:$DOTFILES/cron/generated:$HOME/annex/bin/scripts:$PATH"
    +PATH="$HOME/.p/bin:$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/website/bin:$HOME/dev/others/dinheiros:$DOTFILES/src/bin:$HOME/dev/libre/eutils/src/impls/sh:$DOTFILES/xmonad/scripts:$DOTFILES/cron:$DOTFILES/cron/generated:$HOME/annex/bin/scripts:$PATH"
    -- 
    cgit v1.2.3
    
    
    From 0272a776b7237903f8901e0deaa6a61c6b238a90 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Fri, 1 Apr 2022 22:58:21 -0300
    Subject: vcs/gitconfig.ini: Leverage msmtpq to send emails instead of Git
    
    ---
     vcs/gitconfig.ini | 9 +++------
     1 file changed, 3 insertions(+), 6 deletions(-)
    
    diff --git a/vcs/gitconfig.ini b/vcs/gitconfig.ini
    index d93050a..2340347 100644
    --- a/vcs/gitconfig.ini
    +++ b/vcs/gitconfig.ini
    @@ -56,14 +56,11 @@
       rebase = false
     [sendemail]
       assume8bitEncoding = UTF-8
    -  smtpuser = eu@euandre.org
    -  smtpserver = box.euandre.org
    -  smtpencryption = tls
    -  smtpserverport = 587
    +  smtpserver = /run/current-system/sw/bin/msmtpq
    +  smtpserveroption = -a
    +  smtpserveroption = euandreh
       annotate = yes
       confirm = never
    -[include]
    -  path = ~/annex/secret/Git/gitconfig.ini
     [init]
     	defaultBranch = main
     [tar "tar.xz"]
    -- 
    cgit v1.2.3
    
    
    From a9aaf5350e9d95c7eeb5d927002d3b4c9af1ea39 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Thu, 7 Apr 2022 21:35:11 -0300
    Subject: sh/aliases.sh: Fix man viewer being too wide
    
    ---
     sh/aliases.sh | 2 ++
     1 file changed, 2 insertions(+)
    
    diff --git a/sh/aliases.sh b/sh/aliases.sh
    index 8ccbb3f..79e4bcf 100644
    --- a/sh/aliases.sh
    +++ b/sh/aliases.sh
    @@ -29,3 +29,5 @@ alias watch='watch --color '
     alias sbcl='rlwrap sbcl'
     alias sqlite='rlwrap sqlite3'
     alias guile='rlwrap guile'
    +
    +alias man='MANWIDTH=$((COLUMNS > 80 ? 80 : COLUMNS)) man'
    -- 
    cgit v1.2.3
    
    
    From b8662d00a5625f9b1b6194f128d21a80b40a9aa3 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 01:06:42 -0300
    Subject: vcs/: Remove from "dotfiles" repository, into "tilde" repository
    
    ---
     vcs/gitconfig.ini | 68 -------------------------------------------------------
     vcs/hgrc.ini      |  2 --
     2 files changed, 70 deletions(-)
     delete mode 100644 vcs/gitconfig.ini
     delete mode 100644 vcs/hgrc.ini
    
    diff --git a/vcs/gitconfig.ini b/vcs/gitconfig.ini
    deleted file mode 100644
    index 2340347..0000000
    --- a/vcs/gitconfig.ini
    +++ /dev/null
    @@ -1,68 +0,0 @@
    -[user]
    -  email = eu@euandre.org
    -  name = EuAndreh
    -  signingkey = 81F90EC3CD356060
    -[transfer]
    -  # https://matthiasbussonnier.com/posts/33-sign-commits-on-github.md.html
    -	fsckobjects = true
    -[log]
    -  # https://git-scm.com/docs/git-config#git-config-logshowSignature
    -  # showSignature = true
    -[diff "sqlite3"]
    -  # drops a db file into sqlite3 and runs .dump before any diff comparisons
    -  binary = true
    -  textconv = "echo .dump | sqlite3"
    -[core]
    -  editor = vi
    -  excludesfile = ~/.gitignore_global
    -
    -  # https://stackoverflow.com/questions/5834014/lf-will-be-replaced-by-crlf-in-git-what-is-that-and-is-it-important#5834094
    -  # https://help.github.com/articles/dealing-with-line-endings/
    -  autocrlf = input
    -  attributesfile = ~/.gitattributes
    -[push]
    -  # https://stackoverflow.com/a/22933955
    -  default = current
    -[filter "lfs"]
    -  clean = git-lfs clean -- %f
    -  smudge = git-lfs smudge -- %f
    -  process = git-lfs filter-process
    -  required = true
    -  fetchrecentalways = true
    -  fetchrecentrefsdays = 15
    -  fetchrecentcommitsdays = 7
    -  fetchrecentremoterefs = true
    -  followTags = true
    -[alias]
    -  sha = rev-parse HEAD
    -  sha7 = ! git sha | head -c 7
    -  prune-branches = !git branch --merged | grep -v main | xargs git branch -d
    -  sync = !git annex sync s3 && git annex sync origin
    -  tarball = !git-tarball.sh
    -[annex]
    -  gnupg-options = --no-tty
    -  gnupg-decrypt-options = --no-tty
    -  autocommit = false
    -  synccontent = true
    -  genmetadata = true
    -[commit]
    -  gpgsign = true
    -  verbose = true
    -[fetch]
    -  prune = true
    -[pack]
    -  packSizeLimit = 2g
    -[pull]
    -  rebase = false
    -[sendemail]
    -  assume8bitEncoding = UTF-8
    -  smtpserver = /run/current-system/sw/bin/msmtpq
    -  smtpserveroption = -a
    -  smtpserveroption = euandreh
    -  annotate = yes
    -  confirm = never
    -[init]
    -	defaultBranch = main
    -[tar "tar.xz"]
    -	command = xz -c
    -# git config format.signOff yes
    diff --git a/vcs/hgrc.ini b/vcs/hgrc.ini
    deleted file mode 100644
    index 656f40b..0000000
    --- a/vcs/hgrc.ini
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -[ui]
    -username = EuAndreh 
    -- 
    cgit v1.2.3
    
    
    From cf70e9bf5ac11abc2002dbce87373fd191d59d11 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 03:52:51 -0300
    Subject: xmonad/{xmonad,xmobar}.hs: Move to "tilde" repository
    
    ---
     xmonad/xmobar.hs |  26 ---------------
     xmonad/xmonad.hs | 100 -------------------------------------------------------
     2 files changed, 126 deletions(-)
     delete mode 100644 xmonad/xmobar.hs
     delete mode 100644 xmonad/xmonad.hs
    
    diff --git a/xmonad/xmobar.hs b/xmonad/xmobar.hs
    deleted file mode 100644
    index 1526b60..0000000
    --- a/xmonad/xmobar.hs
    +++ /dev/null
    @@ -1,26 +0,0 @@
    -Config {
    -    font = "xft:DejaVu Sans Mono:size=9"
    -  , commands = [
    -        Run Cpu ["-L","3","-H","50", "--normal","#5ea2a4","--high","red"] 10
    -      , Run Memory ["-t","Mem: %"] 30
    -      , Run Swap [] 30
    -      , Run Date "%A, %e %B %Y, %H:%M:%S" "date" 10
    -      , Run DiskU [("/", "/")] [] 600
    -      , Run Wireless "wlp0s20f3" [] 100
    -      , Run Volume "default" "Master" [] 10
    -      , Run Battery [
    -          "-t", ": % - ",
    -          "--",
    -          "-O", "AC",
    -          "-i", "Full",
    -          "-o", "Bat",
    -          "-p", "orange",
    -          "-h", "green",
    -          "-l", "red"]
    -          10
    -      , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-mpris.sh" "mpris"
    -      , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-notifications.sh" "notifications"
    -      , Run CommandReader "~/dev/libre/dotfiles/xmonad/scripts/xmobar-mail.sh" "notmuch"
    -    ]
    -  , template = " %date% | %default:Master%| %mpris% } { %notifications% | %notmuch% | %wlp0s20f3wi% | %battery% | %memory% * %swap% | %cpu% | %disku% "
    -}
    diff --git a/xmonad/xmonad.hs b/xmonad/xmonad.hs
    deleted file mode 100644
    index c3701d3..0000000
    --- a/xmonad/xmonad.hs
    +++ /dev/null
    @@ -1,100 +0,0 @@
    -import XMonad
    -import XMonad.Actions.SpawnOn(spawnHere)
    -import XMonad.Hooks.ManageDocks
    -import XMonad.Util.EZConfig(additionalKeysP)
    -import XMonad.Layout.NoBorders
    -import XMonad.Hooks.SetWMName
    -import XMonad.Hooks.ManageHelpers
    -import XMonad.Util.Run(spawnPipe)
    -import XMonad.Layout.ResizableTile
    -import XMonad.Layout.ResizableTile(MirrorResize(MirrorShrink, MirrorExpand))
    -
    -main :: IO ()
    -main = do
    -    xmproc <- spawnPipe "xmobar ~/.xmobarrc"
    -    xmonad $ def
    -        -- Fullscreen handling:
    -        -- https://stackoverflow.com/questions/20446348/xmonad-toggle-fullscreen-xmobar
    -        { manageHook = manageDocks <+> (isFullscreen --> doFullFloat) <+> (className =? "trayer" --> doIgnore) <+> manageHook def
    -        , handleEventHook = handleEventHook def <+> docksEventHook
    -        , layoutHook = myLayoutHook
    -        , modMask = mod4Mask -- User Super instead of Alt
    -        , terminal = myTerminal
    -        , startupHook = myStartup
    -        } `additionalKeysP` myKeyPBindings
    -
    -myTerminal :: String
    -myTerminal = "st"
    -
    -dbg :: String
    -dbg = "xmessage 'xmonad EuAndreh debug'"
    -
    -myKeyPBindings :: [(String, X ())]
    -myKeyPBindings =
    -    [ -- Volume
    -      ("", spawn "amixer -q sset Master toggle")
    -    , ("", spawn "amixer -q sset Master 5%- unmute")
    -    , ("", spawn "amixer -q sset Master 5%+ unmute")
    -
    -      -- Playback
    -    , ("",   spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5-")
    -    , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) previous")
    -    , ("",   spawn "~/dev/libre/dotfiles/xmonad/scripts/playerctl-play-pause.sh")
    -    , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/rotate-mpris-player.sh")
    -    , ("",   spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) position 5+")
    -    , ("S-", spawn "playerctl --player=$(cat ~/.cache/euandreh/mpris-player.txt) next")
    -
    -      -- Brightness
    -    , ("",   spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh -10")
    -    , ("S-", spawn "~/dev/libre/dotfiles/xmonad/scripts/zero-brightness.sh")
    -    , ("",   spawn "~/dev/libre/dotfiles/xmonad/scripts/brightness.sh +10")
    -
    -    , ("M-p", spawnHere "exe=$(dmenu_path | dmenu) && exec $exe")
    -    , ("M-o", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-emoji.sh")
    -    , ("M-v", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-clipmenu.sh")
    -    , ("M-i",   spawn "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass.sh")
    -    , ("C-M-i", spawnHere "~/dev/libre/dotfiles/xmonad/scripts/dmenu-pass-login.sh")
    -
    -      -- Lock screen
    -    , ("C-M-l", spawn "dm-tool switch-to-greeter")
    -
    -      -- print whole screen
    -    , ("M-", spawn "escrotum ~/Downloads/Screenshots/%Y-%m-%d-%T-screenshot.png")
    -      -- print screen of clicked window
    -    , ("C-M-", spawn "escrotum ~/Downloads/Screenshots/%Y-%m-%d-%T-screenshot.png -s")
    -
    -      -- xrandr single monitor setup
    -    , ("C-M-1", spawn "~/dev/libre/dotfiles/xmonad/scripts/single-monitor.sh")
    -
    -      -- xrandr three monitor setup
    -    , ("C-M-3", spawn "~/dev/libre/dotfiles/xmonad/scripts/three-monitors.sh")
    -
    -      -- Toggle appearence of xmobar
    -      -- https://stackoverflow.com/a/27646652
    -    , ("M-f", sendMessage ToggleStruts)
    -
    -    , ("M-ç", spawn dbg)
    -
    -      -- Vertically resize, taken from:
    -      -- https://stackoverflow.com/questions/25857674/xmonad-vertical-resize-tile-window
    -    , ("M-a",  sendMessage MirrorExpand)
    -    , ("M-z",  sendMessage MirrorShrink)
    -
    -
    -      -- Toggle PulseAudio sink
    -    , ("M-s", spawn "~/dev/libre/dotfiles/xmonad/scripts/toggle-pulseaudio-sink.sh")
    -    ]
    -
    -myLayoutHook =
    -  smartBorders $ avoidStruts $ (tiled ||| Mirror tiled ||| Full)
    -  where
    -    tiled = ResizableTall nmaster delta ratio []
    -    nmaster = 1
    -    delta = 3/100
    -    ratio = 1/2
    -
    -myStartup :: X ()
    -myStartup = do
    -  -- Taken from:
    -  -- https://stackoverflow.com/questions/30742662/java-swing-gui-not-displaying-in-xmonad
    -  setWMName "LG3D"
    -- 
    cgit v1.2.3
    
    
    From b1ca43ed9a1034050f2db1eca5f897f78cb6b4f7 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 03:56:43 -0300
    Subject: Xmodmap.conf: Inline into sh/x.sh file
    
    ---
     Xmodmap.conf | 1 -
     sh/x.sh      | 2 +-
     2 files changed, 1 insertion(+), 2 deletions(-)
     delete mode 100644 Xmodmap.conf
    
    diff --git a/Xmodmap.conf b/Xmodmap.conf
    deleted file mode 100644
    index 2807e71..0000000
    --- a/Xmodmap.conf
    +++ /dev/null
    @@ -1 +0,0 @@
    -keycode 118 = bar Greek_lamda
    diff --git a/sh/x.sh b/sh/x.sh
    index 7e28b20..5202917 100644
    --- a/sh/x.sh
    +++ b/sh/x.sh
    @@ -15,4 +15,4 @@ xdg-mime default firefox.desktop text/html
     xdg-mime default firefox.desktop text/xml
     
     xdg-mime default nautilus.desktop inode/directory
    -xmodmap ~/.Xmodmap
    +xmodmap -e 'keycode 118 = bar Greek_lambda'
    -- 
    cgit v1.2.3
    
    
    From d23707cd2c8b8b90fcab44f98008b4e9b4e54920 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 12:11:56 -0300
    Subject: inputrc.conf: Move to tilde repo
    
    ---
     inputrc.conf | 2 --
     sh/env.sh    | 2 +-
     2 files changed, 1 insertion(+), 3 deletions(-)
     delete mode 100644 inputrc.conf
    
    diff --git a/inputrc.conf b/inputrc.conf
    deleted file mode 100644
    index 9d84fe2..0000000
    --- a/inputrc.conf
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -"\e[B": history-search-forward
    -"\e[A": history-search-backward
    \ No newline at end of file
    diff --git a/sh/env.sh b/sh/env.sh
    index a632ac8..5e49d62 100644
    --- a/sh/env.sh
    +++ b/sh/env.sh
    @@ -3,7 +3,7 @@
     export EDITOR=vi
     export VISUAL="$EDITOR"
     export BROWSER=firefox
    -export INPUTRC=~/.inputrc
    +export INPUTRC="$HOME/.config/bash/inputrc"
     export RLWRAP_HOME="$HOME/.cache/rlwrap"
     
     export BORG_REMOTE_PATH='borg1'
    -- 
    cgit v1.2.3
    
    
    From be4c520343216cb48b6b4a0b6504869c08a1b6d8 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 12:12:29 -0300
    Subject: ssh.conf: Move to tilde repo
    
    ---
     ssh.conf | 2 --
     1 file changed, 2 deletions(-)
     delete mode 100644 ssh.conf
    
    diff --git a/ssh.conf b/ssh.conf
    deleted file mode 100644
    index 319d6b3..0000000
    --- a/ssh.conf
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -Include ~/dev/libre/servers/src/infrastructure/ssh.conf
    -Include ~/dev/others/lawtech/src/infrastructure/ssh.conf
    -- 
    cgit v1.2.3
    
    
    From 03fc6de3866a7229e30f9cf14c040b95151795e7 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 12:25:41 -0300
    Subject: gpg/: Move to "tilde"
    
    ---
     gpg/gpg-agent.conf | 6 ------
     gpg/gpg.conf       | 1 -
     gpg/sshcontrol     | 1 -
     3 files changed, 8 deletions(-)
     delete mode 100644 gpg/gpg-agent.conf
     delete mode 100644 gpg/gpg.conf
     delete mode 100644 gpg/sshcontrol
    
    diff --git a/gpg/gpg-agent.conf b/gpg/gpg-agent.conf
    deleted file mode 100644
    index e21ae64..0000000
    --- a/gpg/gpg-agent.conf
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -default-cache-ttl 172800
    -default-cache-ttl-ssh 172800
    -max-cache-ttl 604800
    -max-cache-ttl-ssh 604800
    -enable-ssh-support
    -pinentry-program /run/current-system/sw/bin/pinentry-gtk-2
    diff --git a/gpg/gpg.conf b/gpg/gpg.conf
    deleted file mode 100644
    index fbc8053..0000000
    --- a/gpg/gpg.conf
    +++ /dev/null
    @@ -1 +0,0 @@
    -keyserver pool.sks-keyservers.net
    \ No newline at end of file
    diff --git a/gpg/sshcontrol b/gpg/sshcontrol
    deleted file mode 100644
    index 1ae03ed..0000000
    --- a/gpg/sshcontrol
    +++ /dev/null
    @@ -1 +0,0 @@
    -750154E135FD7B11FDDF0107CC0904F92EBD2AE4
    -- 
    cgit v1.2.3
    
    
    From aebce52bf4a93f6da0ee033744e1f8ce1e2cf45d Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 12:50:14 -0300
    Subject: tmux.conf: Move to tilde
    
    ---
     tmux.conf | 85 ---------------------------------------------------------------
     1 file changed, 85 deletions(-)
     delete mode 100644 tmux.conf
    
    diff --git a/tmux.conf b/tmux.conf
    deleted file mode 100644
    index 33a5e48..0000000
    --- a/tmux.conf
    +++ /dev/null
    @@ -1,85 +0,0 @@
    -# Use personal prefix over "C-b"
    -unbind C-b
    -set -g prefix C-v
    -
    -# Turn on mouse mode
    -# https://groups.google.com/forum/#!msg/tmux-users/TRwPgEOVqho/Ck_oth_SDgAJ
    -# https://github.com/tmux/tmux/blob/310f0a960ca64fa3809545badc629c0c166c6cd2/CHANGES#L12
    -set -g mouse on
    -
    -# Bind "C-x r" to reload the configuration file
    -bind-key r source-file ~/.tmux.conf \; display-message "~/.tmux.conf reloaded"
    -
    -# Holy answer that properly implements copying from tmux!
    -# https://unix.stackexchange.com/a/349020/276661
    -bind-key -T copy-mode-vi MouseDragEnd1Pane send-keys -X copy-pipe "xclip -selection clipboard -i" \;
    -bind-key y send-keys -X copy-pipe "xclip -selection clipboard -i" \; display-message "Copied system clipboard! Hooray! Long-live tmux!"
    -
    -# Moving around panes
    -bind-key -n M-h select-pane -L
    -bind-key -n M-j select-pane -D
    -bind-key -n M-k select-pane -U
    -bind-key -n M-l select-pane -R
    -
    -# Resizing panes
    -bind-key -n M-H resize-pane -L 5
    -bind-key -n M-J resize-pane -D 5
    -bind-key -n M-K resize-pane -U 5
    -bind-key -n M-L resize-pane -R 5
    -
    -# Reorder windows
    -bind-key -n C-S-Left  swap-window -t -1\; select-window -t -1
    -bind-key -n C-S-Right swap-window -t +1\; select-window -t +1
    -#
    -# To change the number of a window, use: PREFIX-., and pick a new unused number
    -#
    -
    -# Join windows
    -bind-key -n C-S-M-Left  join-pane -s :-0 -t :-1
    -bind-key -n C-S-M-Right join-pane -s :-0 -t :+1
    -
    -# "C-x m" to actually clear the pane history
    -bind-key m send-keys -R \; clear-history
    -
    -# Keybinding to activate pane typing sync
    -# https://stackoverflow.com/questions/25909964/tmux-how-to-toggle-on-and-off-options-with-the-same-key
    -bind-key b setw synchronize-panes \; display-message "synchronize-panes toggle"
    -
    -setw -g mode-keys vi                 # Move around with vi keys
    -set-option -g status-key "vi"        # Use vi mode for status bar command (like after typing "C-x [" one can search with "/")
    -set-option -g status-bg "#666666"    # Status bar background color
    -set-option -g status-fg "#aaaaaa"    # Status bar foreground color
    -set-option -g status-left-length 50  # session name in status bar length =[annex]= part
    -set-option -g history-limit 150000   # How many lines of history to keep
    -set-option -g status-right ""
    -
    -# Set the panes initial index value to 1 instead of 0
    -# 0 is too far from ` ;)
    -set -g base-index 1
    -set-window-option -g pane-base-index 1
    -
    -# Automatically set window title
    -set-window-option -g automatic-rename on
    -set-option -g set-titles on
    -
    -# Set "correct term"
    -# https://wiki.archlinux.org/index.php/Tmux
    -set -g default-terminal screen-256color
    -
    -# No delay for escape key press
    -# https://mutelight.org/practical-tmux#faster-command-sequences
    -set -sg escape-time 0
    -
    -# Enable arrow key navigation
    -set-option -gw xterm-keys on
    -
    -# Display pane numbers for longer
    -# https://unix.stackexchange.com/questions/307696/how-to-increase-tmux-pane-numbers-display-time-ctrl-b-q
    -set -g display-panes-time 2500
    -
    -bind-key u capture-pane \; save-buffer /tmp/tmux-urlscan-buffer \; new-window -n "urlscan" '$SHELL -c "urlscan < /tmp/tmux-urlscan-buffer"'
    -
    -bind-key t resize-pane -x 80
    -
    -
    -bind -n M-u attach-session -t . -c '#{pane_current_path}' \; display-message "CWD for session updated to #{pane_current_path}!"
    -- 
    cgit v1.2.3
    
    
    From 52fa18241c1284700145d5a5f0acd722d13f2ed9 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 20:01:47 -0300
    Subject: xmonad/xsession.sh: Move to tilde
    
    ---
     xmonad/xsession.sh | 1 -
     1 file changed, 1 deletion(-)
     delete mode 100755 xmonad/xsession.sh
    
    diff --git a/xmonad/xsession.sh b/xmonad/xsession.sh
    deleted file mode 100755
    index b25a9a1..0000000
    --- a/xmonad/xsession.sh
    +++ /dev/null
    @@ -1 +0,0 @@
    -xmonad
    -- 
    cgit v1.2.3
    
    
    From be1dcc0087e563193eafe7aaf80c6d03b5041640 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sat, 16 Apr 2022 20:01:57 -0300
    Subject: exrc.conf: Move to tilde
    
    ---
     exrc.conf | 7 -------
     1 file changed, 7 deletions(-)
     delete mode 100644 exrc.conf
    
    diff --git a/exrc.conf b/exrc.conf
    deleted file mode 100644
    index d1e8407..0000000
    --- a/exrc.conf
    +++ /dev/null
    @@ -1,7 +0,0 @@
    -" set number
    -set autoindent
    -set tabstop=8
    -set shiftwidth=8
    -set ruler
    -set showmode
    -set showmatch
    -- 
    cgit v1.2.3
    
    
    From c0f44e4f33fa753810de538c271383bb2f6d9894 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Mon, 18 Apr 2022 08:52:45 -0300
    Subject: ranger.conf: Move to tilde
    
    ---
     ranger.conf | 1 -
     1 file changed, 1 deletion(-)
     delete mode 100644 ranger.conf
    
    diff --git a/ranger.conf b/ranger.conf
    deleted file mode 100644
    index 312936e..0000000
    --- a/ranger.conf
    +++ /dev/null
    @@ -1 +0,0 @@
    -map DD shell mv %s /home/${USER}/.local/share/Trash/files/
    \ No newline at end of file
    -- 
    cgit v1.2.3
    
    
    From 3597562165838c7ce462effa5c7eaa48cb436346 Mon Sep 17 00:00:00 2001
    From: EuAndreh 
    Date: Sun, 6 Nov 2022 17:39:00 -0300
    Subject: m
    
    ---
     .gitignore                                    |    2 -
     .tdrc                                         |    1 -
     COPYING                                       |  661 ------------
     Makefile                                      |   14 -
     README.md                                     |   22 -
     TODOs.md                                      |   41 -
     aux/assert-nixfmt.sh                          |   11 -
     aux/assert-shellcheck.sh                      |    6 -
     aux/assert-todos.sh                           |   58 -
     aux/ci/ci-build.sh                            |   52 -
     aux/ci/git-post-receive.sh                    |   14 -
     aux/ci/git-pre-push.sh                        |   21 -
     aux/ci/report.sh                              |   70 --
     aux/guix/manifest.scm                         |   18 -
     aux/guix/pinned-channels.scm                  |   11 -
     aux/guix/with-container.sh                    |   13 -
     aux/tld.txt                                   |    1 -
     aux/workflow/TODOs.sh                         |   35 -
     aux/workflow/assert-changelog.sh              |   14 -
     aux/workflow/assert-readme.sh                 |   59 -
     aux/workflow/commonmark.sh                    |   20 -
     aux/workflow/dist.sh                          |   27 -
     aux/workflow/favicon.html                     |    1 -
     aux/workflow/favicon.png                      |  Bin 2372 -> 0 bytes
     aux/workflow/favicon.svg                      |   62 --
     aux/workflow/preamble.md                      |   16 -
     aux/workflow/public.sh                        |   17 -
     aux/workflow/sign-tarballs.sh                 |   17 -
     aux/workflow/style.css                        |   46 -
     configuration.nix                             |  611 -----------
     description                                   |    1 -
     infokey                                       |    7 -
     long-description                              |    2 -
     mailcap.conf                                  |    1 -
     npmrc.sh                                      |    5 -
     os.scm                                        |  181 ----
     sbclrc.lisp                                   |    6 -
     sh/Positive.ogg                               |  Bin 99826 -> 0 bytes
     sh/agents.sh                                  |   11 -
     sh/aliases.sh                                 |   33 -
     sh/bash-config.sh                             |   57 -
     sh/bash_profile.sh                            |    4 -
     sh/bashrc.sh                                  |   17 -
     sh/colors.sh                                  |  115 --
     sh/env.sh                                     |   32 -
     sh/fake-symlinks.sh                           |  354 ------
     sh/fzf.sh                                     |   85 --
     sh/mr-execute.sh                              |   10 -
     sh/ps1.sh                                     |  135 ---
     sh/reload.sh                                  |    7 -
     sh/symlinks.sh                                |   47 -
     sh/templates/..git/hooks/pre-push             |    1 -
     sh/templates/..gitignore                      |    1 -
     sh/templates/CHANGELOG.md                     |   10 -
     sh/templates/COPYING                          |  661 ------------
     sh/templates/Makefile                         |  100 --
     sh/templates/TODOs.md                         |   16 -
     sh/templates/_plugins/linter.rb               |   55 -
     sh/templates/aux/assert-perltidy.sh           |    0
     sh/templates/aux/assert-shellcheck.sh         |    6 -
     sh/templates/aux/ci/ci-build.sh               |   52 -
     sh/templates/aux/ci/git-post-receive.sh       |   14 -
     sh/templates/aux/ci/git-pre-push.sh           |   21 -
     sh/templates/aux/ci/report.sh                 |   70 --
     sh/templates/aux/guix/manifest.scm            |   17 -
     sh/templates/aux/guix/pinned-channels.scm     |   11 -
     sh/templates/aux/guix/with-container.sh       |   13 -
     sh/templates/aux/tests-lib.sh                 |   93 --
     sh/templates/aux/tld.txt                      |    1 -
     sh/templates/aux/utils.sh                     |    9 -
     sh/templates/aux/workflow/TODOs.sh            |   35 -
     sh/templates/aux/workflow/assert-changelog.sh |   14 -
     sh/templates/aux/workflow/assert-readme.sh    |   59 -
     sh/templates/aux/workflow/assert-todos.sh     |   57 -
     sh/templates/aux/workflow/commonmark.sh       |   20 -
     sh/templates/aux/workflow/dist.sh             |   27 -
     sh/templates/aux/workflow/favicon.html        |    1 -
     sh/templates/aux/workflow/favicon.png         |  Bin 2372 -> 0 bytes
     sh/templates/aux/workflow/favicon.svg         |   62 --
     sh/templates/aux/workflow/preamble.md         |   16 -
     sh/templates/aux/workflow/public.sh           |   17 -
     sh/templates/aux/workflow/sign-tarballs.sh    |   17 -
     sh/templates/aux/workflow/style.css           |   46 -
     sh/templates/cronjob-with-email.sh            |   32 -
     sh/templates/description                      |    1 -
     sh/templates/long-description                 |    1 -
     sh/templates/tests/lib.sh                     |   77 --
     sh/util.sh                                    |   29 -
     sh/vcs.sh                                     |    6 -
     sh/x.sh                                       |   18 -
     src/bin/backup                                |   97 --
     src/bin/commit-md                             |   59 -
     src/bin/copy                                  |   67 --
     src/bin/fim                                   |   50 -
     src/bin/gc                                    |   91 --
     src/bin/open                                  |   96 --
     src/bin/print                                 |  151 ---
     src/bin/qr                                    |   56 -
     src/bin/rfc                                   |   98 --
     src/bin/xdg-open                              |    1 -
     src/bin/yt                                    |   90 --
     xmonad/scripts/brightness.sh                  |   30 -
     xmonad/scripts/dmenu-clipmenu.sh              |    4 -
     xmonad/scripts/dmenu-emoji.sh                 |   12 -
     xmonad/scripts/dmenu-pass-login.sh            |   10 -
     xmonad/scripts/dmenu-pass.sh                  |   17 -
     xmonad/scripts/list-emoji.txt                 | 1432 -------------------------
     xmonad/scripts/playerctl-play-pause.sh        |   14 -
     xmonad/scripts/rotate-mpris-player.sh         |   30 -
     xmonad/scripts/toggle-pulseaudio-sink.sh      |   14 -
     xmonad/scripts/xmobar-mail.sh                 |   11 -
     xmonad/scripts/xmobar-mpris.sh                |    8 -
     xmonad/scripts/xmobar-notifications.sh        |    8 -
     xmonad/scripts/zero-brightness.sh             |   11 -
     114 files changed, 7194 deletions(-)
     delete mode 100644 .gitignore
     delete mode 100644 .tdrc
     delete mode 100644 COPYING
     delete mode 100644 Makefile
     delete mode 100644 README.md
     delete mode 100644 TODOs.md
     delete mode 100755 aux/assert-nixfmt.sh
     delete mode 100755 aux/assert-shellcheck.sh
     delete mode 100755 aux/assert-todos.sh
     delete mode 100755 aux/ci/ci-build.sh
     delete mode 100755 aux/ci/git-post-receive.sh
     delete mode 100755 aux/ci/git-pre-push.sh
     delete mode 100755 aux/ci/report.sh
     delete mode 100644 aux/guix/manifest.scm
     delete mode 100644 aux/guix/pinned-channels.scm
     delete mode 100755 aux/guix/with-container.sh
     delete mode 100644 aux/tld.txt
     delete mode 100755 aux/workflow/TODOs.sh
     delete mode 100755 aux/workflow/assert-changelog.sh
     delete mode 100755 aux/workflow/assert-readme.sh
     delete mode 100755 aux/workflow/commonmark.sh
     delete mode 100755 aux/workflow/dist.sh
     delete mode 100644 aux/workflow/favicon.html
     delete mode 100644 aux/workflow/favicon.png
     delete mode 100644 aux/workflow/favicon.svg
     delete mode 100644 aux/workflow/preamble.md
     delete mode 100755 aux/workflow/public.sh
     delete mode 100755 aux/workflow/sign-tarballs.sh
     delete mode 100644 aux/workflow/style.css
     delete mode 100644 configuration.nix
     delete mode 100644 description
     delete mode 100644 infokey
     delete mode 100644 long-description
     delete mode 100644 mailcap.conf
     delete mode 100644 npmrc.sh
     delete mode 100644 os.scm
     delete mode 100644 sbclrc.lisp
     delete mode 100644 sh/Positive.ogg
     delete mode 100644 sh/agents.sh
     delete mode 100644 sh/aliases.sh
     delete mode 100644 sh/bash-config.sh
     delete mode 100644 sh/bash_profile.sh
     delete mode 100644 sh/bashrc.sh
     delete mode 100644 sh/colors.sh
     delete mode 100644 sh/env.sh
     delete mode 100644 sh/fake-symlinks.sh
     delete mode 100644 sh/fzf.sh
     delete mode 100644 sh/mr-execute.sh
     delete mode 100644 sh/ps1.sh
     delete mode 100644 sh/reload.sh
     delete mode 100644 sh/symlinks.sh
     delete mode 120000 sh/templates/..git/hooks/pre-push
     delete mode 100644 sh/templates/..gitignore
     delete mode 100644 sh/templates/CHANGELOG.md
     delete mode 100644 sh/templates/COPYING
     delete mode 100644 sh/templates/Makefile
     delete mode 100644 sh/templates/TODOs.md
     delete mode 100644 sh/templates/_plugins/linter.rb
     delete mode 100755 sh/templates/aux/assert-perltidy.sh
     delete mode 100755 sh/templates/aux/assert-shellcheck.sh
     delete mode 100755 sh/templates/aux/ci/ci-build.sh
     delete mode 100755 sh/templates/aux/ci/git-post-receive.sh
     delete mode 100644 sh/templates/aux/ci/git-pre-push.sh
     delete mode 100755 sh/templates/aux/ci/report.sh
     delete mode 100644 sh/templates/aux/guix/manifest.scm
     delete mode 100644 sh/templates/aux/guix/pinned-channels.scm
     delete mode 100755 sh/templates/aux/guix/with-container.sh
     delete mode 100755 sh/templates/aux/tests-lib.sh
     delete mode 100644 sh/templates/aux/tld.txt
     delete mode 100755 sh/templates/aux/utils.sh
     delete mode 100755 sh/templates/aux/workflow/TODOs.sh
     delete mode 100755 sh/templates/aux/workflow/assert-changelog.sh
     delete mode 100755 sh/templates/aux/workflow/assert-readme.sh
     delete mode 100755 sh/templates/aux/workflow/assert-todos.sh
     delete mode 100755 sh/templates/aux/workflow/commonmark.sh
     delete mode 100755 sh/templates/aux/workflow/dist.sh
     delete mode 100644 sh/templates/aux/workflow/favicon.html
     delete mode 100644 sh/templates/aux/workflow/favicon.png
     delete mode 100644 sh/templates/aux/workflow/favicon.svg
     delete mode 100644 sh/templates/aux/workflow/preamble.md
     delete mode 100755 sh/templates/aux/workflow/public.sh
     delete mode 100755 sh/templates/aux/workflow/sign-tarballs.sh
     delete mode 100644 sh/templates/aux/workflow/style.css
     delete mode 100644 sh/templates/cronjob-with-email.sh
     delete mode 100644 sh/templates/description
     delete mode 100644 sh/templates/long-description
     delete mode 100755 sh/templates/tests/lib.sh
     delete mode 100644 sh/util.sh
     delete mode 100644 sh/vcs.sh
     delete mode 100644 sh/x.sh
     delete mode 100755 src/bin/backup
     delete mode 100755 src/bin/commit-md
     delete mode 100755 src/bin/copy
     delete mode 100755 src/bin/fim
     delete mode 100755 src/bin/gc
     delete mode 100755 src/bin/open
     delete mode 100755 src/bin/print
     delete mode 100755 src/bin/qr
     delete mode 100755 src/bin/rfc
     delete mode 120000 src/bin/xdg-open
     delete mode 100755 src/bin/yt
     delete mode 100755 xmonad/scripts/brightness.sh
     delete mode 100755 xmonad/scripts/dmenu-clipmenu.sh
     delete mode 100755 xmonad/scripts/dmenu-emoji.sh
     delete mode 100755 xmonad/scripts/dmenu-pass-login.sh
     delete mode 100755 xmonad/scripts/dmenu-pass.sh
     delete mode 100644 xmonad/scripts/list-emoji.txt
     delete mode 100755 xmonad/scripts/playerctl-play-pause.sh
     delete mode 100755 xmonad/scripts/rotate-mpris-player.sh
     delete mode 100755 xmonad/scripts/toggle-pulseaudio-sink.sh
     delete mode 100755 xmonad/scripts/xmobar-mail.sh
     delete mode 100755 xmonad/scripts/xmobar-mpris.sh
     delete mode 100755 xmonad/scripts/xmobar-notifications.sh
     delete mode 100755 xmonad/scripts/zero-brightness.sh
    
    diff --git a/.gitignore b/.gitignore
    deleted file mode 100644
    index baec669..0000000
    --- a/.gitignore
    +++ /dev/null
    @@ -1,2 +0,0 @@
    -/aux/workflow/assert-todos.sh
    -/public/
    diff --git a/.tdrc b/.tdrc
    deleted file mode 100644
    index c30c6ee..0000000
    --- a/.tdrc
    +++ /dev/null
    @@ -1 +0,0 @@
    -TD_USE_BUILTIN_HOOKS='git'
    diff --git a/COPYING b/COPYING
    deleted file mode 100644
    index be3f7b2..0000000
    --- a/COPYING
    +++ /dev/null
    @@ -1,661 +0,0 @@
    -                    GNU AFFERO GENERAL PUBLIC LICENSE
    -                       Version 3, 19 November 2007
    -
    - Copyright (C) 2007 Free Software Foundation, Inc. 
    - Everyone is permitted to copy and distribute verbatim copies
    - of this license document, but changing it is not allowed.
    -
    -                            Preamble
    -
    -  The GNU Affero General Public License is a free, copyleft license for
    -software and other kinds of works, specifically designed to ensure
    -cooperation with the community in the case of network server software.
    -
    -  The licenses for most software and other practical works are designed
    -to take away your freedom to share and change the works.  By contrast,
    -our General Public Licenses are intended to guarantee your freedom to
    -share and change all versions of a program--to make sure it remains free
    -software for all its users.
    -
    -  When we speak of free software, we are referring to freedom, not
    -price.  Our General Public Licenses are designed to make sure that you
    -have the freedom to distribute copies of free software (and charge for
    -them if you wish), that you receive source code or can get it if you
    -want it, that you can change the software or use pieces of it in new
    -free programs, and that you know you can do these things.
    -
    -  Developers that use our General Public Licenses protect your rights
    -with two steps: (1) assert copyright on the software, and (2) offer
    -you this License which gives you legal permission to copy, distribute
    -and/or modify the software.
    -
    -  A secondary benefit of defending all users' freedom is that
    -improvements made in alternate versions of the program, if they
    -receive widespread use, become available for other developers to
    -incorporate.  Many developers of free software are heartened and
    -encouraged by the resulting cooperation.  However, in the case of
    -software used on network servers, this result may fail to come about.
    -The GNU General Public License permits making a modified version and
    -letting the public access it on a server without ever releasing its
    -source code to the public.
    -
    -  The GNU Affero General Public License is designed specifically to
    -ensure that, in such cases, the modified source code becomes available
    -to the community.  It requires the operator of a network server to
    -provide the source code of the modified version running there to the
    -users of that server.  Therefore, public use of a modified version, on
    -a publicly accessible server, gives the public access to the source
    -code of the modified version.
    -
    -  An older license, called the Affero General Public License and
    -published by Affero, was designed to accomplish similar goals.  This is
    -a different license, not a version of the Affero GPL, but Affero has
    -released a new version of the Affero GPL which permits relicensing under
    -this license.
    -
    -  The precise terms and conditions for copying, distribution and
    -modification follow.
    -
    -                       TERMS AND CONDITIONS
    -
    -  0. Definitions.
    -
    -  "This License" refers to version 3 of the GNU Affero General Public License.
    -
    -  "Copyright" also means copyright-like laws that apply to other kinds of
    -works, such as semiconductor masks.
    -
    -  "The Program" refers to any copyrightable work licensed under this
    -License.  Each licensee is addressed as "you".  "Licensees" and
    -"recipients" may be individuals or organizations.
    -
    -  To "modify" a work means to copy from or adapt all or part of the work
    -in a fashion requiring copyright permission, other than the making of an
    -exact copy.  The resulting work is called a "modified version" of the
    -earlier work or a work "based on" the earlier work.
    -
    -  A "covered work" means either the unmodified Program or a work based
    -on the Program.
    -
    -  To "propagate" a work means to do anything with it that, without
    -permission, would make you directly or secondarily liable for
    -infringement under applicable copyright law, except executing it on a
    -computer or modifying a private copy.  Propagation includes copying,
    -distribution (with or without modification), making available to the
    -public, and in some countries other activities as well.
    -
    -  To "convey" a work means any kind of propagation that enables other
    -parties to make or receive copies.  Mere interaction with a user through
    -a computer network, with no transfer of a copy, is not conveying.
    -
    -  An interactive user interface displays "Appropriate Legal Notices"
    -to the extent that it includes a convenient and prominently visible
    -feature that (1) displays an appropriate copyright notice, and (2)
    -tells the user that there is no warranty for the work (except to the
    -extent that warranties are provided), that licensees may convey the
    -work under this License, and how to view a copy of this License.  If
    -the interface presents a list of user commands or options, such as a
    -menu, a prominent item in the list meets this criterion.
    -
    -  1. Source Code.
    -
    -  The "source code" for a work means the preferred form of the work
    -for making modifications to it.  "Object code" means any non-source
    -form of a work.
    -
    -  A "Standard Interface" means an interface that either is an official
    -standard defined by a recognized standards body, or, in the case of
    -interfaces specified for a particular programming language, one that
    -is widely used among developers working in that language.
    -
    -  The "System Libraries" of an executable work include anything, other
    -than the work as a whole, that (a) is included in the normal form of
    -packaging a Major Component, but which is not part of that Major
    -Component, and (b) serves only to enable use of the work with that
    -Major Component, or to implement a Standard Interface for which an
    -implementation is available to the public in source code form.  A
    -"Major Component", in this context, means a major essential component
    -(kernel, window system, and so on) of the specific operating system
    -(if any) on which the executable work runs, or a compiler used to
    -produce the work, or an object code interpreter used to run it.
    -
    -  The "Corresponding Source" for a work in object code form means all
    -the source code needed to generate, install, and (for an executable
    -work) run the object code and to modify the work, including scripts to
    -control those activities.  However, it does not include the work's
    -System Libraries, or general-purpose tools or generally available free
    -programs which are used unmodified in performing those activities but
    -which are not part of the work.  For example, Corresponding Source
    -includes interface definition files associated with source files for
    -the work, and the source code for shared libraries and dynamically
    -linked subprograms that the work is specifically designed to require,
    -such as by intimate data communication or control flow between those
    -subprograms and other parts of the work.
    -
    -  The Corresponding Source need not include anything that users
    -can regenerate automatically from other parts of the Corresponding
    -Source.
    -
    -  The Corresponding Source for a work in source code form is that
    -same work.
    -
    -  2. Basic Permissions.
    -
    -  All rights granted under this License are granted for the term of
    -copyright on the Program, and are irrevocable provided the stated
    -conditions are met.  This License explicitly affirms your unlimited
    -permission to run the unmodified Program.  The output from running a
    -covered work is covered by this License only if the output, given its
    -content, constitutes a covered work.  This License acknowledges your
    -rights of fair use or other equivalent, as provided by copyright law.
    -
    -  You may make, run and propagate covered works that you do not
    -convey, without conditions so long as your license otherwise remains
    -in force.  You may convey covered works to others for the sole purpose
    -of having them make modifications exclusively for you, or provide you
    -with facilities for running those works, provided that you comply with
    -the terms of this License in conveying all material for which you do
    -not control copyright.  Those thus making or running the covered works
    -for you must do so exclusively on your behalf, under your direction
    -and control, on terms that prohibit them from making any copies of
    -your copyrighted material outside their relationship with you.
    -
    -  Conveying under any other circumstances is permitted solely under
    -the conditions stated below.  Sublicensing is not allowed; section 10
    -makes it unnecessary.
    -
    -  3. Protecting Users' Legal Rights From Anti-Circumvention Law.
    -
    -  No covered work shall be deemed part of an effective technological
    -measure under any applicable law fulfilling obligations under article
    -11 of the WIPO copyright treaty adopted on 20 December 1996, or
    -similar laws prohibiting or restricting circumvention of such
    -measures.
    -
    -  When you convey a covered work, you waive any legal power to forbid
    -circumvention of technological measures to the extent such circumvention
    -is effected by exercising rights under this License with respect to
    -the covered work, and you disclaim any intention to limit operation or
    -modification of the work as a means of enforcing, against the work's
    -users, your or third parties' legal rights to forbid circumvention of
    -technological measures.
    -
    -  4. Conveying Verbatim Copies.
    -
    -  You may convey verbatim copies of the Program's source code as you
    -receive it, in any medium, provided that you conspicuously and
    -appropriately publish on each copy an appropriate copyright notice;
    -keep intact all notices stating that this License and any
    -non-permissive terms added in accord with section 7 apply to the code;
    -keep intact all notices of the absence of any warranty; and give all
    -recipients a copy of this License along with the Program.
    -
    -  You may charge any price or no price for each copy that you convey,
    -and you may offer support or warranty protection for a fee.
    -
    -  5. Conveying Modified Source Versions.
    -
    -  You may convey a work based on the Program, or the modifications to
    -produce it from the Program, in the form of source code under the
    -terms of section 4, provided that you also meet all of these conditions:
    -
    -    a) The work must carry prominent notices stating that you modified
    -    it, and giving a relevant date.
    -
    -    b) The work must carry prominent notices stating that it is
    -    released under this License and any conditions added under section
    -    7.  This requirement modifies the requirement in section 4 to
    -    "keep intact all notices".
    -
    -    c) You must license the entire work, as a whole, under this
    -    License to anyone who comes into possession of a copy.  This
    -    License will therefore apply, along with any applicable section 7
    -    additional terms, to the whole of the work, and all its parts,
    -    regardless of how they are packaged.  This License gives no
    -    permission to license the work in any other way, but it does not
    -    invalidate such permission if you have separately received it.
    -
    -    d) If the work has interactive user interfaces, each must display
    -    Appropriate Legal Notices; however, if the Program has interactive
    -    interfaces that do not display Appropriate Legal Notices, your
    -    work need not make them do so.
    -
    -  A compilation of a covered work with other separate and independent
    -works, which are not by their nature extensions of the covered work,
    -and which are not combined with it such as to form a larger program,
    -in or on a volume of a storage or distribution medium, is called an
    -"aggregate" if the compilation and its resulting copyright are not
    -used to limit the access or legal rights of the compilation's users
    -beyond what the individual works permit.  Inclusion of a covered work
    -in an aggregate does not cause this License to apply to the other
    -parts of the aggregate.
    -
    -  6. Conveying Non-Source Forms.
    -
    -  You may convey a covered work in object code form under the terms
    -of sections 4 and 5, provided that you also convey the
    -machine-readable Corresponding Source under the terms of this License,
    -in one of these ways:
    -
    -    a) Convey the object code in, or embodied in, a physical product
    -    (including a physical distribution medium), accompanied by the
    -    Corresponding Source fixed on a durable physical medium
    -    customarily used for software interchange.
    -
    -    b) Convey the object code in, or embodied in, a physical product
    -    (including a physical distribution medium), accompanied by a
    -    written offer, valid for at least three years and valid for as
    -    long as you offer spare parts or customer support for that product
    -    model, to give anyone who possesses the object code either (1) a
    -    copy of the Corresponding Source for all the software in the
    -    product that is covered by this License, on a durable physical
    -    medium customarily used for software interchange, for a price no
    -    more than your reasonable cost of physically performing this
    -    conveying of source, or (2) access to copy the
    -    Corresponding Source from a network server at no charge.
    -
    -    c) Convey individual copies of the object code with a copy of the
    -    written offer to provide the Corresponding Source.  This
    -    alternative is allowed only occasionally and noncommercially, and
    -    only if you received the object code with such an offer, in accord
    -    with subsection 6b.
    -
    -    d) Convey the object code by offering access from a designated
    -    place (gratis or for a charge), and offer equivalent access to the
    -    Corresponding Source in the same way through the same place at no
    -    further charge.  You need not require recipients to copy the
    -    Corresponding Source along with the object code.  If the place to
    -    copy the object code is a network server, the Corresponding Source
    -    may be on a different server (operated by you or a third party)
    -    that supports equivalent copying facilities, provided you maintain
    -    clear directions next to the object code saying where to find the
    -    Corresponding Source.  Regardless of what server hosts the
    -    Corresponding Source, you remain obligated to ensure that it is
    -    available for as long as needed to satisfy these requirements.
    -
    -    e) Convey the object code using peer-to-peer transmission, provided
    -    you inform other peers where the object code and Corresponding
    -    Source of the work are being offered to the general public at no
    -    charge under subsection 6d.
    -
    -  A separable portion of the object code, whose source code is excluded
    -from the Corresponding Source as a System Library, need not be
    -included in conveying the object code work.
    -
    -  A "User Product" is either (1) a "consumer product", which means any
    -tangible personal property which is normally used for personal, family,
    -or household purposes, or (2) anything designed or sold for incorporation
    -into a dwelling.  In determining whether a product is a consumer product,
    -doubtful cases shall be resolved in favor of coverage.  For a particular
    -product received by a particular user, "normally used" refers to a
    -typical or common use of that class of product, regardless of the status
    -of the particular user or of the way in which the particular user
    -actually uses, or expects or is expected to use, the product.  A product
    -is a consumer product regardless of whether the product has substantial
    -commercial, industrial or non-consumer uses, unless such uses represent
    -the only significant mode of use of the product.
    -
    -  "Installation Information" for a User Product means any methods,
    -procedures, authorization keys, or other information required to install
    -and execute modified versions of a covered work in that User Product from
    -a modified version of its Corresponding Source.  The information must
    -suffice to ensure that the continued functioning of the modified object
    -code is in no case prevented or interfered with solely because
    -modification has been made.
    -
    -  If you convey an object code work under this section in, or with, or
    -specifically for use in, a User Product, and the conveying occurs as
    -part of a transaction in which the right of possession and use of the
    -User Product is transferred to the recipient in perpetuity or for a
    -fixed term (regardless of how the transaction is characterized), the
    -Corresponding Source conveyed under this section must be accompanied
    -by the Installation Information.  But this requirement does not apply
    -if neither you nor any third party retains the ability to install
    -modified object code on the User Product (for example, the work has
    -been installed in ROM).
    -
    -  The requirement to provide Installation Information does not include a
    -requirement to continue to provide support service, warranty, or updates
    -for a work that has been modified or installed by the recipient, or for
    -the User Product in which it has been modified or installed.  Access to a
    -network may be denied when the modification itself materially and
    -adversely affects the operation of the network or violates the rules and
    -protocols for communication across the network.
    -
    -  Corresponding Source conveyed, and Installation Information provided,
    -in accord with this section must be in a format that is publicly
    -documented (and with an implementation available to the public in
    -source code form), and must require no special password or key for
    -unpacking, reading or copying.
    -
    -  7. Additional Terms.
    -
    -  "Additional permissions" are terms that supplement the terms of this
    -License by making exceptions from one or more of its conditions.
    -Additional permissions that are applicable to the entire Program shall
    -be treated as though they were included in this License, to the extent
    -that they are valid under applicable law.  If additional permissions
    -apply only to part of the Program, that part may be used separately
    -under those permissions, but the entire Program remains governed by
    -this License without regard to the additional permissions.
    -
    -  When you convey a copy of a covered work, you may at your option
    -remove any additional permissions from that copy, or from any part of
    -it.  (Additional permissions may be written to require their own
    -removal in certain cases when you modify the work.)  You may place
    -additional permissions on material, added by you to a covered work,
    -for which you have or can give appropriate copyright permission.
    -
    -  Notwithstanding any other provision of this License, for material you
    -add to a covered work, you may (if authorized by the copyright holders of
    -that material) supplement the terms of this License with terms:
    -
    -    a) Disclaiming warranty or limiting liability differently from the
    -    terms of sections 15 and 16 of this License; or
    -
    -    b) Requiring preservation of specified reasonable legal notices or
    -    author attributions in that material or in the Appropriate Legal
    -    Notices displayed by works containing it; or
    -
    -    c) Prohibiting misrepresentation of the origin of that material, or
    -    requiring that modified versions of such material be marked in
    -    reasonable ways as different from the original version; or
    -
    -    d) Limiting the use for publicity purposes of names of licensors or
    -    authors of the material; or
    -
    -    e) Declining to grant rights under trademark law for use of some
    -    trade names, trademarks, or service marks; or
    -
    -    f) Requiring indemnification of licensors and authors of that
    -    material by anyone who conveys the material (or modified versions of
    -    it) with contractual assumptions of liability to the recipient, for
    -    any liability that these contractual assumptions directly impose on
    -    those licensors and authors.
    -
    -  All other non-permissive additional terms are considered "further
    -restrictions" within the meaning of section 10.  If the Program as you
    -received it, or any part of it, contains a notice stating that it is
    -governed by this License along with a term that is a further
    -restriction, you may remove that term.  If a license document contains
    -a further restriction but permits relicensing or conveying under this
    -License, you may add to a covered work material governed by the terms
    -of that license document, provided that the further restriction does
    -not survive such relicensing or conveying.
    -
    -  If you add terms to a covered work in accord with this section, you
    -must place, in the relevant source files, a statement of the
    -additional terms that apply to those files, or a notice indicating
    -where to find the applicable terms.
    -
    -  Additional terms, permissive or non-permissive, may be stated in the
    -form of a separately written license, or stated as exceptions;
    -the above requirements apply either way.
    -
    -  8. Termination.
    -
    -  You may not propagate or modify a covered work except as expressly
    -provided under this License.  Any attempt otherwise to propagate or
    -modify it is void, and will automatically terminate your rights under
    -this License (including any patent licenses granted under the third
    -paragraph of section 11).
    -
    -  However, if you cease all violation of this License, then your
    -license from a particular copyright holder is reinstated (a)
    -provisionally, unless and until the copyright holder explicitly and
    -finally terminates your license, and (b) permanently, if the copyright
    -holder fails to notify you of the violation by some reasonable means
    -prior to 60 days after the cessation.
    -
    -  Moreover, your license from a particular copyright holder is
    -reinstated permanently if the copyright holder notifies you of the
    -violation by some reasonable means, this is the first time you have
    -received notice of violation of this License (for any work) from that
    -copyright holder, and you cure the violation prior to 30 days after
    -your receipt of the notice.
    -
    -  Termination of your rights under this section does not terminate the
    -licenses of parties who have received copies or rights from you under
    -this License.  If your rights have been terminated and not permanently
    -reinstated, you do not qualify to receive new licenses for the same
    -material under section 10.
    -
    -  9. Acceptance Not Required for Having Copies.
    -
    -  You are not required to accept this License in order to receive or
    -run a copy of the Program.  Ancillary propagation of a covered work
    -occurring solely as a consequence of using peer-to-peer transmission
    -to receive a copy likewise does not require acceptance.  However,
    -nothing other than this License grants you permission to propagate or
    -modify any covered work.  These actions infringe copyright if you do
    -not accept this License.  Therefore, by modifying or propagating a
    -covered work, you indicate your acceptance of this License to do so.
    -
    -  10. Automatic Licensing of Downstream Recipients.
    -
    -  Each time you convey a covered work, the recipient automatically
    -receives a license from the original licensors, to run, modify and
    -propagate that work, subject to this License.  You are not responsible
    -for enforcing compliance by third parties with this License.
    -
    -  An "entity transaction" is a transaction transferring control of an
    -organization, or substantially all assets of one, or subdividing an
    -organization, or merging organizations.  If propagation of a covered
    -work results from an entity transaction, each party to that
    -transaction who receives a copy of the work also receives whatever
    -licenses to the work the party's predecessor in interest had or could
    -give under the previous paragraph, plus a right to possession of the
    -Corresponding Source of the work from the predecessor in interest, if
    -the predecessor has it or can get it with reasonable efforts.
    -
    -  You may not impose any further restrictions on the exercise of the
    -rights granted or affirmed under this License.  For example, you may
    -not impose a license fee, royalty, or other charge for exercise of
    -rights granted under this License, and you may not initiate litigation
    -(including a cross-claim or counterclaim in a lawsuit) alleging that
    -any patent claim is infringed by making, using, selling, offering for
    -sale, or importing the Program or any portion of it.
    -
    -  11. Patents.
    -
    -  A "contributor" is a copyright holder who authorizes use under this
    -License of the Program or a work on which the Program is based.  The
    -work thus licensed is called the contributor's "contributor version".
    -
    -  A contributor's "essential patent claims" are all patent claims
    -owned or controlled by the contributor, whether already acquired or
    -hereafter acquired, that would be infringed by some manner, permitted
    -by this License, of making, using, or selling its contributor version,
    -but do not include claims that would be infringed only as a
    -consequence of further modification of the contributor version.  For
    -purposes of this definition, "control" includes the right to grant
    -patent sublicenses in a manner consistent with the requirements of
    -this License.
    -
    -  Each contributor grants you a non-exclusive, worldwide, royalty-free
    -patent license under the contributor's essential patent claims, to
    -make, use, sell, offer for sale, import and otherwise run, modify and
    -propagate the contents of its contributor version.
    -
    -  In the following three paragraphs, a "patent license" is any express
    -agreement or commitment, however denominated, not to enforce a patent
    -(such as an express permission to practice a patent or covenant not to
    -sue for patent infringement).  To "grant" such a patent license to a
    -party means to make such an agreement or commitment not to enforce a
    -patent against the party.
    -
    -  If you convey a covered work, knowingly relying on a patent license,
    -and the Corresponding Source of the work is not available for anyone
    -to copy, free of charge and under the terms of this License, through a
    -publicly available network server or other readily accessible means,
    -then you must either (1) cause the Corresponding Source to be so
    -available, or (2) arrange to deprive yourself of the benefit of the
    -patent license for this particular work, or (3) arrange, in a manner
    -consistent with the requirements of this License, to extend the patent
    -license to downstream recipients.  "Knowingly relying" means you have
    -actual knowledge that, but for the patent license, your conveying the
    -covered work in a country, or your recipient's use of the covered work
    -in a country, would infringe one or more identifiable patents in that
    -country that you have reason to believe are valid.
    -
    -  If, pursuant to or in connection with a single transaction or
    -arrangement, you convey, or propagate by procuring conveyance of, a
    -covered work, and grant a patent license to some of the parties
    -receiving the covered work authorizing them to use, propagate, modify
    -or convey a specific copy of the covered work, then the patent license
    -you grant is automatically extended to all recipients of the covered
    -work and works based on it.
    -
    -  A patent license is "discriminatory" if it does not include within
    -the scope of its coverage, prohibits the exercise of, or is
    -conditioned on the non-exercise of one or more of the rights that are
    -specifically granted under this License.  You may not convey a covered
    -work if you are a party to an arrangement with a third party that is
    -in the business of distributing software, under which you make payment
    -to the third party based on the extent of your activity of conveying
    -the work, and under which the third party grants, to any of the
    -parties who would receive the covered work from you, a discriminatory
    -patent license (a) in connection with copies of the covered work
    -conveyed by you (or copies made from those copies), or (b) primarily
    -for and in connection with specific products or compilations that
    -contain the covered work, unless you entered into that arrangement,
    -or that patent license was granted, prior to 28 March 2007.
    -
    -  Nothing in this License shall be construed as excluding or limiting
    -any implied license or other defenses to infringement that may
    -otherwise be available to you under applicable patent law.
    -
    -  12. No Surrender of Others' Freedom.
    -
    -  If conditions are imposed on you (whether by court order, agreement or
    -otherwise) that contradict the conditions of this License, they do not
    -excuse you from the conditions of this License.  If you cannot convey a
    -covered work so as to satisfy simultaneously your obligations under this
    -License and any other pertinent obligations, then as a consequence you may
    -not convey it at all.  For example, if you agree to terms that obligate you
    -to collect a royalty for further conveying from those to whom you convey
    -the Program, the only way you could satisfy both those terms and this
    -License would be to refrain entirely from conveying the Program.
    -
    -  13. Remote Network Interaction; Use with the GNU General Public License.
    -
    -  Notwithstanding any other provision of this License, if you modify the
    -Program, your modified version must prominently offer all users
    -interacting with it remotely through a computer network (if your version
    -supports such interaction) an opportunity to receive the Corresponding
    -Source of your version by providing access to the Corresponding Source
    -from a network server at no charge, through some standard or customary
    -means of facilitating copying of software.  This Corresponding Source
    -shall include the Corresponding Source for any work covered by version 3
    -of the GNU General Public License that is incorporated pursuant to the
    -following paragraph.
    -
    -  Notwithstanding any other provision of this License, you have
    -permission to link or combine any covered work with a work licensed
    -under version 3 of the GNU General Public License into a single
    -combined work, and to convey the resulting work.  The terms of this
    -License will continue to apply to the part which is the covered work,
    -but the work with which it is combined will remain governed by version
    -3 of the GNU General Public License.
    -
    -  14. Revised Versions of this License.
    -
    -  The Free Software Foundation may publish revised and/or new versions of
    -the GNU Affero General Public License from time to time.  Such new versions
    -will be similar in spirit to the present version, but may differ in detail to
    -address new problems or concerns.
    -
    -  Each version is given a distinguishing version number.  If the
    -Program specifies that a certain numbered version of the GNU Affero General
    -Public License "or any later version" applies to it, you have the
    -option of following the terms and conditions either of that numbered
    -version or of any later version published by the Free Software
    -Foundation.  If the Program does not specify a version number of the
    -GNU Affero General Public License, you may choose any version ever published
    -by the Free Software Foundation.
    -
    -  If the Program specifies that a proxy can decide which future
    -versions of the GNU Affero General Public License can be used, that proxy's
    -public statement of acceptance of a version permanently authorizes you
    -to choose that version for the Program.
    -
    -  Later license versions may give you additional or different
    -permissions.  However, no additional obligations are imposed on any
    -author or copyright holder as a result of your choosing to follow a
    -later version.
    -
    -  15. Disclaimer of Warranty.
    -
    -  THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY
    -APPLICABLE LAW.  EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT
    -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY
    -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO,
    -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
    -PURPOSE.  THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM
    -IS WITH YOU.  SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF
    -ALL NECESSARY SERVICING, REPAIR OR CORRECTION.
    -
    -  16. Limitation of Liability.
    -
    -  IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
    -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS
    -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY
    -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE
    -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF
    -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD
    -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS),
    -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF
    -SUCH DAMAGES.
    -
    -  17. Interpretation of Sections 15 and 16.
    -
    -  If the disclaimer of warranty and limitation of liability provided
    -above cannot be given local legal effect according to their terms,
    -reviewing courts shall apply local law that most closely approximates
    -an absolute waiver of all civil liability in connection with the
    -Program, unless a warranty or assumption of liability accompanies a
    -copy of the Program in return for a fee.
    -
    -                     END OF TERMS AND CONDITIONS
    -
    -            How to Apply These Terms to Your New Programs
    -
    -  If you develop a new program, and you want it to be of the greatest
    -possible use to the public, the best way to achieve this is to make it
    -free software which everyone can redistribute and change under these terms.
    -
    -  To do so, attach the following notices to the program.  It is safest
    -to attach them to the start of each source file to most effectively
    -state the exclusion of warranty; and each file should have at least
    -the "copyright" line and a pointer to where the full notice is found.
    -
    -    
    -    Copyright (C)   
    -
    -    This program is free software: you can redistribute it and/or modify
    -    it under the terms of the GNU Affero General Public License as published by
    -    the Free Software Foundation, either version 3 of the License, or
    -    (at your option) any later version.
    -
    -    This program is distributed in the hope that it will be useful,
    -    but WITHOUT ANY WARRANTY; without even the implied warranty of
    -    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    -    GNU Affero General Public License for more details.
    -
    -    You should have received a copy of the GNU Affero General Public License
    -    along with this program.  If not, see .
    -
    -Also add information on how to contact you by electronic and paper mail.
    -
    -  If your software can interact with users remotely through a computer
    -network, you should also make sure that it provides a way for users to
    -get its source.  For example, if your program is a web application, its
    -interface could display a "Source" link that leads users to an archive
    -of the code.  There are many ways you could offer source, and different
    -solutions will be better for different programs; see section 13 for the
    -specific requirements.
    -
    -  You should also get your employer (if you work as a programmer) or school,
    -if any, to sign a "copyright disclaimer" for the program, if necessary.
    -For more information on this, and how to apply and follow the GNU AGPL, see
    -.
    diff --git a/Makefile b/Makefile
    deleted file mode 100644
    index cbce89b..0000000
    --- a/Makefile
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -check:
    -	sh aux/assert-shellcheck.sh
    -	sh aux/assert-todos.sh
    -	sh aux/assert-nixfmt.sh
    -
    -dev-check: check
    -
    -clean:
    -	rm -rf public/
    -
    -public:
    -	sh aux/workflow/public.sh dotfiles dotfiles public-inbox
    -
    -.PHONY: clean check dev-check
    diff --git a/README.md b/README.md
    deleted file mode 100644
    index 0e5e8e3..0000000
    --- a/README.md
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -# dotfiles - EuAndreh's personal repository
    -
    -## Paperkey
    -
    -Paperkey generated using:
    -```shell
    -cat < paperkey-content.txt
    -
    -# QR codes of paper key
    -gpg --export-secret-keys EuAndreh | paperkey | qrencode -o out.png -S -v 16
    -montage *.png -tile 1x2 -geometry +0+0 concatenate-out.png
    -rm out*
    -EOF
    -```
    -
    -To recover from a paperkey:
    -
    -```shell
    -paperkey --pubring <(wget -O- https://euandre.org/public-key.txt | gpg --dearmor) --secrets paperkey-content.txt | gpg --batch --import
    -```
    diff --git a/TODOs.md b/TODOs.md
    deleted file mode 100644
    index 8431ef6..0000000
    --- a/TODOs.md
    +++ /dev/null
    @@ -1,41 +0,0 @@
    -# Tasks
    -
    -## TODO Revisit `README.md` {#td-6982acd2-9949-1293-10cb-85ce623bf627}
    -- TODO in 2022-03-25
    -
    ----
    -
    -Also look at `description` and `long-description`.
    -
    -## TODO Make `src/bin/print` more robust {#td-e2b2e9d5-b8c9-9ce3-a0c1-699963325d4e}
    -- TODO in 2022-03-25
    -
    -## TODO Make code examples use monospaced font for manpage generated HTML {#task-83505972-2c0c-3569-5cb5-017daa628afd}
    -- TODO in 2021-06-13
    -
    -## DONE Support tags in tasks? {#task-18eb3dfe-c667-4d18-967c-d406a28e94be}
    -- DONE in 2021-02-20
    -
    -  Done in
    -  [`250117393a0503f66bb5a10cd0199f8748d32cda`](http://euandreh.xyz/dotfiles.git/commit/?id=250117393a0503f66bb5a10cd0199f8748d32cda)
    -- TODO in 2021-02-19
    -
    -# Bugs
    -
    -# Improvements
    -
    -# Questions
    -
    -# Resources
    -
    -# Scratch
    -http://r-36.net/scm/zs/file/README.md.html
    -guix command on 'doas guix'
    -bkp gpg key
    -keepass better recovery
    -move mailing list emails out of INBOX
    -notmuch backup tags
    -Downloads folder being included on backup: does pruning help with this?
    -rsync.net pricing for borg: should it be $18GB a year?
    -backup cron
    -revisit cron/ now that borg backs up everything
    diff --git a/aux/assert-nixfmt.sh b/aux/assert-nixfmt.sh
    deleted file mode 100755
    index 19bd0a2..0000000
    --- a/aux/assert-nixfmt.sh
    +++ /dev/null
    @@ -1,11 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -# shellcheck disable=2016
    -find . -type f -name '*.nix' -print0 | xargs -0 -I{} sh -c '
    -  nixfmt < "$1" | diff - "$1" || {
    -    echo "The file \"$1\" is unformatted. To fix it, run:"
    -    echo "  nixfmt $1"
    -    exit 1
    -  }
    -' _ {} \;
    diff --git a/aux/assert-shellcheck.sh b/aux/assert-shellcheck.sh
    deleted file mode 100755
    index cc01f3a..0000000
    --- a/aux/assert-shellcheck.sh
    +++ /dev/null
    @@ -1,6 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -git ls-files | \
    -	xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \
    -	xargs shellcheck
    diff --git a/aux/assert-todos.sh b/aux/assert-todos.sh
    deleted file mode 100755
    index 5827e34..0000000
    --- a/aux/assert-todos.sh
    +++ /dev/null
    @@ -1,58 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -EXCLUDE='(sh/templates/|aux/assert-todos.sh|scripts/pastebin.sh|scripts/post.sh|scripts/task)'
    -if git grep FIXME | grep -Ev "$EXCLUDE"; then
    -  echo "Found dangling FIXME markers on the project."
    -  echo "You should write them down properly on TODOs.org."
    -  exit 1
    -fi
    -
    -awk -F'{#' '
    -BEGIN {
    -  exitstatus = 0
    -  h2flag = 0
    -  h2status = ""
    -  prevline = ""
    -  idx = 0
    -  delete ids[0]
    -}
    -h2flag == 1 {
    -  split($0, l, " ")
    -  timelinestatus = l[2]
    -  if (h2status != timelinestatus) {
    -    print "h2/timeline status mismatch for line " NR-1
    -    print prevline
    -    print $0
    -    exitstatus = 1
    -  }
    -  h2status = ""
    -  h2flag = 0
    -}
    -
    -/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ {
    -  if (match($0, / \{#.*?\}$/) == 0) {
    -    print "Missing ID for line " NR ":\n" $0
    -    exitstatus = 1
    -  }
    -  id_with_prefix = substr($2, 0, length($2) - 1)
    -  match(id_with_prefix, /^\w+-/)
    -  id = substr(id_with_prefix, RLENGTH + 1)
    -  if (id in arr) {
    -    print "Duplicate ID: " id
    -    exitstatus = 1
    -  } else {
    -    arr[id] = 1
    -  }
    -
    -  split($0, l, " ")
    -  h2status = l[2]
    -  h2flag = 1
    -  prevline = $0
    -}
    -
    -
    -/^# Scratch$/ {
    -  exit exitstatus
    -}
    -' TODOs.md
    diff --git a/aux/ci/ci-build.sh b/aux/ci/ci-build.sh
    deleted file mode 100755
    index b6769a9..0000000
    --- a/aux/ci/ci-build.sh
    +++ /dev/null
    @@ -1,52 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -PACKAGE="$1"
    -LOGS_DIR="$2"
    -read -r _ SHA _ # oldrev newrev refname
    -FILENAME="$(date -Is)-$SHA.log"
    -LOGFILE="$LOGS_DIR/$FILENAME"
    -
    -{
    -	echo "Starting CI job at: $(date -Is)"
    -
    -	finish() {
    -		STATUS="$?"
    -		printf "\n\n>>> exit status was %s\n" "$STATUS"
    -		echo "Finishing CI job at: $(date -Is)"
    -		cd -
    -		NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS"
    -	}
    -	trap finish EXIT
    -
    -	unset GIT_DIR
    -	REMOTE="$PWD"
    -	cd "$(mktemp -d)"
    -	git clone "$REMOTE" .
    -	git config --global user.email git@euandre.org
    -	git config --global user.name 'EuAndreh CI'
    -	git fetch origin refs/notes/*:refs/notes/*
    -	git annex get ||:
    -
    -	if [ -f aux/guix/with-container.sh ]; then
    -		RUNNER='./aux/guix/with-container.sh'
    -	else
    -		RUNNER='sh -c'
    -	fi
    -
    -	$RUNNER 'make clean public dev-check'
    -} 2>&1 | tee "$LOGFILE"
    diff --git a/aux/ci/git-post-receive.sh b/aux/ci/git-post-receive.sh
    deleted file mode 100755
    index ee8075f..0000000
    --- a/aux/ci/git-post-receive.sh
    +++ /dev/null
    @@ -1,14 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do
    -	opt="$(eval "echo \$GIT_PUSH_OPTION_$n")"
    -	if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then
    -		printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt"
    -		exit 0
    -	fi
    -done
    -
    -PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix
    -LOGS_DIR="/opt/ci/$PACKAGE/logs"
    -"/opt/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR"
    diff --git a/aux/ci/git-pre-push.sh b/aux/ci/git-pre-push.sh
    deleted file mode 100755
    index e73b9b8..0000000
    --- a/aux/ci/git-pre-push.sh
    +++ /dev/null
    @@ -1,21 +0,0 @@
    -#!/bin/sh
    -set -eux
    -
    -TLD="$(cat aux/tld.txt)"
    -
    -PACKAGE="$(basename "$PWD")"
    -LOGS_DIR="/opt/ci/$PACKAGE/logs"
    -REMOTE_GIT_DIR="/srv/git/$PACKAGE.git"
    -
    -DESCRIPTION="$(mktemp)"
    -if [ -f description ]
    -then
    -	cp description "$DESCRIPTION"
    -else
    -	git config euandreh.description > "$DESCRIPTION"
    -fi
    -
    -scp "$DESCRIPTION" "$TLD:$REMOTE_GIT_DIR/description"
    -ssh "$TLD" mkdir -p "$LOGS_DIR"
    -scp aux/ci/ci-build.sh         "$TLD:$(dirname "$LOGS_DIR")/ci-build.sh"
    -scp aux/ci/git-post-receive.sh "$TLD:$REMOTE_GIT_DIR/hooks/post-receive"
    diff --git a/aux/ci/report.sh b/aux/ci/report.sh
    deleted file mode 100755
    index 65d3335..0000000
    --- a/aux/ci/report.sh
    +++ /dev/null
    @@ -1,70 +0,0 @@
    -#!/bin/sh
    -set -eu
    -
    -PROJECT_UC="$1"
    -
    -PASS='✅'
    -FAIL='❌'
    -
    -mkdir -p public/ci-logs public/ci-data
    -
    -OUT="$(mktemp)"
    -chmod 644 "$OUT"
    -
    -git fetch origin refs/notes/*:refs/notes/* ||:
    -
    -for c in $(git notes list | cut -d\  -f2); do
    -	DATA="$(git notes --ref=refs/notes/ci-data show "$c")"
    -	FILENAME="$(echo "$DATA" | cut -d\  -f2)"
    -	echo "$DATA" > "public/ci-data/$FILENAME"
    -	git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME"
    -done
    -
    -cat <> "$OUT"
    -
    -
    -	
    -		
    -		
    -		
    -
    -		
    -	
    -	
    -		

    - CI logs for $PROJECT_UC -

    -
    - - -EOF - -mv "$OUT" public/ci.html diff --git a/aux/guix/manifest.scm b/aux/guix/manifest.scm deleted file mode 100644 index e8c1cd1..0000000 --- a/aux/guix/manifest.scm +++ /dev/null @@ -1,18 +0,0 @@ -(specifications->manifest - (map symbol->string - '(bash - coreutils - findutils - diffutils - grep - sed - git - tar - gzip - gawk - make - perl - shellcheck - pandoc - clang - nixfmt))) diff --git a/aux/guix/pinned-channels.scm b/aux/guix/pinned-channels.scm deleted file mode 100644 index 504406f..0000000 --- a/aux/guix/pinned-channels.scm +++ /dev/null @@ -1,11 +0,0 @@ -(cons* - (channel - (name 'xyz-euandreh) - (url "git://euandreh.xyz/package-repository") - (branch "main") - (introduction - (make-channel-introduction - "d749e053e6db365069cb9b2ef47a78b06f9e7361" - (openpgp-fingerprint - "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) - %default-channels) diff --git a/aux/guix/with-container.sh b/aux/guix/with-container.sh deleted file mode 100755 index b521c82..0000000 --- a/aux/guix/with-container.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -set -eux - -if [ -z "${1:-}" ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm -elif [ "$1" = '-p' ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C -else - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" -fi diff --git a/aux/tld.txt b/aux/tld.txt deleted file mode 100644 index 0cb8b8b..0000000 --- a/aux/tld.txt +++ /dev/null @@ -1 +0,0 @@ -euandreh.xyz diff --git a/aux/workflow/TODOs.sh b/aux/workflow/TODOs.sh deleted file mode 100755 index 80059ee..0000000 --- a/aux/workflow/TODOs.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -PROJECT="$2" -MAILING_LIST="$3" -TLD="$(cat aux/tld.txt)" - -TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' - -TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' - -sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ - -e "s:@PROJECT@:$PROJECT:g" \ - -e "s:@MAILING_LIST@:$MAILING_LIST:g" \ - -e "s:@TLD@:$TLD:g" \ - < aux/workflow/preamble.md | \ - printf \ - '%s\n\n%s' \ - "$(cat -)" \ - "$(perl -pe "$TODOS_REGEX" TODOs.md | perl -pe "$TAGS_REGEX")" | \ - pandoc \ - --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - TODOs" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - -H aux/workflow/favicon.html \ - -H aux/workflow/style.css \ - > public/TODOs.html diff --git a/aux/workflow/assert-changelog.sh b/aux/workflow/assert-changelog.sh deleted file mode 100755 index 8e81f1f..0000000 --- a/aux/workflow/assert-changelog.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT="$1" - -for VVERSION in $(git tag); do - VERSION="${VVERSION#v}" - DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" - CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" - if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 - exit 1 - fi -done diff --git a/aux/workflow/assert-readme.sh b/aux/workflow/assert-readme.sh deleted file mode 100755 index cef75dd..0000000 --- a/aux/workflow/assert-readme.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT="$1" -MAILING_LIST="$2" -TLD="$(cat aux/tld.txt)" - -EXPECTED="$(mktemp)" -cat <> "$EXPECTED" - -For running the extra development-only checks, run: - -\`\`\`shell -$ make dev-check -\`\`\` - -and for generating the documentation HTML and website, run: - -\`\`\`shell -$ make public -\`\`\` - - -## Links - -- [home page](https://$TLD/$PROJECT/) -- [source code](https://git.euandreh.xyz/$PROJECT/) -- [bug tracking](https://$TLD/$PROJECT/TODOs.html) -- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) -- [CI logs](https://$TLD/$PROJECT/ci.html) -- [CHANGELOG](https://$TLD/$PROJECT/CHANGELOG.html) -EOF - -RELEASES_LIST="$(mktemp)" -for version in $(git tag | perl -e 'print reverse <>'); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" -done - -if [ -s "$RELEASES_LIST" ]; then - printf '\n\n## Releases\n\n' >> "$EXPECTED" - cat "$RELEASES_LIST" >> "$EXPECTED" -fi - -cat <> "$EXPECTED" - - -## License - -The code is licensed under [GNU Affero General Public License v3.0 or later][AGPL-3.0-or-later] (AGPL-3.0-or-later). - -[AGPL-3.0-or-later]: https://www.gnu.org/licenses/agpl-3.0.en.html -EOF - -if ! tail -n "$(wc -l < "$EXPECTED")" README.md | diff - "$EXPECTED"; then - echo 'Missing metadata at the end of README.md file' - exit 1 -fi diff --git a/aux/workflow/commonmark.sh b/aux/workflow/commonmark.sh deleted file mode 100755 index 6016f51..0000000 --- a/aux/workflow/commonmark.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -F="$2" -OUT="${3:-${F%.*}.html}" - -pandoc \ - --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - ${F%.*}" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - -H aux/workflow/favicon.html \ - < "$F" > "public/$OUT" diff --git a/aux/workflow/dist.sh b/aux/workflow/dist.sh deleted file mode 100755 index c061a04..0000000 --- a/aux/workflow/dist.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -set -eu - -DATE="$1" -VVERSION="v$2" -PROJECT="$3" - -if git show "$VVERSION" 1>/dev/null 2>/dev/null; then - echo "Version '$VVERSION' already exists." >&2 - exit 1 -fi - -if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo "Date '$DATE' is not up-to-date." >&2 - exit 1 -fi - -if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then - echo "Commit message isn't 'Release $VVERSION'." >&2 - exit 1 -fi - -sh aux/workflow/assert-changelog.sh "$PROJECT" - -git tag "$VVERSION" - -sh aux/workflow/sign-tarballs.sh "$PROJECT" diff --git a/aux/workflow/favicon.html b/aux/workflow/favicon.html deleted file mode 100644 index 8f9327c..0000000 --- a/aux/workflow/favicon.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/aux/workflow/favicon.png b/aux/workflow/favicon.png deleted file mode 100644 index 051fdf1..0000000 Binary files a/aux/workflow/favicon.png and /dev/null differ diff --git a/aux/workflow/favicon.svg b/aux/workflow/favicon.svg deleted file mode 100644 index ce566b2..0000000 --- a/aux/workflow/favicon.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/aux/workflow/preamble.md b/aux/workflow/preamble.md deleted file mode 100644 index 30efe0b..0000000 --- a/aux/workflow/preamble.md +++ /dev/null @@ -1,16 +0,0 @@ -# About - -TODOs for @PROJECT_UC@. - -See also [@TLD@/@PROJECT@/](https://@TLD@/@PROJECT@/) and [CI logs](https://@TLD@/@PROJECT@/ci.html). - -Register a new one at -[~euandreh/@MAILING_LIST@@lists.sr.ht](mailto:~euandreh/@MAILING_LIST@@lists.sr.ht?subject=%5B@PROJECT@%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) -and see [existing discussions](https://lists.sr.ht/~euandreh/@MAILING_LIST@?search=%5B@PROJECT@%5D). - -*Você também pode escrever em português*. - -*Vous pouvez aussi écrire en français*. - -*Vi povas ankaŭ skribi esperante*. - diff --git a/aux/workflow/public.sh b/aux/workflow/public.sh deleted file mode 100755 index 8ecb855..0000000 --- a/aux/workflow/public.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT_UC="$1" -PROJECT="$2" -MAILING_LIST="$3" - -sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" -sh aux/workflow/commonmark.sh "$PROJECT" README.md index.html ||: - -if [ -f CHANGELOG.md ]; then - sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md -fi - -sh aux/ci/report.sh "$PROJECT" - -cp aux/workflow/favicon.* public/ diff --git a/aux/workflow/sign-tarballs.sh b/aux/workflow/sign-tarballs.sh deleted file mode 100755 index 8de6ac4..0000000 --- a/aux/workflow/sign-tarballs.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT="$1" - -SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" -for tag in $(git tag); do - COMMIT="$(git rev-list -n1 "$tag")" - if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then - echo "Adding missing signature to $tag" >&2 - git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( - git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | - gpg --output - --armor --detach-sign | - git hash-object -w --stdin - )" "$tag" - fi -done diff --git a/aux/workflow/style.css b/aux/workflow/style.css deleted file mode 100644 index d7935d0..0000000 --- a/aux/workflow/style.css +++ /dev/null @@ -1,46 +0,0 @@ - diff --git a/configuration.nix b/configuration.nix deleted file mode 100644 index 99d44ae..0000000 --- a/configuration.nix +++ /dev/null @@ -1,611 +0,0 @@ -{ config, pkgs, ... }: - -# rollback to a previously working channel version, useful -# when "doas nixos-rebuild switch --upgrade" breaks: -# -# $ doas nix-channel --rollback - -let - enable-virtualization = true; - extra-groups = if enable-virtualization then [ "docker" ] else []; - extra-packages = with pkgs; [ - ] ++ (if enable-virtualization then [ gitlab-runner ] else []); - work = { - packages = with pkgs; { - proprietary = [ - slack - zoom-us - openfortivpn - skypeforlinux - chromium - ]; - libre = [ - yubioath-desktop - clojure # =clj= - ]; - }; - config = { - yubioauth-support = true; - }; - }; -in { - imports = [ /etc/nixos/hardware-configuration.nix ]; - - # Use the systemd-boot EFI boot loader. - boot = { - loader = { - efi.canTouchEfiVariables = true; - grub = { - enable = true; - version = 2; - efiSupport = true; - device = "nodev"; - }; - }; - initrd.luks.devices = { - crypted = { - device = "/dev/nvme0n1p2"; - preLVM = true; - }; - }; - }; - - hardware = { - bluetooth.enable = true; - pulseaudio = { - package = pkgs.pulseaudioFull; - enable = true; - extraModules = [ pkgs.pulseaudio-modules-bt ]; - extraConfig = '' - # Switch between headset and headphone mode (e.g. for calls and music) automatically - load-module module-bluetooth-policy auto_switch=2 - # Echo cancellation and noise cleanup of mic - load-module module-echo-cancel aec_method=webrtc - - # https://til.flourishing.stream/2020/05/24/cancelamento-de-ruido-pulseaudio/ - ### Enable Echo/Noise-Cancellation - load-module module-echo-cancel use_master_format=1 aec_method=webrtc aec_args="analog_gain_control=0\ digital_gain_control=1" source_name=echoCancel_source sink_name=echoCancel_sink - set-default-source echoCancel_source - set-default-sink echoCancel_sink - ''; - }; - }; - - networking = { - hostName = "usurpador"; - networkmanager.enable = true; - }; - - console = { - keyMap = "br-abnt2"; - }; - - # Select internationalisation properties. - i18n = { - defaultLocale = "fr_FR.UTF-8"; - }; - - # Set your time zone. - time.timeZone = "America/Sao_Paulo"; - - documentation = { - enable = true; - man.enable = true; - dev.enable = true; - man.generateCaches = true; - nixos.includeAllModules = true; - }; - - environment = { - enableDebugInfo = true; - - systemPackages = let - pkgs-19 = import (fetchTarball - "https://github.com/NixOS/nixpkgs/archive/b0d748e244df6c977b2a1db3873ffdc271e59615.tar.gz") - { }; - pkgs-21 = import (fetchTarball - "https://github.com/NixOS/nixpkgs/archive/e6377ff35544226392b49fa2cf05590f9f0c4b43.tar.gz") - { }; - bmake-with-alias = pkgs.bmake.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/bmake $out/bin/make - ''; - }); - tinycc-with-posix-alias = pkgs.tinycc.overrideAttrs (oldAttrs: { - postInstall = '' - ln -s $out/bin/tcc $out/bin/c99 - ''; - }); - timidity-with-more-formats = pkgs.timidity.overrideAttrs (oldAttrs: { - configureFlags = oldAttrs.configureFlags ++ [ "--enable-audio=vorbis,flac" ]; - buildInputs = oldAttrs.buildInputs ++ (with pkgs; [ libogg libvorbis flac ]); - }); - mktorrent-latest = pkgs.mktorrent.overrideAttrs (oldAttrs: rec { - version = "de7d011b35458de1472665f50b96c9cf6c303f39"; - src = pkgs.fetchFromGitHub { - owner = "Rudde"; - repo = "mktorrent"; - rev = version; - sha256 = "1gsky1ijxrfsw07lvfjw4annjkdfpmnp8nnddi1wakbzqn6v5dwq"; - }; - }); - - in with pkgs; - [ - vagrant - - ## Documentation - posix_man_pages - scheme-manpages - - ## DVCS - mr - fossil - mercurial - cvs - pkgs-19.bitkeeper - pkgs-19.packer - gitAndTools.gitFull - gitAndTools.gitRemoteGcrypt - gitAndTools.git-open - - ## Personal data tools - borgbackup - pass - gnupg - pinentry_gtk2 - - ## CLI tools - groff - mktorrent-latest - pkgs-21.diffoscope - diffoscope - bash-completion - nix-bash-completions - youtube-dl - wget - tmux - sox # =play=, SoX - Sound eXchange - gettext - perlPackages.Po4a - rlwrap - jq - rq - openvpn - xclip - psmisc # =killall= - tree - feh - qrencode - bind # =dig= - rsync - moreutils # =vipe=, =sponge=, errno - graphviz # =dot= and others - mkpasswd - direnv - recutils - sqlite - trash-cli - entr - mailutils - ffmpeg-full - ledger - gnuplot - ranger - electrum - zathura - st - pavucontrol - newsboat - acpi - xsel - nixfmt - nvi - fzf - calcurse - pandoc - cloc - inetutils # telnet - lsof - lsscsi - gotop - imagemagick - enscript - tcl - python3 - unzip - - ## System utilities - pmutils - btrfs-progs - - ## Mail - isync - notmuch - afew - # alot FIXME - pkgs-21.alot - w3m - urlscan - md4c - docutils - timidity-with-more-formats - - ## Conversations - # gomuks - weechat - # poezio - - ## Programming tools - perl - shellcheck - gcc - musl.dev - clang - clang-tools - valgrind - gdb - sbcl - nodejs_latest - quickjs - deno - lilypond - ghostscript - pdftk - guile_3_0 - - ## POSIX - bmake-with-alias - byacc - bc - lzip - gnugrep - file - ed - tinycc-with-posix-alias - m4 - bintools-unwrapped - units - - ## Containers and VMs - qemu - expect - - ## xmonad - xorg.xmodmap - xorg.xmessage - dmenu - escrotum - xorg.xbacklight - playerctl - lightdm - fvwm # =xpmroot= - haskellPackages.xmobar - arandr - alsaUtils # for xmonad volume commands - yad - amfora - cmus # remove it, use just mpv? - mutagen - - ## EuAndreh overlay - # xyz-euandreh.remembering-latest - # xyz-euandreh.git-permalink-latest - # xyz-euandreh.autoqemu-latest - - ## GUI programs - # frescobaldi broken - inkscape - # dino - fractal - poedit - audacity - zbar - (mpv-with-scripts.override { - scripts = with mpvScripts; [ mpris sponsorblock ]; - }) - firefox - libreoffice - - ## Candidates to be replaced by alternatives - transmission-gtk # https://github.com/btpd/btpd - tdesktop # telegram -> gomuks - whatsapp-for-linux - ] ++ work.packages.libre ++ work.packages.proprietary ++ extra-packages; - - etc = { - "with-email.sh".text = '' - #!/bin/sh - set -u - . ~/.bashrc - - while getopts 's:' flag; do - case "$flag" in - s) - SUBJECT="$OPTARG" - ;; - *) - exit 2 - ;; - esac - done - shift $((OPTIND - 1)) - - now() { - date '+%Y-%m-%dT%H:%M:%S%Z' - } - - OUT="$(echo 'mkstemp(template)' | m4 -D template="${"\${TMPDIR:-/tmp}"}/m4-tmpname.")" - printf 'Running command: %s\nStarting at: %s\n\n' "$*" "$(now)" >> "$OUT" - (sh -c "$@" 2>&1) >> "$OUT" - STATUS="$?" - printf '\nFinished at: %s\n' "$(now)" >> "$OUT" - - mail \ - -a 'Content-Type: text/plain; charset=UTF-8' \ - -a 'From:cron@euandre.org' \ - -s " (exit status: $STATUS) - ${"\${SUBJECT:-NO SUBJECT}"}" \ - eu@euandre.org < "$OUT" - ''; - }; - }; - - nixpkgs = let allow-unfree = builtins.length work.packages.proprietary > 0; - in { - config = { - android_sdk.accept_license = allow-unfree; - allowUnfree = allow-unfree; - }; - overlays = let - use-local = false; - euandreh-nixpkgs = import (if use-local then - ../package-repository/default.nix - else - fetchTarball { - url = - "https://euandreh.xyz/package-repository.git/snapshot/package-repository-main.tar.gz"; - }) { inherit pkgs; }; - in [ euandreh-nixpkgs ]; - }; - - # Look at - # https://www.vivaolinux.com.br/topico/Off-Code-Cafe/Me-apresente-sua-distro - - programs = { - bash.enableCompletion = true; - autojump.enable = true; - msmtp = { - enable = true; - extraConfig = '' - defaults - auth on - tls on - port 587 - syslog on - - account euandreh - host box.euandre.org - from eu@euandre.org - user eu@euandre.org - # msmtp in cron's MAILTO environment doesn't include PASSWORD_STORE_DIR - passwordeval pass show Mail-in-a-Box - - account euandrehxyz - host mail.euandreh.xyz - from eu@euandreh.xyz - user eu@euandreh.xyz - passwordeval pass show VPS/kuvira/mail - - account euandreharrobaponto - host mail.arrobaponto.org - from euandreh@arrobaponto.org - user euandreh@arrobaponto.org - passwordeval pass show VPS/toph/mail - - account nubank - host smtp.gmail.com - from andre.moreira@nubank.com.br - user andre.moreira@nubank.com.br - passwordeval pass show andre.moreira@nubank.com.br - - account default : euandreh - ''; - }; - }; - - services = { - # required by vagrant+libvirt - nfs.server.enable = enable-virtualization; - - # Required for local network printer - avahi = { - enable = true; - nssmdns = true; - }; - - printing = { - enable = false; - drivers = let - epson-201401w = with pkgs; - stdenv.mkDerivation rec { - v = "201401w"; - pname = "epson-${v}"; - version = "1.0.0"; - - src = fetchurl { - urls = [ - "https://download.ebz.epson.net/dsc/op/stable/SRPMS/epson-inkjet-printer-${v}-${version}-1lsb3.2.src.rpm" - "https://download3.ebz.epson.net/dsc/f/03/00/03/45/41/92e9c9254f0ee4230a069545ba27ec2858a2c457/epson-inkjet-printer-201401w-1.0.0-1lsb3.2.src.rpm" - ]; - sha256 = "0c60m1sd59s4sda38dc5nniwa7dh1b0kv1maajr0x9d38gqlyk3x"; - }; - - nativeBuildInputs = [ rpmextract autoreconfHook file ]; - - buildInputs = [ libjpeg cups ]; - - unpackPhase = '' - rpmextract $src - tar -zxf epson-inkjet-printer-${v}-${version}.tar.gz - tar -zxf epson-inkjet-printer-filter-${version}.tar.gz - for ppd in epson-inkjet-printer-${v}-${version}/ppds/*; do - substituteInPlace $ppd --replace "/opt/epson-inkjet-printer-${v}" "$out" - substituteInPlace $ppd --replace "/cups/lib" "/lib/cups" - done - cd epson-inkjet-printer-filter-${version} - ''; - - postInstall = '' - cd ../epson-inkjet-printer-${v}-${version} - cp -a lib64 resource watermark $out - mkdir -p $out/share/cups/model/epson-inkjet-printer-${v} - cp -a ppds $out/share/cups/model/epson-inkjet-printer-${v}/ - cp -a Manual.txt $out/doc/ - cp -a README $out/doc/README.driver - ''; - }; - in [ - epson-201401w - ]; - }; - - cron = { - enable = true; - # Keep this so that when the "mail" command fails I also get a notification email - mailto = "eu@euandre.org"; - systemCronJobs = [ - "40 23 * * * root sh /etc/with-email.sh -s '[CRON] usurpador: guix upgrade' -- 'guix pull && guix package -u && systemctl restart guix-daemon.service'" - "40 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: guix upgrade' -- 'guix pull && guix package -u'" - "0 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: guix deploy' -- 'guix deploy -L ~/dev/libre/servers/src/lib ~/dev/libre/servers/src/machines.scm'" - "10 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: mr update' -- 'mr -s safeupdate'" - "20 */6 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: email flush' -- 'msmtp-queue -r'" - "30 */6 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: email sync' -- 'mbsync -a && notmuch new'" - "50 22 * * * andreh sh /etc/with-email.sh -s '[CRON] usurpador: borg backup' -- '~/dev/libre/dotfiles/src/bin/backup'" - ]; - }; - - xserver = { - enable = true; - layout = "br"; - xkbOptions = "caps:swapescape"; - - # Touchpad support - libinput.enable = true; - - config = '' - Section "Device" - Identifier "Intel Graphics" - Driver "intel01" - Option "Backlight" "intel_backlight" - EndSection - ''; - - windowManager.xmonad = { - enable = true; - enableContribAndExtras = true; - }; - displayManager = { - defaultSession = "none+xmonad"; - - lightdm.enable = true; - - # The config inception was inspired by: - # http://ubuntuforum-br.org/index.php?topic=13784.0 - # Lambda symbol name taken from: - # http://wiki.linuxquestions.org/wiki/List_of_Keysyms_Recognised_by_Xmodmap - # To test a keycode: - # xmodmap -e 'keycode 118 = bar Greek_lamda' - sessionCommands = '' - ${pkgs.fvwm}/bin/xpmroot ~/annex/docs/emotion.png & - ''; - }; - }; - - clipmenu.enable = true; - blueman.enable = true; - pcscd.enable = work.config.yubioauth-support; - }; - - security = { - sudo.enable = false; - doas = { - enable = true; - extraConfig = '' - permit persist setenv { NIX_PATH } :wheel - ''; - }; - }; - - users = { - extraUsers = let - andrehUser = { - andreh = { - isNormalUser = true; - uid = 1000; - description = "EuAndreh"; - extraGroups = [ "wheel" "networkmanager" "libvirtd" ] ++ extra-groups ; - }; - }; - # From the Guix manual: - # https://www.gnu.org/software/guix/manual/en/html_node/Build-Environment-Setup.html#Build-Environment-Setup - buildUser = (i: { - "guixbuilder${i}" = { # guixbuilder$i - group = "guixbuild"; # -g guixbuild - extraGroups = [ "guixbuild" ]; # -G guixbuild - home = "/var/empty"; # -d /var/empty - shell = pkgs.shadow; # -s `which nologin` - description = "Guix build user ${i}"; # -c "Guix buid user $i" - isSystemUser = true; # --system - }; - }); - # merge all users - in pkgs.lib.fold (str: acc: acc // buildUser str) andrehUser - # for i in `seq -w 1 10` - (map (pkgs.lib.fixedWidthNumber 2) (builtins.genList (n: n + 1) 10)); - - extraGroups.guixbuild = { name = "guixbuild"; }; - }; - - systemd = { - services = { - # Derived from Guix guix-daemon.service.in - # https://git.savannah.gnu.org/cgit/guix.git/tree/etc/guix-daemon.service.in?id=00c86a888488b16ce30634d3a3a9d871ed6734a2 - guix-daemon = { - enable = true; - description = "Build daemon for GNU Guix"; - serviceConfig = { - ExecStart = - "/var/guix/profiles/per-user/root/current-guix/bin/guix-daemon --build-users-group=guixbuild"; - }; - wantedBy = [ "multi-user.target" ]; - }; - }; - user.services = { - mpris-proxy = { - enable = true; - description = "Mpris proxy, added to support bluetooth media keys"; - serviceConfig = { - After = [ "network.target" "sound.target" ]; - ExecStart = "${pkgs.bluez}/bin/mpris-proxy"; - WantedBy = [ "default.target" ]; - }; - }; - }; - }; - - system = { - stateVersion = "20.03"; - autoUpgrade = { - enable = true; - dates = "0:10"; - }; - }; - - xdg.portal = { - enable = true; - extraPortals = [ pkgs.xdg-desktop-portal-gtk ]; - }; - - virtualisation.libvirtd.enable = enable-virtualization; - virtualisation.docker.enable = enable-virtualization; -} diff --git a/description b/description deleted file mode 100644 index e5ca504..0000000 --- a/description +++ /dev/null @@ -1 +0,0 @@ -Personal OS configuration files. diff --git a/infokey b/infokey deleted file mode 100644 index 90edc50..0000000 --- a/infokey +++ /dev/null @@ -1,7 +0,0 @@ -^e down-line -^y up-line - -#var -link-style=cyan -active-link-style=blue,bold -match-style=underline,bold,bggreen diff --git a/long-description b/long-description deleted file mode 100644 index 3dfc42e..0000000 --- a/long-description +++ /dev/null @@ -1,2 +0,0 @@ -Repository with OS configuration files, including the support files that are -automatically generated for other repositories. diff --git a/mailcap.conf b/mailcap.conf deleted file mode 100644 index aeea68d..0000000 --- a/mailcap.conf +++ /dev/null @@ -1 +0,0 @@ -text/html; w3m -dump -o document_charset=%{charset} '%s'; nametemplate=%s.html; copiousoutput diff --git a/npmrc.sh b/npmrc.sh deleted file mode 100644 index 0bc6ecb..0000000 --- a/npmrc.sh +++ /dev/null @@ -1,5 +0,0 @@ -# shellcheck disable=2148 disable=2034 -prefix=/home/andreh/.npm-packages -# Taken from: -# http://www.tomsquest.com/blog/2018/10/better-npm-ing/ -save-exact=true diff --git a/os.scm b/os.scm deleted file mode 100644 index 972c42d..0000000 --- a/os.scm +++ /dev/null @@ -1,181 +0,0 @@ -(use-modules (gnu) - (srfi srfi-1)) -(use-service-modules desktop networking ssh xorg) - -(operating-system - (locale "en_US.utf8") - (timezone "America/Sao_Paulo") - (keyboard-layout (keyboard-layout "br" #:options '("caps:swapescape" "esperanto:qwerty"))) - (host-name "velhinho-guix-system") - (users (cons* (user-account - (name "andreh") - (comment "andreh") - (group "users") - (home-directory "/home/andreh") - (supplementary-groups - '("wheel" "netdev" "audio" "video"))) - %base-user-accounts)) - (packages - (append - (list (package-inputs guix)) - (map (compose list specification->package+output symbol->string) - '(;; Base - nss-certs ;; suggested by Guix - - ;; Personal data tools - git - git:send-email - git-lfs - git-annex - myrepos - git-remote-gcrypt - git-crypt - fossil - git-open - borg - gnupg - syncthing - - ;; CLI tools - groff - mktorrent - diffoscope - bash-completion - youtube-dl - ;;; wget - both already included? - ;;; curl - tmux - ;; tmuxinator - sox ; SoX - Sound eXchange - gettext - rlwrap - jq - ;; rq - openvpn - xclip - psmisc ; killall - xkill - ;; gksu - tree - unzip - feh - bind:utils - rsync - moreutils - graphviz - ;; graph-easy - ;; mkpasswd, is this required? - direnv - recutils - sqlite - trash-cli - entr ; need patch - mailutils - ffmpeg - ledger - gnuplot - ranger - electrum - zathura - ;; zathura-ps - ;; zathura-pdf-poppler - ;; zathura-djvu - ;; zathura-cb - ;; zathura-pdf-mupdf - st - pavucontrol - weechat - newsboat - acpi - xsel - pinentry - nvi - go-github-com-junegunn-fzf - autojump - calcurse - pandoc - openssh - festival ;; TTS software - - ;; Mail - notmuch - isync - neomutt - - ;; Programming tools - perl - shellcheck - ;; mrsh - dash - - ;; POSIX - ;; bmake - ;; byacc - ;; pax - flex - ;;; gnugrep - already included? - - ;; Containers and VMs - qemu - - ;; xmonad - xmodmap - xmessage - dmenu - ;; escrotum - xbacklight - playerctl - ;; lightdm - fvwm ; xpmroot - xmonad - ghc - ghc-xmonad-contrib - xmobar - remembering - arandr - alsa-utils ; for xmonad volume controls - xset - xmodmap - setxkbmap - - ;; GUI programs - audacity - zbar - ;; fractal - dino - calibre - vlc - gpodder - qutebrowser - blueman - bluez)) - %base-packages)) - (services - (append - (list (service gnome-desktop-service-type) - (set-xorg-configuration - (xorg-configuration - (keyboard-layout keyboard-layout)))) - %desktop-services)) - (bootloader - (bootloader-configuration - (bootloader grub-efi-bootloader) - (target "/boot/efi") - (keyboard-layout keyboard-layout))) - (mapped-devices - (list (mapped-device - (source - (uuid "67a25dfa-ed48-4466-89f3-e291365df104")) - (target "cryptroot") - (type luks-device-mapping)))) - (file-systems - (cons* (file-system - (mount-point "/") - (device "/dev/mapper/cryptroot") - (type "btrfs") - (dependencies mapped-devices)) - (file-system - (mount-point "/boot/efi") - (device (uuid "1B26-9F4E" 'fat32)) - (type "vfat")) - %base-file-systems))) diff --git a/sbclrc.lisp b/sbclrc.lisp deleted file mode 100644 index df7f57a..0000000 --- a/sbclrc.lisp +++ /dev/null @@ -1,6 +0,0 @@ -;;; The following lines added by ql:add-to-init-file: -#-quicklisp -(let ((quicklisp-init (merge-pathnames "dev/quicklisp/setup.lisp" - (user-homedir-pathname)))) - (when (probe-file quicklisp-init) - (load quicklisp-init))) diff --git a/sh/Positive.ogg b/sh/Positive.ogg deleted file mode 100644 index 22cb563..0000000 Binary files a/sh/Positive.ogg and /dev/null differ diff --git a/sh/agents.sh b/sh/agents.sh deleted file mode 100644 index f392c86..0000000 --- a/sh/agents.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh - -SSH_AUTH_SOCK=$(gpgconf --list-dirs agent-ssh-socket) -GPG_TTY=$(tty) -export GPG_TTY SSH_AUTH_SOCK -gpgconf --launch gpg-agent -mkdir -p ~/.ssh -gpg --export-ssh-key eu@euandre.org > ~/.ssh/id_rsa.pub -chmod 600 ~/.ssh/id_rsa.pub - -eval "$(direnv hook bash)" diff --git a/sh/aliases.sh b/sh/aliases.sh deleted file mode 100644 index 79e4bcf..0000000 --- a/sh/aliases.sh +++ /dev/null @@ -1,33 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC2139 - -unalias -a - -alias r='reload' -alias rr='rreload' -alias rrr='rrreload' -alias p='ping euandre.org -c 3' -alias l='ls -lahF --color' -alias c='tmux send-keys -R \; clear-history' -alias o='open' -alias mail='mail -a "Content-Type: text/plain; charset=UTF-8" -aFrom:eu@euandre.org' - -alias m='mbsync EuAndreh & mbsync EuAndrehXYZ & mbsync Nubank & wait && notmuch new' -alias mm='msmtp-queue -r' - -alias mk='make clean && make dev-check' -alias wmk='aux/with-container "make clean && make dev-check"' -alias tt='mk && wmk' -alias todos='make public && open public/TODOs.html' -alias valgrind='valgrind --show-error-list=yes --show-leak-kinds=all --leak-check=full --track-origins=yes --error-exitcode=1' - -alias grep='grep --color=auto' -alias diff='diff --color=auto' -alias make='make -e' -alias less='less -R' -alias watch='watch --color ' -alias sbcl='rlwrap sbcl' -alias sqlite='rlwrap sqlite3' -alias guile='rlwrap guile' - -alias man='MANWIDTH=$((COLUMNS > 80 ? 80 : COLUMNS)) man' diff --git a/sh/bash-config.sh b/sh/bash-config.sh deleted file mode 100644 index dbfdb88..0000000 --- a/sh/bash-config.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/usr/bin/env bash - -# ~/.bashrc: executed by bash(1) for non-login shells. - -# derived from Ubuntu's default .bashrc - - -# If not running interactively, don't do anything -case $- in - *i*) ;; - *) return;; -esac - -# Don't put duplicate linesin the history. -# Don't store commands that start with an empty space. -# See bash(1) for more options -HISTCONTROL=ignoreboth - -# append to the history file, don't overwrite it -shopt -s histappend - -# for setting history length see HISTSIZE and HISTFILESIZE in bash(1) -HISTSIZE=1000000 -HISTFILESIZE=2000000 - -# check the window size after each command and, if necessary, -# update the values of LINES and COLUMNS. -shopt -s checkwinsize - -# If set, the pattern "**" used in a pathname expansion context will -# match all files and zero or more directories and subdirectories. -shopt -s globstar - -# If set, the pattern "*" will also match dotfiles. -shopt -s dotglob - -stty -ixon - - -# Taken from: -# https://sanctum.geek.nz/arabesque/better-bash-history/ - -# Record timestamps -# If you set $HISTTIMEFORMAT to something useful, Bash will record the timestamp of each command in its history. In this variable you can specify the format in which you want this timestamp displayed when viewed with history. I find the full date and time to be useful, because it can be sorted easily and works well with tools like cut and awk. -HISTTIMEFORMAT='%F %T ' - -# Use one command per line -# To make your .bash_history file a little easier to parse, you can force commands that you entered on more than one line to be adjusted to fit on only one with the cmdhist option: -shopt -s cmdhist - -# Store history immediately -# By default, Bash only records a session to the .bash_history file on disk when the session terminates. This means that if you crash or your session terminates improperly, you lose the history up to that point. You can fix this by recording each line of history as you issue it, through the $PROMPT_COMMAND variable: -PROMPT_COMMAND='history -a' - -bind -x '"\e\C-l": c' - -complete -cf doas diff --git a/sh/bash_profile.sh b/sh/bash_profile.sh deleted file mode 100644 index 805ae1c..0000000 --- a/sh/bash_profile.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh - -# shellcheck disable=SC1090 -. ~/dev/libre/dotfiles/sh/bashrc.sh diff --git a/sh/bashrc.sh b/sh/bashrc.sh deleted file mode 100644 index c8928ca..0000000 --- a/sh/bashrc.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC1090 disable=SC1091 - -export DOTFILES=~/dev/libre/dotfiles - -. $DOTFILES/sh/bash-config.sh -. $DOTFILES/sh/env.sh -. $DOTFILES/sh/colors.sh -. $DOTFILES/sh/ps1.sh -. $DOTFILES/sh/fzf.sh -. $DOTFILES/sh/aliases.sh -. $DOTFILES/sh/util.sh -. $DOTFILES/sh/agents.sh -. $DOTFILES/sh/symlinks.sh -. $DOTFILES/sh/vcs.sh -. ~/annex/bin/misc/priv.sh -. ~/.nurc diff --git a/sh/colors.sh b/sh/colors.sh deleted file mode 100644 index 7c8cb3e..0000000 --- a/sh/colors.sh +++ /dev/null @@ -1,115 +0,0 @@ -#!/bin/sh -# shellcheck disable=2059 - -export end="\033[0m" -export black="\033[0;30m" -export blackb="\033[1;30m" -export white="\033[0;37m" -export whiteb="\033[1;37m" -export red="\033[0;31m" -export redb="\033[1;31m" -export green="\033[0;32m" -export greenb="\033[1;32m" -export yellow="\033[0;33m" -export yellowb="\033[1;33m" -export blue="\033[0;34m" -export blueb="\033[1;34m" -export purple="\033[0;35m" -export purpleb="\033[1;35m" -export lightblue="\033[0;36m" -export lightblueb="\033[1;36m" -export blacki="\033[0;90m" -export bluei="\033[0;94m" - -black() { - printf "${black}${1}${end}" -} - -blackb() { - printf "${blackb}${1}${end}" -} - -blacki() { - printf "${blacki}${1}${end}" -} - -white() { - printf "${white}${1}${end}" -} - -whiteb() { - printf "${whiteb}${1}${end}" -} - -red() { - printf "${red}${1}${end}" -} - -redb() { - printf "${redb}${1}${end}" -} - -green() { - printf "${green}${1}${end}" -} - -greenb() { - printf "${greenb}${1}${end}" -} - -yellow() { - printf "${yellow}${1}${end}" -} - -yellowb() { - printf "${yellowb}${1}${end}" -} - -blue() { - printf "${blue}${1}${end}" -} - -blueb() { - printf "${blueb}${1}${end}" -} - -bluei() { - printf "${bluei}${1}${end}" -} - -purple() { - printf "${purple}${1}${end}" -} - -purpleb() { - printf "${purpleb}${1}${end}" -} - -lightblue() { - printf "${lightblue}${1}${end}" -} - -lightblueb() { - printf "${lightblueb}${1}${end}" -} - -colors() { - black "black" - blackb "blackb" - white "white" - whiteb "whiteb" - red "red" - redb "redb" - green "green" - greenb "greenb" - yellow "yellow" - yellowb "yellowb" - blue "blue" - blueb "blueb" - purple "purple" - purpleb "purpleb" - lightblue "lightblue" - lightblueb "lightblueb" - blacki "blacki" - bluei "bluei" -} diff --git a/sh/env.sh b/sh/env.sh deleted file mode 100644 index 5e49d62..0000000 --- a/sh/env.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh - -export EDITOR=vi -export VISUAL="$EDITOR" -export BROWSER=firefox -export INPUTRC="$HOME/.config/bash/inputrc" -export RLWRAP_HOME="$HOME/.cache/rlwrap" - -export BORG_REMOTE_PATH='borg1' -export BORG_PASSCOMMAND='pass show Usurpador/borg/passphrase' - -export GOPATH="$HOME/dev/go" -export CFLAGS='-std=c99 -Wall -Wextra -Wpedantic -g -flto -Werror' -export CC=musl-gcc -export AR=gcc-ar -export LEX=flex -export LDFLAGS='-flto' -MAKEFLAGS="-j$(nproc)" -export MAKEFLAGS -export NIXPREFIX='/run/current-system/sw' -export PREFIX="$HOME/.p" -export C_INCLUDE_PATH="$PREFIX/include:$NIXPREFIX/include/:${C_INCLUDE_PATH:-}" -export LIBRARY_PATH="$PREFIX/lib:$NIXPREFIX/lib/:${LIBRARY_PATH:-}" -export INFOPATH="$PREFIX/share/info:$HOME/.config/guix/current/share/info:$INFOPATH" -export MANPATH="$PREFIX/share/man:$(manpath -q)" -export LISP='sbcl --eval' - -export GUIX_LOCPATH="$HOME/.guix-profile/lib/locale" -. ~/.guix-profile/etc/profile -GUIX_PROFILE= . ~/.config/guix/current/etc/profile - -PATH="$HOME/.p/bin:$HOME/.local/bin:$HOME/tmp/bin:$HOME/dev/libre/website/bin:$HOME/dev/others/dinheiros:$DOTFILES/src/bin:$HOME/dev/libre/eutils/src/impls/sh:$DOTFILES/xmonad/scripts:$DOTFILES/cron:$DOTFILES/cron/generated:$HOME/annex/bin/scripts:$PATH" diff --git a/sh/fake-symlinks.sh b/sh/fake-symlinks.sh deleted file mode 100644 index 06b9fe9..0000000 --- a/sh/fake-symlinks.sh +++ /dev/null @@ -1,354 +0,0 @@ -#!/usr/bin/env bash - -pushd "$DOTFILES/sh/templates/" &>/dev/null || exit 1 - -mkdir -p "$DOTFILES/cron/generated/" -for job in report-summary annex run-local-backup copy-box-backups repo-update mbox-archive mr-remotes-backup; do - sed "s/__JOB__/$job/" cronjob-with-email.sh > "$HOME/dev/libre/dotfiles/cron/generated/job-$job.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/$job.sh" - chmod +x "$HOME/dev/libre/dotfiles/cron/generated/job-$job.sh" -done - -mkdir -p "$HOME/annex/bin/cron/generated/" -# shellcheck disable=2043 -for job in pacheco; do - prefix="$HOME/annex/bin/cron" - sed "s/job-__JOB__/job-$job/" cronjob-with-email.sh | sed "s|.*__JOB__.*|$prefix/$job.sh|" > "$HOME/annex/bin/cron/generated/job-$job.sh" - chmod +x "$HOME/annex/bin/cron/$job.sh" - chmod +x "$HOME/annex/bin/cron/generated/job-$job.sh" -done - -cp ~/dev/libre/package-repository/EuAndreh.key ~/dev/libre/website/public-key.txt - -mkdir -p ~/archive/torrent/ -find ~/dev/libre/website/ -type f -name '*.torrent' -exec cp {} ~/archive/torrent/ \; - -normalize_name() { - if [ -n "$RENAME_TO" ]; then - echo "$RENAME_TO" - elif [[ "$1" = ..* ]]; then - echo "${1:1}" - else - echo "$1" - fi -} - -cp_all() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - mkdir -p "$(dirname "$OUT")" - cp "$f" "$OUT" - done -} - -cp_if_not() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - if [ ! -f "$OUT" ]; then - cp_all "$f" - fi - done -} - -cp_if() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - if [ -f "$OUT" ]; then - rm -f "$OUT" - cp_all "$f" - fi - done -} - -sed_all() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - mkdir -p "$(dirname "$OUT")" - - if [ -n "$ENABLE_CI" ]; then - ENABLE_CI_SCRIPT='s/__ENABLE_CI__ //g' - if [ -n "$ENABLE_AUTOTOOLS" ]; then - TLD_SCRIPT='' - else - TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" - fi - else - ENABLE_CI_SCRIPT='/__ENABLE_CI__ /d' - TLD_SCRIPT="$DEFAULT_TLD_SCRIPT" - fi - - sed "$f" \ - -e "s/__PROJECT_UC__/$PROJECT_UC/g" \ - -e "s/__PROJECT__/$PROJECT/g" \ - -e "s/__MAILING_LIST__/$MAILING_LIST/g" \ - -e "$TLD_SCRIPT" \ - -e "$ENABLE_CI_SCRIPT" \ - -e "$ENABLE_AUTOTOOLS_SCRIPT" \ - > "$OUT" - - if [ -n "$EXECUTABLE" ]; then - chmod +x "$OUT" - fi - done -} - -sed_if_not() { - for f in "$@"; do - OUT="$PPREFIX/$(normalize_name "$f")" - if [ ! -f "$OUT" ]; then - sed_all "$f" - fi - done -} - -ln_env() { - export PROJECT="$1" - export PPREFIX="${PPREFIX_FOR_PROJECT[$PROJECT]:-$HOME/dev/libre/$PROJECT}" - export MAILING_LIST="${ML_FOR_PROJECT[$PROJECT]:-public-inbox}" - export PROJECT_UC="${PROJECT_NAMES[$PROJECT]:-$PROJECT}" - - if [ -f "$PPREFIX/Makefile" ] && [ "$PROJECT" != website ]; then - export ENABLE_CI=1 - else - export ENABLE_CI= - fi - - if [ -n "${GUILE_PROJECTS[$PROJECT]}" ]; then - ENABLE_GUILE=1 - else - ENABLE_GUILE= - fi -} - -ln_init() { - if ! grep -q "$PROJECT" ~/annex/bin/misc/git/mrconfig.ini; then - red "$(printf '%s missing from mrconfig.ini!\n' "$PROJECT")\n" - fi - - if [ ! -d "$PPREFIX" ]; then - git init "$PPREFIX" - fi - cp_if_not description long-description ..gitignore -} - -ln_build_aux() { - cp_all aux/assert-shellcheck.sh \ - aux/tld.txt \ - aux/workflow/assert-todos.sh \ - aux/workflow/assert-changelog.sh \ - aux/workflow/assert-readme.sh \ - aux/workflow/TODOs.sh \ - aux/workflow/style.css \ - aux/workflow/favicon.html \ - aux/workflow/preamble.md \ - aux/workflow/commonmark.sh \ - aux/workflow/dist.sh \ - aux/workflow/sign-tarballs.sh \ - aux/workflow/public.sh \ - aux/workflow/favicon.svg \ - aux/workflow/favicon.png - - cp_if_not TODOs.md - - cp_if \ - aux/assert-perltidy.sh - aux/tests-lib.sh -} - -ln_agpl() { - cp_all COPYING -} - -ln_guix_files() { - cp_all aux/guix/with-container.sh \ - aux/assert-shellcheck.sh - cp_if_not aux/guix/manifest.scm \ - aux/guix/pinned-channels.scm -} - -ln_ci() { - rm -f "$PPREFIX/.git/hooks/pre-push" - if [ -n "$ENABLE_CI" ]; then - EXECUTABLE=1 sed_all aux/ci/git-pre-push.sh - cp_all aux/assert-shellcheck.sh \ - aux/tld.txt \ - aux/ci/ci-build.sh \ - aux/ci/report.sh \ - aux/ci/git-post-receive.sh - ln -s "$PPREFIX/aux/ci/git-pre-push.sh" "$PPREFIX/.git/hooks/pre-push" - else - EXECUTABLE=1 sed_all ..git/hooks/pre-push - fi -} - -ln_simple_makefile() { - sed_if_not Makefile -} - -enforce_uniform_manpages() { - if [ -d "$PPREFIX/doc" ]; then - for f in $(find "$PPREFIX/doc" -type f -name '*.[0-9]'); do - if grep -Eq '^\.SH AUTHORS$' "$f"; then - EXPECTED="$(cat < /dev/null || exit 1 diff --git a/sh/fzf.sh b/sh/fzf.sh deleted file mode 100644 index 529e0ee..0000000 --- a/sh/fzf.sh +++ /dev/null @@ -1,85 +0,0 @@ -#!/bin/sh - -# FIXME: fix "history" commands - -# shellcheck source=/dev/null -. "$(fzf-share)/completion.bash" -# Disable fzf key-bindings -# readline > fzf -# . "$(fzf-share)/key-bindings.bash" - -export FZF_CTRL_T_OPTS=' - --preview "(cat {} || tree -C {}) 2> /dev/null" - --select-1 - --exit-0 -' - -export FZF_ALT_C_OPTS='--preview "tree -C {} | head -200"' - -# FIXME: -# g '^\w.*json_destroy(' -g() { - # shellcheck disable=2086 - fn=$(git grep -n -- "$1" ${2:-} | \ - cut -d: -f -2 | \ - fzf --select-1 \ - --exit-0 \ - --preview "echo {} | \ - cut -d: -f1 | \ - xargs -I% awk -v bounds=25 -v pat=\"$1\" -v n=\$(echo {} | cut -d: -f2) ' - (n - bounds < NR) && (NR < n + bounds) && (NR != n) { print } - NR==n { gsub(pat, \"\033[1;33m&\033[1;000m\"); print } - ' %") - if [ -n "$fn" ]; then - f="$(echo "$fn" | cut -d: -f1)" - n="$(echo "$fn" | cut -d: -f2)" - # shellcheck disable=2068 - history -s g "$@" - history -s vi "+$n" "$f" - vi "+$n" "$f" - fi -} - -f() { - # FIXME: speed - # profile="f-shell-function$(pwd | sed -e 's_/_-_g')" - # file="$(git ls-files | grep ${2:-.} | remembering -p "$profile" -c "fzf --select-1 --exit-0 --preview 'cat {}'")" - # shellcheck disable=2086 - file="$(git ls-files | grep ${2:-.} | fzf --select-1 --exit-0 --preview 'cat {}')" - if [ -n "$file" ]; then - # shellcheck disable=2068 - # history -s f $@ - history -s "$1" "$file" - "$1" "$file" - fi -} - -V_FILES="$(echo ' -~/annex/txt/TODOs.md -~/tmp/scratch.txt -'"$(find ~/annex/txt/*.md -not -name TODOs.md | - sed 's|^/home/andreh|~|' | - LANG=POSIX.UTF-8 sort)"' -~/annex/bin/misc/git/mrconfig.ini -~/dev/libre/package-repository/dependencies.dot -~/dev/others/dinheiros/dinheiros.ledger -~/dev/libre/dotfiles/configuration.nix -' | tr ' ' '\n' | grep .)" - -v() { - f="$(echo "$V_FILES" | fzf --select-1 --exit-0 --query "$1")" - if [ -n "$f" ]; then - history -s vi $f - vi "$HOME/${f#'~/'}" - fi -} - -cn() { - CHOICE="$(git log --oneline | fzf)" - git log --oneline | grep -nF "$CHOICE" | cut -d: -f1 -} - -cm() { - n="$(cn)" - git rev-parse "HEAD~$((n - 1))" -} diff --git a/sh/mr-execute.sh b/sh/mr-execute.sh deleted file mode 100644 index 70479da..0000000 --- a/sh/mr-execute.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh - -cd ~/ || exit 1 - -AUTOJUMP_TXT="$HOME/.local/share/autojump/autojump.txt" -mkdir -p "$(dirname "$AUTOJUMP_TXT")" -touch "$AUTOJUMP_TXT" -mr checkout > /dev/null - -cd - > /dev/null || exit 1 diff --git a/sh/ps1.sh b/sh/ps1.sh deleted file mode 100644 index c0fdd96..0000000 --- a/sh/ps1.sh +++ /dev/null @@ -1,135 +0,0 @@ -#!/bin/sh - -repo_status_git() { - BRANCH_NAME="$(git rev-parse --abbrev-ref HEAD)" - OUT="$(git status --short --branch --porcelain)" - BRANCH_LINE="$(echo "$OUT" | head -n 1)" - DIFF_LINES="$(echo "$OUT" | tail -n +2)" - - if echo "$BRANCH_LINE" | grep -q 'ahead'; then - IS_AHEAD=1 - fi - if echo "$BRANCH_LINE" | grep -q 'behind'; then - IS_BEHIND=1 - fi - - if [ -n "$IS_AHEAD" ] && [ -n "$IS_BEHIND" ]; then - BRANCH_MARKER="^^^ $BRANCH_NAME vvv" - elif [ -n "$IS_AHEAD" ]; then - BRANCH_MARKER="^ $BRANCH_NAME ^" - elif [ -n "$IS_BEHIND" ]; then - BRANCH_MARKER="v $BRANCH_NAME v" - else - BRANCH_MARKER="$BRANCH_NAME" - fi - - if echo "$DIFF_LINES" | grep -q '^[A|D|M| ][M|D| ]'; then - HAS_DIFF=1 - fi - - if echo "$DIFF_LINES" | grep -q '^[?][?]'; then - HAS_UNTRACKED=1 - fi - - if [ -n "$HAS_DIFF" ]; then - COLOR_FN=redb - LINE="{$BRANCH_MARKER}" - elif [ -n "$IS_AHEAD" ] || [ -n "$IS_BEHIND" ]; then - COLOR_FN=bluei - LINE="[$BRANCH_MARKER]" - elif [ -n "$HAS_UNTRACKED" ]; then - COLOR_FN=lightblue - LINE="($BRANCH_MARKER)" - else - COLOR_FN=green - LINE="($BRANCH_MARKER)" - fi - - "$COLOR_FN" "$LINE" - - blacki " - git/$(git rev-parse HEAD)" -} - -repo_status_fossil() { - BRANCH_NAME="$(fossil branch current)" - - if [ -n "$(fossil extras)" ]; then - HAS_UNTRACKED=1 - fi - - BRANCH_MARKER="$BRANCH_NAME" - - if [ -n "${HAS_UNTRACKED:-}" ]; then - COLOR_FN=lightblue - LINE="($BRANCH_MARKER)" - else - COLOR_FN=green - LINE="($BRANCH_MARKER)" - fi - - "$COLOR_FN" "$LINE" - - # echo 'FOSSIL!' - # printf '%s' "$BRANCH_NAME" - blacki " - fossil/$(fossil info | awk '/^checkout:/ { print $2 }')" -} - -repo_status_mercurial() { - BRANCH_NAME="$(hg branch)" -} - -repo_status() { - dir="$(basename "$PWD")" - if [ -d .git ]; then - repo_status_git - elif [ -f "$dir.fossil" ]; then - repo_status_fossil - elif [ -d .hg ]; then - repo_status_mercurial - fi -} - - -error_marker() { - STATUS=$? - if [ "$STATUS" != 0 ]; then - redb " (!! $STATUS !!) " - fi -} - -timestamp() { - blacki '\T' -} - -path() { - yellowb '\w/' -} - -guix_env() { - if [ "$GUIX_ENVIRONMENT" != '' ]; then - printf '\n' - blacki '~> ' - purple 'guix environment ' - printf '(' - blueb "$GUIX_ENVIRONMENT" - printf ')' - fi -} - -in_nix_shell() { - if [ "$IN_NIX_SHELL" != '' ]; then - printf '\n' - blacki '~> ' - purpleb "$IN_NIX_SHELL " - purple 'nix-shell ' - printf '(' - # $name comes from the mkShell declaration - # shellcheck disable=2154 - blueb "$name" - printf ')' - fi -} - -PS1='`error_marker`'$(timestamp)' '$(path)' `repo_status``guix_env``in_nix_shell` -$ ' -export PS1 diff --git a/sh/reload.sh b/sh/reload.sh deleted file mode 100644 index fd191a7..0000000 --- a/sh/reload.sh +++ /dev/null @@ -1,7 +0,0 @@ -#!/bin/sh -# shellcheck disable=SC1090 disable=SC1091 - -. ~/.bashrc -. "$DOTFILES/sh/x.sh" -. "$DOTFILES/sh/mr-execute.sh" -. "$DOTFILES/sh/fake-symlinks.sh" diff --git a/sh/symlinks.sh b/sh/symlinks.sh deleted file mode 100644 index 4f95a64..0000000 --- a/sh/symlinks.sh +++ /dev/null @@ -1,47 +0,0 @@ -#!/bin/sh - -mkdir -p \ - ~/Downloads/Screenshots/ ~/.local/share/common-lisp ~/tmp/ ~/.gnupg \ - ~/.xmonad ~/.config/ranger/ ~/.config/guix \ - ~/.config/khal ~/.config/khard - -if [ ! -e ~/tmp/scratch.txt ]; then - touch ~/tmp/scratch.txt -fi - -ln -fs ~/dev/libre ~/common-lisp && - rm -f ~/dev/libre/libre -ln -fs ~/dev/others/password-store ~/.password-store && - rm -f ~/dev/others/password-store/password-store - -# FIXME: guix shell --check complains about this -ln -fs "$DOTFILES/sh/bashrc.sh" ~/.bashrc -ln -fs "$DOTFILES/sh/bash_profile.sh" ~/.bash_login -ln -fs "$DOTFILES/sh/bash_profile.sh" ~/.bash_profile -ln -fs "$HOME/annex/bin/misc/nurc.sh" ~/.nurc -ln -fs "$DOTFILES/inputrc.conf" ~/.inputrc -ln -fs "$DOTFILES/Xmodmap.conf" ~/.Xmodmap - -ln -fs "$DOTFILES/vcs/hgrc.ini" ~/.hgrc -ln -fs "$DOTFILES/vcs/gitconfig.ini" ~/.gitconfig -ln -fs "$HOME/annex/bin/misc/git/mrconfig.ini" ~/.mrconfig - -ln -fs "$DOTFILES/gpg/gpg.conf" ~/.gnupg/gpg.conf -ln -fs "$DOTFILES/gpg/gpg-agent.conf" ~/.gnupg/gpg-agent.conf -ln -fs "$DOTFILES/gpg/sshcontrol" ~/.gnupg/sshcontrol -ln -fs "$DOTFILES/ssh.conf" ~/.ssh/config - -ln -fs "$DOTFILES/xmonad/xsession.sh" ~/.xsession -ln -fs "$DOTFILES/xmonad/xmonad.hs" ~/.xmonad/xmonad.hs -ln -fs "$DOTFILES/xmonad/xmobar.hs" ~/.xmobarrc - -ln -fs "$DOTFILES/npmrc.sh" ~/.npmrc -ln -fs "$DOTFILES/mailcap.conf" ~/.mailcap -ln -fs "$DOTFILES/tmux.conf" ~/.tmux.conf -ln -fs "$DOTFILES/exrc.conf" ~/.exrc -ln -fs "$DOTFILES/ranger.conf" ~/.config/ranger/rc.conf -ln -fs "$DOTFILES/infokey" ~/.infokey -ln -fs "$DOTFILES/sbclrc.lisp" ~/.sbclrc -ln -fs "$DOTFILES/guix/channels.scm" ~/.config/guix/channels.scm -ln -fs "$HOME/annex/bin/misc/khard.conf" ~/.config/khard/khard.conf -ln -fs "$HOME/annex/bin/misc/khal.conf" ~/.config/khal/config diff --git a/sh/templates/..git/hooks/pre-push b/sh/templates/..git/hooks/pre-push deleted file mode 120000 index 29785d2..0000000 --- a/sh/templates/..git/hooks/pre-push +++ /dev/null @@ -1 +0,0 @@ -../../aux/ci/git-pre-push.sh \ No newline at end of file diff --git a/sh/templates/..gitignore b/sh/templates/..gitignore deleted file mode 100644 index 87174b6..0000000 --- a/sh/templates/..gitignore +++ /dev/null @@ -1 +0,0 @@ -/public/ diff --git a/sh/templates/CHANGELOG.md b/sh/templates/CHANGELOG.md deleted file mode 100644 index 65f247b..0000000 --- a/sh/templates/CHANGELOG.md +++ /dev/null @@ -1,10 +0,0 @@ - - diff --git a/sh/templates/COPYING b/sh/templates/COPYING deleted file mode 100644 index be3f7b2..0000000 --- a/sh/templates/COPYING +++ /dev/null @@ -1,661 +0,0 @@ - GNU AFFERO GENERAL PUBLIC LICENSE - Version 3, 19 November 2007 - - Copyright (C) 2007 Free Software Foundation, Inc. - Everyone is permitted to copy and distribute verbatim copies - of this license document, but changing it is not allowed. - - Preamble - - The GNU Affero General Public License is a free, copyleft license for -software and other kinds of works, specifically designed to ensure -cooperation with the community in the case of network server software. - - The licenses for most software and other practical works are designed -to take away your freedom to share and change the works. By contrast, -our General Public Licenses are intended to guarantee your freedom to -share and change all versions of a program--to make sure it remains free -software for all its users. - - When we speak of free software, we are referring to freedom, not -price. Our General Public Licenses are designed to make sure that you -have the freedom to distribute copies of free software (and charge for -them if you wish), that you receive source code or can get it if you -want it, that you can change the software or use pieces of it in new -free programs, and that you know you can do these things. - - Developers that use our General Public Licenses protect your rights -with two steps: (1) assert copyright on the software, and (2) offer -you this License which gives you legal permission to copy, distribute -and/or modify the software. - - A secondary benefit of defending all users' freedom is that -improvements made in alternate versions of the program, if they -receive widespread use, become available for other developers to -incorporate. Many developers of free software are heartened and -encouraged by the resulting cooperation. However, in the case of -software used on network servers, this result may fail to come about. -The GNU General Public License permits making a modified version and -letting the public access it on a server without ever releasing its -source code to the public. - - The GNU Affero General Public License is designed specifically to -ensure that, in such cases, the modified source code becomes available -to the community. It requires the operator of a network server to -provide the source code of the modified version running there to the -users of that server. Therefore, public use of a modified version, on -a publicly accessible server, gives the public access to the source -code of the modified version. - - An older license, called the Affero General Public License and -published by Affero, was designed to accomplish similar goals. This is -a different license, not a version of the Affero GPL, but Affero has -released a new version of the Affero GPL which permits relicensing under -this license. - - The precise terms and conditions for copying, distribution and -modification follow. - - TERMS AND CONDITIONS - - 0. Definitions. - - "This License" refers to version 3 of the GNU Affero General Public License. - - "Copyright" also means copyright-like laws that apply to other kinds of -works, such as semiconductor masks. - - "The Program" refers to any copyrightable work licensed under this -License. Each licensee is addressed as "you". "Licensees" and -"recipients" may be individuals or organizations. - - To "modify" a work means to copy from or adapt all or part of the work -in a fashion requiring copyright permission, other than the making of an -exact copy. The resulting work is called a "modified version" of the -earlier work or a work "based on" the earlier work. - - A "covered work" means either the unmodified Program or a work based -on the Program. - - To "propagate" a work means to do anything with it that, without -permission, would make you directly or secondarily liable for -infringement under applicable copyright law, except executing it on a -computer or modifying a private copy. Propagation includes copying, -distribution (with or without modification), making available to the -public, and in some countries other activities as well. - - To "convey" a work means any kind of propagation that enables other -parties to make or receive copies. Mere interaction with a user through -a computer network, with no transfer of a copy, is not conveying. - - An interactive user interface displays "Appropriate Legal Notices" -to the extent that it includes a convenient and prominently visible -feature that (1) displays an appropriate copyright notice, and (2) -tells the user that there is no warranty for the work (except to the -extent that warranties are provided), that licensees may convey the -work under this License, and how to view a copy of this License. If -the interface presents a list of user commands or options, such as a -menu, a prominent item in the list meets this criterion. - - 1. Source Code. - - The "source code" for a work means the preferred form of the work -for making modifications to it. "Object code" means any non-source -form of a work. - - A "Standard Interface" means an interface that either is an official -standard defined by a recognized standards body, or, in the case of -interfaces specified for a particular programming language, one that -is widely used among developers working in that language. - - The "System Libraries" of an executable work include anything, other -than the work as a whole, that (a) is included in the normal form of -packaging a Major Component, but which is not part of that Major -Component, and (b) serves only to enable use of the work with that -Major Component, or to implement a Standard Interface for which an -implementation is available to the public in source code form. A -"Major Component", in this context, means a major essential component -(kernel, window system, and so on) of the specific operating system -(if any) on which the executable work runs, or a compiler used to -produce the work, or an object code interpreter used to run it. - - The "Corresponding Source" for a work in object code form means all -the source code needed to generate, install, and (for an executable -work) run the object code and to modify the work, including scripts to -control those activities. However, it does not include the work's -System Libraries, or general-purpose tools or generally available free -programs which are used unmodified in performing those activities but -which are not part of the work. For example, Corresponding Source -includes interface definition files associated with source files for -the work, and the source code for shared libraries and dynamically -linked subprograms that the work is specifically designed to require, -such as by intimate data communication or control flow between those -subprograms and other parts of the work. - - The Corresponding Source need not include anything that users -can regenerate automatically from other parts of the Corresponding -Source. - - The Corresponding Source for a work in source code form is that -same work. - - 2. Basic Permissions. - - All rights granted under this License are granted for the term of -copyright on the Program, and are irrevocable provided the stated -conditions are met. This License explicitly affirms your unlimited -permission to run the unmodified Program. The output from running a -covered work is covered by this License only if the output, given its -content, constitutes a covered work. This License acknowledges your -rights of fair use or other equivalent, as provided by copyright law. - - You may make, run and propagate covered works that you do not -convey, without conditions so long as your license otherwise remains -in force. You may convey covered works to others for the sole purpose -of having them make modifications exclusively for you, or provide you -with facilities for running those works, provided that you comply with -the terms of this License in conveying all material for which you do -not control copyright. Those thus making or running the covered works -for you must do so exclusively on your behalf, under your direction -and control, on terms that prohibit them from making any copies of -your copyrighted material outside their relationship with you. - - Conveying under any other circumstances is permitted solely under -the conditions stated below. Sublicensing is not allowed; section 10 -makes it unnecessary. - - 3. Protecting Users' Legal Rights From Anti-Circumvention Law. - - No covered work shall be deemed part of an effective technological -measure under any applicable law fulfilling obligations under article -11 of the WIPO copyright treaty adopted on 20 December 1996, or -similar laws prohibiting or restricting circumvention of such -measures. - - When you convey a covered work, you waive any legal power to forbid -circumvention of technological measures to the extent such circumvention -is effected by exercising rights under this License with respect to -the covered work, and you disclaim any intention to limit operation or -modification of the work as a means of enforcing, against the work's -users, your or third parties' legal rights to forbid circumvention of -technological measures. - - 4. Conveying Verbatim Copies. - - You may convey verbatim copies of the Program's source code as you -receive it, in any medium, provided that you conspicuously and -appropriately publish on each copy an appropriate copyright notice; -keep intact all notices stating that this License and any -non-permissive terms added in accord with section 7 apply to the code; -keep intact all notices of the absence of any warranty; and give all -recipients a copy of this License along with the Program. - - You may charge any price or no price for each copy that you convey, -and you may offer support or warranty protection for a fee. - - 5. Conveying Modified Source Versions. - - You may convey a work based on the Program, or the modifications to -produce it from the Program, in the form of source code under the -terms of section 4, provided that you also meet all of these conditions: - - a) The work must carry prominent notices stating that you modified - it, and giving a relevant date. - - b) The work must carry prominent notices stating that it is - released under this License and any conditions added under section - 7. This requirement modifies the requirement in section 4 to - "keep intact all notices". - - c) You must license the entire work, as a whole, under this - License to anyone who comes into possession of a copy. This - License will therefore apply, along with any applicable section 7 - additional terms, to the whole of the work, and all its parts, - regardless of how they are packaged. This License gives no - permission to license the work in any other way, but it does not - invalidate such permission if you have separately received it. - - d) If the work has interactive user interfaces, each must display - Appropriate Legal Notices; however, if the Program has interactive - interfaces that do not display Appropriate Legal Notices, your - work need not make them do so. - - A compilation of a covered work with other separate and independent -works, which are not by their nature extensions of the covered work, -and which are not combined with it such as to form a larger program, -in or on a volume of a storage or distribution medium, is called an -"aggregate" if the compilation and its resulting copyright are not -used to limit the access or legal rights of the compilation's users -beyond what the individual works permit. Inclusion of a covered work -in an aggregate does not cause this License to apply to the other -parts of the aggregate. - - 6. Conveying Non-Source Forms. - - You may convey a covered work in object code form under the terms -of sections 4 and 5, provided that you also convey the -machine-readable Corresponding Source under the terms of this License, -in one of these ways: - - a) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by the - Corresponding Source fixed on a durable physical medium - customarily used for software interchange. - - b) Convey the object code in, or embodied in, a physical product - (including a physical distribution medium), accompanied by a - written offer, valid for at least three years and valid for as - long as you offer spare parts or customer support for that product - model, to give anyone who possesses the object code either (1) a - copy of the Corresponding Source for all the software in the - product that is covered by this License, on a durable physical - medium customarily used for software interchange, for a price no - more than your reasonable cost of physically performing this - conveying of source, or (2) access to copy the - Corresponding Source from a network server at no charge. - - c) Convey individual copies of the object code with a copy of the - written offer to provide the Corresponding Source. This - alternative is allowed only occasionally and noncommercially, and - only if you received the object code with such an offer, in accord - with subsection 6b. - - d) Convey the object code by offering access from a designated - place (gratis or for a charge), and offer equivalent access to the - Corresponding Source in the same way through the same place at no - further charge. You need not require recipients to copy the - Corresponding Source along with the object code. If the place to - copy the object code is a network server, the Corresponding Source - may be on a different server (operated by you or a third party) - that supports equivalent copying facilities, provided you maintain - clear directions next to the object code saying where to find the - Corresponding Source. Regardless of what server hosts the - Corresponding Source, you remain obligated to ensure that it is - available for as long as needed to satisfy these requirements. - - e) Convey the object code using peer-to-peer transmission, provided - you inform other peers where the object code and Corresponding - Source of the work are being offered to the general public at no - charge under subsection 6d. - - A separable portion of the object code, whose source code is excluded -from the Corresponding Source as a System Library, need not be -included in conveying the object code work. - - A "User Product" is either (1) a "consumer product", which means any -tangible personal property which is normally used for personal, family, -or household purposes, or (2) anything designed or sold for incorporation -into a dwelling. In determining whether a product is a consumer product, -doubtful cases shall be resolved in favor of coverage. For a particular -product received by a particular user, "normally used" refers to a -typical or common use of that class of product, regardless of the status -of the particular user or of the way in which the particular user -actually uses, or expects or is expected to use, the product. A product -is a consumer product regardless of whether the product has substantial -commercial, industrial or non-consumer uses, unless such uses represent -the only significant mode of use of the product. - - "Installation Information" for a User Product means any methods, -procedures, authorization keys, or other information required to install -and execute modified versions of a covered work in that User Product from -a modified version of its Corresponding Source. The information must -suffice to ensure that the continued functioning of the modified object -code is in no case prevented or interfered with solely because -modification has been made. - - If you convey an object code work under this section in, or with, or -specifically for use in, a User Product, and the conveying occurs as -part of a transaction in which the right of possession and use of the -User Product is transferred to the recipient in perpetuity or for a -fixed term (regardless of how the transaction is characterized), the -Corresponding Source conveyed under this section must be accompanied -by the Installation Information. But this requirement does not apply -if neither you nor any third party retains the ability to install -modified object code on the User Product (for example, the work has -been installed in ROM). - - The requirement to provide Installation Information does not include a -requirement to continue to provide support service, warranty, or updates -for a work that has been modified or installed by the recipient, or for -the User Product in which it has been modified or installed. Access to a -network may be denied when the modification itself materially and -adversely affects the operation of the network or violates the rules and -protocols for communication across the network. - - Corresponding Source conveyed, and Installation Information provided, -in accord with this section must be in a format that is publicly -documented (and with an implementation available to the public in -source code form), and must require no special password or key for -unpacking, reading or copying. - - 7. Additional Terms. - - "Additional permissions" are terms that supplement the terms of this -License by making exceptions from one or more of its conditions. -Additional permissions that are applicable to the entire Program shall -be treated as though they were included in this License, to the extent -that they are valid under applicable law. If additional permissions -apply only to part of the Program, that part may be used separately -under those permissions, but the entire Program remains governed by -this License without regard to the additional permissions. - - When you convey a copy of a covered work, you may at your option -remove any additional permissions from that copy, or from any part of -it. (Additional permissions may be written to require their own -removal in certain cases when you modify the work.) You may place -additional permissions on material, added by you to a covered work, -for which you have or can give appropriate copyright permission. - - Notwithstanding any other provision of this License, for material you -add to a covered work, you may (if authorized by the copyright holders of -that material) supplement the terms of this License with terms: - - a) Disclaiming warranty or limiting liability differently from the - terms of sections 15 and 16 of this License; or - - b) Requiring preservation of specified reasonable legal notices or - author attributions in that material or in the Appropriate Legal - Notices displayed by works containing it; or - - c) Prohibiting misrepresentation of the origin of that material, or - requiring that modified versions of such material be marked in - reasonable ways as different from the original version; or - - d) Limiting the use for publicity purposes of names of licensors or - authors of the material; or - - e) Declining to grant rights under trademark law for use of some - trade names, trademarks, or service marks; or - - f) Requiring indemnification of licensors and authors of that - material by anyone who conveys the material (or modified versions of - it) with contractual assumptions of liability to the recipient, for - any liability that these contractual assumptions directly impose on - those licensors and authors. - - All other non-permissive additional terms are considered "further -restrictions" within the meaning of section 10. If the Program as you -received it, or any part of it, contains a notice stating that it is -governed by this License along with a term that is a further -restriction, you may remove that term. If a license document contains -a further restriction but permits relicensing or conveying under this -License, you may add to a covered work material governed by the terms -of that license document, provided that the further restriction does -not survive such relicensing or conveying. - - If you add terms to a covered work in accord with this section, you -must place, in the relevant source files, a statement of the -additional terms that apply to those files, or a notice indicating -where to find the applicable terms. - - Additional terms, permissive or non-permissive, may be stated in the -form of a separately written license, or stated as exceptions; -the above requirements apply either way. - - 8. Termination. - - You may not propagate or modify a covered work except as expressly -provided under this License. Any attempt otherwise to propagate or -modify it is void, and will automatically terminate your rights under -this License (including any patent licenses granted under the third -paragraph of section 11). - - However, if you cease all violation of this License, then your -license from a particular copyright holder is reinstated (a) -provisionally, unless and until the copyright holder explicitly and -finally terminates your license, and (b) permanently, if the copyright -holder fails to notify you of the violation by some reasonable means -prior to 60 days after the cessation. - - Moreover, your license from a particular copyright holder is -reinstated permanently if the copyright holder notifies you of the -violation by some reasonable means, this is the first time you have -received notice of violation of this License (for any work) from that -copyright holder, and you cure the violation prior to 30 days after -your receipt of the notice. - - Termination of your rights under this section does not terminate the -licenses of parties who have received copies or rights from you under -this License. If your rights have been terminated and not permanently -reinstated, you do not qualify to receive new licenses for the same -material under section 10. - - 9. Acceptance Not Required for Having Copies. - - You are not required to accept this License in order to receive or -run a copy of the Program. Ancillary propagation of a covered work -occurring solely as a consequence of using peer-to-peer transmission -to receive a copy likewise does not require acceptance. However, -nothing other than this License grants you permission to propagate or -modify any covered work. These actions infringe copyright if you do -not accept this License. Therefore, by modifying or propagating a -covered work, you indicate your acceptance of this License to do so. - - 10. Automatic Licensing of Downstream Recipients. - - Each time you convey a covered work, the recipient automatically -receives a license from the original licensors, to run, modify and -propagate that work, subject to this License. You are not responsible -for enforcing compliance by third parties with this License. - - An "entity transaction" is a transaction transferring control of an -organization, or substantially all assets of one, or subdividing an -organization, or merging organizations. If propagation of a covered -work results from an entity transaction, each party to that -transaction who receives a copy of the work also receives whatever -licenses to the work the party's predecessor in interest had or could -give under the previous paragraph, plus a right to possession of the -Corresponding Source of the work from the predecessor in interest, if -the predecessor has it or can get it with reasonable efforts. - - You may not impose any further restrictions on the exercise of the -rights granted or affirmed under this License. For example, you may -not impose a license fee, royalty, or other charge for exercise of -rights granted under this License, and you may not initiate litigation -(including a cross-claim or counterclaim in a lawsuit) alleging that -any patent claim is infringed by making, using, selling, offering for -sale, or importing the Program or any portion of it. - - 11. Patents. - - A "contributor" is a copyright holder who authorizes use under this -License of the Program or a work on which the Program is based. The -work thus licensed is called the contributor's "contributor version". - - A contributor's "essential patent claims" are all patent claims -owned or controlled by the contributor, whether already acquired or -hereafter acquired, that would be infringed by some manner, permitted -by this License, of making, using, or selling its contributor version, -but do not include claims that would be infringed only as a -consequence of further modification of the contributor version. For -purposes of this definition, "control" includes the right to grant -patent sublicenses in a manner consistent with the requirements of -this License. - - Each contributor grants you a non-exclusive, worldwide, royalty-free -patent license under the contributor's essential patent claims, to -make, use, sell, offer for sale, import and otherwise run, modify and -propagate the contents of its contributor version. - - In the following three paragraphs, a "patent license" is any express -agreement or commitment, however denominated, not to enforce a patent -(such as an express permission to practice a patent or covenant not to -sue for patent infringement). To "grant" such a patent license to a -party means to make such an agreement or commitment not to enforce a -patent against the party. - - If you convey a covered work, knowingly relying on a patent license, -and the Corresponding Source of the work is not available for anyone -to copy, free of charge and under the terms of this License, through a -publicly available network server or other readily accessible means, -then you must either (1) cause the Corresponding Source to be so -available, or (2) arrange to deprive yourself of the benefit of the -patent license for this particular work, or (3) arrange, in a manner -consistent with the requirements of this License, to extend the patent -license to downstream recipients. "Knowingly relying" means you have -actual knowledge that, but for the patent license, your conveying the -covered work in a country, or your recipient's use of the covered work -in a country, would infringe one or more identifiable patents in that -country that you have reason to believe are valid. - - If, pursuant to or in connection with a single transaction or -arrangement, you convey, or propagate by procuring conveyance of, a -covered work, and grant a patent license to some of the parties -receiving the covered work authorizing them to use, propagate, modify -or convey a specific copy of the covered work, then the patent license -you grant is automatically extended to all recipients of the covered -work and works based on it. - - A patent license is "discriminatory" if it does not include within -the scope of its coverage, prohibits the exercise of, or is -conditioned on the non-exercise of one or more of the rights that are -specifically granted under this License. You may not convey a covered -work if you are a party to an arrangement with a third party that is -in the business of distributing software, under which you make payment -to the third party based on the extent of your activity of conveying -the work, and under which the third party grants, to any of the -parties who would receive the covered work from you, a discriminatory -patent license (a) in connection with copies of the covered work -conveyed by you (or copies made from those copies), or (b) primarily -for and in connection with specific products or compilations that -contain the covered work, unless you entered into that arrangement, -or that patent license was granted, prior to 28 March 2007. - - Nothing in this License shall be construed as excluding or limiting -any implied license or other defenses to infringement that may -otherwise be available to you under applicable patent law. - - 12. No Surrender of Others' Freedom. - - If conditions are imposed on you (whether by court order, agreement or -otherwise) that contradict the conditions of this License, they do not -excuse you from the conditions of this License. If you cannot convey a -covered work so as to satisfy simultaneously your obligations under this -License and any other pertinent obligations, then as a consequence you may -not convey it at all. For example, if you agree to terms that obligate you -to collect a royalty for further conveying from those to whom you convey -the Program, the only way you could satisfy both those terms and this -License would be to refrain entirely from conveying the Program. - - 13. Remote Network Interaction; Use with the GNU General Public License. - - Notwithstanding any other provision of this License, if you modify the -Program, your modified version must prominently offer all users -interacting with it remotely through a computer network (if your version -supports such interaction) an opportunity to receive the Corresponding -Source of your version by providing access to the Corresponding Source -from a network server at no charge, through some standard or customary -means of facilitating copying of software. This Corresponding Source -shall include the Corresponding Source for any work covered by version 3 -of the GNU General Public License that is incorporated pursuant to the -following paragraph. - - Notwithstanding any other provision of this License, you have -permission to link or combine any covered work with a work licensed -under version 3 of the GNU General Public License into a single -combined work, and to convey the resulting work. The terms of this -License will continue to apply to the part which is the covered work, -but the work with which it is combined will remain governed by version -3 of the GNU General Public License. - - 14. Revised Versions of this License. - - The Free Software Foundation may publish revised and/or new versions of -the GNU Affero General Public License from time to time. Such new versions -will be similar in spirit to the present version, but may differ in detail to -address new problems or concerns. - - Each version is given a distinguishing version number. If the -Program specifies that a certain numbered version of the GNU Affero General -Public License "or any later version" applies to it, you have the -option of following the terms and conditions either of that numbered -version or of any later version published by the Free Software -Foundation. If the Program does not specify a version number of the -GNU Affero General Public License, you may choose any version ever published -by the Free Software Foundation. - - If the Program specifies that a proxy can decide which future -versions of the GNU Affero General Public License can be used, that proxy's -public statement of acceptance of a version permanently authorizes you -to choose that version for the Program. - - Later license versions may give you additional or different -permissions. However, no additional obligations are imposed on any -author or copyright holder as a result of your choosing to follow a -later version. - - 15. Disclaimer of Warranty. - - THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY -APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT -HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY -OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, -THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR -PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM -IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF -ALL NECESSARY SERVICING, REPAIR OR CORRECTION. - - 16. Limitation of Liability. - - IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING -WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS -THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY -GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE -USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF -DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD -PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), -EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF -SUCH DAMAGES. - - 17. Interpretation of Sections 15 and 16. - - If the disclaimer of warranty and limitation of liability provided -above cannot be given local legal effect according to their terms, -reviewing courts shall apply local law that most closely approximates -an absolute waiver of all civil liability in connection with the -Program, unless a warranty or assumption of liability accompanies a -copy of the Program in return for a fee. - - END OF TERMS AND CONDITIONS - - How to Apply These Terms to Your New Programs - - If you develop a new program, and you want it to be of the greatest -possible use to the public, the best way to achieve this is to make it -free software which everyone can redistribute and change under these terms. - - To do so, attach the following notices to the program. It is safest -to attach them to the start of each source file to most effectively -state the exclusion of warranty; and each file should have at least -the "copyright" line and a pointer to where the full notice is found. - - - Copyright (C) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU Affero General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - This program is distributed in the hope that it will be useful, - but WITHOUT ANY WARRANTY; without even the implied warranty of - MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - GNU Affero General Public License for more details. - - You should have received a copy of the GNU Affero General Public License - along with this program. If not, see . - -Also add information on how to contact you by electronic and paper mail. - - If your software can interact with users remotely through a computer -network, you should also make sure that it provides a way for users to -get its source. For example, if your program is a web application, its -interface could display a "Source" link that leads users to an archive -of the code. There are many ways you could offer source, and different -solutions will be better for different programs; see section 13 for the -specific requirements. - - You should also get your employer (if you work as a programmer) or school, -if any, to sign a "copyright disclaimer" for the program, if necessary. -For more information on this, and how to apply and follow the GNU AGPL, see -. diff --git a/sh/templates/Makefile b/sh/templates/Makefile deleted file mode 100644 index 5e04401..0000000 --- a/sh/templates/Makefile +++ /dev/null @@ -1,100 +0,0 @@ -.POSIX: -CC = c99 -CFLAGS = -std=c99 -Wall -Wextra -Wpedantic -fPIC -g -O3 -LDFLAGS = -Wl,-rpath,$$LIBRARY_PATH -LDLIBS = -PREFIX = /usr/local -MANPREFIX = $(PREFIX)/share/man -DATE = 1970-01-01 -MAJOR = 0 -MINOR = 1 -PATCH = 0 -VERSION = $(MAJOR).$(MINOR).$(PATCH) -NAME = __PROJECT__ -MAILING_LIST = __MAILING_LIST__ - -headers = \ - src/f.h - -sources = \ - src/f.c - -binaries = \ - f - -manpages = \ - doc/f.1 - - -objects = $(sources:.c=.o) - -.SUFFIXES: .c .o - -.c.o: - $(CC) -c $(CFLAGS) $(LDFLAGS) -o $@ $< - -libname = lib$(NAME) -liba = $(libname).a -libso = $(libname).so -libso-real = $(libso).$(MAJOR).$(MINOR).$(PATCH) -soaliases = $(libso).$(MAJOR).$(MINOR) $(libso).$(MAJOR) $(libso) - -all: $(liba) $(libso-real) run-tests - -$(liba): $(headers) $(objects) - ar rcsv $@-t $(objects) - ranlib $@-t - mv $@-t $@ - -$(libso-real): $(headers) $(objects) - $(CC) $(CFLAGS) $(LDFLAGS) -shared -Wl,-soname,$(libso).$(MAJOR) -o $@ $(objects) - -$(soaliases): $(libso-real) - ln -sf $? $@ - -run-tests: $(headers) $(sources) tests/tests.c - $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -o $@ tests/tests.c $(sources) $(LDLIBS) - -fallible-tests: $(headers) $(sources) tests/tests.c - $(CC) $(CFLAGS) $(LDFLAGS) -DTEST -DFALLIBLE -o $@ tests/tests.c $(sources) $(LDLIBS) -lfallible - -check: run-tests - ./run-tests - -dev-check: all check fallible-tests - valgrind `fallible-check --valgrind-flags` ./run-tests - fallible-check ./fallible-tests - sh aux/assert-shellcheck.sh - sh aux/workflow/assert-todos.sh - sh aux/workflow/assert-changelog.sh $(NAME) - -do_subst = sed \ - -e 's:[@]VERSION[@]:$(VERSION):g' \ - -e 's:[@]DATE[@]:$(DATE):g' - -install: all $(soaliases) - for h in $(headers); do install -m 644 -D $$h $(DESTDIR)$(PREFIX)/include/`basename $$h`; done - for f in $(liba) $(libso-real); do install -m 755 -D $$f $(DESTDIR)$(PREFIX)/lib/$$f; done - for a in $(soaliases); do mv $$a $(DESTDIR)$(PREFIX)/lib/; done - for b in $(binaries); do install -m 755 -D $$b $(DESTDIR)$(PREFIX)/bin/$$b; done - for m in $(manpages); do \ - n=$${m##*.}; \ - mkdir -p $(DESTDIR)$(MANPREFIX)/man$$n; \ - $(do_subst) < $$m | gzip > $(DESTDIR)$(MANPREFIX)/man$$n/`basename $$m`.gz; \ - done - -uninstall: - for h in $(headers); do rm -f $(DESTDIR)$(PREFIX)/include/`basename $$h`; done - for l in $(liba) $(libso-real) $(soaliases); do rm -f $(DESTDIR)$(PREFIX)/lib/$$l; done - for m in $(manpages); do rm -f $(DESTDIR)$(MANPREFIX)/man$${m##*.}/`basename $$m`.gz; done - -clean: - rm -rf public/ $(objects) $(liba) $(libso-real) $(soaliases) run-tests fallible* vgcore* - -dist: clean public dev-check - sh aux/workflow/dist.sh $(DATE) $(VERSION) $(NAME) - -public: README.md TODOs.md CHANGELOG.md - sh aux/workflow/public.sh __PROJECT_UC__ $(NAME) $(MAILING_LIST) - -.PHONY: all clean check dev-check dist install uninstall diff --git a/sh/templates/TODOs.md b/sh/templates/TODOs.md deleted file mode 100644 index 6a96f29..0000000 --- a/sh/templates/TODOs.md +++ /dev/null @@ -1,16 +0,0 @@ -# Tasks - - -# Bugs - - -# Improvements - - -# Questions - - -# Resources - - -# Scratch diff --git a/sh/templates/_plugins/linter.rb b/sh/templates/_plugins/linter.rb deleted file mode 100644 index d5cca56..0000000 --- a/sh/templates/_plugins/linter.rb +++ /dev/null @@ -1,55 +0,0 @@ -require 'i18n' - -module Jekyll - class Linter < Generator - safe true - - def slugify(s) - I18n.available_locales = [:pt_BR] - I18n.locale = :pt_BR - I18n.transliterate(s) - .gsub(/[\W]+/, ' ') - .strip - .gsub(/\s\s+/, '-') - .downcase - .gsub(' ', '-') - .gsub('_', '-') - end - - def assert_field(document, field) - f = document.data[field] - raise "Undefined '#{field}' for #{document.path}" unless f - f - end - - def assert_frontmatter_fields(document) - title = assert_field document, 'title' - layout = assert_field document, 'layout' - date = document.date.strftime('%Y-%m-%d') unless layout == 'page' - slug = assert_field document, 'slug' - - if 'post' != layout - raise "Layout mismatch: expected 'post', got '#{layout}' for #{document.path}" - end - - unless layout == 'page' then - path = "_posts/#{date}-#{slug}.md" - unless path == document.relative_path then - raise "date/filename mismatch:\ndate+slug: #{path}\nfilename: #{document.relative_path}" - end - end - - if slugify(title) != slug then - puts 'WARNING!' - puts "Filename isn't a slug of the title for '#{document.path}':\nslug: '#{slug}'\ntitle: '#{slugify(title)}'" - puts "Fix with:\n mv _posts/#{date}-#{slug}.md _posts/#{date}-#{slugify(title)}.md" - end - end - - def generate(site) - site.collections['posts'].docs.each do |document| - assert_frontmatter_fields(document) - end - end - end -end diff --git a/sh/templates/aux/assert-perltidy.sh b/sh/templates/aux/assert-perltidy.sh deleted file mode 100755 index e69de29..0000000 diff --git a/sh/templates/aux/assert-shellcheck.sh b/sh/templates/aux/assert-shellcheck.sh deleted file mode 100755 index cc01f3a..0000000 --- a/sh/templates/aux/assert-shellcheck.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh -set -eux - -git ls-files | \ - xargs awk 'FNR==1 && /^#!\/bin\/sh$/ { print FILENAME }' | \ - xargs shellcheck diff --git a/sh/templates/aux/ci/ci-build.sh b/sh/templates/aux/ci/ci-build.sh deleted file mode 100755 index b6769a9..0000000 --- a/sh/templates/aux/ci/ci-build.sh +++ /dev/null @@ -1,52 +0,0 @@ -#!/bin/sh -set -eux - -PACKAGE="$1" -LOGS_DIR="$2" -read -r _ SHA _ # oldrev newrev refname -FILENAME="$(date -Is)-$SHA.log" -LOGFILE="$LOGS_DIR/$FILENAME" - -{ - echo "Starting CI job at: $(date -Is)" - - finish() { - STATUS="$?" - printf "\n\n>>> exit status was %s\n" "$STATUS" - echo "Finishing CI job at: $(date -Is)" - cd - - NOTE=$(cat <>>\n>>> CI logs added as Git note.\n>>>\n>>> Run status was %s" "$STATUS" - } - trap finish EXIT - - unset GIT_DIR - REMOTE="$PWD" - cd "$(mktemp -d)" - git clone "$REMOTE" . - git config --global user.email git@euandre.org - git config --global user.name 'EuAndreh CI' - git fetch origin refs/notes/*:refs/notes/* - git annex get ||: - - if [ -f aux/guix/with-container.sh ]; then - RUNNER='./aux/guix/with-container.sh' - else - RUNNER='sh -c' - fi - - $RUNNER 'make clean public dev-check' -} 2>&1 | tee "$LOGFILE" diff --git a/sh/templates/aux/ci/git-post-receive.sh b/sh/templates/aux/ci/git-post-receive.sh deleted file mode 100755 index ee8075f..0000000 --- a/sh/templates/aux/ci/git-post-receive.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -for n in $(seq 0 $((GIT_PUSH_OPTION_COUNT - 1))); do - opt="$(eval "echo \$GIT_PUSH_OPTION_$n")" - if [ "$opt" = skip-ci ] || [ "$opt" = ci-skip ]; then - printf "\n'%s' option detected, not running ci-build.sh\n\n" "$opt" - exit 0 - fi -done - -PACKAGE="$(basename "$PWD" | cut -d. -f1)" # remove .git suffix -LOGS_DIR="/opt/ci/$PACKAGE/logs" -"/opt/ci/$PACKAGE/ci-build.sh" "$PACKAGE" "$LOGS_DIR" diff --git a/sh/templates/aux/ci/git-pre-push.sh b/sh/templates/aux/ci/git-pre-push.sh deleted file mode 100644 index 0580c87..0000000 --- a/sh/templates/aux/ci/git-pre-push.sh +++ /dev/null @@ -1,21 +0,0 @@ -#!/bin/sh -set -eux - -TLD="$(cat aux/tld.txt)" - -PACKAGE="$(basename "$PWD")" -__ENABLE_CI__ LOGS_DIR="/opt/ci/$PACKAGE/logs" -REMOTE_GIT_DIR="/srv/git/$PACKAGE.git" - -DESCRIPTION="$(mktemp)" -if [ -f description ] -then - cp description "$DESCRIPTION" -else - git config euandreh.description > "$DESCRIPTION" -fi - -scp "$DESCRIPTION" "$TLD:$REMOTE_GIT_DIR/description" -__ENABLE_CI__ ssh "$TLD" mkdir -p "$LOGS_DIR" -__ENABLE_CI__ scp aux/ci/ci-build.sh "$TLD:$(dirname "$LOGS_DIR")/ci-build.sh" -__ENABLE_CI__ scp aux/ci/git-post-receive.sh "$TLD:$REMOTE_GIT_DIR/hooks/post-receive" diff --git a/sh/templates/aux/ci/report.sh b/sh/templates/aux/ci/report.sh deleted file mode 100755 index 65d3335..0000000 --- a/sh/templates/aux/ci/report.sh +++ /dev/null @@ -1,70 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT_UC="$1" - -PASS='✅' -FAIL='❌' - -mkdir -p public/ci-logs public/ci-data - -OUT="$(mktemp)" -chmod 644 "$OUT" - -git fetch origin refs/notes/*:refs/notes/* ||: - -for c in $(git notes list | cut -d\ -f2); do - DATA="$(git notes --ref=refs/notes/ci-data show "$c")" - FILENAME="$(echo "$DATA" | cut -d\ -f2)" - echo "$DATA" > "public/ci-data/$FILENAME" - git notes --ref=refs/notes/ci-logs show "$c" > "public/ci-logs/$FILENAME" -done - -cat <> "$OUT" - - - - - - - - - - -

    - CI logs for $PROJECT_UC -

    -
    - - -EOF - -mv "$OUT" public/ci.html diff --git a/sh/templates/aux/guix/manifest.scm b/sh/templates/aux/guix/manifest.scm deleted file mode 100644 index a689235..0000000 --- a/sh/templates/aux/guix/manifest.scm +++ /dev/null @@ -1,17 +0,0 @@ -(specifications->manifest - (map symbol->string - '(bash - coreutils - findutils - diffutils - grep - sed - git - tar - gzip - gawk - make - perl - shellcheck - groff - pandoc))) diff --git a/sh/templates/aux/guix/pinned-channels.scm b/sh/templates/aux/guix/pinned-channels.scm deleted file mode 100644 index 504406f..0000000 --- a/sh/templates/aux/guix/pinned-channels.scm +++ /dev/null @@ -1,11 +0,0 @@ -(cons* - (channel - (name 'xyz-euandreh) - (url "git://euandreh.xyz/package-repository") - (branch "main") - (introduction - (make-channel-introduction - "d749e053e6db365069cb9b2ef47a78b06f9e7361" - (openpgp-fingerprint - "5BDA E9B8 B2F6 C6BC BB0D 6CE5 81F9 0EC3 CD35 6060")))) - %default-channels) diff --git a/sh/templates/aux/guix/with-container.sh b/sh/templates/aux/guix/with-container.sh deleted file mode 100755 index b521c82..0000000 --- a/sh/templates/aux/guix/with-container.sh +++ /dev/null @@ -1,13 +0,0 @@ -#!/bin/sh -set -eux - -if [ -z "${1:-}" ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm -elif [ "$1" = '-p' ]; then - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C -else - guix time-machine --fallback -C aux/guix/pinned-channels.scm -- \ - environment --fallback -m aux/guix/manifest.scm --pure -C -- sh -c "$@" -fi diff --git a/sh/templates/aux/tests-lib.sh b/sh/templates/aux/tests-lib.sh deleted file mode 100755 index e075974..0000000 --- a/sh/templates/aux/tests-lib.sh +++ /dev/null @@ -1,93 +0,0 @@ -#!/bin/sh - -OUT= -ERR= -STATUS= - -assert_status() { - if [ "$STATUS" != "$1" ]; then - printf '\nERR: Bad status.\n\nexpected: %s\ngot: %s\n' \ - "$1" "$STATUS" >&2 - exit 1 - fi -} - -assert_usage() { - if ! grep -Fq 'Usage' "$1"; then - echo 'Expected to find "Usage" text, it was missing:' >&2 - cat "$1" >&2 - exit 1 - fi -} - -assert_empty_stream() { - if [ -s "$2" ]; then - printf '\nERR: Expected %s (%s) to be empty, but has content:\n%s\n' \ - "$1" "$2" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_empty_stdout() { - assert_empty_stream STDOUT "$OUT" -} - -assert_empty_stderr() { - assert_empty_stream STDERR "$ERR" -} - -assert_stream() { - if [ "$(cat "$2")" != "$3" ]; then - printf '\nERR: Bad %s (%s)\n\nexpected: %s\ngot: %s\n' \ - "$1" "$2" "$3" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_stdout() { - assert_stream STDOUT "$OUT" "$1" -} - -assert_stderr() { - assert_stream STDERR "$ERR" "$1" -} - -assert_grep_stream() { - if ! grep -qE "$3" "$2"; then - printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \ - "$1" "$2" "$3" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_grep_stdout() { - assert_grep_stream STDOUT "$OUT" "$1" -} - -assert_grep_stderr() { - assert_grep_stream STDERR "$ERR" "$1" -} - -assert_fgrep_stream() { - if ! grep -Fq -- "$3" "$2"; then - printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \ - "$1" "$2" "$3" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_fgrep_stdout() { - assert_fgrep_stream STDOUT "$OUT" "$1" -} - -assert_fgrep_stderr() { - assert_fgrep_stream STDERR "$ERR" "$1" -} - -testing() { - printf 'testing: %s...' "$1" >&2 -} - -test_ok() { - printf ' OK.\n' >&2 -} diff --git a/sh/templates/aux/tld.txt b/sh/templates/aux/tld.txt deleted file mode 100644 index 0cb8b8b..0000000 --- a/sh/templates/aux/tld.txt +++ /dev/null @@ -1 +0,0 @@ -euandreh.xyz diff --git a/sh/templates/aux/utils.sh b/sh/templates/aux/utils.sh deleted file mode 100755 index 8d93fb5..0000000 --- a/sh/templates/aux/utils.sh +++ /dev/null @@ -1,9 +0,0 @@ -#!/bin/sh - -uuid() { - # Taken from: - # https://serverfault.com/a/799198 - od -xN20 /dev/urandom | \ - head -1 | \ - awk '{OFS="-"; print $2$3,$4,$5,$6,$7$8$9}' -} diff --git a/sh/templates/aux/workflow/TODOs.sh b/sh/templates/aux/workflow/TODOs.sh deleted file mode 100755 index 80059ee..0000000 --- a/sh/templates/aux/workflow/TODOs.sh +++ /dev/null @@ -1,35 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -PROJECT="$2" -MAILING_LIST="$3" -TLD="$(cat aux/tld.txt)" - -TODOS_REGEX='s/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE) (.*) \{#(.*?)\}$/## \1<\/span> \2<\/a>\n#\3<\/span>\n/' - -TAGS_REGEX='s/tag:([\w-]+)/\1<\/span>/g' - -sed -e "s:@PROJECT_UC@:$PROJECT_UC:g" \ - -e "s:@PROJECT@:$PROJECT:g" \ - -e "s:@MAILING_LIST@:$MAILING_LIST:g" \ - -e "s:@TLD@:$TLD:g" \ - < aux/workflow/preamble.md | \ - printf \ - '%s\n\n%s' \ - "$(cat -)" \ - "$(perl -pe "$TODOS_REGEX" TODOs.md | perl -pe "$TAGS_REGEX")" | \ - pandoc \ - --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - TODOs" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - -H aux/workflow/favicon.html \ - -H aux/workflow/style.css \ - > public/TODOs.html diff --git a/sh/templates/aux/workflow/assert-changelog.sh b/sh/templates/aux/workflow/assert-changelog.sh deleted file mode 100755 index 8e81f1f..0000000 --- a/sh/templates/aux/workflow/assert-changelog.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT="$1" - -for VVERSION in $(git tag); do - VERSION="${VVERSION#v}" - DATE="$(git log -1 --format=%cd --date=short "$VVERSION")" - CHANGELOG_ENTRY="# [$VERSION](https://git.euandreh.xyz/$PROJECT/commit/?id=$VVERSION) - $DATE" - if ! grep -qF "$CHANGELOG_ENTRY" CHANGELOG.md; then - echo "Missing '$CHANGELOG_ENTRY' entry from CHANGELOG.md" >&2 - exit 1 - fi -done diff --git a/sh/templates/aux/workflow/assert-readme.sh b/sh/templates/aux/workflow/assert-readme.sh deleted file mode 100755 index cef75dd..0000000 --- a/sh/templates/aux/workflow/assert-readme.sh +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT="$1" -MAILING_LIST="$2" -TLD="$(cat aux/tld.txt)" - -EXPECTED="$(mktemp)" -cat <> "$EXPECTED" - -For running the extra development-only checks, run: - -\`\`\`shell -$ make dev-check -\`\`\` - -and for generating the documentation HTML and website, run: - -\`\`\`shell -$ make public -\`\`\` - - -## Links - -- [home page](https://$TLD/$PROJECT/) -- [source code](https://git.euandreh.xyz/$PROJECT/) -- [bug tracking](https://$TLD/$PROJECT/TODOs.html) -- [mailing list](https://lists.sr.ht/~euandreh/$MAILING_LIST?search=%5B$PROJECT%5D) -- [CI logs](https://$TLD/$PROJECT/ci.html) -- [CHANGELOG](https://$TLD/$PROJECT/CHANGELOG.html) -EOF - -RELEASES_LIST="$(mktemp)" -for version in $(git tag | perl -e 'print reverse <>'); do - echo "- version [$version](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz) ([sig](https://git.euandreh.xyz/$PROJECT/snapshot/$PROJECT-$version.tar.gz.asc)), released in $(git log -1 --format=%cd --date=short "$version")" >> "$RELEASES_LIST" -done - -if [ -s "$RELEASES_LIST" ]; then - printf '\n\n## Releases\n\n' >> "$EXPECTED" - cat "$RELEASES_LIST" >> "$EXPECTED" -fi - -cat <> "$EXPECTED" - - -## License - -The code is licensed under [GNU Affero General Public License v3.0 or later][AGPL-3.0-or-later] (AGPL-3.0-or-later). - -[AGPL-3.0-or-later]: https://www.gnu.org/licenses/agpl-3.0.en.html -EOF - -if ! tail -n "$(wc -l < "$EXPECTED")" README.md | diff - "$EXPECTED"; then - echo 'Missing metadata at the end of README.md file' - exit 1 -fi diff --git a/sh/templates/aux/workflow/assert-todos.sh b/sh/templates/aux/workflow/assert-todos.sh deleted file mode 100755 index ca73b7f..0000000 --- a/sh/templates/aux/workflow/assert-todos.sh +++ /dev/null @@ -1,57 +0,0 @@ -#!/bin/sh -set -eu - -if git grep FIXME | grep -v '^TODOs.md' | grep -v '^aux/workflow/assert-todos.sh'; then - echo "Found dangling FIXME markers on the project." - echo "You should write them down properly on TODOs.md." - exit 1 -fi - -awk -F'{#' ' -BEGIN { - exitstatus = 0 - h2flag = 0 - h2status = "" - prevline = "" - idx = 0 - delete ids[0] -} -h2flag == 1 { - split($0, l, " ") - timelinestatus = l[2] - if (h2status != timelinestatus) { - print "h2/timeline status mismatch for line " NR-1 - print prevline - print $0 - exitstatus = 1 - } - h2status = "" - h2flag = 0 -} - -/^## (TODO|DOING|WAITING|MEETING|INACTIVE|NEXT|CANCELLED|DONE)/ { - if (match($0, / \{#.*?\}$/) == 0) { - print "Missing ID for line " NR ":\n" $0 - exitstatus = 1 - } - id_with_prefix = substr($2, 0, length($2) - 1) - match(id_with_prefix, /^\w+-/) - id = substr(id_with_prefix, RLENGTH + 1) - if (id in arr) { - print "Duplicate ID: " id - exitstatus = 1 - } else { - arr[id] = 1 - } - - split($0, l, " ") - h2status = l[2] - h2flag = 1 - prevline = $0 -} - - -/^# Scratch$/ { - exit exitstatus -} -' TODOs.md diff --git a/sh/templates/aux/workflow/commonmark.sh b/sh/templates/aux/workflow/commonmark.sh deleted file mode 100755 index 6016f51..0000000 --- a/sh/templates/aux/workflow/commonmark.sh +++ /dev/null @@ -1,20 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p public - -PROJECT_UC="$1" -F="$2" -OUT="${3:-${F%.*}.html}" - -pandoc \ - --toc \ - --highlight-style pygments \ - --toc-depth=2 \ - -s \ - --metadata title="$PROJECT_UC - ${F%.*}" \ - --metadata lang=en \ - -r commonmark \ - -w html \ - -H aux/workflow/favicon.html \ - < "$F" > "public/$OUT" diff --git a/sh/templates/aux/workflow/dist.sh b/sh/templates/aux/workflow/dist.sh deleted file mode 100755 index c061a04..0000000 --- a/sh/templates/aux/workflow/dist.sh +++ /dev/null @@ -1,27 +0,0 @@ -#!/bin/sh -set -eu - -DATE="$1" -VVERSION="v$2" -PROJECT="$3" - -if git show "$VVERSION" 1>/dev/null 2>/dev/null; then - echo "Version '$VVERSION' already exists." >&2 - exit 1 -fi - -if [ "$DATE" != "$(git log -1 --format=%cd --date=short HEAD)" ]; then - echo "Date '$DATE' is not up-to-date." >&2 - exit 1 -fi - -if [ "Release $VVERSION" != "$(git log --format=%B -1 HEAD | head -n1)" ]; then - echo "Commit message isn't 'Release $VVERSION'." >&2 - exit 1 -fi - -sh aux/workflow/assert-changelog.sh "$PROJECT" - -git tag "$VVERSION" - -sh aux/workflow/sign-tarballs.sh "$PROJECT" diff --git a/sh/templates/aux/workflow/favicon.html b/sh/templates/aux/workflow/favicon.html deleted file mode 100644 index 8f9327c..0000000 --- a/sh/templates/aux/workflow/favicon.html +++ /dev/null @@ -1 +0,0 @@ - diff --git a/sh/templates/aux/workflow/favicon.png b/sh/templates/aux/workflow/favicon.png deleted file mode 100644 index 051fdf1..0000000 Binary files a/sh/templates/aux/workflow/favicon.png and /dev/null differ diff --git a/sh/templates/aux/workflow/favicon.svg b/sh/templates/aux/workflow/favicon.svg deleted file mode 100644 index ce566b2..0000000 --- a/sh/templates/aux/workflow/favicon.svg +++ /dev/null @@ -1,62 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/sh/templates/aux/workflow/preamble.md b/sh/templates/aux/workflow/preamble.md deleted file mode 100644 index 30efe0b..0000000 --- a/sh/templates/aux/workflow/preamble.md +++ /dev/null @@ -1,16 +0,0 @@ -# About - -TODOs for @PROJECT_UC@. - -See also [@TLD@/@PROJECT@/](https://@TLD@/@PROJECT@/) and [CI logs](https://@TLD@/@PROJECT@/ci.html). - -Register a new one at -[~euandreh/@MAILING_LIST@@lists.sr.ht](mailto:~euandreh/@MAILING_LIST@@lists.sr.ht?subject=%5B@PROJECT@%5D%20BUG%20or%20TASK%3A%20%3Cdescription%3E) -and see [existing discussions](https://lists.sr.ht/~euandreh/@MAILING_LIST@?search=%5B@PROJECT@%5D). - -*Você também pode escrever em português*. - -*Vous pouvez aussi écrire en français*. - -*Vi povas ankaŭ skribi esperante*. - diff --git a/sh/templates/aux/workflow/public.sh b/sh/templates/aux/workflow/public.sh deleted file mode 100755 index 8ecb855..0000000 --- a/sh/templates/aux/workflow/public.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT_UC="$1" -PROJECT="$2" -MAILING_LIST="$3" - -sh aux/workflow/TODOs.sh "$PROJECT_UC" "$PROJECT" "$MAILING_LIST" -sh aux/workflow/commonmark.sh "$PROJECT" README.md index.html ||: - -if [ -f CHANGELOG.md ]; then - sh aux/workflow/commonmark.sh "$PROJECT" CHANGELOG.md -fi - -sh aux/ci/report.sh "$PROJECT" - -cp aux/workflow/favicon.* public/ diff --git a/sh/templates/aux/workflow/sign-tarballs.sh b/sh/templates/aux/workflow/sign-tarballs.sh deleted file mode 100755 index 8de6ac4..0000000 --- a/sh/templates/aux/workflow/sign-tarballs.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -PROJECT="$1" - -SIGNATURES="$(git notes --ref=refs/notes/signatures/tar.gz list | cut -d\ -f2)" -for tag in $(git tag); do - COMMIT="$(git rev-list -n1 "$tag")" - if ! echo "$SIGNATURES" | grep -qF "$COMMIT"; then - echo "Adding missing signature to $tag" >&2 - git notes --ref=refs/notes/signatures/tar.gz add -f -C "$( - git archive --format tar.gz --prefix "$PROJECT-${tag#v}/" "$tag" | - gpg --output - --armor --detach-sign | - git hash-object -w --stdin - )" "$tag" - fi -done diff --git a/sh/templates/aux/workflow/style.css b/sh/templates/aux/workflow/style.css deleted file mode 100644 index d7935d0..0000000 --- a/sh/templates/aux/workflow/style.css +++ /dev/null @@ -1,46 +0,0 @@ - diff --git a/sh/templates/cronjob-with-email.sh b/sh/templates/cronjob-with-email.sh deleted file mode 100644 index 304e51d..0000000 --- a/sh/templates/cronjob-with-email.sh +++ /dev/null @@ -1,32 +0,0 @@ -#!/bin/sh -set -eux -LOG_FILE="$(mktemp)" -{ - finish() { - status=$? - if [ $status = 0 ]; then - STATUS="✅ SUCCESS (status $status)" - else - STATUS="❌ FAILURE (status $status)" - fi - - echo "Registering status locally..." - set -x - printf '%s __JOB__\n' "$status" >> "/tmp/cron-dbg.summary.$(date -I).euandreh.log" - - echo "Sending report email..." - - SUBJECT="Job report on $(hostname): ${STATUS} for job-__JOB__.sh" - gpg -easr eu@euandre.org < "$LOG_FILE" | \ - mail eu@euandre.org \ - -s "$SUBJECT" \ - -a 'From:eu@euandre.org' \ - --content-type 'text/plain; charset=utf-8' - echo 'Mail sent!' - } - trap finish EXIT - - echo "Starting: $(date -Is)" - ~/dev/libre/dotfiles/cron/__JOB__.sh - echo "Finishing: $(date -Is)" -} | tee "$LOG_FILE" 2>&1 diff --git a/sh/templates/description b/sh/templates/description deleted file mode 100644 index 4c28ea5..0000000 --- a/sh/templates/description +++ /dev/null @@ -1 +0,0 @@ -FIXME \ No newline at end of file diff --git a/sh/templates/long-description b/sh/templates/long-description deleted file mode 100644 index 4c28ea5..0000000 --- a/sh/templates/long-description +++ /dev/null @@ -1 +0,0 @@ -FIXME \ No newline at end of file diff --git a/sh/templates/tests/lib.sh b/sh/templates/tests/lib.sh deleted file mode 100755 index 957566e..0000000 --- a/sh/templates/tests/lib.sh +++ /dev/null @@ -1,77 +0,0 @@ -#!/bin/sh - -OUT= -ERR= -STATUS= - -assert_status() { - if [ "$STATUS" != "$1" ]; then - printf '\nERR: Bad status.\n\nexpected: %s\ngot: %s\n' \ - "$1" "$STATUS" >&2 - exit 1 - fi -} - -assert_usage() { - if ! grep -Fq 'Usage' "$1"; then - echo 'Expected to find "Usage" text, it was missing:' >&2 - cat "$1" >&2 - exit 1 - fi -} - -assert_empty_stream() { - if [ -s "$2" ]; then - printf '\nERR: Expected %s (%s) to be empty, but has content:\n%s\n' \ - "$1" "$2" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_empty_stdout() { - assert_empty_stream STDOUT "$OUT" -} - -assert_empty_stderr() { - assert_empty_stream STDERR "$ERR" -} - -assert_stream() { - if [ "$(cat "$2")" != "$3" ]; then - printf '\nERR: Bad %s (%s)\n\nexpected: %s\ngot: %s\n' \ - "$1" "$2" "$3" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_stdout() { - assert_stream STDOUT "$OUT" "$1" -} - -assert_stderr() { - assert_stream STDERR "$ERR" "$1" -} - -assert_grep_stream() { - if ! grep -qE "$3" "$2"; then - printf '\nERR: Bad %s (%s)\n\ngrepping: %s\nin:\n%s\n' \ - "$1" "$2" "$3" "$(cat "$2")" >&2 - exit 1 - fi -} - -assert_grep_stdout() { - assert_grep_stream STDOUT "$OUT" "$1" -} - -assert_grep_stderr() { - assert_grep_stream STDERR "$ERR" "$1" -} - -testing() { - printf 'testing: %s...' "$1" >&2 -} - -test_ok() { - printf ' OK.\n' >&2 -} diff --git a/sh/util.sh b/sh/util.sh deleted file mode 100644 index 89199c1..0000000 --- a/sh/util.sh +++ /dev/null @@ -1,29 +0,0 @@ -#!/bin/sh - -genpassword() { - length="${1-99}" - tr -cd '[:alnum:]' < /dev/urandom | fold "-w$length" | head -n1 ||: -} - -t() { - expand "$1" -t2 | sponge "$1" -} - -ut() { - unexpand "$1" -t2 | sponge "$1" -} - -gvi() { - if [ -e "$1" ]; then - INIT="gpg -qd" - else - INIT="echo" - fi - $INIT "$1" | vipe | gpg -qer eu@euandre.org | sponge "$1" -} - -disable_ci() { - NAME="$(basename "$PWD")" - rm -f ".git/hooks/$NAME/pre-push" - ssh euandreh.xyz rm -f "/srv/git/$NAME.git/hooks/post-receive" -} diff --git a/sh/vcs.sh b/sh/vcs.sh deleted file mode 100644 index 5d6afb5..0000000 --- a/sh/vcs.sh +++ /dev/null @@ -1,6 +0,0 @@ -#!/bin/sh - -alias mr='mr -s' -alias s='git status' -alias d='git diff' -alias ds='git diff --staged' diff --git a/sh/x.sh b/sh/x.sh deleted file mode 100644 index 5202917..0000000 --- a/sh/x.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/bin/sh - -setxkbmap -option esperanto:qwerty -xset r rate 225 75 - -# query with: xdg-mime query filetype -xdg-mime default evince.desktop application/pdf -xdg-mime default mpv.desktop video/mp4 -xdg-mime default mpv.desktop video/webm -xdg-mime default mpv.desktop video/x-matroska -xdg-mime default mpv.desktop audio/mpeg -xdg-mime default mpv.desktop audio/x-flac - -xdg-mime default firefox.desktop text/html -xdg-mime default firefox.desktop text/xml - -xdg-mime default nautilus.desktop inode/directory -xmodmap -e 'keycode 118 = bar Greek_lambda' diff --git a/src/bin/backup b/src/bin/backup deleted file mode 100755 index 828b96a..0000000 --- a/src/bin/backup +++ /dev/null @@ -1,97 +0,0 @@ -#!/bin/sh -set -u - -usage() { - cat <<-'EOF' - Usage: - backup [ARCHIVE_TAG [COMMENT]] - backup -h - EOF -} - -help() { - cat <<-'EOF' - - ARCHIVE_TAG defaults to "cronjob". - COMMENT defaults to an empty string. - - Options: - -h, --help show this message - EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -VERBOSE_FLAG='' -while getopts 'hv' flag; do - case "$flag" in - h) - usage - help - exit - ;; - v) - VERBOSE_FLAG='-v' - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - - -set -x - -finish() { - STATUS=$? - printf '\n>>>\n>>> exit status: %s\n>>>\n\n' "$STATUS" >&2 -} -trap finish EXIT - - -export BORG_REMOTE_PATH='borg1' -export BORG_PASSCOMMAND='pass show Usurpador/borg/passphrase' -SSH_AUTH_SOCK="$(gpgconf --list-dirs agent-ssh-socket)" -export SSH_AUTH_SOCK - -borg init -e repokey-blake2 suyin:borg/usurpador ||: -borg key export suyin:borg/usurpador ~/archive/usurpador-borg-key.txt - -borg create \ - $VERBOSE_FLAG \ - --exclude ~/.cache \ - --stats \ - --compression lzma,9 \ - --comment "${2:-}" \ - "suyin:borg/usurpador::{hostname}-{now}-${1:-cronjob}" \ - ~/ - -borg check \ - --verbose \ - --last 3 \ - suyin:borg/usurpador - -borg prune \ - --verbose \ - --list \ - --keep-within=6m \ - --keep-weekly=52 \ - --keep-monthly=24 \ - suyin:borg/usurpador - -ssh suyin quota diff --git a/src/bin/commit-md b/src/bin/commit-md deleted file mode 100755 index 3d4d5f6..0000000 --- a/src/bin/commit-md +++ /dev/null @@ -1,59 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - commit-md [COMMIT] - commit-md -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -h, --help show this message -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -while getopts 'h' flag; do - case "$flag" in - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -COMMIT="${1:-$(git rev-parse HEAD)}" -REPOSITORY="$(basename "$PWD")" - -LINK="$(printf 'https://euandreh.xyz/%s.git/commit/?id=%s' "$REPOSITORY" "$COMMIT")" -# shellcheck disable=2016 -MD="$(printf '[`%s`](%s)' "$COMMIT" "$LINK")" - -xdg-open "$LINK" -printf ' Done in\n%s.' "$MD" | xclip -sel clip -printf 'Copied %s to the clipboard!\n' "$MD" >&2 diff --git a/src/bin/copy b/src/bin/copy deleted file mode 100755 index 04dc265..0000000 --- a/src/bin/copy +++ /dev/null @@ -1,67 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - copy [-n] < STDIN - copy -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -n remove newlines - -h, --help show this message - - Examples: - - Copy numbers to clipboard: - seq 10 | copy - - Copy string without newline: - echo 'with automatic newline' | copy -n -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -TRIM=false -while getopts 'nh' flag; do - case "$flag" in - n) - TRIM=true - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -if [ "$TRIM" = 'true' ]; then - cat - | tr -d '\n' | xclip -sel clip -else - cat - | xclip -sel clip -fi diff --git a/src/bin/fim b/src/bin/fim deleted file mode 100755 index 7a21a51..0000000 --- a/src/bin/fim +++ /dev/null @@ -1,50 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - fim - fim -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -h, --help show this message -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -while getopts 'h' flag; do - case "$flag" in - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -play "$DOTFILES/sh/Positive.ogg" 2> /dev/null diff --git a/src/bin/gc b/src/bin/gc deleted file mode 100755 index 0fd2ca7..0000000 --- a/src/bin/gc +++ /dev/null @@ -1,91 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - gc - gc -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -h, --help show this message -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -while getopts 'h' flag; do - case "$flag" in - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -set -x -before="$(df -h .)" - -PROFILES=' -per-user/root/channels -per-user/andreh/profile -per-user/andreh/channels -system -' - -for p in $PROFILES; do - doas nix-env --delete-generations old -p "/nix/var/nix/profiles/$p" -done -nix-env --delete-generations old -nix-store --gc -nix-collect-garbage -d - -guix gc -d - -find ~/ -name 'nohup.out' -exec rm {} \; -rm -rf ~/.local/share/Trash/files/* -find /tmp/ -type f -atime +10 -exec rm {} \; ||: - -if command -V docker; then - echo y | docker system prune -a - docker rmi "$(docker images -a -q)" ||: - docker rm "$(docker ps -a -f status=exited -q)" ||: - docker stop "$(docker ps -a -q)" ||: - docker rm "$(docker ps -a -q)" ||: - echo y | docker volume prune - echo y | docker container prune -fi - -notmuch search --output=files --exclude=false tag:deleted | xargs -I{} rm "{}" -notmuch new - -after="$(df -h .)" - -set +x -echo 'Disk space before and after:' -echo " before: $before" -echo " after: $after" diff --git a/src/bin/open b/src/bin/open deleted file mode 100755 index 8ede1b7..0000000 --- a/src/bin/open +++ /dev/null @@ -1,96 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - open FILE... - open -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -h, --help show this message - - Examples: - - Open an HTML file on the current $BROWSER: - open index.html - - Open multiple PDF files (with zathura): - open *.pdf -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -while getopts 'h' flag; do - case "$flag" in - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -if [ -z "${1:-}" ]; then - usage >&2 - exit 2 -fi - -for f in "$@"; do - case "$f" in - *.ico|*.jpg|*.jpeg|*.png) - feh "$f" - ;; - https://www.youtube.com/watch*) - nohup mpv "$f" 1>&2 2>/dev/null & - ;; - *.flac|*.ogg|*.mkv|*.avi|*.mp4) - nohup mpv "$f" 1>&2 2>/dev/null & - ;; - http*|*.svg|*.html) - "$BROWSER" "$f" - ;; - gopher://*) - amfora "$f" - ;; - gemini://*) - amfora "$f" - ;; - *.pdf|*.djvu|*.ps|*.epub) - nohup zathura "$f" 1>&2 2>/dev/null & - ;; - *.txt) - less "$f" - ;; - *.midi) - timidity "$f" - ;; - *) - /run/current-system/sw/bin/xdg-open "$f" - ;; - esac -done diff --git a/src/bin/print b/src/bin/print deleted file mode 100755 index 735d8ba..0000000 --- a/src/bin/print +++ /dev/null @@ -1,151 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - print [-d] [-q QUALITY] [FILE...] - print -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -d print duplex/double-sided - -q QUALITY choose the print quality, either: - low, medium (default) or high. - -h, --help show this message - - Examples: - - Print the given PostScript file with default quality: - $ print f1.ps - - Print multiple PDF files with high quality: - $ print -dq high *.pdf - - Print the file from STDIN, double-sided: - $ print -d < f2.ps - - Print multiple source code files: - $ print src/*.{c,h} -EOF -} - -mkdtemp() { - name="$(echo 'mkstemp(template)' | - m4 -D template="${TMPDIR:-/tmp}/m4-tmpname.")" - rm -f "$name" - mkdir "$name" - echo "$name" -} - -n_pages() { - pdftk "$1" dump_data | awk '/NumberOfPages/ { print $2 }' -} - -main() { - if file -b "$FILE" | grep -q PostScript; then - ps2pdf "$FILE" "$NEWDIR"/in.pdf - elif file -b "$FILE" | grep -q PDF; then - cp "$FILE" "$NEWDIR"/in.pdf - else - enscript -o- "$FILE" | ps2pdf - "$NEWDIR"/in.pdf - fi - cd "$NEWDIR" - - if [ -z "$DUPLEX" ]; then - lp in.pdf - cd - > /dev/null - return - fi - - if [ "$(n_pages in.pdf)" = '1' ]; then - lp in.pdf - return - fi - - pdftk A=in.pdf cat Aodd output odd.pdf - pdftk A=in.pdf cat Aeven output even.pdf - - NODD="$(n_pages odd.pdf)" - NEVEN="$(n_pages even.pdf)" - - printf 'Printing odd pages...\n' >&2 - lp odd.pdf - printf 'Has printing finished yet? Once it does, reload the pages and hit it enter to continue. ' - read -r < /dev/tty - lp even.pdf - - if [ "$NODD" != "$NEVEN" ]; then - printf '\n' | lp - fi - - cd - > /dev/null -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -lpoptions -o PrintQuality=standard -DUPLEX= -while getopts 'dq:h' flag; do - case "$flag" in - d) - DUPLEX=1 - ;; - q) - case "$OPTARG" in - low) - lpoptions -o PrintQuality=draft - ;; - medium) - lpoptions -o PrintQuality=standard - ;; - high) - lpoptions -o PrintQuality=high - ;; - *) - echo "Bad QUALITY option: \"$OPTARG\"" >&2 - exit 2 - ;; - esac - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -NEWDIR="$(mkdtemp)" -if [ -z "${1:-}" ]; then - FILE="$NEWDIR"/STDIN - cat - > "$FILE" - main -else - for f in "$@"; do - FILE="$f" - main - done -fi diff --git a/src/bin/qr b/src/bin/qr deleted file mode 100755 index 0fce234..0000000 --- a/src/bin/qr +++ /dev/null @@ -1,56 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - qr [-s PIXEL_SIZE] [DATA|-] - qr -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -s size of the pixel (default 10) - -h, --help show this help message -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -PIXEL_SIZE=10 -while getopts 's:h' flag; do - case "$flag" in - s) - PIXEL_SIZE="$OPTARG" - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - - -echo "${1:-$(cat -)}" | qrencode -s "$PIXEL_SIZE" -o- | feh - diff --git a/src/bin/rfc b/src/bin/rfc deleted file mode 100755 index 27d5357..0000000 --- a/src/bin/rfc +++ /dev/null @@ -1,98 +0,0 @@ -#!/bin/sh -set -eu -set -o pipefail - -usage() { - cat <<-'EOF' - Usage: - rfc [-w FORMAT] RFC_NUMBER - rfc -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -w FORMAT Choose between text (txt, the default) and - JSON (json) - -h, --help show this message -EOF -} - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -FORMAT='txt' -while getopts 'w:h' flag; do - case "$flag" in - w) - case "$OPTARG" in - json|txt) - FORMAT="$OPTARG" - ;; - *) - printf 'Bad FORMAT options: %s\n' \ - "$OPTARG" >&2 - exit 2 - ;; - esac - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - - -if [ -z "${1:-}" ]; then - echo 'Missing argument RFC_NUMBER' >&2 - usage >&2 - exit 2 -fi - -if [ ! -e "$HOME/.local/share/doc/rfc/rfc$1.$FORMAT" ]; then - printf 'Given RFC_NUMBER "%s" does not exist\n' "$1" >&2 - exit 2 -fi - -view() { - if [ -t 1 ]; then - $PAGER - else - cat - - fi -} - -case "$FORMAT" in - txt) - cat "$HOME/.local/share/doc/rfc/rfc$1.txt" | view - ;; - json) - jq < "$HOME/.local/share/doc/rfc/rfc$1.json" | view - ;; - *) - printf 'Unreachable: unsupported FORMAT "%s"\n' \ - "$FORMAT" >&2 - exit 2 - ;; -esac diff --git a/src/bin/xdg-open b/src/bin/xdg-open deleted file mode 120000 index ce4a72b..0000000 --- a/src/bin/xdg-open +++ /dev/null @@ -1 +0,0 @@ -open \ No newline at end of file diff --git a/src/bin/yt b/src/bin/yt deleted file mode 100755 index 0ef5932..0000000 --- a/src/bin/yt +++ /dev/null @@ -1,90 +0,0 @@ -#!/bin/sh -set -eu - -usage() { - cat <<-'EOF' - Usage: - yt [-f] URL... [PLAYLIST_COUNT:-15] - yt [-f] FILE... [PLAYLIST_COUNT:-15] - yt -h -EOF -} - -help() { - cat <<-'EOF' - - Options: - -f force to download a video already - in the archive - -h, --help show this message -EOF -} - -mkstemp() { - echo 'mkstemp(template)' | m4 -D template="${TMPDIR:-/tmp}/m4-tmpname." -} - - -for flag in "$@"; do - case "$flag" in - --) - break - ;; - --help) - usage - help - exit - ;; - *) - ;; - esac -done - -while getopts 'fh:' flag; do - case "$flag" in - f) - FORCE=1 - ;; - h) - usage - help - exit - ;; - *) - usage >&2 - exit 2 - ;; - esac -done -shift $((OPTIND - 1)) - -if [ -z "${1:-}" ]; then - echo 'Missing URL|FILE argument' >&2 - usage >&2 - exit 2 -fi - - -if [ ! -e "$1" ]; then - F="$(mkstemp)" - printf '%s\n' "$1" > "$F" -else - F="$1" -fi - - -DEFAULT_PLAYLIST_END=15 -YT_TEMPLATE="$HOME/Downloads/yt-dl/%(uploader)s/%(upload_date)s %(title)s.%(ext)s" - -if [ -z "${FORCE:-}" ]; then - ARCHIVE_OPTION="--download-archive $HOME/archive/youtube-dl-seen.conf" -fi - -youtube-dl \ - --batch-file "$F" \ - --format best \ - --prefer-free-formats \ - --playlist-end "${2:-$DEFAULT_PLAYLIST_END}" \ - --write-description \ - --output "$YT_TEMPLATE" \ - ${ARCHIVE_OPTION:-} diff --git a/xmonad/scripts/brightness.sh b/xmonad/scripts/brightness.sh deleted file mode 100755 index 7eae0e5..0000000 --- a/xmonad/scripts/brightness.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -set -eux - -BRIGHTNESS_DIFF="$1" - -# base dir for backlight class -BASEDIR='/sys/class/backlight/' - -# get the backlight handler -HANDLER="$BASEDIR$(ls "$BASEDIR")" - -# get current brightness -OLD_BRIGHTNESS="$(cat "$HANDLER/brightness")" - -# get max brightness -MAX_BRIGHTNESS="$(cat "$HANDLER/max_brightness")" - -# get current brightness % -OLD_BRIGHTNESS_P=$(( 100 * "$OLD_BRIGHTNESS" / "$MAX_BRIGHTNESS" )) - -# calculate new brightness %, bounded by 0 100 range -NEW_BRIGHTNESS_P=$(("$OLD_BRIGHTNESS_P" + "$BRIGHTNESS_DIFF")) -NEW_BRIGHTNESS_P=$(("$NEW_BRIGHTNESS_P" > 100 ? 100 : "$NEW_BRIGHTNESS_P")) -NEW_BRIGHTNESS_P=$(("$NEW_BRIGHTNESS_P" < 1 ? 1 : "$NEW_BRIGHTNESS_P")) - -# calculate new brightness value -NEW_BRIGHTNESS=$(( "$MAX_BRIGHTNESS" * "$NEW_BRIGHTNESS_P" / 100 )) - -# set the new brightness value -echo "$NEW_BRIGHTNESS" > "$HANDLER/brightness" || doas chmod 666 "$HANDLER/brightness" diff --git a/xmonad/scripts/dmenu-clipmenu.sh b/xmonad/scripts/dmenu-clipmenu.sh deleted file mode 100755 index d1e9fc9..0000000 --- a/xmonad/scripts/dmenu-clipmenu.sh +++ /dev/null @@ -1,4 +0,0 @@ -#!/bin/sh -set -eu - -clipmenu -l 20 -i -p 'Entry: ' -fn Monospace-18 diff --git a/xmonad/scripts/dmenu-emoji.sh b/xmonad/scripts/dmenu-emoji.sh deleted file mode 100755 index 4ee9352..0000000 --- a/xmonad/scripts/dmenu-emoji.sh +++ /dev/null @@ -1,12 +0,0 @@ -#!/bin/sh -set -eu - -# Derived from: -# https://github.com/porras/dmenu-emoji - -cd ~/dev/libre/dotfiles/xmonad/scripts/ - -dmenu -l 20 -i -p 'Emoji: ' -fn Monospace-18 < list-emoji.txt | - awk '{print $(NF)}' | - tr -d '\n' | - xclip -sel clip diff --git a/xmonad/scripts/dmenu-pass-login.sh b/xmonad/scripts/dmenu-pass-login.sh deleted file mode 100755 index 915048d..0000000 --- a/xmonad/scripts/dmenu-pass-login.sh +++ /dev/null @@ -1,10 +0,0 @@ -#!/bin/sh -set -eu - -choice="$(find ~/.password-store/ -type f -name '*.gpg' | - sed -e "s|^$HOME/.password-store/||" -e 's/\.gpg$//' | - dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18)" - -if [ -n "$choice" ]; then - pass show -c2 "$choice" -fi diff --git a/xmonad/scripts/dmenu-pass.sh b/xmonad/scripts/dmenu-pass.sh deleted file mode 100755 index 5721c08..0000000 --- a/xmonad/scripts/dmenu-pass.sh +++ /dev/null @@ -1,17 +0,0 @@ -#!/bin/sh -set -eu - -clipctl disable - -choice="$( - find ~/.password-store/ -type f -name '*.gpg' | - sed -e "s|^$HOME/.password-store/||" -e 's/\.gpg$//' | - LANG=POSIX.UTF-8 sort | - dmenu -l 20 -i -p 'Pass: ' -fn Monospace-18 -)" - -if [ -n "$choice" ]; then - pass show -c "$choice" -fi - -clipctl enable diff --git a/xmonad/scripts/list-emoji.txt b/xmonad/scripts/list-emoji.txt deleted file mode 100644 index 06b5a58..0000000 --- a/xmonad/scripts/list-emoji.txt +++ /dev/null @@ -1,1432 +0,0 @@ -grinning face 😀 -smiling face with open mouth 😃 -smiling face with open mouth & smiling eyes 😄 -grinning face with smiling eyes 😁 -smiling face with open mouth & closed eyes 😆 -smiling face with open mouth & cold sweat 😅 -face with tears of joy 😂 -rolling on the floor laughing 🤣 -smiling face ☺️ -smiling face with smiling eyes 😊 -smiling face with halo 😇 -slightly smiling face 🙂 -upside-down face 🙃 -winking face 😉 -relieved face 😌 -smiling face with heart-eyes 😍 -face blowing a kiss 😘 -kissing face 😗 -kissing face with smiling eyes 😙 -kissing face with closed eyes 😚 -face savouring delicious food 😋 -face with stuck-out tongue & winking eye 😜 -face with stuck-out tongue & closed eyes 😝 -face with stuck-out tongue 😛 -money-mouth face 🤑 -hugging face 🤗 -nerd face 🤓 -smiling face with sunglasses 😎 -clown face 🤡 -cowboy hat face 🤠 -smirking face 😏 -unamused face 😒 -disappointed face 😞 -pensive face 😔 -worried face 😟 -confused face 😕 -slightly frowning face 🙁 -frowning face ☹️ -persevering face 😣 -confounded face 😖 -tired face 😫 -weary face 😩 -face with steam from nose 😤 -angry face 😠 -pouting face 😡 -face without mouth 😶 -neutral face 😐 -expressionless face 😑 -hushed face 😯 -frowning face with open mouth 😦 -anguished face 😧 -face with open mouth 😮 -astonished face 😲 -dizzy face 😵 -flushed face 😳 -face screaming in fear 😱 -fearful face 😨 -face with open mouth & cold sweat 😰 -crying face 😢 -disappointed but relieved face 😥 -drooling face 🤤 -loudly crying face 😭 -face with cold sweat 😓 -sleepy face 😪 -sleeping face 😴 -face with rolling eyes 🙄 -thinking face 🤔 -lying face 🤥 -grimacing face 😬 -zipper-mouth face 🤐 -nauseated face 🤢 -sneezing face 🤧 -face with medical mask 😷 -face with thermometer 🤒 -face with head-bandage 🤕 -smiling face with horns 😈 -angry face with horns 👿 -ogre 👹 -goblin 👺 -pile of poo 💩 -ghost 👻 -skull 💀 -skull and crossbones ☠️ -alien 👽 -alien monster 👾 -robot face 🤖 -jack-o-lantern 🎃 -smiling cat face with open mouth 😺 -grinning cat face with smiling eyes 😸 -cat face with tears of joy 😹 -smiling cat face with heart-eyes 😻 -cat face with wry smile 😼 -kissing cat face with closed eyes 😽 -weary cat face 🙀 -crying cat face 😿 -pouting cat face 😾 -open hands 👐 -raising hands 🙌 -clapping hands 👏 -folded hands 🙏 -handshake 🤝 -thumbs up 👍 -thumbs down 👎 -oncoming fist 👊 -raised fist ✊ -left-facing fist 🤛 -right-facing fist 🤜 -crossed fingers 🤞 -victory hand ✌️ -sign of the horns 🤘 -OK hand 👌 -backhand index pointing left 👈 -backhand index pointing right 👉 -backhand index pointing up 👆 -backhand index pointing down 👇 -index pointing up ☝️ -raised hand ✋ -raised back of hand 🤚 -raised hand with fingers splayed 🖐 -vulcan salute 🖖 -waving hand 👋 -call me hand 🤙 -flexed biceps 💪 -middle finger 🖕 -writing hand ✍️ -selfie 🤳 -nail polish 💅 -ring 💍 -lipstick 💄 -kiss mark 💋 -mouth 👄 -tongue 👅 -ear 👂 -nose 👃 -footprints 👣 -eye 👁 -eyes 👀 -speaking head 🗣 -bust in silhouette 👤 -busts in silhouette 👥 -baby 👶 -boy 👦 -girl 👧 -man 👨 -woman 👩 -blond-haired woman 👱‍♀ -blond-haired person 👱 -old man 👴 -old woman 👵 -man with Chinese cap 👲 -woman wearing turban 👳‍♀ -person wearing turban 👳 -woman police officer 👮‍♀ -police officer 👮 -woman construction worker 👷‍♀ -construction worker 👷 -woman guard 💂‍♀ -guard 💂 -woman detective 🕵️‍♀️ -detective 🕵 -woman health worker 👩‍⚕ -man health worker 👨‍⚕ -woman farmer 👩‍🌾 -man farmer 👨‍🌾 -woman cook 👩‍🍳 -man cook 👨‍🍳 -woman student 👩‍🎓 -man student 👨‍🎓 -woman singer 👩‍🎤 -man singer 👨‍🎤 -woman teacher 👩‍🏫 -man teacher 👨‍🏫 -woman factory worker 👩‍🏭 -man factory worker 👨‍🏭 -woman technologist 👩‍💻 -man technologist 👨‍💻 -woman office worker 👩‍💼 -man office worker 👨‍💼 -woman mechanic 👩‍🔧 -man mechanic 👨‍🔧 -woman scientist 👩‍🔬 -man scientist 👨‍🔬 -woman artist 👩‍🎨 -man artist 👨‍🎨 -woman firefighter 👩‍🚒 -man firefighter 👨‍🚒 -woman pilot 👩‍✈ -man pilot 👨‍✈ -woman astronaut 👩‍🚀 -man astronaut 👨‍🚀 -woman judge 👩‍⚖ -man judge 👨‍⚖ -Mrs. Claus 🤶 -Santa Claus 🎅 -princess 👸 -prince 🤴 -bride with veil 👰 -man in tuxedo 🤵 -baby angel 👼 -pregnant woman 🤰 -woman bowing 🙇‍♀ -person bowing 🙇 -person tipping hand 💁 -man tipping hand 💁‍♂ -person gesturing NO 🙅 -man gesturing NO 🙅‍♂ -person gesturing OK 🙆 -man gesturing OK 🙆‍♂ -person raising hand 🙋 -man raising hand 🙋‍♂ -woman facepalming 🤦‍♀ -man facepalming 🤦‍♂ -woman shrugging 🤷‍♀ -man shrugging 🤷‍♂ -person pouting 🙎 -man pouting 🙎‍♂ -person frowning 🙍 -man frowning 🙍‍♂ -person getting haircut 💇 -man getting haircut 💇‍♂ -person getting massage 💆 -man getting massage 💆‍♂ -man in business suit levitating 🕴 -woman dancing 💃 -man dancing 🕺 -people with bunny ears partying 👯 -men with bunny ears partying 👯‍♂ -woman walking 🚶‍♀ -person walking 🚶 -woman running 🏃‍♀ -person running 🏃 -man and woman holding hands 👫 -two women holding hands 👭 -two men holding hands 👬 -couple with heart 💑 -couple with heart: woman woman 👩‍❤️‍👩 -couple with heart: man man 👨‍❤️‍👨 -kiss 💏 -kiss: woman woman 👩‍❤️‍💋‍👩 -kiss: man man 👨‍❤️‍💋‍👨 -family 👪 -family: man woman girl 👨‍👩‍👧 -family: man woman girl boy 👨‍👩‍👧‍👦 -family: man woman boy boy 👨‍👩‍👦‍👦 -family: man woman girl girl 👨‍👩‍👧‍👧 -family: woman woman boy 👩‍👩‍👦 -family: woman woman girl 👩‍👩‍👧 -family: woman woman girl boy 👩‍👩‍👧‍👦 -family: woman woman boy boy 👩‍👩‍👦‍👦 -family: woman woman girl girl 👩‍👩‍👧‍👧 -family: man man boy 👨‍👨‍👦 -family: man man girl 👨‍👨‍👧 -family: man man girl boy 👨‍👨‍👧‍👦 -family: man man boy boy 👨‍👨‍👦‍👦 -family: man man girl girl 👨‍👨‍👧‍👧 -family: woman boy 👩‍👦 -family: woman girl 👩‍👧 -family: woman girl boy 👩‍👧‍👦 -family: woman boy boy 👩‍👦‍👦 -family: woman girl girl 👩‍👧‍👧 -family: man boy 👨‍👦 -family: man girl 👨‍👧 -family: man girl boy 👨‍👧‍👦 -family: man boy boy 👨‍👦‍👦 -family: man girl girl 👨‍👧‍👧 -woman’s clothes 👚 -t-shirt 👕 -jeans 👖 -necktie 👔 -dress 👗 -bikini 👙 -kimono 👘 -high-heeled shoe 👠 -woman’s sandal 👡 -woman’s boot 👢 -man’s shoe 👞 -running shoe 👟 -woman’s hat 👒 -top hat 🎩 -graduation cap 🎓 -crown 👑 -rescue worker’s helmet ⛑ -school backpack 🎒 -clutch bag 👝 -purse 👛 -handbag 👜 -briefcase 💼 -glasses 👓 -sunglasses 🕶 -closed umbrella 🌂 -umbrella ☂️ -dog face 🐶 -cat face 🐱 -mouse face 🐭 -hamster face 🐹 -rabbit face 🐰 -fox face 🦊 -bear face 🐻 -panda face 🐼 -koala 🐨 -tiger face 🐯 -lion face 🦁 -cow face 🐮 -pig face 🐷 -pig nose 🐽 -frog face 🐸 -monkey face 🐵 -see-no-evil monkey 🙈 -hear-no-evil monkey 🙉 -speak-no-evil monkey 🙊 -monkey 🐒 -chicken 🐔 -penguin 🐧 -bird 🐦 -baby chick 🐤 -hatching chick 🐣 -front-facing baby chick 🐥 -duck 🦆 -eagle 🦅 -owl 🦉 -bat 🦇 -wolf face 🐺 -boar 🐗 -horse face 🐴 -unicorn face 🦄 -honeybee 🐝 -bug 🐛 -butterfly 🦋 -snail 🐌 -spiral shell 🐚 -lady beetle 🐞 -ant 🐜 -spider 🕷 -spider web 🕸 -turtle 🐢 -snake 🐍 -lizard 🦎 -scorpion 🦂 -crab 🦀 -squid 🦑 -octopus 🐙 -shrimp 🦐 -tropical fish 🐠 -fish 🐟 -blowfish 🐡 -dolphin 🐬 -shark 🦈 -spouting whale 🐳 -whale 🐋 -crocodile 🐊 -leopard 🐆 -tiger 🐅 -water buffalo 🐃 -ox 🐂 -cow 🐄 -deer 🦌 -camel 🐪 -two-hump camel 🐫 -elephant 🐘 -rhinoceros 🦏 -gorilla 🦍 -horse 🐎 -pig 🐖 -goat 🐐 -ram 🐏 -sheep 🐑 -dog 🐕 -poodle 🐩 -cat 🐈 -rooster 🐓 -turkey 🦃 -dove 🕊 -rabbit 🐇 -mouse 🐁 -rat 🐀 -chipmunk 🐿 -paw prints 🐾 -dragon 🐉 -dragon face 🐲 -cactus 🌵 -Christmas tree 🎄 -evergreen tree 🌲 -deciduous tree 🌳 -palm tree 🌴 -seedling 🌱 -herb 🌿 -shamrock ☘️ -four leaf clover 🍀 -pine decoration 🎍 -tanabata tree 🎋 -leaf fluttering in wind 🍃 -fallen leaf 🍂 -maple leaf 🍁 -mushroom 🍄 -sheaf of rice 🌾 -bouquet 💐 -tulip 🌷 -rose 🌹 -wilted flower 🥀 -sunflower 🌻 -blossom 🌼 -cherry blossom 🌸 -hibiscus 🌺 -globe showing Americas 🌎 -globe showing Europe-Africa 🌍 -globe showing Asia-Australia 🌏 -full moon 🌕 -waning gibbous moon 🌖 -last quarter moon 🌗 -waning crescent moon 🌘 -new moon 🌑 -waxing crescent moon 🌒 -first quarter moon 🌓 -waxing gibbous moon 🌔 -new moon face 🌚 -full moon with face 🌝 -sun with face 🌞 -first quarter moon with face 🌛 -last quarter moon with face 🌜 -crescent moon 🌙 -dizzy 💫 -white medium star ⭐️ -glowing star 🌟 -sparkles ✨ -high voltage ⚡️ -fire 🔥 -collision 💥 -comet ☄ -sun ☀️ -sun behind small cloud 🌤 -sun behind cloud ⛅️ -sun behind large cloud 🌥 -sun behind rain cloud 🌦 -rainbow 🌈 -cloud ☁️ -cloud with rain 🌧 -cloud with lightning and rain ⛈ -cloud with lightning 🌩 -cloud with snow 🌨 -snowman ☃️ -snowman without snow ⛄️ -snowflake ❄️ -wind face 🌬 -dashing away 💨 -tornado 🌪 -fog 🌫 -water wave 🌊 -droplet 💧 -sweat droplets 💦 -umbrella with rain drops ☔️ -green apple 🍏 -red apple 🍎 -pear 🍐 -tangerine 🍊 -lemon 🍋 -banana 🍌 -watermelon 🍉 -grapes 🍇 -strawberry 🍓 -melon 🍈 -cherries 🍒 -peach 🍑 -pineapple 🍍 -kiwi fruit 🥝 -avocado 🥑 -tomato 🍅 -eggplant 🍆 -cucumber 🥒 -carrot 🥕 -ear of corn 🌽 -hot pepper 🌶 -potato 🥔 -roasted sweet potato 🍠 -chestnut 🌰 -peanuts 🥜 -honey pot 🍯 -croissant 🥐 -bread 🍞 -baguette bread 🥖 -cheese wedge 🧀 -egg 🥚 -cooking 🍳 -bacon 🥓 -pancakes 🥞 -fried shrimp 🍤 -poultry leg 🍗 -meat on bone 🍖 -pizza 🍕 -hot dog 🌭 -hamburger 🍔 -french fries 🍟 -stuffed flatbread 🥙 -taco 🌮 -burrito 🌯 -green salad 🥗 -shallow pan of food 🥘 -spaghetti 🍝 -steaming bowl 🍜 -pot of food 🍲 -fish cake with swirl 🍥 -sushi 🍣 -bento box 🍱 -curry rice 🍛 -cooked rice 🍚 -rice ball 🍙 -rice cracker 🍘 -oden 🍢 -dango 🍡 -shaved ice 🍧 -ice cream 🍨 -soft ice cream 🍦 -shortcake 🍰 -birthday cake 🎂 -custard 🍮 -lollipop 🍭 -candy 🍬 -chocolate bar 🍫 -popcorn 🍿 -doughnut 🍩 -cookie 🍪 -glass of milk 🥛 -baby bottle 🍼 -hot beverage ☕️ -teacup without handle 🍵 -sake 🍶 -beer mug 🍺 -clinking beer mugs 🍻 -clinking glasses 🥂 -wine glass 🍷 -tumbler glass 🥃 -cocktail glass 🍸 -tropical drink 🍹 -bottle with popping cork 🍾 -spoon 🥄 -fork and knife 🍴 -fork and knife with plate 🍽 -soccer ball ⚽️ -basketball 🏀 -american football 🏈 -baseball ⚾️ -tennis 🎾 -volleyball 🏐 -rugby football 🏉 -pool 8 ball 🎱 -ping pong 🏓 -badminton 🏸 -goal net 🥅 -ice hockey 🏒 -field hockey 🏑 -cricket 🏏 -flag in hole ⛳️ -bow and arrow 🏹 -fishing pole 🎣 -boxing glove 🥊 -martial arts uniform 🥋 -ice skate ⛸ -skis 🎿 -skier ⛷ -snowboarder 🏂 -woman lifting weights 🏋️‍♀️ -person lifting weights 🏋 -person fencing 🤺 -women wrestling 🤼‍♀ -men wrestling 🤼‍♂ -woman cartwheeling 🤸‍♀ -man cartwheeling 🤸‍♂ -woman bouncing ball ⛹️‍♀️ -person bouncing ball ⛹ -woman playing handball 🤾‍♀ -man playing handball 🤾‍♂ -woman golfing 🏌️‍♀️ -person golfing 🏌 -woman surfing 🏄‍♀ -person surfing 🏄 -woman swimming 🏊‍♀ -person swimming 🏊 -woman playing water polo 🤽‍♀ -man playing water polo 🤽‍♂ -woman rowing boat 🚣‍♀ -person rowing boat 🚣 -horse racing 🏇 -woman biking 🚴‍♀ -person biking 🚴 -woman mountain biking 🚵‍♀ -person mountain biking 🚵 -running shirt 🎽 -sports medal 🏅 -military medal 🎖 -1st place medal 🥇 -2nd place medal 🥈 -3rd place medal 🥉 -trophy 🏆 -rosette 🏵 -reminder ribbon 🎗 -ticket 🎫 -admission tickets 🎟 -circus tent 🎪 -woman juggling 🤹‍♀ -man juggling 🤹‍♂ -performing arts 🎭 -artist palette 🎨 -clapper board 🎬 -microphone 🎤 -headphone 🎧 -musical score 🎼 -musical keyboard 🎹 -drum 🥁 -saxophone 🎷 -trumpet 🎺 -guitar 🎸 -violin 🎻 -game die 🎲 -direct hit 🎯 -bowling 🎳 -video game 🎮 -slot machine 🎰 -automobile 🚗 -taxi 🚕 -sport utility vehicle 🚙 -bus 🚌 -trolleybus 🚎 -racing car 🏎 -police car 🚓 -ambulance 🚑 -fire engine 🚒 -minibus 🚐 -delivery truck 🚚 -articulated lorry 🚛 -tractor 🚜 -kick scooter 🛴 -bicycle 🚲 -motor scooter 🛵 -motorcycle 🏍 -police car light 🚨 -oncoming police car 🚔 -oncoming bus 🚍 -oncoming automobile 🚘 -oncoming taxi 🚖 -aerial tramway 🚡 -mountain cableway 🚠 -suspension railway 🚟 -railway car 🚃 -tram car 🚋 -mountain railway 🚞 -monorail 🚝 -high-speed train 🚄 -high-speed train with bullet nose 🚅 -light rail 🚈 -locomotive 🚂 -train 🚆 -metro 🚇 -tram 🚊 -station 🚉 -helicopter 🚁 -small airplane 🛩 -airplane ✈️ -airplane departure 🛫 -airplane arrival 🛬 -rocket 🚀 -satellite 🛰 -seat 💺 -canoe 🛶 -sailboat ⛵️ -motor boat 🛥 -speedboat 🚤 -passenger ship 🛳 -ferry ⛴ -ship 🚢 -anchor ⚓️ -construction 🚧 -fuel pump ⛽️ -bus stop 🚏 -vertical traffic light 🚦 -horizontal traffic light 🚥 -world map 🗺 -moai 🗿 -Statue of Liberty 🗽 -fountain ⛲️ -Tokyo tower 🗼 -castle 🏰 -Japanese castle 🏯 -stadium 🏟 -ferris wheel 🎡 -roller coaster 🎢 -carousel horse 🎠 -umbrella on ground ⛱ -beach with umbrella 🏖 -desert island 🏝 -mountain ⛰ -snow-capped mountain 🏔 -mount fuji 🗻 -volcano 🌋 -desert 🏜 -camping 🏕 -tent ⛺️ -railway track 🛤 -motorway 🛣 -building construction 🏗 -factory 🏭 -house 🏠 -house with garden 🏡 -house 🏘 -derelict house 🏚 -office building 🏢 -department store 🏬 -Japanese post office 🏣 -post office 🏤 -hospital 🏥 -bank 🏦 -hotel 🏨 -convenience store 🏪 -school 🏫 -love hotel 🏩 -wedding 💒 -classical building 🏛 -church ⛪️ -mosque 🕌 -synagogue 🕍 -kaaba 🕋 -shinto shrine ⛩ -map of Japan 🗾 -moon viewing ceremony 🎑 -national park 🏞 -sunrise 🌅 -sunrise over mountains 🌄 -shooting star 🌠 -sparkler 🎇 -fireworks 🎆 -sunset 🌇 -cityscape at dusk 🌆 -cityscape 🏙 -night with stars 🌃 -milky way 🌌 -bridge at night 🌉 -foggy 🌁 -watch ⌚️ -mobile phone 📱 -mobile phone with arrow 📲 -laptop computer 💻 -keyboard ⌨️ -desktop computer 🖥 -printer 🖨 -computer mouse 🖱 -trackball 🖲 -joystick 🕹 -clamp 🗜 -computer disk 💽 -floppy disk 💾 -optical disk 💿 -dvd 📀 -videocassette 📼 -camera 📷 -camera with flash 📸 -video camera 📹 -movie camera 🎥 -film projector 📽 -film frames 🎞 -telephone receiver 📞 -telephone ☎️ -pager 📟 -fax machine 📠 -television 📺 -radio 📻 -studio microphone 🎙 -level slider 🎚 -control knobs 🎛 -stopwatch ⏱ -timer clock ⏲ -alarm clock ⏰ -mantelpiece clock 🕰 -hourglass ⌛️ -hourglass with flowing sand ⏳ -satellite antenna 📡 -battery 🔋 -electric plug 🔌 -light bulb 💡 -flashlight 🔦 -candle 🕯 -wastebasket 🗑 -oil drum 🛢 -money with wings 💸 -dollar banknote 💵 -yen banknote 💴 -euro banknote 💶 -pound banknote 💷 -money bag 💰 -credit card 💳 -gem stone 💎 -balance scale ⚖️ -wrench 🔧 -hammer 🔨 -hammer and pick ⚒ -hammer and wrench 🛠 -pick ⛏ -nut and bolt 🔩 -gear ⚙️ -chains ⛓ -pistol 🔫 -bomb 💣 -kitchen knife 🔪 -dagger 🗡 -crossed swords ⚔️ -shield 🛡 -cigarette 🚬 -coffin ⚰️ -funeral urn ⚱️ -amphora 🏺 -crystal ball 🔮 -prayer beads 📿 -barber pole 💈 -alembic ⚗️ -telescope 🔭 -microscope 🔬 -hole 🕳 -pill 💊 -syringe 💉 -thermometer 🌡 -toilet 🚽 -potable water 🚰 -shower 🚿 -bathtub 🛁 -person taking bath 🛀 -bellhop bell 🛎 -key 🔑 -old key 🗝 -door 🚪 -couch and lamp 🛋 -bed 🛏 -person in bed 🛌 -framed picture 🖼 -shopping bags 🛍 -shopping cart 🛒 -wrapped gift 🎁 -balloon 🎈 -carp streamer 🎏 -ribbon 🎀 -confetti ball 🎊 -party popper 🎉 -Japanese dolls 🎎 -red paper lantern 🏮 -wind chime 🎐 -envelope ✉️ -envelope with arrow 📩 -incoming envelope 📨 -e-mail 📧 -love letter 💌 -inbox tray 📥 -outbox tray 📤 -package 📦 -label 🏷 -closed mailbox with lowered flag 📪 -closed mailbox with raised flag 📫 -open mailbox with raised flag 📬 -open mailbox with lowered flag 📭 -postbox 📮 -postal horn 📯 -scroll 📜 -page with curl 📃 -page facing up 📄 -bookmark tabs 📑 -bar chart 📊 -chart increasing 📈 -chart decreasing 📉 -spiral notepad 🗒 -spiral calendar 🗓 -tear-off calendar 📆 -calendar 📅 -card index 📇 -card file box 🗃 -ballot box with ballot 🗳 -file cabinet 🗄 -clipboard 📋 -file folder 📁 -open file folder 📂 -card index dividers 🗂 -rolled-up newspaper 🗞 -newspaper 📰 -notebook 📓 -notebook with decorative cover 📔 -ledger 📒 -closed book 📕 -green book 📗 -blue book 📘 -orange book 📙 -books 📚 -open book 📖 -bookmark 🔖 -link 🔗 -paperclip 📎 -linked paperclips 🖇 -triangular ruler 📐 -straight ruler 📏 -pushpin 📌 -round pushpin 📍 -scissors ✂️ -pen 🖊 -fountain pen 🖋 -black nib ✒️ -paintbrush 🖌 -crayon 🖍 -memo 📝 -pencil ✏️ -left-pointing magnifying glass 🔍 -right-pointing magnifying glass 🔎 -locked with pen 🔏 -locked with key 🔐 -locked 🔒 -unlocked 🔓 -red heart ❤️ -yellow heart 💛 -green heart 💚 -blue heart 💙 -purple heart 💜 -black heart 🖤 -broken heart 💔 -heavy heart exclamation ❣️ -two hearts 💕 -revolving hearts 💞 -beating heart 💓 -growing heart 💗 -sparkling heart 💖 -heart with arrow 💘 -heart with ribbon 💝 -heart decoration 💟 -peace symbol ☮️ -latin cross ✝️ -star and crescent ☪️ -om 🕉 -wheel of dharma ☸️ -star of David ✡️ -dotted six-pointed star 🔯 -menorah 🕎 -yin yang ☯️ -orthodox cross ☦️ -place of worship 🛐 -Ophiuchus ⛎ -Aries ♈️ -Taurus ♉️ -Gemini ♊️ -Cancer ♋️ -Leo ♌️ -Virgo ♍️ -Libra ♎️ -Scorpius ♏️ -Sagittarius ♐️ -Capricorn ♑️ -Aquarius ♒️ -Pisces ♓️ -ID button 🆔 -atom symbol ⚛️ -Japanese “acceptable” button 🉑 -radioactive ☢️ -biohazard ☣️ -mobile phone off 📴 -vibration mode 📳 -Japanese “not free of charge” button 🈶 -Japanese “free of charge” button 🈚️ -Japanese “application” button 🈸 -Japanese “open for business” button 🈺 -Japanese “monthly amount” button 🈷️ -eight-pointed star ✴️ -VS button 🆚 -white flower 💮 -Japanese “bargain” button 🉐 -Japanese “secret” button ㊙️ -Japanese “congratulations” button ㊗️ -Japanese “passing grade” button 🈴 -Japanese “no vacancy” button 🈵 -Japanese “discount” button 🈹 -Japanese “prohibited” button 🈲 -A button (blood type) 🅰️ -B button (blood type) 🅱️ -AB button (blood type) 🆎 -CL button 🆑 -O button (blood type) 🅾️ -SOS button 🆘 -cross mark ❌ -heavy large circle ⭕️ -stop sign 🛑 -no entry ⛔️ -name badge 📛 -prohibited 🚫 -hundred points 💯 -anger symbol 💢 -hot springs ♨️ -no pedestrians 🚷 -no littering 🚯 -no bicycles 🚳 -non-potable water 🚱 -no one under eighteen 🔞 -no mobile phones 📵 -no smoking 🚭 -exclamation mark ❗️ -white exclamation mark ❕ -question mark ❓ -white question mark ❔ -double exclamation mark ‼️ -exclamation question mark ⁉️ -dim button 🔅 -bright button 🔆 -part alternation mark 〽️ -warning ⚠️ -children crossing 🚸 -trident emblem 🔱 -fleur-de-lis ⚜️ -Japanese symbol for beginner 🔰 -recycling symbol ♻️ -white heavy check mark ✅ -Japanese “reserved” button 🈯️ -chart increasing with yen 💹 -sparkle ❇️ -eight-spoked asterisk ✳️ -cross mark button ❎ -globe with meridians 🌐 -diamond with a dot 💠 -circled M Ⓜ️ -cyclone 🌀 -zzz 💤 -ATM sign 🏧 -water closet 🚾 -wheelchair symbol ♿️ -P button 🅿️ -Japanese “vacancy” button 🈳 -Japanese “service charge” button 🈂️ -passport control 🛂 -customs 🛃 -baggage claim 🛄 -left luggage 🛅 -men’s room 🚹 -women’s room 🚺 -baby symbol 🚼 -restroom 🚻 -litter in bin sign 🚮 -cinema 🎦 -antenna bars 📶 -Japanese “here” button 🈁 -input symbols 🔣 -information ℹ️ -input latin letters 🔤 -input latin lowercase 🔡 -input latin uppercase 🔠 -NG button 🆖 -OK button 🆗 -UP! button 🆙 -COOL button 🆒 -NEW button 🆕 -FREE button 🆓 -keycap: 0 0️⃣ -keycap: 1 1️⃣ -keycap: 2 2️⃣ -keycap: 3 3️⃣ -keycap: 4 4️⃣ -keycap: 5 5️⃣ -keycap: 6 6️⃣ -keycap: 7 7️⃣ -keycap: 8 8️⃣ -keycap: 9 9️⃣ -keycap 10 🔟 -input numbers 🔢 -keycap: # #️⃣ -keycap: * *️⃣ -play button ▶️ -pause button ⏸ -play or pause button ⏯ -stop button ⏹ -record button ⏺ -next track button ⏭ -last track button ⏮ -fast-forward button ⏩ -fast reverse button ⏪ -fast up button ⏫ -fast down button ⏬ -reverse button ◀️ -up button 🔼 -down button 🔽 -right arrow ➡️ -left arrow ⬅️ -up arrow ⬆️ -down arrow ⬇️ -up-right arrow ↗️ -down-right arrow ↘️ -down-left arrow ↙️ -up-left arrow ↖️ -up-down arrow ↕️ -left-right arrow ↔️ -left arrow curving right ↪️ -right arrow curving left ↩️ -right arrow curving up ⤴️ -right arrow curving down ⤵️ -shuffle tracks button 🔀 -repeat button 🔁 -repeat single button 🔂 -anticlockwise arrows button 🔄 -clockwise vertical arrows 🔃 -musical note 🎵 -musical notes 🎶 -heavy plus sign ➕ -heavy minus sign ➖ -heavy division sign ➗ -heavy multiplication x ✖️ -heavy dollar sign 💲 -currency exchange 💱 -trade mark ™️ -copyright ©️ -registered ®️ -wavy dash 〰️ -curly loop ➰ -double curly loop ➿ -END arrow 🔚 -BACK arrow 🔙 -ON! arrow 🔛 -TOP arrow 🔝 -SOON arrow 🔜 -heavy check mark ✔️ -ballot box with check ☑️ -radio button 🔘 -white circle ⚪️ -black circle ⚫️ -red circle 🔴 -blue circle 🔵 -red triangle pointed up 🔺 -red triangle pointed down 🔻 -small orange diamond 🔸 -small blue diamond 🔹 -large orange diamond 🔶 -large blue diamond 🔷 -white square button 🔳 -black square button 🔲 -black small square ▪️ -white small square ▫️ -black medium-small square ◾️ -white medium-small square ◽️ -black medium square ◼️ -white medium square ◻️ -black large square ⬛️ -white large square ⬜️ -speaker low volume 🔈 -muted speaker 🔇 -speaker medium volume 🔉 -speaker high volume 🔊 -bell 🔔 -bell with slash 🔕 -megaphone 📣 -loudspeaker 📢 -eye in speech bubble 👁‍🗨 -speech balloon 💬 -thought balloon 💭 -right anger bubble 🗯 -spade suit ♠️ -club suit ♣️ -heart suit ♥️ -diamond suit ♦️ -joker 🃏 -flower playing cards 🎴 -mahjong red dragon 🀄️ -one o’clock 🕐 -two o’clock 🕑 -three o’clock 🕒 -four o’clock 🕓 -five o’clock 🕔 -six o’clock 🕕 -seven o’clock 🕖 -eight o’clock 🕗 -nine o’clock 🕘 -ten o’clock 🕙 -eleven o’clock 🕚 -twelve o’clock 🕛 -one-thirty 🕜 -two-thirty 🕝 -three-thirty 🕞 -four-thirty 🕟 -five-thirty 🕠 -six-thirty 🕡 -seven-thirty 🕢 -eight-thirty 🕣 -nine-thirty 🕤 -ten-thirty 🕥 -eleven-thirty 🕦 -twelve-thirty 🕧 -white flag 🏳️ -black flag 🏴 -chequered flag 🏁 -triangular flag 🚩 -rainbow flag 🏳️‍🌈 -Afghanistan 🇦🇫 -Åland Islands 🇦🇽 -Albania 🇦🇱 -Algeria 🇩🇿 -American Samoa 🇦🇸 -Andorra 🇦🇩 -Angola 🇦🇴 -Anguilla 🇦🇮 -Antarctica 🇦🇶 -Antigua & Barbuda 🇦🇬 -Argentina 🇦🇷 -Armenia 🇦🇲 -Aruba 🇦🇼 -Australia 🇦🇺 -Austria 🇦🇹 -Azerbaijan 🇦🇿 -Bahamas 🇧🇸 -Bahrain 🇧🇭 -Bangladesh 🇧🇩 -Barbados 🇧🇧 -Belarus 🇧🇾 -Belgium 🇧🇪 -Belize 🇧🇿 -Benin 🇧🇯 -Bermuda 🇧🇲 -Bhutan 🇧🇹 -Bolivia 🇧🇴 -Caribbean Netherlands 🇧🇶 -Bosnia & Herzegovina 🇧🇦 -Botswana 🇧🇼 -Brazil 🇧🇷 -British Indian Ocean Territory 🇮🇴 -British Virgin Islands 🇻🇬 -Brunei 🇧🇳 -Bulgaria 🇧🇬 -Burkina Faso 🇧🇫 -Burundi 🇧🇮 -Cape Verde 🇨🇻 -Cambodia 🇰🇭 -Cameroon 🇨🇲 -Canada 🇨🇦 -Canary Islands 🇮🇨 -Cayman Islands 🇰🇾 -Central African Republic 🇨🇫 -Chad 🇹🇩 -Chile 🇨🇱 -China 🇨🇳 -Christmas Island 🇨🇽 -Cocos (Keeling) Islands 🇨🇨 -Colombia 🇨🇴 -Comoros 🇰🇲 -Congo - Brazzaville 🇨🇬 -Congo - Kinshasa 🇨🇩 -Cook Islands 🇨🇰 -Costa Rica 🇨🇷 -Côte d’Ivoire 🇨🇮 -Croatia 🇭🇷 -Cuba 🇨🇺 -Curaçao 🇨🇼 -Cyprus 🇨🇾 -Czech Republic 🇨🇿 -Denmark 🇩🇰 -Djibouti 🇩🇯 -Dominica 🇩🇲 -Dominican Republic 🇩🇴 -Ecuador 🇪🇨 -Egypt 🇪🇬 -El Salvador 🇸🇻 -Equatorial Guinea 🇬🇶 -Eritrea 🇪🇷 -Estonia 🇪🇪 -Ethiopia 🇪🇹 -European Union 🇪🇺 -Falkland Islands 🇫🇰 -Faroe Islands 🇫🇴 -Fiji 🇫🇯 -Finland 🇫🇮 -France 🇫🇷 -French Guiana 🇬🇫 -French Polynesia 🇵🇫 -French Southern Territories 🇹🇫 -Gabon 🇬🇦 -Gambia 🇬🇲 -Georgia 🇬🇪 -Germany 🇩🇪 -Ghana 🇬🇭 -Gibraltar 🇬🇮 -Greece 🇬🇷 -Greenland 🇬🇱 -Grenada 🇬🇩 -Guadeloupe 🇬🇵 -Guam 🇬🇺 -Guatemala 🇬🇹 -Guernsey 🇬🇬 -Guinea 🇬🇳 -Guinea-Bissau 🇬🇼 -Guyana 🇬🇾 -Haiti 🇭🇹 -Honduras 🇭🇳 -Hong Kong SAR China 🇭🇰 -Hungary 🇭🇺 -Iceland 🇮🇸 -India 🇮🇳 -Indonesia 🇮🇩 -Iran 🇮🇷 -Iraq 🇮🇶 -Ireland 🇮🇪 -Isle of Man 🇮🇲 -Israel 🇮🇱 -Italy 🇮🇹 -Jamaica 🇯🇲 -Japan 🇯🇵 -crossed flags 🎌 -Jersey 🇯🇪 -Jordan 🇯🇴 -Kazakhstan 🇰🇿 -Kenya 🇰🇪 -Kiribati 🇰🇮 -Kosovo 🇽🇰 -Kuwait 🇰🇼 -Kyrgyzstan 🇰🇬 -Laos 🇱🇦 -Latvia 🇱🇻 -Lebanon 🇱🇧 -Lesotho 🇱🇸 -Liberia 🇱🇷 -Libya 🇱🇾 -Liechtenstein 🇱🇮 -Lithuania 🇱🇹 -Luxembourg 🇱🇺 -Macau SAR China 🇲🇴 -Macedonia 🇲🇰 -Madagascar 🇲🇬 -Malawi 🇲🇼 -Malaysia 🇲🇾 -Maldives 🇲🇻 -Mali 🇲🇱 -Malta 🇲🇹 -Marshall Islands 🇲🇭 -Martinique 🇲🇶 -Mauritania 🇲🇷 -Mauritius 🇲🇺 -Mayotte 🇾🇹 -Mexico 🇲🇽 -Micronesia 🇫🇲 -Moldova 🇲🇩 -Monaco 🇲🇨 -Mongolia 🇲🇳 -Montenegro 🇲🇪 -Montserrat 🇲🇸 -Morocco 🇲🇦 -Mozambique 🇲🇿 -Myanmar (Burma) 🇲🇲 -Namibia 🇳🇦 -Nauru 🇳🇷 -Nepal 🇳🇵 -Netherlands 🇳🇱 -New Caledonia 🇳🇨 -New Zealand 🇳🇿 -Nicaragua 🇳🇮 -Niger 🇳🇪 -Nigeria 🇳🇬 -Niue 🇳🇺 -Norfolk Island 🇳🇫 -Northern Mariana Islands 🇲🇵 -North Korea 🇰🇵 -Norway 🇳🇴 -Oman 🇴🇲 -Pakistan 🇵🇰 -Palau 🇵🇼 -Palestinian Territories 🇵🇸 -Panama 🇵🇦 -Papua New Guinea 🇵🇬 -Paraguay 🇵🇾 -Peru 🇵🇪 -Philippines 🇵🇭 -Pitcairn Islands 🇵🇳 -Poland 🇵🇱 -Portugal 🇵🇹 -Puerto Rico 🇵🇷 -Qatar 🇶🇦 -Réunion 🇷🇪 -Romania 🇷🇴 -Russia 🇷🇺 -Rwanda 🇷🇼 -St. Barthélemy 🇧🇱 -St. Helena 🇸🇭 -St. Kitts & Nevis 🇰🇳 -St. Lucia 🇱🇨 -St. Pierre & Miquelon 🇵🇲 -St. Vincent & Grenadines 🇻🇨 -Samoa 🇼🇸 -San Marino 🇸🇲 -São Tomé & Príncipe 🇸🇹 -Saudi Arabia 🇸🇦 -Senegal 🇸🇳 -Serbia 🇷🇸 -Seychelles 🇸🇨 -Sierra Leone 🇸🇱 -Singapore 🇸🇬 -Sint Maarten 🇸🇽 -Slovakia 🇸🇰 -Slovenia 🇸🇮 -Solomon Islands 🇸🇧 -Somalia 🇸🇴 -South Africa 🇿🇦 -South Georgia & South Sandwich Islands 🇬🇸 -South Korea 🇰🇷 -South Sudan 🇸🇸 -Spain 🇪🇸 -Sri Lanka 🇱🇰 -Sudan 🇸🇩 -Suriname 🇸🇷 -Swaziland 🇸🇿 -Sweden 🇸🇪 -Switzerland 🇨🇭 -Syria 🇸🇾 -Taiwan 🇹🇼 -Tajikistan 🇹🇯 -Tanzania 🇹🇿 -Thailand 🇹🇭 -Timor-Leste 🇹🇱 -Togo 🇹🇬 -Tokelau 🇹🇰 -Tonga 🇹🇴 -Trinidad & Tobago 🇹🇹 -Tunisia 🇹🇳 -Turkey 🇹🇷 -Turkmenistan 🇹🇲 -Turks & Caicos Islands 🇹🇨 -Tuvalu 🇹🇻 -Uganda 🇺🇬 -Ukraine 🇺🇦 -United Arab Emirates 🇦🇪 -United Kingdom 🇬🇧 -United States 🇺🇸 -U.S. Virgin Islands 🇻🇮 -Uruguay 🇺🇾 -Uzbekistan 🇺🇿 -Vanuatu 🇻🇺 -Vatican City 🇻🇦 -Venezuela 🇻🇪 -Vietnam 🇻🇳 -Wallis & Futuna 🇼🇫 -Western Sahara 🇪🇭 -Yemen 🇾🇪 -Zambia 🇿🇲 -Zimbabwe 🇿🇼 diff --git a/xmonad/scripts/playerctl-play-pause.sh b/xmonad/scripts/playerctl-play-pause.sh deleted file mode 100755 index a24733a..0000000 --- a/xmonad/scripts/playerctl-play-pause.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh - -if [ -z "${1:-}" ]; then - playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" play-pause -fi - -if [ "$(playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" status)" = 'Paused' ]; then - cat ~/.cache/euandreh/mpris-player.txt >> ~/.cache/euandreh/mpris-player-xmobar.txt -elif [ "$(playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" status)" = 'Playing' ]; then - printf '%s: %s\n' \ - "$(cat ~/.cache/euandreh/mpris-player.txt)" \ - "$(playerctl --player="$(cat ~/.cache/euandreh/mpris-player.txt)" metadata xesam:title)" \ - >> ~/.cache/euandreh/mpris-player-xmobar.txt -fi diff --git a/xmonad/scripts/rotate-mpris-player.sh b/xmonad/scripts/rotate-mpris-player.sh deleted file mode 100755 index ce93e95..0000000 --- a/xmonad/scripts/rotate-mpris-player.sh +++ /dev/null @@ -1,30 +0,0 @@ -#!/bin/sh -set -eu - -mkdir -p "$HOME/.cache/euandreh/" -CURRENT_PLAYER_PATH="$HOME/.cache/euandreh/mpris-player.txt" -AVAILABLE_PLAYERS="$(playerctl --list-all | sort)" -CURRENT_PLAYER="$(cat "$CURRENT_PLAYER_PATH" ||:)" - -pick_first() { - echo "$AVAILABLE_PLAYERS" | head -n1 > "$CURRENT_PLAYER_PATH" -} - -if [ -z "$CURRENT_PLAYER" ]; then - pick_first -elif ! echo "$AVAILABLE_PLAYERS" | grep -q "$CURRENT_PLAYER"; then - # Unknown $CURRENT_PLAYER, pick anyone - pick_first -else - INDEX="$(echo "$AVAILABLE_PLAYERS" | grep -n "$CURRENT_PLAYER" | cut -d: -f1)" - LENGTH="$(echo "$AVAILABLE_PLAYERS" | wc -l)" - if [ "$INDEX" = "$LENGTH" ]; then - # Reached the end of the $AVAILABLE_PLAYERS list, wrapping - pick_first - else - # Get the next player instead - echo "$AVAILABLE_PLAYERS" | awk -v idx="$INDEX" 'NR == idx+1 {print}' > "$CURRENT_PLAYER_PATH" - fi -fi - -sh ~/dev/libre/dotfiles/xmonad/scripts/playerctl-play-pause.sh --refresh-only diff --git a/xmonad/scripts/toggle-pulseaudio-sink.sh b/xmonad/scripts/toggle-pulseaudio-sink.sh deleted file mode 100755 index 90f5734..0000000 --- a/xmonad/scripts/toggle-pulseaudio-sink.sh +++ /dev/null @@ -1,14 +0,0 @@ -#!/bin/sh -set -eu - -# This script assumes that at most 2 sinks exist at any time. -# When this premise is no longer true, it needs to be upgraded. - -CURRENT="$(pacmd list-sinks | grep '\* index' | cut -d: -f2 | tr -d ' ')" -OTHER="$(pacmd list-sinks | grep index | grep -v '\* index' | tail -n1 | cut -d: -f2 | tr -d ' ')" - -if [ "$CURRENT" = 0 ]; then - pacmd set-default-sink "$OTHER" -else - pacmd set-default-sink 0 -fi diff --git a/xmonad/scripts/xmobar-mail.sh b/xmonad/scripts/xmobar-mail.sh deleted file mode 100755 index 5f31705..0000000 --- a/xmonad/scripts/xmobar-mail.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -set -eu - -while true; do - printf "mail: %s/%s - %s\n" "$(notmuch count tag:unread AND \(tag:to-me OR to:nubank.com.br OR to:euandre.org\) AND NOT tag:killed AND NOT tag:archive)" "$(notmuch count tag:inbox AND \(tag:to-me OR to:nubank.com.br OR to:euandre.org\) AND NOT tag:killed AND NOT tag:archive)" "$(msmtp-queue -d | grep -c '^From')" - if acpi -a | grep -q off-line; then - sleep $((60 * 15)) - else - sleep $((60 * 1)) - fi -done diff --git a/xmonad/scripts/xmobar-mpris.sh b/xmonad/scripts/xmobar-mpris.sh deleted file mode 100755 index 3ac4886..0000000 --- a/xmonad/scripts/xmobar-mpris.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -CUR_PATH="$HOME/.cache/euandreh/mpris-player-xmobar.txt" -mkdir -p "$(dirname "$CUR_PATH")" -touch "$CUR_PATH" - -tail -f "$CUR_PATH" 2> /dev/null diff --git a/xmonad/scripts/xmobar-notifications.sh b/xmonad/scripts/xmobar-notifications.sh deleted file mode 100755 index d05a2d4..0000000 --- a/xmonad/scripts/xmobar-notifications.sh +++ /dev/null @@ -1,8 +0,0 @@ -#!/bin/sh -set -eu - -CUR_PATH="$HOME/.cache/euandreh/xmobar-notifications.txt" -mkdir -p "$(dirname "$CUR_PATH")" -touch "$CUR_PATH" - -tail -f "$CUR_PATH" 2> /dev/null diff --git a/xmonad/scripts/zero-brightness.sh b/xmonad/scripts/zero-brightness.sh deleted file mode 100755 index c487dd3..0000000 --- a/xmonad/scripts/zero-brightness.sh +++ /dev/null @@ -1,11 +0,0 @@ -#!/bin/sh -set -eux - -# base dir for backlight class -BASEDIR='/sys/class/backlight/' - -# get the backlight handler -HANDLER="${BASEDIR}$(ls "${BASEDIR}")" - -# set the new brightness value -echo 0 > "${HANDLER}/brightness" || sudo chmod 666 "${HANDLER}/brightness" -- cgit v1.2.3