<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>devlog on fdarma</title><link>https://fdarma.com/tags/devlog/index.xml</link><description>Recent content tagged devlog on fdarma</description><generator>Astro</generator><language>en-US</language><managingEditor>arroganttramps@gmail.com (fdarma)</managingEditor><webMaster>arroganttramps@gmail.com (fdarma)</webMaster><copyright>fdarma</copyright><lastBuildDate>Wed, 12 Nov 2025 00:00:00 GMT</lastBuildDate><atom:link href="https://fdarma.com/tags/devlog/index.xml" rel="self" type="application/rss+xml" /><item><title>notes on note taking</title><link>https://fdarma.com/blog/notes-on-note-taking/</link><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><author>arroganttramps@gmail.com (fdarma)</author><guid>https://fdarma.com/blog/notes-on-note-taking/</guid><description>a growing spec of things I want from a note taking tool and why it matters</description><content:encoded><![CDATA[<blockquote>
<p><a href="https://www.youtube.com/watch?v=dZFlobeagHA">If a person forgets an idea that they love, it's a horror...</a></p>
</blockquote>
<p><strong>my notes are</strong></p>
<ul>
<li>chaotic: <a href="https://karpathy.bearblog.dev/the-append-and-review-note/">one big</a> <a href="https://jeffhuang.com/productivity_text_file/"><s>.txt</s>  .md file</a></li>
<li>ephemeral: like temp storage things written down are unfinished</li>
<li>boring: no backticks, colours, tags, views, formulas, comments, ai, etc.</li>
</ul>
<p><strong>what I use</strong></p>
<ul>
<li>.md:
<ul>
<li>because I can take it anywhere</li>
<li>because I want to render code blocks and images</li>
</ul>
</li>
<li><a href="http://sheets.google.com">sheets.google.com</a>:
<ul>
<li>because 100 columns on markdown is jank as</li>
<li>because tables are easy to reason about</li>
<li>because I need to share it with someone else</li>
</ul>
</li>
</ul>
<p><strong>what I want with a note taking tool</strong></p>
<ul>
<li>minimal: the ideal state is <a href="https://www.joelonsoftware.com/2001/10/24/user-interface-design-for-programmers/">zero decisions</a></li>
<li>responsive: must not be fiddly, jank, or clunky</li>
<li>malleable: like handing someone else a piece of paper or <a href="https://hyperclay.com/">an orange</a></li>
<li>centralised: why two tool when one tool do trick</li>
<li>accessible: to view it on the go</li>
<li>portable: so that I have an escape plan</li>
<li>resourceful: if it costs nothing to run then I never need to close it</li>
<li>local: I'm offline sometimes</li>
</ul>
]]></content:encoded></item><item><title>setting up a new mac</title><link>https://fdarma.com/blog/setting-up-a-new-mac/</link><pubDate>Wed, 12 Nov 2025 00:00:00 GMT</pubDate><author>arroganttramps@gmail.com (fdarma)</author><guid>https://fdarma.com/blog/setting-up-a-new-mac/</guid><description>tools of the trade or a guide on setting up a new workspace</description><content:encoded><![CDATA[<p>tools</p>
<ul>
<li>ghostty (kitty default)</li>
<li>zed (ayu darker)</li>
<li>helium</li>
<li>obsidian</li>
<li>hammerspoon[1]</li>
<li>sublime merge</li>
<li>codex</li>
<li>aldente</li>
<li>cap</li>
<li>betterdisplay</li>
<li>stats</li>
<li>yaak</li>
<li>foobar</li>
<li>soulseek</li>
<li>ocenaudio</li>
<li>cli [2]
<ul>
<li>btop</li>
<li>atuin</li>
<li>zoxide</li>
<li>zsh-autosuggestions</li>
<li>zsh-syntax-highlighting</li>
<li>fzf</li>
<li>eza</li>
</ul>
</li>
</ul>
<p>appendix</p>
<p>[1] hammerspoon config</p>
<pre><code>-- ~/.hammerspoon/init.lua

-- 6-zone layout for vertically stacked monitors

-- ⌃⌥ (Ctrl+Opt) = current screen snapping

-- ⌃⇧ (Ctrl+Shift) = top monitor snap

-- ⌃⌘ (Ctrl+Cmd) = bottom monitor snap

-- ⌃⌥ ↑ / ↓ = move vertically (preserve left/right/full)

  

hs.window.animationDuration = 0

  

--------------------------------------------------

-- Screen Helpers

--------------------------------------------------

  

local function getScreens()

local screens = hs.screen.allScreens()

  

if #screens &lt; 2 then

hs.alert.show(&quot;Only 1 display detected&quot;)

return screens[1], screens[1]

end

  

table.sort(screens, function(a, b)

return a:frame().y &lt; b:frame().y

end)

  

return screens[1], screens[2] -- top, bottom

end

  

--------------------------------------------------

-- Zones

--------------------------------------------------

  

local left = { x = 0, y = 0, w = 0.5, h = 1 }

local right = { x = 0.5, y = 0, w = 0.5, h = 1 }

local full = { x = 0, y = 0, w = 1, h = 1 }

  

--------------------------------------------------

-- Move To Specific Screen

--------------------------------------------------

  

local function moveTo(screen, rect)

local f = screen:frame()

  

return {

x = f.x + (f.w * rect.x),

y = f.y + (f.h * rect.y),

w = f.w * rect.w,

h = f.h * rect.h,

}

end

  

local function applyRect(win, screen, rect)

win:move(moveTo(screen, rect))

end

  

--------------------------------------------------

-- Horizontal Snap

--------------------------------------------------

  

