This repository contains my personal dotfiles for managing my environment, including XMonad, terminal, shell, and Emacs configurations.
The goal of this setup is to create a smooth workflow optimized for Emacs and Firefox, while maintaining compatibility with Steam and gaming.
I use picom, rofi, and xmobar alongside XMonad. Their config files are included here.
Emacs configuration is included in this repository under ~/.config/emacs.
These are the main software packages managed and configured here, tested mainly on Ubuntu:
Software | Description |
---|---|
xmonad | Window manager |
xmobar | Status bar |
xmonad-contrib | Extra xmonad modules |
Aeson | JSON parsing library (used for PulseAudio sink switcher) |
alacritty | Terminal emulator |
fish | Shell |
feh | Wallpaper setter |
picom | Compositor |
rofi | Application launcher |
emacs | Text editor with custom configuration |
git | Version control system |
python3-yamlfix | Yamlfix tool for YAML fixing |
btop | Resource monitor |
mpv | Media player |
sudo apt install xmonad xmobar libghc-xmonad-dev libghc-aeson-dev alacritty fish feh picom rofi emacs git python3-yamlfix btop mpv
To install the configuration files, run:
./install.sh
or use the new install.ml program (work in progress) which will eventually replace install.sh.
I use several xmobar panel configurations for different setups/screens:
- big_screen_config.hs
- laptop_bottom_config.hs
- laptop_top_config.hs
- small_screen_bottom_config.hs
- small_screen_top_config.hs
This repo contains a full Emacs setup tailored for coding and note-taking.
Highlights include:
- use-package-based package management with deferred loading.
- LSP support with Eglot configured for C, C++, Haskell, YAML, and more.
- Custom handling to disable Eglot on cabal.project.* files (like cabal.project.dev) because HLS does **not** support them, avoiding false error messages.
- Undo-tree for undo history management.
- Treemacs for project file tree browsing.
- Projectile for project management.
- Rainbow delimiters and rainbow mode for better syntax visualization.
- Multiple language modes: Haskell, Markdown, Fish, PHP, YAML, Vimscript, OCaml (tuareg).
- Custom keybindings and settings for Haskell development, including compilation and testing helpers.
- A cozy pink theme.
I include fish-mode and vimrc-mode in Emacs because sometimes I need to edit Vim and Fish configuration files directly in Emacs. This allows me to edit those config files (.vimrc and fish config) with proper syntax highlighting and editing support inside Emacs while keeping those files versioned in this repo.
- Custom my-hls-wrapper.sh script improves integration and flexibility with Haskell Language Server.
- Automatically disables Eglot management on cabal.project.* files (e.g. cabal.project.dev) because HLS does **not** support them, preventing numerous erroneous error messages.
- Fine-tuned performance and error display settings such as autoshutdown, autoreconnect, and eldoc delay.
- Customized keybindings for quick access to common LSP features.
- Enhanced markup formatting supporting markdown math for better documentation experience.
- I avoid initializing Git repositories directly in my home directory to keep it clean and uncluttered. Instead, all config files are managed inside this dotfiles repository, and symlinked from there to their appropriate locations (mostly under ~/.config/). This setup allows easy version control, centralized management, and a tidy home directory.
- Emacs configuration, along with all other software configurations, is kept organized in separate folders within this repository for clarity and maintainability.
- The install.ml script is a future plan to replace install.sh and unify installation logic.