From cbe479145c140347217a70550a9e613fb6f73f83 Mon Sep 17 00:00:00 2001 From: Glenn Thompson Date: Thu, 2 Jan 2025 09:48:51 +0300 Subject: [PATCH] sitewide updates --- .env.gpg | 1 + content/posts/test-blog-post.md | 28 ++ deploy/feed.xml | 622 ++++++++++++++++++++++++++++++++ feed.xml | 622 ++++++++++++++++++++++++++++++++ website-deploy.zip | Bin 0 -> 100921 bytes 5 files changed, 1273 insertions(+) create mode 100644 .env.gpg create mode 100644 content/posts/test-blog-post.md create mode 100644 deploy/feed.xml create mode 100644 feed.xml create mode 100644 website-deploy.zip diff --git a/.env.gpg b/.env.gpg new file mode 100644 index 0000000..755a4e1 --- /dev/null +++ b/.env.gpg @@ -0,0 +1 @@ +Œ  `ąďřúýŇtű ęwˢXçȡ”vy^ôƒ+ĆKđˇó›ňʆˇŽ˙]R¸ű?əżBçŢ޲_z¤‘äxńß+$†Ť"řŽv!Ş4BYD$”E$šOôgs7fńqLŇC ›Ěsʡ­¸Ä욶żJZΏ ů@éO} \ No newline at end of file diff --git a/content/posts/test-blog-post.md b/content/posts/test-blog-post.md new file mode 100644 index 0000000..5171632 --- /dev/null +++ b/content/posts/test-blog-post.md @@ -0,0 +1,28 @@ +--- +title: Test Blog Post +date: 2025-01-02 +description: A test blog post to verify the summary generation functionality +tags: [test, blog] +--- + +# Test Blog Post + +This is a test blog post that we'll use to verify the summary generation functionality. The summary should be extracted from this first paragraph, which gives a good overview of what the post is about. + +## Section 1 + +Lorem ipsum dolor sit amet, consectetur adipiscing elit. Sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat. + +## Section 2 + +Duis aute irure dolor in reprehenderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur. Excepteur sint occaecat cupidatat non proident, sunt in culpa qui officia deserunt mollit anim id est laborum. + +### Subsection + +- List item 1 +- List item 2 +- List item 3 + +## Conclusion + +This concludes our test blog post. It has all the elements we need to test summary generation: frontmatter, multiple sections, and varying content types. diff --git a/deploy/feed.xml b/deploy/feed.xml new file mode 100644 index 0000000..6422d44 --- /dev/null +++ b/deploy/feed.xml @@ -0,0 +1,622 @@ + + + + Glenn Thompson's Blog + Personal blog about programming, technology, and other interests + https://glenneth.org + + en-us + Fri, 06 Dec 2024 03:38:32 GMT + + + Aesthetic Meets Ergonomics: My Deep Dive into the Glove80 Keyboard + As my career trajectory veered from being an integral member of an electrical engineering team to assuming the role of Deputy Project Manager, the nature of my daily activities underwent a significant transformation. The hands-on tasks of yesteryears were gradually replaced by a deluge of documentations—writing, reviewing, and endless typing. This shift brought with it an unwelcome companion: discomfort in my hands and wrists, a stark reminder of the ergonomic pitfalls of conventional keyboards. It was in this context that my quest for a more ergonomic typing solution began, leading me towards the world of ALICE layout keyboards, with the [Q10 Pro by Keychron](https://www.keychron.com/products/keychron-q10-pro-alice-layout-qmk-via-wireless-custom-mechanical-keyboard) being my initial foray into this new realm. + In the quest for the ultimate ergonomic keyboard, aesthetics often take a backseat to functionality. Yet, when I first laid eyes on the Glove80, I was struck by its elegant design—a refreshing departure from the utilitarian look typical of many ergonomic keyboards. Unlike the retro vibes of the Kinesis Advantage or the DIY aesthetics of most Dactyls, the Glove80 boasts a modern, sleek appearance that complements the contemporary design language of Apple, Google, and LG devices. With its clean lines and visually appealing legends, the Glove80 not only promises ergonomic comfort but does so with style, standing out amidst a sea of competitors. +

As my career trajectory veered from being an integral member of an electrical engineering team to assuming the role of Deputy Project Manager, the nature of my daily activities underwent a significant transformation. The hands-on tasks of yesteryears were gradually replaced by a deluge of documentations—writing, reviewing, and endless typing. This shift brought with it an unwelcome companion: discomfort in my hands and wrists, a stark reminder of the ergonomic pitfalls of conventional keyboards. It was in this context that my quest for a more ergonomic typing solution began, leading me towards the world of ALICE layout keyboards, with the Q10 Pro by Keychron being my initial foray into this new realm.

+

However, the relief was partial, and the shadow of wrist strain persisted, urging me to delve deeper into the ergonomic keyboard universe. My search for a truly ergonomic solution brought me to the doorstep of the Glove80 by MoErgo. Boasting a unique split design, concave key wells, and a commitment to ergonomics that seemed almost tailor-made for my situation, the Glove80 held the promise of being the oasis I was desperately seeking in the desert of my wrist discomfort.

+

This journey from an ALICE layout keyboard user to a Glove80 enthusiast was not just about finding a better typing tool; it was about embracing a healthier typing posture and redefining my interaction with computers. After a month of integrating the Glove80 into my workflow, I'm ready to share my insights and experiences. This review will explore the initial adaptation period, the impact on my wrist health, and whether the Glove80 lives up to its promise as an ergonomic game-changer.

+

First Impressions: Feel and Experience

+

Upon beginning my typing journey with the Glove80, two aspects immediately stood out. The unique choc spacing, combined with finger-specific curves for each key column, facilitated effortless access to the bottom and number rows, as well as several function keys—without the need to move my hands. This ease of reach extended to the thumb keys, thoughtfully laid out in an arc to match the natural movement of my thumbs. Additionally, the keyboard's low profile on the desk encouraged a neutral wrist position, enhancing comfort during long typing sessions. These features converged to create a typing experience that was not just comfortable but intuitively aligned with natural hand movements.

+

The Details That Matter

+
Ergonomics at Its Core
+

The hallmark of the Glove80 is its ergonomics, designed to seamlessly integrate with the user's hand movements. After fine-tuning the tenting and tilting angles—made possible by the adjustable feet on each half of the keyboard—my hands naturally fell into the optimal typing position. The thoughtfully designed key layout meant that reaching for higher rows required merely straightening or curling my fingers, aided by the keyboard's choc spacing. Each column's unique height and curve catered to the different lengths of my fingers, further minimizing strain.

+
Key Innovations
+

The Glove80 introduces keycaps with a novel MCC profile, featuring raised sides and a central cylindrical channel, made from a slick POM material. This design supports the natural sliding of fingers across keys, reducing the need to lift hands while typing. The keyboard's thumb clusters are another highlight, offering six easily accessible keys per hand. This ergonomic layout ensures that most keys are within reach without stretching, a testament to the keyboard's user-centric design.

+
Beyond Typing: Features and Flexibility
+
    +
  • Tenting and Adjustability: The Glove80's customizable tenting angles, enhanced by sturdy locking nuts, ensure a tailored typing experience that can be finely adjusted to individual preferences.
  • +
  • Comfortable Palm Rest: The integrated, detachable palm rest offers additional comfort, catering to different typing styles with ease.
  • +
  • Switch Selection: While the standard Kailh choc switches are adequate, enthusiasts might prefer customizing their keyboard with preferred switches for an optimized typing feel. I opted for the lighter Kailh Choc V1, Red Pro Linear 35gf switches.
  • +
  • Keycaps: The high-quality POM keycaps, combined with attractive and durable legends, enhance the keyboard's tactile and visual appeal.
  • +
  • Tech-Savvy Features: From its easy-to-use firmware updates via a web interface to seamless Bluetooth connectivity and impressive battery life, the Glove80 is designed for a modern, wireless world.
  • +
  • RGB Lighting: While currently limited in customization, the RGB LEDs offer aesthetic versatility to match any setup.
  • +
+

Concluding Thoughts

+

The Glove80 keyboard represents a significant leap forward in ergonomic design, marrying aesthetics with unmatched comfort and functionality. Its thoughtful features—from the infinitely adjustable tenting to the innovative keycap design—set a new standard for what ergonomic keyboards can be. While there's room for improvement in switch selection and RGB customization, these are minor quibbles in an otherwise outstanding product. For those in search of ergonomic excellence without compromising on style or performance, the Glove80 is an investment worth making, promising a typing experience that's not just comfortable but truly enjoyable.

+]]>
+ https://glenneth.org/content/posts/2024-04-08-glove80-review.html + https://glenneth.org/content/posts/2024-04-08-glove80-review.html + Invalid Date + "Glenn Thompson" + ["personal", "tech", "keyboards", "glove80"] +
+ + + Beyond Theory: Building Practical Tools with Guile Scheme + Introduction + Beyond Theory: Building Practical Tools with Guile Scheme +

Introduction

+

A few months ago, I shared my journey into learning Scheme through building stash, a symlink manager. Since then, I've discovered that the gap between learning Scheme and applying it to real-world problems is where the most valuable lessons emerge. This post explores what I've learned about building practical tools with Guile Scheme, sharing both successes and challenges along the way.

+

The Power of Modular Design

+

One of the most important lessons I learned was the value of modular design. Breaking down a program into focused, single-responsibility modules not only makes the code more maintainable but also helps in reasoning about the program's behavior. Here's how I structured stash:

+
(use-modules (ice-9 getopt-long)
+             (stash help)         ;; Help module
+             (stash colors)       ;; ANSI colors
+             (stash log)          ;; Logging module
+             (stash paths)        ;; Path handling module
+             (stash conflict)     ;; Conflict resolution module
+             (stash file-ops))    ;; File and symlink operations module
+
+

Each module has a specific responsibility:

+
    +
  • colors.scm: Handles ANSI color formatting for terminal output
  • +
  • conflict.scm: Manages conflict resolution when files already exist
  • +
  • file-ops.scm: Handles file system operations
  • +
  • help.scm: Provides usage information
  • +
  • log.scm: Manages logging operations
  • +
  • paths.scm: Handles path manipulation and normalization
  • +
+

Robust Path Handling

+

One of the first challenges in building a file management tool is handling paths correctly. Here's how I approached it:

+
(define (expand-home path)
+  "Expand ~ to the user's home directory."
+  (if (string-prefix? "~" path)
+      (string-append (getenv "HOME") (substring path 1))
+      path))
+
+(define (concat-path base path)
+  "Concatenate two paths, ensuring there are no double slashes."
+  (if (string-suffix? "/" base)
+      (string-append (string-drop-right base 1) "/" path)
+      (string-append base "/" path)))
+
+(define (ensure-config-path target-dir)
+  "Ensure that the target directory has .config appended, avoiding double slashes."
+  (let ((target-dir (expand-home target-dir)))
+    (if (string-suffix? "/" target-dir)
+        (set! target-dir (string-drop-right target-dir 1)))
+    (if (not (string-suffix? "/.config" target-dir))
+        (string-append target-dir "/.config")
+        target-dir)))
+
+

This approach ensures that:

+
    +
  • Home directory references (~) are properly expanded
  • +
  • Path concatenation doesn't create double slashes
  • +
  • Configuration paths are consistently structured
  • +
+

Interactive Conflict Resolution

+

Real-world tools often need to handle conflicts. I implemented an interactive conflict resolution system:

+
(define (prompt-user-for-action)
+  "Prompt the user to decide how to handle a conflict: overwrite (o), skip (s), or cancel (c)."
+  (display (color-message 
+    "A conflict was detected. Choose action - Overwrite (o), Skip (s), or Cancel (c): " 
+    yellow-text))
+  (let ((response (read-line)))
+    (cond
+      ((string-ci=? response "o") 'overwrite)
+      ((string-ci=? response "s") 'skip)
+      ((string-ci=? response "c") 'cancel)
+      (else
+       (display "Invalid input. Please try again.\n")
+       (prompt-user-for-action)))))
+
+

This provides a user-friendly interface for resolving conflicts while maintaining data safety.

+

Logging for Debugging and Auditing

+

Proper logging is crucial for debugging and auditing. I implemented a simple but effective logging system:

+
(define (current-timestamp)
+  "Return the current date and time as a formatted string."
+  (let* ((time (current-time))
+         (seconds (time-second time)))
+    (strftime "%Y-%m-%d-%H-%M-%S" (localtime seconds))))
+
+(define (log-action message)
+  "Log an action with a timestamp to the stash.log file."
+  (let ((log-port (open-file "stash.log" "a")))
+    (display (color-message 
+      (string-append "[" (current-timestamp) "] " message) 
+      green-text) log-port)
+    (newline log-port)
+    (close-port log-port)))
+
+

This logging system:

+
    +
  • Timestamps each action
  • +
  • Uses color coding for better readability
  • +
  • Maintains a persistent log file
  • +
  • Properly handles file operations
  • +
+

File Operations with Safety

+

When dealing with file system operations, safety is paramount. Here's how I handle moving directories:

+
(define (move-source-to-target source-dir target-dir)
+  "Move the entire source directory to the target directory, ensuring .config in the target path."
+  (let* ((target-dir (ensure-config-path target-dir))
+         (source-dir (expand-home source-dir))
+         (source-name (basename source-dir))
+         (target-source-dir (concat-path target-dir source-name)))
+    (if (not (file-exists? target-dir))
+        (mkdir target-dir #o755))
+    (if (file-exists? target-source-dir)
+        (handle-conflict target-source-dir source-dir delete-directory log-action)
+        (begin
+          (rename-file source-dir target-source-dir)
+          (display (format #f "Moved ~a to ~a\n" source-dir target-source-dir))
+          (log-action (format #f "Moved ~a to ~a" source-dir target-source-dir))))
+    target-source-dir))
+
+

This implementation:

+
    +
  • Ensures paths are properly formatted
  • +
  • Creates necessary directories
  • +
  • Handles conflicts gracefully
  • +
  • Logs all operations
  • +
  • Returns the new path for further operations
  • +
+

Lessons Learned

+

What Worked Well

+
    +
  1. Modular Design: Breaking the code into focused modules made it easier to maintain and test
  2. +
  3. Functional Approach: Using pure functions where possible made the code more predictable
  4. +
  5. Interactive Interface: Providing clear user prompts and colored output improved usability
  6. +
  7. Robust Logging: Detailed logging helped with debugging and understanding program flow
  8. +
+

Challenges Faced

+
    +
  1. Path Handling: Dealing with different path formats and edge cases required careful attention
  2. +
  3. Error States: Managing various error conditions while keeping the code clean
  4. +
  5. User Interface: Balancing between automation and user control
  6. +
  7. Documentation: Writing clear documentation that helps users understand the tool
  8. +
+

Moving Forward

+

Building stash has taught me that while functional programming principles are valuable, pragmatism is equally important. The key is finding the right balance between elegant functional code and practical solutions.

+

Resources

+
    +
  1. Guile Manual
  2. +
  3. My Previous Scheme Journey Post
  4. +
  5. System Crafters Community
  6. +
  7. Stash on Codeberg
  8. +
+

The code examples in this post are from my actual implementation of stash. Feel free to explore, use, and improve upon them!

+]]>
+ https://glenneth.org/content/posts/2024-12-03-practical-scheme.html + https://glenneth.org/content/posts/2024-12-03-practical-scheme.html + Tue, 03 Dec 2024 07:00:00 GMT + Glenn Thompson + tech, guile, scheme, development, functional-programming +
+ + + A Journey into Scheme + The course took me through the basics of Scheme, from simple expressions to more complex concepts like functions, recursion, and working with files. This structured learning environment gave me the confidence to start building stash. + My Journey into Scheme: Building a Simple Symlink Manager with Guile Scheme +

Introduction

+

I've spent my career as an electrical engineer, not a software developer. However, my recent journey in to GNU/Liniux required a tool for managing symlinks, and that's how I began learning Scheme—specifically Guile Scheme. I'm writing this post to share how I built stash, a utility that mimics GNU Stow's functionality, and how my learning journey was shaped by David Wilson's "Hands-On Guile Scheme for Beginners" course from System Crafters, more about this below.

+

How I Started with Scheme

+

My programming background was VERY limited, I produce documents in (La)Tex but I decided to take the plunge into learning Scheme, thanks to a course led by David Wilson from System Crafters. The course, "Hands-On Guile Scheme for Beginners", was incredibly helpful in making Scheme accessible even for someone like me, without a traditional programming background. I know (La)Tex isn't a programming language, it's typesetting. But how hard can it be? Right?

+

The course took me through the basics of Scheme, from simple expressions to more complex concepts like functions, recursion, and working with files. This structured learning environment gave me the confidence to start building stash.

+

The course was "instructor-led" with live meet-up sessions weekly. David has since made this course on-demand, and will be, if not already, available at the above link. Highly recommended if you are interested in taking your first steps with scheme.

+

Why Build Stash?

+

After completing David Wilson's course, I wanted to put my newly found Guile Scheme skills into practice with a real project. It wasn't enough just to understand the language conceptually—I needed to build something tangible that solved a problem I encountered regularly in my workflow. Writing stash gave me that opportunity. It allowed me to apply what I'd learned while also deepening my understanding of file manipulation, command-line tools, and conflict resolution—all within the Guile Scheme environment.

+

After migrating to GNU/Linux and speaking with other System Crafters Community members, I found I needed a way to manage symbolic links and organize directories. Existing tools like GNU Stow helped, but I wanted to learn how such tools are built. I decided to write my own version using Guile Scheme to enhance my understanding of the language and to have more control over the functionality.

+

The goal of stash is simple: allow users to move directories and create symlinks with conflict resolution, offering options to overwrite, back up, skip, or cancel the operation.

+

Breaking Down Stash

+

The core of stash revolves around:

+
    +
  1. Moving Directories: Using Scheme's file manipulation functions, I learned how to move directories and files around.
  2. +
  3. Creating Symlinks: I implemented functions to create symlinks to the moved directories, ensuring that the original structure remains accessible.
  4. +
  5. Conflict Resolution: One of the key features I wanted was handling conflicts when a file or symlink already exists at the target location. This required prompting the user for input and responding accordingly (backup, overwrite, skip, or cancel).
  6. +
+

Here's an excerpt of the core functionality that handles moving a source directory and creating a symlink:

+
;;; Helper function to move source to target
+(define (move-source-to-target source-dir target-dir)
+  "Move the entire source directory to the target directory."
+  (let* ((source-dir (expand-home source-dir))
+         (target-dir (expand-home target-dir))
+         (source-name (basename source-dir))
+         (target-source-dir (string-append target-dir "/" source-name)))
+    (if (file-exists? target-source-dir)
+        ;; Conflict handling here...
+        ...)
+    (rename-file source-dir target-source-dir)
+    (display (format #f "Moved ~a to ~a\n" source-dir target-source-dir))))
+
+

What I Learned

+

This project taught me a lot about not just Scheme, but programming in general:

+
    +
  • File and Directory Manipulation: Scheme's file handling functions were different from what I had experienced before, but they allowed for powerful manipulation of file systems.
  • +
  • Command-Line Utilities: Scheme isn't just a language for academic exercises; you can write real, useful command-line tools with it.
  • +
  • Problem Solving: From parsing command-line arguments to resolving conflicts with existing files, every part of the program required careful thought and consideration of edge cases.
  • +
+

Guile Scheme Support Resources

+
    +
  1. Guile Scheme Documentation
    The official documentation for Guile Scheme, which includes tutorials, references, and the Guile Manual.

    +
  2. +
  3. Guile Reference Manual
    A comprehensive manual covering core language concepts, libraries, and functions available in Guile Scheme.

    +
  4. +
  5. Scheme Wiki
    A community-maintained wiki that covers various Scheme dialects, including Guile Scheme, with tutorials, guides, and general information on Scheme programming.

    +
  6. +
  7. Guile at Schemers.org
    A site dedicated to Scheme with resources, libraries, tools, and documentation for Scheme and its implementations, including Guile.

    +
  8. +
  9. System Crafters
    Led by David Wilson, System Crafters provides tutorials and blog posts on Guile Scheme and other GNU tools.

    +
  10. +
  11. Guile Users Mailing List
    Join the Guile mailing list to ask questions and engage with the Guile Scheme community.

    +
  12. +
  13. Guile Cookbook
    An unofficial GitHub repository with practical code snippets and tips for Guile Scheme, covering various common use cases and tasks.

    +
  14. +
  15. #guile and #scheme on Libera Chat IRC
    A helpful IRC channel where you can connect with other Guile users for real-time support and advice.

    +
  16. +
  17. #systemcrafters on Libera Chat IRC
    A SUPER helpful IRC channel not only for guile and scheme, there are a huge variety of different people here. Tell them glenneth sent you.

    +
  18. +
+

Next Steps

+

I am still refining stash, especially around its conflict resolution system and the way it handles symbolic links. But it's in a usable state, and I'm excited to continue iterating on it. You can check out the code on Codeberg.

+

If you're curious about Scheme and how it can be used practically, I highly recommend checking out David Wilson's course. It's been instrumental in helping me grasp the concepts I needed to build this tool. Here's the link, again :) "Hands-On Guile Scheme for Beginners"

+]]>
+ https://glenneth.org/content/posts/2024-09-24-scheme-journey.html + https://glenneth.org/content/posts/2024-09-24-scheme-journey.html + Tue, 24 Sep 2024 06:30:00 GMT + Glenn Thompson + personal, tech, guile, scheme, gnu, development +
+ + + A Journey Through GNU Guix: From Installation to Returning to Arch Linux + As a long-time user of Arch Linux, I decided to explore the world of GNU Guix to see if it could better suit my needs, especially with my growing interest in functional package management. The journey was insightful, filled with learning experiences, but ultimately led me back to the reliable shores of Arch. Here's a detailed account of my venture into GNU Guix, adding non-GNU channels, dealing with Nvidia drivers, running SwayWM, and the eventual retreat to Arch. + A Journey Through GNU Guix: From Installation to Returning to Arch Linux +

As a long-time user of Arch Linux, I decided to explore the world of GNU Guix to see if it could better suit my needs, especially with my growing interest in functional package management. The journey was insightful, filled with learning experiences, but ultimately led me back to the reliable shores of Arch. Here's a detailed account of my venture into GNU Guix, adding non-GNU channels, dealing with Nvidia drivers, running SwayWM, and the eventual retreat to Arch.

+

Installation of GNU Guix

+

The installation process of GNU Guix was straightforward, thanks to the well-documented guide provided on their official website. Here's a quick rundown of the steps I followed:

+
    +
  1. Downloading the Installation Image: I started by downloading the latest ISO image from the GNU Guix website.
  2. +
  3. Creating a Bootable USB: Using dd, I created a bootable USB stick to install GNU Guix on my system.
  4. +
  5. Booting into the Installer: Booting from the USB was smooth, and I was greeted with the GNU Guix installer. The installer's simplicity reminded me of early days with Arch, where a minimalistic approach is preferred.
  6. +
  7. Partitioning and Setting Up File Systems: I partitioned my drive using fdisk and set up my file systems. I opted for ext4 for simplicity.
  8. +
  9. Configuring the System: Following the partition setup, I proceeded to configure my system by selecting the required packages and services. I decided to go with the Sway window manager as it's my preferred choice on Arch.
  10. +
+

System Configuration

+

During the installation process a window appears informing you that the config.scm file is located at /etc/config.scm. The first time I installed gnu guix on my work laptop I missed this message (pilot error) and I had to ask in the System Crafters IRC channel at irc.libera.chat, #systemcrafters. Come and join. It's a great place to be and the community there are an absolute treasure. Use your favourite IRC client or join through the webchat here. We would be glad to see you. Tell them glenneth sent you :).

+

My point is, I missed some vital information, so to the guix manual online it was. This can be found here. This link will take you to the dev version of the manual. Something else they don't tell you. This version has a little more detail than the standard manual, and I believe details extra features and may even be a little more up to date.

+

Adding Non-GNU Channels

+

One of the standout features of GNU Guix is the ability to add non-GNU channels to access a wider array of software packages. Here's how I did it:

+
    +
  1. Editing Channels: I edited the ~/.config/guix/channels.scm file to include non-GNU channels.
    (cons* (channel
    +        (name 'non-gnu)
    +        (url "https://example.com/non-gnu-channel.git"))
    +       %default-channels)
    +
    +
  2. +
  3. Updating Channels: Running guix pull updated my system to include packages from the non-GNU channel.
  4. +
+

Installing Nvidia Drivers

+

Being a gamer and someone who requires GPU acceleration for certain tasks, Nvidia drivers were a must. Here's the process I followed:

+
    +
  1. Adding Nvidia Channel: Added a channel that includes Nvidia drivers.
  2. +
  3. Installing Drivers: Installed the drivers using guix package -i nvidia-driver.
  4. +
  5. Configuring the System: I had to manually configure Xorg to use the Nvidia drivers, which involved editing the Xorg configuration files.
  6. +
+

Creating My Home Environment

+

To personalize my setup further, I used guix home import to create my own home environment and add packages. This allowed me to have a consistent environment across different machines. I also edited the config.scm file to include the latest Linux kernels and Nvidia drivers.

+

Additionally, I used the syncthing home-service-type in my home-configuration.scm file to install and configure Syncthing. This setup ensured my files were always in sync across devices, which is crucial for my workflow.

+

GNOME

+

All was good and I had a solid desktop environment running, even though it was gnome desktop. I had never used gnome, and I am more at home with a keyboard driven workflow. I had come from hyprland on Arch and wanted to get back to that workflow. The option I was presented with, in order to continue using wayland, pipewire etc. was SwayWM.

+

Sway

+

Installing SwayWM and it's dependencies and nice to haves was relatively straightforward. add the required packages, sway, swaybg, swayidle, swaylock, to my home-configuration.scm gile and run guix home reconfigure easy! The packages were installed and we were good to go.

+

The first issue I encountered was that sway does not run with the proprietary nvidia drivers, this was on the work laptop. I could get it to run but only after adding the --unsupported-gpu flag to exec sway. Lo and behold, we had a default sway window manager running.

+

Challenges with SwayWM and SMB Shares

+

With the system set up, I ran into a major roadblock: accessing SMB shares in a file manager while running SwayWM.

+
    +
  1. Thunar and GNOME Files: Neither Thunar nor the GNOME Files application could access SMB shares. This was crucial for my workflow as I frequently access network shares.
  2. +
  3. Troubleshooting: I tried various solutions, including installing additional packages and tweaking configurations, but nothing seemed to work.
  4. +
  5. Community Support: I reached out to the GNU Guix community for help. While they were supportive, the solutions provided didn't resolve my issues.
  6. +
+

To ensure that the problem was not hardware-related, I went out and purchased a Lenovo ThinkPad E16 Gen 1. I upgraded the RAM to 48GB and installed a Lenovo 2TB SSD to make it my personal laptop. However, even on this new setup, I faced the same issues accessing SMB shares and some networking services just wouldn't work.

+

I tried deleting the gdm login manager in my system configuration file, but after rebooting it was still showing the gnome login window. This was after reading somewhere online that sway was not on friendly terms with the gdm login manager.

+

Returning to Arch Linux

+

After several days of troubleshooting and not being able to access my SMB shares reliably, I made the difficult decision to revert to Arch Linux. The steps were:

+
    +
  1. Reinstalling Arch: I reinstalled Arch Linux using my tried-and-tested setup process.
  2. +
  3. Configuring SwayWM: Set up SwayWM and ensured all my applications were running smoothly.
  4. +
  5. Accessing SMB Shares: Accessing SMB shares was seamless, just as it was before my experiment with GNU Guix.
  6. +
+

Conclusion

+

I am still running GNU guix on the work laptop, I had to cave on my personal laptop and revert to Arch. My journey with GNU Guix was both enlightening and challenging. While I appreciate the functional package management and the philosophy behind GNU Guix, certain practical issues, like accessing SMB shares, were deal-breakers for my workflow. Arch Linux continues to be my go-to distribution, providing the flexibility and reliability I need for my daily tasks. So, at the moment I am using my personal laptop for work and still trying to figure out the issues I am having on my work laptop. But, to be honest, I prefer working on the thinkpad over working on the MSI laptop that work handed out :).

+

If you're an enthusiast looking to explore new package management paradigms, I highly recommend giving GNU Guix a try. Just be prepared for a few hiccups along the way, and always have a backup plan!

+
+

Feel free to share your thoughts and experiences with GNU Guix or any other distributions you've tried. Let's keep the conversation going!

+

Shameless plug

+

Go here to find all the ways you can engage with the SystemCrafters community. It's a great place to hang out and discuss all thing craftery. You will also notice the Craftering ring that I am a part of. Click the links and see blogs by some of the community members. Always interesting to read what other Crafters are up to.

+

Thanks for taking the time to read my blog post. It is greatly appreciated, and I hope you come back.

+

Happy Hacking!!

+]]>
+ https://glenneth.org/content/posts/2024-07-26-gnu-guix-journey.html + https://glenneth.org/content/posts/2024-07-26-gnu-guix-journey.html + Fri, 26 Jul 2024 07:30:00 GMT + Glenn Thompson + personal, tech, gnu, guix, swaywm, nvidia +
+ + + Transitioning from Hugo to Haunt: Embracing Scheme and GNU Guix + Hello there! I'm Glenn Thompson, and today, I want to share a significant part of my recent journey into the world of Scheme, GNU Guix, and static site generation. + Transitioning from Hugo to Haunt: Embracing Scheme and GNU Guix +

Hello there! I'm Glenn Thompson, and today, I want to share a significant part of my recent journey into the world of Scheme, GNU Guix, and static site generation.

+

Discovering Scheme with System Crafters

+

My journey began with a desire to dive deeper into programming languages and their ecosystems. I am a member of the System Crafters Community, and its founder, David Wilson, announced a short four week course as an introduction to Guile Scheme. The course, Hands-On Guile Scheme for Beginners, provided me with a robust introduction to Guile Scheme, a language that emphasizes simplicity and elegance. David's clear explanations and practical examples made learning Scheme both engaging and approachable.

+

The Move to GNU Guix

+

Inspired by the principles of Scheme, I decided to take a leap further into the open-source world by transitioning from Arch Linux to GNU Guix. The Guix community, particularly the folks in the #systemcrafters channel on irc.libera.chat, were incredibly supportive and instrumental in helping me navigate this new environment. Their guidance made the switch smooth and rewarding, reinforcing the power and flexibility of GNU Guix as a functional package manager and operating system. More about that experience in another post.

+

There are too many individuals to name here that have helped with the installation and configuration on Gnu guix to mention here. You all have been an incredible help for which I am extremely grateful. Thank you all , for enduring my ignorance, and for your patience and your help.

+

From Hugo to Haunt

+

As I settled into Guix, I faced a challenge: Hugo, the static site generator I previously used, was not available as a Guix package. This led me to explore alternatives and eventually discover Haunt, a Scheme-based static site generator that aligns perfectly with my newfound appreciation for Scheme and Guix.

+

Overcoming Challenges with Haunt

+

Transitioning to Haunt wasn't without its challenges. There are no readily available templating systems available for haunt like there are for hugo, but there are plenty of examples here. One of my own primary difficulties was creating a custom template that matched my site's aesthetic requirements and functionality needs. Initially, I struggled with configuring the theme layout and ensuring the CSS was applied correctly. Another hurdle was generating the correct URLs for posts and ensuring that summaries appeared as intended on the front page.

+

Thankfully, the Haunt manual proved to be an invaluable resource throughout this process. The comprehensive documentation provided clear guidance on using various modules, functions, and procedures. By carefully studying the examples and explanations, I was able to overcome the obstacles and achieve the desired results for my site. The manual's detailed descriptions of Haunt's inner workings were particularly helpful in understanding how to leverage the flexibility of Scheme to customize my blog.

+

Crafting My Own Template

+

Moving from Hugo to Haunt required me to create my own template and customize my site's appearance. This was an exciting opportunity to apply the skills I had learned from David's course and experiment with Scheme in a practical context.

+

Creating the Template

+

Haunt's flexibility allowed me to define my own theme layout and structure. Here's a snippet of my haunt.scm file, where I defined the theme layout and added custom footer content:

+
(use-modules (haunt asset)
+             (haunt builder blog)
+             (haunt builder atom)
+             (haunt builder assets)
+             (haunt reader commonmark)
+             (haunt site)
+             (haunt post)
+             (sxml simple)    ; For HTML generation
+             (srfi srfi-1)
+             (srfi srfi-19))  ; For date and time procedures
+
+;; Load custom templates
+(load "templates/post.scm")
+
+(define (format-date date)
+  (date->string date "~Y-~m-~d"))
+
+;; Define a function to generate the URL for a post
+(define (post-url post)
+  (string-append "/" (post-slug post) ".html"))
+
+;; Define a function to extract a summary from the post content
+(define (post-summary post)
+  (let ((content (post-sxml post)))
+    (if (null? content)
+        ""
+        (let ((first-paragraph (car content)))
+          (if (string? first-paragraph)
+              (substring first-paragraph 0 (min 200 (string-length first-paragraph)))
+              (sxml->string first-paragraph))))))
+
+;; Define the theme layout
+(define (theme-layout site title content)
+  (let ((current-year (number->string (date-year (current-date)))))
+    `(html
+      (head
+       (meta (@ (charset "utf-8")))
+       (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0, shrink-to-fit=no")))
+       (link (@ (rel "stylesheet") (href "/assets/palenight.css")))
+       (style
+        " .craftering {
+            margin: auto;
+            width: 50%;
+            text-align: center;
+        }
+        .webring-text {
+            text-align: center;
+            margin-bottom: 20px;
+            color: white;
+        }
+        .craftering a {
+            color: #dddddd;
+        }
+        .webring-text a {
+            color: #dddddd;
+        }")
+       (title ,title))
+      (body
+       (header (h1 ,(site-title site)))
+       (main ,content)
+       (footer (@ (class "bg-black bottom-0 w-100 pa3") (role "contentinfo"))
+               (div (@ (class "flex justify-between"))
+                    (div (@ (class "webring-text"))
+                         (p "I am part of the " (a (@ (href "https://systemcrafters.net") (target "_blank")) "System Crafters") " webring:"))
+                    (div (@ (class "craftering"))
+                         (a (@ (href "https://craftering.systemcrafters.net/@glenneth/previous")) "←")
+                         (a (@ (href "https://craftering.systemcrafters.net/")) "craftering")
+                         (a (@ (href "https://craftering.systemcrafters.net/@glenneth/next")) "→"))))))))
+
+;; Define the custom theme with a consistent layout for index
+(define my-theme
+  (theme #:name "My Custom Theme"
+         #:layout theme-layout
+         #:post-template post-template
+         #:collection-template
+         (lambda (site title posts prefix)
+           `(div (@ (class "content"))
+              (h2 ,title)
+              (ul
+                ,@(map (lambda (post)
+                         `(li
+                            (article
+                              (header
+                               (h3 (a (@ (href ,(post-url post))) ,(post-title post))))
+                              (p ,(format-date (post-date post)))
+                              (p ,(post-summary post))
+                              (p (a (@ (href ,(post-url post))) "Read more...")))))
+                       posts))))))
+
+;; Site configuration
+(site #:title "Just Another Personal Blog"
+      #:domain "glenneth.srht.site"
+      #:default-metadata
+      '((author . "Glenn Thompson")
+        (email  . "glenn@kirstol.org"))
+      #:readers (list commonmark-reader)
+      #:builders (list
+                  (blog #:theme my-theme)
+                  (atom-feed)
+                  (atom-feeds-by-tag)
+                  (static-directory "images")
+                  (static-directory "assets")))
+
+

