~/.dotfiles
Cross-platform, cross-shell configuration
This repository provides a unified development environment across Linux, Windows, and WSL, with version-controlled configuration for editors, terminals, shells, and CLI tools.
This repo manages:
- shell, terminal, editor, file manager, prompt, and Git configuration
- bundled fonts and platform-specific config linking
- optional keyboard layout and Kanata laptop remapping
- optional Niri + Noctalia desktop configuration on supported Linux installs
- package installs for the tools used by the dotfiles
See apps.md for the package inventory and platform-specific package names.
git clone https://github.com/lindestad/dotfiles ~/.dotfiles
cd ~/.dotfiles
./install.shinstall.sh detects Arch-based, Debian/Ubuntu-based, Fedora, and WSL installs, then dispatches to the matching implementation under scripts/install/.
The Fish configuration is linked for experimentation, but Fish is not installed or selected as the default shell automatically.
The installer prompts for optional components when no flags are provided. Use flags for repeatable installs:
./install.sh --niri --kanata
./install.sh --no-niri --no-kanata --yesOptional components:
--niriinstalls and links the Niri + Noctalia desktop stack: niri, niri-zvim, noctalia-shell, NiriMod, Mission Center, Zen Browser, fuzzel, swayidle, and related Wayland utilities.--kanatainstalls or links Kanata keyboard remapping config where supported.
The Niri path keeps a clean main checkout of niri-zvim under
~/.local/share/niri-zvim/source and runs its complete installer for the
client, daemon, Zellij adapter, Neovim adapter, config, and systemd user
service. Neovim enables the adapter when it is installed. Zellij asks for its
four plugin permissions on first use; the dotfiles do not preapprove them.
The CachyOS/Limine Plymouth LUKS prompt theme is documented in docs/plymouth-luks-theme.md. The CachyOS/Limine Secure Boot workflow is documented in docs/secureboot-limine-signing.md. SDDM autologin using the cached LUKS passphrase is documented in docs/sddm-luks-autologin.md.
git clone https://github.com/lindestad/dotfiles $HOME\.dotfiles
cd $HOME\.dotfiles
.\install.ps1install.sh and install.ps1 are the supported entrypoints. Platform-specific installer code lives under scripts/install/.
On Windows, the installer can optionally install and enable the tracked US+NO keyboard layout for RightAlt Norwegian characters.
It collects optional-component choices before requesting elevation and writes a transcript to logs/.
Use flags for repeatable installs:
.\install.ps1 -UsNoLayout -Kanata -KanataLayout iso-ansi
.\install.ps1 -NoUsNoLayout -NoKanata
.\install.ps1 -Yes # non-interactive defaults; optional components stay disabledRun the local validation suite before committing installer or config changes:
just checkRun a read-only health check against the current machine:
just doctor
# or, after install:
dotfiles-doctorAfter moving the checkout, refresh managed symlinks without reinstalling packages:
./scripts/relink.sh --niri --no-kanata --yesBefore moving a checkout, remove managed symlinks that point at it:
./scripts/unlink.shIf the old checkout is no longer the current directory, pass it explicitly with
--from-root.
The shell configs keep plain zellij unchanged and add a few shortcuts:
zpattaches to a shared editable persistent session namedwork, creating it if needed. SetZELLIJ_PERSISTENT_SESSIONor pass a name, e.g.zp laptop.zdstarts a fresh dev session with thedevlayout: two side-by-side panes plus the usual tab/status bars. Pass a name if you want one, e.g.zd api.zleftstarts a fresh session with four panes:btm,expensive,nvtop, and an empty shell. Pass a name if you want one, e.g.zleft monitors.zdcleandeletesdev-*sessions whose saved metadata is older than 14 days. Pass another cutoff in days if needed, e.g.zdclean 30.
On Linux, the shell configs set ZELLIJ_SOCKET_DIR to /run/user/$UID/zellij when that runtime directory exists, so desktop and SSH shells attach to the same live session namespace.
This dotfiles setup is designed to support:
- Linux: Arch-based, Debian/Ubuntu-based, and Fedora
- WSL2
- Windows
The Niri config uses the custom XKB layout in config/xkb/symbols/usno. It keeps a US base layout and maps Norwegian characters on AltGr:
RightAlt+;/'/[->ø/æ/åRightAlt+Shift+;/'/[->Ø/Æ/Å
The Windows layout source and built installer are tracked under keyboard_layouts/.
Kanata is an optional install. Use --kanata, or answer the installer prompt when running interactively.
Standard binds:
Caps Lock→LeftCtrlLeftCtrl→EscapeRightCtrl→Caps LockLeftAlt↔LeftSuperRightAltpasses through for XKB AltGr
Optional binds:
These binds are only enabled if selected during install. Warning: Enter is rebound
- ISO to ANSI-like feel:
<key (BetweenLeftShiftandZ) →LeftShift-- Emulates long left shift keyEnter→\-- RemapEnterto the key that resides aboveEnteron ANSI.\key (between'andEnter) →Enter-- Emulates long enter key, shorter stroke
Force exit Kanata:
LeftCtrl + Space + Esc (Ignores rebinds).
This project is licensed under the MIT License. See LICENSE for details.