As primarily a linux user, the MacOS key mapping for copy-paste is really uncomfortable. To map it more like Linux (and Windows) the general recommendation is to switch the Command and Control key, but then the switch windows (Alt-Tab on Linux and Windows) shortcut is different. The solution is to create a shortcut on MacOS for the "Copy" and "Paste" command to map to Control-C and Control-V respectively (System Settings > Keyboard > Keyboard Shortcuts > App Shortcuts).
Lazy Hacker Babble
Just some random babbling of a lazy hacker...
Thursday, October 22, 2026
Tuesday, October 20, 2026
Framework 13 Pro with Fedora Cinnamon
Hardware Spec
- Intel® Core™ Ultra Series 3 - Ultra X7 358H:
- 4 performance cores (1.9 GHz - 4.8 GHz Turbo) ,
- 8 efficient cores (1.5GHz - 3.5GHz Turbo),
- 4 lower power efficient cores (1.5 GHz - 3.3 GHz Turbo),
- 16 threads
- 18MB Cache
- 15W-80W (Framework doesn't reach max power draw)
- Intel Arc B390 GPU
- 50 NPU
- 74Wh Battery
- 2.8K Touchscreen Display
- Crucial 32GB DDR5-7500 PC5-60000 Single Channel Laptop Memory Module (CT32G75C2LP5X)
- WD SN850X 2 TB M.2 PCIe Gen4 NVMe
Install Cinnamon
sudo dnf upgrade --refresh
sudo dnf install @cinnamon-desktopPower and Performance Fix
- https://www.phoronix.com/review/fedora-pantherlake-thermald-tuned
- https://discussion.fedoraproject.org/t/tuned-ppd-worsens-performance-and-efficiency-vs-power-profiles-daemon/199402/14
- https://github.com/redhat-performance/tuned/issues/873
- https://community.frame.work/t/fedora-44-on-the-framework-laptop-13-pro/83106/16
- https://community.frame.work/t/tracking-ppd-v-tlp-for-amd-ryzen-7040/39423
sudo dnf swap tuned-ppd power-profiles-daemon
Fingerprint Login
fprintd-enroll
Expansion Cards
Sunday, July 12, 2026
Fedora 44
A couple of weeks I installed Fedora 44 but not as an upgrade like I normally do. I had to do a clean install because btrfs indicated there was a problem with the file system. It became noticeable when a system backup was happening and it kept running into errors. At one point, the whole system went into read-only mode (which is what btrfs will do when it runs into an issue).
On reboot, everything "seemed" okay and the hardware checks didn't reveal any issue with the drive. However, the logs and btrfs' health check indicated an error. The suggestion was that it was safest to reformat the partition and reinstall everything and that's what I eventually did.
Fedora 44 worked without any problems and it was a quick install to get everything up-and-running again. It gave me a chance to rework my install scripts and update them. One package (golang-github-nvidia-container-toolkit) that was available in Fedora 43 for enabling Nvidia GPU access to containers was not available for Fedora 44. It seems like to get it approved for Fedora 44 so because of that I didn't try do upgrade the other machines. I'll see if the package will eventually get into the Fedora core package so I don't have to add the Copr repo just for that.
Sunday, July 5, 2026
ComfyUI in a Container
Setting up ComfyUI in a Podman container on Fedora Linux with a Nvidia GPU.
Prepare Persistent Directories
Create directories on your host machine to store your models, custom nodes, outputs, and user data. This ensures your configurations and large model files survive container restarts and updates.
mkdir -p ~/comfyui/{models,custom_nodes,output,user}Create the Container Image
We will build a custom image based on Debian (python:3.11-slim).
Note: We explicitly include the GNU C-compilers (gcc, g++) via apt. This is required because the Triton library (used by PyTorch) needs to dynamically compile GPU kernels when ComfyUI starts. Without them, Triton will throw a 0 active drivers error.
Create a file named Containerfile in your current directory with the following contents:
# Use a slim Python 3.11 image as the base (Debian-based)
FROM python:3.11-slim
WORKDIR /app
# Install system dependencies (including C compilers for Triton and OpenGL for OpenCV)
RUN apt-get update && apt-get install -y \
git \
libgl1 \
libglib2.0-0 \
gcc \
g++ \
&& rm -rf /var/lib/apt/lists/*
# Clone the latest ComfyUI repository
RUN git clone https://github.com/comfyanonymous/ComfyUI.git .
# Install PyTorch with CUDA 13.0 support (Required for RTX 50-series)
RUN pip install --no-cache-dir torch torchvision torchaudio --index-url https://download.pytorch.org/whl/cu130
# Install standard ComfyUI dependencies
RUN pip install --no-cache-dir -r requirements.txt
EXPOSE 8188
# Bind to 0.0.0.0 so the host network can access the web interface
CMD ["python", "main.py", "--listen", "0.0.0.0"]Build the image using Podman:
podman build -t comfyui-nvidia .Deploy the Container
Run the container using the configuration below.
Critical Fedora-Specific Flags to Note:
--security-opt label=disable: This disables SELinux separation specifically for this container, preventing SELinux from blocking the execution of the injected Nvidia driver binaries (libcuda.so).:Z(on volume mounts): Instructs Podman to label the mounted host directories with a private unconfined SELinux context, allowing the container read/write access.
podman run -d \
--name comfyui \
--security-opt label=disable \
--device nvidia.com/gpu=all \
-p 8188:8188 \
-v ~/comfyui/models:/app/models:Z \
-v ~/comfyui/custom_nodes:/app/custom_nodes:Z \
-v ~/comfyui/output:/app/output:Z \
-v ~/comfyui/user:/app/user:Z \
localhost/comfyui-nvidiaAutomate Firewall for Remote Access (Optional)
If you want to access ComfyUI from another device on your network, you must open port 8188 in Fedora's firewall. Instead of leaving the port open permanently, you can use a wrapper script that temporarily opens it when ComfyUI starts, and securely closes it when the container stops.
Create a file named start_comfyui.sh:
#!/bin/bash
echo "Opening firewall port 8188..."
sudo firewall-cmd --add-port=8188/tcp
echo "Starting ComfyUI container..."
# The --attach flag keeps the script running until the container is stopped
podman start --attach comfyui
echo "Container stopped. Closing firewall port..."
sudo firewall-cmd --remove-port=8188/tcpMake the script executable and run it whenever you want to start your server for remote access:
chmod +x start_comfyui.sh
./start_comfyui.shAccess and Day-to-Day Management
Once deployed, you can access the ComfyUI web interface by opening your browser and navigating to:http://localhost:8188 (or your machine's local IP address if accessing from another device on the network).
Useful Podman Commands
- Check Startup Logs: Monitor the initialization process or kernel compilations:
podman logs -f comfyui - Stop the Server:
podman stop comfyui - Start the Server:
podman start comfyui - Clean up Disk Space: After rebuilding images (e.g., updating ComfyUI in the future), run this to delete dangling, unnamed images and recover gigabytes of storage space:
podman image prune
Friday, July 3, 2026
How to Create a Windows 11 Bootable USB on Fedora Linux (Without Third-Party Apps)
Microsoft's Media Creation Tool is only for Windows so what happens if you're on Linux? I didn't want to download another third party tool when I don't need to. Fedora (and most Linux) had all the tools needed in the distribution to do this.
This article tells you how to do it manually but I'm lazy and wanted a script to do it and it is now available on Github.
Sunday, May 10, 2026
Alacritty with Terminus On MacOS
Installing Terminus
- Go to Font Book and check that the fonts are all activated.
- Make sure you have the right family name and style as Alacritty is case sensitive and both needs to be entered into the config exactly or Alacritty will give you a misleading error message.
Disabling Anti-Aliasing
defaults write org.alacritty AppleFontSmoothing -int 0defaults delete org.alacritty AppleFontSmoothingInstalling a Better Terminus
[font]
size = 18.0
normal = { family = "Consoleet Terminus-18", style = "medium" }
bold = { family = "Consoleet Terminus-18", style = "bold" }
Installing Nerd Font Symbols
#!/usr/local/bin/bash
SYMBOL_REGULAR="$HOME/Library/Fonts/TerminessNerdFont-Regular.ttf"
SYMBOL_BOLD="$HOME/Library/Fonts/TerminessNerdFont-Bold.ttf"
mkdir -p ~/merged-fonts
declare -A SYMBOL_MAP=(
[/Library/Fonts/consoleet_ter18nr.otf]="$SYMBOL_REGULAR|medium"
[/Library/Fonts/consoleet_ter18br.otf]="$SYMBOL_BOLD|bold"
)
for f in "${!SYMBOL_MAP[@]}"; do
IFS='|' read -r symbol style <<< "${SYMBOL_MAP[$f]}"
name=$(basename "$f" .otf)
family="Consoleet Terminus-18 Nerd"
psname="ConsoleetTerminus18Nerd-${style}"
fullname="${family} ${style}"
cat > /tmp/merge.pe <<EOF
Open("$f")
Print("Destination em: " + \$em)
Print("Destination ascent: " + \$ascent + " descent: " + \$descent)
\$dst_em = \$em
\$dst_ascent = \$ascent
\$dst_descent = \$descent
Open("$symbol")
Print("Source em (before): " + \$em)
ScaleToEm(\$dst_ascent, \$dst_descent)
Print("Source em (after): " + \$em)
Generate("/tmp/scaled_symbol.ttf")
Close()
MergeFonts("/tmp/scaled_symbol.ttf")
SetFontNames("$psname", "$family", "$fullname", "$style")
Generate("$HOME/merged-fonts/${name}-merged.otf")
EOF
fontforge -script /tmp/merge.pe
#!/usr/local/bin/bash SYMBOL_REGULAR="$HOME/Library/Fonts/TerminessNerdFont-Regular.ttf" SYMBOL_BOLD="$HOME/Library/Fonts/TerminessNerdFont-Bold.ttf" mkdir -p ~/merged-fonts declare -A SYMBOL_MAP=( [/Library/Fonts/consoleet_ter18nr.otf]="$SYMBOL_REGULAR|medium" [/Library/Fonts/consoleet_ter18br.otf]="$SYMBOL_BOLD|bold" ) for f in "${!SYMBOL_MAP[@]}"; do IFS='|' read -r symbol style <<< "${SYMBOL_MAP[$f]}" name=$(basename "$f" .otf) family="Consoleet Terminus-18 Nerd" psname="ConsoleetTerminus18Nerd-${style}" fullname="${family} ${style}" cat > /tmp/merge.pe <<EOF Open("$f") dst_ascent = \$ascent dst_descent = \$descent Print("Destination em: " + \$em + " ascent: " + dst_ascent + " descent: " + dst_descent) Open("$symbol") Print("Source em (before): " + \$em) ScaleToEm(dst_ascent, dst_descent) Print("Source em (after): " + \$em) Generate("/tmp/scaled_symbol.ttf") Close() Open("$f") MergeFonts("/tmp/scaled_symbol.ttf") SetFontNames("$psname", "$family", "$fullname", "$style") Generate("$HOME/merged-fonts/${name}-merged.otf") EOF fontforge -script /tmp/merge.pe Done
fc-scan --format "%{family}\n%{fullname}\n%{postscriptname}\n%{style}\n" ~/merged-fonts/consoleet_ter18nr-merged.otf
fc-scan --format "%{family}\n%{fullname}\n%{postscriptname}\n%{style}\n" ~/merged-fonts/consoleet_ter18br-merged.otfcp ~/merged-fonts/consoleet_ter18*-merged.otf ~/Library/Fonts/ fc-match "Consoleet Terminus\-18 Nerd" fc-match "Consoleet Terminus\-18 Nerd:style=bold"
[font] size = 18.0 normal = { family = "Consoleet Terminus-18 Nerd", style = "medium" } bold = { family = "Consoleet Terminus-18 Nerd", style = "bold" }
Monday, May 4, 2026
Chrome and Fedora Crashes With Multi-Monitor Setup
I've noticed with more frequency that after waking from sleep, Chrome or some of its tabs will crash. It can happen immediately or shortly after. A kernel crash or system freeze happens less frequently but is more disruptive when they happen.
This is happening on my main system that has 3 monitors (2 are 120Hz), an AMD CPU with integrated graphics and a discrete Nvidia GPU. The monitors are connected to the motherboard (1 HDMI and 2 DisplayPort that are daisy-chained) rather than to the discrete graphics so I can preserve as much VRAM for LLM inference.
Initially, I though the culprit was the Nvidia driver since the most common responses on the Internet mention them. The next most common response was to turn off hardware acceleration in Chrome.
chrome://gpu revealed that the iGPU was only being allocated 512MB of memory which not enough with a multi-monitor setup. This was being automatically set in the BIOS so I changed the UMA Frame Buffer Size (Found under NB Configuration) to 1GB.
Next, Chrome showed it knew there are two graphics option so this tells it to almost use the integrated graphics.
google-chrome-stable --disable-gpu-driver-bug-workarounds --gpu-testing-vendor-id=<vendor id> --gpu-testing-device-id=<device id>There are some settings for the Nvidia card that might also improve stability. Edit /etc/modprobe.d/nvidia.conf and add the following settings might improve stability but might also slow waking up:
options nvidia "NVreg_PreserveVideoMemoryAllocations=1"
options nvidia "NVreg_TemporaryFilePath=/var/tmp"
options nvidia "NVreg_EnableS0ixPowerManagement=1"
options nvidia "NVreg_PreserveVideoMemoryAllocations=1"To make sure the system leverage these values:
sudo dracut -f
sudo rebootTip: Restart the Cinnamon process without losing your open windows by pressing Alt + F2, typing r, and hitting Enter
Sunday, April 19, 2026
Fedora 42 to 43
Time to do another upgrade of Fedora (from 42 to 43). I didn't find any immediate issue with the upgrade so nothing to report.
Friday, April 10, 2026
CLI and Terminal utilities
Recent developments with AI has brought renewed interest in command line tools and terminal apps. Linux had always had a rich collection of CLI utilities, but I wanted to check out what new options are now available. This is my running list of things I've found interesting but haven't spent enough time for me to recommend it on my tools page.
Tuesday, April 7, 2026
Aerospace, Sketchybar, Jankyborders to Make OSX Workable
I've been using a combination of a Linux and ChromeOS as my work laptops, but my current job now has me using a Macbook Pro which I haven't touched in over 10 years. A combination of the way OSX behaves and the workflow necessary for my particular work environment (Slack, Outlook, Claude Code, etc.) made me realize that I really needed to configure it if I expect to have a half decent work experience.
Aerospace Windows Manager
With the sheer number of different windows (apps and many browser windows), I couldn't function with a floating windows manager. OSX's spaces/Mission Control was not effective in taming the chaos so I decided to use Aerospace, a tiling windows manager influenced by i3wm. With Aerospace, having one application per workspace is much more intuitive and natural because of how well it's shortcuts are integrated with it. It was almost instinctive to have my browser windows in the B workspace because the shortcut to it is simply Alt-B and Aerospace allowed you to configure so that whenever a browser window is opened that it can automatically put in the B workspace. Along with not having all the gazillions windows overlapping each other was enough for me to use it, but the additional features, programmability and keyboard friendliness made it even more worth while for me to adopt it.
SketchyBar
SketchyBar is a nice complement to Aerospace. It's a programmable OSX menu replacement, but I have it running vertically exclusively for Aerospace where it shows the Aerospace workspaces and what is running in each workspace.
JankyBorders
When there are multiple windows in one workspace, sometimes it wasn't obvious which was the active window. JankyBorders is an utility program that draws a more visible border around the active window to make it more easily identifiable.
Integrating Aerospace, SketchyBar and JankyBorders
AeroSpace and JankyBoarder complements each other and doesn't exactly require integration but since Aerospace can be configured to run external programs as part of its startup it is simple to simply have Aerospace launch JankyBorder.
Integrating Aerospace and SketchyBar took a little more effort but the basic steps are:
- [Aerospace] Have Aerospace start SketchyBar.
- [Aerospace] Tell Aerospace that whenever there is a chance to a workspace that it should call SketchyBar to tell it of an event change and pass along the workspace that is in focus.
- [SketchyBar] Set its config file (~/config/sketchybar/sketchybarrc) to call Aerospace's command line app to get the active workspaces and apps in each workspace to be added to the SketchyBar menu.
My ~/.aerospace.toml and ~/.config/sketchybar/[sketchybarrc | aerospace.sh] can be found on Github.
