A unified, reproducible dotfiles setup for Arch Linux (CachyOS) featuring:
- Niri window manager (Wayland compositor)
- default unified theme system
- Mako notification daemon
- Waybar status bar
- Fish shell with Starship prompt
- One-command reproducible setup via
yayand declarative package lists
git clone https://github.com/abbesm0hamed/dofs.git ~/dofs
cd ~/dofs./install.shThis will:
- Ensure
yayis installed - Install all packages from lists (system, desktop, wayland, etc.)
- Stow all dotfiles to
~/.config - Apply the unified default theme
- Enable the Niri session in your display manager
Time: ~15-20 minutes
rebootThis setup includes:
- âś… xwayland-satellite for X11 app compatibility (Discord, Steam, etc.)
- âś… xdg-desktop-portal-gnome for better screen sharing
- âś… greetd-tuigreet dispaly manager
- âś… optimized autostart with proper service ordering
- âś… One command installs everything
- âś… Automatic validation before completion
- âś… Declarative package management
- âś… Reproducible setup
- Base development tools, git, network manager
- Fish shell, Starship prompt
- Bluetooth, SSH, power management tools...
- Node.js (fnm), Python, Rust, Go
- Docker, Kubernetes, Terraform
- Neovim, code quality tools, debuggers...
- Chromium, Zen Browser
- Nautilus file manager
- Slack, Discord
- Zathura PDF viewer
- And many more...
- Niri compositor
- Waybar status bar
- Mako notifications
- Screenshot, recording, clipboard tools
# List available themes
dofs/scripts/theme-manager.sh list
# Apply a theme
dofs/scripts/theme-manager.sh set default
# Check current theme
dofs/scripts/theme-manager.sh currentEdit the relevant file in packages/:
# Add to development tools
echo "my-new-package" >> packages/development.txt
# Reinstall
./install.sh# Copy existing theme
cp -r .config/theme/default .config/theme/my-theme
# Edit colors in my-theme/theme.toml
vim .config/theme/my-theme/theme.toml
# Apply the theme
bash scripts/theme-manager.sh set my-themeEdit .config/niri/config.kdl and reload:
niri msg action reload-config- Check if Wayland is supported:
echo $WAYLAND_DISPLAY - Verify Niri is installed:
which niri - Check logs:
journalctl -u niri
- Ensure theme files exist:
ls .config/theme/default/ - Manually apply:
bash scripts/theme-manager.sh set default - Check Waybar reload:
pgrep waybar
- Ensure yay is installed:
which yay - Check internet connection
- Try manual install:
yay -S package-name
| Keybinding | Action |
|---|---|
Mod + h/j/k/l |
Focus left/down/up/right |
Mod + Shift + h/j/k/l |
Move window left/down/up/right |
Mod + f |
Toggle maximized |
Mod + equal |
Resize window (+ width) |
Mod + minus |
Resize window (- width) |
| Keybinding | Action |
|---|---|
Mod + (1-9) |
Switch to workspace 1-9 |
Mod + Shift + (1-9) |
Move window to workspace 1-9 |
Mod + Tab |
Toggle overview |
| Keybinding | Action |
|---|---|
Mod + Return |
Launch Ghostty |
Mod + P |
Launch Fuzzel |
Alt + Z |
Launch Zen Browser |
Alt + E |
Launch Nautilus |
Alt + Ctrl + L |
Launch Swaylock |
| Keybinding | Action |
|---|---|
XF86AudioRaiseVolume |
Volume up |
XF86AudioLowerVolume |
Volume down |
XF86AudioMute |
Toggle mute |
| Keybinding | Action |
|---|---|
Mod + Shift + q |
Close window |
Mod + Shift + e |
Quit Niri (Logout) |
| Key Combination | Action |
|---|---|
Super + Shift + Z |
Create Screenshots directory |
Alt + Super + S |
Active window screenshot |
Alt + Shift + S |
Full screenshot |
Ctrl + Alt + S |
GUI selection tool |
All screenshots are automatically saved to ~/Pictures/Screenshots and copied to clipboard.
| Key Combination | Action |
|---|---|
Super + b |
Open Brave browser |
Super + g |
Open Google Chrome |
Super + enter |
Kitty |
Alt + enter |
Wezterm |
Alt + Ctrl + enter |
Ghostty |
Alt + Ctrl + t |
Alacritty |
The following are the custom keybindings configured for Neovim:
| Keybinding | Mode | Description |
|---|---|---|
<Space> |
All | Leader key |
<leader>w |
Normal | Save file |
J |
Visual | Move line down |
K |
Visual | Move line up |
jk |
Insert | Exit insert mode (ESC) |
<leader>q |
Normal | Quit Neovim |
+ |
Normal | Increment number |
- |
Normal | Decrement number |
<C-a> |
Normal | Select all text |
< / > |
Visual | Indent/Unindent selection |
te |
Normal | New tab |
<leader>sh |
Normal | Split window horizontally |
<leader>sv |
Normal | Split window vertically |
<C-h/j/k/l> |
Normal | Navigate between splits |
<leader>th |
Normal | Change splits to horizontal |
<leader>tk |
Normal | Change splits to vertical |
<C-Up/Down/Left/Right> |
Normal | Resize window |
<Tab> / <S-Tab> |
Normal | Next/Previous buffer |
<leader>x |
Normal | Close buffer |
<A-p> |
Normal | Pin buffer |
<leader>co |
Normal/Visual | Toggle comment |
<leader>ff |
Normal | Telescope find files |
<leader>fg |
Normal | Telescope live grep |
<leader>fr |
Normal | Telescope recent files |
<leader>fb |
Normal | Telescope buffers |
<leader>S |
Normal | Toggle Spectre |
<leader>sw |
Normal/Visual | Search current word |
<leader>sp |
Normal | Search in current file |
| Keybinding | Mode | Description |
|---|---|---|
ga |
Normal | Stage hunk |
ga |
Visual | Stage selection |
gA |
Normal | Stage entire buffer |
<leader>gv |
Normal | Toggle deleted lines view |
<leader>ua |
Normal | Undo last stage |
<leader>uh |
Normal | Reset hunk |
<leader>ub |
Normal | Reset buffer |
<leader>ob |
Normal | Toggle git blame |
gh |
Normal | Next hunk |
gH |
Normal | Previous hunk |
gh |
Visual/Operator | Select hunk |
| Keybinding | Mode | Description |
|---|---|---|
<leader>q |
Normal | Close DiffView |
<leader>ch |
Normal | Choose current version in conflict |
<leader>cl |
Normal | Choose incoming version in conflict |
<leader>cb |
Normal | Choose base version in conflict |
<leader>ca |
Normal | Choose all versions in conflict |
<leader>cx |
Normal | Choose none in conflict |
do |
Normal | Get diff from other file |
dp |
Normal | Put diff to other file |
j/k |
Normal | Navigate entries in file panel |
<cr> |
Normal | Select entry in file panel |
| Keybinding | Mode | Description |
|---|---|---|
<C-p> |
Normal | Copy file path (with ~) |
<C-t> |
Normal | Copy relative path |
<C-n> |
Normal | Copy filename |
<C-r> |
Normal | Rename file |
<D-m> |
Normal | Move file |
<leader>x |
Normal | Make file executable (chmod +x) |
<A-d> |
Normal | Duplicate file |
<D-BS> |
Normal | Move file to trash |
<D-n> |
Normal | Create new file |
X |
Visual | Move selection to new file |
- |
Normal | Open parent directory (Oil) |
| Keybinding | Mode | Description |
|---|---|---|
gcc |
Normal | Toggle line comment |
Q |
Normal | Comment at end of line |
qO |
Normal | Comment above |
qo |
Normal | Comment below |
<leader>ut |
Normal | Toggle Undotree |
<leader>tp |
Normal | Toggle Puppeteer |
<leader>tj |
Normal | Toggle split/join lines |
<leader>tJ |
Normal | Split line (markdown, applescript) |
| Keybinding | Mode | Description |
|---|---|---|
gsa |
Normal/Visual | Add surrounding |
gsd |
Normal | Delete surrounding |
gsf |
Normal | Find surrounding (right) |
gsF |
Normal | Find surrounding (left) |
gsh |
Normal | Highlight surrounding |
gsr |
Normal | Replace surrounding |
gsn |
Normal | Update surrounding lines |
| Keybinding | Mode | Description |
|---|---|---|
<leader>ou |
Normal | Toggle outline |
<Esc>, q |
Normal | Close outline |
<CR> |
Normal | Go to location |
o |
Normal | Focus location |
<C-space> |
Normal | Hover symbol |
K |
Normal | Toggle preview |
r |
Normal | Rename symbol |
a |
Normal | Code actions |
h |
Normal | Fold |
l |
Normal | Unfold |
W |
Normal | Fold all |
Note: This is not an exhaustive list. There are more keybindings available in other plugins. Check the plugin documentation for more details.
Press ALT + L to open the power menu, which provides options for:
- Logout
- Reboot
- Hibernate
- Sleep
- Keyboard Layout: Toggle between US and Arabic layouts using
Super + Alt + Shift + Space - Auto-tiling: Dynamic tiling layout
- Workspace Auto Back and Forth: Enabled
- Smooth Animations: Advanced animation system