Customizing the CSS

+

To give my site a personalized touch, I crafted a CSS stylesheet that matched my aesthetic preferences. Here’s an excerpt from my palenight.css file:

+
body {
+  display: flex;
+  justify-content: center;
+  padding: 10px;
+}
+
+.content, header, footer, main {
+  max-width: 90%;
+  padding: 0 5%;
+}
+
+header {
+  text-align: center;
+  margin-bottom: 20px;
+}
+
+footer {
+  text-align: center;
+  margin-top: 20px;
+}
+
+ul {
+  list-style-type: none;
+  padding: 0;
+}
+
+li {
+  margin-bottom: 20px;
+}
+
+a {
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+body {
+  background-color: #292d3e;
+  color: #d0d0d0;
+}
+
+a {
+  color: #82aaff;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: #c792ea;
+}
+
+.content {
+  background-color: #1e1e2e;
+  padding: 20px;
+  border-radius: 5px;
+}
+
+article {
+  background-color: #282a36;
+  padding: 15px;
+  border-radius: 8px;
+  margin-bottom: 20px;
+}
+
+article header {
+  margin-bottom: 10px;
+}
+
+.date {
+  color: #6272a4;
+  font-size: 0.9em;
+}
+
+/* Additional styles for the craftering */
+.craftering {
+  margin: auto;
+  width: 50%;
+  text-align: center;
+}
+
+.webring-text {
+  text-align: center;
+  margin-bottom: 20px;
+  color: white;
+}
+
+.craftering a {
+  color: #dddddd;
+}
+
+.webring-text a {
+  color: #dddddd;
+}
+
+/* Additions for mobile device readability */
+
+meta {
+  name: viewport;
+  content: width=device-width, initial-scale=1, shrink-to-fit=no;
+}
+
+@media screen and (max-width: 767px) {
+  /* Customize styles for smaller screens */
+  .logo {
+    max-width: 200px;
+  }
+
+}
+
+

I use the doom-palenight theme in Emacs, my preferred text editor, and I wanted my site to match that aesthetic.

+

Publishing with Haunt and Hut

+

In addition to using Haunt, I adopted hut, a set of command-line tools for interacting with SourceHut, to publish my blog. This streamlined my workflow, making it easier to manage and deploy my site directly from my local environment.

+

Conclusion

+

Transitioning from Hugo to Haunt, learning Scheme, and embracing GNU Guix has been an enriching experience. It's not just about using new tools; it's about joining a community that values simplicity, transparency, and collaboration. If you're curious about Scheme or GNU Guix, I highly recommend checking out David Wilson's course on System Crafters and joining the discussions on IRC.

+

I am not a developer of any kind, and learning Scheme has opened my eyes as to how I can craft an environment that I want to work in, and not endure a working environment that the computer is forcing upon me.

+

Thank you for reading, and stay tuned for more updates on my journey!

+]]>
+ https://glenneth.org/content/posts/2024-05-15-hugo-to-haunt.html + https://glenneth.org/content/posts/2024-05-15-hugo-to-haunt.html + Wed, 15 May 2024 07:30:00 GMT + Glenn Thompson + personal, tech, keyboards, glove80 +
+ + + A Rollercoaster Week: From Amman to Newcastle, and back again + The Journey Begins + Two weeks ago was a whirlwind of events, taking me from the conforting embrace of Amman, Jordan to the vibrant streets of Newcastle, England. It was a journey filled with highs and lows, professional achievements, and personal challenges.

