June 27th 2026 - Things I Worked On
Added local environments to Hith
Hith now has local environments so scoping can be added.
If a symbol isn't found in the current environment then we recursively check the parent environment until we find the symbol. If we reach the top-most environment and the symbol still isn't found we return None. In the future we should return a descriptive error message.
class Env: def __init__(self, variables, parent): self.variables = variables self.parent = parent def symbol_value(self, symbol): if symbol.startswith("'"): symbol = symbol[1:] if symbol in self.variables.data: return self.variables.data[symbol] elif self.parent: return self.parent.symbol_value(symbol) else: return None def defvar(self, name, value): self.variables.data[name] = value return name def clear_variables(self): self.variables.clear()
Qutebrowser
Qutebrowser is a keyboard-driven, chrome-based, web browser. I heard about it at an org-meetup event. I wanted to build it from source and try configuring it. Here's my journey.
Building and running Qutebrowser from source:
Git clone the repo:
git@github.com:qutebrowser/qutebrowser.git
Run this to create the python environment:
python3 scripts/mkvenv.py
Run qutebrowser:
.venv/bin/python3 -m qutebrowser
Generate documentation:
.venv/bin/python3 scripts/asciidoc2html.py
My configuration so far:
import doom_one_theme config.load_autoconfig(False) def config_bindings(): config.bind("Meta-shift-r", "config-source", mode="normal") def editor(): # This doesn't work and I don't know why yet c.editor.command = ["vim", "-f", "{file}", "-c" "normal {line}G{column0}l"] def theme(): doom_one_theme.setup(c, { "spacing": { "vertical": 5, "horizontal": 5 } }) c.colors.webpage.darkmode.enabled = True def command(): config.bind("<Meta-x>", "cmd-set-text :", mode="normal") def tabs(): config.unbind("K", mode="normal") config.unbind("J", mode="normal") config.unbind("d", mode="normal") config.unbind("u", mode="normal") config.unbind("<Ctrl-Shift-t>", mode="normal") config.unbind("O", mode="normal") config.bind("<Meta-Alt-left>", "tab-prev", mode="normal") config.bind("<Meta-Alt-right>", "tab-next", mode="normal") config.bind("<Meta-w>", "tab-close", mode="normal") config.bind("<Meta-Shift-t>", "undo", mode="normal") config.bind("<Meta-t>", "open -t", mode="normal") def navigation(): config.unbind("H", mode="normal") config.unbind("L", mode="normal") config.bind("<Meta-left>", "back", mode="normal") config.bind("<Meta-right>", "forward", mode="normal") config_bindings() editor() theme() command() tabs() navigation()
Added browsing to elfeed entry article link
(defun my/elfeed-open-entry-in-browser () "Open the current entry in default browser." (interactive) (if (derived-mode-p 'elfeed-show-mode) (elfeed-show-visit) (user-error "Can't open entry in browser because not in elfeed-show-mode"))) (evil-leader/set-key "e b" 'my/elfeed-open-entry-in-browser)