[{"content":"A lot of my knowledge laid out here would not be possible without the insight from Nixcademy and their blog series on NixOS images. Please check out the linked blog for more information on this topic. The code in this article is heavily inspired by or reused from that post.\nI hope to add a little more to this topic by showing how to achieve a UEFI-based image for a Raspberry Pi. I also want to practice my technical writing skills for this article.\nAI was only used for basic spelling and grammar. The words are my own\nBackground I have been using NixOS for almost half a decade. I have completely immersed myself in it. I use it for my laptop, desktop, VPS, and a little Raspberry Pi 4. I have recently started using it in professional life, which has encouraged me to think of its other use cases.\nOn a desktop or server system, NixOS is great for the atomic updates and rollbacks, declarative configuration, reproducibility, and module system. This is great when you want a system that can be quickly modified and updated and have the resources to do so.\nOn an embedded device, resources may be restricted. Disk space, memory, CPU speed, and network access are all things that can be limited on an embedded system. We may also want to limit specific functionality of the system to reduce attack surface or resource usage.\nMy experience so far with NixOS is that it is not optimized for these low resource situations by default, but can be made to fit these use cases! Nix and NixOS provide a pathway to a fully custom Linux build for almost any requirement.\nNixOS uses the systemd suite of software for the init system and optionally networking, time synchronization, boot loader, among others. The existence of systemd in the NixOS stack means we have access to some very interesting and useful pieces of software:\nsystemd-repart for building images and partitioning drives. systemd-sysupdate for image-based update mechanisms. systemd-boot for the bootloader. This enables features such as …","section":"posts","summary":"A lot of my knowledge laid out here would not be possible without the insight from Nixcademy and their blog series on NixOS images. Please check out the linked …","tags":"nix nixos systemd repart sysupdate raspberry pi embedded kiosk linux image update deployment cross compile minimal secure compression","title":"Reproducable, flashable, updateable Raspberry Pi Images with NixOS","url":"/posts/2026/01-jan/2026-01-16-nixos-repart-image/"},{"content":"Background Making your resume easily available and up to date can be quite the task. The approach I have taken is to host my resume on Github. Github has tools that make it easy to have links that always point to the latest version of a file, which is what we need for my approach.\nWhat this approach uses:\nA repository for hosting the resume LaTeX code. Github actions for building the resume. Git tags to tell Github when to build and \u0026amp;ldquo;release\u0026amp;rdquo; the resume PDF. The final result of this process is something that, when set up, can be operated completely from the Git command line. All you have to do is commit changes to your resume repository, then create a tag when the resume is in a presentable state. A link can be put on your website that always points to the latest PDF.\nWriting Your Resume This guide assumes your resume is written in LaTeX. If yours is not, it is pretty easy to learn. I do not have any specific guides to share, I just googled every question I needed answered to learn. You can check out my resume repository if you need ideas. You will want to put the source onto a Github repository so that you can set up the automated generation.\nGithub Workflow Configuring the Github workflow to run is pretty simple. We can start with the starter template that Github provides and build onto it.\nAlong with the workflow we are building, there are a couple of external actions we can utilize:\nxu-cheng/latex-action for building our LaTeX documents. softprops/action-gh-release for adding the built PDF to the Github release. Configuring Run Conditions We need to configure what triggers our workflow to run. We want to run the action whenever we push a new tag to the repository. This part of the yml file will configure the workflow to run under these conditions:\n1name: BuildPDF 2 3on: 4 push: 5 tags: 6 - \u0026amp;#39;*\u0026amp;#39; # this formatting can be changedThe tags formatting can be changed if you want only major or minor version changes to trigger the workflow.\nWorkflow …","section":"posts","summary":"Background Making your resume easily available and up to date can be quite the task. The approach I have taken is to host my resume on Github. Github has tools …","tags":"github websites automation actions latex jekyll resume","title":"Automating Your Resume with Github","url":"/posts/2021/04-apr/2021-04-24-online-presence-resume/"},{"content":"This will be the first technical post on my website. I will use this post to describe the process in setting up external brightness control in Sway on Arch Linux.\nBackground Kernel 5.9 added improved I2C support to Navi 10 cards1, which include the Radeon RX 5600XT. Using I2C in combination with ddcutil can allow us to control an external monitors brightness using commands.\nUsing ddcutil Detecting Monitors First we need to make sure that the i2c-dev module is loaded into the system; In my case, it was loaded automatically. We now want to identify the monitors:\n1# ddcutil detect 2Display 1 3 I2C bus: /dev/i2c-5 4 EDID synopsis: 5 Mfg id: GSM 6 Model: LG QHD 7 Serial number: 8 Manufacture year: 2020 9 EDID version: 1.4 10 VCP version: 2.1 11 12Display 2 13 I2C bus: /dev/i2c-6 14 EDID synopsis: 15 Mfg id: DEL 16 Model: DELL P2014H 17 Serial number: J6HFT3B9AK7L 18 Manufacture year: 2013 19 EDID version: 1.4 20 VCP version: 2.1 The monitor I am interested in is the LG QHD, with a bus number of 5. ddcutil can change various properties of connected monitors, we are only interested i brightness right now.\nWe want to get current brightness value. We can use the ddcutil getvcp command to get our current value. The id for brightness is 10, so we can get our brightness value:\n1# ddcutil --bus 5 getvcp 10 2VCP code 0x10 (Brightness ): current value = 100, max value = 100 We can see that the range for the brightness on this monitor is 0 to 100.\nAdjusting Brightness We can change the brightness by using the ddcutil setvcp command. We also need to use the --bus parameter to specify which monitor we want to adjust. For example, to set the brightness to 50:\n1# ddcutil --bus 5 setvcp 10 50 Brightness can also be set relatively:\n1# ddcutil --bus 5 setvcp 10 - 5 lowers the brightness by 5. The - can be replaced with a + to increase the brightness instead.\nNow that we know the commands, we can now figure out how to bind the command to a shortcut in our display manager, which is Sway in …","section":"posts","summary":"This will be the first technical post on my website. I will use this post to describe the process in setting up external brightness control in Sway on Arch …","tags":"tutorial linux computers","title":"Setting up External Monitor Brightness Controls on Arch Linux","url":"/posts/2020/10-oct/2020-10-29-setting-up-external-monitor-brightness/"},{"content":"The new website design is now live. You should now be reading this at lyndeno.ca.\n","section":"posts","summary":"The new website design is now live. You should now be reading this at lyndeno.ca.\n","tags":"announcement","title":"New website live","url":"/posts/2020/09-sep/2020-09-10-new-website-launch/"},{"content":"Welcome to the new website This website will eventually replace the old HTML/PHP based lyndeno.ca\n","section":"posts","summary":"Welcome to the new website This website will eventually replace the old HTML/PHP based lyndeno.ca\n","tags":"announcement","title":"Welcome to the new lyndeno.ca","url":"/posts/2020/09-sep/2020-09-08-new-website/"},{"content":"I am an Electrical Engineering graduate from the University of Alberta.\nI am currently working as a Senior Software Developer at Chemelex. I specialize in Nix/NixOS and Rust software development and Linux hardware bringup.\nI also help people with their computer and technology issues when I have time.\nContact Information Tech Help Email tech@lyndeno.ca Other lsanche@lyndeno.ca Access my latest resume here.\n","section":"","summary":"I am an Electrical Engineering graduate from the University of Alberta.\nI am currently working as a Senior Software Developer at Chemelex. I specialize in …","tags":"","title":"About","url":"/about/"},{"content":"Specialized Infrastructure \u0026amp;amp; Testing Solutions I help organizations build reliable, reproducible systems through declarative infrastructure, secure embedded computing, and robust automated testing. With deep expertise in Nix, Rust, Linux kernel development, and OP-TEE, I solve complex technical challenges that require both systems-level knowledge and modern DevOps practices.\nWhat I Offer Declarative Infrastructure with Nix Transform your build and deployment pipelines into reproducible, maintainable systems. I leverage Nix to create infrastructure that eliminates \u0026amp;ldquo;works on my machine\u0026amp;rdquo; problems and makes your entire stack versionable and auditable.\nI can help you:\nDesign and implement Nix-based CI/CD pipelines that guarantee reproducible builds across environments Migrate legacy build systems to declarative Nix configurations Create custom NixOS modules for your specific infrastructure needs Build containerized and VM-based testing environments that spin up instantly Develop reproducible development environments that work identically for every team member Automated Testing \u0026amp;amp; Quality Assurance Drawing on recent work automating testing for Linux-based kiosk systems, I build comprehensive testing frameworks that catch issues before they reach production.\nServices include:\nMulti-service integration testing with automated orchestration Kiosk and embedded system testing automation Continuous testing pipelines integrated with your existing tools Test environment provisioning that mirrors production exactly Secure Embedded Systems With specialized knowledge of OP-TEE (Open Portable Trusted Execution Environment), I help you implement security at the hardware level for IoT, embedded devices, and secure computing applications.\nExpertise in:\nOP-TEE integration and trusted application development Hardware-backed cryptographic operations Systems Programming \u0026amp;amp; Performance Built on a foundation of Rust and Linux kernel expertise, I can optimize your critical …","section":"","summary":"Specialized Infrastructure \u0026amp; Testing Solutions I help organizations build reliable, reproducible systems through declarative infrastructure, secure embedded …","tags":"","title":"Consulting","url":"/consulting/"}]