Compare commits

...

186 Commits

Author SHA1 Message Date
Nathan Dwarshuis 3037d399b0 ENH update packages 2024-08-18 10:05:16 -04:00
Nathan Dwarshuis 99a7bdbcc9 ENH update packages 2024-08-11 10:34:00 -04:00
Nathan Dwarshuis 955c0e6a29 ENH update packages 2024-08-04 12:21:49 -04:00
Nathan Dwarshuis 4bcad96690 ENH update packages 2024-07-28 09:53:20 -04:00
Nathan Dwarshuis 53b136fed8 ENH update packages 2024-07-21 10:12:24 -04:00
Nathan Dwarshuis 99f8e459c5 ENH update packages 2024-07-14 08:05:50 -04:00
Nathan Dwarshuis 4664df1312 ENH don't use useless calendar 2024-07-07 10:57:52 -04:00
Nathan Dwarshuis a2fed80ae7 ENH update packages 2024-07-07 10:35:06 -04:00
Nathan Dwarshuis e375584661 ENH update packages 2024-06-30 14:46:16 -04:00
Nathan Dwarshuis d52ae5bd22 ENH update packages 2024-06-23 15:47:51 -04:00
Nathan Dwarshuis 20a38ace1d ENH update packages 2024-06-16 06:42:54 -04:00
Nathan Dwarshuis c4d3477183 ENH update packages 2024-06-09 10:31:53 -04:00
Nathan Dwarshuis 7425f53b94 ENH update packages 2024-06-02 20:49:57 -04:00
Nathan Dwarshuis 07b78d9cc7 ENH update packages 2024-05-26 09:45:35 -04:00
Nathan Dwarshuis c0fb175b28 ENH update packages 2024-05-19 09:53:26 -04:00
Nathan Dwarshuis 58c356237a ENH update packages 2024-05-12 11:48:26 -04:00
Nathan Dwarshuis e65b341abe ENH disable pyenv 2024-05-06 21:57:06 -04:00
Nathan Dwarshuis 6067be3d40 ENH update packages 2024-05-05 12:01:44 -04:00
Nathan Dwarshuis fa844f5e16 ENH update packages 2024-04-29 21:24:08 -04:00
Nathan Dwarshuis 1ff53fe043 ENH update packages 2024-04-21 10:41:16 -04:00
Nathan Dwarshuis 0d18d3efb6 ENH update packages 2024-04-14 10:51:47 -04:00
Nathan Dwarshuis 36d2040194 ENH update packages 2024-04-07 07:02:38 -04:00
Nathan Dwarshuis 13ab8b24bf ENH update packages 2024-03-31 08:21:25 -04:00
Nathan Dwarshuis 6624ce05bf FIX another quoting bug 2024-03-30 14:32:15 -04:00
Nathan Dwarshuis b18e7ac237 FIX mime type bugs 2024-03-30 14:28:04 -04:00
Nathan Dwarshuis cec9af4ecb ENH update packages 2024-03-17 10:33:00 -04:00
Nathan Dwarshuis 4aa2389cb0 ADD mbsync override script 2024-03-14 21:33:59 -04:00
Nathan Dwarshuis 0d17555500 FIX typo 2024-03-14 10:19:32 -04:00
Nathan Dwarshuis 6df300b58a ENH make email config modular 2024-03-14 10:19:08 -04:00
Nathan Dwarshuis 810f759d1c FIX mime type matching 2024-03-11 13:00:38 -04:00
Nathan Dwarshuis 8e7f54fea6 ENH update packages 2024-03-10 09:42:34 -04:00
Nathan Dwarshuis 3d4fe298ad FIX remove silly border around logo 2024-03-05 09:21:42 -05:00
Nathan Dwarshuis 4a71191a9d ENH disable systemd 2024-03-04 21:16:29 -05:00
Nathan Dwarshuis ebaf5055ef ADD restart options 2024-03-04 21:15:42 -05:00
Nathan Dwarshuis b04ba759c9 ADD master control file 2024-03-04 20:49:16 -05:00
Nathan Dwarshuis 520477884b ADD toggle for light and dark mode 2024-03-04 15:31:55 -05:00
Nathan Dwarshuis 24c327dfd9 ENH update packages 2024-03-03 10:20:10 -05:00
Nathan Dwarshuis caaa0d4597 ENH remove journal from org 2024-03-03 10:20:03 -05:00
Nathan Dwarshuis e27ecc5547 ENH make junk a bit more symbolically sassay 2024-02-29 09:43:00 -05:00
Nathan Dwarshuis db5b994d9e ADD mu4e spam folder 2024-02-28 22:43:19 -05:00
Nathan Dwarshuis 723955a12d ENH update packages 2024-02-25 10:24:03 -05:00
Nathan Dwarshuis a6ef9a3bba ENH remove done entries from link menu 2024-02-19 18:07:49 -05:00
Nathan Dwarshuis 3c1808b652 ENH update packages 2024-02-18 08:15:07 -05:00
Nathan Dwarshuis df12172de1 ENH update packages 2024-02-11 10:25:22 -05:00
Nathan Dwarshuis 37353d6912 ENH update packages 2024-02-04 11:42:34 -05:00
Nathan Dwarshuis 69afcc47bc ENH update packages 2024-01-28 09:56:11 -05:00
Nathan Dwarshuis 3ff5ee83e7 ENH update packages 2024-01-22 10:09:13 -05:00
Nathan Dwarshuis 994635859a ENH update packages 2024-01-14 15:27:03 -05:00
Nathan Dwarshuis 003ea4b0f9 ADD reference targets I forgot 2024-01-12 09:52:36 -05:00
Nathan Dwarshuis 5234596b4c ENH update packages 2024-01-07 11:57:17 -05:00
Nathan Dwarshuis 5af5d4952e ENH commit git buffers in emacs natively 2024-01-07 11:05:03 -05:00
Nathan Dwarshuis acef51b7d6 ADD mu sync script 2024-01-07 10:03:25 -05:00
Nathan Dwarshuis a1010506d8 ADD startup scripts 2024-01-07 09:25:42 -05:00
Nathan Dwarshuis bc9842709c FIX silly bug 2024-01-01 21:52:17 -05:00
Nathan Dwarshuis 7b409b69c5 ENH update packages 2023-12-31 10:45:56 -05:00
Nathan Dwarshuis fb752313ee ENH update packages 2023-12-26 10:38:31 -05:00
Nathan Dwarshuis fd3c511a5d ENH update packages 2023-12-17 15:34:53 -05:00
Nathan Dwarshuis 58659bec49 ENH update packages 2023-12-10 16:21:17 -05:00
Nathan Dwarshuis c1aa4a63b1 ENH update packages 2023-12-03 10:29:59 -05:00
Nathan Dwarshuis ef69737080 ENH update packages 2023-11-26 22:39:08 -05:00
Nathan Dwarshuis 44dccfc006 ENH update packages 2023-11-20 10:23:34 -05:00
Nathan Dwarshuis a6f137d0db ENH update packages 2023-11-13 10:51:45 -05:00
Nathan Dwarshuis 237cf43c74 ENH update packages 2023-11-08 19:35:26 -05:00
Nathan Dwarshuis 65d4152d27 ENH update pckages 2023-10-29 19:45:25 -04:00
Nathan Dwarshuis 4071cf4f68 ENH update packages 2023-10-23 23:02:42 -04:00
Nathan Dwarshuis a45f0414d7 ENH update packages 2023-10-15 14:50:32 -04:00
Nathan Dwarshuis 307cb2676b ENH update packages 2023-10-08 17:18:57 -04:00
Nathan Dwarshuis 94c67f76eb ENH don't use pyenv hook unless we need it 2023-10-06 16:43:14 -04:00
Nathan Dwarshuis e18db58d0c ENH update packages 2023-10-01 15:44:09 -04:00
Nathan Dwarshuis cb1eda831f ENH update packages 2023-09-24 14:48:06 -04:00
Nathan Dwarshuis 894483c013 ENH update packages 2023-09-17 14:56:21 -04:00
Nathan Dwarshuis 0ae075ba75 ENH update packages 2023-09-12 10:32:52 -04:00
Nathan Dwarshuis 1d524aaff2 ENH update packages 2023-09-03 16:29:51 -04:00
Nathan Dwarshuis ea09d97957 ADD bats 2023-09-03 16:29:47 -04:00
Nathan Dwarshuis 39d0ddc2bd ENH update packages 2023-08-28 13:05:13 -04:00
Nathan Dwarshuis adbac12265 ENH update packages 2023-08-20 17:07:12 -04:00
Nathan Dwarshuis 0b98573f79 ENH upate packages 2023-08-13 14:42:12 -04:00
Nathan Dwarshuis 90b48c11b7 FIX ord folding and arrows 2023-08-13 14:42:04 -04:00
Nathan Dwarshuis ebda9d0079 ENH update packages 2023-08-06 23:26:39 -04:00
Nathan Dwarshuis 359e53f581 ENH update packages 2023-07-30 18:31:53 -04:00
Nathan Dwarshuis 34e031d440 ENH update packages 2023-07-23 14:31:08 -04:00
Nathan Dwarshuis d9f78ffb1f ENH update packages 2023-07-16 22:30:49 -04:00
Nathan Dwarshuis 214257ff55 FIX haskell-flycheck bug 2023-07-16 22:30:36 -04:00
Nathan Dwarshuis 7420de7ca3 FIX ess comint color thing 2023-07-09 16:12:12 -04:00
Nathan Dwarshuis 4a3bfe0231 ENH update packages 2023-07-09 14:34:46 -04:00
Nathan Dwarshuis 438bf90289 ENH update packages 2023-07-02 14:05:31 -04:00
Nathan Dwarshuis 64ab96f3cc ENH update packages 2023-06-25 16:10:54 -04:00
Nathan Dwarshuis 49c1ad7a40 ENH update packages 2023-06-18 19:30:54 -04:00
Nathan Dwarshuis eda78d7510 ENH update packages 2023-06-11 14:25:57 -04:00
Nathan Dwarshuis 7ee74cfc69 ENH update packages 2023-06-04 14:00:33 -04:00
Nathan Dwarshuis c32e345f24 ENH update packages 2023-05-28 14:02:09 -04:00
Nathan Dwarshuis 8e8434f8c5 ENH update packages 2023-05-22 21:57:19 -04:00
Nathan Dwarshuis 3048002a3b ENH update packages 2023-05-14 14:36:27 -04:00
Nathan Dwarshuis 571ad2adcd ENH update packages 2023-05-07 15:15:08 -04:00
Nathan Dwarshuis 0a928fa3d6 ENH update packages 2023-04-30 17:54:05 -04:00
Nathan Dwarshuis 04a06d7fa2 ENH update packages 2023-04-23 14:24:07 -04:00
Nathan Dwarshuis 7966b74502 ENH make email not clobber other windows 2023-04-16 17:30:35 -04:00
Nathan Dwarshuis 1b0ab263d3 ENH update packages 2023-04-16 17:29:48 -04:00
Nathan Dwarshuis 2f2be7db16 ENH update packages 2023-04-09 18:36:38 -04:00
Nathan Dwarshuis f040bba676 ENH remove org-mu4e (dead pacakage?) 2023-04-02 18:39:42 -04:00
Nathan Dwarshuis d540b7170d ENH update packages 2023-04-02 18:30:33 -04:00
Nathan Dwarshuis b5968b2016 ENH search for hlint binary properly in flycheck 2023-04-01 15:06:47 -04:00
Nathan Dwarshuis 773e23b81f ENH update mu maildir 2023-03-29 23:29:03 -04:00
Nathan Dwarshuis f262bb4cc1 ENH update packages 2023-03-26 15:34:16 -04:00
Nathan Dwarshuis 5397dde3a1 ENH update packages 2023-03-19 14:25:11 -04:00
Nathan Dwarshuis 39a5b01707 ENH don't depend on system files for python dev 2023-03-12 12:31:26 -04:00
Nathan Dwarshuis a7bfefd99b ENH update packages 2023-03-12 12:28:35 -04:00
Nathan Dwarshuis 3cd1464239 ADD nix 2023-03-12 12:28:29 -04:00
Nathan Dwarshuis 0ad7d01fc7 ENH update packages 2023-03-05 13:52:39 -05:00
Nathan Dwarshuis 94748930d5 ENH use better markdown mode 2023-03-05 13:52:31 -05:00
Nathan Dwarshuis bcf335a45f ENH update packages 2023-02-26 13:22:04 -05:00
Nathan Dwarshuis d790dbe3db ENH update versions 2023-02-19 16:03:43 -05:00
Nathan Dwarshuis e1e91664a5 ENH bump versions 2023-02-12 13:52:00 -05:00
Nathan Dwarshuis b7abf1ae1e ADD haskell flycheck mode to integrate better with cabal/stack 2023-02-12 13:51:42 -05:00
Nathan Dwarshuis e2ac704185 ENH update packages 2023-02-05 13:47:34 -05:00
Nathan Dwarshuis ccbe4b53f0 ENH update packages 2023-01-29 13:49:31 -05:00
Nathan Dwarshuis beaeb82f62 ENH update packages 2023-01-22 14:18:41 -05:00
Nathan Dwarshuis c0c67bed4d ENH update packages 2023-01-16 15:06:50 -05:00
Nathan Dwarshuis 97d3986ebe ENH use r-styler and default to rstudio style 2023-01-09 20:48:56 -05:00
Nathan Dwarshuis ade348c0d6 ENH update packages 2023-01-08 14:06:29 -05:00
Nathan Dwarshuis c8d9c5b373 ENH update packages 2023-01-01 13:37:30 -05:00
Nathan Dwarshuis 55e04349eb ENH use better formatter for haskell 2023-01-01 13:37:24 -05:00
Nathan Dwarshuis 51c6b0bd98 ENH increase dhall type check timeout 2022-12-21 22:51:13 -05:00
Nathan Dwarshuis 6c57f3c661 ENH update packages 2022-12-18 13:36:59 -05:00
Nathan Dwarshuis 08894d7161 ENH remove ledger 2022-12-11 13:01:56 -05:00
Nathan Dwarshuis 73fda400e4 ADD function to toggle dhall type check 2022-12-11 13:00:33 -05:00
Nathan Dwarshuis 5a26514c86 ENH update packages 2022-12-11 13:00:27 -05:00
Nathan Dwarshuis 1a2175cc84 ENH update packages 2022-12-04 13:22:47 -05:00
Nathan Dwarshuis d5047569ec ENH update packages 2022-11-27 14:50:40 -05:00
Nathan Dwarshuis e54a7c31cf ENH update packages 2022-11-20 13:28:58 -05:00
Nathan Dwarshuis ab375567d4 ENH update packages 2022-11-13 22:22:28 -05:00
Nathan Dwarshuis 986224403a ENH update packages 2022-11-05 11:57:15 -04:00
Nathan Dwarshuis f6b2b80f36 ENH update packages 2022-10-30 14:30:25 -04:00
Nathan Dwarshuis af878fe5c2 ENH update packages 2022-10-23 14:48:31 -04:00
Nathan Dwarshuis 5eced7a6a6 ENH don't hide markup (not worth it) 2022-10-16 19:11:46 -04:00
Nathan Dwarshuis 4089810579 ENH update packages 2022-10-16 15:42:57 -04:00
Nathan Dwarshuis b2d062e0bd ENH update packages 2022-10-02 14:38:27 -04:00
Nathan Dwarshuis 184c5ecde0 ENH update packages 2022-09-25 14:36:38 -04:00
Nathan Dwarshuis 768944edb1 REF remove all property drawers 2022-09-18 19:46:35 -04:00
Nathan Dwarshuis d6edb0dd27 REF remove TOC 2022-09-18 19:40:34 -04:00
Nathan Dwarshuis 43a55701b0 ENH update packages 2022-09-18 14:33:13 -04:00
Nathan Dwarshuis b1de625f0d ENH hide markdown markup by default 2022-09-17 19:09:49 -04:00
Nathan Dwarshuis 54bbdfa056 ENH hide org formatting by default 2022-09-17 19:07:01 -04:00
Nathan Dwarshuis 8c486c6aa2 ENH update packages 2022-09-11 14:19:07 -04:00
Nathan Dwarshuis 81274de278 ENH upate packages 2022-09-04 14:28:24 -04:00
Nathan Dwarshuis 8912a63ad7 ENH update packages 2022-08-28 16:22:05 -04:00
Nathan Dwarshuis adf94f0f0f ENH update packages 2022-08-21 15:33:39 -04:00
Nathan Dwarshuis 7770eabe38 ENH update packages 2022-08-14 14:46:11 -04:00
Nathan Dwarshuis 75a7bacb68 WIP add weekly tests 2022-08-14 14:46:05 -04:00
Nathan Dwarshuis 95e03b8eb7 ADD tests for ltg and svg nodes 2022-08-07 22:50:14 -04:00
Nathan Dwarshuis edb4c36eeb ENH update packages 2022-08-07 15:05:32 -04:00
Nathan Dwarshuis aa4e4dffae ADD dhall support 2022-08-06 18:47:52 -04:00
Nathan Dwarshuis d999489572 ENH make highlight modes toggle-able 2022-08-04 12:19:07 -04:00
Nathan Dwarshuis 8035566114 ENH make yaml readable 2022-08-02 12:02:16 -04:00
Nathan Dwarshuis 2e9166fec8 ENH make script to list runtime packages 2022-08-01 00:30:02 -04:00
Nathan Dwarshuis cadf7dbe5a ENH update packages 2022-07-31 15:26:50 -04:00
Nathan Dwarshuis 3d0370f92a ENH update packages 2022-07-24 14:47:03 -04:00
Nathan Dwarshuis 2c6aff682e FIX bugs 2022-07-21 22:49:58 -04:00
Nathan Dwarshuis 24c4701516 ADD straight boot 2022-07-21 18:26:45 -04:00
Nathan Dwarshuis 53e9cc898c ENH update packages 2022-07-17 15:54:04 -04:00
Nathan Dwarshuis 43d3ee862b ENH update packages 2022-07-10 10:23:02 -04:00
Nathan Dwarshuis 19fa7fdfe8 ENH update packages 2022-07-03 14:39:38 -04:00
Nathan Dwarshuis 4cea560dae ENH update install script 2022-06-29 20:51:39 -04:00
Nathan Dwarshuis 02a1069d3c ENH update mu4e symbols 2022-06-29 20:51:19 -04:00
Nathan Dwarshuis 029fcc8cbd ADD ledger mode 2022-06-29 20:51:11 -04:00
Nathan Dwarshuis 66f1844dbb ENH update packages 2022-06-27 20:26:39 -04:00
Nathan Dwarshuis 905a394b40 FIX turn off show-paren-mode 2022-06-21 16:30:18 -04:00
Nathan Dwarshuis ce76d10b65 FIX datetime typos 2022-06-19 14:21:56 -04:00
Nathan Dwarshuis 1b46baf90c ENH update packages 2022-06-19 14:21:35 -04:00
Nathan Dwarshuis 9c0a153872 ENH clean up system dep code 2022-06-14 20:29:44 -04:00
Nathan Dwarshuis efe3eac7c3 ADD test for project deadline 2022-06-12 19:32:38 -04:00
Nathan Dwarshuis ca17ee15d5 ADD a bunch of buffer status tests for actions 2022-06-12 18:07:10 -04:00
Nathan Dwarshuis d58c1b0458 ENH update packages 2022-06-12 15:41:58 -04:00
Nathan Dwarshuis 96a0bdd962 ENH use partitioned timestamps in action projects 2022-06-11 23:29:12 -04:00
Nathan Dwarshuis dc7c134045 ENH make iterator date logic simpler 2022-06-11 22:56:07 -04:00
Nathan Dwarshuis e4ae5ca4a1 ENH make errors for sub-iterators more precise (and working) 2022-06-11 20:13:49 -04:00
Nathan Dwarshuis 33ca950edc ADD a bunch of tests for actions 2022-06-10 19:34:11 -04:00
Nathan Dwarshuis 334681d6fc FIX typo 2022-06-10 19:34:03 -04:00
Nathan Dwarshuis 99a945ad0e ADD test helpers for left and plist 2022-06-08 19:27:16 -04:00
Nathan Dwarshuis eb84acd778 ADD barely useful dag test suite 2022-06-07 23:12:03 -04:00
Nathan Dwarshuis a2b738c704 FIX make new property drawers not demented 2022-06-07 22:53:19 -04:00
Nathan Dwarshuis e263af73ef ADD a bunch of org files to test with the dag framework 2022-06-07 22:53:05 -04:00
Nathan Dwarshuis b5fef3b7eb FIX random side effects when updating network status 2022-06-07 19:13:00 -04:00
Nathan Dwarshuis 4171bb788f FIX child scheds not being propagated in trees 2022-06-07 19:12:09 -04:00
Nathan Dwarshuis 94cefaa250 FIX ignore 'nodes' that don't have property drawers at all 2022-06-07 17:49:37 -04:00
Nathan Dwarshuis bd40a9bbf9 Merge branch 'propagate_scheduled' 2022-06-05 14:40:47 -04:00
27 changed files with 2099 additions and 1361 deletions