local function moveCurrent(rect)

return function()

local win = hs.window.focusedWindow()

if not win then return end

applyRect(win, win:screen(), rect)

end

end

  

local function moveToScreen(screenPicker, rect)

return function()

local win = hs.window.focusedWindow()

if not win then return end

  

local top, bottom = getScreens()

local screen = (screenPicker == &quot;top&quot;) and top or bottom

applyRect(win, screen, rect)

end

end

  

--------------------------------------------------

-- Detect Window Side (left/right/full)

--------------------------------------------------

  

local function detectZone(win)

local screen = win:screen()

local f = screen:frame()

local wf = win:frame()

  

local relX = (wf.x - f.x) / f.w

local relW = wf.w / f.w

  

if relW &gt; 0.9 then

return &quot;full&quot;

elseif relX &lt; 0.25 then

return &quot;left&quot;

else

return &quot;right&quot;

end

end

  

--------------------------------------------------

-- Vertical Toggle (Preserve Side)

--------------------------------------------------

  

local function moveVertical()

local win = hs.window.focusedWindow()

if not win then return end

  

local top, bottom = getScreens()

local currentScreen = win:screen()

local zone = detectZone(win)

  

local target = (currentScreen:id() == top:id()) and bottom or top

local rect = (zone == &quot;left&quot; and left)

or (zone == &quot;right&quot; and right)

or full

  

applyRect(win, target, rect)

end

  

--------------------------------------------------

-- Key Bindings

--------------------------------------------------

  

-- ⌃⌥ (Current screen)

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;alt&quot; }, &quot;left&quot;, moveCurrent(left))

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;alt&quot; }, &quot;right&quot;, moveCurrent(right))

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;alt&quot; }, &quot;return&quot;, moveCurrent(full))

  

-- ⌃⇧ (Top monitor)

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;shift&quot; }, &quot;left&quot;, moveToScreen(&quot;top&quot;, left))

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;shift&quot; }, &quot;right&quot;, moveToScreen(&quot;top&quot;, right))

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;shift&quot; }, &quot;return&quot;, moveToScreen(&quot;top&quot;, full))

  

-- ⌃⌘ (Bottom monitor)

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;cmd&quot; }, &quot;left&quot;, moveToScreen(&quot;bottom&quot;, left))

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;cmd&quot; }, &quot;right&quot;, moveToScreen(&quot;bottom&quot;, right))

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;cmd&quot; }, &quot;return&quot;, moveToScreen(&quot;bottom&quot;, full))

  

-- ⌃⌥ ↑ / ↓ (Vertical toggle)

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;alt&quot; }, &quot;up&quot;, moveVertical)

hs.hotkey.bind({ &quot;ctrl&quot;, &quot;alt&quot; }, &quot;down&quot;, moveVertical)

  

hs.alert.show(&quot;🔲 6-Zone Vertical Layout Loaded&quot;)
</code></pre>
<p>[2] zsh config</p>
<pre><code># ─── oh-my-zsh ───────────────────────────────────────────────
export ZSH=&quot;$HOME/.oh-my-zsh&quot;
ZSH_THEME=&quot;robbyrussell&quot;
plugins=(git)
source $ZSH/oh-my-zsh.sh

# ─── zsh-syntax-highlighting &amp; autosuggestions ───────────────
source /opt/homebrew/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /opt/homebrew/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# Shift+Tab accepts the whole autosuggestion
bindkey '^[[Z' autosuggest-accept

# ─── fzf ─────────────────────────────────────────────────────
eval &quot;$(fzf --zsh)&quot;
export FZF_CTRL_T_OPTS='--walker-skip .git,node_modules,target --preview &quot;bat -n --color=always {}&quot; --bind &quot;ctrl-/:change-preview-window(down|hidden|)&quot;'

# ─── atuin (shell history) ───────────────────────────────────
. &quot;$HOME/.atuin/bin/env&quot;
eval &quot;$(atuin init zsh)&quot;

# ─── zoxide (smarter cd) ─────────────────────────────────────
eval &quot;$(zoxide init zsh)&quot;
alias cd='z'
alias cdi='zi'

# ─── eza (ls with icons) ─────────────────────────────────────
alias ls='eza $eza_params --icons'

# ─── Git aliases ─────────────────────────────────────────────
alias gs='git status'
alias ga='git add .'
alias gp='git push'
alias gl='git pull'
alias gnb='git checkout -b'
alias gsw='git checkout -'
alias gst='git stash'
alias gstp='git stash pop'
alias gmain='git checkout main &amp;&amp; git pull'
alias gc='git commit -m'
alias gco='git checkout'

# Clone using personal GitHub account SSH key
gclone-personal() {
  git clone &quot;$(echo &quot;$1&quot; | sed 's/github\.com/github.com-personal/')&quot; &quot;${@:2}&quot;
}

# Git aliases cheatsheet
unalias gg 2&gt;/dev/null
gg() {
  echo &quot;gs    → git status&quot;
  echo &quot;ga    → git add .&quot;
  echo &quot;gp    → git push&quot;
  echo &quot;gl    → git pull&quot;
  echo &quot;gc    → git commit -m&quot;
  echo &quot;gco   → git checkout&quot;
  echo &quot;gnb   → git checkout -b &lt;branch&gt;&quot;
  echo &quot;gsw   → git checkout - (switch back)&quot;
  echo &quot;gst   → git stash&quot;
  echo &quot;gstp  → git stash pop&quot;
  echo &quot;gmain → git checkout main &amp;&amp; git pull&quot;
}
</code></pre>
]]></content:encoded></item></channel></rss>