diff --git a/src/about-me.org b/src/about-me.org index b6405d5..f46ae95 100644 --- a/src/about-me.org +++ b/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 :END: -I am mostly known for some of my older blog post. +My Internet presence is mostly known from older blog post. In particular: - [[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. -- emacs (former vim user) - - spacemacs - - org-mode / org-journal / org-roam - - magit / forge / github-review -- weechat - - weeslack +- macOS + - [[https://nixos.org][nix]] with [[https://github.com/nix-community/home-manager][home-manager]] + - [[https://yadm.io][yadm]] for things home-manager had difficult to handle +- [[https://www.gnu.org/software/emacs/][emacs]] (former vim user) + - [[https://github.com/hlissner/doom-emacs][doom-emacs]] (used [[https://www.spacemacs.org][spacemacs]] before) + - [[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 :PROPERTIES: :CUSTOM_ID: old-websites diff --git a/src/css/y.css b/src/css/y.css index f657646..f46d9b0 100644 --- a/src/css/y.css +++ b/src/css/y.css @@ -1,6 +1,6 @@ html { - font-family: Courier,monospace; - font-size: 14px; + font-family: Menlo, Monaco, monospace; + font-size: 1rem; line-height: calc(1ex/0.37); } #TOC {text-align: left;} html,body { margin: 0; padding: 0; border: 0; } @@ -12,11 +12,12 @@ h1,h2,h3,h4,h5,h6 { p { text-align: justify; hyphens: auto; } pre { overflow-x: scroll; border: solid 1px; padding: 1ex; } 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; } .meta { font-size: small;} -.abstract { margin: 1rem; font-size: 0.875em; font-style: italic; } -#logo { display: inline-block; } +.abstract { margin: 2rem 4rem; font-size: 0.875em; font-style: italic; } +#logo { display: inline-block; + vertical-align: middle;} #logo svg { width: 3em; } #preamble, #postamble { text-align: center; } #content,.content,#preamble,#postamble { @@ -26,6 +27,12 @@ figure { margin: 1rem 0; padding: 0; } margin: 0 auto; } 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 > a { padding: 0.5em; } .footpara { display: inline; } @@ -48,6 +55,7 @@ body>input { display: none; } label { font-weight: 700; } label:hover { cursor: pointer; } label ~ pre { margin-top: 0; } +figcaption { text-align: right; font-family: italic; } :root { --b03: #2E3440; @@ -67,18 +75,19 @@ label ~ pre { margin-top: 0; } --b0: #989ea8; --b1: #b0bac7; --b2: #ECEFF4; - --b3: #fff; + --b3: rgb(248,249,251); /* default light */ --bg: var(--b3); --rbg: var(--b2); --fg0: var(--b0); - --fg: var(--b02); - --rfg: #000; + --fg: #4c566a; /* var(--b02); */ + --rfg: var(--b03); --hl: var(--o); } /* dark preferred */ +/* @media (prefers-color-scheme: dark) { :root { @@ -102,7 +111,7 @@ label ~ pre { margin-top: 0; } background: hsl(218,20%,18%); border-color: hsl(218,15%,23%); } -} +} */ /* light checked */ input#l:checked ~ div { @@ -167,7 +176,7 @@ body, body > div { background: var(--bg); color: var(--fg); } -a,a:visited { color: var(--hl); } +label:hover, a,a:visited { color: var(--hl); } code { background: var(--rbg); } /* ---- SYNTAX HIGHLIGHTING ---- */ diff --git a/src/drafts/XXXX-org-mode-intro/index.org b/src/drafts/XXXX-org-mode-intro/index.org deleted file mode 100644 index 2545c23..0000000 --- a/src/drafts/XXXX-org-mode-intro/index.org +++ /dev/null @@ -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. diff --git a/src/index.org b/src/index.org index 5d77ec3..68573a8 100644 --- a/src/index.org +++ b/src/index.org @@ -9,6 +9,19 @@ #+MACRO: br @@html:
@@ #+MACRO: pemail @@html: Yann Esposito <yann@esposito.host>@@ + +@@html:@@ + I'm a functional programmer, working remotely for Cisco.{{{br}}} I work in Clojure and use Haskell/Purescript during the weekends. diff --git a/src/posts/0002-troll-2/index.org b/src/posts/0002-troll-2/index.org index ed07fe5..95855e6 100644 --- a/src/posts/0002-troll-2/index.org +++ b/src/posts/0002-troll-2/index.org @@ -44,6 +44,7 @@ goblins. Those costume looks very bad and cheap. So much you can only find them not terrorizing but funny and ridiculous. +#+ATTR_ORG: :width 560 #+ATTR_HTML: A goblin #+CAPTION: One goblin during the introduction scene of Troll 2 #+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. Apparently most actors were amateurs, it was their first and last movie. +#+ATTR_ORG: :width 560 #+ATTR_HTML: A bad acting demonstration #+CAPTION: One particularly terrible acting scene #+NAME: fig:bad-acting @@ -83,6 +85,7 @@ They win against the monsters with, what I believe was a failed attempt at humor. 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 #+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 diff --git a/src/posts/0006-modern-irc/index.org b/src/posts/0006-modern-irc/index.org index 1be8a87..1e1973a 100644 --- a/src/posts/0006-modern-irc/index.org +++ b/src/posts/0006-modern-irc/index.org @@ -27,15 +27,15 @@ browser or mobile phone app. 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]. -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). All modern UI looks cool for screenshots, but if you are going to use it a lot, you will prefer density over good looking. - Most app, web app are terrible related to information by number of pixel - ratio. + Most web apps are terrible when looking at delivered information by + number of pixels ratio. 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 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 PDF. 7. *No anti-features*: show when someone is typing, show when someone - as read your message, etc... Those functionality are in fact increasing - social insecurity and forces you to answer sooner instead of really - taking the time to answer correctly. + as read your messages, etc... Those functionalities increase your + social insecurities feeling. They forces you to answer sooner instead of + really take the time to answer correctly. You can read Digitial + minimalism to know more about that subject[fn:dm]. 8. *Free software* 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, 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. Even if using encryption mechanism and you trust your client, and you will still reveal your social network topology. @@ -207,7 +208,7 @@ server { gzip off; proxy_redirect off; - ## Some requests take more than 30 seconds. + ## Some requests take more than 30 seconds. proxy_read_timeout 30s; proxy_connect_timeout 30s; @@ -218,10 +219,10 @@ server { proxy_set_header X-Forwarded-Ssl on; proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for; proxy_set_header X-Forwarded-Proto $scheme; - proxy_set_header X-Client-Verify SUCCESS; - 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-Issuer $ssl_client_i_dn; + proxy_set_header X-Client-Verify SUCCESS; + 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-Issuer $ssl_client_i_dn; } } diff --git a/src/posts/0013-how-to-choose-your-tools/2020-05-09_12-48-31_.jpeg b/src/posts/0013-how-to-choose-your-tools/2020-05-09_12-48-31_.jpeg deleted file mode 100644 index 0d85629..0000000 Binary files a/src/posts/0013-how-to-choose-your-tools/2020-05-09_12-48-31_.jpeg and /dev/null differ diff --git a/src/posts/0013-how-to-choose-your-tools/2020-05-09_12-49-34_.jpeg b/src/posts/0013-how-to-choose-your-tools/2020-05-09_12-49-34_.jpeg deleted file mode 100644 index b5875e8..0000000 Binary files a/src/posts/0013-how-to-choose-your-tools/2020-05-09_12-49-34_.jpeg and /dev/null differ diff --git a/src/posts/0013-how-to-choose-your-tools/Welcome-to-Halsingland.jpg b/src/posts/0013-how-to-choose-your-tools/Welcome-to-Halsingland.jpg new file mode 100644 index 0000000..617af09 Binary files /dev/null and b/src/posts/0013-how-to-choose-your-tools/Welcome-to-Halsingland.jpg differ diff --git a/src/posts/0013-how-to-choose-your-tools/index.org b/src/posts/0013-how-to-choose-your-tools/index.org index e345974..ca025f4 100644 --- a/src/posts/0013-how-to-choose-your-tools/index.org +++ b/src/posts/0013-how-to-choose-your-tools/index.org @@ -1,3 +1,6 @@ +:PROPERTIES: +:ID: c2e61938-8493-434a-9ffa-9fd4698d9863 +:END: #+Title: How to choose your tools #+Author: Yann Esposito #+Email: yann@esposito.host @@ -7,7 +10,7 @@ #+LANGUAGE: en #+LANG: en #+OPTIONS: H:5 auto-id:t -#+STARTUP: showeverything ++STARTUP: showeverything This week I didn't take a look at HN to grab some news. 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=23092904][Github Codespace]] +#+ATTR_ORG: :width 560 #+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 -#+CAPTION: Midsommar Welcome -[[file:2020-05-09_12-49-34_.jpeg]] - - +#+NAME: Welcome to Halsingland +#+CAPTION: Welcome to Halsingland +[[file:Welcome-to-Halsingland.jpg]] Similar articles have existed for years on different products. 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. +#+ATTR_ORG: :width 560 #+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 -[[file:2020-05-09_12-48-31_.jpeg]] +[[file:midsommar-cry.jpg]] @@ -178,9 +179,10 @@ future. :CUSTOM_ID: post-conclusion :END: +#+ATTR_ORG: :width 560 #+ATTR_HTML: :alt 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 emacs. diff --git a/src/posts/0013-how-to-choose-your-tools/midsommar-cry.jpg b/src/posts/0013-how-to-choose-your-tools/midsommar-cry.jpg new file mode 100644 index 0000000..e6f0d7c Binary files /dev/null and b/src/posts/0013-how-to-choose-your-tools/midsommar-cry.jpg differ diff --git a/src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpeg b/src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpeg deleted file mode 100644 index a3f4dbe..0000000 Binary files a/src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpeg and /dev/null differ diff --git a/src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpg b/src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpg new file mode 100644 index 0000000..55a98f7 Binary files /dev/null and b/src/posts/0013-how-to-choose-your-tools/midsommar-joy.jpg differ diff --git a/src/posts/0014-change-emacs-theme-automatically/index.org b/src/posts/0014-change-emacs-theme-automatically/index.org index 46c2b11..e77a9c1 100644 --- a/src/posts/0014-change-emacs-theme-automatically/index.org +++ b/src/posts/0014-change-emacs-theme-automatically/index.org @@ -43,9 +43,9 @@ So here is my piece of code I added to my doom-emacs =config.el=: (t 'doom-laserwave)))) (when (not (equal doom-theme theme)) (setq doom-theme theme) - (load-theme doom-theme t) - ;; run that function again next hour - (run-at-time (format "%02d:%02d" (+ hour 1) 0) nil 'y/auto-update-theme)))) + (load-theme doom-theme t)) + ;; run that function again next hour + (run-at-time (format "%02d:%02d" (+ hour 1) 0) nil 'y/auto-update-theme))) (y/auto-update-theme) #+END_SRC diff --git a/src/drafts/XXXX-org-mode-intro/img/org-super-agenda.png b/src/posts/0015-how-i-use-org-mode/img/org-super-agenda.png similarity index 100% rename from src/drafts/XXXX-org-mode-intro/img/org-super-agenda.png rename to src/posts/0015-how-i-use-org-mode/img/org-super-agenda.png diff --git a/src/posts/0015-how-i-use-org-mode/index.org b/src/posts/0015-how-i-use-org-mode/index.org new file mode 100644 index 0000000..2f2d923 --- /dev/null +++ b/src/posts/0015-how-i-use-org-mode/index.org @@ -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. diff --git a/templates/main.mustache b/templates/main.mustache index 8629892..0e7328a 100644 --- a/templates/main.mustache +++ b/templates/main.mustache @@ -16,12 +16,8 @@
- | -
-
-
-
- + + +
+
+
+

{{title}}

diff --git a/templates/post.mustache b/templates/post.mustache index b5335c1..8398d0c 100644 --- a/templates/post.mustache +++ b/templates/post.mustache @@ -13,12 +13,8 @@
- | -
-
-
-
- + + +
+
+
+

{{title}}