Compare commits

..

No commits in common. "master" and "plan_trees" have entirely different histories.

27 changed files with 1456 additions and 2298 deletions

4
.gitignore vendored
View File

@ -2,9 +2,7 @@
!.gitignore !.gitignore
!README.org !README.org
!init.el !init.el
!straight-boot.el !install_deps
!runtime_pkgs
!bin
# track versions of installed packages # track versions of installed packages
!straight !straight

View File

@ -1,21 +0,0 @@
#!/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

View File

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

View File

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

View File

@ -1,76 +0,0 @@
#!/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

View File

@ -1,10 +0,0 @@
#! /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" "$@"

View File

@ -1,12 +0,0 @@
#! /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: 14 KiB

After

Width:  |  Height:  |  Size: 31 KiB

38
init.el
View File

@ -1,6 +1,42 @@
;;;; init the straight package manager ;;;; init the straight package manager
(load-file (expand-file-name "straight-boot.el" user-emacs-directory)) ;; 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)
;; configure all config paths before anything else is loaded ;; configure all config paths before anything else is loaded
(use-package no-littering :straight t) (use-package no-littering :straight t)

18
install_deps Executable file
View File

@ -0,0 +1,18 @@
#!/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[@]}"

View File

@ -1 +0,0 @@
mu4e

View File

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

File diff suppressed because it is too large Load Diff

View File

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

View File

@ -1,223 +0,0 @@
* 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

@ -1,10 +0,0 @@
* 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

@ -1,10 +0,0 @@
* 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

@ -1,18 +0,0 @@
* 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

@ -1,15 +0,0 @@
* 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

@ -1,49 +0,0 @@
* 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

@ -1,15 +0,0 @@
* 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

@ -1,71 +0,0 @@
* 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

@ -1,442 +0,0 @@
;;; 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

View File

@ -1,11 +0,0 @@
#!/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/"//'

View File

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