Merge branch 'master' of gitea.esy.fun:yogsototh/her.esy.fun
173
src/about-me.org
|
@ -61,7 +61,7 @@ This will certainly be the best way for me to notice you among notifications.
|
||||||
:CUSTOM_ID: who-am-i
|
:CUSTOM_ID: who-am-i
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
I am mostly known for some of my older blog post.
|
My Internet presence is mostly known from older blog post.
|
||||||
In particular:
|
In particular:
|
||||||
|
|
||||||
- [[http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/][Learn Vim Progressively]]
|
- [[http://yannesposito.com/Scratch/en/blog/Learn-Vim-Progressively/][Learn Vim Progressively]]
|
||||||
|
@ -91,13 +91,172 @@ Right now there is no plan to make it opensource.
|
||||||
|
|
||||||
In our programmer community, tooling is essential.
|
In our programmer community, tooling is essential.
|
||||||
|
|
||||||
- emacs (former vim user)
|
- macOS
|
||||||
- spacemacs
|
- [[https://nixos.org][nix]] with [[https://github.com/nix-community/home-manager][home-manager]]
|
||||||
- org-mode / org-journal / org-roam
|
- [[https://yadm.io][yadm]] for things home-manager had difficult to handle
|
||||||
- magit / forge / github-review
|
- [[https://www.gnu.org/software/emacs/][emacs]] (former vim user)
|
||||||
- weechat
|
- [[https://github.com/hlissner/doom-emacs][doom-emacs]] (used [[https://www.spacemacs.org][spacemacs]] before)
|
||||||
- weeslack
|
- [[https://orgmode.org][org-mode]] / [[https://github.com/bastibe/org-journal][org-journal]] / [[https://www.orgroam.com][org-roam]]
|
||||||
|
- [[https://magit.vc][magit]] / [[https://magit.vc/manual/forge/][forge]] / [[https://github.com/charignon/github-review][github-review]]
|
||||||
|
- [[https://weechat.org][weechat]]
|
||||||
|
- [[https://github.com/wee-slack/wee-slack][wee-slack]]
|
||||||
|
|
||||||
|
** Internet consumption
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: internet-consumption
|
||||||
|
:END:
|
||||||
|
|
||||||
|
*** News
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: news
|
||||||
|
:END:
|
||||||
|
|
||||||
|
- [[https://lobste.rs/][lobsters]]
|
||||||
|
- [[https://news.ycombinator.com/][HN]]
|
||||||
|
- [[https://laarc.io][laarc]]
|
||||||
|
- [[https://www.discoverdev.io][discoverdev]]
|
||||||
|
- [[https://reddit.com/r/haskell][/r/haskell]]
|
||||||
|
- [[https://reddit.com/r/clojure][/r/clojure]]
|
||||||
|
|
||||||
|
*** RSS
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: rss
|
||||||
|
:END:
|
||||||
|
|
||||||
|
I mostly consume them via [[https://github.com/skeeto/elfeed][elfeed]] in emacs:
|
||||||
|
|
||||||
|
**** Imported Feeds :elfeed:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: imported-feeds
|
||||||
|
:END:
|
||||||
|
***** news :news:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: news-0675
|
||||||
|
:END:
|
||||||
|
****** [[https://hnrss.org/newest?points=1200][HN]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---hnrss-org-newest-points-1200--hn--
|
||||||
|
:END:
|
||||||
|
****** [[https://beepb00p.xyz/atom.xml][beepb00p.xyz ]] :tech:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---beepb00p-xyz-atom-xml--beepb00p-xyz---
|
||||||
|
:END:
|
||||||
|
****** [[https://esoteric.codes/rss][esoteric.codes]] :tech:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---esoteric-codes-rss--esoteric-codes--
|
||||||
|
:END:
|
||||||
|
***** haskell :haskell:fp:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: haskell
|
||||||
|
:END:
|
||||||
|
****** [[http://feeds.feedburner.com/ezyang][Inside 206-105]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---feeds-feedburner-com-ezyang--inside-206-105--
|
||||||
|
:END:
|
||||||
|
****** [[http://blog.jle.im/rss][in Code — Entries]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---blog-jle-im-rss--in-code---entries--
|
||||||
|
:END:
|
||||||
|
****** [[http://5outh.blogspot.com/feeds/posts/default][Abstract Nonsense]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---5outh-blogspot-com-feeds-posts-default--abstract-nonsense--
|
||||||
|
:END:
|
||||||
|
****** [[http://byorgey.wordpress.com/feed/][blog :: Brent -> String]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---byorgey-wordpress-com-feed---blog----brent----string--
|
||||||
|
:END:
|
||||||
|
****** [[http://www.haskellforall.com/feeds/posts/default][Haskell for all]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---www-haskellforall-com-feeds-posts-default--haskell-for-all--
|
||||||
|
:END:
|
||||||
|
****** [[http://themonadreader.wordpress.com/feed/][The Monad.Reader]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---themonadreader-wordpress-com-feed---the-monad-reader--
|
||||||
|
:END:
|
||||||
|
****** [[http://blog.poisson.chat/./rss.xml][Lysxia's blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---blog-poisson-chat---rss-xml--lysxia's-blog--
|
||||||
|
:END:
|
||||||
|
****** [[http://blog.docmunch.com/blog?format=rss][The Docmunch blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---blog-docmunch-com-blog-format-rss--the-docmunch-blog--
|
||||||
|
:END:
|
||||||
|
****** [[http://bitemyapp.com/rss.xml][bitemyapp]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---bitemyapp-com-rss-xml--bitemyapp--
|
||||||
|
:END:
|
||||||
|
****** [[http://www.serpentine.com/blog/feed/][teideal glic deisbhéalach]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---www-serpentine-com-blog-feed---teideal-glic-deisbhéalach--
|
||||||
|
:END:
|
||||||
|
****** [[http://sigfpe.blogspot.com/feeds/posts/default][A Neighborhood of Infinity]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---sigfpe-blogspot-com-feeds-posts-default--a-neighborhood-of-infinity--
|
||||||
|
:END:
|
||||||
|
****** [[http://neilmitchell.blogspot.com/feeds/posts/default][Neil Mitchell's Haskell Blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---neilmitchell-blogspot-com-feeds-posts-default--neil-mitchell's-haskell-blog--
|
||||||
|
:END:
|
||||||
|
****** [[http://blog.jakubarnold.cz/feed.xml][Jakub Arnold Blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---blog-jakubarnold-cz-feed-xml--jakub-arnold-blog--
|
||||||
|
:END:
|
||||||
|
***** Functional :fp:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: functional
|
||||||
|
:END:
|
||||||
|
****** [[https://christine.website/blog.rss][Christine Dodrill]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---christine-website-blog-rss--christine-dodrill--
|
||||||
|
:END:
|
||||||
|
****** [[http://martintrojer.github.io/atom.xml][Martin's Blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---martintrojer-github-io-atom-xml--martin's-blog--
|
||||||
|
:END:
|
||||||
|
****** [[http://lambda-the-ultimate.org/rss.xml][Lambda the Ultimate]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---lambda-the-ultimate-org-rss-xml--lambda-the-ultimate--
|
||||||
|
:END:
|
||||||
|
****** [[http://feeds.feedburner.com/7sharp9][7Sharp9]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---feeds-feedburner-com-7sharp9--7sharp9--
|
||||||
|
:END:
|
||||||
|
****** [[http://okmij.org/ftp/rss.xml][oleg]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---okmij-org-ftp-rss-xml--oleg--
|
||||||
|
:END:
|
||||||
|
***** clojure :clojure:fp:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: clojure
|
||||||
|
:END:
|
||||||
|
****** [[http://blog.juxt.pro/rss.xml][JUXT Blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---blog-juxt-pro-rss-xml--juxt-blog--
|
||||||
|
:END:
|
||||||
|
****** [[http://feeds.cognitect.com/blog/feed.rss][Cognitect Blog]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --http---feeds-cognitect-com-blog-feed-rss--cognitect-blog--
|
||||||
|
:END:
|
||||||
|
***** misc :misc:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: misc
|
||||||
|
:END:
|
||||||
|
****** [[https://nesslabs.com/feed][nesslabs ]] :life:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---nesslabs-com-feed--nesslabs---
|
||||||
|
:END:
|
||||||
|
****** [[https://solar.lowtechmagazine.com/feeds/all.rss.xml][lowtechmag]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---solar-lowtechmagazine-com-feeds-all-rss-xml--lowtechmag--
|
||||||
|
:END:
|
||||||
|
***** Philo :philo:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: philo
|
||||||
|
:END:
|
||||||
|
****** [[https://bluelabyrinths.com/category/philosophy/feed/][bluelabyrinths]]
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: --https---bluelabyrinths-com-category-philosophy-feed---bluelabyrinths--
|
||||||
|
:END:
|
||||||
* former websites
|
* former websites
|
||||||
:PROPERTIES:
|
:PROPERTIES:
|
||||||
:CUSTOM_ID: old-websites
|
:CUSTOM_ID: old-websites
|
||||||
|
|
|
@ -1,6 +1,6 @@
|
||||||
html {
|
html {
|
||||||
font-family: Courier,monospace;
|
font-family: Menlo, Monaco, monospace;
|
||||||
font-size: 14px;
|
font-size: 1rem;
|
||||||
line-height: calc(1ex/0.37); }
|
line-height: calc(1ex/0.37); }
|
||||||
#TOC {text-align: left;}
|
#TOC {text-align: left;}
|
||||||
html,body { margin: 0; padding: 0; border: 0; }
|
html,body { margin: 0; padding: 0; border: 0; }
|
||||||
|
@ -12,11 +12,12 @@ h1,h2,h3,h4,h5,h6 {
|
||||||
p { text-align: justify; hyphens: auto; }
|
p { text-align: justify; hyphens: auto; }
|
||||||
pre { overflow-x: scroll; border: solid 1px; padding: 1ex; }
|
pre { overflow-x: scroll; border: solid 1px; padding: 1ex; }
|
||||||
pre > code { font-size: 0.875em; background: none; }
|
pre > code { font-size: 0.875em; background: none; }
|
||||||
code,pre { font-family: Courier, monospace; }
|
code,pre { font-family: Menlo, Monaco, monospace; }
|
||||||
figure { margin: 1rem 0; padding: 0; }
|
figure { margin: 1rem 0; padding: 0; }
|
||||||
.meta { font-size: small;}
|
.meta { font-size: small;}
|
||||||
.abstract { margin: 1rem; font-size: 0.875em; font-style: italic; }
|
.abstract { margin: 2rem 4rem; font-size: 0.875em; font-style: italic; }
|
||||||
#logo { display: inline-block; }
|
#logo { display: inline-block;
|
||||||
|
vertical-align: middle;}
|
||||||
#logo svg { width: 3em; }
|
#logo svg { width: 3em; }
|
||||||
#preamble, #postamble { text-align: center; }
|
#preamble, #postamble { text-align: center; }
|
||||||
#content,.content,#preamble,#postamble {
|
#content,.content,#preamble,#postamble {
|
||||||
|
@ -26,6 +27,12 @@ figure { margin: 1rem 0; padding: 0; }
|
||||||
margin: 0 auto;
|
margin: 0 auto;
|
||||||
}
|
}
|
||||||
figure img { width: 100%; }
|
figure img { width: 100%; }
|
||||||
|
sup, sub {
|
||||||
|
vertical-align: baseline;
|
||||||
|
position: relative;
|
||||||
|
top: -0.4em;
|
||||||
|
}
|
||||||
|
sub { top: 0.4em; }
|
||||||
.footdef > sup { vertical-align: top; font-size: medium; }
|
.footdef > sup { vertical-align: top; font-size: medium; }
|
||||||
.footdef > sup > a { padding: 0.5em; }
|
.footdef > sup > a { padding: 0.5em; }
|
||||||
.footpara { display: inline; }
|
.footpara { display: inline; }
|
||||||
|
@ -48,6 +55,7 @@ body>input { display: none; }
|
||||||
label { font-weight: 700; }
|
label { font-weight: 700; }
|
||||||
label:hover { cursor: pointer; }
|
label:hover { cursor: pointer; }
|
||||||
label ~ pre { margin-top: 0; }
|
label ~ pre { margin-top: 0; }
|
||||||
|
figcaption { text-align: right; font-family: italic; }
|
||||||
|
|
||||||
:root {
|
:root {
|
||||||
--b03: #2E3440;
|
--b03: #2E3440;
|
||||||
|
@ -67,18 +75,19 @@ label ~ pre { margin-top: 0; }
|
||||||
--b0: #989ea8;
|
--b0: #989ea8;
|
||||||
--b1: #b0bac7;
|
--b1: #b0bac7;
|
||||||
--b2: #ECEFF4;
|
--b2: #ECEFF4;
|
||||||
--b3: #fff;
|
--b3: rgb(248,249,251);
|
||||||
|
|
||||||
/* default light */
|
/* default light */
|
||||||
--bg: var(--b3);
|
--bg: var(--b3);
|
||||||
--rbg: var(--b2);
|
--rbg: var(--b2);
|
||||||
--fg0: var(--b0);
|
--fg0: var(--b0);
|
||||||
--fg: var(--b02);
|
--fg: #4c566a; /* var(--b02); */
|
||||||
--rfg: #000;
|
--rfg: var(--b03);
|
||||||
--hl: var(--o);
|
--hl: var(--o);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* dark preferred */
|
/* dark preferred */
|
||||||
|
/*
|
||||||
@media (prefers-color-scheme: dark)
|
@media (prefers-color-scheme: dark)
|
||||||
{
|
{
|
||||||
:root {
|
:root {
|
||||||
|
@ -102,7 +111,7 @@ label ~ pre { margin-top: 0; }
|
||||||
background: hsl(218,20%,18%);
|
background: hsl(218,20%,18%);
|
||||||
border-color: hsl(218,15%,23%);
|
border-color: hsl(218,15%,23%);
|
||||||
}
|
}
|
||||||
}
|
} */
|
||||||
|
|
||||||
/* light checked */
|
/* light checked */
|
||||||
input#l:checked ~ div {
|
input#l:checked ~ div {
|
||||||
|
@ -167,7 +176,7 @@ body, body > div {
|
||||||
background: var(--bg);
|
background: var(--bg);
|
||||||
color: var(--fg);
|
color: var(--fg);
|
||||||
}
|
}
|
||||||
a,a:visited { color: var(--hl); }
|
label:hover, a,a:visited { color: var(--hl); }
|
||||||
code { background: var(--rbg); }
|
code { background: var(--rbg); }
|
||||||
|
|
||||||
/* ---- SYNTAX HIGHLIGHTING ---- */
|
/* ---- SYNTAX HIGHLIGHTING ---- */
|
||||||
|
|
|
@ -1,242 +0,0 @@
|
||||||
:PROPERTIES:
|
|
||||||
:ID: 21c48431-c0db-4a34-95fe-7228fea6233f
|
|
||||||
:END:
|
|
||||||
#+TITLE: How I use org-mode
|
|
||||||
#+AUTHOR: Yann Esposito
|
|
||||||
#+EMAIL: yann@esposito.host
|
|
||||||
#+DATE: [2019-09-30 Mon]
|
|
||||||
#+KEYWORDS: org-mode
|
|
||||||
#+DESCRIPTION: How I use org-mode
|
|
||||||
#+OPTIONS: auto-id:t toc:t
|
|
||||||
|
|
||||||
In this article I'll try to give an overview of my current use of [[https://orgmode.org][org mode]].
|
|
||||||
I use org mode for:
|
|
||||||
|
|
||||||
- tasks management & tracking
|
|
||||||
- writing documents (articles, book, etc...)
|
|
||||||
- note taking ; which I consider slightly different from just writing documents
|
|
||||||
|
|
||||||
It took me a few month to discover a few great org-mode features that
|
|
||||||
really changed the way I looked at it.
|
|
||||||
After discovering those it is a real life changer.
|
|
||||||
|
|
||||||
I hope that I could help you discover why org mode is so praised and be
|
|
||||||
able to take advantage of its awesomeness faster than I did.
|
|
||||||
|
|
||||||
* Workflows
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: workflows
|
|
||||||
:END:
|
|
||||||
|
|
||||||
** Worfklow 1: See Things to do: org-agenda + clock
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: worfklow-1--org-agenda---clock
|
|
||||||
:END:
|
|
||||||
|
|
||||||
1. look at the current tasks planned for today
|
|
||||||
2. select a task, clock it
|
|
||||||
3. work on the task
|
|
||||||
4. back to the task and clock it out.
|
|
||||||
|
|
||||||
I work most of my using emacs[fn:emacs-digression].
|
|
||||||
Generally the first thing I do in the morning is opening `org-calendar`.
|
|
||||||
It looks like this:
|
|
||||||
|
|
||||||
#+ATTR_ORG: :width 400
|
|
||||||
#+CAPTION: Org super calendar view
|
|
||||||
#+NAME: fig:org-super-agenda
|
|
||||||
[[./img/org-super-agenda.png]]
|
|
||||||
|
|
||||||
Pretty brutalist interface which is a great thing to me.
|
|
||||||
Distraction free interface going to the essential.
|
|
||||||
|
|
||||||
With this view, I see what I planned to do today.
|
|
||||||
I also see a few "Due Soon" tasks in case I have the time to handle those.
|
|
||||||
|
|
||||||
When I start working on a task I start a clock on it (I simply type =I=
|
|
||||||
when my cursor is on the TODO line).
|
|
||||||
When I finished some task I change its status from TODO to something else.
|
|
||||||
Mainly I'm prompted when doing so:
|
|
||||||
|
|
||||||
#+BEGIN_SRC
|
|
||||||
{ [t] TODO [p] IN-PROGRESS [h] HOLD [w] WAITING
|
|
||||||
[d] DONE [c] CANCELLED [l] HANDLED }
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
And that's it.
|
|
||||||
The time spent on the task as been clocked I can work on another task.
|
|
||||||
|
|
||||||
Looking at the agenda view you could notice habits.
|
|
||||||
They start to become green when you are doing them correctly.
|
|
||||||
|
|
||||||
But generally, I don't use much direct clocking from the agenda.
|
|
||||||
Most of the time I prefer the capture mechanism.
|
|
||||||
Which bring us to "Worfklow 2".
|
|
||||||
|
|
||||||
|
|
||||||
** Workflow 2: Tracking; org-capture
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: workflow-2--org-capture-org-refile
|
|
||||||
:END:
|
|
||||||
|
|
||||||
Most of the tasks I perform on the day are not planned.
|
|
||||||
I have a generic routine + some prepared events and tasks to performs.
|
|
||||||
But during the day you have multiple interruptions, and part of my job is
|
|
||||||
to write code reviews too.
|
|
||||||
I cannot plan those.
|
|
||||||
|
|
||||||
In that case I use =org-capture= along =org-refile=.
|
|
||||||
Mainly =org-capture= helps you create a new TODO entry.
|
|
||||||
And =org-refile= will help you move that TODO entry to the correct place.
|
|
||||||
|
|
||||||
So let say I get a direct message in the chat asking me to do something.
|
|
||||||
I generally start org capture (for me it's =SPC X=).
|
|
||||||
I am presented with the following choice:
|
|
||||||
|
|
||||||
#+BEGIN_SRC
|
|
||||||
Select a capture template
|
|
||||||
=========================
|
|
||||||
|
|
||||||
[t] todo
|
|
||||||
[c] chat
|
|
||||||
[e] email
|
|
||||||
[m] meeting
|
|
||||||
[p] pause
|
|
||||||
[r] review
|
|
||||||
[w] work
|
|
||||||
[i] interruption
|
|
||||||
[f] chore
|
|
||||||
---------------------------------------------------------------------------
|
|
||||||
[q] Abort
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
In my example it was a chat interruption.
|
|
||||||
So I type =i= that presents me with this
|
|
||||||
|
|
||||||
#+BEGIN_SRC
|
|
||||||
**** IN-PROGRESS | :interruption:
|
|
||||||
:LOGBOOK:
|
|
||||||
[2020-09-23 Wed 08:01]
|
|
||||||
ref :: [link-to-where-I-was-in-emacs-when-captured]
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
My cursor placed where the =|= is displayed.
|
|
||||||
Here I add the tag =chat= and a small description, "dm from John about X" for example.
|
|
||||||
Then I type =C-c C-c= and the TODO is placed in a =tracker.org= file under
|
|
||||||
a date tree that looks like this:
|
|
||||||
|
|
||||||
#+BEGIN_SRC org-mode
|
|
||||||
* 2020
|
|
||||||
** 2020-W39
|
|
||||||
*** 2020-09-21 Monday
|
|
||||||
*** 2020-09-22 Tuesday
|
|
||||||
*** 2020-09-23 Wednesday
|
|
||||||
**** IN-PROGRESS Chat with John about X :interruption:chat:
|
|
||||||
:LOGBOOK:
|
|
||||||
CLOCK: [2020-09-23 Wed 17:58]
|
|
||||||
:END:
|
|
||||||
[2020-09-23 Wed 17:58]
|
|
||||||
ref ::
|
|
||||||
...
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
So the clock for this task started at the moment at made the capture.
|
|
||||||
In my workflow, I prefer to finish the capture and stop clock later.
|
|
||||||
So after I finished the capture, the clock is still running while the task
|
|
||||||
is put in my tracker file.
|
|
||||||
|
|
||||||
Once I finished with that task.
|
|
||||||
I can:
|
|
||||||
|
|
||||||
1. Jump to the tasks with =SPC n o= (=org-clock-goto=), and stop the
|
|
||||||
clock =SPC m c o= (=clock-out=).
|
|
||||||
2. Jump to the task and change its status to =DONE= which will stop the clock.
|
|
||||||
3. Capture another tasks which will stop the clock on the current task and
|
|
||||||
will start on the new one.
|
|
||||||
|
|
||||||
By the end of the day, my tracker file will contain a date tree with all
|
|
||||||
the tasks I done in the day.
|
|
||||||
All tasks nicely clocked.
|
|
||||||
I generally create a clock report that look like this:
|
|
||||||
|
|
||||||
#+BEGIN_SRC
|
|
||||||
#+BEGIN: clocktable :scope subtree :maxlevel 4 :timestamp t
|
|
||||||
#+CAPTION: Clock summary at [2020-09-23 Wed 08:20]
|
|
||||||
| Timestamp | Headline | Time | | | |
|
|
||||||
|------------------------+------------------------------------------------+--------+---+------+------|
|
|
||||||
| | *Total time* | *6:40* | | | |
|
|
||||||
|------------------------+------------------------------------------------+--------+---+------+------|
|
|
||||||
| | \_ 2020-09-21 Monday | | | 7:40 | |
|
|
||||||
| [2020-09-21 Mon 08:54] | \_ check chat | | | | 0:36 |
|
|
||||||
| [2020-09-21 Mon 09:30] | \_ check reviews | | | | 0:41 |
|
|
||||||
| [2020-09-21 Mon 10:11] | \_ check emails | | | | 0:07 |
|
|
||||||
| [2020-09-21 Mon 10:37] | \_ review PR about xxx | | | | 0:44 |
|
|
||||||
| [2020-09-21 Mon 11:21] | \_ update my PR from feedbacks | | | | 0:36 |
|
|
||||||
| [2020-09-21 Mon 12:08] | \_ review John's PR about Foo | | | | 0:12 |
|
|
||||||
| [2020-09-21 Mon 13:41] | \_ review M's PR about Bar | | | | 0:11 |
|
|
||||||
| [2020-09-21 Mon 13:53] | \_ another thing | | | | 0:16 |
|
|
||||||
| [2020-09-21 Mon 14:09] | \_ review PR | | | | 0:51 |
|
|
||||||
| [2020-09-21 Mon 15:00] | \_ work on PR | | | | 1:30 |
|
|
||||||
| [2020-09-21 Mon 16:49] | \_ check another PR | | | | 0:33 |
|
|
||||||
| [2020-09-21 Mon 17:03] | \_ answer email | | | | 0:55 |
|
|
||||||
| [2020-09-21 Mon 17:58] | \_ Chat John about X | | | | 0:28 |
|
|
||||||
|
|
||||||
#+END_SRC
|
|
||||||
|
|
||||||
And that's mostly it for TODOs and tasks handling.
|
|
||||||
|
|
||||||
** Workflow 3: Add new tasks; org-capture / org-refile
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: workflow-3--org-capture---org-refile
|
|
||||||
:END:
|
|
||||||
Another thing I do quite often.
|
|
||||||
I need to add new task to be done.
|
|
||||||
Be it for today or another day.
|
|
||||||
|
|
||||||
In that case, I generally use org-capture again.
|
|
||||||
This time I choose =t= for TODO and I generally detail the task to be done.
|
|
||||||
I add either a SCHEDULE (when I plan to start) or a DEADLINE (when this
|
|
||||||
must be finished) and I refile it.
|
|
||||||
|
|
||||||
So refile will start a fuzzy search to put this task under some subtree.
|
|
||||||
So instead of going to my =tracker.org= file, this goes to my =inbox.org=
|
|
||||||
file.
|
|
||||||
|
|
||||||
And it will appear in my agenda.
|
|
||||||
|
|
||||||
* Footnotes
|
|
||||||
:PROPERTIES:
|
|
||||||
:CUSTOM_ID: footnotes
|
|
||||||
:END:
|
|
||||||
|
|
||||||
[fn:emacs-digression]
|
|
||||||
/Short digression/:
|
|
||||||
Historically, I coded using different IDEs.
|
|
||||||
Then I worked for a company that forced me to use terrible keyboards and
|
|
||||||
after just a few weeks I started to have serious wrist issues.
|
|
||||||
So to minimize that pain I switched to vim.
|
|
||||||
And it was /awesome/.
|
|
||||||
Once you're use to the power of vim keybinding forever your soul will bound
|
|
||||||
to them.
|
|
||||||
So learning vim is a bit like learning a new music instrument.
|
|
||||||
You need to construct some muscle memory and integrate one after one new
|
|
||||||
tricks.
|
|
||||||
Once learned your personal editing power start to become overwhelming.
|
|
||||||
|
|
||||||
After a few years of vim, I wanted to try to explore new editor tooling.
|
|
||||||
So I switched to emacs using the spacemacs distribution.
|
|
||||||
So mainly it's vim but with even better keybindgs, helpers and within
|
|
||||||
emacs.
|
|
||||||
The main reason for the switch was that vimscript is a really bad language
|
|
||||||
to configure your editor.
|
|
||||||
Emacs use emacs-LISP.
|
|
||||||
For editor customization a LISP looked perfect to me.
|
|
||||||
LISP is still one of the most powerful and easy to use programming language
|
|
||||||
to date.
|
|
||||||
|
|
||||||
And recently, as my personal configuration started to grow so much I
|
|
||||||
switched to [[https://github.com/hlissner/doom-emacs][doom-emacs]].
|
|
||||||
I was quite hesitant to do the switch but so far its been a pleasure.
|
|
||||||
IMHO using [[https://github.com/hlissner/doom-emacs][doom-emacs]] is a lot better than using my own personal
|
|
||||||
configuration from scratch because I wouldn't be able to end up with so
|
|
||||||
much configuration quality.
|
|
|
@ -9,6 +9,19 @@
|
||||||
#+MACRO: br @@html:<br/>@@
|
#+MACRO: br @@html:<br/>@@
|
||||||
#+MACRO: pemail @@html: <a href="mailto:yann@esposito.host">Yann Esposito <yann@esposito.host></a>@@
|
#+MACRO: pemail @@html: <a href="mailto:yann@esposito.host">Yann Esposito <yann@esposito.host></a>@@
|
||||||
|
|
||||||
|
|
||||||
|
@@html:<nav>
|
||||||
|
<a href="/index.html">Home</a> |
|
||||||
|
<a href="/archive.html">Posts</a> |
|
||||||
|
<a href="/slides.html">Slides</a> |
|
||||||
|
<a href="/about-me.html">About</a>
|
||||||
|
<span class="details">
|
||||||
|
(<a href="https://gitea.esy.fun/yogsototh">code</a>
|
||||||
|
<a href="https://espial.esy.fun/u:yogsototh">bookmarks</a>
|
||||||
|
<a href="https://espial.esy.fun/u:yogsototh/notes">notes</a>)
|
||||||
|
</span>
|
||||||
|
</nav>@@
|
||||||
|
|
||||||
I'm a functional programmer, working remotely for Cisco.{{{br}}}
|
I'm a functional programmer, working remotely for Cisco.{{{br}}}
|
||||||
I work in Clojure and use Haskell/Purescript during the weekends.
|
I work in Clojure and use Haskell/Purescript during the weekends.
|
||||||
|
|
||||||
|
|
|
@ -44,6 +44,7 @@ goblins.
|
||||||
Those costume looks very bad and cheap.
|
Those costume looks very bad and cheap.
|
||||||
So much you can only find them not terrorizing but funny and ridiculous.
|
So much you can only find them not terrorizing but funny and ridiculous.
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
#+ATTR_HTML: A goblin
|
#+ATTR_HTML: A goblin
|
||||||
#+CAPTION: One goblin during the introduction scene of Troll 2
|
#+CAPTION: One goblin during the introduction scene of Troll 2
|
||||||
#+NAME: fig:troll-2-intro
|
#+NAME: fig:troll-2-intro
|
||||||
|
@ -55,6 +56,7 @@ To give you an idea, the only equal bad acting I ever witnessed was while
|
||||||
looking at amateurs first Youtube movies trying to follow a scenario.
|
looking at amateurs first Youtube movies trying to follow a scenario.
|
||||||
Apparently most actors were amateurs, it was their first and last movie.
|
Apparently most actors were amateurs, it was their first and last movie.
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
#+ATTR_HTML: A bad acting demonstration
|
#+ATTR_HTML: A bad acting demonstration
|
||||||
#+CAPTION: One particularly terrible acting scene
|
#+CAPTION: One particularly terrible acting scene
|
||||||
#+NAME: fig:bad-acting
|
#+NAME: fig:bad-acting
|
||||||
|
@ -83,6 +85,7 @@ They win against the monsters with, what I believe was a failed attempt at
|
||||||
humor.
|
humor.
|
||||||
It misses the point so bad, that the irony still make it funny.
|
It misses the point so bad, that the irony still make it funny.
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
#+ATTR_HTML: Eliott prevents his family to eat the food by urinating on the table
|
#+ATTR_HTML: Eliott prevents his family to eat the food by urinating on the table
|
||||||
#+CAPTION: Our hero save the day by urinating on the table. His family is frozen for 30s said grandpa, they were for 70s.
|
#+CAPTION: Our hero save the day by urinating on the table. His family is frozen for 30s said grandpa, they were for 70s.
|
||||||
#+NAME: fig:prevent-eating
|
#+NAME: fig:prevent-eating
|
||||||
|
|
|
@ -27,15 +27,15 @@ browser or mobile phone app.
|
||||||
|
|
||||||
How geeks should chat in 2019?
|
How geeks should chat in 2019?
|
||||||
|
|
||||||
To answer this question here is my opinion after having tried many
|
This post is about my opinion on the subject after having tried many
|
||||||
different chat solutions[fn:tries].
|
different chat solutions[fn:tries].
|
||||||
Here are the feature I think a modern solution should have:
|
Here is a list of the features I think a modern solution should have:
|
||||||
|
|
||||||
1. *terminal client* or *terminal-like UI* (in emacs for example).
|
1. *terminal client* or *terminal-like UI* (in emacs for example).
|
||||||
All modern UI looks cool for screenshots, but if you are going to use it
|
All modern UI looks cool for screenshots, but if you are going to use it
|
||||||
a lot, you will prefer density over good looking.
|
a lot, you will prefer density over good looking.
|
||||||
Most app, web app are terrible related to information by number of pixel
|
Most web apps are terrible when looking at delivered information by
|
||||||
ratio.
|
number of pixels ratio.
|
||||||
2. *multi-platform*: If you do not have a terminal at hand (or emacs) then,
|
2. *multi-platform*: If you do not have a terminal at hand (or emacs) then,
|
||||||
you should be able to get your message on your phone or via a web
|
you should be able to get your message on your phone or via a web
|
||||||
interface for portability.
|
interface for portability.
|
||||||
|
@ -49,9 +49,10 @@ Here are the feature I think a modern solution should have:
|
||||||
Chat should be about TEXT, not images, not videos, not presentations and
|
Chat should be about TEXT, not images, not videos, not presentations and
|
||||||
PDF.
|
PDF.
|
||||||
7. *No anti-features*: show when someone is typing, show when someone
|
7. *No anti-features*: show when someone is typing, show when someone
|
||||||
as read your message, etc... Those functionality are in fact increasing
|
as read your messages, etc... Those functionalities increase your
|
||||||
social insecurity and forces you to answer sooner instead of really
|
social insecurities feeling. They forces you to answer sooner instead of
|
||||||
taking the time to answer correctly.
|
really take the time to answer correctly. You can read Digitial
|
||||||
|
minimalism to know more about that subject[fn:dm].
|
||||||
8. *Free software*
|
8. *Free software*
|
||||||
|
|
||||||
I am quite disappointed by /modern/ chat applications.
|
I am quite disappointed by /modern/ chat applications.
|
||||||
|
@ -60,7 +61,7 @@ Their major problems are:
|
||||||
|
|
||||||
- *resource-heavy*; most those client applications (slack, gitter, riot,
|
- *resource-heavy*; most those client applications (slack, gitter, riot,
|
||||||
mattermost, etc...) easily consume more than 300MB of RAM.
|
mattermost, etc...) easily consume more than 300MB of RAM.
|
||||||
Most of the time those clients are all electron app.
|
Most of the time those clients are electron applications.
|
||||||
- *not private*; most solution do not encrypt your conversations.
|
- *not private*; most solution do not encrypt your conversations.
|
||||||
Even if using encryption mechanism and you trust your client, and you
|
Even if using encryption mechanism and you trust your client, and you
|
||||||
will still reveal your social network topology.
|
will still reveal your social network topology.
|
||||||
|
@ -207,7 +208,7 @@ server {
|
||||||
gzip off;
|
gzip off;
|
||||||
proxy_redirect off;
|
proxy_redirect off;
|
||||||
|
|
||||||
## Some requests take more than 30 seconds.
|
## Some requests take more than 30 seconds.
|
||||||
proxy_read_timeout 30s;
|
proxy_read_timeout 30s;
|
||||||
proxy_connect_timeout 30s;
|
proxy_connect_timeout 30s;
|
||||||
|
|
||||||
|
@ -218,10 +219,10 @@ server {
|
||||||
proxy_set_header X-Forwarded-Ssl on;
|
proxy_set_header X-Forwarded-Ssl on;
|
||||||
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
|
||||||
proxy_set_header X-Forwarded-Proto $scheme;
|
proxy_set_header X-Forwarded-Proto $scheme;
|
||||||
proxy_set_header X-Client-Verify SUCCESS;
|
proxy_set_header X-Client-Verify SUCCESS;
|
||||||
proxy_set_header X-Client-DN $ssl_client_s_dn;
|
proxy_set_header X-Client-DN $ssl_client_s_dn;
|
||||||
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
|
proxy_set_header X-SSL-Subject $ssl_client_s_dn;
|
||||||
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
|
proxy_set_header X-SSL-Issuer $ssl_client_i_dn;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Before Width: | Height: | Size: 20 KiB |
Before Width: | Height: | Size: 8.7 KiB |
After Width: | Height: | Size: 297 KiB |
|
@ -1,3 +1,6 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: c2e61938-8493-434a-9ffa-9fd4698d9863
|
||||||
|
:END:
|
||||||
#+Title: How to choose your tools
|
#+Title: How to choose your tools
|
||||||
#+Author: Yann Esposito
|
#+Author: Yann Esposito
|
||||||
#+Email: yann@esposito.host
|
#+Email: yann@esposito.host
|
||||||
|
@ -7,7 +10,7 @@
|
||||||
#+LANGUAGE: en
|
#+LANGUAGE: en
|
||||||
#+LANG: en
|
#+LANG: en
|
||||||
#+OPTIONS: H:5 auto-id:t
|
#+OPTIONS: H:5 auto-id:t
|
||||||
#+STARTUP: showeverything
|
+STARTUP: showeverything
|
||||||
|
|
||||||
This week I didn't take a look at HN to grab some news.
|
This week I didn't take a look at HN to grab some news.
|
||||||
And this week-end, in the morning I read those:
|
And this week-end, in the morning I read those:
|
||||||
|
@ -16,13 +19,11 @@ And this week-end, in the morning I read those:
|
||||||
- [[https://news.ycombinator.com/item?id=23107123][Making Emacs popular again]]
|
- [[https://news.ycombinator.com/item?id=23107123][Making Emacs popular again]]
|
||||||
- [[https://news.ycombinator.com/item?id=23092904][Github Codespace]]
|
- [[https://news.ycombinator.com/item?id=23092904][Github Codespace]]
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
#+ATTR_HTML: :alt Midsommar Welcome
|
#+ATTR_HTML: :alt Midsommar Welcome
|
||||||
#+DOWNLOADED: https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse1.mm.bing.net%2Fth%3Fid%3DOIP.g7OSuCGH0u7OIUA9vdxlTAEsCo%26pid%3DApi&f=1 @ 2020-05-09 12:49:34
|
#+NAME: Welcome to Halsingland
|
||||||
#+NAME: Welcome
|
#+CAPTION: Welcome to Halsingland
|
||||||
#+CAPTION: Midsommar Welcome
|
[[file:Welcome-to-Halsingland.jpg]]
|
||||||
[[file:2020-05-09_12-49-34_.jpeg]]
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
Similar articles have existed for years on different products.
|
Similar articles have existed for years on different products.
|
||||||
What is their common point?
|
What is their common point?
|
||||||
|
@ -92,10 +93,10 @@ For the single developers and open source developers this offer:
|
||||||
|
|
||||||
But the price to pay is hidden.
|
But the price to pay is hidden.
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
#+ATTR_HTML: :alt Midsommar Sorrow
|
#+ATTR_HTML: :alt Midsommar Sorrow
|
||||||
#+DOWNLOADED: https://external-content.duckduckgo.com/iu/?u=https%3A%2F%2Ftse1.mm.bing.net%2Fth%3Fid%3DOIP.FrCRrhENMjdfD4pUcAwKEgHaEK%26pid%3DApi&f=1 @ 2020-05-09 12:48:31
|
|
||||||
#+CAPTION: Midsommar Sorrow
|
#+CAPTION: Midsommar Sorrow
|
||||||
[[file:2020-05-09_12-48-31_.jpeg]]
|
[[file:midsommar-cry.jpg]]
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -178,9 +179,10 @@ future.
|
||||||
:CUSTOM_ID: post-conclusion
|
:CUSTOM_ID: post-conclusion
|
||||||
:END:
|
:END:
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
#+ATTR_HTML: :alt Midsommar Joy
|
#+ATTR_HTML: :alt Midsommar Joy
|
||||||
#+CAPTION: Midsommar Joy
|
#+CAPTION: Midsommar Joy
|
||||||
[[./midsommar-joy.jpeg]]
|
[[./midsommar-joy.jpg]]
|
||||||
|
|
||||||
To go beyond my opinion, I'd like to share my experience with editors and
|
To go beyond my opinion, I'd like to share my experience with editors and
|
||||||
emacs.
|
emacs.
|
||||||
|
|
BIN
src/posts/0013-how-to-choose-your-tools/midsommar-cry.jpg
Normal file
After Width: | Height: | Size: 90 KiB |
Before Width: | Height: | Size: 19 KiB |
BIN
src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpg
Normal file
After Width: | Height: | Size: 245 KiB |
|
@ -43,9 +43,9 @@ So here is my piece of code I added to my doom-emacs =config.el=:
|
||||||
(t 'doom-laserwave))))
|
(t 'doom-laserwave))))
|
||||||
(when (not (equal doom-theme theme))
|
(when (not (equal doom-theme theme))
|
||||||
(setq doom-theme theme)
|
(setq doom-theme theme)
|
||||||
(load-theme doom-theme t)
|
(load-theme doom-theme t))
|
||||||
;; run that function again next hour
|
;; run that function again next hour
|
||||||
(run-at-time (format "%02d:%02d" (+ hour 1) 0) nil 'y/auto-update-theme))))
|
(run-at-time (format "%02d:%02d" (+ hour 1) 0) nil 'y/auto-update-theme)))
|
||||||
|
|
||||||
(y/auto-update-theme)
|
(y/auto-update-theme)
|
||||||
#+END_SRC
|
#+END_SRC
|
||||||
|
|
Before Width: | Height: | Size: 179 KiB After Width: | Height: | Size: 179 KiB |
612
src/posts/0015-how-i-use-org-mode/index.org
Normal file
|
@ -0,0 +1,612 @@
|
||||||
|
:PROPERTIES:
|
||||||
|
:ID: 21c48431-c0db-4a34-95fe-7228fea6233f
|
||||||
|
:END:
|
||||||
|
#+TITLE: How I use org-mode
|
||||||
|
#+AUTHOR: Yann Esposito
|
||||||
|
#+EMAIL: yann@esposito.host
|
||||||
|
#+DATE: [2020-10-29 Thu]
|
||||||
|
#+KEYWORDS: org-mode
|
||||||
|
#+DESCRIPTION: How I use org-mode
|
||||||
|
#+OPTIONS: auto-id:t toc:t
|
||||||
|
|
||||||
|
#+begin_abstract
|
||||||
|
In this article I'll try to give an overview of my current use of [[https://orgmode.org][org mode]].
|
||||||
|
I use org mode for:
|
||||||
|
|
||||||
|
- tasks management & time tracking
|
||||||
|
- writing documents (articles, book, etc...)
|
||||||
|
- note taking ; which I consider slightly different from just writing documents
|
||||||
|
|
||||||
|
TL;DR:
|
||||||
|
|
||||||
|
- =SPC y a= ⇒ Show agenda view for today
|
||||||
|
- =SPC X= ⇒ Capture a new task, write a description, then =C-c C-c=, save
|
||||||
|
that in =tracker.org= (or =inbox.org= depending of the capture template)
|
||||||
|
- =SPC n o= ⇒ jump to the current time tracked tasks
|
||||||
|
- =SPC m c o= ⇒ stop the clock on that task; if you capture a new time
|
||||||
|
tracking tasks you don't need to clock-out
|
||||||
|
- =SPC y o r= ⇒ =org-refile=, meaning move that task somewhere else
|
||||||
|
- =SPC q= ⇒ add/remove tags to that task
|
||||||
|
#+end_abstract
|
||||||
|
|
||||||
|
In this article I would like to share a tool that was a real life changer
|
||||||
|
to me: [[http://orgmode.org][org mode]].
|
||||||
|
|
||||||
|
In my opinion emacs is worth learning just for org-mode.
|
||||||
|
This is by far the best solution I ever used to manage my tasks.
|
||||||
|
I tried a lot of differents tools before it, and this is the only one I
|
||||||
|
really stick with.
|
||||||
|
It is so versatile that it can adapt to your very specific needs.
|
||||||
|
|
||||||
|
The major difficulty faced by tasks management application is the wrong
|
||||||
|
level of complexity facing the user.
|
||||||
|
This is a very hard problem to tackle.
|
||||||
|
|
||||||
|
If your system is too simple, the users will not be able to manage the
|
||||||
|
tasks how they would like.
|
||||||
|
If your system is too complex, the user will be faced with too much
|
||||||
|
details.
|
||||||
|
So most successful systems have a way to adapt their apparent complexity to
|
||||||
|
the need of their users.
|
||||||
|
And org mode is exactly like that.
|
||||||
|
Not only starting with org mode can be extremely simple but also there are
|
||||||
|
mostly no complexity limit.
|
||||||
|
|
||||||
|
Either org mode already handle one of your need, or most of the time you
|
||||||
|
will find a package to fulfill your need.
|
||||||
|
And if not, it is easy to write your own.
|
||||||
|
|
||||||
|
Here is the result of a few years of improving my use of org mode.
|
||||||
|
Today I can say that org mode is part of my day to day life.
|
||||||
|
I still invest a bit of time to improve minor details of my workflow time
|
||||||
|
to time.
|
||||||
|
But now my daily workflow is mostly stable.
|
||||||
|
So I think I can share it.
|
||||||
|
|
||||||
|
** Overview
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: overview
|
||||||
|
:END:
|
||||||
|
|
||||||
|
*** daily routine
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: daily-routine
|
||||||
|
:END:
|
||||||
|
|
||||||
|
The first thing I do in the morning is to open =org-agenda= view for today.
|
||||||
|
It shows me the tasks planned for today.
|
||||||
|
What are urgent tasks, deadlines, tasks that have deadlines in a few days, etc...
|
||||||
|
I also have a glimpse of my habits, tasks that I should start at some hour
|
||||||
|
in the day, etc...
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
|
#+CAPTION: Org super calendar view
|
||||||
|
#+NAME: fig:org-super-agenda
|
||||||
|
[[./img/org-super-agenda.png]]
|
||||||
|
|
||||||
|
I then start to track (/clock/) the tasks I'm currently working on.
|
||||||
|
|
||||||
|
Often during the day, I need to create new tasks.
|
||||||
|
Most of the time I create a task and I add either a deadline or a schedule
|
||||||
|
date.
|
||||||
|
|
||||||
|
Sometime I also need to deal with interruptions.
|
||||||
|
In that case, I /capture/ the interruption that will also create a new task
|
||||||
|
being clocked.
|
||||||
|
|
||||||
|
At the end of the day, every tasks I worked on are saved in a =tracker.org=
|
||||||
|
file.
|
||||||
|
That file look like a date tree.
|
||||||
|
And I generally generate a /report/ that tell me how much hours I worked
|
||||||
|
today.
|
||||||
|
Some tasks are tagged =work=.
|
||||||
|
The report filter only on the =work= tagged tasks.
|
||||||
|
|
||||||
|
Also I have some repeating tasks like review memory cards using a spaced
|
||||||
|
repetition plugin.
|
||||||
|
I start it, and it shows me a few =cards= with questions that I review.
|
||||||
|
So mainly those cards contain info I want to keep in my mind and not only
|
||||||
|
in my notes.
|
||||||
|
|
||||||
|
*** document writing
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: document-writing
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Writing documents with org mode and in particular technical document is
|
||||||
|
just incredible.
|
||||||
|
Org mode feels a lot like markdown.
|
||||||
|
|
||||||
|
But org mode shine with its use of *org-babel*.
|
||||||
|
*org-babel* is used to execute code inside your document.
|
||||||
|
So you can execute block of code and get their result in block of code.
|
||||||
|
For technical writing this is extremely useful.
|
||||||
|
|
||||||
|
For example, I wrote most part of an OAuth2 provider in Clojure.
|
||||||
|
And to generate a documentation to some of our advanced users it is very
|
||||||
|
nice to provide the full HTTP request along the response.
|
||||||
|
|
||||||
|
But I also often need to play a few tricks in the doc and directly use our
|
||||||
|
Clojure code to generate JWT for example.
|
||||||
|
The great part is the ability to use those JWT generated from Clojure code
|
||||||
|
in the following code block making HTTP call.
|
||||||
|
|
||||||
|
That plus the natural ability to fold/unfold the tree structure of the org
|
||||||
|
mode file is great.
|
||||||
|
|
||||||
|
*** note taking
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: note-taking
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Time to time, I need to really take the time write note on a technical
|
||||||
|
subject or sometime about articles I read about anything.
|
||||||
|
For that I use [[https://github.com/org-roam/org-roam][org roam]].
|
||||||
|
I only started to use it a few months ago.
|
||||||
|
But this is a great addition to my previous workflow that used =deft= (that
|
||||||
|
I still use).
|
||||||
|
But I must say, this is pretty perfect as a note taking app.
|
||||||
|
|
||||||
|
Mainly you capture notes quite easily and put links about the subject, but
|
||||||
|
also tags.
|
||||||
|
In the end that generate a graph of notes that you could use later to dig
|
||||||
|
into your own notes.
|
||||||
|
*** journal
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: journaling
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Along with note taking.
|
||||||
|
I also try to write a journal note everyday.
|
||||||
|
For that I use org-journal (another org mode related package).
|
||||||
|
I have a default template which take care of a few metrics I want to focus on.
|
||||||
|
And I guess it is different for anyone of us.
|
||||||
|
|
||||||
|
** Task Management
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: task-management
|
||||||
|
:END:
|
||||||
|
|
||||||
|
So here is a more detailed description about my org mode usage.
|
||||||
|
|
||||||
|
*** Workflow 1; planned tasks : org-agenda + clock
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: worfklow-1--planned-tasks---org-agenda---clock
|
||||||
|
:END:
|
||||||
|
|
||||||
|
1. look at the current tasks planned for today
|
||||||
|
2. select a task, clock it
|
||||||
|
3. work on the task
|
||||||
|
4. back to the task and clock it out.
|
||||||
|
|
||||||
|
I work most of my using emacs[fn:emacs-digression].
|
||||||
|
Generally the first thing I do in the morning is opening `org-calendar`.
|
||||||
|
It looks like this:
|
||||||
|
|
||||||
|
#+ATTR_ORG: :width 560
|
||||||
|
#+CAPTION: Org super calendar view
|
||||||
|
#+NAME: fig:org-super-agenda
|
||||||
|
[[./img/org-super-agenda.png]]
|
||||||
|
|
||||||
|
Pretty brutalist interface which is a great thing to me.
|
||||||
|
Distraction free interface going to the essential.
|
||||||
|
|
||||||
|
With this view, I see what I planned to do today.
|
||||||
|
I also see a few "Due Soon" tasks in case I have the time to handle those.
|
||||||
|
|
||||||
|
When I start working on a task I start a clock on it (I simply type =I=
|
||||||
|
when my cursor is on the TODO line).
|
||||||
|
When I finished some task I change its status from TODO to something else.
|
||||||
|
Mainly I'm prompted when doing so:
|
||||||
|
|
||||||
|
#+BEGIN_SRC
|
||||||
|
{ [t] TODO [p] IN-PROGRESS [h] HOLD [w] WAITING
|
||||||
|
[d] DONE [c] CANCELLED [l] HANDLED }
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
And that's it.
|
||||||
|
The time spent on the task as been clocked I can work on another task.
|
||||||
|
|
||||||
|
Looking at the agenda view you could notice habits.
|
||||||
|
They start to become green when you are doing them correctly.
|
||||||
|
|
||||||
|
But generally, I don't use much direct clocking from the agenda.
|
||||||
|
Most of the time I prefer the capture mechanism.
|
||||||
|
Which bring us to "Workflow 2".
|
||||||
|
|
||||||
|
*** Workflow 2: Tracking; org-capture
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: workflow-2--org-capture-org-refile
|
||||||
|
:END:
|
||||||
|
|
||||||
|
Most of the tasks I perform on the day are not planned.
|
||||||
|
I have a generic routine + some prepared events and tasks to performs.
|
||||||
|
But during the day you have multiple interruptions, and part of my job is
|
||||||
|
to write code reviews too.
|
||||||
|
I cannot plan those.
|
||||||
|
|
||||||
|
In that case I use =org-capture= along =org-refile=.
|
||||||
|
Mainly =org-capture= helps you create a new TODO entry.
|
||||||
|
And =org-refile= will help you move that TODO entry to the correct place.
|
||||||
|
|
||||||
|
So let say I get a direct message in the chat asking me to do something.
|
||||||
|
I generally start org capture (for me it's =SPC X=).
|
||||||
|
I am presented with the following choice:
|
||||||
|
|
||||||
|
#+BEGIN_SRC
|
||||||
|
Select a capture template
|
||||||
|
=========================
|
||||||
|
|
||||||
|
[t] todo
|
||||||
|
[c] chat
|
||||||
|
[e] email
|
||||||
|
[m] meeting
|
||||||
|
[p] pause
|
||||||
|
[r] review
|
||||||
|
[w] work
|
||||||
|
[i] interruption
|
||||||
|
[f] chore
|
||||||
|
---------------------------------------------------------------------------
|
||||||
|
[q] Abort
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
In my example it was a chat interruption.
|
||||||
|
So I type =i= that presents me with this
|
||||||
|
|
||||||
|
#+BEGIN_SRC
|
||||||
|
**** IN-PROGRESS | :interruption:
|
||||||
|
:LOGBOOK:
|
||||||
|
[2020-09-23 Wed 08:01]
|
||||||
|
ref :: [link-to-where-I-was-in-emacs-when-captured]
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
My cursor placed where the =|= is displayed.
|
||||||
|
Here I add the tag =chat= and a small description, "dm from John about X" for example.
|
||||||
|
Then I type =C-c C-c= and the TODO is placed in a =tracker.org= file under
|
||||||
|
a date tree that looks like this:
|
||||||
|
|
||||||
|
#+BEGIN_SRC org-mode
|
||||||
|
* 2020
|
||||||
|
** 2020-W39
|
||||||
|
*** 2020-09-21 Monday
|
||||||
|
*** 2020-09-22 Tuesday
|
||||||
|
*** 2020-09-23 Wednesday
|
||||||
|
**** IN-PROGRESS Chat with John about X :interruption:chat:
|
||||||
|
:LOGBOOK:
|
||||||
|
:END:
|
||||||
|
[2020-09-23 Wed 17:58]
|
||||||
|
ref ::
|
||||||
|
...
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
So the clock for this task started at the moment at made the capture.
|
||||||
|
In my workflow, I prefer to finish the capture and stop clock later.
|
||||||
|
So after I finished the capture, the clock is still running while the task
|
||||||
|
is put in my tracker file.
|
||||||
|
|
||||||
|
Once I finished with that task.
|
||||||
|
I can:
|
||||||
|
|
||||||
|
1. Jump to the tasks with =SPC n o= (=org-clock-goto=), and stop the
|
||||||
|
clock =SPC m c o= (=clock-out=).
|
||||||
|
2. Jump to the task and change its status to =DONE= which will stop the clock.
|
||||||
|
3. Capture another tasks which will stop the clock on the current task and
|
||||||
|
will start on the new one.
|
||||||
|
|
||||||
|
By the end of the day, my tracker file will contain a date tree with all
|
||||||
|
the tasks I done in the day.
|
||||||
|
All tasks nicely clocked.
|
||||||
|
I generally create a clock report that look like this:
|
||||||
|
|
||||||
|
#+BEGIN_SRC
|
||||||
|
#+BEGIN: clocktable :scope subtree :maxlevel 4 :timestamp t :narrow 36! :match "work"
|
||||||
|
#+CAPTION: Clock summary at [2020-09-23 Wed 08:20]
|
||||||
|
| Timestamp | Headline | Time | | | |
|
||||||
|
|------------------------+--------------------------------------+--------+---+------+------|
|
||||||
|
| | *Total time* | *6:40* | | | |
|
||||||
|
|------------------------+--------------------------------------+--------+---+------+------|
|
||||||
|
| | \_ 2020-09-21 Monday | | | 7:40 | |
|
||||||
|
| [2020-09-21 Mon 08:54] | \_ check chat | | | | 0:36 |
|
||||||
|
| [2020-09-21 Mon 09:30] | \_ check reviews | | | | 0:41 |
|
||||||
|
| [2020-09-21 Mon 10:11] | \_ check emails | | | | 0:07 |
|
||||||
|
| [2020-09-21 Mon 10:37] | \_ review PR about xxx | | | | 0:44 |
|
||||||
|
| [2020-09-21 Mon 11:21] | \_ update my PR from feedbacks | | | | 0:36 |
|
||||||
|
| [2020-09-21 Mon 12:08] | \_ review John's PR about Foo | | | | 0:12 |
|
||||||
|
| [2020-09-21 Mon 13:41] | \_ review M's PR about Bar | | | | 0:11 |
|
||||||
|
| [2020-09-21 Mon 13:53] | \_ another thing | | | | 0:16 |
|
||||||
|
| [2020-09-21 Mon 14:09] | \_ review PR | | | | 0:51 |
|
||||||
|
| [2020-09-21 Mon 15:00] | \_ work on PR | | | | 1:30 |
|
||||||
|
| [2020-09-21 Mon 16:49] | \_ check another PR | | | | 0:33 |
|
||||||
|
| [2020-09-21 Mon 17:03] | \_ answer email | | | | 0:55 |
|
||||||
|
| [2020-09-21 Mon 17:58] | \_ Chat John about X | | | | 0:28 |
|
||||||
|
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
And that's mostly it for TODOs and tasks handling.
|
||||||
|
|
||||||
|
*** Workflow 3: Add new tasks; org-capture / org-refile
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: workflow-3--org-capture---org-refile
|
||||||
|
:END:
|
||||||
|
Another thing I do quite often.
|
||||||
|
I need to add new task to be done.
|
||||||
|
Be it for today or another day.
|
||||||
|
|
||||||
|
In that case, I generally use org-capture again.
|
||||||
|
This time I choose =t= for TODO and I generally detail the task to be done.
|
||||||
|
I add either a SCHEDULE (when I plan to start) or a DEADLINE (when this
|
||||||
|
must be finished) and I refile it.
|
||||||
|
|
||||||
|
So refile will start a fuzzy search to put this task under some subtree.
|
||||||
|
So instead of going to my =tracker.org= file, this goes to my =inbox.org=
|
||||||
|
file.
|
||||||
|
|
||||||
|
And it will appear in my agenda.
|
||||||
|
|
||||||
|
*** Configuration
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: configuration
|
||||||
|
:END:
|
||||||
|
|
||||||
|
So to have all of that, I added a lot of configuration over time.
|
||||||
|
But here is the most important part.
|
||||||
|
|
||||||
|
Most of that config is what I personally think are better defaults.
|
||||||
|
And a minor part of it only is about how I organize myself.
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(defun org-mode-config ()
|
||||||
|
"Org-mode."
|
||||||
|
(setq org-extend-today-until 4
|
||||||
|
org-use-effective-time t)
|
||||||
|
(setq org-todo-keywords
|
||||||
|
'((sequence "TODO(t)"
|
||||||
|
"IN-PROGRESS(p)"
|
||||||
|
"|"
|
||||||
|
"DONE(d)"
|
||||||
|
"HOLD(h@/!)"
|
||||||
|
"CANCELED(c@/!)"
|
||||||
|
"HANDLED(l@/!)")
|
||||||
|
(sequence "|" "PAUSE(p)" "CHAT(c)" "EMAIL(e)" "MEETING(m)" "REVIEW(r)" "GEEK(g)")))
|
||||||
|
|
||||||
|
;;; Look & Feel
|
||||||
|
|
||||||
|
;; I like to have something different than ellipsis because I often use them
|
||||||
|
;; myself.
|
||||||
|
(setq org-ellipsis " [+]")
|
||||||
|
(custom-set-faces '(org-ellipsis ((t (:foreground "gray40" :underline nil)))))
|
||||||
|
|
||||||
|
(defun my-org-settings ()
|
||||||
|
(org-display-inline-images)
|
||||||
|
(setq fill-column 75)
|
||||||
|
(abbrev-mode)
|
||||||
|
(org-indent-mode)
|
||||||
|
nil)
|
||||||
|
|
||||||
|
(add-hook 'org-mode-hook #'my-org-settings)
|
||||||
|
|
||||||
|
(setq org-tags-column 69)
|
||||||
|
|
||||||
|
;; src block indentation / editing / syntax highlighting
|
||||||
|
(setq org-src-fontify-natively t
|
||||||
|
org-src-window-setup 'current-window ;; edit in current window
|
||||||
|
org-src-preserve-indentation t ;; do not put two spaces on the left
|
||||||
|
org-src-tab-acts-natively t)
|
||||||
|
|
||||||
|
;; *** Templates
|
||||||
|
;; the %a refer to the place you are in emacs when you make the capture
|
||||||
|
;; that's very neat when you do that in an email for example.
|
||||||
|
(setq org-capture-templates
|
||||||
|
'(("t" "todo" entry (file "~/.org/inbox.org")
|
||||||
|
"* TODO %?\n%U\n- ref :: %a\n")
|
||||||
|
;; time tracker (clocked tasks)
|
||||||
|
("g" "geek" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* GEEK %? :perso:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("c" "chat" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* CHAT %? :work:chat:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("e" "email" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* EMAIL %? :work:email:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("m" "meeting" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* MEETING %? :work:meeting:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("r" "review" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* REVIEW %? :work:review:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("w" "work" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* IN-PROGRESS %? :work:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("p" "pause" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* PAUSE %? :pause:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("i" "interruption" entry (file+olp+datetree "~/.org/tracker.org")
|
||||||
|
"* IN-PROGRESS %? :interruption:work:\n%U\n- ref :: %a\n"
|
||||||
|
:prepend t :tree-type week :clock-in t :clock-keep t)
|
||||||
|
("f" "chore" entry (file "~/.org/inbox.org")
|
||||||
|
"* IN-PROGRESS %? :chore:\n%U\n"
|
||||||
|
:clock-in t :clock-keep t)))
|
||||||
|
|
||||||
|
;; How to create default clocktable
|
||||||
|
(setq org-clock-clocktable-default-properties
|
||||||
|
'(:scope subtree :maxlevel 4 :timestamp t :link t :tags t :narrow 36! :match "work"))
|
||||||
|
|
||||||
|
;; How to display default clock report in agenda view
|
||||||
|
(setq org-agenda-clockreport-parameter-plist
|
||||||
|
'(:lang "en" :maxlevel 4 :fileskip0 t :link t :indent t :narrow 80!))
|
||||||
|
|
||||||
|
;; *** Projectile; default TODO file to create in your projects
|
||||||
|
(setq org-projectile-file "inbox.org")
|
||||||
|
|
||||||
|
;; *** Refile mapped to SPC y o r
|
||||||
|
(map! :leader :desc "org-refile" "y o r" #'org-refile)
|
||||||
|
|
||||||
|
;; Refile to either the =refile.org= file or to =agenda.org= org =standup.org=
|
||||||
|
(setq org-refile-target-files
|
||||||
|
'("~/.org/tracker.org"
|
||||||
|
"~/.org/inbox.org"))
|
||||||
|
|
||||||
|
(setq org-refile-targets
|
||||||
|
'((nil :maxlevel . 5)
|
||||||
|
(org-refile-target-files :maxlevel . 5)))
|
||||||
|
|
||||||
|
;; *** Agenda
|
||||||
|
(setq org-log-into-drawer t) ;; hide the log state change history a bit better
|
||||||
|
(setq org-agenda-files org-refile-target-files)
|
||||||
|
(setq org-deadline-warning-days 7)
|
||||||
|
(setq org-agenda-skip-scheduled-if-deadline-is-shown t)
|
||||||
|
(setq org-habit-show-habits-only-for-today nil)
|
||||||
|
(setq org-habit-graph-column 65)
|
||||||
|
(setq org-duration-format 'h:mm) ;; show hours at max, not days
|
||||||
|
(setq org-agenda-compact-blocks t)
|
||||||
|
;; default show today
|
||||||
|
(setq org-agenda-span 'day)
|
||||||
|
(setq org-agenda-start-day "-0d")
|
||||||
|
(setq org-agenda-start-on-weekday nil)
|
||||||
|
(setq org-agenda-custom-commands
|
||||||
|
'(("d" "Done tasks" tags "/DONE|CANCELED")
|
||||||
|
("g" "Plan Today"
|
||||||
|
((agenda "" ((org-agenda-span 'day)))
|
||||||
|
(org-agenda-skip-function '(org-agenda-skip-deadline-if-not-today))
|
||||||
|
(org-agenda-entry-types '(:deadline))
|
||||||
|
(org-agenda-overriding-header "Today's Deadlines ")))))
|
||||||
|
(setq org-agenda-window-setup 'only-window)
|
||||||
|
|
||||||
|
(defun y/go-to-today-agenda ()
|
||||||
|
(interactive)
|
||||||
|
(org-agenda nil "a"))
|
||||||
|
;; Faster jump to agenda today keybinding shortcut (SPC y a)
|
||||||
|
(map! :leader
|
||||||
|
:desc "Today's agenda"
|
||||||
|
"y a" #'y/go-to-today-agenda)
|
||||||
|
|
||||||
|
;; ** Org Annotate
|
||||||
|
|
||||||
|
;; Ability to take annotate some files, can of double usage with org-capture.
|
||||||
|
;; Still, I keep that keyboard shortcut here.
|
||||||
|
;; (evil-leader/set-key "oa" 'org-annotate-file)
|
||||||
|
(setq org-annotate-file-storage-file "~/.org/annotations.org")
|
||||||
|
|
||||||
|
|
||||||
|
;; ** Org colums
|
||||||
|
;; Can be nice sometime to have that column view
|
||||||
|
;; give a felling of Excel view
|
||||||
|
(setq org-columns-default-format
|
||||||
|
"%TODO %3PRIORITY %40ITEM(Task) %17Effort(Estimated Effort){:} %CLOCKSUM %8TAGS(TAG)")
|
||||||
|
(map! :leader "y o c" #'org-columns)
|
||||||
|
|
||||||
|
;; ** Deft
|
||||||
|
;; useful to find files and jump to them
|
||||||
|
(setq deft-extensions '("org" "gpg" "md" "txt"))
|
||||||
|
(setq deft-recursive t)
|
||||||
|
(setq deft-use-filter-string-for-filename t)
|
||||||
|
(setq deft-default-extension "org")
|
||||||
|
(setq deft-directory "~/.org")
|
||||||
|
|
||||||
|
|
||||||
|
;; Org Babel
|
||||||
|
(org-babel-do-load-languages
|
||||||
|
'org-babel-load-languages
|
||||||
|
'(;; other Babel languages
|
||||||
|
(shell . t)
|
||||||
|
(http . t)
|
||||||
|
(clojure . t)
|
||||||
|
(haskell . t)
|
||||||
|
(plantuml . t) ;; UML graphs
|
||||||
|
(gnuplot . t)))
|
||||||
|
(setq org-plantuml-jar-path "~/bin/plantuml.jar"))
|
||||||
|
|
||||||
|
(use-package! org
|
||||||
|
:config (org-mode-config))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
And also
|
||||||
|
|
||||||
|
#+BEGIN_SRC emacs-lisp
|
||||||
|
(use-package! org-super-agenda
|
||||||
|
:after org-agenda
|
||||||
|
:custom (org-super-agenda-groups
|
||||||
|
'( ;; Each group has an implicit boolean OR operator between its selectors.
|
||||||
|
(:name "Overdue" :deadline past :order 0)
|
||||||
|
(:name "Evening Habits" :and (:habit t :tag "evening") :order 8)
|
||||||
|
(:name "Habits" :habit t :order 6)
|
||||||
|
(:name "Today" ;; Optionally specify section name
|
||||||
|
:time-grid t ;; Items that appear on the time grid (scheduled/deadline with time)
|
||||||
|
:order 3) ;; capture the today first but show it in order 3
|
||||||
|
(:name "Low Priority" :priority "C" :tag "maybe" :order 7)
|
||||||
|
(:name "Due Today" :deadline today :order 1)
|
||||||
|
(:name "Important"
|
||||||
|
:and (:priority "A" :not (:todo ("DONE" "CANCELED")))
|
||||||
|
:order 2)
|
||||||
|
(:name "Due Soon" :deadline future :order 4)
|
||||||
|
(:name "Todo" :not (:habit t) :order 5)
|
||||||
|
(:name "Waiting" :todo ("WAITING" "HOLD") :order 9)))
|
||||||
|
:config
|
||||||
|
(setq org-super-agenda-header-map nil)
|
||||||
|
(org-super-agenda-mode t))
|
||||||
|
#+END_SRC
|
||||||
|
|
||||||
|
** Conclusions
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: conclusions
|
||||||
|
:END:
|
||||||
|
|
||||||
|
That article is already quite long.
|
||||||
|
But if you intend to dig into org mode, this can be a nice default starting point.
|
||||||
|
|
||||||
|
I haven't really dig into some details but only given you the ability to
|
||||||
|
start not completely from scratch and with decent default values for an
|
||||||
|
already advanced usage.
|
||||||
|
|
||||||
|
To resume:
|
||||||
|
|
||||||
|
- =SPC y a= ⇒ Show agenda view for today
|
||||||
|
- =SPC X= ⇒ Capture a new task, write a description, then =C-c C-c=, save
|
||||||
|
that in =tracker.org= (or =inbox.org= depending of the capture template)
|
||||||
|
- =SPC n o= ⇒ jump to the current time tracked tasks
|
||||||
|
- =SPC m c o= ⇒ stop the clock on that task; if you capture a new time
|
||||||
|
tracking tasks you don't need to clock-out
|
||||||
|
- =SPC y o r= ⇒ =org-refile=, meaning move that task somewhere else
|
||||||
|
- =SPC q= ⇒ add/remove tags to that task
|
||||||
|
|
||||||
|
** Footnotes
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: footnotes
|
||||||
|
:END:
|
||||||
|
:PROPERTIES:
|
||||||
|
:CUSTOM_ID: footnotes
|
||||||
|
|
||||||
|
:END:
|
||||||
|
|
||||||
|
[fn:emacs-digression]
|
||||||
|
/Short digression/:
|
||||||
|
Historically, I coded using different IDEs.
|
||||||
|
Then I worked for a company that forced me to use terrible keyboards and
|
||||||
|
after just a few weeks I started to have serious wrist issues.
|
||||||
|
So to minimize that pain I switched to vim.
|
||||||
|
And it was /awesome/.
|
||||||
|
Once you're use to the power of vim keybinding forever your soul will bound
|
||||||
|
to them.
|
||||||
|
So learning vim is a bit like learning a new music instrument.
|
||||||
|
You need to construct some muscle memory and integrate one after one new
|
||||||
|
tricks.
|
||||||
|
Once learned your personal editing power start to become overwhelming.
|
||||||
|
|
||||||
|
After a few years of vim, I wanted to try to explore new editor tooling.
|
||||||
|
So I switched to emacs using the spacemacs distribution.
|
||||||
|
So mainly it's vim but with even better keybindgs, helpers and within
|
||||||
|
emacs.
|
||||||
|
The main reason for the switch was that vimscript is a really bad language
|
||||||
|
to configure your editor.
|
||||||
|
Emacs use emacs-LISP.
|
||||||
|
For editor customization a LISP looked perfect to me.
|
||||||
|
LISP is still one of the most powerful and easy to use programming language
|
||||||
|
to date.
|
||||||
|
|
||||||
|
And recently, as my personal configuration started to grow so much I
|
||||||
|
switched to [[https://github.com/hlissner/doom-emacs][doom-emacs]].
|
||||||
|
I was quite hesitant to do the switch but so far its been a pleasure.
|
||||||
|
IMHO using [[https://github.com/hlissner/doom-emacs][doom-emacs]] is a lot better than using my own personal
|
||||||
|
configuration from scratch because I wouldn't be able to end up with so
|
||||||
|
much configuration quality.
|
|
@ -16,12 +16,8 @@
|
||||||
<input name="t" type="radio" id="d">
|
<input name="t" type="radio" id="d">
|
||||||
<div id="labels">
|
<div id="labels">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<label for="l">light</label> | <label for="d">dark</label>
|
<label for="l">light</label>
|
||||||
</div>
|
<span id="logo">
|
||||||
</div>
|
|
||||||
<div class="main">
|
|
||||||
<div id="preamble" class="status">
|
|
||||||
<div id="logo">
|
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<svg width="5em" viewBox="0 0 64 64">
|
<svg width="5em" viewBox="0 0 64 64">
|
||||||
<circle cx="32" cy="32" r="30" stroke="var(--b2)" stroke-width="2" fill="var(--b03)"/>
|
<circle cx="32" cy="32" r="30" stroke="var(--b2)" stroke-width="2" fill="var(--b03)"/>
|
||||||
|
@ -30,7 +26,12 @@
|
||||||
<ellipse cx="32" cy="14" rx="14" ry="8" stroke-width="0" fill="var(--b3)"/>
|
<ellipse cx="32" cy="14" rx="14" ry="8" stroke-width="0" fill="var(--b3)"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</span>
|
||||||
|
<label for="d">dark</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<div id="preamble" class="status">
|
||||||
<div class="content"><h1>{{title}}</h1></div>
|
<div class="content"><h1>{{title}}</h1></div>
|
||||||
</div>
|
</div>
|
||||||
<div id="content">
|
<div id="content">
|
||||||
|
|
|
@ -13,12 +13,8 @@
|
||||||
<input name="t" type="radio" id="d">
|
<input name="t" type="radio" id="d">
|
||||||
<div id="labels">
|
<div id="labels">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<label for="l">light</label> | <label for="d">dark</label>
|
<label for="l">light</label>
|
||||||
</div>
|
<span id="logo">
|
||||||
</div>
|
|
||||||
<div class="main">
|
|
||||||
<div id="preamble" class="status">
|
|
||||||
<div id="logo">
|
|
||||||
<a href="/">
|
<a href="/">
|
||||||
<svg viewBox="0 0 64 64">
|
<svg viewBox="0 0 64 64">
|
||||||
<circle cx="32" cy="32" r="30" stroke="var(--b2)" stroke-width="2" fill="var(--b03)"/>
|
<circle cx="32" cy="32" r="30" stroke="var(--b2)" stroke-width="2" fill="var(--b03)"/>
|
||||||
|
@ -27,7 +23,12 @@
|
||||||
<ellipse cx="32" cy="14" rx="14" ry="8" stroke-width="0" fill="var(--b3)"/>
|
<ellipse cx="32" cy="14" rx="14" ry="8" stroke-width="0" fill="var(--b3)"/>
|
||||||
</svg>
|
</svg>
|
||||||
</a>
|
</a>
|
||||||
</div>
|
</span>
|
||||||
|
<label for="d">dark</label>
|
||||||
|
</div>
|
||||||
|
</div>
|
||||||
|
<div class="main">
|
||||||
|
<div id="preamble" class="status">
|
||||||
<div class="content">
|
<div class="content">
|
||||||
<h1>{{title}}</h1>
|
<h1>{{title}}</h1>
|
||||||
<div class="meta">
|
<div class="meta">
|
||||||
|
|