Skip to content

switch to ubuntu 26 with wayland and more ❄️#3

Draft
MaxWolf-01 wants to merge 34 commits intomasterfrom
ubuntu-26-wayland
Draft

switch to ubuntu 26 with wayland and more ❄️#3
MaxWolf-01 wants to merge 34 commits intomasterfrom
ubuntu-26-wayland

Conversation

@MaxWolf-01
Copy link
Owner

No description provided.

MaxWolf-01 and others added 30 commits March 7, 2026 17:42
Wayland migration:
- Switch clipboard from xclip to wl-copy (tmux, aliases, functions)
- Remove setxkbmap from zshrc, add keyboard layout to gnome.nix dconf
- Switch desktop.nix from kitty to ghostty
- Switch zephyrus from x11.nix to wayland.nix
- Add nvtop LD_LIBRARY_PATH alias for non-NixOS

GNOME declarative config:
- Migrate keybindings from keybindings.pl/CSV to dconf.settings
- Migrate tiling-shell config from dconf dump to dconf.settings
- Migrate MIME defaults from setup script to HM xdg.mimeApps
- Migrate nvim desktop entry from .desktop file to HM xdg.desktopEntries
- Add dconf2nix to desktop packages

Desktop packages:
- Enable tiling-shell from nixpkgs (GNOME 50 >= 45)
- Add obsidian from nixpkgs (replaces AppImage)
- Add qdirstat
- Drop GTK workaround packages (gedit, nautilus, nemo, yaru-theme, alacritty)

Setup script:
- Refactor ubuntu(): drivers, codecs, minimal apt, everything else in HM
- Remove obsolete functions: obsidian, discord, tiling_shell,
  nvidia_optimus, vim_copilot, wireguard_client
- Remove get_claude TODO guard
- Remove obsolete files: keybindings.pl, keybindings.csv,
  tilingshell.dconf, nvim.desktop, obsidian.desktop

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Pass Alt+1-9 through to tmux (was ghostty tab switching)
- Pass Ctrl+Shift+T through, bind in tmux as new-window
- Set ghostty as GNOME default terminal

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- firefox.nix: policies (telemetry, studies, tracking, AI chatbot/link
  previews disabled), custom search engines (@gh/@nix/@pypi/@mdn),
  about:config hardening (HTTPS-only, privacy, VA-API hw decode,
  tab unloading, dark mode, containers)
- gnome.nix: screenshot keybindings, message tray, disable
  toggle-overview and switch-to-application-1..9
- desktop.nix: import firefox.nix
- README.md: update tree, setup flow, remove stale tiling_shell ref
- CLAUDE.md: update HM file listing and setup flow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Newline-joined string only prefixed the first line with `keybind =`,
causing Ghostty to treat the rest as unknown top-level fields.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
GNOME's Ctrl+Alt+T uses xdg-terminal-exec, which defaults to ptyxis
on Ubuntu 26. Setting xdg-terminals.list tells it to use ghostty.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- common.nix: add weekly nix GC (--delete-older-than 30d)
- nix.conf: enable auto-optimise-store (hardlink dedup)
- pc/configuration.nix: system-level GC + auto-optimise-store
- gnome.nix: fix idle-delay/lock-delay with mkUint32 (were silently
  ignored), add power management settings, disable ibus emoji
- setup: remove /usr/lib/firefox so HM Firefox takes precedence
- bin/ubuntu-install: debootstrap installer for Ubuntu 26.04
  LUKS+LVM+EFI, interactive disk/root-size prompts

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- restore-working: restore latest "working" backup from rsync.net
- migrate-firefox-snap: move Firefox profile from snap to HM path

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
HM's built-in nix.gc already generates the systemd service and timer
with sensible defaults (weekly, persistent). The manual definition
caused a duplicate ExecStart error.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Firefox can only see ~/Downloads, ~/Pictures, ~/Music, ~/Videos,
and ~/.mozilla. Screenshots and screencasts blacklisted within
those dirs. Everything else in ~ (secrets, SSH keys, repos, claude
sessions, dotfiles) is invisible. Desktop entry launches through
firejail; GNOME keybindings and link clicks inherit the sandbox.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The sh -c wrapper with conditionals isn't valid in desktop entry Exec
fields (reserved characters). firejail is installed via apt on Ubuntu,
so it's always available on desktop machines.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Firejail's AppArmor profile blocks execution from /nix/store, causing
"Permission denied" on .firefox-wrapped. Disable AppArmor confinement
in firefox.local (all other sandbox layers remain active).

Desktop entry now uses absolute paths so GNOME can launch firefox
without ~/.nix-profile/bin in its PATH.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
The last command `[ -n "$dur_str" ] && printf ...` exits 1 when
dur_str is empty, causing Claude Code to suppress the entire
statusline output. Append `; :` (no-op) to ensure exit 0.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Bootstraps ~/.ssh/id_ed25519 from the sops-encrypted copy in
secrets/passwords/. Derives public key automatically. Enables
self-bootstrapping restore: age key → setup secrets → SSH key → rsync.net.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Without this, restore-working fails because the passphrase-protected
key isn't loaded into the agent yet.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
btop source only needed during build, no reason to persist in
~/repos/tools. obsidian-skills now handled as a Claude plugin.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
…to ubuntu-26-wayland

# Conflicts:
#	claude/settings.json
Avoids .claude/ conflicts from restore overwriting files claude just
created.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Move oyo install + loginctl enable-linger to ubuntu()
- Move chsh to host() after HM switch (nix zsh not available earlier)
- Remove apt zsh (nix provides it)
- Fix ubuntu-install: define colors/die before first use

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Absorb minimal() into host() — one command for full setup
- Add curl to apt deps (debootstrap installs don't include it)
- Move btop build from host() to ubuntu()
- Use disk-based bootloader-id (ubuntu-nvme1n1) to avoid EFI collisions
- Update README for single-command flow

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
MaxWolf-01 and others added 4 commits March 9, 2026 17:35
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Nix's c++ produces binaries with Nix's ld-linux, which can't
dlopen system libs like libnvidia-ml.so at runtime.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant