The openSUSE OS-native layer β zypper, Tumbleweed + Leap, over the shared Core.
Explore the docs Β»
View Demo
Β·
Report Bug
Β·
Request Feature
Table of Contents
dotfiles-openSUSE β terminal demo
dotfiles-openSUSE is the OS-native layer for openSUSE (Tumbleweed + Leap) β
one node in a cross-platform dotfiles system. The shared Core (zsh, tmux,
Neovim, git, starship, mise) is authored once in
dotfiles-core and vendored under
core/ via git subtree, so a clone is self-contained. This repo adds only what
is genuinely openSUSE: zypper, Packman, AppArmor, Btrfs/snapper, and the
Wayland clipboard shim.
openSUSE is stamped from the dotfiles-Fedora
template per the porting matrix. The full docs live on the
documentation site.
The system is three layers, each building on the one below:
| Layer | Lives in | Owns |
|---|---|---|
| Core | dotfiles-core β vendored into every OS repo's core/ |
zsh, tmux, nvim, git, starship β identical everywhere |
| OS-native | dotfiles-{MacBook,Windows,Fedora,Arch,Debian,openSUSE,Alpine,Gentoo} (this repo among them) |
package manager, clipboard, paths |
| Role | dotfiles-Offense, dotfiles-Defense |
offensive / defensive tooling |
No new languages β this layer is shell and package config over Core's language stack.
An openSUSE box (Tumbleweed or Leap, desktop or a WSL image) and Git.
Everything else β zsh, tmux, nvim, starship, and the modern-CLI stack β is
provisioned by bootstrap.sh.
git clone https://github.com/dotgibson/dotfiles-openSUSE ~/dotfiles-openSUSE cd ~/dotfiles-openSUSE ./bootstrap.sh exec zsh
core/ is a vendored copy and is already present in a clone β there is no
submodule step. bootstrap.sh is idempotent: it refreshes zypper metadata,
installs the package list, and symlinks Core + the openSUSE layer into place. It
only refreshes metadata β the dup-vs-up upgrade choice stays yours.
Not sure what it will touch? Preview the whole plan first β this writes nothing:
./bootstrap.sh --dry-run
| Flag | Effect |
|---|---|
--dry-run |
Print every link/seed/backup that would happen; mutate nothing |
--links-only |
Re-wire symlinks without touching zypper |
--no-flatpak |
Skip the Flathub remote (already auto-skipped on WSL) |
--only zsh,nvim |
Wire ONLY these Core module groups |
--skip tmux |
Wire everything EXCEPT these groups |
--tolerate-failures |
Exit 0 even if optional tools failed (for CI) |
Module groups: zsh nvim tmux git prompt tools. --only and --skip are mutually
exclusive and affect wiring only, never package provisioning.
Exit codes: 0 success Β· 1 bad arguments or a failed precondition Β· 2 the run
completed but one or more optional tools failed to install β the failure ledger is
printed at the end with a retry command for each, so a lossy install is never silently
reported as a clean one.
Escalation is via sudo by default. On a box with no sudo, set BLIB_SU="" when
running as root, or BLIB_SU=doas.
Windows /
\\wsl.localhostcheckouts: rungit config core.fileMode falsein your clone. See CONTRIBUTING.md β without it, git reports every executable as modified and a commit can strip+xfrombootstrap.sh.
Only what changes with the OS. The heavy lifting β the shell modules, editor, and prompt β comes from vendored Core; this repo owns the openSUSE specifics:
bootstrap.shβzypperprovision + Core/OS symlink wiring (idempotent)install/packages.txtβ thezypperpackage list (modern CLI stack)os/opensuse.zshβ clipboard + package-manager aliases β~/.config/zsh/80-os.zshtest/β the repo's own suite: is the package list still installable, and do the Tumbleweed and Leap capability declarations still differ in only the two ways they may?core/β vendored fromdotfiles-core(read-only here; edit upstream)
The things that actually bite on openSUSE β the Tumbleweed dup vs Leap up
split, the excellent solver, AppArmor (not SELinux), Btrfs/snapper rollback, and
the Packman codec repo β are written up on the hub, alongside the per-distro
porting matrix :
This is an OS-native layer, so the contribution rule is a boundary rule:
- Never hand-edit
core/. It is a vendored copy ofdotfiles-coreand is overwritten on the next sync. Fix shared config upstream indotfiles-core, runmake auditthere, thenmake syncfans it out here. - Keep changes genuinely openSUSE. If it would be identical on every distro, it belongs in Core; if it changes with the operator, it belongs in a role repo.
- Green the lint gate. This repo's CI runs shellcheck +
bash -n/zsh -non the repo-owned shell (the vendoredcore/is excluded β it is gated upstream), plus this repo's own suite intest/. Runmake testbefore pushing to get the same answer locally.
Full details, including the Windows checkout caveat and the local gate, are in CONTRIBUTING.md . Security policy: SECURITY.md .
Bugs and ideas: open an issue.
Distributed under the MIT License. See LICENSE for more information.
Garrett Allen - @gerrrrt - garrettallen2@gmail.com - LinkedIn
Project Link: dotgibson