6
.gitignore vendored
View File

@ -2,7 +2,9 @@
!.gitignore
!README.org
!init.el
!install_deps
!straight-boot.el
!runtime_pkgs
!bin
# track versions of installed packages
!straight
@ -23,4 +25,4 @@ local/*
!.github
*.elc
*.elc

21
bin/autogit Executable file
View File

@ -0,0 +1,21 @@
#!/bin/sh
### Add org file changes to git repo
for REPO in $1
do
echo "repository: $REPO"
eval "cd $REPO"
# check for errors
if ! git fsck --strict > /dev/null 2>&1; then
notify-send "Org git commit failed."
fi
# remove deleted files
git ls-files --deleted -z | xargs -0 git rm >/dev/null 2>&1
# add new files
git add . >/dev/null 2>&1
git commit -m "$(date)"
# push
git push origin master
done
echo Done

5
bin/emacs-start Executable file
View File

@ -0,0 +1,5 @@
#! /bin/bash
# start the emacs daemon
emacs --fg-daemon > /dev/null 2>&1

5
bin/emacs-stop Executable file
View File

@ -0,0 +1,5 @@
#! /bin/bash
# stop the emacs daemon
emacsclient --eval "(kill-emacs)"

76
bin/emacs_ctl Executable file
View File

@ -0,0 +1,76 @@
#!/bin/bash
state=/tmp/emacs-use-dark-mode
start_daemon () {
emacs --fg-daemon > /dev/null 2>&1
}
stop_daemon () {
emacsclient --eval "(kill-emacs)" 2> /dev/null
}
kill_daemon () {
killall emacsclient 2> /dev/null
killall emacs 2> /dev/null
}
restart_daemon () {
stop_daemon
start_daemon
}
hard_restart_daemon () {
kill_daemon
start_daemon
}
set_light () {
echo 0 > "$state"
}
set_dark () {
echo 1 > "$state"
}
if [[ -z "$1" ]]; then
echo "Need a command to perform"
exit 1
elif [[ "$1" == "start" ]]; then
start_daemon &
elif [[ "$1" == "stop" ]]; then
stop_daemon
elif [[ "$1" == "kill" ]]; then
kill_daemon
elif [[ "$1" == "restart" ]]; then
restart_daemon &
elif [[ "$1" == "hard_restart" ]]; then
hard_restart_daemon &
elif [[ "$1" == "theme" ]]; then
if [[ "$2" == "toggle" ]]; then
# if no state file assume light theme
if [[ ! -f "$state" ]]; then
set_light
elif [[ "$(cat $state)" == 0 ]]; then
set_dark
else
set_light
fi
elif [[ "$2" == "light" ]]; then
set_light
elif [[ "$2" == "dark" ]]; then
set_dark
else
echo 'Invlalid theme command'
exit 1
fi
if [ "$3" == "restart" ]; then
restart_daemon &
elif [ "$3" == "hard_restart" ]; then
hard_restart_daemon &
fi
else
echo 'Invalid command'
exit 1
fi

10
bin/mbsync Executable file
View File

@ -0,0 +1,10 @@
#! /bin/sh
rcpath=$XDG_CONFIG_HOME/emacs/local/lib/mu4e/mbsyncrc
if [ ! -f $rcpath ]; then
echo "mbsyncrc does not exist"
exit 1
fi
/usr/bin/mbsync -c "$rcpath" "$@"

12
bin/mu-index-emacs-maybe Executable file
View File

@ -0,0 +1,12 @@
#! /bin/sh
## indexes mu depending on whether emacs mu4e is running
## assume the mu server is only started by mu4e
if pgrep -fx '/usr/bin/mu server' > /dev/null; then
echo indexing mu through emacs
emacsclient -e '(mu4e-update-index)' > /dev/null
else
echo indexing mu natively
mu index
fi

File diff suppressed because it is too large Load Diff

Binary file not shown.

Before

Width:  |  Height:  |  Size: 31 KiB

After

Width:  |  Height:  |  Size: 14 KiB

38
init.el
View File

@ -1,42 +1,6 @@
;;;; init the straight package manager
;; disable automatic package updates
(setq straight-check-for-modifications nil)
;; watch for repo modifications if we have python3 and watchexec
;; otherwise just use a save hook
;; (setq straight-check-for-modifications
;; (if (and (executable-find "python3")
;; (executable-find "watchexec"))
;; '(watch-files find-when-checking)
;; '(check-on-save find-when-checking)))
;; add pinned packages to straight
;; (setq straight-profiles
;; '((nil . "default.el")
;; ;; Packages which are pinned to a specific commit.
;; (pinned . "pinned.el")))
;; bootstrap straight
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; load experimental straight functions for pinning
;; (autoload #'straight-x-pull-all "straight-x")
;; (autoload #'straight-x-freeze-versions "straight-x")
;; install use-package itself
(straight-use-package 'use-package)
(load-file (expand-file-name "straight-boot.el" user-emacs-directory))
;; configure all config paths before anything else is loaded
(use-package no-littering :straight t)

View File

@ -1,18 +0,0 @@
#!/bin/bash
## Install all dependencies for emacs to run at full capacity
if emacs -batch -l "init.el"; then
IFS=' ' read -r -a emacs_pkgs \
< <(emacs -batch -l "init.el" --eval \
'(print (format "pkgs: %s" (s-join " " (nd/get-dependencies (list :pacman :aur)))))' \
2>/dev/null | \
sed -n -e 's/"pkgs: \(.*\)"/\1/p')
echo "Emacs requires the following system pkgs: ${emacs_pkgs[*]}"
else
echo "Could not get list of emacs dependencies."
emacs_pkgs=()
fi
MAKEFLAGS="-j$(nproc)" \
yay --needed --noconfirm --norebuild --removemake -S "${emacs_pkgs[@]}"

1
local/lib/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
mu4e

View File

@ -36,16 +36,20 @@ left/right slot."
;; monad-y things
(defmacro either>>= (either form)
"Bind EITHER to FORM where the right slot is bound to 'it'."
(declare (indent 1))
(defmacro either-as>>= (sym either form)
"Bind EITHER to FORM where the right slot is bound to SYM."
(declare (indent 2))
(let ((e (make-symbol "--either")))
`(let ((,e ,either))
(pcase ,e
(`(:left ,_) ,e)
(`(:right ,it) ,form)
(`(:right ,,sym) ,form)
(e (error "Learn to use monads, dummy; this isn't one: %s" e))))))
(defmacro either>>= (either form)
"Bind EITHER to FORM where the right slot is bound to 'it'."
`(either-as>>= it ,either ,form))
(defun either-foldM (fun init xs)
"Mondically apply FUN to XS (a list).

View File

@ -88,14 +88,22 @@
;; datetime operations
(defmacro org-x-dag-with-times (datetime0 datetime1 form)
(defun org-x-dag-datetimes-same-length-p (datetime0 datetime1)
;; ASSUME all digits in this comparison are on the calendar/clock (eg day 32
;; does not 'rollover' to day 1 on the next month)
(not (xor (org-ml-time-is-long datetime0) (org-ml-time-is-long datetime1))))
;; TODO some of this is redundant because I'm checking the length twice
;; Maybe a -> Maybe a -> (a -> a -> b) -> b -> Maybe b
(defun org-x-dag-with-datetimes (a b fun alt)
(when (and a b)
(if (org-x-dag-datetimes-same-length-p a b)
(funcall fun a b)
(funcall alt))))
(defmacro org-x-dag-with-times (datetime0 datetime1 form)
(declare (indent 2))
`(if (or (and (org-ml-time-is-long ,datetime0)
(org-ml-time-is-long ,datetime1))
(not (or (org-ml-time-is-long ,datetime0)
(org-ml-time-is-long ,datetime1))))
`(if (org-x-dag-datetimes-same-length-p datetime0 datetime1)
,form
(error "Datetimes are invalid lengths: %S and %S" ,datetime0 ,datetime1)))
@ -126,6 +134,12 @@
(--drop-while (= (car it) (cdr it)))
(not))))
(defun org-x-dag-datetime-compare (a b)
(cond
((org-x-dag-datetime= a b) 'eq)
((org-x-dag-datetime< a b) 'gt)
(t 'lt)))
(defun org-x-dag-date< (datetime0 datetime1)
(org-x-dag-datetime< (org-x-dag-datetime-to-date datetime0)
(org-x-dag-datetime-to-date datetime1)))
@ -141,6 +155,12 @@
(org-x-dag-datetime= (org-x-dag-datetime-to-date datetime0)
(org-x-dag-datetime-to-date datetime1)))
(defun org-x-dag-datetime-max (datetimes)
(-max-by #'org-x-dag-datetime> datetimes))
(defun org-x-dag-date-max (datetimes)
(-max-by #'org-x-dag-date< datetimes))
(defun org-x-dag-datetime-shift (datetime shift unit)
(cl-flet*
((enc-dec-long
@ -173,6 +193,10 @@
;; date <-> epoch
(defun org-x-dag-datetime-to-epoch (date)
(-let (((y m d H M) date))
(float-time (encode-time (list 0 (or M 0) (or H 0) d m y nil -1 nil)))))
(defun org-x-dag-date-to-epoch (date)
(float-time (encode-time `(0 0 0 ,@(reverse date) nil -1 nil))))
@ -375,6 +399,40 @@ relative shift in days from ABS."
;; (org-x-dag-format-month-tag m)
;; (org-x-dag-format-day-tag d))))
;; timestamps <-> datetime
(defun org-x-dag-partition-timestamp (ts)
(list :datetime (org-ml-timestamp-get-start-time ts)
:length (org-ml-timestamp-get-range ts)
:pos (org-ml-get-property :begin ts)
:repeater (org-ml-timestamp-extract-modulus 'repeater ts)
:warning (org-ml-timestamp-extract-modulus 'warning ts)))
(defun org-x--dag-pts-compare (fun a b)
(funcall (-on fun (lambda (ts) (plist-get ts :datetime))) a b))
(defun org-x-dag-pts-compare (a b)
(org-x--dag-pts-compare #'org-x-dag-datetime-compare a b))
(defun org-x-dag-pts= (a b)
(org-x--dag-pts-compare #'org-x-dag-datetime= a b))
(defun org-x-dag-pts< (a b)
(org-x--dag-pts-compare #'org-x-dag-datetime< a b))
(defun org-x-dag-pts> (a b)
(org-x--dag-pts-compare #'org-x-dag-datetime> a b))
(defun org-x-dag-pts-max (ps)
(-max-by #'org-x-dag-pts> ps))
(defun org-x-dag-pts-is-long-p (pts)
(org-ml-time-is-long (plist-get pts :datetime)))
(defun org-x-dag-pts-to-epoch (pts)
(->> (plist-get pts :datetime)
(org-x-dag-datetime-to-epoch)))
;; allocation
(pcase-defmacro regexp (capture regexp)
@ -590,10 +648,10 @@ used for optimization."
;; its parent is a node or none of its parents are nodes
(cond
((and this-todo
(setq this-pblock (org-x-dag-property-block next-pos)
pbeg (nth 1 this-pblock)
pend (nth 2 this-pblock)
this-id (org-x-dag-get-local-property pbeg pend id-prop)))
(when (setq this-pblock (org-x-dag-property-block next-pos))
(setq pbeg (nth 1 this-pblock)
pend (nth 2 this-pblock)
this-id (org-x-dag-get-local-property pbeg pend id-prop))))
(setq bury-level nil
this-buffer-parent (nth 2 (car node-stack))
this-links (or (org-x-dag-get-parent-links (nth 3 this-pblock)
@ -682,7 +740,7 @@ used for optimization."
(`(:right ,r)
(-let (((cur as) acc))
(either>>= (funcall rank-fun cur r)
(let ((as* (append (funcall acc-fun it) as)))
(let ((as* (append (funcall acc-fun r) as)))
(if (not it) (fold-rank `(,cur ,as*) rest)
(if (funcall stop-fun r)
;; if we encounter the stop condition, apply the
@ -699,8 +757,8 @@ used for optimization."
(pcase (car bss)
(`(:right ,r)
(if (funcall stop-fun r)
(->> (funcall acc-fun r)
(list)
(->> (either-rights bss)
(--mapcat (funcall acc-fun it))
(funcall trans-fun r))
(either>>= (fold-rank (list r nil) (cdr bss))
(-let (((cur as) it))
@ -709,12 +767,15 @@ used for optimization."
(defun org-x-dag-bs-action-rankfold-children (bss default rank-fun stop-fun
acc-fun trans-fun)
(cl-flet ((get-local (x) (plist-get x :local)))
(declare (indent 2))
(declare (indent 2))
(cl-flet
((get-local
(x)
(plist-get x :local)))
(org-x-dag-bs-rankfold-children bss default
(-on rank-fun #'get-local)
(-compose stop-fun #'get-local)
acc-fun
(-compose acc-fun #'get-local)
(lambda (x as)
(funcall trans-fun (get-local x) as)))))
@ -795,7 +856,7 @@ deadline (eg via epoch time) or if it has a repeater."
(< parent-epoch this-epoch))))))
(defun org-x-dag-bs-action-project-inner (node-data ancestry child-bss)
(cl-flet
(cl-flet*
((new-proj
(status)
(either :right `(:sp-proj ,status)))
@ -805,41 +866,39 @@ deadline (eg via epoch time) or if it has a repeater."
(is-next
(task-data)
(-let (((&plist :todo :sched) task-data))
(or sched (equal todo org-x-kw-next)))))
;; rankings
;; *-active > proj-wait > proj-held > (proj-stuck == iter-empty) > *-complete
(org-x-dag-bs-action-with-closed node-data ancestry "projects"
(if child-bss
`(:sp-proj :proj-complete ,it-comptime)
`(:sp-task :task-complete ,it-comptime))
(org-x-dag-bs-action-check-children child-bss
(either :left "Completed projects cannot have active children")
(either :right `(:sp-proj :proj-complete ,it-comptime))
`(:sp-task :task-complete ,it-comptime)
(lambda (local)
(pcase local
(`(:sp-proj :proj-complete ,_) t)
(`(:sp-iter :iter-complete ,_) t)
(`(:sp-task :task-complete ,_) t)
(_ nil))))
(-let* (((sched dead) (-some->> it-planning
(org-ml-get-properties '(:scheduled :deadline))))
(task-default (->> (list :todo it-todo
:sched sched
:dead dead)
(list :sp-task :task-active))))
(or sched (equal todo org-x-kw-next))))
(check-sched
(planning)
(if-let (sched (-some->> planning (org-ml-get-property :scheduled)))
(if child-bss (either :left "Projects cannot be scheduled")
(let ((sp (org-x-dag-partition-timestamp sched)))
(if (< 0 (plist-get sp :length))
(->> "Tasks cannot have ranged scheduled timestamps"
(either :left))
(either :right sp))))
(either :right nil)))
(check-dead
(planning)
(if-let (dead (-some->> planning (org-ml-get-property :deadline)))
(let ((dp (org-x-dag-partition-timestamp dead)))
(cond
((< 0 (plist-get dp :length))
(either :left "Actions cannot have ranged deadlines"))
((and child-bss (plist-get dp :repeater))
(either :left "Projects cannot have repeated deadlines"))
((org-x-dag-action-dead-after-parent-p ancestry dead)
(either :left "Action deadline cannot end after parent deadline"))
(t
(either :right dp))))
(either :right nil)))
(check-todo
(todo task-default)
(cond
((and child-bss (equal it-todo org-x-kw-hold))
(new-proj :proj-held))
((and child-bss sched)
(either :left "Projects cannot be scheduled"))
((and child-bss (plist-get node-data :effort))
(either :left "Projects cannot have effort"))
((org-x-dag-action-dead-after-parent-p ancestry dead)
(either :left "Action deadline cannot end after parent deadline"))
((equal it-todo org-x-kw-todo)
((and child-bss (equal todo org-x-kw-hold))
(new-proj :proj-held))
((equal todo org-x-kw-todo)
(org-x-dag-bs-action-rankfold-children child-bss task-default
(lambda (acc next)
(->> (pcase `(,acc ,next)
@ -883,8 +942,8 @@ deadline (eg via epoch time) or if it has a repeater."
(`(,_ (:sp-task :task-active ,_)) t)
;; any pair that makes it this far is completed in both,
;; which means neither takes precedence, which means choose
;; the left one
;; which means neither takes precedence, which means
;; choose the left one
(`(,_ ,_) nil))
(either :right)))
@ -898,7 +957,7 @@ deadline (eg via epoch time) or if it has a repeater."
(lambda (next)
(pcase next
(`(:sp-iter :iter-active ,d) (plist-get d :child-scheds))
(`(:sp-task :task-active ,d) (list (plist-get d :sched)))
(`(:sp-task :task-active ,d) (-some-> (plist-get d :sched) (list)))
(`(:sp-proj :proj-active ,d) (plist-get d :child-scheds))
(_ nil)))
@ -908,7 +967,7 @@ deadline (eg via epoch time) or if it has a repeater."
`(:sp-task :task-complete ,_)
`(:sp-iter :iter-complete ,_))
(->> "Active projects must have at least one active child"
(either :left )))
(either :left)))
(`(:sp-proj :proj-active ,_) (new-active-proj cs))
(`(:sp-proj ,s) (new-proj s))
(`(:sp-iter :iter-active ,_) (new-active-proj cs))
@ -924,9 +983,36 @@ deadline (eg via epoch time) or if it has a repeater."
(t (org-x-dag-bs-error-kw "Task action" o)))))
(e (error "Pattern fail: %s" e))))))
(child-bss
(org-x-dag-bs-error-kw "Project action" it-todo))
(org-x-dag-bs-error-kw "Project action" todo))
(t
(either :right task-default)))))))
(either :right task-default)))))
;; rankings
;; *-active > proj-wait > proj-held > (proj-stuck == iter-empty) > *-complete
(org-x-dag-bs-action-with-closed node-data ancestry "projects"
(if child-bss
`(:sp-proj :proj-complete ,it-comptime)
`(:sp-task :task-complete ,it-comptime))
(org-x-dag-bs-action-check-children child-bss
(either :left "Completed projects cannot have active children")
(either :right `(:sp-proj :proj-complete ,it-comptime))
`(:sp-task :task-complete ,it-comptime)
(lambda (local)
(pcase local
(`(:sp-proj :proj-complete ,_) t)
(`(:sp-iter :iter-complete ,_) t)
(`(:sp-task :task-complete ,_) t)
(_ nil))))
(either-as>>= sp (check-sched it-planning)
(either-as>>= dp (check-dead it-planning)
;; TODO it seems a bit odd that the only reason I need sp and dp here
;; is to seed the sub-project task form; idk why this is weird but it
;; smells like something could be optimized somewhere
(->> (list :todo it-todo :sched sp :dead dp)
(list :sp-task :task-active)
(check-todo it-todo)))))))
(defun org-x-dag-node-data-is-iterator-p (node-data)
(-let (((&plist :props) node-data))
@ -946,136 +1032,171 @@ deadline (eg via epoch time) or if it has a repeater."
((or `(:si-task :task-complete ,_) `(:si-proj :proj-complete ,_)) t)
(_ nil)))))
(defun org-x-dag-bs-action-subiter-todo-fold (child-bss default trans-fun)
(defun org-x-dag-bs-action-subiter-todo-fold
(child-bss default complete-default new-active-fun)
(declare (indent 2))
(org-x-dag-bs-action-rankfold-children child-bss default
(lambda (acc next)
(pcase `(,acc ,next)
;; for active tasks, the furthest in the future is ranked the highest
(`((:si-task :task-active ,a) (:si-task :task-active ,b))
(-let (((&plist :sched as :dead ad) a)
((&plist :sched bs :dead bd) b))
(cond
((or (xor as bs) (xor ad bd))
(->> "All sub-iters must have the same planning configuration"
(either :left)))
((and as bs (xor (org-ml-time-is-long as) (org-ml-time-is-long bs)))
(->> "Sub-iters must have scheduled timestamp with same length"
(either :left)))
((and ad bd (xor (org-ml-time-is-long ad) (org-ml-time-is-long bd)))
(->> "Sub-iters must have deadline timestamp with same length"
(either :left)))
;; ASSUME this won't fail since the datetimes are assumed to be the
;; same length as per rules above
((and ad bd)
(->> (org-x-dag-datetime< (org-ml-timestamp-get-start-time ad)
(org-ml-timestamp-get-start-time bd))
(either :right)))
(t
(->> (org-x-dag-datetime< (org-ml-timestamp-get-start-time as)
(org-ml-timestamp-get-start-time bs))
(either :right))))))
((or `((:si-task . ,_) (:si-proj . ,_))
`((:si-proj . ,_) (:si-task . ,_)))
(either :left "Sub-iterators must have same project structure"))
(`(,(or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)) ,_)
(either :right nil))
(`(,_ ,(or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)))
(either :right t))
(`(,_ ,_) (either :right nil))))
(lambda (next)
(pcase next
((or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)) t)
(_ nil)))
(lambda (next)
(pcase next
(`(:si-proj :proj-active ,d) (plist-get d :child-scheds))
(`(:si-task :task-active ,d) (list (plist-get d :sched)))
(_ nil)))
trans-fun))
(cl-flet*
((fmt-left
(sched? wrong)
(let ((what (if sched? "scheduled" "deadlined")))
(org-x-dag-left "Sub-iter %s timestamps %s" what wrong)))
(fmt-left-both
(wrong)
(org-x-dag-left "Sub-iter scheduled/deadlined timestamps %s" wrong))
(fmt-left-2
(sched-wrong dead-wrong)
(org-x-dag-left
"Sub-iter scheduled timestamps %s and deadlined timestamps %s"
sched-wrong dead-wrong))
(compare
(a b)
(cond
((not (or a b)) (either :left nil))
((xor a b) (either :left 'presence))
(t
(org-x-dag-with-datetimes
a b
(lambda (a b)
(either :right (org-x-dag-pts-compare a b)))
(-const (either :left 'length))))))
(comp2right
(sched? comp)
(if (eq comp 'eq) (fmt-left sched? "should be different")
(either :right (eq comp 'gt))))
(left2err
(sym)
(pcase sym
(`presence "should be on all or none")
(`length "must have same length")))
(sym-left
(sched? sym)
(fmt-left sched? (left2err sym)))
(sym-left-2
(sched-sym dead-sym)
(if (eq sched-sym dead-sym) (fmt-left-both (left2err sched-sym))
(fmt-left-2 (left2err sched-sym) (left2err dead-sym))))
(new-active
(ts-data child-scheds)
(->> (list :dead (plist-get ts-data :dead)
:child-scheds child-scheds
;; TODO this can be an epoch and not a datetime
:leading-sched-dt (-> (org-x-dag-pts-max child-scheds)
(plist-get :datetime)))
(funcall new-active-fun))))
(org-x-dag-bs-action-rankfold-children child-bss default
(lambda (acc next)
(pcase `(,acc ,next)
;; for active tasks, the furthest in the future is ranked the highest
(`((:si-task :task-active ,a) (:si-task :task-active ,b))
(-let (((&plist :sched as :dead ad) a)
((&plist :sched bs :dead bd) b))
(pcase `(,(compare as bs) ,(compare ad bd))
(`((:left ,s) (:right ,d)) (if s (sym-left t s) (comp2right nil d)))
(`((:right ,s) (:left ,d)) (if d (sym-left nil d) (comp2right t s)))
(`((:right ,s) (:right ,d))
(pcase `(,s ,d)
(`(gt gt) (either :right t))
(`(lt lt) (either :right nil))
((or `(gt lt) `(lt gt)) (fmt-left-both "should not cross"))
(`(eq eq) (fmt-left-both "should be different"))
(`(eq ,_) (fmt-left t "should be different"))
(`(,_ eq) (fmt-left nil "should be different"))))
(`((:left ,s) (:left ,d))
(cond
((and s d) (sym-left-2 s d))
(s (sym-left t s))
(d (sym-left nil d)))))))
((or `((:si-task . ,_) (:si-proj . ,_))
`((:si-proj . ,_) (:si-task . ,_)))
(either :left "Sub-iterators must have same project structure"))
(`(,(or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)) ,_)
(either :right nil))
(`(,_ ,(or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)))
(either :right t))
(`(,_ ,_) (either :right nil))))
(lambda (next)
(pcase next
((or `(:si-task :task-active ,_) `(:si-proj :proj-active ,_)) t)
(_ nil)))
(lambda (next)
(pcase next
(`(:si-proj :proj-active ,d) (plist-get d :child-scheds))
(`(:si-task :task-active ,d) (-some-> (plist-get d :sched) (list)))
(_ nil)))
(lambda (acc cs)
(pcase acc
((or `(:si-task :task-complete ,_) `(:si-proj :proj-complete ,_))
complete-default)
(`(:si-proj :proj-active ,ts-data)
(new-active ts-data cs))
(`(:si-task :task-active ,ts-data)
(new-active ts-data cs))
(e (error "Invalid pattern: %s" e)))))))
(defun org-x-dag-node-is-iterator-p (node)
(org-x-dag-node-data-is-iterator-p (plist-get node :node-meta)))
(defun org-x-dag-bs-action-subiter-inner (node-data ancestry child-bss)
(cl-flet
((new-active-proj
(d s cs)
(->> (list :dead d :child-scheds cs :leading-sched s)
(list :si-proj :proj-active)
(either :right))))
(org-x-dag-bs-action-with-closed node-data ancestry "sub-iterators"
(if child-bss
`(:si-proj :proj-complete ,it-comptime)
`(:si-task :task-complete ,it-comptime))
(org-x-dag-bs-action-with-closed node-data ancestry "sub-iterators"
(if child-bss
`(:si-proj :proj-complete ,it-comptime)
`(:si-task :task-complete ,it-comptime))
(org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime
"sub-iterators"
(lambda (c) `(:si-proj :proj-complete ,c))
(lambda (c) `(:si-task :task-complete ,c)))
(org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime
"sub-iterators"
(lambda (c) `(:si-proj :proj-complete ,c))
(lambda (c) `(:si-task :task-complete ,c)))
(-let (((sched dead) (-some->> it-planning
(org-ml-get-properties '(:scheduled :deadline)))))
(cond
((and sched child-bss)
(either :left "Project sub-iterators cannot be scheduled"))
((and dead child-bss)
(either :left "Project sub-iterators cannot be deadlined"))
((org-x-dag-node-data-is-iterator-p node-data)
(either :left "Iterators cannot be nested"))
((org-x-dag-action-dead-after-parent-p ancestry dead)
(either :left "Sub-iterator deadline must not start after parent"))
((equal it-todo org-x-kw-todo)
(org-x-dag-bs-action-subiter-todo-fold child-bss
`(:si-task :task-active (:sched ,sched :dead ,dead))
(lambda (acc cs)
(pcase acc
((or `(:si-proj :proj-complete ,_)
`(:si-task :task-complete ,_))
(-> "Active sub-iterator must have at least one active child"
(org-x-dag-left)))
(`(:si-proj :proj-active ,ts-data)
(-let (((&plist :dead d :leading-sched s) ts-data))
(new-active-proj d s cs)))
(`(:si-task :task-active ,ts-data)
(-let (((&plist :dead d :sched s) ts-data))
(new-active-proj d s cs)))
(e (error "Invalid pattern: %s" e))))))
(t
(org-x-dag-bs-error-kw "Sub-iterator" it-todo)))))))
(-let* (((sched dead) (-some->> it-planning
(org-ml-get-properties '(:scheduled :deadline))))
(sp (-some-> sched (org-x-dag-partition-timestamp)))
(dp (-some-> dead (org-x-dag-partition-timestamp))))
(cond
((and sp child-bss)
(either :left "Project sub-iterators cannot be scheduled"))
((and dp child-bss)
(either :left "Project sub-iterators cannot be deadlined"))
((org-x-dag-node-data-is-iterator-p node-data)
(either :left "Iterators cannot be nested"))
((org-x-dag-action-dead-after-parent-p ancestry dead)
(either :left "Sub-iterator deadline must not start after parent"))
((and sp (plist-get sp :repeater))
(either :left "Scheduled sub-iterators cannot repeat"))
((and dp (plist-get dp :repeater))
(either :left "Deadlined sub-iterators cannot repeat"))
((and sp (< 0 (plist-get sp :length)))
(either :left "Scheduled sub-iterators cannot be ranged"))
((and dp (< 0 (plist-get dp :length)))
(either :left "Deadlined sub-iterators cannot be ranged"))
((member it-todo (list org-x-kw-todo org-x-kw-wait))
(org-x-dag-bs-action-subiter-todo-fold child-bss
(->> (list :sched sp :dead dp)
(list :si-task :task-active))
(->> "Active sub-iterator must have at least one active child"
(either :left))
(lambda (data)
(either :right `(:si-proj :proj-active ,data)))))
(t
(org-x-dag-bs-error-kw "Sub-iterator" it-todo))))))
(defun org-x-dag-bs-action-iter-inner (node-data ancestry child-bss)
(cl-flet
((new-active-iter
(d s cs)
(->> (list :dead d :child-scheds cs :leading-sched s)
(list :iter-nonempty :nonempty-active)
(either :right))))
(org-x-dag-bs-action-with-closed node-data ancestry "iterators"
`(:iter-empty :empty-complete ,it-comptime)
(org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime "iterators"
(lambda (c) `(:iter-nonempty :nonempty-complete ,c))
(lambda (c) `(:iter-empty :empty-complete ,c)))
(cond
(it-planning
(either :left "Iterators cannot be scheduled or deadlined"))
;; TODO also check for timeshift and archive props
((equal it-todo org-x-kw-todo)
(org-x-dag-bs-action-subiter-todo-fold child-bss '(:iter-empty :empty-active)
(lambda (acc cs)
(pcase acc
((or `(:si-task :task-complete ,_)
`(:si-proj :proj-complete ,_))
(either :right '(:iter-nonempty :nonempty-complete)))
(`(:si-task :task-active ,ts-data)
(-let (((&plist :dead d :sched s) ts-data))
(new-active-iter d s cs)))
(`(:si-proj :proj-active ,ts-data)
(-let (((&plist :dead d :leading-sched s) ts-data))
(new-active-iter d s cs)))
(e (error "Invalid pattern: %s" e))))))
(t
(org-x-dag-bs-error-kw "Iterator" it-todo))))))
(org-x-dag-bs-action-with-closed node-data ancestry "iterators"
`(:iter-empty :empty-complete ,it-comptime)
(org-x-dag-bs-action-subiter-complete-fold child-bss it-comptime "iterators"
(lambda (c) `(:iter-nonempty :nonempty-complete ,c))
(lambda (c) `(:iter-empty :empty-complete ,c)))
(cond
(it-planning
(either :left "Iterators cannot be scheduled or deadlined"))
;; TODO also check for timeshift and archive props
((equal it-todo org-x-kw-todo)
(org-x-dag-bs-action-subiter-todo-fold child-bss
'(:iter-empty :empty-active)
(either :right '(:iter-nonempty :nonempty-complete))
(lambda (data)
(either :right `(:iter-nonempty :nonempty-active ,data)))))
(t
(org-x-dag-bs-error-kw "Iterator" it-todo)))))
(defun org-x-dag-bs-epg-inner (node ancestry child-bss)
(let ((is-complete
@ -1228,7 +1349,8 @@ deadline (eg via epoch time) or if it has a repeater."
(-let (((&plist :ancestry a :local l) it))
(list :ancestry a :local (cons :sp-subiter l)))))))
(-let (((p (ps is)) (->> (list :canceled-parent-p nil
:held-parent-p nil)
:held-parent-p nil
:parent-deadline nil)
(org-x-dag-bs-action-project node-tree))))
(->> `(,p ,@ps ,@(-map #'lift-subiter is))
(org-x-dag-bs-prefix :action)))))
@ -1249,6 +1371,7 @@ deadline (eg via epoch time) or if it has a repeater."
(org-x-dag-bs-prefix :endpoint `(,n ,@ns))))
(defun org-x-dag-bs-toplevel-goal-inner (type-name node-data child-bss)
;; TODO allow these to be canceled
(org-x-dag-bs-check-created node-data
(-let (((&plist :planning :todo) node-data))
(cond
@ -1482,7 +1605,7 @@ deadline (eg via epoch time) or if it has a repeater."
(defun org-x-dag-plist-map (plist key fun)
(declare (indent 2))
(plist-put plist key (funcall fun (plist-get plist key))))
(plist-put (-copy plist) key (funcall fun (plist-get plist key))))
(defun org-x-dag-plist-cons (plist key x)
(declare (indent 2))
@ -1503,8 +1626,7 @@ deadline (eg via epoch time) or if it has a repeater."
(let (r)
(--each targets
(->> (if (setq r (ht-get htbl it))
(either<$> r
(org-x-dag-plist-cons it key id))
(either<$> r (org-x-dag-plist-cons it key id))
(either :right `(,key (,id))))
(ht-set htbl it)))))
@ -1535,7 +1657,7 @@ deadline (eg via epoch time) or if it has a repeater."
(defun org-x-dag-adjlist-id-all-sched (adjlist id)
(-when-let (bs (-> (org-x-dag-adjlist-id-bs adjlist id)
(either-from-right nil)))
(pcase bs
(pcase (plist-get (cdr bs) :local)
(`(:sp-task :task-active ,d)
(-some-> (plist-get d :sched) (list)))
(`(:sp-subiter :si-task :task-active ,d)
@ -1901,8 +2023,8 @@ DEF-FUN and the output from GET-FUN (type :: a -> NS)."
(lambda (h id)
(org-x-dag-ht-get-maybe h id s-key))
(lambda (plist to-set)
(->> (org-x-dag-plist-map (-copy plist) s-key
(lambda (x) (append x to-set)))
(->> (org-x-dag-plist-map plist s-key
(lambda (x) (append x (-copy to-set))))
(either :right)))
(lambda (to-set)
(list s-key (-copy to-set)))))
@ -1933,7 +2055,7 @@ DEF-FUN and the output from GET-FUN (type :: a -> NS)."
(either :right plist)))))
(either :right plist))
(lambda (to-set)
`(:deadline ,to-set))))
`(:deadline ,(-copy to-set)))))
(defun org-x-dag-ht-propagate-action-down (adjlist ns)
(org-x-dag-ht-map-down adjlist :action ns
@ -1946,14 +2068,14 @@ DEF-FUN and the output from GET-FUN (type :: a -> NS)."
(lambda (plist to-set)
;; copy is needed here for some reason, otherwise other parts of the
;; hash table are affected
(-let* (((committed survivalp) to-set)
(-let* (((committed survivalp) (-copy to-set))
(new (-> (-copy plist)
(plist-put :survivalp survivalp)
(org-x-dag-plist-map :committed
(lambda (x) (append x committed))))))
(either :right new)))
(lambda (to-set)
(-let (((committed survivalp) to-set))
(-let (((committed survivalp) (-copy to-set)))
`(:committed ,committed :survivalp ,survivalp)))))
(defun org-x-dag-ht-propagate-up (adjlist h-key s-key ns)
@ -1977,7 +2099,7 @@ DEF-FUN and the output from GET-FUN (type :: a -> NS)."
rs*)))
(let ((h (alist-get h-key ns)))
(--each (ht-keys h)
(propagate h it )))))
(propagate h it)))))
(defun org-x-dag-get-network-status (sel-date spans adjlist links)
(cl-flet
@ -2776,12 +2898,6 @@ encountered will be returned."
(u (convert-unit unit)))
`(,v ,u ,type))))))
(defun org-x-dag-partition-timestamp (ts)
(list :datetime (org-ml-timestamp-get-start-time ts)
:pos (org-ml-get-property :begin ts)
:repeater (org-ml-timestamp-extract-modulus 'repeater ts)
:warning (org-ml-timestamp-extract-modulus 'warning ts)))
(defun org-x-dag-repeater-get-next (sel-datetime datetime shift shifttype reptype)
"Return the next timestamp repeater of DATETIME."
(pcase reptype
@ -3127,9 +3243,9 @@ FUTURE-LIMIT in a list."
(`(:iter-empty :empty-complete ,_) :complete)
(`(:iter-empty :empty-active ,_) :empty)
(`(:iter-nonempty :nonempty-active ,data)
(-let* (((&plist :dead d :leading-sched s) data)
(d* (-some->> d (org-x-dag-timestamp-to-epoch)))
(s* (-some->> s (org-x-dag-timestamp-to-epoch))))
(-let* (((&plist :dead d :leading-sched-dt s) data)
(d* (-some->> d (org-x-dag-pts-to-epoch)))
(s* (-some->> s (org-x-dag-datetime-to-epoch))))
(-if-let (epoch (if (and d* s*) (min d* s*) (or s* d*)))
(if (< (+ (float-time) org-x-iterator-active-future-offset)
epoch)
@ -3196,16 +3312,17 @@ FUTURE-LIMIT in a list."
(org-x-dag-with-ids files
(pcase (either-from-right (org-x-dag-id->bs it) nil)
(`(:lifetime . ,bs)
(-let (((&plist :ancestry a :local l) bs))
(when (and (not (plist-get a :canceled-parent-p)) (eq l :active))
(-when-let (ns (org-x-dag-id->ns it))
(-let (((&plist :planned p :fulfilled f)
(either-from-right ns nil)))
(mk-item it :lifetime p f nil))))))
(when (equal bs '(:active))
;; (-let (((&plist :ancestry a :local l) bs))
;; (when (and (not (plist-get a :canceled-parent-p)) (eq l :active))
(-when-let (ns (org-x-dag-id->ns it))
(-let (((&plist :planned p :fulfilled f)
(either-from-right ns nil)))
(mk-item it :lifetime p f nil)))))
;; TODO need to grab deadlines from the network status (when done)
(`(:endpoint . ,bs)
(-let (((&plist :ancestry a :local l) bs))
(when (and (not (plist-get a :canceled-parent-p)) (eq l :active))
(when (and (not (plist-get a :canceled-parent-p)) (equal l '(:active)))
(-when-let (ns (org-x-dag-id->ns it))
(-let (((&plist :planned p :fulfilled f :committed c)
(either-from-right ns nil)))
@ -4282,23 +4399,30 @@ FUTURE-LIMIT in a list."
(either :right it)))))
;; child id functions
(remove-done
(ids)
(--remove (member (org-x-dag-id->todo it) org-done-keywords) ids))
(action-qtp-getter
()
(->> (org-x-dag->action-ids)
;; TODO could also remove DONE/CANC and things
;; underneath these
(--remove (org-x-dag-id->ns-key :survivalp it))
(remove-done)
(append (org-x-dag->current-qtp-ids))))
(svg-action-getter
()
(->> (org-x-dag->action-ids)
;; TODO could also remove DONE/CANC and things
;; underneath these
(remove-done)
(--remove (and (org-x-dag-id->ns-key :committed it)
(not (org-x-dag-id->ns-key :survivalp it))))))
(epg-action-qtp-getter
()
`(,@(org-x-dag->epg-ids) ,@(action-qtp-getter)))
(->> `(,@(org-x-dag->epg-ids) ,@(action-qtp-getter))
(remove-done)))
;; format functions
(dlp-formatter
@ -4436,16 +4560,27 @@ FUTURE-LIMIT in a list."
(either :right))
(parse-hl)))
(remove-done
(ids)
(--remove (member (org-x-dag-id->todo it) org-done-keywords) ids))
;; parent id getters
(tlg-getter
()
(append (org-x-dag->epg-ids) (org-x-dag->ltg-ids)))
(->> (append (org-x-dag->epg-ids) (org-x-dag->ltg-ids))
(remove-done)))
(goal-getter
()
(append (org-x-dag->svg-ids) (tlg-getter)))
(->> (append (org-x-dag->svg-ids) (tlg-getter))
(remove-done)))
(dlp-getter
()
(append (org-x-dag->current-wkp-ids) (org-x-dag->action-ids)))
(->> (append (org-x-dag->current-wkp-ids) (org-x-dag->action-ids))
(remove-done)))
(weekly-getter
()
(->> (org-x-dag->current-qtp-ids)
(remove-done)))
;; formatters
(goal-formatter
@ -4455,7 +4590,7 @@ FUTURE-LIMIT in a list."
(org-x-dag-id->path nil id)))))
(org-x-dag-sync)
(let ((f (buffer-file-name)))
(let ((f (f-canonical (buffer-file-name))))
(cond
((equal f (org-x-dag->goal-file :endpoint))
(org-x-dag--link-child-to-parent
@ -4475,7 +4610,7 @@ FUTURE-LIMIT in a list."
((equal f (org-x-dag->planning-file :weekly))
(org-x-dag--link-child-to-parent
#'parse-hl
#'org-x-dag->current-qtp-ids
#'weekly-getter
#'org-x-dag-id->title))
((equal f (org-x-dag->planning-file :daily))
(org-x-dag--link-child-to-parent
@ -5009,7 +5144,7 @@ In the order of display
(if is-proj "Deadlined Projects" "Deadlined Tasks")))
(format (if is-planned "%s (Planned)" "%s")))))))
(org-x-dag-agenda-call-inner "Timeblock" 'agenda "" files
`((org-agenda-sorting-strategy '(time-up category-keep))
`((org-agenda-sorting-strategy '(time-up deadline-up category-keep))
(org-super-agenda-groups
'((:auto-map ,conflict-fun :order 4)
,(routine-form "Morning Routine"

View File

@ -1965,7 +1965,7 @@ and slow."
(org-ml-to-string)
(org-ml-build-node-property org-x-prop-created))))
(org-ml-update-this-headline*
(org-ml-headline-map-node-properties* (cons np it) it))))
(org-ml-headline-map-node-properties* (-snoc it np) it))))
(defun org-x-set-expired-time (&optional arg)
"Set the expired time of the current headline.

View File

@ -0,0 +1,223 @@
* projects
** TODO this is an active project
:PROPERTIES:
:ID: a98df83f-bc98-4767-b2bc-f1054dbf89f9
:CREATED: [2022-06-07 Tue 22:41]
:END:
*** NEXT this is a project task
:PROPERTIES:
:ID: 2db32ed8-0a1f-488c-8e41-dd3549ac8b1b
:CREATED: [2022-06-07 Tue 22:41]
:END:
** TODO this is an active project (scheduled)
:PROPERTIES:
:ID: 3788c7bc-390e-4caf-af8e-06831ff3276b
:CREATED: [2022-06-10 Fri 19:29]
:END:
*** TODO this is a scheduled task
SCHEDULED: <2022-06-10 Fri>
:PROPERTIES:
:ID: 19a7d558-e087-47ec-b686-feee29d352a1
:CREATED: [2022-06-10 Fri 19:29]
:END:
** TODO this is a waiting project
:PROPERTIES:
:ID: 26586b4d-7fc7-4a9f-b86f-e3c26a83a507
:CREATED: [2022-06-10 Fri 19:18]
:END:
*** WAIT this is a waiting subtask
:PROPERTIES:
:ID: cf58280a-ac7c-4951-a3de-a3f79f92f2b0
:CREATED: [2022-06-10 Fri 19:18]
:END:
** HOLD this is a held project
:PROPERTIES:
:ID: d5065c21-b717-41fe-8232-22afbd6b2243
:CREATED: [2022-06-10 Fri 19:14]
:END:
*** TODO this is a subtask masked by a hold
:PROPERTIES:
:ID: ee9c6ec9-7626-40f5-9f06-3c91bc1338ed
:CREATED: [2022-06-10 Fri 19:14]
:END:
** TODO this is a project held by a subtask
:PROPERTIES:
:ID: a771dc18-0c5f-4196-903d-ada3c8a9d817
:CREATED: [2022-06-10 Fri 19:15]
:END:
*** HOLD this is a held subtask
:PROPERTIES:
:ID: 4f743d31-2df4-4e32-85de-cedae0cffeb2
:CREATED: [2022-06-10 Fri 19:15]
:END:
** TODO this is a stuck project
:PROPERTIES:
:CREATED: [2022-06-07 Tue 22:41]
:ID: c93fe96f-7130-4433-a960-98c07a3b21f4
:END:
*** TODO this is a subtask
:PROPERTIES:
:ID: 2def43a3-e814-4793-adc7-38ddbbf30411
:CREATED: [2022-06-10 Fri 19:08]
:END:
** DONE this is a completed project
CLOSED: [2022-06-10 Fri 19:10]
:PROPERTIES:
:ID: 87682ef6-cd4c-41a7-8f0d-6ac41e572b05
:CREATED: [2022-06-10 Fri 19:10]
:END:
*** DONE this is a completed subtask
CLOSED: [2022-06-10 Fri 19:26]
:PROPERTIES:
:ID: 61866e72-7153-44d1-ae0f-af527fe5f9f4
:CREATED: [2022-06-10 Fri 19:10]
:END:
*** CANC this is a cancelled task
CLOSED: [2022-06-10 Fri 19:26]
:PROPERTIES:
:ID: 322af50a-f431-4940-8caf-cc5acdf5a555
:CREATED: [2022-06-10 Fri 19:25]
:END:
** CANC this is a cancelled project
CLOSED: [2022-06-10 Fri 19:13]
:PROPERTIES:
:ID: eca77dea-4a40-4697-a69d-d1ec798fe9ba
:CREATED: [2022-06-10 Fri 19:13]
:END:
*** TODO this is a subtask masked by a cancel
:PROPERTIES:
:ID: a834a585-acd1-44e9-8e62-17793146d6ab
:CREATED: [2022-06-10 Fri 19:13]
:END:
** TODO this is a deadlined project
DEADLINE: <2022-06-12 Sun>
:PROPERTIES:
:ID: 51798071-f860-48fb-b3d8-e526ce270290
:CREATED: [2022-06-12 Sun 18:09]
:END:
*** NEXT subtask
:PROPERTIES:
:ID: fc1f3dda-a4b7-4b0d-b37c-fa67e112023a
:CREATED: [2022-06-12 Sun 18:10]
:END:
:LOGGING:
- State "NEXT" from "TODO" [2022-06-12 Sun 18:10]
:END:
* iterators
** TODO this is an iterator
:PROPERTIES:
:ID: 2711e9b9-f765-415d-930f-b7ff16b3140b
:CREATED: [2022-06-07 Tue 22:41]
:PARENT_TYPE: iterator
:ARCHIVE: archive.org_archive::* something
:TIME_SHIFT: +1w
:END:
*** TODO repeated thing
SCHEDULED: <2022-06-07 Tue>
:PROPERTIES:
:ID: b02619f6-b9da-4d78-acdd-409a4c5d747b
:CREATED: [2022-06-07 Tue 22:41]
:END:
*** TODO repeated thing
SCHEDULED: <2022-06-14 Tue>
:PROPERTIES:
:ID: d1576921-41b6-4ca9-b775-8f4997983bc4
:CREATED: [2022-06-07 Tue 22:43]
:END:
*** TODO repeated thing
SCHEDULED: <2022-06-21 Tue>
:PROPERTIES:
:ID: a3653d7d-fd29-422e-83ac-06df2594c747
:CREATED: [2022-06-07 Tue 22:43]
:END:
** TODO this is an empty iterator
:PROPERTIES:
:ID: 15cfb339-358a-49ce-8cb3-9bcfb1c5a126
:CREATED: [2022-06-12 Sun 16:40]
:PARENT_TYPE: iterator
:ARCHIVE: archive.org_archive::* something
:TIME_SHIFT: +1w
:END:
** DONE this is a complete iterator
CLOSED: [2022-06-10 Fri 19:13]
:PROPERTIES:
:ID: f2002c13-5ddd-46ec-9895-67182d89dd19
:CREATED: [2022-06-12 Sun 16:44]
:PARENT_TYPE: iterator
:ARCHIVE: archive.org_archive::* something
:TIME_SHIFT: +1w
:END:
*** DONE subiter 1
CLOSED: [2022-06-10 Fri 19:13]
:PROPERTIES:
:ID: fa290644-ba9a-42ac-a25a-a0cca5704d44
:CREATED: [2022-06-12 Sun 16:44]
:END:
*** DONE subiter 2
CLOSED: [2022-06-12 Sun 16:44]
:PROPERTIES:
:ID: 4ec18d87-dda9-43a6-b5e3-4a633160cfec
:CREATED: [2022-06-12 Sun 16:44]
:END:
*** DONE subiter 3
CLOSED: [2022-06-12 Sun 16:44]
:PROPERTIES:
:ID: 30dfcebe-33e8-4190-9460-9bb439cb75e1
:CREATED: [2022-06-12 Sun 16:44]
:END:
** DONE this is a complete empty iterator
CLOSED: [2022-06-10 Fri 19:13]
:PROPERTIES:
:ID: 6ac25533-ba98-4cce-b8a3-9dcf2ada5d77
:CREATED: [2022-06-12 Sun 17:01]
:PARENT_TYPE: iterator
:ARCHIVE: archive.org_archive::* something
:TIME_SHIFT: +1w
:END:
** TODO iterator with projects
:PROPERTIES:
:ID: 6b33c33b-2ce8-405d-b2bb-917305dfa840
:CREATED: [2022-06-12 Sun 17:10]
:PARENT_TYPE: iterator
:ARCHIVE: archive.org_archive::* something
:TIME_SHIFT: +1w
:END:
*** TODO subiter project
:PROPERTIES:
:ID: ed5ff869-2d98-457e-8718-ebb0ca9c1e72
:CREATED: [2022-06-12 Sun 17:10]
:END:
**** TODO subsubiter task
SCHEDULED: <2022-06-12 Sun>
:PROPERTIES:
:ID: b49556a8-0ec3-487d-84bd-78bd29c9eaef
:CREATED: [2022-06-12 Sun 17:10]
:END:
**** TODO subsubiter task
SCHEDULED: <2022-06-14 Tue>
:PROPERTIES:
:ID: f6c2b3ff-66d6-418e-90ec-0d0643bd16ea
:CREATED: [2022-06-12 Sun 17:10]
:END:
* tasks
** TODO this is a standalone task
:PROPERTIES:
:ID: cda28b1a-2b7d-48ea-b1df-e006be799c2f
:CREATED: [2022-06-07 Tue 22:43]
:END:
* metadata tests
** header with a nice tag :nice_tag:
:PROPERTIES:
:ID: c5d3083b-7079-4f76-b8f8-0d994879d8f7
:CREATED: [2022-06-07 Tue 22:43]
:END:
*** TODO task with nice parent tag
:PROPERTIES:
:ID: 3de25d74-b90e-4c77-9f7f-8190187e7ed0
:CREATED: [2022-06-07 Tue 22:43]
:END:
** TODO task with a random local tag :random_tag:
:PROPERTIES:
:ID: e4876e82-c8c8-4ff8-ad23-f78e3904b927
:CREATED: [2022-06-12 Sun 16:34]
:END:

View File

@ -0,0 +1,10 @@
* TODO this is a project all by itself with one goal
:PROPERTIES:
:ID: 49436f7a-629b-4686-b681-c70c7a116ce7
:CREATED: [2022-06-07 Tue 22:45]
:END:
** TODO project task
:PROPERTIES:
:ID: 2f507e50-78ba-4f81-83ce-988358b98200
:CREATED: [2022-06-07 Tue 22:45]
:END:

View File

@ -0,0 +1,10 @@
* 2022 :Y22:
** June :M06:
*** 2022-06-07 :D07:
**** TODO buy boatload of cement for bunker
SCHEDULED: <2022-06-07 Tue>
:PROPERTIES:
:ID: 25ffaad9-d996-48b7-a387-10aa1d46fba8
:CREATED: [2022-06-07 Tue 22:52]
:END:

View File

@ -0,0 +1,18 @@
* TODO this endpoint goal has a parent
:PROPERTIES:
:ID: c2289aeb-f1f4-4e26-8878-f64157d3f724
:CREATED: [2022-06-07 Tue 22:37]
:END:
:X_PARENT_LINKS:
- LTG :: [[id:d6e92244-b1a0-4161-83bc-5a1f0af5541d][/be good at something]]
:END:
** TODO this is a child goal
:PROPERTIES:
:ID: c90f3351-cee6-426f-98ab-d5e9518983ac
:CREATED: [2022-06-07 Tue 22:38]
:END:
* TODO this one doesn't
:PROPERTIES:
:ID: 48322fb9-27c1-455b-a514-d8a4b4da5c2e
:CREATED: [2022-06-07 Tue 22:38]
:END:

View File

@ -0,0 +1,15 @@
* TODO be good at something
:PROPERTIES:
:ID: d6e92244-b1a0-4161-83bc-5a1f0af5541d
:CREATED: [2022-06-07 Tue 22:36]
:END:
* TODO don't be a dick
:PROPERTIES:
:ID: 06592f95-9cf5-4d7e-8546-da7796d76813
:CREATED: [2022-06-07 Tue 22:36]
:END:
** TODO say nice things
:PROPERTIES:
:ID: adc08873-b9fa-423d-950d-db645db05fe5
:CREATED: [2022-06-07 Tue 22:36]
:END:

View File

@ -0,0 +1,49 @@
* 2022 :Y22:
** Quarter 2 :Q2:
*** environmental :_env:
**** TODO something good for the environment
:PROPERTIES:
:ID: aa3e549c-b309-40a2-a687-6d9791653a18
:CREATED: [2022-06-07 Tue 22:48]
:END:
*** financial :_fin:
*** intellectual :_int:
*** metaphysical :_met:
*** physical :_phy:
**** TODO something physically pleasing
:PROPERTIES:
:ID: d6d4dbd9-4d8c-4a1c-81a4-a26776b9627b
:CREATED: [2022-06-07 Tue 22:48]
:END:
*** professional :_pro:
*** recreational :_rec:
*** social :_soc:
** Quarter 3 :Q3:
*** environmental :_env:
*** financial :_fin:
**** TODO make it raaaaaaaain
:PROPERTIES:
:ID: a1a68f4f-1749-425b-afdc-ef79bbe10417
:CREATED: [2022-06-07 Tue 22:49]
:END:
*** intellectual :_int:
**** TODO something that tickles my brain
:PROPERTIES:
:ID: 63259156-ce5d-442a-b6e4-fd4053239db5
:CREATED: [2022-06-07 Tue 22:48]
:END:
*** metaphysical :_met:
*** physical :_phy:
*** professional :_pro:
**** TODO be a wall street bro
:PROPERTIES:
:ID: 9e63d6aa-f217-422b-a996-d9612c972855
:CREATED: [2022-06-07 Tue 22:49]
:END:
*** recreational :_rec:
*** social :_soc:
**** TODO get a life
:PROPERTIES:
:ID: e9c2474f-1c27-4ba4-b46e-5d4e40d560b8
:CREATED: [2022-06-07 Tue 22:49]
:END:

View File

@ -0,0 +1,15 @@
* TODO don't die of hunger
:PROPERTIES:
:ID: 4e7a934a-62ec-4ed5-ab84-e9e7e745b495
:CREATED: [2022-06-07 Tue 22:39]
:END:
* TODO don't get nuked
:PROPERTIES:
:ID: 26bbf72f-51cf-40ba-a7dd-ca689bcd1627
:CREATED: [2022-06-07 Tue 22:40]
:END:
** TODO make a bunker
:PROPERTIES:
:ID: e16514a0-626c-476f-b647-1eaf6580c57a
:CREATED: [2022-06-07 Tue 22:40]
:END:

View File

@ -0,0 +1,71 @@
* 2022 :Y22:
** June :M06:
*** TODO 2022-06-06
SCHEDULED: <2022-06-06 Mon>
:PROPERTIES:
:ID: 76534d4a-e516-495c-b083-5b053c44af1d
:X-WEEK-LEN: 7
:END:
**** TODO Monday
SCHEDULED: <2022-06-06 Mon>
:PROPERTIES:
:ID: 6b53ee41-b467-4bfb-a580-6218a3c78068
:END:
***** DONE be social
CLOSED: [2022-08-07 Sun 23:28]
:PROPERTIES:
:ID: f02504bd-45f8-4da6-936e-1b15e043f3d4
:CREATED: [2022-06-07 Tue 22:50]
:END:
:LOGGING:
- State "DONE" from "TODO" [2022-08-07 Sun 23:28]
:END:
**** TODO Tuesday
SCHEDULED: <2022-06-07 Tue>
:PROPERTIES:
:ID: 93955806-3b04-4ee5-8be5-fb8a9117c6b7
:END:
**** TODO Wednesday
SCHEDULED: <2022-06-08 Wed>
:PROPERTIES:
:ID: 8b0de76b-fff9-4890-9e85-8f4ccabf4f12
:END:
***** TODO learn about bitcoin
:PROPERTIES:
:ID: ed1406ad-1231-46de-b026-8067411133dc
:CREATED: [2022-06-07 Tue 22:51]
:END:
**** TODO Thursday
SCHEDULED: <2022-06-09 Thu>
:PROPERTIES:
:ID: f977dca9-c8e6-47d0-a9cd-eba8194fcb96
:END:
**** TODO Friday
SCHEDULED: <2022-06-10 Fri>
:PROPERTIES:
:ID: 1d926eef-94c9-4b57-8cb0-225a308711e9
:END:
***** CANC learn to gamble
CLOSED: [2022-08-07 Sun 23:28]
:PROPERTIES:
:ID: ab077745-4041-458f-90ec-02aaecb2729d
:CREATED: [2022-06-07 Tue 22:51]
:END:
:LOGGING:
- State "CANC" from "TODO" [2022-08-07 Sun 23:28]
:END:
**** TODO Saturday
SCHEDULED: <2022-06-11 Sat>
:PROPERTIES:
:ID: 24659f4b-1e0d-4022-a4cc-359a7bb15592
:END:
***** TODO build nuclear bunker
:PROPERTIES:
:ID: bfe5d3c1-3b7d-46f9-9c60-8a2bdec08d6d
:CREATED: [2022-06-07 Tue 22:51]
:END:
**** TODO Sunday
SCHEDULED: <2022-06-12 Sun>
:PROPERTIES:
:ID: 541245c4-e51d-48ae-ab51-e29325d5c9fe
:END:

View File

@ -0,0 +1,442 @@
;;; org-x-dag-test.el --- Smesh my API -*- lexical-binding: t -*-
;; Copyright (C) 2015 Free Software Foundation, Inc.
;; 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 <http://www.gnu.org/licenses/>.
;;; Commentary:
;; run tests with this (in the org-x directory above this one):
;; emacs -batch -l init.el -l local/lib/org-x/test/org-x-dag-test.el -f buttercup-run
;;; Code:
(require 's)
(require 'dash)
(require 'either)
(require 'org-x)
(defun setup ()
(setq org-directory (nd/expand-lib-directory "org-x/test/dag")
org-x-action-files (list "action1.org" "action2.org")
org-x-endpoint-goal-file "endpoint.org"
org-x-lifetime-goal-file "lifetime.org"
org-x-survival-goal-file "survival.org"
org-x-daily-plan-file "daily.org"
org-x-weekly-plan-file "weekly.org"
org-x-quarterly-plan-file "quarterly.org"))
(defun partition-timestamp (s)
(->> (org-ml-from-string 'timestamp s)
(org-x-dag-partition-timestamp)))
(defun timestamp-to-datetime (s)
(->> (org-ml-from-string 'timestamp s)
(org-ml-timestamp-get-start-time)))
(defun timestamp-to-epoch (s)
(->> (org-ml-from-string 'timestamp s)
(org-ml-timestamp-get-start-time)
(org-ml-time-to-unixtime)))
(buttercup-define-matcher :to-be-left-with (a x)
(cl-destructuring-bind
((a-expr . a) (x-expr . x))
(mapcar #'buttercup--expr-and-value (list a x))
(either-from a
(lambda (l)
(if (equal l x)
`(t . ,(format "Expected %s left with %s" a-expr x))
`(nil . ,(format "Expected %s left with %s, but got left with %s"
a-expr x l))))
(lambda ()
`(nil . ,(format "Expected %s to be a left, got a right" a-expr))))))
(buttercup-define-matcher :to-be-right-with (a x)
(cl-destructuring-bind
((a-expr . a) (x-expr . x))
(mapcar #'buttercup--expr-and-value (list a x))
(either-from a
(lambda ()
`(nil . ,(format "Expected %s to be a right, got a left" a-expr)))
(lambda (r)
(if (equal r x)
`(t . ,(format "Expected %s right with %s" a-expr x))
`(nil . ,(format "Expected %s right with %s, but got right with %s"
a-expr x r)))))))
(defun split-plists (eq-funs a b)
(cl-flet
((get-keys
(x)
(->> (-partition 2 x)
(-map #'car)))
(key-eq
(k)
(let ((av (plist-get a k))
(bv (plist-get b k))
(f (or (plist-get eq-funs k) #'equal)))
(funcall f av bv))))
(let* ((a* (get-keys a))
(b* (get-keys b))
(a- (-difference a* b*))
(b- (-difference b* a*))
(common (->> (-intersection a* b*)
(--reduce-from (if (key-eq it) acc
(cons (list it
(plist-get a it)
(plist-get b it))
acc))
nil))))
`(,a- ,b- ,common))))
(defun plists-equal-p (a b)
(equal (split-plists nil a b) '(nil nil nil)))
(defun element-equal-p (a b)
;; NOTE this does not compare children of elements/objects
(cl-flet
((get-useful-props
(node)
(->> (org-ml-get-all-properties node)
(-partition 2)
(--remove (memq (car it) '(:parent :begin :end :contents-begin :contents-end)))
(-flatten-n 1))))
(and (eq (org-ml-get-type a) (org-ml-get-type b))
(plists-equal-p (get-useful-props a) (get-useful-props b)))))
(defun pts-equal-p (a b)
(-let (((&plist :datetime da :repeater ra :warning wa :length la) a)
((&plist :datetime db :repeater rb :warning wb :length lb) b))
(and (equal da db)
(equal ra rb)
(equal wa wb)
(equal la lb))))
(defun plist-diff-msg (eq-funs expr a b)
(-let (((a-diff b-diff common-diffs) (split-plists eq-funs a b)))
(cond
((and a-diff b-diff)
(format "Expected %s to have keys '%s' and not to have keys '%s'"
expr b-diff a-diff))
(a-diff
(format "Expected %s not to have keys '%s'" expr a-diff))
(b-diff
(format "Expected %s to have keys '%s'" expr b-diff))
(common-diffs
(-let (((as bs)
(->> common-diffs
(--map `((,(car it) ,(nth 1 it)) (,(car it) ,(nth 2 it))))
(apply #'-zip-lists))))
(format "Expected %s to have key/value pairs '%s' but instead had '%s'"
expr as bs))))))
(defun status-diff-msg (eq-funs expr type subtype data to-test)
(-let* (((type* . rest) to-test)
((subtype* last) (-split-at (length subtype) rest))
(data* (car last)))
(cond
((not (eq type* type))
(format "Expected %s to have type '%s' but instead had type '%s'"
expr type type*))
((and subtype (not (equal subtype* subtype)))
(format "Expected %s to have subtype '%s' but instead had subtype '%s'"
expr subtype subtype*))
(t
(plist-diff-msg eq-funs expr data data*)))))
(defun ancestry-diff-msg (eq-funs expr ancestry inner-fun to-test)
(declare (indent 3))
(-let* (((&plist :ancestry A :local L) to-test))
(or (plist-diff-msg eq-funs expr A ancestry)
(funcall inner-fun L))))
(defun buffer-status-diff-msg (expr type inner-fun to-test)
(declare (indent 3))
(-let (((type* . rest) to-test))
(if (eq type type*) (funcall inner-fun rest)
(format "Expected buffer-status %s to be type '%s' but instead was type '%s'"
expr type type*))))
(defun right-diff-msg (expr inner-fun to-test)
(declare (indent 2))
(either-from to-test
(lambda ()
(format "Expected %s to be a right, got a left" expr))
inner-fun))
;; TODO this will eventually have canceled as part of it
(buttercup-define-matcher :id-to-be-tlg (to-test type status)
(cl-destructuring-bind
((test-expr . test) (_ . y) (_ . s))
(->> (list to-test type status)
(-map #'buttercup--expr-and-value))
(let ((f (->> (-partial #'status-diff-msg nil test-expr s nil nil)
(-partial #'buffer-status-diff-msg test-expr y)
(-partial #'right-diff-msg test-expr))))
(-if-let (m (funcall f (org-x-dag-id->bs test)))
(cons nil m)
(cons t (format "Expected '%s' not to be the indicated action" test-expr))))))
(buttercup-define-matcher :id-to-be-action (to-test canceled held deadline
type subtype data)
(cl-destructuring-bind
((test-expr . test) (_ . c) (_ . h) (_ . e) (_ . y) (_ . s) (_ . d))
(->> (list to-test canceled held deadline type subtype data)
(-map #'buttercup--expr-and-value))
(let* ((ancestry (list :canceled-parent-p c
:held-parent-p h
:parent-deadline e))
(ancestry-eq-funs nil)
(local-eq-funs (list :sched #'element-equal-p
:child-scheds #'pts-equal-p))
(f (->> (-partial #'status-diff-msg local-eq-funs test-expr y s d)
(-partial #'ancestry-diff-msg ancestry-eq-funs test-expr ancestry)
(-partial #'buffer-status-diff-msg test-expr :action)
(-partial #'right-diff-msg test-expr))))
(-if-let (m (funcall f (org-x-dag-id->bs test)))
(cons nil m)
(cons t (format "Expected '%s' not to be the indicated action" test-expr))))))
(buttercup-define-matcher :id-to-be-qtp (to-test status deadline date)
(cl-destructuring-bind
((test-expr . test) (_ . s) (_ . d) (_ . D))
(->> (list to-test status deadline date)
(-map #'buttercup--expr-and-value))
(let* ((local-eq-funs (list :deadline #'element-equal-p :date #'eq))
(abs-date (org-x-dag-date-to-absolute D))
(data (list :deadline d :date abs-date))
(f (->> (-partial #'status-diff-msg local-eq-funs test-expr s nil data)
(-partial #'buffer-status-diff-msg test-expr :quarterly)
(-partial #'right-diff-msg test-expr))))
(-if-let (m (funcall f (org-x-dag-id->bs test)))
(cons nil m)
(cons t (format "Expected '%s' not to be the indicated action" test-expr))))))
;; (buttercup-define-matcher :id-to-be-wkp (to-test status subtype date)
;; (cl-destructuring-bind
;; ((test-expr . test) (_ . s) (_ . y) (_ . d))
;; (->> (list to-test status subtype date)
;; (-map #'buttercup--expr-and-value))
;; (let* ((abs-date (org-x-dag-date-to-absolute d))
;; (f (->> (-partial #'status-diff-msg nil test-expr y `(,s) abs-date)
;; (-partial #'buffer-status-diff-msg test-expr :weekly)
;; (-partial #'right-diff-msg test-expr))))
;; (-if-let (m (funcall f (org-x-dag-id->bs test)))
;; (cons nil m)
;; (cons t (format "Expected '%s' not to be the indicated action" test-expr))))))
;; (buttercup-define-matcher :to-have-same-as-plist (a b)
;; (cl-destructuring-bind
;; ((a-expr . a) (b-expr . b))
;; (mapcar #'buttercup--expr-and-value (list a b))
;; (let* ((a* (-partition 2 a))
;; (b* (-partition 2 b))
;; (a-diff (->> (-difference a* b*) (--map (format "%S" it)) (s-join ", ")))
;; (b-diff (->> (-difference b* a*) (--map (format "%S" it)) (s-join ", "))))
;; (cond
;; ((and a-diff b-diff)
;; (cons nil (format "Expected %s to have pairs '%s' and not to have pairs '%s'"
;; a-expr b-diff a-diff)))
;; (a-diff
;; (cons nil (format "Expected %s not to have pairs '%s'" a-expr a-diff)))
;; (b-diff
;; (cons nil (format "Expected %s to have pairs '%s'" a-expr b-diff)))
;; (t
;; (cons t (format "Expected %s not to have same items as '%s'"
;; a-expr b-expr)))))))
(defmacro bs-ltg-active (id)
(declare (indent 1))
`(expect (org-x-dag-id->bs ,id) :to-be-right-with '(:lifetime :active)))
(describe "Sync DAG"
(before-all
(setup))
(it "Sync completes without error"
(expect (org-x-dag-sync t) :not :to-throw))
(describe "Lifetime buffer statuses"
(it "Active (toplevel)"
(expect "d6e92244-b1a0-4161-83bc-5a1f0af5541d" :id-to-be-tlg
:lifetime :active))
(it "Active (nested)"
(expect "adc08873-b9fa-423d-950d-db645db05fe5" :id-to-be-tlg
:lifetime :active)))
(describe "Survival buffer statuses"
(it "Active (toplevel)"
(expect "4e7a934a-62ec-4ed5-ab84-e9e7e745b495" :id-to-be-tlg
:survival :active))
(it "Active (nested)"
(expect "e16514a0-626c-476f-b647-1eaf6580c57a" :id-to-be-tlg
:survival :active)))
(describe "Action buffer statuses"
(describe "Projects"
(it "Active"
(expect "a98df83f-bc98-4767-b2bc-f1054dbf89f9" :id-to-be-action
nil nil nil :sp-proj '(:proj-active) '(:child-scheds nil)))
(it "Active (scheduled)"
(let ((sched (partition-timestamp "<2022-06-10 Fri>")))
(expect "3788c7bc-390e-4caf-af8e-06831ff3276b" :id-to-be-action
nil nil nil :sp-proj '(:proj-active)
`(:child-scheds (,sched)))))
(it "Wait"
(expect "26586b4d-7fc7-4a9f-b86f-e3c26a83a507" :id-to-be-action
nil nil nil :sp-proj '(:proj-wait) nil))
(it "Held (toplevel)"
(expect "d5065c21-b717-41fe-8232-22afbd6b2243" :id-to-be-action
nil nil nil :sp-proj '(:proj-held) nil))
(it "Held (subtask)"
(expect "a771dc18-0c5f-4196-903d-ada3c8a9d817" :id-to-be-action
nil nil nil :sp-proj '(:proj-held) nil))
(it "Stuck"
(expect "c93fe96f-7130-4433-a960-98c07a3b21f4" :id-to-be-action
nil nil nil :sp-proj '(:proj-stuck) nil))
(it "Completed"
(expect "87682ef6-cd4c-41a7-8f0d-6ac41e572b05" :id-to-be-action
nil nil nil :sp-proj '(:proj-complete)
'(:canceledp nil :epoch 1654902600)))
(it "Canceled"
(expect "eca77dea-4a40-4697-a69d-d1ec798fe9ba" :id-to-be-action
nil nil nil :sp-proj '(:proj-complete)
'(:canceledp t :epoch 1654902780))))
(describe "Project Tasks"
(it "Active"
(expect "2db32ed8-0a1f-488c-8e41-dd3549ac8b1b" :id-to-be-action
nil nil nil :sp-task '(:task-active)
'(:todo "NEXT" :sched nil :dead nil)))
(it "Waiting"
(expect "cf58280a-ac7c-4951-a3de-a3f79f92f2b0" :id-to-be-action
nil nil nil :sp-task '(:task-active)
'(:todo "WAIT" :sched nil :dead nil)))
(it "Held"
(expect "4f743d31-2df4-4e32-85de-cedae0cffeb2" :id-to-be-action
nil nil nil :sp-task '(:task-active)
'(:todo "HOLD" :sched nil :dead nil)))
(it "Completed"
(expect "61866e72-7153-44d1-ae0f-af527fe5f9f4" :id-to-be-action
nil nil nil :sp-task '(:task-complete)
'(:canceledp nil :epoch 1654903560)))
(it "Canceled"
(expect "322af50a-f431-4940-8caf-cc5acdf5a555" :id-to-be-action
nil nil nil :sp-task '(:task-complete)
'(:canceledp t :epoch 1654903560)))
(it "Deadlined"
(let ((d (timestamp-to-epoch "<2022-06-12 Sun>")))
(expect "fc1f3dda-a4b7-4b0d-b37c-fa67e112023a" :id-to-be-action
nil nil d :sp-task '(:task-active)
'(:todo "NEXT" :sched nil :dead nil)))))
(describe "Standalone Tasks"
(it "Active"
(expect "cda28b1a-2b7d-48ea-b1df-e006be799c2f" :id-to-be-action
nil nil nil :sp-task '(:task-active)
'(:sched nil :dead nil :todo "TODO"))))
(describe "Iterators"
(it "Active non-empty"
(let ((s0 (partition-timestamp "<2022-06-07 Tue>"))
(s1 (partition-timestamp "<2022-06-14 Tue>"))
(s2 (partition-timestamp "<2022-06-21 Tue>")))
(expect "2711e9b9-f765-415d-930f-b7ff16b3140b" :id-to-be-action
nil nil nil :sp-iter '(:iter-nonempty :nonempty-active)
(list :child-scheds `(,s0 ,s1 ,s2)
:leading-sched-dt (plist-get s2 :datetime)
:dead nil))))
(it "Active non-empty (with project)"
(let ((s0 (partition-timestamp "<2022-06-12 Tue>"))
(s1 (partition-timestamp "<2022-06-14 Tue>")))
(expect "6b33c33b-2ce8-405d-b2bb-917305dfa840" :id-to-be-action
nil nil nil :sp-iter '(:iter-nonempty :nonempty-active)
(list :child-scheds `(,s0 ,s1)
:leading-sched-dt (plist-get s1 :datetime)
:dead nil))))
(it "Active empty"
(expect "15cfb339-358a-49ce-8cb3-9bcfb1c5a126" :id-to-be-action
nil nil nil :sp-iter '(:iter-empty :empty-active) nil))
(it "Complete non-empty"
(expect "f2002c13-5ddd-46ec-9895-67182d89dd19" :id-to-be-action
nil nil nil :sp-iter '(:iter-nonempty :nonempty-complete)
'(:canceledp nil :epoch 1654902780)))
(it "Active empty"
(expect "6ac25533-ba98-4cce-b8a3-9dcf2ada5d77" :id-to-be-action
nil nil nil :sp-iter '(:iter-empty :empty-complete)
'(:canceledp nil :epoch 1654902780))))
(describe "Sub-iterators"
(it "Active task"
(let ((s (partition-timestamp "<2022-06-07 Tue>")))
(expect "b02619f6-b9da-4d78-acdd-409a4c5d747b" :id-to-be-action
nil nil nil :sp-subiter '(:si-task :task-active)
(list :sched s :dead nil))))
(it "Complete task"
(expect "fa290644-ba9a-42ac-a25a-a0cca5704d44" :id-to-be-action
nil nil nil :sp-subiter '(:si-task :task-complete)
'(:canceledp nil :epoch 1654902780)))
(it "Active project"
(let ((s0 (partition-timestamp "<2022-06-12 Sun>"))
(s1 (partition-timestamp "<2022-06-14 Sun>")))
(expect "ed5ff869-2d98-457e-8718-ebb0ca9c1e72" :id-to-be-action
nil nil nil :sp-subiter '(:si-proj :proj-active)
(list :dead nil
:child-scheds `(,s0 ,s1)
:leading-sched-dt (plist-get s1 :datetime)))))))
;; TODO add deadline to this (but in absolute form)
(describe "Quarterly buffer statuses"
(it "Active"
(expect "aa3e549c-b309-40a2-a687-6d9791653a18" :id-to-be-qtp
:active nil '(2022 4 1))))
;; (describe "Weekly buffer statuses"
;; (it "Active (leaf)"
;; (expect "ed1406ad-1231-46de-b026-8067411133dc" :id-to-be-wkp
;; :active :leaf '(2022 6 6))))
(describe "Metadata Tests"
(it "parent tag"
(expect (org-x-dag-id->tags "3de25d74-b90e-4c77-9f7f-8190187e7ed0")
:to-equal '("nice_tag")))
(it "local tag"
(expect (org-x-dag-id->local-tags "e4876e82-c8c8-4ff8-ad23-f78e3904b927")
:to-equal '("random_tag")))))
(provide 'org-x-dag-test)
;;; org-x-dag-test.el ends here

11
runtime_pkgs Executable file
View File

@ -0,0 +1,11 @@
#!/bin/bash
# Print a list of all pacman packages required to run this emacs configuration
this_dir=$(dirname "$0")
emacs -batch \
-l "$this_dir/init.el" \
-f nd/dump-arch-dependencies \
2> /dev/null | \
sed 's/"//'

33
straight-boot.el Normal file
View File

@ -0,0 +1,33 @@
;; disable automatic package updates
(setq straight-check-for-modifications nil)
;; watch for repo modifications if we have python3 and watchexec
;; otherwise just use a save hook
;; (setq straight-check-for-modifications
;; (if (and (executable-find "python3")
;; (executable-find "watchexec"))
;; '(watch-files find-when-checking)
;; '(check-on-save find-when-checking)))
;; add pinned packages to straight
;; (setq straight-profiles
;; '((nil . "default.el")
;; ;; Packages which are pinned to a specific commit.
;; (pinned . "pinned.el")))
;; bootstrap straight
(defvar bootstrap-version)
(let ((bootstrap-file
(expand-file-name "straight/repos/straight.el/bootstrap.el" user-emacs-directory))
(bootstrap-version 5))
(unless (file-exists-p bootstrap-file)
(with-current-buffer
(url-retrieve-synchronously
"https://raw.githubusercontent.com/raxod502/straight.el/develop/install.el"
'silent 'inhibit-cookies)
(goto-char (point-max))
(eval-print-last-sexp)))
(load bootstrap-file nil 'nomessage))
;; install use-package itself
(straight-use-package 'use-package)

View File

@ -1,139 +1,136 @@
(("ESS" . "e83ac622fe7e3cbfc848481a9257e5ed5c7b5afb")
(("ESS" . "950bf61054bd96d2203ac0457792c0af8dfba721")
("Highlight-Indentation-for-Emacs" . "d88db4248882da2d4316e76ed673b4ac1fa99ce3")
("ace-window" . "0577c426a9833ab107bab46c60d1885c611b2fb9")
("anaconda-mode" . "cbea0fb3182321d34ff93981c5a59f8dd72d82a5")
("annalist.el" . "134fa3f0fb91a636a1c005c483516d4b64905a6d")
("auctex" . "53b82804c9dd9dbea306876f3be84ebacbeb7e74")
("auth-source-xoauth2" . "d3890eaa3a46dc89758ec6b789949e70ae782896")
("avy" . "ba5f035be33693d1a136a5cbeedb24327f551a92")
("beacon" . "bde78180c678b233c94321394f46a81dc6dce1da")
("biblio.el" . "517ec18f00f91b61481214b178f7ae0b8fbc499b")
("blacken" . "764912ada13c3bf57e770fcd978c81a1ce26666a")
("ace-window" . "77115afc1b0b9f633084cf7479c767988106c196")
("anaconda-mode" . "f900bd7656a03aa24ef3295251f266736f7756eb")
("annalist.el" . "e1ef5dad75fa502d761f70d9ddf1aeb1c423f41d")
("auctex" . "ca8c9077c4c889cc11d150af9f0d9bd5914d702e")
("auth-source-xoauth2" . "5d1adfa649bb5a9df20a2fa89f235a55a64b52e4")
("avy" . "be612110cb116a38b8603df367942e2bb3d9bdbe")
("bats-mode" . "fa88930b1baba101ae6474f289a239a236a7d19f")
("beacon" . "85261a928ae0ec3b41e639f05291ffd6bf7c231c")
("biblio.el" . "ee52f6cda82ea6fbc3b400e7b12132595cc0374c")
("blacken" . "3c6eb86ad871ca14fcfd4e5c0e7b285afa1f1f71")
("c-eldoc" . "f4ede1f37f6de583376669735326367d84a0a917")
("cider" . "df34f141f32739e3c5657fb85ad6ff23520d44bf")
("citeproc-el" . "ba49516265fa24b138346c4918d39d19b4de8a62")
("clang-format" . "e48ff8ae18dc7ab6118c1f6752deb48cb1fc83ac")
("clojure-mode" . "b6f41d74904daa9312648f3a7bea7a72fd8e140b")
("company-anaconda" . "da1566db41a68809ef7f91ebf2de28118067c89b")
("citeproc-el" . "54184baaff555b5c7993d566d75dd04ed485b5c0")
("clang-format" . "9f4358fcc8b04018cc1ed46fcc96fc7bfa361a47")
("company-anaconda" . "169252fca79a79da41ef22f2ec0eab0cf1313966")
("company-auctex" . "9400a2ec7459dde8cbf1a5d50dfee4e300ed7e18")
("company-c-headers" . "9d384571b1190e99d0a789e5296176d69a3d0771")
("company-irony" . "b44711dfce445610c1ffaec4951c6ff3882b216a")
("company-math" . "45778f5731c97a21a83e3b965cbde42018709afd")
("company-mode" . "d5145006b948f93e673f439a766da01f636d39fc")
("compat" . "81378ce2549e6c6df5141d459036438cb98b9ad3")
("conda.el" . "7a34e06931515d46f9e22154762e06e66cfbc81c")
("csv-mode" . "53beddc207864b0c3f81da85b59245dff8eea5ce")
("dash.el" . "f9e6602ac9966b74a5ba6e3d332535543c84f4d5")
("delight" . "70cb8cec9e5eb2c24364e065d85c2ea8f14a587c")
("dired-du" . "4ce114a0195b852022a81b05f0c8e0cbbc1ed013")
("dired-hacks" . "7c0ef09d57a80068a11edc74c3568e5ead5cc15a")
("dockerfile-mode" . "b63a3d12b7dea0cb9efc7f78d7ad5672ceab2a3f")
("ebib" . "0e243a78f435038dda31953c5b48cbddf2a89e27")
("el-get" . "bf3dba444dcd240b8cb358a0850c8c5a92606134")
("elpy" . "1746e7009000b7635c0ea6f1559018143aa61642")
("emacs-async" . "c78bab7506a70a735d2c3deab13fa87bf44a83d3")
("emacs-buttercup" . "ceedad5efa797e860dbb356bc2c3028a4e0321ec")
("emacs-calfw" . "03abce97620a4a7f7ec5f911e669da9031ab9088")
("emacs-dashboard" . "34d1f97200055e6b521c131270d8322efc6c52be")
("emacs-format-all-the-code" . "828280eaf3b46112e17746a7d03235570a633425")
("emacs-htmlize" . "dd27bc3f26efd728f2b1f01f9e4ac4f61f2ffbf9")
("emacs-language-id" . "5325af36d9cd726de47a698ac159fce59f3fd6d9")
("company-math" . "3eb006874e309ff4076d947fcbd61bb6806aa508")
("company-mode" . "1321e285a54dfe43cae71f52e58bff4f0c8c161d")
("compat" . "99d74e635b76c3fa0b8403391e9d2efbd29f9901")
("conda.el" . "ce748a53f9c7d7a7d112632d32c848d6e5482e18")
("csv-mode" . "6979fc18ebe133cfe2fca02efda9a9f0cd13428a")
("dash.el" . "1de9dcb83eacfb162b6d9a118a4770b1281bcd84")
("delight" . "15acb0f0ba400c470e378f9984b315f9e02c1122")
("dhall-mode" . "87ab69fe765d87b3bb1604a306a8c44d6887681d")
("dired-du" . "c16cad8c40a022a03dee1956a15ff44d1e42dc07")
("dired-hacks" . "e9e408e8571aee5574ca0a431ef15cac5a3585d4")
("dockerfile-mode" . "39a012a27fcf6fb629c447d13b6974baf906714c")
("ebib" . "5ea510a1e4ab17a442352d0212777da5f78d4be2")
("el-get" . "c0713e8d8e8ad987fe1283d76b9c637a10f048ef")
("elpy" . "c40bab559fe77dcef6b90d5502eba1ecd566e86d")
("emacs-async" . "e1d46f97a56e0c57206bd1ea31d04311097a8cbb")
("emacs-buttercup" . "dfbef2177209e3a045e981b7d2956ec46ce3b25b")
("emacs-dashboard" . "187699e2d80f6a3b0ec7b2fb2e1d7ece2712208f")
("emacs-format-all-the-code" . "f8feea08fef7ed542b8e676e90445d57ebd2c458")
("emacs-htmlize" . "ed5e5b05fd260e8f161a488d56f10e7f6e01fb75")
("emacs-language-id" . "44452e4f7962aca41cc2539fce1d27799d6e656c")
("emacs-refactor" . "cac1b52932926f56d7f6d2923732d20bbd20670d")
("emacs-web-server" . "22ce66ea43e0eadb9ec1d691a35d9695fc29cee6")
("emacs-which-key" . "1ab1d0cc88843c9a614ed3226c5a1070e32e4823")
("emacsmirror-mirror" . "2e1ceba3c8036637832e99414d9012359911f5e4")
("epl" . "78ab7a85c08222cd15582a298a364774e3282ce6")
("evil" . "157af04d2cf466e301e82b0e667c5e7203fd96a2")
("emacs-reformatter" . "0d29a04d69d47599e2cb7f1a8f8e897a2b592921")
("emacs-request" . "01e338c335c07e4407239619e57361944a82cb8a")
("emacs-web-server" . "3982c55e9061475038a3ccd61aecb2de3d407cec")
("emacs-which-key" . "38d4308d1143b61e4004b6e7a940686784e51500")
("emacsmirror-mirror" . "8cbbdaa750c897d05ee71980834699a7d7c2d208")
("evil" . "5db0bdc7dcd9300b983526d37cbe480f35e36211")
("evil-ReplaceWithRegister" . "91cc7bf21a94703c441cc9212214075b226b7f67")
("evil-collection" . "98d28bc67909225a4746c557449c9da816f5d0f5")
("evil-commentary" . "2dab6ac34d1617971768ad219d73af48f7473fec")
("evil-org-mode" . "0d10ff7bb9a3a93d25cd91018b17f0a052b335f3")
("evil-surround" . "c9e1449bf3f740b5e9b99e7820df4eca7fc7cf02")
("f.el" . "bf586b80a5298df68a094f70bc1a1bd6f8e948df")
("evil-collection" . "772571fc6762b6cd1d35cc869e266de9a5c6022b")
("evil-commentary" . "c5945f28ce47644c828aac1f5f6ec335478d17fb")
("evil-org-mode" . "b1f309726b1326e1a103742524ec331789f2bf94")
("evil-surround" . "da05c60b0621cf33161bb4335153f75ff5c29d91")
("f.el" . "1e7020dc0d4c52d3da9bd610d431cab13aa02d8c")
("fill-column-indicator" . "c35f9de072c241699b57bcb46da84bed5af29cfe")
("flycheck" . "66a973afca1d03b8284baaa7590eb2b8615a1e6a")
("flycheck" . "7a6398ea3538a898eba0276f0f89b2f878325a89")
("flycheck-clang-analyzer" . "646d9f3a80046ab231a07526778695d5decad92d")
("flycheck-package" . "615c1ed8c6fb7c73abec6aaa73d3fef498d231bc")
("flyspell-correct" . "7d7b6b01188bd28e20a13736ac9f36c3367bd16e")
("gnu-elpa-mirror" . "808923d95777d378ca340b8020dd571e6a62460a")
("goto-chg" . "278cd3e6d5107693aa2bb33189ca503f22f227d0")
("graphviz-dot-mode" . "6e96a89762760935a7dff6b18393396f6498f976")
("haskell-mode" . "5a9f8072c7b9168f0a8409adf9d62a3e4ad4ea3d")
("helm-bibtex" . "ce8c17690ddad73d01531084b282f221f8eb6669")
("ht.el" . "c4c1be487d6ecb353d07881526db05d7fc90ea87")
("hydra" . "9e9e00cb240ea1903ffd36a54956b3902c379d29")
("flycheck-haskell" . "b7c4861aa754220b7d0cfc05aa0895bb35665683")
("flycheck-package" . "75efa098cf17dc14c363e2ca9b68afdac7766b5b")
("flyspell-correct" . "1e7a5a56362dd875dddf848b9a9e25d1395b9d37")
("gnu-elpa-mirror" . "3d0759ef4792b6461f2979a4e70e1c819df7283a")
("goto-chg" . "72f556524b88e9d30dc7fc5b0dc32078c166fda7")
("graphviz-dot-mode" . "8ff793b13707cb511875f56e167ff7f980a31136")
("haskell-mode" . "727f72a2a4b8e4fd0a7b62129668baea55a2c3e0")
("helm-bibtex" . "8b71b4f5ce62eeaf18067f57faaddc06449fbe1c")
("ht.el" . "1c49aad1c820c86f7ee35bf9fff8429502f60fef")
("hydra" . "317e1de33086637579a7aeb60f77ed0405bf359b")
("iedit" . "27c61866b1b9b8d77629ac702e5f48e67dfe0d3b")
("impatient-mode" . "479a2412596ff1dbdddeb7bdbba45482ce5b230c")
("inf-ruby" . "dbf4386bac12f1733257db6105e3f1fca05ffb79")
("inheritenv" . "c2c879acf89682559b157fb069e1da008f4912ea")
("irony-mode" . "870d1576fb279bb93f776a71e65f45283c423a9e")
("impatient-mode" . "a4e4e12852840996b027cb8e9fb2b809c37a0ee3")
("inf-ruby" . "b234625c85a48cc71e7045f5d48f079f410d576a")
("inheritenv" . "bac62ca6324828623cf8ce5a3d6aee0fcb65d620")
("irony-mode" . "40e0ce19eb850bdf1f77225f11713cc816250d95")
("jinja2-mode" . "03e5430a7efe1d163a16beaf3c82c5fd2c2caee1")
("js-comint" . "7920252e88eb610add7c9760f7016bb9b884307a")
("json-mode" . "eedb4560034f795a7950fa07016bd4347c368873")
("js-comint" . "ef2ccccad5740f3d8b5295f52a35df4f62471480")
("json-mode" . "77125b01c0ddce537085201098bea9b4b8ba6be3")
("json-snatcher" . "b28d1c0670636da6db508d03872d96ffddbc10f2")
("let-alist" . "592553db5929b54db40af0df90c5add0aaca045b")
("lispy" . "df1b7e614fb0f73646755343e8892ddda310f427")
("list-utils" . "ca9654cd1418e874c876c6b3b7d4cd8339bfde77")
("lua-mode" . "5a9bee8d5fc978dc64fcb677167417010321ba65")
("magit" . "9b48dd7e3618ac3736f66ef964ae5e1fedd54f98")
("map" . "9f46b9c966505874d68d9036827a4f63b55ab846")
("markdown-mode" . "1f709778ac7990f4a07fdf11fe37bc6541810b29")
("math-symbol-lists" . "590d9f09f8ad9aab747b97f077396a2035dcf50f")
("melpa" . "5be08102d4de84c35b18cd1e3321fe8b6836ff56")
("no-littering" . "a5aa3faada054f96b70b32ba9d9447f7a4cf403c")
("let-alist" . "4e05e158612f360f6080b1349d3962b1c8fee902")
("lispy" . "fe44efd21573868638ca86fc8313241148fabbe3")
("list-utils" . "f02dcef36330871855346f9eab97eef58d323d9a")
("lua-mode" . "d074e4134b1beae9ed4c9b512af741ca0d852ba3")
("magit" . "61f6a778ab5b0ca97069778a5955ae527996cd0f")
("markdown-mode" . "8a7773f87733866a961ea4c518a4a2f283f21970")
("math-symbol-lists" . "ac3eb053d3b576fcdd192b0ac6ad5090ea3a7079")
("melpa" . "a21e230a1e8034076b2a271809ccf613476eeea7")
("nix-mode" . "719feb7868fb567ecfe5578f6119892c771ac5e5")
("no-littering" . "8b07314d2f0594ff22bf798d9a5f5bf44b4dd4cd")
("nongnu-elpa" . "a9a649210a8d8b9295b5a1d0c7b60a77db03c14c")
("org-bullets" . "767f55feb58b840a5a04eabfc3fbbf0d257c4792")
("org-ml" . "f191ebfee6dcf6a05b5d1db43cf75f4a20faa8b4")
("org-ref" . "cbe9e870a5f488cdfc5e6a3b5478845ea8acdcde")
("org-sql" . "71b6e01ff94be4c68cfeb17a34518bf1f118cf95")
("org-super-agenda" . "3108bc3f725818f0e868520d2c243abe9acbef4e")
("org-ml" . "f57336a9126a168ad32ccce017c072474555395a")
("org-ref" . "fd178abf12a85f8e12005d1df683564bdc534124")
("org-sql" . "43376abf46b897a9a862cfcc1c087f4b8688634c")
("org-super-agenda" . "05a710065af5ee4b3982f9619f864f7af12ca1d3")
("origami.el" . "e558710a975e8511b9386edc81cd6bdd0a5bda74")
("outline-magic" . "2a5f07417b696cf7541d435c43bafcc64817636b")
("ox-pandoc" . "0a35d0fbfa56bdd9ec5ba5bac2fe002b61c05c52")
("package-lint" . "622a5a6e853e5a4c7f2b4c53e2ac0edde354b07c")
("paredit" . "8330a41e8188fe18d3fa805bb9aa529f015318e8")
("parsebib" . "dd4c5540fa6c2cd990cba324741d7abbc8ed2f23")
("parseclj" . "1ce54fa2eb7a5d99d34c07d271e18eaabd0489da")
("parseedn" . "a67204eeaa32ca8f11f6aeecc2a88349f196add6")
("password-store" . "c4d8a1d815e79ddd89a85d3e36a41d29f0475771")
("pcre2el" . "0b5b2a2c173aab3fd14aac6cf5e90ad3bf58fa7d")
("pdf-tools" . "f9ccdf99e560bae70d3a13325cec9dc0e3cc45b0")
("php-mode" . "4503672471b8fdaaea6c454344817a119c87fcc6")
("pkg-info" . "76ba7415480687d05a4353b27fea2ae02b8d9d61")
("pkgbuild-mode" . "8faee70e4640bd6ec1857651ec64e139e4dc2833")
("poly-R" . "e4a39caaf48e1c2e5afab3865644267b10610537")
("poly-markdown" . "d4ca396ec4a7d674ef0d671a6896f929ce5b504c")
("ox-pandoc" . "34e6ea97b586e20529d07158a73af3cf33cdd1d5")
("package-lint" . "972dd8403ac8d2d43f298ef89a6b118e49c7355f")
("paredit" . "037b9b8acbca75151f133b6c0f7f3ff97d9042e5")
("parsebib" . "ace9df707108b17759c004c7387655277122d4c1")
("password-store" . "b5e965a838bb68c1227caa2cdd874ba496f10149")
("pcre2el" . "b4d846d80dddb313042131cf2b8fbf647567e000")
("pdf-tools" . "30b50544e55b8dbf683c2d932d5c33ac73323a16")
("php-mode" . "59814bd80c59894022bc5950fb3bdf02420e8a89")
("pkgbuild-mode" . "8ef396d8fa9187b65c065a6bc2ca15dfaf3255df")
("poly-R" . "8024e852cfca642dea2045a41b2033baa2f1f9a5")
("poly-markdown" . "98695eb7ca4ca11dcec71a1cab64903bbf79b4d3")
("poly-noweb" . "3b0cd36ca9a707e8a09337a3468fa85d81fc461c")
("polymode" . "2094c92403fe395dfb2b8b2521da1012a966e9ab")
("popup-el" . "976bd8e06100df5a266377d0e5f63b104ba93119")
("powerline" . "566c77844f053cb39fa7acdfbc143a855450f0b5")
("projectile" . "e60883ff370c1545499b97cf56479de1a58c5b3b")
("pyenv-mode" . "b818901b8eac0e260ced66a6a5acabdbf6f5ba99")
("pythonic" . "fe75bc17baae314bf8f5e0b12aad3fccfc6c5397")
("polymode" . "ca060e081a1f849a880732670dc15370ac987b89")
("popup-el" . "c83d6e5f5fa693e08a542ea9ad7c06eced652de9")
("powerline" . "c35c35bdf5ce2d992882c1f06f0f078058870d4a")
("projectile" . "01fb6a5ef023bcfc52b209586dcb4fd13db00218")
("pythonic" . "c1e5643e044f1faaf6ecfadc719b981c048aeb79")
("pyvenv" . "31ea715f2164dd611e7fc77b26390ef3ca93509b")
("queue" . "130c2d656cd5d7376552272fab9e50a7c37d0c4a")
("rainbow-delimiters" . "a32b39bdfe6c61c322c37226d66e1b6d4f107ed0")
("rainbow-mode" . "55a8c15782197cd9db8950d2f5ed1b9caca08dae")
("robe" . "11207bd549a5a78e3a4d70265c3715990dcdab71")
("queue" . "8df1334d54d4735d2f821790422a850dfaaa08ef")
("rainbow-delimiters" . "f40ece58df8b2f0fb6c8576b527755a552a5e763")
("rainbow-mode" . "2e6b18609c2fdd1a2dc513937a64d276fd6cf24c")
("robe" . "6bc8a07fc483407971de0966d367a11006b3ab80")
("ruby-test-mode" . "d66db4aca6e6a246f65f7195ecfbc7581d35fb7a")
("rvm.el" . "c1f2642434b0f68d9baa0687127079ecd884ba12")
("s.el" . "08661efb075d1c6b4fa812184c1e5e90c08795a9")
("sesman" . "e0f555f963c9f02f8e4a50e06fc353eb4c15ee77")
("snakemake-mode" . "0dfeaff6079558c39081c2c078c41369da01903b")
("spaceline" . "9a81afa52738544ad5e8b71308a37422ca7e25ba")
("spacemacs-theme" . "bd376f705d6eb7afd9a1dfa0c1bd407e869d1e9f")
("spinner" . "34905eae12a236753fa88abc831eff1e41e8576e")
("straight.el" . "4517e118ee43f849f708025dbb2cf4f281793121")
("string-inflection" . "fd7926ac17293e9124b31f706a4e8f38f6a9b855")
("sudo-edit" . "23b78a39053088839f281bc0c3134203d7e04e50")
("swiper" . "f8d80a4055514f92d94f128f5fcb1cda79e5cd22")
("systemd-mode" . "b6ae63a236605b1c5e1069f7d3afe06ae32a7bae")
("tablist" . "faab7a035ef2258cc4ea2182f67e3aedab7e2af9")
("toc-org" . "bf2e4b358efbd860ecafe6e74776de0885d9d100")
("transient" . "2e4426fe8161893382f09b3f4635e152ee02488e")
("ts.el" . "3fee71ceefac71ba55eb34829d7e94bb3df37cee")
("use-package" . "a7422fb8ab1baee19adb2717b5b47b9c3812a84c")
("with-editor" . "4ab8c6148bb2698ff793d4a8acdbd8d0d642e133")
("yaml-mode" . "535273d5a1eb76999d20afbcf4d9f056d8ffd2da")
("yasnippet" . "5cbdbf0d2015540c59ed8ee0fcf4788effdf75b6")
("rvm.el" . "e1e83b5466c132c066142ac63729ba833c530c83")
("s.el" . "dda84d38fffdaf0c9b12837b504b402af910d01d")
("seq" . "da86da9bf111f68fb81efd466d76d53af5aebc00")
("snakemake-mode" . "4ad41da69e4b95b38a3d3273874c44caab20cc56")
("spaceline" . "086420d16e526c79b67fc1edec4c2ae1e699f372")
("spacemacs-theme" . "d02edec79404e807445b62d0d2fc1a6fbcc10c71")
("straight.el" . "88e574ae75344e39b436f863ef0344135c7b6517")
("string-inflection" . "617df25e91351feffe6aff4d9e4724733449d608")
("sudo-edit" . "74eb1e6986461baed9a9269566ff838530b4379b")
("swiper" . "2a25a6fb5b081cb141c5eccac8ee58ab1feeb747")
("tablist" . "fcd37147121fabdf003a70279cf86fbe08cfac6f")
("toc-org" . "6d3ae0fc47ce79b1ea06cabe21a3c596395409cd")
("transient" . "3d3f8711d4f6a6ff7f53bc22e465ec82587c62ed")
("ts.el" . "552936017cfdec89f7fc20c254ae6b37c3f22c5b")
("use-package" . "a6e856418d2ebd053b34e0ab2fda328abeba731c")
("with-editor" . "8c550d9e799a0baedb2164471e7ed19fc15d9196")
("xterm-color" . "2ad407c651e90fff2ea85d17bf074cee2c022912")
("yaml-mode" . "7b5ce294fb15c2c8926fa476d7218aa415550a2a")
("yasnippet" . "eb5ba2664c3a68ae4a53bb38b85418dd131b208f")
("zoutline" . "32857c6c4b9b0bcbed14d825a10b91a98d5fed0a"))
:beta
:gamma