Form Data - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
Getting form data inside of fastapi [2] was not intuitive to me at first. Everything I had used in fastapi leaned on pydantic models. Form data comes in differently and needs collected differently.
from typing import Annotated
from fastapi import FastAPI, Form
app = FastAPI()
@app.post("/login/")
async def login(username: Annotated[str, Form()], password: Annotated[str, Form()]):
return {"username": username}
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://fastapi.tiangolo.com/tutorial/request-forms/#define-form-parameters
[2]: /fastapi/
[3]: /thoughts/
Archive
All published posts
2507 posts
latest post 2026-05-29
Publishing rhythm
[1]
I am creating this post from a desktop app that I created in 3 lines.
import webview
webview.create_window('Woah dude!', 'https://thoughts.waylonwalker.com')
webview.start()
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /static/https://pywebview.flowrl.com/guide/usage.html
[2]: /thoughts/
Column INSERT/UPDATE Defaults
—
SQLAlchemy 1.4 Documentation
docs.sqlalchemy.org [1]
sqlalchemy server_defaults end up as defaults in the database when new values are inserted.
t = Table(
"test",
metadata_obj,
Column("abc", String(20), server_default="abc"),
Column("created_at", DateTime, server_default=func.sysdate()),
Column("index_value", Integer, server_default=text("0")),
)
CREATE TABLE test (
abc varchar(20) default 'abc',
created_at datetime default sysdate,
index_value integer default 0
)
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://docs.sqlalchemy.org/en/14/core/defaults.html#server-invoked-ddl-explicit-default-expressions
[2]: /thoughts/
Template Designer Documentation — Jinja Documentation (3.1.x)
jinja.palletsprojects.com [1]
A feature of jinja that I just discovered is including sub templates. Here is an example from the docs.
{% include 'header.html' %}
Body goes here.
{% include 'footer.html' %}
And inside of my thoughts project I used it to render posts.
<ul id='posts'>
{% for post in posts.__root__ %}
{% include 'post_item.html' %}
{% endfor %}
</ul>
note that post_item.html [2] automatically inherits the post variable.
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://jinja.palletsprojects.com/en/3.1.x/templates/#include
[2]: /html/
[3]: /thoughts/
Templates - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
A guide to add Jinja2Templates to fastapi [2].
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://fastapi.tiangolo.com/advanced/templates/
[2]: /fastapi/
[3]: /thoughts/
htmx ~ Documentation
htmx gives you access to AJAX, CSS Transitions, WebSockets and Server Sent Events directly in HTML, using attributes, so you can build modern user interfaces with the simplicity and power of hypert...
htmx.org [1]
A complete reference of all of the htmx [2] swapping methods.
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://htmx.org/docs/#swapping
[2]: /htmx/
[3]: /thoughts/
External Link
stackoverflow.com [1]
I am trying to use htmx [2] on a new fastapi [3] site for my thoughts, and have been hitting this error.
Mixed Content: The page at 'https://front.mydomain.com/#/clients/1' was loaded over HTTPS, but requested an insecure resource 'http://back.mydomain/jobs/?_end=25&_order=DESC&_sort=id&_start=0&client_id=1'. This request has been blocked; the content must be served over HTTPS.
What is happening # [4]
I have an htmx component that gets the current users name, but if they are not logged in the backend redirects to a login form.
<div hx-get='/users/me' hx-trigger='load'>
get me
</div>
But for some reason when the front end gets this redirect, it tries to do it through http, and flags it as insecure.
The solution # [5]
To solve this issue, the post directs to set the --forwarded-allow-ips to ‘*’
uvicorn thoughts.api.app:app --port 5000 --reload --log-level info --host 0.0.0.0 --workers 1 --forwarded-allow-ips '*'
Note
This post is a thought [6]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://stackoverflow.com/questions/63511413/fastapi-redirection-for-trailing-slash-returns-non-s...
gistfile1.txt [1]
text
On void linux.
Under `/etc/containers/` there is a file called `registries.conf`. It is complemented by `man 5 containers-registries.conf`.
Change (for me lines 11-12) which say
[registries.search]
registries = []
to
[registries.search]
registries = ['docker.io']
(drawn from https://www.projectatomic.io/blog/2018/05/podman-tls/)
---
Without the above you won’t be able to use basic podman functions. You might get errors like:
- Error: unable to pull fedora:28: image name provided is a short name and no search registries are defined in the registries config file.
- Error: unable to pull stripe/stripe-cli: image name provided is a short name and no search registries are defined in the registries config file.
---
Various documentation (redhat blog entries, man podman pages) say that dockerhub is a default, but without this step it’s clearly not.
Good luck. Feel free to use the comment box below if you have a github account.
By default podman will not pull images from docker.io and will need setup. This guide worked for me.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:...
External Link
htmx.org [1]
Using templates with htmx [2] requires the client-side-templates extension, and the template engine to be loaded in a <script> tag.
example htmx using templates.
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta name="viewport" content="width=device-width">
<script src="https://unpkg.com/htmx.org"></script>
<script src="https://unpkg.com/htmx.org/dist/ext/client-side-templates.js"></script>
<script src="https://unpkg.com/mustache@latest"></script>
</head>
<body>
<div hx-ext="client-side-templates">
<button hx-get="https://jsonplaceholder.typicode.com/todos/1"
hx-swap="innerHTML"
hx-target="#content"
mustache-template="foo">
Click Me
</button>
<p id="content">Start</p>
<template id="foo">
<p> {% raw %}{{userID}}{% endraw %} and {% raw %}{{id}}{% endraw %} and {% raw %}{{title}}{% endraw %} and {% raw %}{{completed}}{% endraw %}</p>
</template>
</div>
</body>
</html>
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://htmx.org/extensions/client-side-templates/
[2]: /htmx/
[3]: /thoughts/
Static Files - FastAPI
FastAPI framework, high performance, easy to learn, fast to code, ready for production
fastapi.tiangolo.com [1]
Mounting static files in fastapi [2].
from fastapi import FastAPI
from fastapi.staticfiles import StaticFiles
app = FastAPI()
app.mount("/static", StaticFiles(directory="static"), name="static")
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://fastapi.tiangolo.com/tutorial/static-files/
[2]: /fastapi/
[3]: /thoughts/
- #javascript" playlabel="Play: HTMX looks pretty neat #coding #javascript [2]">
Love the poling example with hx-trigger=‘every 1s’.
Note
This post is a thought [3]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /htmx/
[2]: /tags/javascript/
[3]: /thoughts/
First-class session support in FastAPI · Issue #754 · fastapi/fastapi
Is your feature request related to a problem All of the security schemas currently supported by FastAPI rely on some sort of "client-server synergy" , where, for instance, the client is expected to...
GitHub · github.com [1]
Here is a snippet provided by @tiangolo to store the users jwt inside of a session cookie in fatapi. This was written in feb 12, 2020 and admits that this is not a well documented part of fastapi [2].
It’s already in place. More or less like the rest of the security tools. And it’s compatible with the rest of the parts, integrated with OpenAPI (as possible), but probably most importantly, with dependencies.
It’s just not properly documented yet. 😞
But still, it works 🚀 e.g.
from fastapi import FastAPI, Form, HTTPException, Depends
from fastapi.security import APIKeyCookie
from starlette.responses import Response, HTMLResponse
from starlette import status
from jose import jwt
app = FastAPI()
cookie_sec = APIKeyCookie(name="session")
secret_key = "someactualsecret"
users = {"dmontagu": {"password": "secret1"}, "tiangolo": {"password": "secret2"}}
def get_current_user(session: str...
External Link
duckdb.org [1]
Harlequin is a pretty sweet example of what textual can be used to create. Its a terminal based sql ide for DuckDB.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://duckdb.org/docs/guides/sql_editors/harlequin
[2]: /thoughts/
[1]
To persist data in duckdb you need to first make a connection to a duck db database.
con = duckdb.connect('file.db')
Then work off of the connection con rather than duckdb.
con.sql('CREATE TABLE test(i INTEGER)')
con.sql('INSERT INTO test VALUES (42)')
# query the table
con.table('test').show()
# explicitly close the connection
con.close()
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /static/https://duckdb.org/docs/api/python/overview.html
[2]: /thoughts/
Redirecting…
duckdb.org [1]
duckdb can just query any pandas dataframe that is in memory.
I tried running it against a list of objects and got this error. Great error message that gives me supported types right in the message.
Make sure that "posts" is either a pandas.DataFrame, duckdb.DuckDBPyRelation, pyarrow Table, Dataset, RecordBatchReader, Scanner, or NumPy ndarrays with supported format
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://duckdb.org/docs/guides/python/sql_on_pandas
[2]: /thoughts/
pytest-subtests
unittest subTest() support and subtests fixture
PyPI · pypi.org [1]
pytest-subtests is a package to register multiple subtests within a similar test function.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://pypi.org/project/pytest-subtests/
[2]: /thoughts/
A nice codepen reference for dark forms. I am using it for my thoughts chrome extension.
Note
This post is a thought [1]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /thoughts/
![[None]]
When setting up a new machine, vm, docker image you might be installing command line tools from places like pip. They will often put executables in your ~/.local/bin directory, but by default your shell is not looking in that directory for commands.
WARNING: The script dotenv is installed in '/home/falcon/.local/bin' which is not on PATH.
Consider adding this directory to PATH or, if you prefer to suppress this warning, use --no-warn-script-location.
To solve this you need to add that directory to your $PATH.
export PATH=$PATH:~/.local/bin
To make this change permanant add this line to your shell’s init script, which is likely something like ~/.bashrc or ~/.zshrc.
Note
This post is a thought [1]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /thoughts/
GitHub - doyensec/wsrepl: WebSocket REPL for pentesters
WebSocket REPL for pentesters. Contribute to doyensec/wsrepl development by creating an account on GitHub.
GitHub · github.com [1]
Very inspiring textual project to check out how they set up the ui. Their intro video has a pretty epic dev experience.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://github.com/doyensec/wsrepl
[2]: /thoughts/
External Link
X (formerly Twitter) · twitter.com [1]
wsrepl is an epic websocket repl built in python on the textual framework.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://twitter.com/Doyensec/status/1681320727465672706
[2]: /thoughts/
Filter Data - WHERE - SQLModel
SQLModel, SQL databases in Python, designed for simplicity, compatibility, and robustness.
sqlmodel.tiangolo.com [1]
When fetching pydantic models from the database with sqlmodel, and you cannot select your item by id, you probably need to use a where clause. This is the sqlmodel way of doing it.
Here is a snippet of how I am using sqlmodel select and where to find a post by link in my thoughts database.
@post_router.get("/link/")
async def get_post_by_link(
*,
session: Session = Depends(get_session),
link: str,
) -> PostRead:
"get one post by link"
link = urllib.parse.unquote(link)
print(f'link: {link}')
post = session.exec(select(Post).where(Post.link==link)).first()
if not post:
raise HTTPException(status_code=404, detail=f"Post not found for link: {link}")
return post
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://sqlmodel.tiangolo.com/tutorial/where/#filter-rows-using-where-with-sqlmodel
[2]: /thoughts/
URL Decoding query strings or form parameters in Python | URLDecoder
URL Decode online. URLDecoder is a simple and easy to use online tool for decoding URL components. Get started by typing or pasting a URL encoded string in the input text area, the tool will automa...
urldecoder.io [1]
In order to turn url encoded links back into links that I would find in the database of my thoughts project I need to urldecode them when they hit the api. When anything hits the api it must urlencode the links in order for them to be sent correctly as data and not get parsed as part of the url.
Here is a snippet of how I am using urlib.parse.unquote to un-encode encoded urls so that I can fetch posts from the database.
@post_router.get("/link/")
async def get_post_by_link(
*,
session: Session = Depends(get_session),
link: str,
) -> PostRead:
"get one post by link"
link = urllib.parse.unquote(link)
print(f'link: {link}')
post = session.exec(select(Post).where(Post.link==link)).first()
if not post:
raise HTTPException(status_code=404, detail=f"Post not found for link: {link}")
return post
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content ...
encodeURIComponent() - JavaScript | MDN
The encodeURIComponent() function encodes a URI by replacing each instance of certain characters by one, two, three, or four escape sequences representing the UTF-8 encoding of the character (will ...
MDN Web Docs · developer.mozilla.org [1]
In order to send data that includes special characters such as / in a url you need to url encode it. You have probably seen these many times in urls with things like %20 for spaces.
I’m working on a chrome extension to make quick blog posts, like thoughts or a persistent bookmark tool with comments. The backend is written in fastapi [2] and when I check to see if I have a post for a page I need to url encode it.
curl -X 'GET' \
'https://thoughts.waylonwalker.com/link/?link=https%3A%2F%2Fhtmx.org%2Fextensions%2Fclient-side-templates%2F' \
-H 'accept: application/json'
curl example generated from the fastapi swagger docs.
Here is how I used javascript’s encodeURIComponent to turn my chrome extension into a notification when I already have a post for the current page.
// Event listener for tab changes
chrome.tabs.onActivated.addListener(function (activeInfo) {
// Get the active tab information
...
🛠️ Installation | LazyVim
You can find a starter template for LazyVim here
lazyvim.org [1]
Lately in 2023 I have been leaning on lazyvim for my new setups where I am not necessarily ready to drop my full config. It’s been pretty solid, and comes with a very nice setup out of the box, the docs are pretty fantastic as well.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://www.lazyvim.org/installation
[2]: /thoughts/
-
Prime reviews an article with some hot takes about python being slow and quirky, but good enough for a lot of things. Especially data applications that have libraries written in C.
Note
This post is a thought [1]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: /thoughts/
External Link
X (formerly Twitter) · twitter.com [1]
Such an inspiring clip from Kelsey Heightower. Make good shit that inspires people rather than fake ppts of how things could be.
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://twitter.com/changelog/status/1681306857951084544
[2]: /thoughts/
External Link
X (formerly Twitter) · twitter.com [1]
Next time I’m working with large headers on small screens I need to try this. I always truggle to get them to look good for most text and overflow ridiculously long words correctly or at all.
text-wrap: pretty;
text-wrap: balance
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://twitter.com/chriscoyier/status/1681407724993798144
[2]: /thoughts/
Full-text search - Datasette documentation
docs.datasette.io [1]
Enable full-text search in sqlite using sqlite-utils.
$ sqlite-utils enable-fts mydatabase.db items name description
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://docs.datasette.io/en/latest/full_text_search.html#enabling-full-text-search-for-a-sqlite-table
[2]: /thoughts/
sqlite-utils command-line tool - sqlite-utils
sqlite-utils.datasette.io [1]
I want to like jq, but I think Simon is selling me on sqlite, maybe its just me but this looks readable, hackable, editable, memorizable. Everytime I try jq, and its 5 minutes fussing with it just to get the most basic thing to work. I know enough sql out of the gate to make this work off the top of my head
curl https://thoughts.waylonwalker.com/posts/ | sqlite-utils memory - 'select title, message from stdin where stdin.tags like "%python%"' | jq
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://sqlite-utils.datasette.io/en/stable/cli.html#querying-data-directly-using-an-in-memory-database
[2]: /thoughts/
sqlite-utils command-line tool - sqlite-utils
sqlite-utils.datasette.io [1]
insert a json array directly into into sqlite with sqlite-utils.
echo '{"name": "Cleo", "age": 4}' | sqlite-utils insert dogs.db dogs -
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://sqlite-utils.datasette.io/en/stable/cli.html#inserting-json-data
[2]: /thoughts/
LZone
LZone - Cheat Sheets for Sysadmin / DevOps / System Architecture
lzone.de [1]
A nice cheat sheet for jq. jq looks so nice, but it so quickly gets overwhelming on how to select what you want. I was able to make a jq contains query.
curl https://thoughts.waylonwalker.com/posts/ | jq '.[] | select(.title | contains("python"))'
Note
This post is a thought [2]. It’s a short note that I make
about someone else’s content online #thoughts
References:
[1]: https://lzone.de/cheat-sheet/jq
[2]: /thoughts/
Looking for inspiration? sqlite-migrate [1] by simonw [2].
A simple database migration system for SQLite, based on sqlite-utils
References:
[1]: https://github.com/simonw/sqlite-migrate
[2]: https://github.com/simonw
The work on textual-paint [1] by 1j01 [2].
🎨 MS Paint in your terminal.
References:
[1]: https://github.com/1j01/textual-paint
[2]: https://github.com/1j01
Check out wsrepl [1] by doyensec [2]. It’s a well-crafted project with great potential.
WebSocket REPL for pentesters
References:
[1]: https://github.com/doyensec/wsrepl
[2]: https://github.com/doyensec
If you’re into interesting projects, don’t miss out on llm.nvim [1], created by huggingface [2].
LLM powered development for Neovim
References:
[1]: https://github.com/huggingface/llm.nvim
[2]: https://github.com/huggingface
Underground Bases with Wyatt
Playing minecraft with Wyatt today he started a server all on his own and had
me join. All vanilla, only one rule, underground bases.
[1]
I spawned into the server and it was already night time. I gathered up some
wood on my way down a tree, and was attacked by zombies before I could get any
tools, so I ran up another tree and crafted a crafting table.
[2]
Now to follow the rules, it’s time to head underground to build my base.
[3]
I made a mistake and died, but look at this view from my respawn point.
[4]
References:
[1]: https://dropper.waylonwalker.com/api/file/eb43e707-ae55-48f8-9916-86321b3b8754.webp
[2]: https://dropper.waylonwalker.com/api/file/25a3493a-f08b-4ea8-8535-b03cc7bcbf00.webp
[3]: https://dropper.waylonwalker.com/api/file/74fc59aa-f0da-4643-a67a-36dc65480760.webp
[4]: https://dropper.waylonwalker.com/api/file/7e852358-a680-460b-88c0-ed31b2a18501.webp
I like maces’s [1] project fastapi-htmx [2].
Extension for FastAPI [3] to make HTMX [4] easier to use.
References:
[1]: https://github.com/maces
[2]: https://github.com/maces/fastapi-htmx
[3]: /fastapi/
[4]: /htmx/
The work on interpreters [1] by ericsnowcurrently [2].
a placeholder
References:
[1]: https://github.com/ericsnowcurrently/interpreters
[2]: https://github.com/ericsnowcurrently
Check out coolify [1] by coollabsio [2]. It’s a well-crafted project with great potential.
An open-source & self-hostable Heroku / Netlify / Vercel alternative.
References:
[1]: https://github.com/coollabsio/coolify
[2]: https://github.com/coollabsio
The next version of markata will be around a full second faster at building
it’s docs, that’s a 30% bump in performance at the current state. This
performance will come when virtual environments are stored in the same
directory as the source code.
[1]
What happened?? # [2]
I was looking through my profiler for some unexpected performance hits, and
noticed that the docs plugin was taking nearly a full second (sometimes
more), just to run glob.
| |- 1.068 glob markata/plugins/docs.py:40
| | |- 0.838 <listcomp> markata/plugins/docs.py:82
| | | `- 0.817 PathSpec.match_file pathspec/pathspec.py:165
| | | [14 frames hidden] pathspec, <built-in>, <string>
Python scandir ignores hidden directories # [3]
I started looking for different solutions and what I found was that I was
hitting pathspec with way more files than I needed to.
len(list(Path().glob("**/*.py")))
# 6444
len([Path(f) for f in glob.glob("**/*.py", recursive=True)])
# 110
After digging into the docs I found that glob.glob uses os.scandir which
ignores ‘.’ and ‘..’ directories while Path.glob does not.
https://docs.python.org/3/library/os.html#os.scandir
results? # [4]
Now glob.py from the docs plugin does not...
I’m impressed by minijinja [1] from mitsuhiko [2].
MiniJinja is a powerful but minimal dependency template engine for Rust compatible with Jinja/Jinja2
References:
[1]: https://github.com/mitsuhiko/minijinja
[2]: https://github.com/mitsuhiko
I’m really excited about gpt-engineer [1], an amazing project by AntonOsika [2]. It’s worth exploring!
Platform to experiment with the AI Software Engineer. Terminal based. NOTE: Very different from https://gptengineer.app
References:
[1]: https://github.com/AntonOsika/gpt-engineer
[2]: https://github.com/AntonOsika
I like s0md3v’s [1] project roop [2].
one-click face swap
References:
[1]: https://github.com/s0md3v
[2]: https://github.com/s0md3v/roop
tidwall [1] has done a fantastic job with jj [2]. Highly recommend taking a look.
JSON Stream Editor (command line utility)
References:
[1]: https://github.com/tidwall
[2]: https://github.com/tidwall/jj
I recently discovered elia [1] by darrenburns [2], and it’s truly impressive.
A snappy, keyboard-centric terminal user interface for interacting with large language models. Chat with ChatGPT, Claude, Llama 3, Phi 3, Mistral, Gemma and more.
References:
[1]: https://github.com/darrenburns/elia
[2]: https://github.com/darrenburns
The work on cal.com [1] by calcom [2].
Scheduling infrastructure for absolutely everyone.
References:
[1]: https://github.com/calcom/cal.com
[2]: https://github.com/calcom
AUR [1].">paru is an aur helper that allows you to use a package manager to install
packages from the aur.
What’s the Aur # [2]
The Aur is a set of community managed packages that can be installed on arch based distros.
Why a helper? # [3]
paru just makes it easy, no clone and run makepkg. You can do everything paru
can do using the built in pacman installer.
Manual Install from the Aur # [4]
You will need to manually instal pacman from the aur in order to get started.
sudo pacman -S --needed base-devel
git clone https://aur.archlinux.org/paru.git
cd paru
makepkg -si
Installing packages with paru # [5]
Once setup you are ready to install packages from the AUR just like the core repos.
# you can update your system using paru
paru -Syu
# you can install packages from the AUR
paru -S tailscale
paru -S prismlauncher
# even core repo packages can be installed
paru -S docker
Paru in Docker # [6]
Here is a snippet from my devtainer
dockerfile [7].
Where I use paru to install packages from the AUR inside of a dockerfile.
FROM archlinux
RUN echo '[multilib]' >> /etc/pacman.conf && \
echo 'Include = /etc/pacman.d/mirrorlist' >> /etc/pacman.conf && \
pacman --noconfirm -Sy...
I took a break
Life comes in waves, and sometimes you need to set down some of your projects to
focus on others. For the first part of 2023 I’ve really had a lot of family
stuff to focus on, we also are pretty new homeowners and are still trying to
get our new to us house cleaned up and modernized.
Side Projects # [1]
You can see in my growing list of
repos [2] that I have poked
around on quite a few side projects over the past few months. This has been
quite relaxng to me, mostly things that I use to learn from, but also a
lot that are tools and things I use that bring me joy.
Pydantic # [3]
I haven’t wrote about it at all yet, but I have really been starting to lean
into pydantic on all of these side projects. I have really been enjoying the
type system. A good friend @pypeaday [4] got me
hooked and we have been throwing around this phrase that he learned from a math
professor “Make it So”. The idea boils down to leveraging pydantic to
make all the values you want to exist up front, or fail ...
The work on hardtime.nvim [1] by m4xshen [2].
Establish good command workflow and quit bad habit
References:
[1]: https://github.com/m4xshen/hardtime.nvim
[2]: https://github.com/m4xshen
I’m impressed by trogon [1] from Textualize [2].
Easily turn your Click CLI into a powerful terminal application
References:
[1]: https://github.com/Textualize/trogon
[2]: https://github.com/Textualize