Skip to content

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1,179 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

My Dotfiles

Configuration files for the systems and environments I actually use, on a modern Linux desktop.

Hyprland desktop — Neovim, Waybar & Fastfetch on CachyOS

Installation

For the latest updates, check the Changelog. You can also download the current version directly from here.

Full Setup

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] The interactive manager presents a menu to select package suites (Base, Fonts, GTK, Hyprland, Nvidia, Steam, etc.). It skips already-installed packages and configures yay or paru for AUR dependencies.

Editor Only

  • 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.

Customization

To adapt this dotfiles collection to your own system, adjust the following key configuration files:

Git Identity

  • ~/.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

Shell & Environment (Zsh)

  • .zshrc: Adjust primary shell configurations (e.g., local language LANG, default editor EDITOR, and the active Oh My Zsh plugins list).
  • zsh/init/aliases.zsh: Add, edit, or remove terminal aliases to fit your workflow.

Wayland & Hyprland Session

  • .config/uwsm/env: Manage global environment variables for the Wayland session (e.g., default browser BROWSER, default terminal TERMINAL, and default cursor theme XCURSOR_THEME) and set hostname-specific GPU/driver optimizations (such as AQ_DRM_DEVICES or 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 from hosts/<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.

Terminals & Tools

  • .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/: Neovim configuration written from scratch in Lua.
  • .vimrc: Adjust keybindings and plugin preferences for Vim.
  • ~/.config/electron-flags.conf: Placeholder for Electron-based editors (VS Code, Codium, Antigravity IDE). Under UWSM, ELECTRON_OZONE_PLATFORM_HINT=auto is exported globally so no flags are needed.
  • .config/hypr/.luarc.json: Project-specific Lua environment settings for Hyprland Lua validation and autocompletion.

Core Tooling

Shell (Zsh)

Zsh, configured for daily use:

  • Plugins: Uses oh-my-zsh with docker, ansible, git, vscode, thefuck, and syntax highlighting/autosuggestions.
  • Customization: History management, custom prompt themes, and path exports for custom binaries ($HOME/.bin).

Zsh Keyboard Shortcuts

Configured in zsh/init/key-bindings.zsh:

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

Custom Aliases & Functions

Aliases and shell functions defined in zsh/init/aliases.zsh and autoloaded from zsh/functions/:

Handy Aliases
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
Custom Shell Functions

Organized by functional modules:

Arch Linux & System Maintenance (zsh/functions/arch.zsh)
  • arch_update: Comprehensive system upgrade. Triggers yay -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 / .pacsave files.
  • mirror [delay|score|age]: Fetches, filters, and rates the fastest Arch Linux package mirrors located in France utilizing reflector.
Archives & Crypto (zsh/functions/archive.zsh, crypt.zsh)
  • 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 using openssl.
  • 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 .gpg files inside directories or single files. Intelligently extracts .tar.gz.gpg / .tgz.gpg archives, 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 local ssh-agent to a remote server's authorized_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 using wttr.in.
  • transfer <file>: Fast upload of any file to transfer.sh and 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 by bc.
  • src: Sourced reloader helper for shell config.

Editors (Vim & Neovim)

Neovim

Written from scratch in Lua.

  • Key Features:
    • Plugin Manager: Managed by lazy.nvim for fast startup and lazy loading.
    • Fuzzy Finder: Built with telescope.nvim for interactive file/buffer/symbol searching.
    • Syntax & AST: Powered by nvim-treesitter (main branch, Neovim 0.12+) for syntax highlighting, indentation, and folding.
    • Native LSP: Uses the native LSP framework (vim.lsp.config/vim.lsp.enable in Neovim 0.11+) integrated with mason.nvim and nvim-cmp for autocompletion, with LspAttach keymaps 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: gruvbox colorscheme with lualine.nvim statusline and vertical indentation guides.

Legacy Vim

My original editor configuration, built with vundle.

  • Key Features: Custom statusline, per-filetype detection, and classic plugins (vim-gitgutter, vim-fugitive).

Terminal & Session Management

  • Terminal: Configuration for Alacritty.
  • Multiplexer: tmux configured with plugins for session management and layout persistence.

Desktop Environment

Keybindings

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

Hyprland

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.conf is the single source of truth for colors, fonts, icon/GTK theme, and geometry. It is parsed by include/toolkit.lua and consumed by config.lua, which pushes the values to GTK/libadwaita apps via gsettings at 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 run as Systemd user services under graphical-session.target:
    • awww.service: Systemd user service wrapper for the awww-daemon. Configured to prevent startup race conditions by waiting for the $WAYLAND_DISPLAY socket (ExecStartPre) and clearing stale sockets, running with --no-cache to prevent BrokenPipe and SIGABRT crashes.
    • awww_random.timer: Triggers awww_random.service (which executes awww.sh) every 30 minutes to rotate wallpapers across all connected monitors.
    • Manual Trigger: Force wallpaper randomization at any time with systemctl --user start awww_random.service, or use the SUPER + ALT + Right keyboard shortcut.

TTY Launch & Session Integration

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 (~/.zshrc or ~/.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.

System Utilities

Custom Scripts

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 the awww daemon, using shuf -z and mapfile to load a distinct wallpaper per monitor.
  • backup.sh: System and configuration backup utility powered by rsync, integrated with ssh-agent (no hardcoded local keys required). Exclude patterns live in dist/*_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 (see make screenshot).
  • comcut / comskip.sh: Commercial-break detection and removal for recorded video files, based on comskip/ffmpeg (adapted from comchap).
  • diff-cmd: Diffs the output of a command run against two different arguments (IN placeholder), instead of diffing two files.
  • vscodium_ext.sh: Installs the VSCodium extensions this setup uses.
  • Zsh Functions & Aliases: See the Custom Aliases & Functions section for system maintenance, utility, and archive handling scripts.

OS Maintenance

Continuous Integration

This repository is mirrored across GitHub, GitLab, and a self-hosted Gitea instance. The CI 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.sh renders 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 because actions/upload-pages-artifact strips .github from the deployed tarball). The same script backs the local post-commit preview hook.
  • Releases: tagging v* extracts the matching section from CHANGELOG.md via .ci_bin/extract_release_notes.sh and publishes a release.

Application Ecosystem

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)