↓ Skip to Content Start of content

Groundhog Day Resolutions - December 2021

December is finally here. This will be a brief GHD post as I'm working on the end-of-year one.

November's primary goals

1. Finish another primary goal

I completed another two sessions of deliberate practice, which took me past the minimum I set myself for the year.

2. Finish one secondary goal

I read two books in November to complete my "read more" goal.

3. Start planning my 2022 goals

I have a list of 2022 goal ideas ready; some are new, others are goals from years ago that I never completed.

Primary goals for December

1. Finish planning my 2022 goals

2. Set up the 2022 goals section of the site

3. Write my GHD 2021 summary post

Groundhog Day Resolutions - November 2021

October was my first month back on GHD goals after some time off. It went okay.

October's primary goals

1. Finish one primary goal

I spent some time working on improving my processes. This is something I've written about before and it's definitely something I overlook.

My primary focus was on improving my daily workflow; things like automating common tasks and learning more about the tools I use every day.

There are still improvements I'd like to make, mostly around my daily habits, but so far I'm happy with the changes I've made.

2. Finish one secondary goal

I ran a half marathon in October and it went much better than my first attempt. I was still a little slower than I would have liked, but considering I flew back from the UK 3 days before the race I'm pretty happy with my performance.

Primary goals for November

1. Finish another primary goal

There are a couple here that I can get done if I focus on them (and I think focus will be a theme for next year).

2. Finish one secondary goal

Some of these are month-long goals and probably won't get done this year, but there are one or two shorter ones I can work on.

3. Start planning my 2022 goals

I rushed my goal setting for 2021 and I think it shows. I'd like to take a more considered approach for 2022 and concentrate on things I actually want to do instead of what sounds good.

Filtering the Emacs dashboard agenda

I use emacs-dashboard to show an overview of my work when I start Emacs. It looks a little like this:

Emacs dashboard

The weekly agenda gives me a quick glance of what's scheduled for the week ahead, as well as any upcoming deadlines, but I wanted to tweak it slightly to remove some non-useful information.

I use the WAITING keyword to mark tasks that are waiting on someone else and don't require my attention. I have a separate agenda command to show me all WAITING tasks and there's no need for these to show on my dashboard.

The dashboard package provides a couple of different ways to customize the agenda view. One of those is dashboard-match-agenda-entry, which uses org-mode's tag and property matching to filter tasks.

Limiting the dashboard agenda looks like this:

;; Match just one TODO keyword.
(setq dashboard-match-agenda-entry

;; Match multiple keywords.
(setq dashboard-match-agenda-entry

;; Match everything except WAITING.
(setq dashboard-match-agenda-entry

There is a lot more to org-mode's matching system; I've used it to create custom views for displaying my monthly goals, but it can be used to match tags, categories, and even properties like Effort.

My Emacs Ledger reporting configuration

I've been using Ledger to keep track of my finances for several years, and one feature I really like is the ability to run reports from within Emacs via ledger-mode.

Creating these reports is done by customizing the ledger-reports variable. It's also possible to set them using the ledger-reports-add function, but I prefer to set them all in one go during setup.

My current list of reports looks like this:

(setq ledger-reports
 '(("bal"            "%(binary) -f %(ledger-file) bal")
   ("bal this month" "%(binary) -f %(ledger-file) bal -p %(month) -S amount")
   ("bal this year"  "%(binary) -f %(ledger-file) bal -p 'this year'")
   ("net worth"      "%(binary) -f %(ledger-file) bal Assets Liabilities")
   ("account"        "%(binary) -f %(ledger-file) reg %(account)")))
Shows the balance of all accounts; this also includes individual expenses (such as Expense:Car:Gas) so it's a pretty long report.
bal this month
As above, but only includes transactions from the current month.
bal this year
Same as bal, but limited to the current year.
net worth
A short report that shows what I've got in each account, as well as what I owe on loans and credit cards.
This prompts for an account name and then shows its transactions for the current file. This is useful for quickly seeing how much money has been spent on a specific category during the year.

Emacs reports that have the %(ledger-file) token are run against the current ledger file. I have my Ledger files stored in a projectile project so I can quickly jump to them to run reports or make adjustments.

Copying all Pocket highlights with a bookmarklet

I use Pocket for managing my reading list and make liberal use of its highlighting functionality. Although Pocket has an API - and an Emacs reader that works really well with it - there isn't a way to export highlights. This makes it a pain to process my notes to the point where I just don't do it.

To make things easier I wrote a little bit of JavaScript to export highlights from a Pocket article view. It wraps all highlights in org-mode quote tags, adds a title and "Source" link, and then copies everything to the clipboard.

It's not perfect; it doesn't handle images, and lists end up being copied line-by-line, but it makes the process much, much easier.

Drag the button below to your bookmarks bar, and then click it when viewing any highlighted article in Pocket to copy notes to the clipboard (tested in Firefox):

Copy Pocket Highlights

The un-minified source is below and can be modified to remove org-mode specific formatting if needed:

to_clipboard   = "#+TITLE: " + document.getElementsByTagName('h1')[0].innerHTML + "\n\n";
all_highlights = document.getElementsByClassName('highlight');

for (highlight in all_highlights) {
    highlight_text = all_highlights[highlight].innerHTML;
    if (typeof highlight_text !== 'undefined' && highlight_text.trim() != '') {
	to_clipboard += "#+begin_quote\n";
	to_clipboard += highlight_text.trim() + "\n";
	to_clipboard += "#+end_quote\n\n";

to_clipboard += "*Source*: " + document.getElementById('reader.external-link.view-original').href;