How I moved from a Mac to Fedora 44 Workstation (GNOME 50, Wayland, NVIDIA RTX 5090) and made it feel like home. One plain bash script for the fresh install, plus the configs and fixes I collected over the following months.
It is my machine, not a distro. Some pieces are tied to my hardware (5090, Logitech Brio, Blue Yeti, a 4K monitor). Read a piece before you run it, and take what is useful.
| Piece | What it gives you | Where |
|---|---|---|
| Cmd key that works | keyd swaps the bottom row so the key next to space acts like Cmd: Cmd+C/V/X/T/W/Q, Option word-jumps. Per-app overrides so in the terminal Cmd+C copies and Ctrl+C still interrupts. | keyd/ |
| Spotlight / Raycast | Vicinae on Super+Space, with script commands for window corners and layouts, every GNOME Settings panel, Steam, screenshots, and asking Claude. | vicinae/ |
| Mac-ish desktop | Kiwi (Mac-style panel and menu), rounded window corners, macOS cursor, WhiteSur icons, Qt apps themed to match. Pairs with Dash to Dock from Fedora's repos. | desktop/ |
| Wallpapers with quotes and a clock | Variety rotating 4K Bing and Unsplash images, with a styled quote and clock drawn on. Includes fixes for Variety on Wayland and fractional scaling. | desktop/variety/ |
| Rectangle replacement | My Rectangle shortcuts mapped to Tiling Shell. | RECTANGLE_KEYS.md |
| Every shortcut on one page | Cmd+/ opens a page listing every keybinding on the system, read live from keyd and GNOME, with a health check for conflicts. | keymap/ |
| App migration list | Each Mac app and brew tool, with its Fedora equivalent or the least-bad workaround. | MIGRATION.md |
| Browser add-ons | Chrome extensions mapped to Firefox add-ons, Vimium settings. | FIREFOX_EXTENSIONS.md, vimium/ |
| Face unlock | Howdy with an IR webcam, including the SELinux module GDM needs. | faceauth/ |
| Living next to a Mac | BlueBubbles (iMessage via your Mac) with a one-key unfreeze for its NVIDIA redraw bug. | desktop/bin/bbfix |
| AirDrop-ish | LocalSend set up so iPhone screenshots land in a folder. | desktop/localsend/ |
Dictation (double-tap Ctrl, local Whisper) started here and grew into its own project: speakwrite.
git clone https://github.com/NelsonScott/fedora-bootstrap
cd fedora-bootstrap
less bootstrap.sh # read it first, it is short
./bootstrap.sh # no sudo, it asks for sudo where neededbootstrap.sh does: system update, RPM Fusion, the NVIDIA driver (only if an NVIDIA GPU
is present), CLI packages from packages/dnf.txt, Flatpaks from
packages/flatpak.txt, Node.js, keyd, a few GNOME settings, and
zsh with oh-my-zsh (its upstream installer, piped from GitHub). Then reboot (the NVIDIA
driver needs it) and check nvidia-smi.
Two steps are opt-in because they are big or opinionated: the dictation stack (several GB
of models) and the desktop restyle. BOOTSTRAP_DICTATION=1 BOOTSTRAP_DESKTOP=1 ./bootstrap.sh
turns them on.
After that, the rest is checklists you run by hand:
dotfiles-symlinks.md, RECTANGLE_KEYS.md,
MIGRATION.md, FIREFOX_EXTENSIONS.md, and
desktop/install.sh / vicinae/install.sh if you want those.
- Plain bash. No chezmoi, stow, Ansible, or dotbot. You can read it in 10 minutes.
- Safe to re-run. Package steps skip what is already installed; settings steps just set the same values again.
- Visible.
set -x, so you see every command. - Checklists over magic. Moving apps is a judgment call, so those parts are Markdown.
- RTX 5090 / Blackwell: there is no special package, RPM Fusion's
akmod-nvidiais the right one. With Secure Boot on, enroll the akmods MOK key once and kernel updates re-sign the module automatically. - Vicinae script commands get killed about 10 s after launch. Never
execa GUI app from one; detach it withsetsid -f. That was GNOME Settings "crashing" whenever I opened it. - keyd per-app bindings need your user in the
keydgroup, or they silently do nothing. - Variety on Wayland misdetects the screen size, so you get 1980px wallpapers on 4K.
The fix is in
desktop/README.md.
More in the READMEs inside desktop/, dictation/, keymap/, vicinae/, faceauth/
and network/. The keyd files document themselves in their comments.
Built with help from Claude (like most things these days). It runs my daily driver, but I haven't tested it on anyone else's hardware, so treat it as a reference rather than an installer.