Sign in

Paweł Grzybek

@pawelgrzybek.com
942 followers 197 following 704 posts

I’m a software developer from Poland living in Northampton, UK. I’m a web standards enthusiast, accessibility advocate, and simplicity guardian. The guy behind the NN1 Dev Club meetup. After-hours hip hop head, funky records collector, and photographer.

PostsRepliesMedia
Paweł Grzybek @pawelgrzybek.com · 17/09/2026
That must be a recent thing in Safari, but the well-known iOS pull-to-refresh gesture is now present on macOS. #safari
110
Paweł Grzybek @pawelgrzybek.com · 20/08/2026
This is a little @raycast.com change in the v2 of the macOS version that I'm so happy about. I cannot tell you how much time I wasted in my life staring at the long default animation between spaces.
The announcement of the new windows management commands in Raycast v2 that allow to swap between spacer without default long macOS animations.
120
Paweł Grzybek @pawelgrzybek.com · 08/08/2026
Yesterday was a big day for us. We went to a gig for the first time since becoming parents. Erykah Badu and Lauryn Hill were great but nothing about yesterday was cooler than spending some quality time with my ridiculously hot best friend who also happened to be my wife. Love ❣️
Me and my wife at the festival. On the bacground big stage with artists performing live. Thoousands of other atendees of this festival around us.Stage with 3 huge screens announcing upcoming artist, Erykah Badu.
0120
Paweł Grzybek @pawelgrzybek.com · 05/08/2026
🔥 Vim tip By default, all windows get their own status line. When the space is limited, it becomes messy and some paths are truncated The `vim.o.laststatus = 3` changes that behaviour, so you will see only a single status line for the active window. #vim #neovim
By default, all windows get their own status line. When the space is limited, it becomes messy and some paths are truncated The `vim.o.laststatus = 3` changes that behaviour, so you will see only a single status line for the active window. I found this a lot better than the default.
000
Paweł Grzybek @pawelgrzybek.com · 02/08/2026
The bytes/strings package comes with the `Cut()` method that helps to get first chunk of a string before the separator. To get the last one, you usually had do the `strings.LastIndex()` dance. Not anymore. Go 1.27 comes with `CutLast()` on strings and bytes. Way easier! #golang
package main

import (
	"fmt"
	"strings"
)

func main() {
	path := "one/two/three"
	separator := "/"

	beforeFirst, afterFirst, foundFirst := strings.Cut(path, separator)
	fmt.Printf("%q %q %v\n", beforeFirst, afterFirst, foundFirst)
	// "one" "two/three" true

	// go 1.27
	beforeLast, afterLast, foundLast := strings.CutLast(path, separator)
	fmt.Printf("%q %q %v\n", beforeLast, afterLast, foundLast)
	// "one/two" "three" true
}
000
Paweł Grzybek @pawelgrzybek.com · 02/08/2026
Go can now infer types of function with generics in other context, not only in simple assignments. #golang
package main

import "fmt"

func first[T any](s []T) T { return s[0] }
func last[T any](s []T) T  { return s[len(s)-1] }

