Derek's Cross-Platform Configuration Files
April 15, 2026 ยท View on GitHub
I primarily live in the terminal for everything. Coding, journaling, email, web browsing... the list goes on. To be comfortable on your computer you need to cherish your dot file configuration ๐!
What This Repository Is
This is a cross-platform dotfiles repository that manages my development environment across Linux (Arch), macOS, and Windows 11. It uses a unique bare repository approach that allows me to live directly in my dotfiles while maintaining git history.
Key features:
- ๐ Cross-platform PowerShell 7+ based management
- ๐ Bare git repository for seamless dotfile management
- โ Automated testing via GitHub Actions on all platforms
- ๐ฅ๏ธ Comprehensive window manager configurations (AwesomeWM, Whim, Workspacer)
- ๐ Dual cloning workflow for daily usage and development
Key Concepts
Bare Repository Setup
This repository uses a bare git repository pattern:
- Bare repo location:
~/.cfg(contains git data, no working tree) - Work tree location:
$HOME(your actual home directory) - Benefit: Edit dotfiles directly in your home directory while maintaining git history
In practice:
- Edit
~/.config/awesome/rc.luaโ Changes are automatically tracked - Use
dot statusto see changes (PowerShell) orgit --git-dir=$HOME/.cfg --work-tree=$HOME status(bash) - Commit with
dot commitor the equivalent git command
Dual Cloning Workflow
This repository is used in two ways:
-
Bare Repository (
~/.cfg): For daily usage- Work tree at
$HOME, git dir at~/.cfg - Edit configs directly in home directory
- Use
dotfunction (PowerShell) orgit --git-dir=$HOME/.cfg --work-tree=$HOME(bash)
- Work tree at
-
Normal Repository (e.g.,
~/MyCrossPlatformDotfiles): For development- Full
.gitdirectory for normal git operations - Use for testing, history, contributing
- Standard
gitcommands
- Full
Quick Installation Guide
Prerequisites:
gitPowerShell 7+(pwsh)
Installation steps:
- Download the bootstrap script - Loads the
dotfunction and initialization tools - Initialize dotfiles - Clones the bare repository to
~/.cfg - Get additional configurations - Clones related repos (Neovim, WezTerm, etc.)
- Install packages - Installs platform-specific packages
# Step 1: Download bootstrap script (long version)
Invoke-RestMethod 'https://raw.githubusercontent.com/derekthecool/MyCrossPlatformDotfiles/refs/heads/master/Atelier/pwsh/MyModules/Dot/Source/Dot.Functions.ps1' | Invoke-Expression
# Step 1: Download bootstrap script (short version)
irm 'https://rb.gy/49hpz2' | iex
# Step 2: Initialize bare repository
Initialize-Dotfiles
# Step 3: Clone other config repos
Get-AllConfigurations
# Step 4: Restart shell, then install packages
pwsh
Install-DotPackages
Platform Support
This repository is tested and supported on:
- Linux: Arch Linux (primary), Ubuntu (via CI)
- Windows: Windows 11 (primary), Windows 10 (via CI)
- macOS: Latest versions (via CI)
Platform-specific tools:
- Linux only: AwesomeWM, rofi, picom, systemd integration
- Windows only: Whim, Workspacer, Microsoft Windows Terminal, Scoop package manager
- Cross-platform: PowerShell, Starship, Neovim, WezTerm, Alacritty, btop, yazi
Why PowerShell?
PowerShell is often seen as a Windows-only tool, but it's actually an excellent choice for cross-platform development.
Why PowerShell for dotfiles management?
- Cross-platform: PowerShell 7+ runs on Linux, macOS, and Windows
- Object pipeline: Uses objects instead of just text, making data manipulation easier
- Consistent syntax: Same language and cmdlets across all platforms
- Powerful automation: Advanced scripting capabilities with error handling
- FOSS: Open source with MIT license
Alternative shells? While I adore bash, zsh, and fish, PowerShell is the clear choice for a unified cross-platform setup. Starting with PowerShell 6, it became truly cross-platform, and version 7.4+ provides excellent stability and features.
Repository Structure
MyCrossPlatformDotfiles/
โโโ .config/ # Application configurations
โ โโโ awesome/ # AwesomeWM window manager (Linux)
โ โโโ alacritty/ # Terminal emulator config
โ โโโ asciinema/ # Terminal session recorder
โ โโโ btop/ # System monitor
โ โโโ fish/ # Fish shell configuration
โ โโโ lftp/ # FTP client
โ โโโ neomutt/ # Email client
โ โโโ picom/ # Compositor (Linux)
โ โโโ powershell/ # PowerShell module configs
โ โโโ rofi/ # Application launcher (Linux)
โ โโโ starship.toml # Cross-shell prompt
โ โโโ vifm/ # Terminal file manager
โ โโโ yazi/ # Modern terminal file manager
โ โโโ zathura/ # PDF viewer
โโโ Atelier/ # Development workspace
โ โโโ pwsh/MyModules/ # Custom PowerShell modules
โ โโโ Dot/ # Bare repo git operations
โ โโโ Dots/ # Multi-repo operations
โ โโโ DotInitializer/ # Package installation
โโโ Documents/PowerShell/ # PowerShell profile
โโโ .github/workflows/ # CI/CD pipelines
โโโ AppData/ # Windows-specific configs
โ โโโ Local/ # Windows local app data
โ โโโ Roaming/ # Windows roaming app data
โโโ scoop/ # Windows package manager configs
โโโ .whim/ # Whim window manager (Windows)
โโโ .workspacer/ # Workspacer window manager (Windows)
โโโ .bashrc # Bash shell configuration
โโโ .zshrc # Zsh shell configuration
โโโ .tmux.conf # Tmux configuration
โโโ .gitconfig # Global git configuration
โโโ .wslconfig # WSL configuration
Core PowerShell Modules
This repository includes several custom PowerShell modules in Atelier/pwsh/MyModules/:
dot - Bare Repository Git Operations
Git wrapper for bare repository operations.
Usage:
dot status # Check git status
dot add .config/ # Stage files
dot commit -m "message" # Commit changes
dot push # Push to remote
Bash equivalent:
git --git-dir=$HOME/.cfg --work-tree=$HOME status
dots - Multi-Repo Operations
Manages multiple configuration repositories simultaneously.
Operates on this repo plus related configs:
- This repository (dotfiles)
- Stimpack (Neovim)
- WeztermStimpack (WezTerm)
- PloverStenoDictionaries (Plover)
Initialize-Dotfiles - Bootstrap Setup
Initializes the entire dotfiles setup.
What it does:
- Clones the bare repository to
~/.cfg - Sets up work tree at
$HOME - Configures git settings for bare repo
- Installs required PowerShell modules
- Creates backup of existing configs
Install-DotPackages - Package Installation
Installs platform-specific packages and tools.
Features:
- Detects platform automatically (
$IsWindows,$IsLinux,$IsMacOS) - Uses appropriate package manager:
- Windows: Scoop (primary), WinGet
- macOS: Homebrew
- Linux: pacman (Arch), apt (Ubuntu), detects available
- Installs essential development tools, terminal applications, and utilities
Program Configurations
Window Managers
AwesomeWM (Linux)
- Location:
.config/awesome/ - Root file:
.config/awesome/rc.lua - Features: Multi-monitor support, dynamic tagging, auto-start, client routing
- Tested: โ Syntax-checked via CI
Whim (Windows)
- Location:
.whim/ - Files:
whim.config.csx,whim.config.yaml - Features: Modern tiling window manager for Windows 11
Workspacer (Windows)
- Location:
.workspacer/ - File:
workspacer.config.csx - Features: Tiling window manager for Windows 10/11
Terminal Applications
Starship (Cross-Platform)
- Location:
.config/starship.toml - Description: Beautiful, fast, customizable prompt for any shell
- Features: Multi-shell support, git integration, AWS context, etc.
Alacritty (Cross-Platform)
- Location:
.config/alacritty/ - Description: Fast, GPU-accelerated terminal emulator
- Features: Custom color schemes, key bindings, fonts
WezTerm (Cross-Platform)
- Location: Separate repository - WeztermStimpack
- Description: GPU-accelerated terminal emulator with multiplexing
Windows Terminal (Windows)
- Location:
AppData/Local/Packages/Microsoft.WindowsTerminal_8wekyb3d8bbwe/ - Description: Modern terminal application for Windows 11
Shells
PowerShell (Cross-Platform)
- Profile:
Documents/PowerShell/profile.ps1 - Features: Custom aliases, PSReadLine configuration, modules, cross-platform paths
Bash (Cross-Platform)
- Config:
.bashrc - Features: Starship prompt, fzf integration, WSL detection
Zsh (Cross-Platform)
- Config:
.zshrc - Features: Oh-My-Zsh, custom plugins, Starship prompt
Fish (Cross-Platform)
- Location:
.config/fish/ - Features: Starship integration, abbreviations
Terminal Tools
Neovim (Cross-Platform)
- Location: Separate repository - Stimpack
- Description: Modern, extensible text editor
- Features: Lua configuration, LSP, fuzzy finder, git integration
Vifm (Cross-Platform)
- Location:
.config/vifm/vifmrc - Description: Vim-like file manager
- Features: Vim keybindings, custom colors, file operations
Yazi (Cross-Platform)
- Location:
.config/yazi/ - Description: Modern terminal file manager written in Rust
- Features: Fast, visually appealing, plugin system
btop (Cross-Platform)
- Location:
.config/btop/ - Description: Beautiful, resource-efficient system monitor
- Features: CPU, GPU, RAM, disk, network monitoring
Tmux (Cross-Platform)
- Config:
.tmux.conf - Description: Terminal multiplexer
- Features: Custom key bindings, status bar, pane management
File Transfer & Communication
Neomutt (Cross-Platform)
- Location:
.config/neomutt/neomuttrc - Description: Terminal email client
- Features: Vim keybindings, notmuch integration, GPG
lftp (Cross-Platform)
- Location:
.config/lftp/ - Description: Sophisticated FTP/HTTP client
- Features: Bookmark support, mirror, queue management
yt-dlp (Cross-Platform)
- Config:
yt-dlp.conf - Description: Video downloader for YouTube and other sites
- Features: Format selection, subtitles, archive handling
PDF & Documents
Zathura (Cross-Platform)
- Location:
.config/zathura/zathurarc - Description: Vim-like PDF viewer
- Features: Vim keybindings, minimal UI, fast rendering
Pandoc (Cross-Platform)
- Location:
.pandoc/ - Description: Universal document converter
- Features: Custom templates, defaults
Linux-Specific Tools
Rofi (Linux)
- Location:
.config/rofi/config.rasi - Description: Application launcher and window switcher
- Features: Custom themes, key bindings, drun mode
Picom (Linux)
- Location:
.config/picom/ - Description: Compositor for X11
- Features: Blur effects, transparency, vsync
Windows-Specific Tools
Vieb (Windows)
- Location:
AppData/Roaming/Vieb/ - Description: Vim-like browser
- Features: Vim keybindings for web browsing
Termscp (Windows)
- Location:
AppData/Roaming/termscp/ - Description: Terminal file transfer with SCP/SFTP
- Features: Graphical file transfer over SSH
Development Tools
Git (Cross-Platform)
- Config:
.gitconfig - Features: IncludeIf directives, URL shortcuts, credential helpers
Clang-Format (Cross-Platform)
- Config:
.clang-format - Description: Code formatter for C/C++/Java/JavaScript
- Features: Consistent code style
WSL (Windows)
- Config:
.wslconfig - Description: Windows Subsystem for Linux configuration
- Features: Memory settings, networking, interop
Linting & Quality
Mega-Linter (Cross-Platform)
- Config:
.mega-linter.yml - Description: Meta-linter running 70+ linters
- Features: Markdown, shell scripts, JSON, YAML, spelling
CSpell (Cross-Platform)
- Config:
.cspell.json - Description: Code spell checker
- Features: Custom dictionary, ignore patterns
JSCPD (Cross-Platform)
- Config:
.jscpd.json - Description: Copy/paste detector
- Features: Find duplicate code
GitLeaks (Cross-Platform)
- Config:
.gitleaksignore - Description: Secret scanner
- Features: Prevent committing sensitive data
Shell Profile Precedence
PowerShell
| Profile File | Used In This Repo | Repository File |
|---|---|---|
Machine-Wide, All Hosts: $profile.AllUsersAllHosts | no | |
Machine-Wide, Host-Specific: $profile.AllUsersCurrentHost | no | |
User-Specific, All Hosts: $profile.CurrentUserAllHosts | yes | profile.ps1 |
User-Specific, Host-Specific: $profile.CurrentUserCurrentHost | no |
Why CurrentUserAllHosts?
- Avoids requiring root/admin access
- Applies to all my computers (Windows 11 at work, Arch Linux at home)
- Machine-specific config can go in
CurrentUserCurrentHostif needed
Bash
- Login Shells:
/etc/profileโ~/.bash_profileโ~/.bash_loginโ~/.profile - Interactive Non-Login Shells:
/etc/bash.bashrcโ~/.bashrc
Zsh
- Always Loaded:
/etc/zshenvโ~/.zshenv - Login Shells:
/etc/zprofileโ~/.zprofile - Interactive Shells:
/etc/zshrcโ~/.zshrc - Logout:
/etc/zlogoutโ~/.zlogout
Development & Testing
Running Tests
PowerShell modules:
# Run all PowerShell module tests
./DotfilesTests.ps1
# Run specific module tests
Invoke-Pester -Path Atelier/pwsh/MyModules/Dot/Test/
AwesomeWM configuration:
# Test AwesomeWM syntax
awesome --check ./.config/awesome/rc.lua
CI/CD Pipeline
All changes are tested via GitHub Actions:
- PowerShell module tests: Pester framework on Linux, macOS, Windows
- AwesomeWM syntax check: Lua validation on Ubuntu
- Mega-Linter: Code quality checks on all files
- Package installation: Tests
Install-DotPackageson all platforms
Contributing
- Fork the repository
- Create a feature branch (
git checkout -b feature/amazing-feature) - Make your changes
- Ensure tests pass on all platforms
- Submit a pull request
Guidelines:
- Follow conventional commit format:
docs(claude): redesign README - Test on all three platforms if possible
- Add tests for new features
- Update documentation as needed
Troubleshooting
"dot: command not found"
The dot function is PowerShell-only. Use the equivalent in bash:
git --git-dir=$HOME/.cfg --work-tree=$HOME <command>
"Bare repo already exists"
Remove the existing bare repository and re-initialize:
rm -rf ~/.cfg
Initialize-Dotfiles
"PowerShell 7 not found"
Install PowerShell 7+:
- Windows:
scoop install pwshorwinget install Microsoft.PowerShell - macOS:
brew install powershell - Arch Linux:
pacman -S powershell - Ubuntu:
snap install powershell --classic
Tests failing on one platform
- Check platform-specific logic (
$IsWindows,$IsLinux,$IsMacOS) - Verify path separators (
[System.IO.Path]::PathSeparator) - Check environment variables (
$HOME,$env:LOCALAPPDATA) - Test on all three platforms via GitHub Actions
Changes not being tracked
Ensure you're in the correct git context:
- Bare repo: Use
dot statusor check~/.cfgexists - Normal repo: Use
git statusand ensure.gitdirectory exists
Windows Terminal not finding configs
Windows Terminal stores configs in a package directory. The config location is:
AppData/Local/Packages/Microsoft.WindowsTerminal_8wekyb3d8bbwe/LocalState/settings.json
Separate Repositories
Some configurations are maintained in separate repositories for better organization:
These are automatically cloned by Get-AllConfigurations during installation.