+

The Journey Begins

+

It all started on a Monday morning in Amman as I embarked on a journey to attend a Quality Control (QC) conference in Newcastle. The anticipation of presenting my work at an international forum filled me with excitement and nerves. The conference was scheduled for just one day, but the impact it had on me would last much longer.

+

A Successful Presentation

+

Tuesday arrived, and with it came the day of the conference. Armed with a PowerPoint presentation comprising over 130 slides, I delved into four hours of intense presenting. Despite the pressure, the conference was a resounding success. My project received positive feedback, and I felt a sense of accomplishment as I shared my work with colleagues from around the world.

+

The Toll of Travel

+

However, as I returned to Amman on Wednesday, I couldn't shake off a sense of exhaustion. Little did I know that the toll of travel would soon manifest itself in a most unexpected manner.

+

Thursday morning greeted me with heavy flu-like symptoms. It hit me like a ton of bricks. The combination of jet lag, long hours of presenting, and exposure to new environments had taken its toll on my immune system. I was bedridden, grappling with a chesty cough that seemed relentless.

+

The Show Must Go On

+

Despite my illness, there was no time for rest. The following week demanded my presence at a site meeting where I was tasked with condensing my extensive slide deck into a concise presentation of just 12 slides. The challenge was daunting, but I tackled it with determination.

