Skip to content

webdevred/dotfiles

Repository files navigation

Dotfiles Configuration

This repository contains my personal dotfiles for managing my environment, including XMonad, terminal, shell, and Emacs configurations.

Overview

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.

Managed Software

These are the main software packages managed and configured here, tested mainly on Ubuntu:

SoftwareDescription
xmonadWindow manager
xmobarStatus bar
xmonad-contribExtra xmonad modules
AesonJSON parsing library (used for PulseAudio sink switcher)
alacrittyTerminal emulator
fishShell
fehWallpaper setter
picomCompositor
rofiApplication launcher
emacsText editor with custom configuration
gitVersion control system
python3-yamlfixYamlfix tool for YAML fixing
btopResource monitor
mpvMedia player

Installing dependencies on Ubuntu

sudo apt install xmonad xmobar libghc-xmonad-dev libghc-aeson-dev alacritty fish feh picom rofi emacs git python3-yamlfix btop mpv

Installation

To install the configuration files, run:

./install.sh

or use the new install.ml program (work in progress) which will eventually replace install.sh.

Xmobar Panels

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

Emacs Configuration

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.

Vimscript and Fish Mode

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.

Extra benefits of my HLS + Eglot setup

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

Notes

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

About

No description, website, or topics provided.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published