func main() {
	// go 1.26
	ops := []func([]int) int{first[int], last[int]}
	// go 1.27
	ops := []func([]int) int{first, last}

	s := []int{1, 2, 3}

	for _, op := range ops {
		fmt.Println(op(s))
	}
}
000
Paweł Grzybek @pawelgrzybek.com · 29/07/2026
Mastodon has an "advanced web interface" feature, and this multi-column view is the only way I use it. docs.joinmastodon.org/user/prefere... I just found the deck.blue for Bluesky that makes this platform usable for me. I like it! deck.blue
Multi-column view for Mastodon and Bluesky.
030
Paweł Grzybek @pawelgrzybek.com · 27/07/2026
I have no clue if this is part of the @codepen.io 2.0 release or not but vim keybindings support is really good! Thank you for your hard work @chriscoyier.net and rest of the team 🫶 #vim #codepen
030
Paweł Grzybek @pawelgrzybek.com · 15/07/2026
Been there, done that. Loved the journey and gave me a good job for multiple years and studding this book probably bought me a family house 🏠 (seriously)
110
Paweł Grzybek @pawelgrzybek.com · 07/07/2026
ESLint, a popular linter in the JavaScript ecosystem, has a number of rules related to ternary expressions. - no-nested-ternary - no-ternary - no-unneeded-ternary I like how Go lang designers made a call to never worry about this family of “issues”. go.dev/doc/faq#Does... #golang
The reason ?: is absent from Go is that the language’s designers had seen the operation used too often to create impenetrably complex expressions. The if-else form, although longer, is unquestionably clearer. A language needs only one conditional control flow construct.
2130
Paweł Grzybek @pawelgrzybek.com · 19/06/2026
Yeah, adding seconds should do it. Under the hood it is just a time.Time type.
time.Time parsing in go with and without seconds
020
Paweł Grzybek @pawelgrzybek.com · 29/05/2026
Resend team is releasing a new design newsletter. I like the stuff they produce. This animation is sweet 👌
020
Paweł Grzybek @pawelgrzybek.com · 16/05/2026
I'm a huge fan of Resend. Long-time user, supporter and since very recently also one of the members of their insider programme. I just received a swag pack from them and holy moly. Really cool hoodie, great hat but damn... This box! Thanks Resend ❣️
The box with the Resend insider swag pack.The box with the Resend insider swag pack.
010
Paweł Grzybek @pawelgrzybek.com · 15/05/2026
Today I received one of these spammy emails from someone who can offer help to improve the conversion of my personal blog. Can't care less about its conversion, but mate, with this "mobile responsiveness can be improved" you triggered my curiosity. Replied!
A screenshot of an email that offers suggestions to my personal blog website.
000
Paweł Grzybek @pawelgrzybek.com · 05/05/2026
I knew that the CSS :nth-child(n of selector) is a thing, but I didn’t know how well supported it is nowadays. Another thing I didn’t know is that I can use CSS nesting with it like in the example below. Modern CSS is incredible ❣️ developer.mozilla.org/en-US/docs/W... #css
.intro {
  :nth-child(2 of &) {
    background-color: lime;
  }
}
261
Paweł Grzybek @pawelgrzybek.com · 04/05/2026
Have you messed up a commit message? The `git commit --amend` is okay for the most recent commit, but for the older commit interactive rebase is your friend. Unless you are on git 2.54, which comes with the `git history reword` command. Announcement post: github.blog/open-source/... #git
060
Paweł Grzybek @pawelgrzybek.com · 23/04/2026
🔥 Vim tip Do you know the :s (substitute) command? Of course you do! :s/old/new But did you know that any single-byte character works as a pattern delimiter? This is so useful when you replace paths that contain the `/` character. No more escapes! Example: :s,some/path,another/one #vim #neovim
0161
Paweł Grzybek @pawelgrzybek.com · 04/04/2026
Google now lets you change the username of your Gmail account. So if you still hold some stupid name you chose when you were 15 years old, now you can change it (but what you want is probably taken anyway).
Google now lets you change the username of your Gmail account. So if you still hold some stupid name you chose when you were 15 years old, now you can change it (but what you want is probably taken anyway).
030
Paweł Grzybek @pawelgrzybek.com · 31/03/2026
✨ Vim tip for today @neovim.io 0.12 comes with undotree built in. You don't need a plugin for it. How cool! ``` vim.cmd("packadd nvim.undotree") vim.keymap.set("n", "<leader>u", require("undotree").open) ``` #neovim #vim
0101
Paweł Grzybek @pawelgrzybek.com · 12/03/2026
Either I'm massively falling behind the recent UX trends, or Claude blog design is shit. #claude #ai #blog
060
Paweł Grzybek @pawelgrzybek.com · 11/03/2026
Ghostty key tables keybinding workflows are the best. Look at this! ⌘+d, j = open new split to the bottom ⌘+d, l = open new split to the right ⌘+r, k = resize to the top ⌘+r, h = resize to the left This should be very familiar to tmux or vim users. Love it ❣️ github.com/pawelgrzybek... #ghostty
0141
Paweł Grzybek @pawelgrzybek.com · 01/03/2026
State of the Browser yesterday was superb. It was incredible to meet in person some folks who I have been following or interacting with online for years @matuzo.at @ohhelloana.blog @zachleat.com @jakearchibald.com @bram.us @hidde.blog @cassiecodes.bsky.social @remysharp.com 🫶 #sotb26
Picture of Manuel and me printed on some cool kids' printer. A bunch of stickers around it. All put on the black table. People in the picture look rather happy.
2181
Paweł Grzybek @pawelgrzybek.com · 25/02/2026
I have been a loyal customer of @1password.bsky.social for 13 years. I will be switching to Apple Passwords, and I will document everything in a blog post (expect one before 27th March). Let me know if you have done a similar migration recently. #1password
A screenshot from App Store app that confirms that I bought 1Password for the first time in March 2013.A screenshot from the recent 1Password update note that informs about significant price increase and update on new AI related features.
330
Paweł Grzybek @pawelgrzybek.com · 20/02/2026
Neovim tip for today 🔥 Assuming you have two similar files open side by side, and you would like to sync their scrolling state. Kinda how diff view works. Easy! `windo set scrollbind` `windo set noscrollbind` #vim #neovim
0100
Paweł Grzybek @pawelgrzybek.com · 19/02/2026
Hitting Enter submits the Claude Code prompt, which makes multi-line prompts (most of them) inconvenient. I’m aware of Option+Enter and Shift+Enter, but they are not embedded in my muscle memory. Luckily, Ctrl+g allows me to edit my prompt in my default editor (Vim FTW 🎉). So helpful! #claude
110
Paweł Grzybek @pawelgrzybek.com · 16/02/2026
Hey. I remember trying to host the Hugo project on @cloudflare.social Workers some time ago, which gave me a headache to make sure it ran on the latest version. This thing is trivially easy now! A single `HUGO_VERSION` added to the build environment does the trick. #hugo #golang
Add the HUGO_VERSION env the the cloudflare worker build env to ensure it runs on the latest version.Add the HUGO_VERSION env the the cloudflare worker build env to ensure it runs on the latest version.
010
Paweł Grzybek @pawelgrzybek.com · 06/02/2026
Did you know that fish shell supports vim keybindings? A spelling mistake in long shell commands doesn’t need to be frustrating. Hit Esc to enter normal mode, bam bam bam, done ✅ #vim #fish
050
Paweł Grzybek @pawelgrzybek.com · 01/02/2026
Do you use Ghostty terminal emulator and miss the cmd+f? It is coming in the next release scheduled for April 2026. You can also open the snapshot of the current screen in your favourite editor and grep there. The default keymap for the `write_screen_file` is cmd +shift+j. #ghostty #terminal
0150
Paweł Grzybek @pawelgrzybek.com · 31/12/2025
I love reading all your annual summary blog posts. Send them my way. pawelgrzybek.com/a-look-back-... So far I have @dbushell.com @bell.bz Cory Dransfeldt @hidde.blog @css-tricks.bsky.social @chriskirknielsen.com Damian Walsh and @loige.co on my list. Send some more my way please! #blogging
A screenshot of the bottom section of my article about the annual reviews of other bloggers.
6186
Paweł Grzybek @pawelgrzybek.com · 22/11/2025
The specification of HTTP is evolving and it is a good time to learn about the new QUERY method. It is a combination of GET and POST that takes the best traits of them. Like GET, it has a body and is idempotent. www.ietf.org/archive/id/d... #http
As with POST, the input to the query operation is passed as the content of the request rather than as part of the request URI. Unlike POST, however, the method is explicitly safe and idempotent, allowing functions like caching and automatic retries to operate.
Recognizing the design principle that any important resource ought to be identified by a URI, this specification describes how a server can assign URIs to both the query itself or a specific query result, for later use in a GET request.
020
Paweł Grzybek @pawelgrzybek.com · 22/11/2025
If you're a Claude Code user, but also have access to GitHub Copilot, you may be just fine with Copilot CLI. I just learned that it exists, and for me it works just fine. I saved myself £18 monthly on the Anthropic bill. #ai #copilot
Screenshot of me using the Copilot CLI.
020
Paweł Grzybek @pawelgrzybek.com · 21/11/2025
I found a Neovim spellchecking workflow that works. Spelling suggestions rely on the Snacks plugin picker. [s - previous misspell ]s - next misspell <leader>ss - spelling suggestions (Snacks picker) Spellcheck: github.com/pawelgrzybek... Snacks: github.com/pawelgrzybek... #neovim #vim
040
Paweł Grzybek @pawelgrzybek.com · 20/11/2025
This is real, no joke. We finally can natively run TypeScript in three dominant server-side JS runtimes (Node.js, Bun and Deno). #javascript
This is real, no joke. We finally can natively run TypeScript in three dominant server-side JS runtimes (Node.js, Bun and Deno).
1120
Paweł Grzybek @pawelgrzybek.com · 19/11/2025
This is what I dislike about the JavaScript ecosystem. It feels like yesterday when I moved all my Lambdas from Node.js v16 to v20. Now this one hits the EOL. Always something! Have you ever tried to work on a 3-year-old Gatsby project? Or maybe an old website built using Grunt? Good luck 😜
Reminder from AWS that Lambdas that are on Node.js 20 go EOL soon.
030
Paweł Grzybek @pawelgrzybek.com · 08/11/2025
Update of my uses page. I’m well chuffed with new pics so I added a feature to display pictures wider than the main column. I learned a nice trick from @anatudor.bsky.social and wanted an excuse to use it 😜 My uses page: pawelgrzybek.com/uses/ Ana’s post: frontendmasters.com/blog/super-s... #css
Picture of my workspace.Picture of my workspace.
140
Paweł Grzybek @pawelgrzybek.com · 06/11/2025
One of the features that Arc browser users like the most is split view. Now you can also enable it in Google Chrome. chrome://flags/#side-by-side I never really asked for this feature, but having a "mobile" and "desktop" viewport preview is actually helpful when you do some design work. #frontend
Screenshot of Google Chrome with the split-view flag enabled, and my website open in both panels side by side.
490
Paweł Grzybek @pawelgrzybek.com · 29/10/2025
I found an interesting bug in the latest Safari on iOS. Date/time related inputs calculate width 100% differently than inputs of other types. CodePen to reproduce: codepen.io/pawelgrzybek... Bug report on WebKit Bugzilla: bugs.webkit.org/show_bug.cgi... #css @jensimmons.bsky.social
The difference in the computed width of input elements of different types on the latest iOS.
160
Paweł Grzybek @pawelgrzybek.com · 26/10/2025
Neovim tip for today 🔥 While in Insert mode, you can hit <c-o> to temporarily enter Normal mode. After the command, Vim will return to Insert mode. Quick example where I type inside the quote and enter Normal mode `<c-o>` just to skip the cursor over the closing quotation mark `a`. #vim #neovim
170
Paweł Grzybek @pawelgrzybek.com · 15/10/2025
I got my first camera 25 years ago, and since then I have had many hobbies, but photography is the one that has stuck. Can’t tell you how many bodies and lenses I have used. Many! This is my favourite set so far. Sony 24mm F1.4 GM Sony 50mm F1.2 GM Sony 85mm F1.4 GM #photography
Sony 24mm F1.4 GM
Sony 50mm F1.2 GM
Sony 85mm F1.4 GM
030
Paweł Grzybek @pawelgrzybek.com · 14/10/2025
Rest in peace D. An absolute legend 🖤 www.bbc.co.uk/news/article... #dangelo #neosoul
Three albums by D’Angelo next to each other.
020
Paweł Grzybek @pawelgrzybek.com · 10/10/2025
I use incremental selection in @neovim.io all the time. It has been removed from the main branch of nvim-treesitter, but it is easy to replicate. Also, the LSP-based incremental selection is coming to the core 🎉 Article: pawelgrzybek.com/nvim-increme... PR: github.com/neovim/neovi... #neovim #vim
000
Paweł Grzybek @pawelgrzybek.com · 09/10/2025
🚨 Rather niche post for Kinesis Advantage users only By default left arrow points up, and right one down. I remapped them to follow the same directions as Vim keybindings for J and K which are directly above the arrows. This single remap was a game changer for me. #kinesis #ergonomics
Simple keymap remap idea that made my life easier.
000
Paweł Grzybek @pawelgrzybek.com · 08/10/2025
The latest macOS Tahoe introduced a bunch of elements with poor contrast that made a lot of users sad. Let me introduce you to a new design trend by Apple. Hidden buttons! This is the UI of the general settings of the Music app, and I can replicate it on all Macs I have. Nuts! #macos
250
Paweł Grzybek @pawelgrzybek.com · 29/09/2025
I'm selling my ZSA Voyager. UK only. £200. Let me know if youre interested. #zsa #zsavoyager #ergonomics
ZSA Voyager for sale.ZSA Voyager for sale.ZSA Voyager for sale.ZSA Voyager for sale.
000
Paweł Grzybek @pawelgrzybek.com · 28/09/2025
If you use Browserslist, you can now define the list of features by the Baseline status. This is precisely what I want on most of my projects 👌 browsersl.ist#q=baseline+w... #frontend
The Browserslist now lets users specify the list of browser by the Baseline status. For example `baseline widely available`.
030
Paweł Grzybek @pawelgrzybek.com · 27/09/2025
The OG of ergonomics arrived. Excited! #ergonomics #kinesis
Kinesis advantage 360 pro next to Zsa voyager
020
Paweł Grzybek @pawelgrzybek.com · 24/09/2025
The macOS Tahoe keeps surprising me every moment, but this is by far the funniest bug that I have seen so far. It's actually a series of bugs on this single screen. #macos #tahoe
An input field on the macOS Tahoe OS that asks the user for the password for the "(null)" user. The placeholder states "Email or Phone Number". There is also a cryptic error message underneath. So many bugs on the single screen.
021
Paweł Grzybek @pawelgrzybek.com · 17/09/2025
Lucky me 💓
Me and my wife walking down the stairs. We wear formal wedding clothes. I look ok, my wife looks stunning.
280
Paweł Grzybek @pawelgrzybek.com · 03/09/2025
Firefox Developer Edition comes with Vim keybindings 🫶 #vim
Firefox Developer Edition comes with Vim keybindings 🫶
050
Paweł Grzybek @pawelgrzybek.com · 02/09/2025
ZSA Navigator arrived. As much as I love my weird enough keyboard, that this crystal ball like mouse may be a bit too much for me. I’m gonna give it a go, only because I really like ZSA folks. #zsa #ergonomics
ZSA Navigator attached to my ZSA Voyager.
150