You might be here looking for (Linux) rice reference or to (full?) replicate my personal configuration of my favorite Window Managers and several apps as well. β
HorneroConfig is your artisanal toolkit for crafting the perfect digital workspace. Named after the industrious hornero bird, renowned for its skillful nest-building, our framework empowers you to construct a robust, functional, and personalized computing environment.
Perfectly suited for a wide array of Desktop Environments and Window Managers, HorneroConfig thrives across different platforms including GitHub Codespaces, Gitpod, VS Code Remote - Containers, or even Linux distributions that are not Arch Linux.
Backed by the versatile Chezmoi, HorneroConfig stands out as a dotfiles manager that adapts flexibly to your needs, streamlining machine setup and ensuring consistency across devices. Embrace the spirit of the hornero, and let HorneroConfig transform your configurations into a harmonious blend of elegance and efficiency.
Most were written from scratch. Some details:
As part of this dotfiles installation, we provide a curated collection of utility scripts that help automate and enhance your desktop experience. These scripts handle everything from brightness control to network checks, and theyβre neatly organized under a single command: dots
.
[!TIP] All scripts are fully customizable. You can modify them, add your own, or extend existing ones β and manage them with
chezmoi
just like any other part of your dotfiles.
dots
?dots
is a wrapper utility that exposes various helpful scripts for configuring modules and interacting with your system.
You can use it directly from the terminal to:
dots --help # Show help menu
dots --list # List all available scripts
dots <script> # Run a specific script (with optional flags)
π Pro Tip: You can use
chezmoi edit ~/.local/bin/dots
to customize the wrapper script if needed.
π This list may evolve. To check the current list on your system, run:
dots --list
brightness
β Adjust screen brightness via xbacklight
, brightnessctl
, blight
, or xrandr
check-network
β Check if youβre connected to the internetcheckupdates
β Query available package updatesfeh-blur
β Blur your wallpaper background with feh
git-notify
β Send a notification after a Git commitmicrophone
β Mute/unmute or control mic levelsmonitor
β Display current monitor namenight-mode
β Toggle night mode for low light environmentsopenweathermap-detailed
β Show detailed weather info from OpenWeatherMappopup-calendar
β Display a calendar in a popup windowrofi-bluetooth
β Manage Bluetooth devices using a Rofi menurofi-randr
β Change screen resolution using a Rofi menurofi-run
β Launch applications using a Rofi menurofi-xrandr
β Extended screen resolution manager using Rofi and chartsscreenshooter
β Take screenshots or region capturesspotify
β Display current song info from Spotifysysupdate
β Run a full system updatetoggle
β Toggle the state of specific apps or modules (e.g., Polybar menus)updates
β Check for software updatesweather
β Display current weather summaryAll scripts can be found in your dotfiles repo (usually under ~/.local/bin/
). To customize:
chezmoi edit ~/.local/bin/<script-name>
chezmoi apply
You can also add your own scripts and link them via the dots
interface for quick access.
chezmoi edit ~/.local/bin/dots
Use the dots
utility to take your workflow to the next level. Automate, simplify, and enjoy the full power of your environment! β‘
This repository is designed to be a starting point for your personalized dotfiles setup. Youβre encouraged to fork it, adapt it to your needs, and maintain your own GitHub repository with your custom configurations.
[!TIP] The dotfiles use Chezmoi to manage, edit, and apply configuration changes across multiple machines β securely and efficiently.
Create your own version of the dotfiles:
git clone https://github.com/<your-username>/dotfiles.git ~/.dotfiles
[!IMPORTANT] This dotfiles setup includes references to my personal LastPass vault for storing sensitive information (like tokens or secrets).
If you plan to use or adapt these configs, make sure to replace or remove any references to LastPass and configure your own preferred secret management method β such as Bitwarden, 1Password,pass
,gopass
, orchezmoi's built-in encrypted secrets
.
Double-check any scripts or encrypted templates (*.tmpl
) before applying changes.
Link your forked dotfiles directory with chezmoi:
chezmoi init --source ~/.dotfiles
Use chezmoiβs built-in editing command:
chezmoi edit --source ~/.dotfiles
Make the changes that suit your preferences:
Once you're ready:
chezmoi apply --source ~/.dotfiles
All changes will be synced to your system.
dots
) and workflow helpers[!TIP] Use
chezmoi diff
to preview your changes before applying.
One of the biggest advantages of using Chezmoi is portable configuration. You can sync your setup across multiple machines using a private or public GitHub repository.
Just run:
chezmoi init git@github.com:<your-username>/dotfiles.git chezmoi apply
And your personalized setup will be ready!
Go ahead β personalize everything. Make your desktop, terminal, and tooling truly yours! π
This guide provides an overview of how to customize the supported window managers in this dotfiles setup: i3, Openbox, and XFCE4.
[!TIP] Everything is fully customizable β from layout and keybindings to appearance and startup behavior. All configurations are version-controlled using
chezmoi
, making it easy to manage and sync.
Regardless of the window manager, the general process is:
chezmoi edit
chezmoi apply
π Config Path: ~/.config/i3
The i3 configuration controls:
To edit:
chezmoi edit ~/.config/i3/config chezmoi apply
For more info, check the i3 customization documentation.
π Config Path: ~/.config/openbox
Openbox is a lightweight and highly customizable WM. You can tweak:
To edit configs:
chezmoi edit ~/.config/openbox/rc.xml chezmoi apply
GUI alternative: Use obconf
for quick edits to appearance and themes.
Explore more in the Openbox customization documentation.
π Config Path: ~/.config/xfce4
XFCE4 is a full-featured desktop environment. Customizations here are global and apply across all your installed WMs.
Use the built-in Settings Manager:
xfce4-settings-manager
From there, configure:
You can also edit config files manually via chezmoi:
chezmoi edit ~/.config/xfce4 --source ~/.dotfiles
chezmoi apply
More details in the XFCE4 customization documentation.
chezmoi diff
to preview config changesIf you run into issues or want to go deeper:
Customizing your window manager is one of the best ways to boost your productivity and tailor your desktop to your style β make it yours! π¨
XFCE4 is a versatile, lightweight, and fully customizable desktop environment. It comes with a set of default configurations and strikes a great balance between performance and functionality. With the dotfiles installation, all your XFCE4 customizations are versioned and managed through chezmoi.
[!TIP] Everything in this setup is customizable β from themes and panels to keyboard shortcuts and power settings. You can use the Settings Manager or modify files directly.
Your XFCE4 configuration files are stored at:
~/.config/xfce4
These files are backed by XFCE4 components and apply globally across all the installed dotfiles and any window manager you use.
To make edits via chezmoi:
chezmoi edit ~/.config/xfce4 --source ~/.dotfiles
Apply your changes with:
chezmoi apply
[!TIP] Use
chezmoi diff
to preview changes before applying.
All changes to XFCE4 will reflect globally across any window manager integrated in your dotfiles setup (such as Openbox or i3). This allows for a consistent and seamless experience across sessions.
You can visually manage most XFCE4 settings through the built-in XFCE4 Settings Manager (xfce4-settings-manager
).
Once opened, you'll see options like:
Any changes here are written to the configuration files managed by chezmoi and apply globally to all dotfiles.
Make changes either through the GUI or directly by editing files in ~/.config/xfce4
.
[!TIP] Donβt forget to apply changes with
chezmoi apply
.
picom
for smooth compositing and transparencyPolybar
, Rofi
, and Zsh
for a more powerful environmentxfce4-terminal
with kitty
or alacritty
for improved terminal performanceXFCE4 offers the stability of a traditional desktop with the flexibility of modern customization. Explore, tweak, and make it your own! π¨
i3 is a tiling window manager built to provide an efficient and highly customizable user experience. It allows you to manage your windows using simple keyboard shortcuts and scripting tools.
[!TIP] The i3 setup in this dotfiles project is fully configurable. You can personalize layouts, autostart programs, keybindings, and integrations with other tools like Polybar, Rofi, or EWW.
All i3-related configurations live in:
~/.config/i3
To edit using chezmoi:
chezmoi edit ~/.config/i3 --source ~/.dotfiles
Apply changes:
chezmoi apply
After editing, restart i3 (Mod+Shift+r
) to reload the configuration.
π Official documentation: i3 User Guide
Autostart programs are defined in:
~/.config/i3/autostart.sh
This script runs when the i3 session starts. You can add anything here:
picom --experimental-backends & feh --bg-scale ~/wallpapers/mywall.jpg &
Make sure the script is executable:
chmod +x ~/.config/i3/autostart.sh
Weβve predefined a set of intuitive keybindings in your i3/config
file to help you get productive fast. You can modify or extend them as needed.
Key | Action |
---|---|
$Mod+Shift+q |
Kill the current window |
Mod1+F1 |
Launch Rofi using dots rofi-run -r |
$Mod+d |
Launch EWW dashboard (~/.config/eww/dashboard/launch.sh ) |
$Mod+x |
Launch EWW power menu (~/.config/eww/powermenu/launch.sh ) |
$Mod+Ctrl+p |
Toggle Polybar menus (dots toggle -p -t & ) |
$Mod+w |
Launch default browser (exo-open --launch WebBrowser ) |
$Mod+f |
Launch file manager (exo-open --launch FileManager ) |
$Mod+t or $Mod+Return |
Launch terminal (exo-open --launch TerminalEmulator ) |
XF86MonBrightnessUp |
Brightness +10% (dots brightness "*" + 0.1 ) |
XF86MonBrightnessDown |
Brightness -10% (dots brightness "*" - 0.1 ) |
Shift+XF86MonBrightnessUp |
Brightness +1% (dots brightness "*" + 0.01 ) |
Shift+XF86MonBrightnessDown |
Brightness -1% (dots brightness "*" - 0.01 ) |
Print |
Screenshot tool (dots screenshooter ) |
Shift+Print |
Screenshot region (dots screenshooter -r ) |
XF86AudioPlay |
Play/Pause music (playerctl play-pause ) |
XF86AudioNext |
Next track (playerctl next ) |
XF86AudioPrev |
Previous track (playerctl previous ) |
XF86AudioStop |
Stop music (playerctl stop ) |
XF86AudioMute |
Toggle mute (pamixer -t ) |
XF86AudioRaiseVolume |
Volume up +1% (pamixer -i 1 ) |
XF86AudioLowerVolume |
Volume down -1% (pamixer -d 1 ) |
π§ͺ Experiment with changes in a testing environment before applying them to your main config
Enjoy the power and flexibility of i3, and build your ideal window management experience! π»β¨
Openbox is a lightweight and highly configurable window manager that provides a simple yet powerful environment for managing windows in your desktop. With its flexibility and extensive customization options, Openbox allows you to create a personalized and efficient workflow.
[!TIP] Everything in this setup is fully customizable. Whether it's the appearance, keybindings, or behavior β you have full control. All configuration files live in your dotfiles repo, versioned with chezmoi, and changes can be applied with
chezmoi apply
.
Your Openbox configuration files are located at:
~/.config/openbox
These files are managed via chezmoi. To edit them:
chezmoi edit ~/.config/openbox --source ~/.dotfiles
After editing, apply your changes with:
chezmoi apply
And restart Openbox for the modifications to take effect.
rc.xml
: Main configuration file for keybindings and window behaviormenu.xml
: Right-click desktop menu definitionautostart
: List of applications to run on Openbox startup[!TIP] Use
chezmoi diff
to preview changes before applying.
obconf
To simplify configuration, you can use obconf
, a GUI configuration tool for Openbox.
If it's available in your package manager, install it:
# Example for Arch Linux
sudo pacman -S obconf
Then launch it:
obconf
You can adjust:
β¨ Great for quick changes without editing XML files.
xrandr
, feh
, or picom
for wallpapers, transparency, and compositor supportIf you get stuck or want to learn more:
Unleash the power of Openbox and create a unique desktop environment that reflects your style and optimizes your daily tasks!
Kitty is a modern, GPU-accelerated terminal emulator built for speed, flexibility, and customization. Itβs ideal for developers, power users, and anyone who wants a fast, scriptable terminal experience.
[!TIP] Like everything in this setup, Kitty is fully customizable. You can tweak appearance, behavior, keybindings, and even integrate with your theme manager.
Kitty's configuration file is located at:
~/.config/kitty/kitty.conf
To edit it with chezmoi:
chezmoi edit ~/.config/kitty/kitty.conf chezmoi apply
This file controls appearance, behavior, fonts, shortcuts, and more.
Kitty supports full theme customization using its config system.
kitty-themes
We recommend using kitty-themes for easier management of community-curated themes.
git clone https://github.com/dexpota/kitty-themes ~/.config/kitty/themes
To list and apply a theme:
cd ~/.config/kitty/themes
./theme_launcher.sh # Follow the prompts
This tool automatically updates your Kitty config with the selected theme.
background_opacity
for transparencyExample snippet:
font_family Hack Nerd Font Mono font_size 11 background_opacity 0.95 enable_audio_bell no
Use pywal
to generate a dynamic color scheme based on your wallpaper, and source the kitty.conf
colors dynamically.
wal -i path/to/wallpaper.jpg
Kitty will use the updated colors from your
~/.cache/wal/colors-kitty.conf
file.
Kitty gives you the performance of a modern terminal with the aesthetic and control of a true power tool. Make it yours! π±π»
This section provides guidance for managing and configuring your network setup using NetworkManager, with custom dotfiles support.
[!TIP] Like everything else in this setup, the Network Manager integration is fully customizable. You can configure connections, UI tools, and even define shortcuts or scripts β all managed through your dotfiles and
chezmoi
.
Depending on your preference, you can use either graphical or terminal-based tools for managing networks:
nmtui
β TUI interface (Text-based User Interface)nmtui
Use this for:
nmcli
β Command-line Interfacenmcli device wifi list nmcli device wifi connect <SSID> password <password>
Use this for scripting, automating, or managing networks programmatically.
network-manager-applet
β GUI tray iconIf you're running a system tray (e.g., via Polybar or XFCE), you can use the applet to manage Wi-Fi and VPNs.
Install:
sudo pacman -S network-manager-applet # Arch-based
While network configurations aren't typically stored directly in the dotfiles, you can:
You can version any helper script or autostart command using chezmoi
:
chezmoi edit ~/.config/autostart/network-helper.sh
Hereβs an example nmcli
script that you can store in ~/.local/bin/connect-home-wifi.sh
:
#!/bin/bash
nmcli device wifi connect "HomeWiFi" password "yourpassword"
Make it executable:
chmod +x ~/.local/bin/connect-home-wifi.sh
Add it to your chezmoi
config or call it from a keybinding.
Useful nmcli
commands:
nmcli general status nmcli device nmcli connection show journalctl -u NetworkManager.service
Take control of your network configuration with tools that match your workflow β whether it's terminal, GUI, or automation! π‘
Polybar is a highly customizable status bar that provides a sleek and elegant way to display system information such as date, CPU, memory, and more. Itβs modular, lightweight, and visually beautiful.
[!TIP] Everything in this setup is fully customizable. Whether it's modules, colors, font, spacing, or interaction, you have total control. All configuration files are versioned in your dotfiles using chezmoi.
Your Polybar configuration is stored in:
~/.config/polybar
To edit it:
chezmoi edit ~/.config/polybar --source ~/.dotfiles
Apply changes with:
chezmoi apply
[!TIP] Run
polybar-msg cmd restart
to reload Polybar without restarting your session.
config.ini
: Main config file defining bars and module layoutmodules/
: Folder containing reusable and custom module logiclaunch.sh
: Custom launch script for initializing PolybarPolybar supports a variety of built-in and custom modules. Some examples:
date
β current date/timecpu
β CPU usagememory
β RAM usagebattery
β battery statusnetwork
β current IP, Wi-Fi, and signalspotify
β current playing tracki3
β workspace info for i3 userscustom/
β your own shell scripts or outputCheck the documentation we have for each module in the sidebar!
pywal
to dynamically theme your bar based on wallpaperpicom
Make changes incrementally and restart only the bar:
polybar-msg cmd restart
If something crashes, run:
polybar your-bar-name -r
To test an individual bar defined in your config.ini
Design your own status bar and make your desktop truly yours. Polybar gives you the power β go wild! π
Zsh (Z Shell) is a powerful, interactive shell that offers advanced features, extensive customization, and a vibrant ecosystem of plugins and themes.
[!TIP] Everything in this setup is fully customizable. From themes, prompts, plugins, to aliases and functions β youβre in control. All configuration lives in your dotfiles and is managed through chezmoi.
Zsh is configured using a modular structure inside:
~/.zsh/config.d/
Every .zsh
file inside this folder is automatically sourced on shell startup.
To edit files using chezmoi:
chezmoi edit ~/.zsh/config.d/yourfile.zsh --source ~/.dotfiles
Apply changes with:
chezmoi apply
[!TIP] Use separate files for aliases, plugins, and theme settings for better organization.
To use Powerlevel10k:
chezmoi edit ~/.zsh/config.d/p10k.zsh
source /usr/share/zsh-theme-powerlevel10k/powerlevel10k.zsh-theme
[ ! -f ~/.p10k.zsh ] || source ~/.p10k.zsh
Run p10k configure
to customize your prompt interactively.
Antigen allows you to load and manage plugins easily:
curl -L git.io/antigen > ~/.antigen.zsh
# ~/.zsh/config.d/antigen.zsh
source "$HOME/.antigen.zsh"
antigen apply
Install with:
sh -c "$(curl -fsSL https://raw.github.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
Configure in:
# ~/.zsh/config.d/oh-my-zsh.zsh
export ZSH="/your/oh-my-zsh/path"
source "$ZSH/oh-my-zsh.sh"
We recommend keeping your customizations modular:
aliases.zsh
: command shortcutsfunctions.zsh
: reusable shell functionstheme.zsh
: your theme settingsplugins.zsh
: plugin manager logicThis keeps your configuration clean and easy to maintain.
After editing your configuration:
source ~/.zshrc
Or simply open a new terminal tab/session.
[!TIP] Use
zsh -x
to debug issues during shell startup.
Zsh is not just a shell β itβs a productivity tool. Customize it to reflect your style and workflow! β‘
While these dotfiles are designed to provide a beautiful and personalized setup, privacy and security are just as important. This is an evolving journey β not a one-time setup β and weβre always open to suggestions.
[!TIP] You can tailor the security tools and settings to your preferences. All configurations can be automated or versioned using chezmoi where applicable.
Hereβs a list of tools and practices currently in place or under consideration:
yay -Syyu # [I use Arch, btw](https://wiki.archlinux.org/title/Arch_Linux)
[!TIP] Consider automating this process with a cron job or alias.
sudo freshclam # Update database
clamscan -r /home/youruser
sudo ufw enable
sudo ufw default deny incoming
sudo ufw allow out
sudo systemctl enable --now fail2ban
Check logs:
sudo fail2ban-client status
If self-hosting or CLI usage is preferred, Bitwarden offers Bitwarden CLI.
[!WARNING] Only recommended if you know your use cases won't be impacted.
sudo nmap -sS -p- 192.168.1.1 rustscan -a 192.168.1.1
Use for auditing your local network or spotting unknown open ports.
update-all
)Security is an ongoing practice β start with the basics, stay informed, and evolve over time π
This documentation is not ready yet. Please come back later or ask for help in the Discussions section!
While Chezmoi is a powerful and recommended tool for managing dotfiles across multiple systems, we understand that some users may prefer to maintain their own independent distribution.
[!TIP] This guide helps you eject from chezmoi and take full manual control of your dotfiles β useful for advanced users or custom workflows.
Chezmoi offers:
But if you no longer wish to use chezmoi, you can safely eject.
Follow the official guide here: π Migrate away from chezmoi
The process includes:
Applying all changes to your home directory:
chezmoi apply
Copying the real files to a new git-tracked directory:
mkdir ~/my-dotfiles
chezmoi managed --include=all | xargs -I {} cp --parents {} ~/my-dotfiles/
cd ~/my-dotfiles && git init
Removing chezmoi from your workflow:
sudo pacman -Rns chezmoi # or appropriate command for your distro
Now you're managing your dotfiles fully manually or with your own tooling.
If the answer is βnoβ or βyou want full control,β ejecting is a valid next step.
Whether you stay with chezmoi or go fully manual, the goal is the same: dotfiles that reflect your ideal workflow. Choose the path that works best for you. π οΈ
Whether you're looking to contribute to the Dotfiles project or simply want to preview how everything looks before applying it to your system β we've got you covered with dedicated testing environments.
[!TIP] The testing setup allows you to experiment safely without affecting your real configuration. Itβs a perfect playground for customizing themes, scripts, and behaviors.
To learn how to set up the test environments, check out the official Testing Docs.
These docs include:
You can try out:
π Use this environment as a sandbox β test safely and iterate freely.
chezmoi apply --dry-run
to simulate changes before applyingContributing or customizing just got easier. Jump into the testing environment, play around, and see how everything fits your workflow β worry-free!
Thank you for considering contributing to Dotfiles! We appreciate your interest in improving the project. To ensure a smooth and collaborative contribution process, please review the following guidelines.
Before making any changes or submitting a pull request, we recommend discussing your proposed changes with the repository owners. This can be done through creating an issue, sending an email, or any other method of communication that suits you. Engaging in a discussion beforehand helps ensure that your contributions align with the project's goals and guidelines.
Please note that Dotfiles has a Code of Conduct that we expect all contributors to adhere to. Kindly follow the code of conduct in all your interactions within the project community.
You can contribute to Dotfiles in various ways, including:
To contribute through a pull request, please follow these steps:
It's essential to separate new features or improvements into separate feature branches and submit a pull request for each branch. This allows us to review and merge new contributions individually, ensuring better visibility and management of changes.
When writing code for Dotfiles, please adhere to the following guidelines:
"${variable}"
) instead of bare variables ($variable
).UPPER_CASE
for constants and global variables, and lower_case
for other variables.[ condition ]
) for conditionals, such as in 'if' statements.setup-<function>
without file extensions..sh
extension for libraries and exclude the shebang line.shellcheck
.Thank you for considering these guidelines when contributing to Dotfiles. Your efforts contribute to the project's quality and overall success. Happy coding!