+

Reflecting on the Journey

+

As I look back on the rollercoaster week that was, I'm struck by the juxtaposition of success and struggle. From the heights of presenting at an international conference to the lows of battling illness, it was a journey that tested my resilience and resolve.

+

But through it all, one thing remains clear: adversity only serves to make us stronger. Each obstacle we overcome, whether professional or personal, contributes to our growth and development.

+

So here's to the rollercoaster weeks, the ones filled with ups and downs, twists and turns. For it is in those moments of challenge that we discover the true extent of our capabilities.

+

As I upload this blog post using Hugo, I do so with a renewed sense of gratitude for the journey and all it has taught me. Here's to embracing the ride, wherever it may take us.

+]]>
+ https://glenneth.org/content/posts/2024-05-01-amman-newcastle-journey.html + https://glenneth.org/content/posts/2024-05-01-amman-newcastle-journey.html + Wed, 01 May 2024 14:40:58 GMT + Glenn Thompson + work, travel +
+
+
\ No newline at end of file diff --git a/feed.xml b/feed.xml new file mode 100644 index 0000000..6422d44 --- /dev/null +++ b/feed.xml @@ -0,0 +1,622 @@ + + + + Glenn Thompson's Blog + Personal blog about programming, technology, and other interests + https://glenneth.org + + en-us + Fri, 06 Dec 2024 03:38:32 GMT + + + Aesthetic Meets Ergonomics: My Deep Dive into the Glove80 Keyboard + As my career trajectory veered from being an integral member of an electrical engineering team to assuming the role of Deputy Project Manager, the nature of my daily activities underwent a significant transformation. The hands-on tasks of yesteryears were gradually replaced by a deluge of documentations—writing, reviewing, and endless typing. This shift brought with it an unwelcome companion: discomfort in my hands and wrists, a stark reminder of the ergonomic pitfalls of conventional keyboards. It was in this context that my quest for a more ergonomic typing solution began, leading me towards the world of ALICE layout keyboards, with the [Q10 Pro by Keychron](https://www.keychron.com/products/keychron-q10-pro-alice-layout-qmk-via-wireless-custom-mechanical-keyboard) being my initial foray into this new realm. + In the quest for the ultimate ergonomic keyboard, aesthetics often take a backseat to functionality. Yet, when I first laid eyes on the Glove80, I was struck by its elegant design—a refreshing departure from the utilitarian look typical of many ergonomic keyboards. Unlike the retro vibes of the Kinesis Advantage or the DIY aesthetics of most Dactyls, the Glove80 boasts a modern, sleek appearance that complements the contemporary design language of Apple, Google, and LG devices. With its clean lines and visually appealing legends, the Glove80 not only promises ergonomic comfort but does so with style, standing out amidst a sea of competitors. +

