Files
hp-chell/NEON-CUSTOMIZATIONS.md
T
ergosteurandClaude Opus 5.5 5374c2a5ed Apply microSD write tweaks; correct docs: neon is on the built-in microSD slot
commit=30 on the root fs, journald capped at 100M, smartmontools disabled.
The neon root is a microSD card in the built-in slot (USB-attached reader),
not an external USB card; wording fixed across docs and the install script.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-27 13:18:03 -04:00

8.3 KiB

Other neon customizations on hp-chell

Reconstructed on 2026-09-27 from ~matt/.bash_history (551 lines, roughly early March 2026 onward), /root/.bash_history, and the live system. Topics with their own docs: AUDIO.md, ZRAM.md, CHROMEOS-FLEX.md, and the kernel 7.x black-screen fix in CLAUDE.md.

Keyboard: keyd remapping for the Chromebook layout

The Chromebook keyboard has no F-keys, Delete, Home/End, PgUp/PgDn or Caps Lock; there's a "Search" key where Caps Lock would be. keyd remaps it at the evdev level, so it works everywhere (console, X, Wayland, the login screen).

  • Built from source, not from apt (apt has no keyd for noble): ~/github/keyd (https://github.com/rvaiya/keyd, 7c0aecb, v2.6.0), make && sudo make install, which puts the binary at /usr/local/bin/keyd. Then sudo systemctl enable --now keyd. Neither apt nor unattended upgrades will ever update it; rebuild from the checkout to upgrade.
  • Config: /etc/keyd/default.conf. Apply edits with sudo keyd reload; find key names and device IDs with sudo keyd monitor. Summary:
    • [ids] 0001:0001: only the internal keyboard (AT Translated Set 2 keyboard); external USB keyboards are left alone (use * to include them).
    • leftmeta = overload(meta, leftmeta): Search acts as Meta when held and taps as Meta (opens the KDE launcher).
    • Search + top row gives F1 to F10 (back, forward, refresh, zoom, scale, brightness down/up, mute, volume down/up). Search + -/= gives F11/F12.
    • The same top-row to F-key mapping with Alt, Ctrl or Shift held. The A-/C-/S- prefixes re-apply the modifier, which keyd otherwise strips, so e.g. Alt+F4 works as Alt+Search+Zoom.
    • Search + Backspace = Delete; Search + arrows = Home/End/PgUp/PgDn.
    • Alt + Backspace = Delete; Alt + Search = Caps Lock.

USB-C DisplayPort output: load the cros_ec Type-C drivers

/etc/modules-load.d/cros-video.conf (2026-03-12):

cros_ec_typec
typec_displayport

These don't autoload on chell, and without them the USB-C ports don't negotiate DisplayPort alt mode, so there's no video out over USB-C. Both are loaded as of 2026-09-27.

Kernel: HWE-edge meta package

linux-generic-hwe-24.04-edge is installed (alongside the plain linux-generic-hwe-24.04), and it's why the machine is on 7.x kernels (7.0.0-34 now), not noble's regular HWE line. Also installed deliberately as a known-good fallback: linux-image-generic-6.17 / linux-headers-generic-6.17 (6.17.0-42), which is the fallback kernel named in the black-screen notes in CLAUDE.md. Old 7.x kernels (7.0.0-30, 7.0.0-14) are still installed as well.

/etc/default/grub (edited by hand several times; both matt and root history show nano /etc/default/grub + update-grub): GRUB_DEFAULT=0, GRUB_TIMEOUT=5, GRUB_TIMEOUT_STYLE=menu, GRUB_CMDLINE_LINUX_DEFAULT='splash' (see setup-i915-kernel7-fix.sh).

Storage / wear on the microSD root

neon's root is a microSD card in the built-in slot (sda; the slot's reader is USB-attached internally), and microSD handles lots of small writes poorly, so a few changes cut down writes and space use:

  • /tmp is tmpfs (in /etc/fstab: tmpfs /tmp tmpfs defaults,noatime,mode=1777 0 0). Not in the shell history, so it was probably added in the same nano /etc/fstab edit that disabled the swapfile.
  • The swapfile was replaced by zram (see ZRAM.md).
  • localepurge is installed and configured (via dpkg-reconfigure localepurge) to keep only en, en_CA.UTF-8, en_US.UTF-8 and fr_CA.UTF-8, and delete other locales' files on every package install (USE_DPKG, MANDELETE). If another language's translations or man pages are ever needed, add them with sudo dpkg-reconfigure localepurge.
  • Root mounted with commit=30 (2026-09-27): the root line in /etc/fstab is defaults,commit=30; the pre-change copy is /etc/fstab.bak-2026-09-27. ext4 commits its journal every 30s instead of every 5s, so writes are batched into fewer, larger bursts. Trade-off: a crash or forced power-off can lose up to ~30s of recent changes that weren't fsync'd (apt/dpkg, editors and databases fsync, so they're unaffected). 30 rather than 60 because this machine has needed forced power-offs. relatime is kept deliberately (not noatime).
  • journald capped at 100MB (2026-09-27): /etc/systemd/journald.conf.d/50-max-size.conf sets SystemMaxUse=100M (it was 455MB).
  • smartmontools disabled (2026-09-27, systemctl disable --now): it failed on every boot because neither the microSD card nor the eMMC supports SMART.
  • The card doesn't support discard/TRIM (lsblk -D shows 0), so fstrim.timer does nothing for it. That's harmless and was left alone.

Networking

  • Realtek USB Ethernet (enx00e04c68003e, r8152-family 2.5G adapter): the out-of-tree driver from https://github.com/awesometic/realtek-r8152-dkms (~/github/realtek-r8152-dkms) was once installed with DKMS, together with unloading cdc_ether / cdc_ncm / cdc_mbim and testing with iperf3 against pet630, MTU 9000 and ethtool -K offloads. It was later removed (sudo ./dkms-remove.sh) because it failed to build against the 7.x kernels (confirmed by matt, 2026-09-27). dkms status is empty now, so the adapter gets the in-kernel driver. The MTU and offload tweaks were runtime-only and aren't persisted anywhere.
  • Tailscale is installed (repo in tailscale.list) but tailscaled is disabled (systemctl disable tailscaled, around the time the agent account was created).

Firmware and access

  • MrChromebox firmware utility run twice (curl -LOf https://mrchromebox.tech/firmware-util.sh && sudo bash firmware-util.sh); the second run was the 2026-09-03 update to MrChromebox-2606.1 (see CLAUDE.md).
  • agent-user created with create-agent-user.sh from https://gist.ergosteur.com/ergosteur/41df939a435741bfac431ac3d4b888d0 (a copy is in ~matt).

Software and third-party apt repos

Not hardware-specific, but needed to rebuild the machine. The repositories in /etc/apt/sources.list.d/ beyond neon's own:

Source file What Set up via
vscodium.sources VSCodium (codium) paulcarroty key into /usr/share/keyrings/vscodium-archive-keyring.gpg
google-chrome.sources Google Chrome installing the .deb from Downloads; set as x-www-browser / gnome-www-browser via update-alternatives
docker.sources Docker CE Docker's official apt instructions; matt added to the docker group
ansible-ubuntu-ansible-noble.sources ansible-core ppa:ansible/ansible
nodesource.sources Node.js 24 deb.nodesource.com/setup_24.x; then npm i -g @google/gemini-cli
tailscale.list Tailscale (disabled, see above)

Other tools installed by hand:

  • bws (Bitwarden Secrets Manager CLI) v2.0.0: unzipped into /opt/bitwarden/bws/, symlinked to /usr/local/bin/bws, with completions in /opt/bitwarden/bws/completions.bash sourced from ~/.bashrc.
  • GlobalProtect VPN (PanGPLinux-6.3.3-c31, gp_install.sh, from ~/Downloads).
  • pipx: mkdocs plus the injected mkdocs-material.
  • Claude Code (curl -fsSL https://claude.ai/install.sh | bash).

Notable apt packages installed on top of neon: codium ffmpeg yt-dlp imagemagick python3-pip python3-venv pipx python3-bs4 build-essential ncdu bwm-ng wireshark mpv filezilla rpi-imager ntfs-3g exfatprogs exfat-fuse hfsutils hfsprogs samba samba-vfs-modules krdc remmina ssh iperf3 netcat-openbsd htop btop git pavucontrol-qt bash-completion tesseract-ocr{,-eng,-fra,-kor} inxi lsscsi qrencode localepurge zram-tools dkms.

Git identities: ~/.gitconfig plus ~/.gitconfig.ergosteur and ~/.gitconfig.tfo, with SSH key aliases in ~/.ssh: git_ssh_id_ergosteur → id_rsa, and git_ssh_id_myip4tfo → id_ed25519.

Dead ends in the history (nothing left installed)

  • ~/github/chell_audio (iofq's chell audio repo) was cloned and linux-modules-extra / snd_soc_skl poked at, before switching to WeirdTreeThing's scripts (see AUDIO.md).
  • ntfs2btrfs / ntfsfix against a /dev/sda1 of the time. That was an external data card before this layout, not the current neon install, whose sda1 is its ESP.