Skip to content

Repository files navigation

~/.dotfiles

Cross-platform, cross-shell configuration

License: MIT Stars Build Status Compositor: Niri Shells: zsh, fish, bash

This repository provides a unified development environment across Linux, Windows, and WSL, with version-controlled configuration for editors, terminals, shells, and CLI tools.

image

Contents

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.

Installation

Linux and WSL

git clone https://github.com/lindestad/dotfiles ~/.dotfiles
cd ~/.dotfiles
./install.sh

install.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 --yes

Optional components:

  • --niri installs and links the Niri + Noctalia desktop stack: niri, niri-zvim, noctalia-shell, NiriMod, Mission Center, Zen Browser, fuzzel, swayidle, and related Wayland utilities.
  • --kanata installs 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.

Windows (PowerShell)

git clone https://github.com/lindestad/dotfiles $HOME\.dotfiles
cd $HOME\.dotfiles
.\install.ps1

install.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 disabled

Maintenance

Run the local validation suite before committing installer or config changes:

just check

Run a read-only health check against the current machine:

just doctor
# or, after install:
dotfiles-doctor

After moving the checkout, refresh managed symlinks without reinstalling packages:

./scripts/relink.sh --niri --no-kanata --yes

Before moving a checkout, remove managed symlinks that point at it:

./scripts/unlink.sh

If the old checkout is no longer the current directory, pass it explicitly with --from-root.

Zellij Sessions

The shell configs keep plain zellij unchanged and add a few shortcuts:

  • zp attaches to a shared editable persistent session named work, creating it if needed. Set ZELLIJ_PERSISTENT_SESSION or pass a name, e.g. zp laptop.
  • zd starts a fresh dev session with the dev layout: two side-by-side panes plus the usual tab/status bars. Pass a name if you want one, e.g. zd api.
  • zleft starts a fresh session with four panes: btm, expensive, nvtop, and an empty shell. Pass a name if you want one, e.g. zleft monitors.
  • zdclean deletes dev-* 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.


Compatibility

This dotfiles setup is designed to support:

  • Linux: Arch-based, Debian/Ubuntu-based, and Fedora
  • WSL2
  • Windows

Keyboard Layout

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 Key Remappings

Kanata is an optional install. Use --kanata, or answer the installer prompt when running interactively.

Standard binds:

  • Caps LockLeftCtrl
  • LeftCtrlEscape
  • RightCtrlCaps Lock
  • LeftAltLeftSuper
  • RightAlt passes 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 (Between LeftShift and Z) → LeftShift -- Emulates long left shift key
  • Enter\ -- Remap Enter to the key that resides above Enter on ANSI.
  • \ key (between ' and Enter) → Enter -- Emulates long enter key, shorter stroke

Force exit Kanata: LeftCtrl + Space + Esc (Ignores rebinds).


License

This project is licensed under the MIT License. See LICENSE for details.


Back to top ↑

About

Personal shell/terminal emulator/etc. configurations and setups.

Resources

Stars

2 stars

Watchers

1 watching

Forks

Releases

Packages

Contributors

Languages