41554 blogs · [ { "id": "01a08796-4c5b-704e-a31e-8b3569e79326", "title": "RAID with ZFS and NixOS", "url": "https://knazarov.com/posts/raid_with_zfs_and_nixos", "published_at": "2025-12-27T23:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356a4c4b06", "title": "I switched to a Nix monorepo for personal projects", "url": "https://knazarov.com/posts/i_switched_to_a_nix_monorepo_for_personal_projects", "published_at": "2025-11-23T19:24:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356ab033a6", "title": "Why Emacs remote editing is janky and potential ways to fix it", "url": "https://knazarov.com/posts/why_emacs_remote_editing_is_janky_and_potential_ways_to_fix_it", "published_at": "2025-06-15T10:47:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356b073e51", "title": "Fixing Emacs library loading with a virtual filesystem", "url": "https://knazarov.com/posts/fixing_emacs_library_loading_with_a_virtual_filesystem", "published_at": "2025-04-14T00:46:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356c0245d0", "title": "Loading Emacs in 100ms under Nix", "url": "https://knazarov.com/posts/loading_emacs_in_100ms_under_nix", "published_at": "2025-04-13T16:22:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356c108986", "title": "Basedpyright is a good open-source Python LSP server", "url": "https://knazarov.com/posts/basedpyright_is_a_good_open_source_python_lsp_server", "published_at": "2025-01-26T14:25:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356ca66407", "title": "VPN to home PC with OpenWrt and TailScale", "url": "https://knazarov.com/posts/vpn_to_home_pc_with_openwrt_and_tailscale", "published_at": "2025-01-10T23:31:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356d8ce3a7", "title": "Testing my RISC-V implementation with RISCOF test suite", "url": "https://knazarov.com/posts/testing_my_risc_v_implementation_with_riscof_test_suite", "published_at": "2024-12-17T00:45:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356e813c2d", "title": "Adding a debugger and ELF loader to my RISC-V emulator", "url": "https://knazarov.com/posts/adding_a_debugger_and_elf_loader_to_my_risc_v_emulator", "published_at": "2024-12-11T00:31:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b356f536564", "title": "Writing a simple RISC-V emulator", "url": "https://knazarov.com/posts/writing_a_simple_risc_v_emulator", "published_at": "2024-12-07T01:52:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3570016e3f", "title": "Moving large files via clipboard on Wayland", "url": "https://knazarov.com/posts/moving_large_files_via_clipboard_on_wayland", "published_at": "2024-11-23T10:46:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3570e63689", "title": "Tail calls in Valeri", "url": "https://knazarov.com/posts/tail_calls_in_valeri", "published_at": "2024-11-03T20:06:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35716170ac", "title": "Correctly spawning apps from scripts in sway/i3", "url": "https://knazarov.com/posts/correctly_spawning_apps_from_scripts_in_sway_i3", "published_at": "2024-11-03T11:32:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357252e443", "title": "Connecting to my home PC from the mobile phone", "url": "https://knazarov.com/posts/connecting_to_home_pc_from_mobile_phone", "published_at": "2024-10-28T20:36:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3572a946ab", "title": "Reraising continuations", "url": "https://knazarov.com/posts/reraising_continuations", "published_at": "2024-10-15T22:54:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3573a34a53", "title": "Valeri notebook programming with Org Babel", "url": "https://knazarov.com/posts/valeri_notebook_programming_with_org_babel", "published_at": "2024-10-12T20:12:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357425d38f", "title": "Disassembling functions", "url": "https://knazarov.com/posts/disassembling_functions", "published_at": "2024-10-06T23:01:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357519d7cb", "title": "Capturing and serializing continuations", "url": "https://knazarov.com/posts/capturing_and_serializing_continuations", "published_at": "2024-10-05T22:14:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35751cadb0", "title": "SyncThing now has encrypted servers", "url": "https://knazarov.com/posts/syncthing_now_has_encrypted_servers", "published_at": "2024-09-30T01:21:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357609dc74", "title": "Purity, delimited continuations and I/O", "url": "https://knazarov.com/posts/purity_delimited_continuations_and_io", "published_at": "2024-09-28T19:33:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3576da32c1", "title": "Backtraces in Valeri", "url": "https://knazarov.com/posts/backtraces_in_valeri", "published_at": "2024-09-15T03:18:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35771d1eb4", "title": "Immutable tree-structured stack", "url": "https://knazarov.com/posts/immutable_tree_structured_stack", "published_at": "2024-09-13T01:44:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3577f9b0fa", "title": "Reporting errors from the compilation phase", "url": "https://knazarov.com/posts/reporting_errors_from_the_compilation_phase", "published_at": "2024-09-11T22:46:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35785bedc6", "title": "Let's try Forgejo code forge", "url": "https://knazarov.com/posts/lets_try_forgejo_code_forge", "published_at": "2024-09-09T00:11:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35787570ff", "title": "Error reporting and syntax objects", "url": "https://knazarov.com/posts/error_reporting_and_syntax_objects", "published_at": "2024-09-08T01:43:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3578eae84d", "title": "Valeri REPL became actually useful (and keeps state)", "url": "https://knazarov.com/posts/valeri_repl_became_useful", "published_at": "2024-09-01T23:26:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3579ce4fb2", "title": "Valeri now has a REPL", "url": "https://knazarov.com/posts/valeri_now_has_a_repl", "published_at": "2024-08-26T22:05:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357a192486", "title": "First real program compiled with Valeri", "url": "https://knazarov.com/posts/first_real_program_compiled_with_valeri", "published_at": "2024-08-23T23:49:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357a1c66e0", "title": "First working code generation for simple arithmetic", "url": "https://knazarov.com/posts/code_generation_for_simple_arithmetic", "published_at": "2024-08-11T22:05:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357a2e3fd0", "title": "New spin on a C++ garbage collector", "url": "https://knazarov.com/posts/new_spin_on_cpp_garbage_collector", "published_at": "2024-08-03T01:59:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357b05d3ef", "title": "Why I'm going for immutability", "url": "https://knazarov.com/posts/going_for_immutability", "published_at": "2024-07-28T23:57:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357b36d213", "title": "NuPhy Air: best keyboard so far", "url": "https://knazarov.com/posts/nuphy_air_best_keyboard_so_far", "published_at": "2024-07-04T22:58:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357b632705", "title": "Element X is a new Matrix app for mobile", "url": "https://knazarov.com/posts/element_x_new_matrix_app", "published_at": "2024-06-24T21:09:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357bdd9b22", "title": "Emacs can start up almost as fast as Vim", "url": "https://knazarov.com/posts/emacs_fast_startup", "published_at": "2024-06-10T21:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357cd700cc", "title": "I've ported my language from C to C++ (a story of error handling)", "url": "https://knazarov.com/posts/cpp_rewrite_of_my_language", "published_at": "2024-04-01T22:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357dba3826", "title": "Tail-recursive even/odd", "url": "https://knazarov.com/posts/tail_recursive_even_odd", "published_at": "2024-01-29T21:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357e90d730", "title": "Implementing globals", "url": "https://knazarov.com/posts/implementing_globals", "published_at": "2024-01-28T16:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b357f35569e", "title": "Better assembler and stack-based register file", "url": "https://knazarov.com/posts/better_assembler_and_stack_based_register_file", "published_at": "2024-01-21T21:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3580121730", "title": "Text to binary and back", "url": "https://knazarov.com/posts/text_to_binary_and_back", "published_at": "2024-01-07T23:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35807ec4b7", "title": "VM progress update: dicts and parsing", "url": "https://knazarov.com/posts/vm_progress_update_dicts_and_parsing", "published_at": "2023-12-31T09:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358097079e", "title": "Why use red-black trees instead of hash tables?", "url": "https://knazarov.com/posts/why_rb_trees_instead_of_hash_tables", "published_at": "2023-11-19T06:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3581402738", "title": "Writing programming languages is fun", "url": "https://knazarov.com/posts/writing_programming_languages_is_fun", "published_at": "2023-10-29T22:30:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3581ca0a45", "title": "I now host my own videos (with PeerTube)", "url": "https://knazarov.com/posts/i_now_host_my_own_videos", "published_at": "2023-10-26T00:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3581f6a629", "title": "Virtual Machine debugging and GDB pretty printers", "url": "https://knazarov.com/posts/virtual_machine_debugging_gdb", "published_at": "2023-10-22T20:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3582179f81", "title": "VM progress update: hashes and function calls", "url": "https://knazarov.com/posts/vm_progress_update_hashes_and_function_calls", "published_at": "2023-10-16T00:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3582887ccd", "title": "Statically linked Python interpreter", "url": "https://knazarov.com/posts/statically_linked_python_interpreter", "published_at": "2023-10-07T23:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3582cc8138", "title": "GCC static analyzer for C programs", "url": "https://knazarov.com/posts/gcc_static_analyzer", "published_at": "2023-09-28T23:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358366c462", "title": "Many of my projects are dirty hacks", "url": "https://knazarov.com/posts/many_of_my_projects_are_dirty_hacks", "published_at": "2023-09-27T02:30:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3584424ce1", "title": "Programming languages are operating systems", "url": "https://knazarov.com/posts/programming_languages_are_operating_systems", "published_at": "2023-09-25T22:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3584b62ca2", "title": "VM progress update: data segment and constants", "url": "https://knazarov.com/posts/vm_progress_update_data_segment_and_constants", "published_at": "2023-09-24T21:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35855823f3", "title": "VM progress update: flexible arena, ASAN and gcov", "url": "https://knazarov.com/posts/vm_progress_update_arena_asan_gcov", "published_at": "2023-09-17T21:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35860977e8", "title": "Using YubiKey for personal security", "url": "https://knazarov.com/posts/yubikey_for_personal_security", "published_at": "2023-09-03T20:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3586da4772", "title": "VM progress update: strings, slices and function bindings", "url": "https://knazarov.com/posts/vm_progress_update_strings_slices_calls", "published_at": "2023-09-02T23:50:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35877edd2f", "title": "Calling convention dilemma", "url": "https://knazarov.com/posts/calling_convention_dilemma", "published_at": "2023-08-28T23:30:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3587c90fce", "title": "Kagi Search: a decent Google alternative", "url": "https://knazarov.com/posts/kagi_a_google_alternative", "published_at": "2023-08-27T00:55:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35887cb4bb", "title": "A fuzzy launcher I use for the last 2 years", "url": "https://knazarov.com/posts/a_fuzzy_laungher_i_use", "published_at": "2023-08-21T23:30:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3588b1aad8", "title": "VM progress update: arrays and function calls", "url": "https://knazarov.com/posts/vm_progress_update_arrays_and_function_calls", "published_at": "2023-08-20T21:40:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35896adec4", "title": "Enjoying internet with prefers-reduced-motion", "url": "https://knazarov.com/posts/enjoying_internet_with_prefers_reduced_motion", "published_at": "2023-08-17T23:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3589858042", "title": "Auto-mount USB drives in NixOS", "url": "https://knazarov.com/posts/automount_usb_drives_in_nixos", "published_at": "2023-08-15T22:20:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3589e5cd5f", "title": "VM progress update: simple garbage collection", "url": "https://knazarov.com/posts/vm_progress_update_simple_garbage_collection", "published_at": "2023-08-15T21:30:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358a3f9857", "title": "Playing SomaFM internet radio from the terminal", "url": "https://knazarov.com/posts/somafm_internet_radio_from_terminal", "published_at": "2023-08-13T21:22:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358afbaf3b", "title": "VM progress update: frozen data types", "url": "https://knazarov.com/posts/vm_progress_update_frozen_data_types", "published_at": "2023-08-05T21:16:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358b5f57f0", "title": "How and why I use NixOS", "url": "https://knazarov.com/posts/how_and_why_i_use_nixos", "published_at": "2023-07-30T19:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358c5d32e0", "title": "Simple VM for dynamic languages", "url": "https://knazarov.com/posts/simple_dynamic_language_vm", "published_at": "2023-07-28T21:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358d4c94b9", "title": "Daily-Driving OnePlus 6 with PostmarketOS", "url": "https://knazarov.com/posts/daily_driving_oneplus6_postmarketos", "published_at": "2023-06-28T21:55:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358e358a40", "title": "Setting up Dendrite Matrix server with Nix", "url": "https://knazarov.com/posts/dendrite_and_nix", "published_at": "2023-06-11T23:13:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358eba5854", "title": "How to use Sony cameras as webcam in Linux", "url": "https://knazarov.com/posts/how_to_use_sony_cameras_as_webcam_in_linux", "published_at": "2021-11-13T14:30:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358f13d790", "title": "An idea: minimalist Linux teleprompter", "url": "https://knazarov.com/posts/minimalist_linux_teleprompter_idea", "published_at": "2021-11-08T23:22:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358f6d8dab", "title": "Companion tools for tiling window managers", "url": "https://knazarov.com/posts/companion_tools_for_tiling_window_managers", "published_at": "2021-11-08T23:01:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b358fe4eecc", "title": "PinePhone - a very promising device", "url": "https://knazarov.com/posts/pinephone_a_promising_device", "published_at": "2021-10-29T23:19:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3590c3c0dc", "title": "Bandcamp vs subscription streaming services", "url": "https://knazarov.com/posts/bandcamp_vs_subscription_services", "published_at": "2021-10-27T21:06:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b359135cf45", "title": "Firefox without menu bar and URL bar", "url": "https://knazarov.com/posts/firefox_without_menu_bar", "published_at": "2021-10-24T11:01:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3591cb2132", "title": "Framework laptop - first impressions", "url": "https://knazarov.com/posts/framework_laptop_first_impressions", "published_at": "2021-10-24T10:48:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3591e8adbe", "title": "Sway tabbed layout", "url": "https://knazarov.com/posts/sway_tabbed_layout", "published_at": "2021-09-23T20:06:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35925b9090", "title": "Calendar widget for sway/wayland: alpha", "url": "https://knazarov.com/posts/calendar_widget_for_sway_and_wayland_alpha", "published_at": "2021-09-20T21:42:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35934d5dba", "title": "6 months with Wayland + Sway", "url": "https://knazarov.com/posts/6_months_with_wayland", "published_at": "2021-09-18T08:33:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b35938e61fe", "title": "Why I like fzf", "url": "https://knazarov.com/posts/why_i_like_fzf", "published_at": "2021-09-12T14:58:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3594678f25", "title": "A new static website built from scratch", "url": "https://knazarov.com/posts/a_new_static_website_built_from_scratch", "published_at": "2021-08-21T17:37:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b359472000f", "title": "A very productive OSX workflow", "url": "https://knazarov.com/posts/a_very_productive_os_x_workflow", "published_at": "2020-06-09T13:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b3594e44ce9", "title": "Zetteklasten: associative thought", "url": "https://knazarov.com/posts/zettelkasten_associative_thought", "published_at": "2020-06-01T10:00:00+00:00" }, { "id": "01a08796-4c5b-704e-a31e-8b359556591b", "title": "Setting up postfix on OS X", "url": "https://knazarov.com/posts/setting_up_postfix_on_os_x", "published_at": "2019-01-08T10:00:00+00:00" } ] posts Claim your blog
Back to knazarov.com
Blog · corpus.blog/blogs/knazarov.com/posts

knazarov.com

knazarov.com

2025

2024

2023

2021

2020

2019