This is my personal dotfiles collection: configuration files curated for the operating systems and environments I actually use, tuned for a modern Linux desktop.
For the latest updates, check the Changelog. You can also download the current version directly from here.
This repository provides automated installation workflows tailored per operating system:
- Arch Linux & CachyOS (Primary): Runs the interactive setup manager.
git clone https://gitlab.com/pad92/dotfiles.git ~/.dotfiles cd ~/.dotfiles ./install
[!TIP] High-Fidelity Installer: The interactive manager presents a clean menu to select package suites (Base, Fonts, GTK, Hyprland, Nvidia, Steam, etc.). It automatically skips already installed packages and configures
yayorparufor AUR dependencies.
- To set up the editor configuration without installing the full suite:
curl -sSL https://gitlab.com/pad92/dotfiles/-/raw/main/vim.sh | bash- Quick Install: You can download the pre-packaged configuration from the Artifacts.
To customize and adapt this dotfiles collection to your own system and identity, you should adjust the following key configuration files:
~/.gitconfig.local(Not tracked, created locally): Define your personal Git credentials here. It is automatically imported by the main.gitconfig:[user] name = Your Name email = your.email@example.com signingkey = your_ssh_or_gpg_key
.zshrc: Adjust primary shell configurations (e.g., local languageLANG, default editorEDITOR, and the active Oh My Zshpluginslist).zsh/init/aliases.zsh: Add, edit, or remove terminal aliases to fit your daily workflow.
.config/uwsm/env: Manage global environment variables for the Wayland session (e.g., default browserBROWSER, default terminalTERMINAL, and default cursor themeXCURSOR_THEME) and set hostname-specific GPU/driver optimizations (such asAQ_DRM_DEVICESor Vulkan driver settings)..config/hypr/: Adjust window manager bindings, window rules, and look-and-feel preferences (Lua). Host-specific hardware layouts (monitors, workspace mappings, GPU overrides) are loaded fromhosts/<hostname>.lua. Waybar also uses per-host configs (config.PadsTower,config.PadsP5560) to adapt modules to available hardware.~/.local/share/backgrounds/: Add your custom wallpaper image files here to integrate with desktop slideshow/randomizer scripts.
.config/alacritty/: Customize the Alacritty terminal's font, window spacing, opacity, and color palette..tmux.conf: Customize keys and options for your Tmux workspace..config/nvim/: Curated, modern, and modular Neovim configuration written from scratch in Lua..vimrc: Adjust keybindings and plugin preferences for your core legacy Vim editor.~/.config/electron-flags.conf: Placeholder for Electron-based editors (VS Code, Codium, Antigravity IDE). Under UWSM,ELECTRON_OZONE_PLATFORM_HINT=autois exported globally so no flags are needed..config/hypr/.luarc.json: Project-specific Lua environment settings optimized for Hyprland Lua validation and seamless autocompletion.
Zsh, configured for daily use:
- Plugins: Powered by
oh-my-zshwithdocker,ansible,git,vscode,thefuck, and syntax highlighting/autosuggestions. - Customization: Extensive history management, custom prompt themes, and path exports for custom binaries (
$HOME/.bin).
Configured in zsh/init/key-bindings.zsh for maximum command line productivity:
| Shortcut | Action | Description |
|---|---|---|
Ctrl + R |
History Search | Search backward incrementally in history |
Ctrl + X, Ctrl + E |
Edit Command | Edit current command line in $EDITOR (Vim) |
Ctrl + Left |
Back Word | Move cursor backward one word |
Ctrl + Right |
Forward Word | Move cursor forward one word |
Alt + L (Esc + L) |
Quick ls |
Run the ls command immediately |
Alt + W (Esc + W) |
Kill Region | Cut/delete text from the cursor to the mark |
Alt + M |
Copy Shell Word | Copy the previous word on the command line |
Up Arrow (after typing) |
Fuzzy Search | Search history forward matching the typed prefix |
Down Arrow (after typing) |
Fuzzy Search | Search history backward matching the typed prefix |
PageUp / PageDown |
History Navigate | Move up/down through history lines |
Home / End |
Line Navigation | Go to the beginning/end of the line |
Shift + Tab |
Reverse Complete | Navigate backwards in the autocompletion menu |
Space |
Magic Space | Perform history expansion when pressing space |
Aliases and shell functions defined in zsh/init/aliases.zsh and autoloaded from zsh/functions/:
| Alias | Target / Command | Purpose |
|---|---|---|
terraform |
tofu |
Uses OpenTofu as transparent replacement if available |
mediasync |
~/.../tools/mediasync.py |
Sync home media server repository |
backup |
~/.dotfiles/bin/backup.sh |
Trigger complete system backup script |
steam-opt |
steam-optimize |
Launch Steam with performance/GPU optimizations |
mirrored / mirrors / mirrora |
mirror [delay/score/age] |
Quick sorting alternatives for Arch mirrorlist optimization |
Organized by functional modules for clean management:
arch_update: Comprehensive system upgrade. Triggersyay -Syu --devel, firmware update checking (fwupdmgr), Flatpak updates, and automated orphans/caches cleanup.clean_arch: Cleans up packages orphans (pacman -Rns), purges pacman/yay cache (yay -Scc), removes old packages version caches (paccache), and detects outstanding.pacnew/.pacsavefiles.mirror [delay|score|age]: Fetches, filters, and rates the fastest Arch Linux package mirrors located in France utilizingreflector.
extract <file>: Extract-all wrapper that intelligently decompresses any archive format (.tar.bz2,.tgz,.zip,.rar,.7z, etc.).md5/sha1/sha256/sha512<string>: Instant, pipeline-friendly string hashing usingopenssl.gpg-encrypt <file/dir>(alias:gpge): Recursively encrypts files inside directories or a single file using GPG. Prompts for the GPG email and encrypts batch files with--trust-model always, preserving file modification times (mtime) and offering option to delete original files.gpg-decrypt <file/dir>(alias:gpgd): Recursively decrypts.gpgfiles inside directories or single files. Intelligently extracts.tar.gz.gpg/.tgz.gpgarchives, restores file modification times (mtime), and offers option to delete source encrypted files.
π Networking & Utilities (zsh/functions/ ip.zsh, meteo.zsh, transfer.zsh, curl.zsh, youtube.zsh, ssh.zsh)
ssh-copy-agent-keys [user@host]: Interactive shell function to copy selected SSH public keys from your localssh-agentto a remote server'sauthorized_keys, preventing duplicates.ip_a/ip_l/ip_p: Show network info (All, Local, or Public IP address).meteo: Instant graphical terminal-based weather forecast usingwttr.in.transfer <file>: Fast upload of any file totransfer.shand returns a direct shareable URL.curl_time <url>: Detailed HTTP connection profiling (DNS lookup, connect, start-transfer, and total times).youtubeEncode <file>: Re-encodes source video with optimized parameters (libx264,aac) for reliable YouTube uploads.radio: Easy interactive CLI radio terminal frontend.calc "<expr>": Command-line evaluator powered bybc.src: Sourced reloader helper for shell config.
Written from scratch in Lua, turning Neovim into an IDE-like development environment.
- Key Features:
- Plugin Manager: Managed by
lazy.nvimfor fast startup and lazy loading. - Fuzzy Finder: Built with
telescope.nvimfor rapid interactive file/buffer/symbol searching. - Syntax & AST: Powered by
nvim-treesitter(mainbranch, Neovim 0.12+) for beautiful, precise, and fast syntax highlighting, indentation, and folding. - Native LSP: Utilizes the modern native LSP framework (
vim.lsp.config/vim.lsp.enablein Neovim 0.11+) integrated withmason.nvimandnvim-cmpfor rich IDE autocompletions, withLspAttachkeymaps for go-to-definition, diagnostics, and formatting. - Git Integration: Realtime changes displayed in the margin by
gitsigns.nvim, with hunk navigation, staging, and blame keymaps. - Aesthetics: Sleek
gruvboxcolorscheme coupled withlualine.nvimstatusline and vertical indentation guides.
- Plugin Manager: Managed by
My original editor configuration built with vundle.
- Key Features: Custom statusline, per-filetype detection, and classic plugins (
vim-gitgutter,vim-fugitive).
- Terminal Emulators: Optimized configuration for Alacritty.
- Multiplexer:
tmuxconfigured with plugins for session management and layout persistence.
| Shortcut | Action |
|---|---|
SUPER + Return |
Terminal |
SUPER + Shift + Q |
Close window |
SUPER + [0-9] |
Focus workspace |
SUPER + Shift + [0-9] |
Move window to workspace |
SUPER + [Arrows/Vim keys] |
Focus window |
SUPER + Shift + [Arrows/Vim keys] |
Move window |
SUPER + F |
Fullscreen toggle |
XF86Audio... |
Audio Controls |
XF86Mon... |
Brightness Controls |
SUPER + E |
File manager |
SUPER + C |
Code editor |
SUPER + W |
Browser |
SUPER + M |
Music Player |
SUPER + Shift + Return |
Password Manager |
SUPER + L |
Lock |
SUPER + Delete |
Logout menu |
SUPER + ALT + Space |
Float/Tile |
SUPER + ALT + Right |
Change wallpaper |
SUPER + PgUp/PgDn / Home |
Screen zoom in/out / reset |
Print / SUPER + P |
Screenshot |
My current primary Window Manager configuration.
Warning
Breaking Change: The Hyprland configuration has migrated to Lua. These files are compatible with Hyprland v0.55 and above.
- Configuration: Located in
.config/hypr - Theming:
hyprtoolkit.confis the single source of truth for colors, fonts, icon/GTK theme, and geometry. It is parsed byinclude/toolkit.luaand consumed byconfig.lua, which pushes the values to GTK/libadwaita apps viagsettingsat session start (conf/autostart.lua). Change the theme there β no value is hardcoded in the Lua configs. - Wallpapers: Place images into
~/.local/share/backgrounds - Batch upload tip:
exiftool -q -if '$Keywords =~ /paysage/' -r ${SRC_DIR} -o "${XDG_DATA_HOME}/backgrounds/"
- Wallpaper Daemon (
awww): Wallpaper loading and randomization are fully managed via standard Systemd user services undergraphical-session.target:awww.service: Systemd user service wrapper for theawww-daemon. It is robustly configured to prevent startup race conditions in Wayland by waiting for the$WAYLAND_DISPLAYsocket (ExecStartPre) and clearing stale sockets, running with--no-cacheto prevent BrokenPipe and SIGABRT crashes.awww_random.timer: Triggersawww_random.service(which executesawww.sh) every 30 minutes to automatically rotate the wallpapers across all connected monitors.- Manual Trigger: Force wallpaper randomization at any time with
systemctl --user start awww_random.service, or use theSUPER + ALT + Rightkeyboard shortcut.
When launching Hyprland from a TTY, PAM and session management must be configured to support services like GNOME Keyring auto-unlock and UWSM session wrapping.
For a detailed, step-by-step setup covering:
- GNOME Keyring PAM configuration (
/etc/pam.d/login) - UWSM (Universal Wayland Session Manager) installation and setup
- TTY shell profile/rc integration (
~/.zshrcor~/.zprofile) - Systemd graphical session target and application autostart
See the Arch Linux Installation Guide - UWSM & PAM Setup.
Refer to the Hyprland Wiki - Systemd startup for official upstream details.
Python, Bash, and shell scripts in bin/:
steam-optimize: Monitor-aware Python 3 wrapper for launching Steam games with tuned environment variables (RADV, Vulkan ICD, Mesa layers), game-specific overrides, Gamescope integration, and signal handling with automatic session cleanup.awww.sh: Wallpaper randomizer script for theawwwdaemon, usingshuf -zandmapfileto load a distinct wallpaper per monitor.backup.sh: System and configuration backup utility powered byrsync, integrated withssh-agent(no hardcoded local keys required). Exclude patterns live indist/*_excludes.txt.razer_dpi.py: Razer peripherals DPI management tool.hypr-screenshot.sh: Renders this repo's Hyprland config in an isolated, nested compositor instance and captures it as the WebP showcase image at the top of this README (seemake screenshot).comcut/comskip.sh: Commercial-break detection and removal for recorded video files, based oncomskip/ffmpeg(adapted from comchap).diff-cmd: Diffs the output of a command run against two different arguments (INplaceholder), instead of diffing two files.vscodium_ext.sh: Installs the curated list of VSCodium extensions this setup relies on.- Zsh Functions & Aliases: See the comprehensive Custom Aliases & Functions section for a detailed list of system maintenance, utility, and archive handling scripts.
- Arch Linux:
- Detailed installation guide: Arch Linux / CachyOS Installation Guide.
- Includes
arch_updatefor full system updates andmirrorfunctions for mirrorlist management.
This repository is mirrored across GitHub, GitLab, and a self-hosted Gitea instance. The CI keeps forge-specific configuration thin and delegates the real work to reusable scripts in .ci_bin/, so the same logic builds the documentation site and cuts releases on every forge.
| Forge | Pipeline | Documentation |
|---|---|---|
| GitHub | .github/workflows/ |
Workflows README |
| GitLab | .gitlab-ci.yml |
GitLab CI README |
| Gitea | reuses .github/workflows/ (forge-agnostic) |
see the Workflows README |
- Pages:
.ci_bin/build_pages.shrenders the Markdown docs (this README, the changelog, the install guide, and both CI READMEs) into the static site β the CI docs are published at/github/workflows/README.md/and/.gitlab/README.md/(the GitHub one drops the leading dot becauseactions/upload-pages-artifactstrips.githubfrom the deployed tarball). The same script backs the localpost-commitpreview hook. - Releases: tagging
v*extracts the matching section fromCHANGELOG.mdvia.ci_bin/extract_release_notes.shand publishes a release.
Tools configured across the stack:
| Category | Tools |
|---|---|
| Shell | Zsh |
| Editor | Neovim, Vim, VSCode |
| Terminal | Alacritty |
| Multiplexer | Tmux |
| UI/UX | Waybar, hyprlauncher, Mako |
| Security | Proton Pass CLI |
| System | Fastfetch, Htop |
Maintained by padπ with β€οΈ since 2015 (11+ years)