As my career trajectory veered from being an integral member of an electrical engineering team to assuming the role of Deputy Project Manager, the nature of my daily activities underwent a significant transformation. The hands-on tasks of yesteryears were gradually replaced by a deluge of documentations—writing, reviewing, and endless typing. This shift brought with it an unwelcome companion: discomfort in my hands and wrists, a stark reminder of the ergonomic pitfalls of conventional keyboards. It was in this context that my quest for a more ergonomic typing solution began, leading me towards the world of ALICE layout keyboards, with the Q10 Pro by Keychron being my initial foray into this new realm.

+

However, the relief was partial, and the shadow of wrist strain persisted, urging me to delve deeper into the ergonomic keyboard universe. My search for a truly ergonomic solution brought me to the doorstep of the Glove80 by MoErgo. Boasting a unique split design, concave key wells, and a commitment to ergonomics that seemed almost tailor-made for my situation, the Glove80 held the promise of being the oasis I was desperately seeking in the desert of my wrist discomfort.

+

This journey from an ALICE layout keyboard user to a Glove80 enthusiast was not just about finding a better typing tool; it was about embracing a healthier typing posture and redefining my interaction with computers. After a month of integrating the Glove80 into my workflow, I'm ready to share my insights and experiences. This review will explore the initial adaptation period, the impact on my wrist health, and whether the Glove80 lives up to its promise as an ergonomic game-changer.

+

First Impressions: Feel and Experience

+

Upon beginning my typing journey with the Glove80, two aspects immediately stood out. The unique choc spacing, combined with finger-specific curves for each key column, facilitated effortless access to the bottom and number rows, as well as several function keys—without the need to move my hands. This ease of reach extended to the thumb keys, thoughtfully laid out in an arc to match the natural movement of my thumbs. Additionally, the keyboard's low profile on the desk encouraged a neutral wrist position, enhancing comfort during long typing sessions. These features converged to create a typing experience that was not just comfortable but intuitively aligned with natural hand movements.

+

The Details That Matter

+
Ergonomics at Its Core
+

The hallmark of the Glove80 is its ergonomics, designed to seamlessly integrate with the user's hand movements. After fine-tuning the tenting and tilting angles—made possible by the adjustable feet on each half of the keyboard—my hands naturally fell into the optimal typing position. The thoughtfully designed key layout meant that reaching for higher rows required merely straightening or curling my fingers, aided by the keyboard's choc spacing. Each column's unique height and curve catered to the different lengths of my fingers, further minimizing strain.

+
Key Innovations
+

The Glove80 introduces keycaps with a novel MCC profile, featuring raised sides and a central cylindrical channel, made from a slick POM material. This design supports the natural sliding of fingers across keys, reducing the need to lift hands while typing. The keyboard's thumb clusters are another highlight, offering six easily accessible keys per hand. This ergonomic layout ensures that most keys are within reach without stretching, a testament to the keyboard's user-centric design.

+
Beyond Typing: Features and Flexibility
+
    +
  • Tenting and Adjustability: The Glove80's customizable tenting angles, enhanced by sturdy locking nuts, ensure a tailored typing experience that can be finely adjusted to individual preferences.
  • +
  • Comfortable Palm Rest: The integrated, detachable palm rest offers additional comfort, catering to different typing styles with ease.
  • +
  • Switch Selection: While the standard Kailh choc switches are adequate, enthusiasts might prefer customizing their keyboard with preferred switches for an optimized typing feel. I opted for the lighter Kailh Choc V1, Red Pro Linear 35gf switches.
  • +
  • Keycaps: The high-quality POM keycaps, combined with attractive and durable legends, enhance the keyboard's tactile and visual appeal.
  • +
  • Tech-Savvy Features: From its easy-to-use firmware updates via a web interface to seamless Bluetooth connectivity and impressive battery life, the Glove80 is designed for a modern, wireless world.
  • +
  • RGB Lighting: While currently limited in customization, the RGB LEDs offer aesthetic versatility to match any setup.
  • +
+

Concluding Thoughts

+

The Glove80 keyboard represents a significant leap forward in ergonomic design, marrying aesthetics with unmatched comfort and functionality. Its thoughtful features—from the infinitely adjustable tenting to the innovative keycap design—set a new standard for what ergonomic keyboards can be. While there's room for improvement in switch selection and RGB customization, these are minor quibbles in an otherwise outstanding product. For those in search of ergonomic excellence without compromising on style or performance, the Glove80 is an investment worth making, promising a typing experience that's not just comfortable but truly enjoyable.

+]]>
+ https://glenneth.org/content/posts/2024-04-08-glove80-review.html + https://glenneth.org/content/posts/2024-04-08-glove80-review.html + Invalid Date + "Glenn Thompson" + ["personal", "tech", "keyboards", "glove80"] +
+ + + Beyond Theory: Building Practical Tools with Guile Scheme + Introduction + Beyond Theory: Building Practical Tools with Guile Scheme +

Introduction

+

A few months ago, I shared my journey into learning Scheme through building stash, a symlink manager. Since then, I've discovered that the gap between learning Scheme and applying it to real-world problems is where the most valuable lessons emerge. This post explores what I've learned about building practical tools with Guile Scheme, sharing both successes and challenges along the way.

+

The Power of Modular Design

+

One of the most important lessons I learned was the value of modular design. Breaking down a program into focused, single-responsibility modules not only makes the code more maintainable but also helps in reasoning about the program's behavior. Here's how I structured stash:

+
(use-modules (ice-9 getopt-long)
+             (stash help)         ;; Help module
+             (stash colors)       ;; ANSI colors
+             (stash log)          ;; Logging module
+             (stash paths)        ;; Path handling module
+             (stash conflict)     ;; Conflict resolution module
+             (stash file-ops))    ;; File and symlink operations module
+
+

Each module has a specific responsibility:

+
    +
  • colors.scm: Handles ANSI color formatting for terminal output
  • +
  • conflict.scm: Manages conflict resolution when files already exist
  • +
  • file-ops.scm: Handles file system operations
  • +
  • help.scm: Provides usage information
  • +
  • log.scm: Manages logging operations
  • +
  • paths.scm: Handles path manipulation and normalization
  • +
+

Robust Path Handling

+

One of the first challenges in building a file management tool is handling paths correctly. Here's how I approached it:

+
(define (expand-home path)
+  "Expand ~ to the user's home directory."
+  (if (string-prefix? "~" path)
+      (string-append (getenv "HOME") (substring path 1))
+      path))
+
+(define (concat-path base path)
+  "Concatenate two paths, ensuring there are no double slashes."
+  (if (string-suffix? "/" base)
+      (string-append (string-drop-right base 1) "/" path)
+      (string-append base "/" path)))
+
+(define (ensure-config-path target-dir)
+  "Ensure that the target directory has .config appended, avoiding double slashes."
+  (let ((target-dir (expand-home target-dir)))
+    (if (string-suffix? "/" target-dir)
+        (set! target-dir (string-drop-right target-dir 1)))
+    (if (not (string-suffix? "/.config" target-dir))
+        (string-append target-dir "/.config")
+        target-dir)))
+
+

This approach ensures that:

+
    +
  • Home directory references (~) are properly expanded
  • +
  • Path concatenation doesn't create double slashes
  • +
  • Configuration paths are consistently structured
  • +
+

Interactive Conflict Resolution

+

Real-world tools often need to handle conflicts. I implemented an interactive conflict resolution system:

