Skip to content

My dotfiles setup for tmux zsh neovim and wezterm

Notifications You must be signed in to change notification settings

sa-akhavani/dotfiles

Repository files navigation

My Developr Setup Dotfiles

Welcome to my GitHub repository where I share my developer setup and dotfiles. I've designed this environment to be fast, minimal, and feature-packed, yet aesthetically pleasing. I have optimized this setup for my software engineering and devops projects. I went through HOURS of pain to come up with this config so you don't have to!

Overview

Tool / Environment Description
OS Arch Linux
Terminal kitty
Multiplexer tmux
Text Editor nvim
Shell fish-shell
Prompt Theme starship
Window Manager Hyprland
Display Manager ly
Notification Daemon Mako
System Info Tools neofetch, btop
Screen Locker swaylock
Status Bar waybar
File Manager yazi, thunar
App Launcher fuzzel

Installation

To replicate my setup:

  1. Install Arch Linux: Follow the official installation guide for desktop profiles.
  2. Clone this repository:
  3. Run installation script:
  4. Copy repo config files to local config:
git clone https://github.com/sa-akhavani/dotfiles.git && cd dotfiles
chmod +x ./install.sh
./install.sh
cp -r ./.config/* ~/.config/
cp -r ./etc/* /etc/

Setup

Arch Linux

I was an Ubuntu user for a long time (7+ years). I eventually decided to migrate to Arch Linux to be able to control every single aspect of my os and also improve my linux knowledge. I love Arch's lightweight nature. Fits perfectly with my minimalistic approach. Arch's package manager, pacman, and AUR are a blessing! you have to use it to see how good this is!

Hyprland (Wayland)

Now that Wayland is becoming stable and lots of people are creating packages for it, Hyprland is an amazing tiling window manager for wayland. It's highly customizablity and native Wayland support significantly enhance my workflow compared to traditional X11 setups. It's time to put X11 to rest. Also, it is better than Sway in my opinion.

Display Manager (Ly)

I Have tried KDE and GNOME display managers in Ubuntu and Kubuntu But both of them are extremely bloated. So I chose Ly as my display manager, keeping everything minimal.

Shell and Prompt Engine (Fish, Starship, ZSH)

Fish

  • Fish: Smart and user-friendly command line shell. Includes syntax highlighting, autosuggest-as-you-type, fancy tab completions
  • Starship: Minimal, blazing-fast, and customizable prompt for any shell!
  • ZSH (Alternative to Fish): Unix shell with tons of quality of life features.

Terminal and Multiplexer (Wezterm, Tmux, Kitty)

Wezterm

  • Wezterm: a GPU-Accelared cross-platform terminal emulator that supports font ligatures
  • Tmux: Highly customizable terminal multiplexer
  • Kitty (Alternative to Wezterm): Cross-platform, fast, feature-rich, GPU based terminal.

Editor (Neovim)

  • My go-to editor is Neovim, a Vim-based powerhouse equipped with thousands of plugins and features. It strikes a balance between functionality and efficiency that I'm proud to use.
  • I mainly use Neovim but I also use other IDEs if I am working on a project with a huge codebase. I am not crazy :D
  • I spent a lot of time coming up with something that is not bloated but a ton of features and am very proud of this config.

WIP

Waybar

Fonts

  • Fix browser font
  • Figure out how mono fonts issues are solved and which font to use

Misc

Cava in Waybar

  • waybar-git package in AUR has set cava to be disabled. So you either have to clone the AUR git repo and build it using mkpkg OR clone the github repo and build it using that. Alexays/Waybar#2781 (comment)

  • Don't forget to regularly check for updates!

  • Also before that, you MIGHT need to fully remove / or install libcava and cava from your system.

yay -R cava libcava
sudo rm -rfv /usr/lib/libcava.so
sudo rm -rfv /usr/lib64/libcava.so
sudo rm -rfv /usr/lib/pkgconfig/cava.pc
sudo rm -rfv /usr/lib64/pkgconfig/cava.pc
sudo rm -rfv /usr/include/cava
yay -S libcava
cd /tmp
git clone https://aur.archlinux.org/waybar-git.git
cd waybar-git
vim PKGBUILD
# change Dcava=diabled -> Dcava=enabled
# add Dmpd=enabled
makepkg
# Then install it using:
pacman -U <output_package_name>

Cava using microphone

  • Make sure to set method to pipewire. fot method DO NOT use alsa
  • For the source, it will automatically try to get it from the output
  • If not, use wpctl status, then under Audio, Sinks, Pick the number that represents the speaker. Or use pactl list sources and in the output, find the speaker and use its number as the value of the source
  • https://github.com/karlstav/cava?tab=readme-ov-file#pipewire
  • karlstav/cava#422 (comment)
  • You can check and monitor it using coppwr OR helvum

Wrong temperature in waybar

cat /sys/class/thermal/thermal_zone*/temp
# To see what zones the temperatures are referring to use:
paste <(cat /sys/class/thermal/thermal_zone*/type) <(cat /sys/class/thermal/thermal_zone*/temp) | column -s $'\t' -t | sed 's/\(.\)..$/.\1°C/'
INT3400 Thermal  20.0°C

NVM in fish

Setting up nvm in fish is a pain. These are some resources that help.

Neovim and Tmux

I should read this: https://www.bugsnag.com/blog/tmux-and-vim/

Spotify (Linux)

While setting up the Spotify client for Linux, I encountered a few quirks. If you're using NetworkManager with iwd together (don't do that:D), you have to stop NetworkManager service to be able to use spotify.

Also, hyprland windows don't have a menu. bar. To toggle offline mode, you can press Ctrl-Shift-o.

For more troubleshooting tips, check out these resources:

Fonts

I use FiraCode font mainly. Do not install patched nerdfonts. I install FiraCode alone, then install Symbols Nerd Font Mono separately from their releases. check: https://github.com/ryanoasis/nerd-fonts/releases

sudo pacman -S ttf-fira-code ttf-nerd-fonts-symbols-mono

Three Finger Drag Gesture

You need to install ydotool and fusuma and configure them. fusuma config is in .config/fusuma/ folder Make sure NOT to give sudo permission to ydotool at all!

if adding stuff to hyprland didn't work do this: systemctl --user enable ydotool.service systemctl --user start ydotool.service

if this also didn't work try this: iberianpig/fusuma#173