Just my personal configuration for different machines!
  • Shell 52.6%
  • PowerShell 47.4%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-10-18 03:42:59 +02:00
bearable-windows feat: made Microsoft©®™ Windows©®™ more bearable®©™ by adding easy script that can be run even without administrator privilieges 2026-10-18 03:42:59 +02:00
hooks feat: added basic install scripts 2026-10-18 03:10:56 +02:00
workstation feat: added readme and started wip on workstation install script 2026-10-18 03:33:42 +02:00
x270 feat: added basic install scripts 2026-10-18 03:10:56 +02:00
dirs.json chore: regenerate dirs.json 2026-10-18 03:00:56 +02:00
install.ps1 feat: added readme and started wip on workstation install script 2026-10-18 03:33:42 +02:00
install.sh feat: added readme and started wip on workstation install script 2026-10-18 03:33:42 +02:00
README.md feat: added readme and started wip on workstation install script 2026-10-18 03:33:42 +02:00

dotfiles

Machine-specific dot files, published as selectable "dots" — one folder per machine or profile. The installers ask which dots you want, show a dry-run plan, and install only what is missing.

Install

Linux / macOS

curl -fsSL https://dot.rplawski.pl | sh

Windows (PowerShell)

irm https://win.rplawski.pl | iex

Short links: dot.rplawski.pl serves the raw install.sh, win.rplawski.pl serves the raw install.ps1.

Non-interactive

curl -fsSL https://dot.rplawski.pl | sh -s -- --list
curl -fsSL https://dot.rplawski.pl | sh -s -- --dirs "workstation x270" --dest "$HOME" --yes
$env:DOTFILES_DIRS = 'bearable-windows'
irm https://win.rplawski.pl | iex

From a clone you can pass flags directly:

sh install.sh --list
./install.ps1 -List
sh PowerShell meaning
-l, --list -List list available dots and exit
-y, --yes -Yes skip confirmation prompts
-d, --dirs "..." -Dirs "..." pick dots by name or number ("1 3", "x270")
-D, --dest PATH -Dest PATH destination directory (default: $HOME)
-h, --help -Help show help

Environment overrides for both installers:

variable default meaning
DOTFILES_BASE_URL https://git.rplawski.pl Forgejo base URL
DOTFILES_REPO robertplawski/dotfiles owner/repo
DOTFILES_REF main branch or tag
DOTFILES_TOKEN — access token, for private repos
DOTFILES_DEST $HOME destination directory
DOTFILES_DIRS — same as --dirs
DOTFILES_SYSTEM auto-detected override system, e.g. linux/fedora-44
NO_COLOR — disable colors

How it works

  1. The installer curls dirs.json, which maps every dot folder to its metadata.json.
  2. metadata.json lists supported systems (linux/fedora-44, microsoft/windows-11, ...). Dots matching your machine are marked [match] and preselected; linux/* style wildcards match any distro.
  3. After you pick, the installer downloads the repo archive and shows a dry-run plan of every file that would be written.
  4. Files are copied into the destination, merging the dot's tree over it (e.g. workstation/.bashrc → ~/.bashrc). Existing files are never overwritten — colliding files are skipped and reported.
  5. If a dot ships install.sh (Linux) or install.ps1 (Windows), that script is run afterwards from the dot's folder, like a dependency install step. It receives DOTFILES_DEST, DOTFILES_DIR, DOTFILES_NAME, DOTFILES_SYSTEM and DOTFILES_ASSUME_YES in its environment.

Repo layout

dirs.json            generated manifest (folder -> metadata.json), committed
install.sh           Linux/macOS installer
install.ps1          Windows installer
hooks/pre-push       regenerates and commits dirs.json on every push
<dot>/metadata.json  supported systems for that dot
<dot>/install.sh     optional Linux install hook for that dot
<dot>/install.ps1    optional Windows install hook for that dot

Adding a dot

  1. Create a folder with its files and a metadata.json:

    {
      "systems": ["linux/fedora-44"]
    }
    
  2. Optionally add install.sh / install.ps1 for setup steps (package installs, registry tweaks, ...).

  3. Activate the manifest hook once per clone:

    git config core.hooksPath hooks
    
  4. Push. The hook regenerates dirs.json, commits it, and aborts the push once so the fresh manifest ships — just run git push again. A second push with nothing changed goes straight through.