+
(define (prompt-user-for-action)
+  "Prompt the user to decide how to handle a conflict: overwrite (o), skip (s), or cancel (c)."
+  (display (color-message 
+    "A conflict was detected. Choose action - Overwrite (o), Skip (s), or Cancel (c): " 
+    yellow-text))
+  (let ((response (read-line)))
+    (cond
+      ((string-ci=? response "o") 'overwrite)
+      ((string-ci=? response "s") 'skip)
+      ((string-ci=? response "c") 'cancel)
+      (else
+       (display "Invalid input. Please try again.\n")
+       (prompt-user-for-action)))))
+
+

This provides a user-friendly interface for resolving conflicts while maintaining data safety.

+

Logging for Debugging and Auditing

+

Proper logging is crucial for debugging and auditing. I implemented a simple but effective logging system:

+
(define (current-timestamp)
+  "Return the current date and time as a formatted string."
+  (let* ((time (current-time))
+         (seconds (time-second time)))
+    (strftime "%Y-%m-%d-%H-%M-%S" (localtime seconds))))
+
+(define (log-action message)
+  "Log an action with a timestamp to the stash.log file."
+  (let ((log-port (open-file "stash.log" "a")))
+    (display (color-message 
+      (string-append "[" (current-timestamp) "] " message) 
+      green-text) log-port)
+    (newline log-port)
+    (close-port log-port)))
+
+

This logging system:

+
    +
  • Timestamps each action
  • +
  • Uses color coding for better readability
  • +
  • Maintains a persistent log file
  • +
  • Properly handles file operations
  • +
+

File Operations with Safety

+

When dealing with file system operations, safety is paramount. Here's how I handle moving directories:

+
(define (move-source-to-target source-dir target-dir)
+  "Move the entire source directory to the target directory, ensuring .config in the target path."
+  (let* ((target-dir (ensure-config-path target-dir))
+         (source-dir (expand-home source-dir))
+         (source-name (basename source-dir))
+         (target-source-dir (concat-path target-dir source-name)))
+    (if (not (file-exists? target-dir))
+        (mkdir target-dir #o755))
+    (if (file-exists? target-source-dir)
+        (handle-conflict target-source-dir source-dir delete-directory log-action)
+        (begin
+          (rename-file source-dir target-source-dir)
+          (display (format #f "Moved ~a to ~a\n" source-dir target-source-dir))
+          (log-action (format #f "Moved ~a to ~a" source-dir target-source-dir))))
+    target-source-dir))
+
+

This implementation:

+
    +
  • Ensures paths are properly formatted
  • +
  • Creates necessary directories
  • +
  • Handles conflicts gracefully
  • +
  • Logs all operations
  • +
  • Returns the new path for further operations
  • +
+

Lessons Learned

+

What Worked Well

+
    +
  1. Modular Design: Breaking the code into focused modules made it easier to maintain and test
  2. +
  3. Functional Approach: Using pure functions where possible made the code more predictable
  4. +
  5. Interactive Interface: Providing clear user prompts and colored output improved usability
  6. +
  7. Robust Logging: Detailed logging helped with debugging and understanding program flow
  8. +
+

Challenges Faced

+
    +
  1. Path Handling: Dealing with different path formats and edge cases required careful attention
  2. +
  3. Error States: Managing various error conditions while keeping the code clean
  4. +
  5. User Interface: Balancing between automation and user control
  6. +
  7. Documentation: Writing clear documentation that helps users understand the tool
  8. +
+

Moving Forward

+

Building stash has taught me that while functional programming principles are valuable, pragmatism is equally important. The key is finding the right balance between elegant functional code and practical solutions.

+

Resources

+
    +
  1. Guile Manual
  2. +
  3. My Previous Scheme Journey Post
  4. +
  5. System Crafters Community
  6. +
  7. Stash on Codeberg
  8. +
+

The code examples in this post are from my actual implementation of stash. Feel free to explore, use, and improve upon them!

+]]>
+ https://glenneth.org/content/posts/2024-12-03-practical-scheme.html + https://glenneth.org/content/posts/2024-12-03-practical-scheme.html + Tue, 03 Dec 2024 07:00:00 GMT + Glenn Thompson + tech, guile, scheme, development, functional-programming +
+ + + A Journey into Scheme + The course took me through the basics of Scheme, from simple expressions to more complex concepts like functions, recursion, and working with files. This structured learning environment gave me the confidence to start building stash. + My Journey into Scheme: Building a Simple Symlink Manager with Guile Scheme +

Introduction

+

I've spent my career as an electrical engineer, not a software developer. However, my recent journey in to GNU/Liniux required a tool for managing symlinks, and that's how I began learning Scheme—specifically Guile Scheme. I'm writing this post to share how I built stash, a utility that mimics GNU Stow's functionality, and how my learning journey was shaped by David Wilson's "Hands-On Guile Scheme for Beginners" course from System Crafters, more about this below.

+

How I Started with Scheme

+

My programming background was VERY limited, I produce documents in (La)Tex but I decided to take the plunge into learning Scheme, thanks to a course led by David Wilson from System Crafters. The course, "Hands-On Guile Scheme for Beginners", was incredibly helpful in making Scheme accessible even for someone like me, without a traditional programming background. I know (La)Tex isn't a programming language, it's typesetting. But how hard can it be? Right?

+

The course took me through the basics of Scheme, from simple expressions to more complex concepts like functions, recursion, and working with files. This structured learning environment gave me the confidence to start building stash.

+

The course was "instructor-led" with live meet-up sessions weekly. David has since made this course on-demand, and will be, if not already, available at the above link. Highly recommended if you are interested in taking your first steps with scheme.

+

Why Build Stash?

+

After completing David Wilson's course, I wanted to put my newly found Guile Scheme skills into practice with a real project. It wasn't enough just to understand the language conceptually—I needed to build something tangible that solved a problem I encountered regularly in my workflow. Writing stash gave me that opportunity. It allowed me to apply what I'd learned while also deepening my understanding of file manipulation, command-line tools, and conflict resolution—all within the Guile Scheme environment.

+

After migrating to GNU/Linux and speaking with other System Crafters Community members, I found I needed a way to manage symbolic links and organize directories. Existing tools like GNU Stow helped, but I wanted to learn how such tools are built. I decided to write my own version using Guile Scheme to enhance my understanding of the language and to have more control over the functionality.

+

The goal of stash is simple: allow users to move directories and create symlinks with conflict resolution, offering options to overwrite, back up, skip, or cancel the operation.

+

Breaking Down Stash

+

The core of stash revolves around:

+
    +
  1. Moving Directories: Using Scheme's file manipulation functions, I learned how to move directories and files around.
  2. +
  3. Creating Symlinks: I implemented functions to create symlinks to the moved directories, ensuring that the original structure remains accessible.
  4. +
  5. Conflict Resolution: One of the key features I wanted was handling conflicts when a file or symlink already exists at the target location. This required prompting the user for input and responding accordingly (backup, overwrite, skip, or cancel).
  6. +
+

Here's an excerpt of the core functionality that handles moving a source directory and creating a symlink:

+
;;; Helper function to move source to target
+(define (move-source-to-target source-dir target-dir)
+  "Move the entire source directory to the target directory."
+  (let* ((source-dir (expand-home source-dir))
+         (target-dir (expand-home target-dir))
+         (source-name (basename source-dir))
+         (target-source-dir (string-append target-dir "/" source-name)))
+    (if (file-exists? target-source-dir)
+        ;; Conflict handling here...
+        ...)
+    (rename-file source-dir target-source-dir)
+    (display (format #f "Moved ~a to ~a\n" source-dir target-source-dir))))
+
+

What I Learned

+

This project taught me a lot about not just Scheme, but programming in general:

+
    +
  • File and Directory Manipulation: Scheme's file handling functions were different from what I had experienced before, but they allowed for powerful manipulation of file systems.
  • +
  • Command-Line Utilities: Scheme isn't just a language for academic exercises; you can write real, useful command-line tools with it.
  • +
  • Problem Solving: From parsing command-line arguments to resolving conflicts with existing files, every part of the program required careful thought and consideration of edge cases.
  • +
+

Guile Scheme Support Resources

+
    +
  1. Guile Scheme Documentation
    The official documentation for Guile Scheme, which includes tutorials, references, and the Guile Manual.

    +
  2. +
  3. Guile Reference Manual
    A comprehensive manual covering core language concepts, libraries, and functions available in Guile Scheme.

    +
  4. +
  5. Scheme Wiki
    A community-maintained wiki that covers various Scheme dialects, including Guile Scheme, with tutorials, guides, and general information on Scheme programming.

    +
  6. +
  7. Guile at Schemers.org
    A site dedicated to Scheme with resources, libraries, tools, and documentation for Scheme and its implementations, including Guile.

    +
  8. +
  9. System Crafters
    Led by David Wilson, System Crafters provides tutorials and blog posts on Guile Scheme and other GNU tools.

    +
  10. +
  11. Guile Users Mailing List
    Join the Guile mailing list to ask questions and engage with the Guile Scheme community.

    +
  12. +
  13. Guile Cookbook
    An unofficial GitHub repository with practical code snippets and tips for Guile Scheme, covering various common use cases and tasks.

    +
  14. +
  15. #guile and #scheme on Libera Chat IRC
    A helpful IRC channel where you can connect with other Guile users for real-time support and advice.

    +
  16. +
  17. #systemcrafters on Libera Chat IRC
    A SUPER helpful IRC channel not only for guile and scheme, there are a huge variety of different people here. Tell them glenneth sent you.

    +
  18. +
+

Next Steps

+

I am still refining stash, especially around its conflict resolution system and the way it handles symbolic links. But it's in a usable state, and I'm excited to continue iterating on it. You can check out the code on Codeberg.

+

If you're curious about Scheme and how it can be used practically, I highly recommend checking out David Wilson's course. It's been instrumental in helping me grasp the concepts I needed to build this tool. Here's the link, again :) "Hands-On Guile Scheme for Beginners"

+]]>
+ https://glenneth.org/content/posts/2024-09-24-scheme-journey.html + https://glenneth.org/content/posts/2024-09-24-scheme-journey.html + Tue, 24 Sep 2024 06:30:00 GMT + Glenn Thompson + personal, tech, guile, scheme, gnu, development +
+ + + A Journey Through GNU Guix: From Installation to Returning to Arch Linux + As a long-time user of Arch Linux, I decided to explore the world of GNU Guix to see if it could better suit my needs, especially with my growing interest in functional package management. The journey was insightful, filled with learning experiences, but ultimately led me back to the reliable shores of Arch. Here's a detailed account of my venture into GNU Guix, adding non-GNU channels, dealing with Nvidia drivers, running SwayWM, and the eventual retreat to Arch. + A Journey Through GNU Guix: From Installation to Returning to Arch Linux +

As a long-time user of Arch Linux, I decided to explore the world of GNU Guix to see if it could better suit my needs, especially with my growing interest in functional package management. The journey was insightful, filled with learning experiences, but ultimately led me back to the reliable shores of Arch. Here's a detailed account of my venture into GNU Guix, adding non-GNU channels, dealing with Nvidia drivers, running SwayWM, and the eventual retreat to Arch.

+

Installation of GNU Guix

+

The installation process of GNU Guix was straightforward, thanks to the well-documented guide provided on their official website. Here's a quick rundown of the steps I followed:

+
    +
  1. Downloading the Installation Image: I started by downloading the latest ISO image from the GNU Guix website.
  2. +
  3. Creating a Bootable USB: Using dd, I created a bootable USB stick to install GNU Guix on my system.
  4. +
  5. Booting into the Installer: Booting from the USB was smooth, and I was greeted with the GNU Guix installer. The installer's simplicity reminded me of early days with Arch, where a minimalistic approach is preferred.
  6. +
  7. Partitioning and Setting Up File Systems: I partitioned my drive using fdisk and set up my file systems. I opted for ext4 for simplicity.
  8. +
  9. Configuring the System: Following the partition setup, I proceeded to configure my system by selecting the required packages and services. I decided to go with the Sway window manager as it's my preferred choice on Arch.
  10. +
+

System Configuration

+

During the installation process a window appears informing you that the config.scm file is located at /etc/config.scm. The first time I installed gnu guix on my work laptop I missed this message (pilot error) and I had to ask in the System Crafters IRC channel at irc.libera.chat, #systemcrafters. Come and join. It's a great place to be and the community there are an absolute treasure. Use your favourite IRC client or join through the webchat here. We would be glad to see you. Tell them glenneth sent you :).

+

My point is, I missed some vital information, so to the guix manual online it was. This can be found here. This link will take you to the dev version of the manual. Something else they don't tell you. This version has a little more detail than the standard manual, and I believe details extra features and may even be a little more up to date.

+

Adding Non-GNU Channels

+

One of the standout features of GNU Guix is the ability to add non-GNU channels to access a wider array of software packages. Here's how I did it:

+
    +
  1. Editing Channels: I edited the ~/.config/guix/channels.scm file to include non-GNU channels.
    (cons* (channel
    +        (name 'non-gnu)
    +        (url "https://example.com/non-gnu-channel.git"))
    +       %default-channels)
    +
    +
  2. +
  3. Updating Channels: Running guix pull updated my system to include packages from the non-GNU channel.
  4. +
+

Installing Nvidia Drivers

+

Being a gamer and someone who requires GPU acceleration for certain tasks, Nvidia drivers were a must. Here's the process I followed:

+
    +
  1. Adding Nvidia Channel: Added a channel that includes Nvidia drivers.
  2. +
  3. Installing Drivers: Installed the drivers using guix package -i nvidia-driver.
  4. +
  5. Configuring the System: I had to manually configure Xorg to use the Nvidia drivers, which involved editing the Xorg configuration files.
  6. +
+

Creating My Home Environment

+

To personalize my setup further, I used guix home import to create my own home environment and add packages. This allowed me to have a consistent environment across different machines. I also edited the config.scm file to include the latest Linux kernels and Nvidia drivers.

+

Additionally, I used the syncthing home-service-type in my home-configuration.scm file to install and configure Syncthing. This setup ensured my files were always in sync across devices, which is crucial for my workflow.

+

GNOME

+

All was good and I had a solid desktop environment running, even though it was gnome desktop. I had never used gnome, and I am more at home with a keyboard driven workflow. I had come from hyprland on Arch and wanted to get back to that workflow. The option I was presented with, in order to continue using wayland, pipewire etc. was SwayWM.

+

Sway

+

Installing SwayWM and it's dependencies and nice to haves was relatively straightforward. add the required packages, sway, swaybg, swayidle, swaylock, to my home-configuration.scm gile and run guix home reconfigure easy! The packages were installed and we were good to go.

+

The first issue I encountered was that sway does not run with the proprietary nvidia drivers, this was on the work laptop. I could get it to run but only after adding the --unsupported-gpu flag to exec sway. Lo and behold, we had a default sway window manager running.

+

Challenges with SwayWM and SMB Shares

+

With the system set up, I ran into a major roadblock: accessing SMB shares in a file manager while running SwayWM.

+
    +
  1. Thunar and GNOME Files: Neither Thunar nor the GNOME Files application could access SMB shares. This was crucial for my workflow as I frequently access network shares.
  2. +
  3. Troubleshooting: I tried various solutions, including installing additional packages and tweaking configurations, but nothing seemed to work.
  4. +
  5. Community Support: I reached out to the GNU Guix community for help. While they were supportive, the solutions provided didn't resolve my issues.
  6. +
+

To ensure that the problem was not hardware-related, I went out and purchased a Lenovo ThinkPad E16 Gen 1. I upgraded the RAM to 48GB and installed a Lenovo 2TB SSD to make it my personal laptop. However, even on this new setup, I faced the same issues accessing SMB shares and some networking services just wouldn't work.

+

I tried deleting the gdm login manager in my system configuration file, but after rebooting it was still showing the gnome login window. This was after reading somewhere online that sway was not on friendly terms with the gdm login manager.

+

Returning to Arch Linux

+

After several days of troubleshooting and not being able to access my SMB shares reliably, I made the difficult decision to revert to Arch Linux. The steps were:

+
    +
  1. Reinstalling Arch: I reinstalled Arch Linux using my tried-and-tested setup process.
  2. +
  3. Configuring SwayWM: Set up SwayWM and ensured all my applications were running smoothly.
  4. +
  5. Accessing SMB Shares: Accessing SMB shares was seamless, just as it was before my experiment with GNU Guix.
  6. +
+

Conclusion

+

I am still running GNU guix on the work laptop, I had to cave on my personal laptop and revert to Arch. My journey with GNU Guix was both enlightening and challenging. While I appreciate the functional package management and the philosophy behind GNU Guix, certain practical issues, like accessing SMB shares, were deal-breakers for my workflow. Arch Linux continues to be my go-to distribution, providing the flexibility and reliability I need for my daily tasks. So, at the moment I am using my personal laptop for work and still trying to figure out the issues I am having on my work laptop. But, to be honest, I prefer working on the thinkpad over working on the MSI laptop that work handed out :).

+

If you're an enthusiast looking to explore new package management paradigms, I highly recommend giving GNU Guix a try. Just be prepared for a few hiccups along the way, and always have a backup plan!

+
+

Feel free to share your thoughts and experiences with GNU Guix or any other distributions you've tried. Let's keep the conversation going!

+

Shameless plug

+

Go here to find all the ways you can engage with the SystemCrafters community. It's a great place to hang out and discuss all thing craftery. You will also notice the Craftering ring that I am a part of. Click the links and see blogs by some of the community members. Always interesting to read what other Crafters are up to.

+

Thanks for taking the time to read my blog post. It is greatly appreciated, and I hope you come back.

+

Happy Hacking!!

+]]>
+ https://glenneth.org/content/posts/2024-07-26-gnu-guix-journey.html + https://glenneth.org/content/posts/2024-07-26-gnu-guix-journey.html + Fri, 26 Jul 2024 07:30:00 GMT + Glenn Thompson + personal, tech, gnu, guix, swaywm, nvidia +
+ + + Transitioning from Hugo to Haunt: Embracing Scheme and GNU Guix + Hello there! I'm Glenn Thompson, and today, I want to share a significant part of my recent journey into the world of Scheme, GNU Guix, and static site generation. + Transitioning from Hugo to Haunt: Embracing Scheme and GNU Guix +

Hello there! I'm Glenn Thompson, and today, I want to share a significant part of my recent journey into the world of Scheme, GNU Guix, and static site generation.

+

Discovering Scheme with System Crafters

+

My journey began with a desire to dive deeper into programming languages and their ecosystems. I am a member of the System Crafters Community, and its founder, David Wilson, announced a short four week course as an introduction to Guile Scheme. The course, Hands-On Guile Scheme for Beginners, provided me with a robust introduction to Guile Scheme, a language that emphasizes simplicity and elegance. David's clear explanations and practical examples made learning Scheme both engaging and approachable.

+

The Move to GNU Guix

+

Inspired by the principles of Scheme, I decided to take a leap further into the open-source world by transitioning from Arch Linux to GNU Guix. The Guix community, particularly the folks in the #systemcrafters channel on irc.libera.chat, were incredibly supportive and instrumental in helping me navigate this new environment. Their guidance made the switch smooth and rewarding, reinforcing the power and flexibility of GNU Guix as a functional package manager and operating system. More about that experience in another post.

+

There are too many individuals to name here that have helped with the installation and configuration on Gnu guix to mention here. You all have been an incredible help for which I am extremely grateful. Thank you all , for enduring my ignorance, and for your patience and your help.

+

From Hugo to Haunt

+

As I settled into Guix, I faced a challenge: Hugo, the static site generator I previously used, was not available as a Guix package. This led me to explore alternatives and eventually discover Haunt, a Scheme-based static site generator that aligns perfectly with my newfound appreciation for Scheme and Guix.

+

Overcoming Challenges with Haunt

+

Transitioning to Haunt wasn't without its challenges. There are no readily available templating systems available for haunt like there are for hugo, but there are plenty of examples here. One of my own primary difficulties was creating a custom template that matched my site's aesthetic requirements and functionality needs. Initially, I struggled with configuring the theme layout and ensuring the CSS was applied correctly. Another hurdle was generating the correct URLs for posts and ensuring that summaries appeared as intended on the front page.

+

Thankfully, the Haunt manual proved to be an invaluable resource throughout this process. The comprehensive documentation provided clear guidance on using various modules, functions, and procedures. By carefully studying the examples and explanations, I was able to overcome the obstacles and achieve the desired results for my site. The manual's detailed descriptions of Haunt's inner workings were particularly helpful in understanding how to leverage the flexibility of Scheme to customize my blog.

+

Crafting My Own Template

+

Moving from Hugo to Haunt required me to create my own template and customize my site's appearance. This was an exciting opportunity to apply the skills I had learned from David's course and experiment with Scheme in a practical context.

+

Creating the Template

+

Haunt's flexibility allowed me to define my own theme layout and structure. Here's a snippet of my haunt.scm file, where I defined the theme layout and added custom footer content:

+
(use-modules (haunt asset)
+             (haunt builder blog)
+             (haunt builder atom)
+             (haunt builder assets)
+             (haunt reader commonmark)
+             (haunt site)
+             (haunt post)
+             (sxml simple)    ; For HTML generation
+             (srfi srfi-1)
+             (srfi srfi-19))  ; For date and time procedures
+
+;; Load custom templates
+(load "templates/post.scm")
+
+(define (format-date date)
+  (date->string date "~Y-~m-~d"))
+
+;; Define a function to generate the URL for a post
+(define (post-url post)
+  (string-append "/" (post-slug post) ".html"))
+
+;; Define a function to extract a summary from the post content
+(define (post-summary post)
+  (let ((content (post-sxml post)))
+    (if (null? content)
+        ""
+        (let ((first-paragraph (car content)))
+          (if (string? first-paragraph)
+              (substring first-paragraph 0 (min 200 (string-length first-paragraph)))
+              (sxml->string first-paragraph))))))
+
+;; Define the theme layout
+(define (theme-layout site title content)
+  (let ((current-year (number->string (date-year (current-date)))))
+    `(html
+      (head
+       (meta (@ (charset "utf-8")))
+       (meta (@ (name "viewport") (content "width=device-width, initial-scale=1.0, shrink-to-fit=no")))
+       (link (@ (rel "stylesheet") (href "/assets/palenight.css")))
+       (style
+        " .craftering {
+            margin: auto;
+            width: 50%;
+            text-align: center;
+        }
+        .webring-text {
+            text-align: center;
+            margin-bottom: 20px;
+            color: white;
+        }
+        .craftering a {
+            color: #dddddd;
+        }
+        .webring-text a {
+            color: #dddddd;
+        }")
+       (title ,title))
+      (body
+       (header (h1 ,(site-title site)))
+       (main ,content)
+       (footer (@ (class "bg-black bottom-0 w-100 pa3") (role "contentinfo"))
+               (div (@ (class "flex justify-between"))
+                    (div (@ (class "webring-text"))
+                         (p "I am part of the " (a (@ (href "https://systemcrafters.net") (target "_blank")) "System Crafters") " webring:"))
+                    (div (@ (class "craftering"))
+                         (a (@ (href "https://craftering.systemcrafters.net/@glenneth/previous")) "←")
+                         (a (@ (href "https://craftering.systemcrafters.net/")) "craftering")
+                         (a (@ (href "https://craftering.systemcrafters.net/@glenneth/next")) "→"))))))))
+
+;; Define the custom theme with a consistent layout for index
+(define my-theme
+  (theme #:name "My Custom Theme"
+         #:layout theme-layout
+         #:post-template post-template
+         #:collection-template
+         (lambda (site title posts prefix)
+           `(div (@ (class "content"))
+              (h2 ,title)
+              (ul
+                ,@(map (lambda (post)
+                         `(li
+                            (article
+                              (header
+                               (h3 (a (@ (href ,(post-url post))) ,(post-title post))))
+                              (p ,(format-date (post-date post)))
+                              (p ,(post-summary post))
+                              (p (a (@ (href ,(post-url post))) "Read more...")))))
+                       posts))))))
+
+;; Site configuration
+(site #:title "Just Another Personal Blog"
+      #:domain "glenneth.srht.site"
+      #:default-metadata
+      '((author . "Glenn Thompson")
+        (email  . "glenn@kirstol.org"))
+      #:readers (list commonmark-reader)
+      #:builders (list
+                  (blog #:theme my-theme)
+                  (atom-feed)
+                  (atom-feeds-by-tag)
+                  (static-directory "images")
+                  (static-directory "assets")))
+
+

Customizing the CSS

+

To give my site a personalized touch, I crafted a CSS stylesheet that matched my aesthetic preferences. Here’s an excerpt from my palenight.css file:

+
body {
+  display: flex;
+  justify-content: center;
+  padding: 10px;
+}
+
+.content, header, footer, main {
+  max-width: 90%;
+  padding: 0 5%;
+}
+
+header {
+  text-align: center;
+  margin-bottom: 20px;
+}
+
+footer {
+  text-align: center;
+  margin-top: 20px;
+}
+
+ul {
+  list-style-type: none;
+  padding: 0;
+}
+
+li {
+  margin-bottom: 20px;
+}
+
+a {
+  text-decoration: none;
+}
+
+a:hover {
+  text-decoration: underline;
+}
+
+body {
+  background-color: #292d3e;
+  color: #d0d0d0;
+}
+
+a {
+  color: #82aaff;
+}
+
+h1, h2, h3, h4, h5, h6 {
+  color: #c792ea;
+}
+
+.content {
+  background-color: #1e1e2e;
+  padding: 20px;
+  border-radius: 5px;
+}
+
+article {
+  background-color: #282a36;
+  padding: 15px;
+  border-radius: 8px;
+  margin-bottom: 20px;
+}
+
+article header {
+  margin-bottom: 10px;
+}
+
+.date {
+  color: #6272a4;
+  font-size: 0.9em;
+}
+
+/* Additional styles for the craftering */
+.craftering {
+  margin: auto;
+  width: 50%;
+  text-align: center;
+}
+
+.webring-text {
+  text-align: center;
+  margin-bottom: 20px;
+  color: white;
+}
+
+.craftering a {
+  color: #dddddd;
+}
+
+.webring-text a {
+  color: #dddddd;
+}
+
+/* Additions for mobile device readability */
+
+meta {
+  name: viewport;
+  content: width=device-width, initial-scale=1, shrink-to-fit=no;
+}
+
+@media screen and (max-width: 767px) {
+  /* Customize styles for smaller screens */
+  .logo {
+    max-width: 200px;
+  }
+
+}
+
+

I use the doom-palenight theme in Emacs, my preferred text editor, and I wanted my site to match that aesthetic.

+

Publishing with Haunt and Hut

+

In addition to using Haunt, I adopted hut, a set of command-line tools for interacting with SourceHut, to publish my blog. This streamlined my workflow, making it easier to manage and deploy my site directly from my local environment.

+

Conclusion

+

Transitioning from Hugo to Haunt, learning Scheme, and embracing GNU Guix has been an enriching experience. It's not just about using new tools; it's about joining a community that values simplicity, transparency, and collaboration. If you're curious about Scheme or GNU Guix, I highly recommend checking out David Wilson's course on System Crafters and joining the discussions on IRC.

+

I am not a developer of any kind, and learning Scheme has opened my eyes as to how I can craft an environment that I want to work in, and not endure a working environment that the computer is forcing upon me.

+

Thank you for reading, and stay tuned for more updates on my journey!

+]]>
+ https://glenneth.org/content/posts/2024-05-15-hugo-to-haunt.html + https://glenneth.org/content/posts/2024-05-15-hugo-to-haunt.html + Wed, 15 May 2024 07:30:00 GMT + Glenn Thompson + personal, tech, keyboards, glove80 +
+ + + A Rollercoaster Week: From Amman to Newcastle, and back again + The Journey Begins + Two weeks ago was a whirlwind of events, taking me from the conforting embrace of Amman, Jordan to the vibrant streets of Newcastle, England. It was a journey filled with highs and lows, professional achievements, and personal challenges.

+

The Journey Begins

+

It all started on a Monday morning in Amman as I embarked on a journey to attend a Quality Control (QC) conference in Newcastle. The anticipation of presenting my work at an international forum filled me with excitement and nerves. The conference was scheduled for just one day, but the impact it had on me would last much longer.

+

A Successful Presentation

+

Tuesday arrived, and with it came the day of the conference. Armed with a PowerPoint presentation comprising over 130 slides, I delved into four hours of intense presenting. Despite the pressure, the conference was a resounding success. My project received positive feedback, and I felt a sense of accomplishment as I shared my work with colleagues from around the world.

+

The Toll of Travel

+

However, as I returned to Amman on Wednesday, I couldn't shake off a sense of exhaustion. Little did I know that the toll of travel would soon manifest itself in a most unexpected manner.

+

Thursday morning greeted me with heavy flu-like symptoms. It hit me like a ton of bricks. The combination of jet lag, long hours of presenting, and exposure to new environments had taken its toll on my immune system. I was bedridden, grappling with a chesty cough that seemed relentless.

+

The Show Must Go On

+

Despite my illness, there was no time for rest. The following week demanded my presence at a site meeting where I was tasked with condensing my extensive slide deck into a concise presentation of just 12 slides. The challenge was daunting, but I tackled it with determination.

+

Reflecting on the Journey

+

As I look back on the rollercoaster week that was, I'm struck by the juxtaposition of success and struggle. From the heights of presenting at an international conference to the lows of battling illness, it was a journey that tested my resilience and resolve.

+

But through it all, one thing remains clear: adversity only serves to make us stronger. Each obstacle we overcome, whether professional or personal, contributes to our growth and development.

+

So here's to the rollercoaster weeks, the ones filled with ups and downs, twists and turns. For it is in those moments of challenge that we discover the true extent of our capabilities.

+

As I upload this blog post using Hugo, I do so with a renewed sense of gratitude for the journey and all it has taught me. Here's to embracing the ride, wherever it may take us.

+]]>
+ https://glenneth.org/content/posts/2024-05-01-amman-newcastle-journey.html + https://glenneth.org/content/posts/2024-05-01-amman-newcastle-journey.html + Wed, 01 May 2024 14:40:58 GMT + Glenn Thompson + work, travel +
+
+
\ No newline at end of file diff --git a/website-deploy.zip b/website-deploy.zip new file mode 100644 index 0000000000000000000000000000000000000000..ef4606e2bc235a45c653817faadd4dd0678b54bc GIT binary patch literal 100921 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 KY1`*l$NfJlvQZTP literal 0 HcmV?d00001