A CachyOS-focused GNOME dotfiles setup with a modular installer that automates desktop and system configuration, supporting Arch-based and Fedora systems.
Modules can be applied selectively, allowing you to install only the components you need.
- Modular installer with dry-run support
- Automated GNOME desktop configuration (workspaces, keybindings, themes)
- GNOME extensions automation (Blur My Shell, TopHat)
- Terminal stack (Kitty + Fish + Starship + Fastfetch)
- Cross-distro installer support (Arch-based + Fedora)
- CachyOS-themed defaults that can be customized (Fastfetch/logo)
- Language/media workflow (Japanese input via Anthy, MPV setup, optional Anki extras)
- System tooling (virtualization stack, media setup, developer utilities)
- Safe to rerun with automatic backups and idempotent configuration
Recommended:
git clone https://github.com/MiguelRegueiro/MyCachyOSDotFiles
cd MyCachyOSDotFiles
./Scripts/install.shOptional preview mode (no changes):
./Scripts/install.sh --dry-runYou can also run ./Scripts/install.sh and choose dry-run in the guided wizard.
The installer is safe to rerun and automatically backs up existing configuration before overwriting files.
The installer is the main entrypoint for this repo. Manual-only sections are documented below (Anki and SpeechNote tweaks, SSH aliases, system guides, and HP Omen notes).
Common flags
--yesrun non-interactive mode (auto-accept prompts)--modules=base,gnome-core,flatpaks,...run only selected modules--preset=corerunbase,gnome-core,gnome-extensions,terminal,media--preset=fullrun all modules--skip-packagesskip distro package installation
Example:
./Scripts/install.sh --modules=base,terminalThis section describes what is applied by ./Scripts/install.sh.
Execution order:
- Detect distro and package mapping.
- If no module/preset is provided, run guided setup (dry-run/packages/modules).
- Resolve selected modules from wizard,
--modules, or--preset. - Authenticate sudo once when root actions are needed.
- Run selected modules (each module still has action-level confirmations unless auto-accepted).
- Print final summary (completed/skipped/failed, module recap, action samples, and
User/Home/log/backup paths).
| Module | What it manages |
|---|---|
base |
user dirs, icons, wallpapers, optional themes, fonts, font cache |
gnome-core |
GNOME keybindings/workspaces/theme defaults/wallpaper |
gnome-extensions |
Extension Manager, extension install/enable (best effort when gnome-extensions CLI is unavailable), TopHat + Blur My Shell defaults |
terminal |
Fish/Kitty/Fastfetch/Starship config and helper CLI installs |
media |
media packages + MPV config |
flatpaks |
curated Flatpak app bundle from Scripts/installer/data/flatpaks.txt |
language |
IBus + Anthy setup (adds Japanese (Anthy) as an additional keyboard layout) |
virtualization |
QEMU/KVM + virt-manager + libvirt (optional groups/services/network actions, distro-aware service units) |
Notes:
- Curated Flatpak apps are managed by the
flatpaksmodule. - Legacy alias
--modules=gnomemaps tognome-core,gnome-extensions. virtualizationuses distro-aware libvirt activation (libvirtd.socketwhen available, otherwise modular sockets likevirtqemud.socket) and usesvirsh -c qemu:///systemfor network actions.
At a glance:
- Writes GNOME
gsettingsfor shortcuts/workspaces/theme/wallpaper. - Installs distro packages depending on selected modules.
- Copies config/assets into user paths and creates timestamped backups.
- May install Flatpaks, Cargo crates, and pip user packages.
Full gsettings keys touched
When gnome-core actions are enabled, installer writes these keys:
org.gnome.desktop.wm.keybindings move-to-workspace-1org.gnome.desktop.wm.keybindings move-to-workspace-2org.gnome.desktop.wm.keybindings move-to-workspace-3org.gnome.desktop.wm.keybindings move-to-workspace-4org.gnome.desktop.wm.keybindings move-to-workspace-5org.gnome.desktop.wm.keybindings switch-to-workspace-1org.gnome.desktop.wm.keybindings switch-to-workspace-2org.gnome.desktop.wm.keybindings switch-to-workspace-3org.gnome.desktop.wm.keybindings switch-to-workspace-4org.gnome.desktop.wm.keybindings switch-to-workspace-5org.gnome.mutter dynamic-workspacesorg.gnome.desktop.wm.preferences num-workspacesorg.gnome.desktop.wm.keybindings switch-windowsorg.gnome.desktop.wm.keybindings switch-windows-backwardorg.gnome.desktop.wm.keybindings switch-applicationsorg.gnome.desktop.wm.keybindings switch-applications-backwardorg.gnome.desktop.interface show-battery-percentageorg.gnome.desktop.interface color-schemeorg.gnome.desktop.interface cursor-themeorg.gnome.desktop.interface icon-themeorg.gnome.desktop.interface gtk-themeorg.gnome.settings-daemon.plugins.media-keys custom-keybindingsorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ nameorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ commandorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom0/ bindingorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ nameorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ commandorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom1/ bindingorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/ nameorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/ commandorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom2/ bindingorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/ nameorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/ commandorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom3/ bindingorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ nameorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ commandorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom4/ bindingorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/ nameorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/ commandorg.gnome.settings-daemon.plugins.media-keys.custom-keybinding:/org/gnome/settings-daemon/plugins/media-keys/custom-keybindings/custom5/ bindingorg.gnome.desktop.wm.keybindings closeorg.gnome.settings-daemon.plugins.media-keys shutdownorg.gnome.settings-daemon.plugins.media-keys rebootorg.gnome.desktop.background picture-uriorg.gnome.desktop.background picture-uri-dark
If gnome-extensions actions are enabled and extensions are installed, installer also tries:
org.gnome.shell.extensions.tophat position-in-panelorg.gnome.shell.extensions.tophat cpu-displayorg.gnome.shell.extensions.tophat mem-displayorg.gnome.shell.extensions.tophat mem-abs-unitsorg.gnome.shell.extensions.tophat show-diskorg.gnome.shell.extensions.tophat show-fsorg.gnome.shell.extensions.blur-my-shell.applications blurorg.gnome.shell.extensions.blur-my-shell.applications enable-allorg.gnome.shell.extensions.blur-my-shell.applications whitelistorg.gnome.shell.extensions.blur-my-shell.applications dynamic-opacity
| Shortcut | Application | Command |
|---|---|---|
Super + 1..5 |
Switch workspace | GNOME switch-to-workspace-1..5 |
Shift + Super + 1..5 |
Move window to workspace | GNOME move-to-workspace-1..5 |
Super + E |
Files (Nautilus) | nautilus --new-window |
Super + Enter |
Kitty Terminal | kitty |
Super + R |
Btop | kitty -e btop |
Super + B |
Zen Browser | flatpak run app.zen_browser.zen |
Super + F9 |
OCR (NormCap) | /usr/bin/flatpak run com.github.dynobo.normcap |
Shift + Super + Enter |
runin (smart command launcher) | kitty -e runin |
Super + Q |
Close Active Window | Closes the currently focused window |
Shift + Super + L |
Shutdown | GNOME media-keys shutdown action |
Shift + Super + P |
Reboot | GNOME media-keys reboot action |
Tip
- Alt+Tab is forced to window-switcher mode (window previews + icons) by setting
switch-windowsand clearingswitch-applications/switch-applications-backward. - Workspaces are pinned to 5 static workspaces (
dynamic-workspaces=false,num-workspaces=5).
Package installation is optional in the wizard and can be disabled with --skip-packages.
Full package matrix
gnome-core:- CachyOS/Arch:
gnome-tweaks,gnome-extensions-app,adw-gtk-theme - Fedora/Nobara:
gnome-tweaks,gnome-extensions-app,adw-gtk3-theme
- CachyOS/Arch:
gnome-extensions:- Flatpak app:
com.mattjakeman.ExtensionManager - GNOME extensions from
Scripts/installer/data/gnome_extensions.txt - GNOME extensions CLI dependency when needed:
- CachyOS/Arch:
python-pipx - Fedora/Nobara:
pipx
- CachyOS/Arch:
- Flatpak app:
terminal:- CachyOS/Arch:
fish,kitty,fastfetch,fzf,btop,cargo,fd - Fedora/Nobara:
fish,kitty,fastfetch,fzf,btop,cargo,fd-find - Rust build deps for Cargo installs:
- CachyOS/Arch:
openssl,pkgconf,base-devel - Fedora/Nobara:
openssl-devel,pkgconf-pkg-config,gcc,make
- CachyOS/Arch:
- CachyOS/Arch:
media:- CachyOS/Arch:
mpv,ffmpeg,libva-utils,libva-intel-driver - Fedora/Nobara:
mpv,ffmpeg,libva-utils,libva-vdpau-driver,intel-media-driver
- CachyOS/Arch:
flatpaks:- Curated bundle from
Scripts/installer/data/flatpaks.txt
- Curated bundle from
language:- CachyOS/Arch:
ibus,ibus-anthy - Fedora/Nobara:
ibus,ibus-anthy - Adds Japanese (
ibus,Anthy) to GNOME input sources without replacing the primary layout
- CachyOS/Arch:
virtualization:- CachyOS/Arch:
qemu-full,virt-manager,virt-viewer,dnsmasq,libguestfs,ebtables,vde2,openbsd-netcat,libvirt,edk2-ovmf,swtpm - Fedora/Nobara:
@virtualization,virt-manager,virt-viewer,libvirt,swtpm
- CachyOS/Arch:
- Flatpak support package (only if missing and Flatpak actions are selected):
- CachyOS/Arch:
flatpak - Fedora/Nobara:
flatpak
- CachyOS/Arch:
- Flatpak apps installed by installer actions:
com.mattjakeman.ExtensionManager(gnome-extensionsaction)- Curated bundle from
Scripts/installer/data/flatpaks.txt(flatpaksmodule)
Full files/paths impact
- Creates/updates:
~/.config~/.local/share/icons~/.local/share/fonts~/Pictures/wallpapersinstall.login repo root
- Copies repo assets/config into user paths:
icons/*->~/.local/share/icons/wallpapers/*->~/Pictures/wallpapers/themes/*->~/.themes/(only ifthemes/exists in repo)Fonts/*->~/.local/share/fonts/fish/->~/.config/fish/kitty/->~/.config/kitty/fastfetch/->~/.config/fastfetch/starship.toml->~/.config/starship.tomlmpv/->~/.config/mpv/
- Backs up overwritten targets under:
~/.config-backups/mycachyosdotfiles_<timestamp>/...
- May also modify:
~/.local/bin/(starship binary and helper symlinks such asrunin,cargo-install-update,fd)~/.cargo/(Cargo-installed binaries/crates)~/.local/share/gnome-shell/extensions/(GNOME extension installs)/etc/shells(adds fish path if missing)- User account shell (
chsh) - User group membership (
usermod -aG ...for available virtualization groups such aslibvirt/kvm) - Libvirt service/socket enablement and default network state (may define
defaultfrom/usr/share/libvirt/networks/default.xmlwhen missing)
Show section
The installer may use network access for enabled modules/actions:
- Distro package repos (
pacmanon Arch/CachyOS,dnfon Fedora/Nobara) - Flathub (
flatpak remote-add,flatpak install) - Starship installer (
curlfromstarship.rs) - Cargo crates (
cargo installforcargo-update,runin) - PyPI (via
pipx install gnome-extensions-cli) - GNOME extension downloads (GNOME Shell D-Bus install or
gext)
What happens when you run the installer again
- Safe to re-run: yes.
- Package installs are usually no-op when already installed:
- CachyOS/Arch:
pacman -S --needed - Fedora/Nobara:
dnf install -y
- CachyOS/Arch:
- GNOME settings are reapplied to the same values (
gsettings set). - Flatpak remotes are not duplicated (
--if-not-exists). - Config updates:
- replace-style targets are backed up first (when they already exist), then replaced
- merge-style copies (icons/wallpapers/themes/fonts) sync into destination without per-file snapshots
- If a replace-target does not exist yet (for example first run), there is nothing to snapshot for that target.
Expected effects each run:
install.logis recreated.- A new backup path is generated each run. The backup directory appears only when existing replace-targets are snapshotted.
- Network/install steps (
cargo,pip, Flatpak, distro packages) may still download or update. fc-cache -fvand some service actions may run again even when already configured.
Note
The following sections describe manual configuration steps that are not managed by the installer.
Show section
Optional extras (not installer-managed):
- Anki add-ons:
- Zoom for Anki 24 (
1923741581) - Review Heatmap (
1771074083)
- Zoom for Anki 24 (
- SpeechNote voices:
- Recommended: Kokoro
af_heart - Voice list: https://huggingface.co/hexgrad/Kokoro-82M/blob/main/VOICES.md#american-english
- Dark mode reference:

- Recommended: Kokoro
Show section
SSH alias examples:
For Fish (~/.config/fish/config.local.fish):
abbr -a sshserver "ssh username@hostname"For Bash (~/.bashrc):
alias sshserver='ssh username@hostname'
source ~/.bashrcOptional (personal workflow): I also use SSH Watchdog (a small GNOME extension I made) to monitor/manage SSH sessions in GNOME Shell.
Show section
Swappiness (recommended for high-RAM systems):
- Check current value:
sysctl vm.swappiness - Set in
/etc/sysctl.conf:vm.swappiness = 10 - Apply:
sudo sysctl -p - Verify:
cat /proc/sys/vm/swappiness
Performance tools:
- MangoHud:
MANGOHUD=1 - Steam launch option:
MANGOHUD=1 gamemoderun %command% - Btop: install with your distro package manager (
btoppackage)
Show section
External NTFS game drive (Windows-formatted):
- Find UUID:
sudo blkid - Create mount point:
sudo mkdir -p /mnt/gamedrive - Add to
/etc/fstab:UUID=YOUR_UUID_HERE /mnt/gamedrive ntfs-3g uid=1000,gid=1000,rw,exec,umask=000,nofail,x-gvfs-show 0 0
Show section
This uses the hp-omen-linux-module workflow for keyboard RGB control.
- Clone:
git clone https://github.com/ranisalt/hp-omen-linux-module cd hp-omen-linux-module - Switch to a compatible branch (example):
git checkout rebase-6.15 - Install via DKMS:
sudo dkms remove hp-omen-wmi/0.6.2 --all sudo dkms add . sudo dkms build hp-omen-wmi/0.6.15 sudo dkms install hp-omen-wmi/0.6.15 - Reload module and verify zones:
sudo modprobe -r hp-wmi && sudo modprobe hp-wmi ls -la /sys/devices/platform/hp-wmi/rgb_zones/ - Write color values:
- Example:
sudo bash -c 'echo 3835ff > /sys/devices/platform/hp-wmi/rgb_zones/zone00'
- Example:
Included helper script:
./Scripts/set_omen_colors_blue.shInstaller summary output at end of run includes:
- Status counts:
completed,skipped,failed - Module recap: completed/skipped modules (and rerun hint for skipped modules)
- Sample lists of failed/completed/skipped actions
- Fish shell change note (when applicable)
- Paths/context:
UserHomeLog fileBackup dir
Installer behavior:
install.logis written at repo root and recreated each run.- Each installer run generates a timestamped backup path:
~/.config-backups/mycachyosdotfiles_<timestamp>/- backup directory appears only when something is actually backed up
- Backups include existing targets before replacement actions (for example
~/.config/fish,~/.config/kitty,~/.config/fastfetch,~/.config/mpv,~/.config/starship.toml). - Merge-copy actions (icons/wallpapers/themes/fonts) sync files in place and do not create per-file backups.
Restore examples:
# Pick the most recent installer backup (or set this manually)
BACKUP_DIR="$(ls -dt "$HOME"/.config-backups/mycachyosdotfiles_* | head -n1)"
# Restore one config
cp -a "$BACKUP_DIR/.config/fish" "$HOME/.config/fish"
# Restore everything from a specific backup snapshot (review before running)
cp -a "$BACKUP_DIR"/. "$HOME"/- Repo-level configuration/scripts are licensed under LICENSE.
- Bundled third-party assets (fonts/icons/wallpapers/logos) may use different licenses, and upstream notices are preserved (for example
icons/MacTahoe/COPYINGandicons/MacTahoe/AUTHORS).


