This is my personal configuration for my favorite openbox window manager and some applications too.
I hope you understand everything here. 😉
Here are some details about my setup
- Window Manager • Openbox 🎨 4 changable mode!
- Display Manager • SLiM 🌼 beautiful UI! deprecated
- Shell • Zsh 🐚 with oh my zsh framework! optional
- Terminal • URxvt, Termite available
- Openbox Menu • Obmenu-generator
- Panel • Tint2 🍧 material icon font!
- Compositor • Picom 🍩 rounded corners!
- Notify Daemon • Dunst 🍃 minimalism!
- Application Launcher • Rofi 🚀 blazing fast!
- File Manager • Thunar 🔖 customized sidebar & icon!
- GUI & CLI IDE • Geany, Neovim
v3.0
-
Visual Mode:
- Both modes (minimal) have their own window button styles, margins, sidebar rofi, and dunst layouts.
- Removed eyecandy tint2 from Joyful Desktop v2
- Better Tint2 (added temp executor, etc.)
- Added rotation mode (crossover, except minimal mode.)
-
Major Changes:
- Removed SLiM sync background, custom slim themes, and unnecessary files/config.
- All scripts are reproduced all with central variables in one file.
- Reverse terminal background and foreground (urxvt/termite)
- Nvim Config - Thanks to @elenapan
- SLiM Themes (optional) - See here
- URxvt Font Resizer - See keybinds
- Included Networkmanager_dmenu
- Oh My ZSH Theme - Rounded
- Rofi v1.6.0 Supported
- New Ncmpcpp UI
- Neofetch Images
- New Wallpapers
v3.1
- Screenshot Script: Rounded corners, quality, shadows.
- Terminal UI improvements, particularly font size
- Bug fixes and improvements keep looking
- Rounded picom as default
- New Wallpapers
This is how to install these dotfiles for automatic settings OpenboxWM custom environment.
Adjust your choice about dependencies below, this is my complete setup as I use single OpenboxWM with multimedia application that I use.
Detailed environment
Please refer to wiki/Detailed-Environment.
Debian & Ubuntu (and all based distributions)
$ sudo apt install rsync python psmisc imagemagick ffmpeg wireless-tools openbox alsa-utils brightnessctl nitrogen dunst tint2 gsimplecal rofi qt5-style-plugins lxpolkit xautolock rxvt-unicode xclip scrot thunar thunar-archive-plugin thunar-media-tags-plugin thunar-volman ffmpegthumbnailer tumbler viewnior mpv mpd mpc ncmpcpp pavucontrol parcellite neofetch w3m w3m-img htop playerctl xsettingsd
oh-my-zsh & plugins optional
$ sudo apt install zsh
$ chsh -s `which zsh` # Change default shell to zsh for current user
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
$ git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
$ git clone https://github.com/zsh-users/zsh-completions.git ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
picom
$ sudo apt install libxext-dev libxcb1-dev libxcb-damage0-dev libxcb-xfixes0-dev libxcb-shape0-dev libxcb-render-util0-dev libxcb-render0-dev libxcb-randr0-dev libxcb-composite0-dev libxcb-image0-dev libxcb-present-dev libxcb-xinerama0-dev libxcb-glx0-dev libpixman-1-dev libdbus-1-dev libconfig-dev libgl1-mesa-dev libpcre2-dev libevdev-dev uthash-dev libev-dev libx11-xcb-dev
$ git clone https://github.com/yshui/picom.git && cd picom/
$ git submodule update --init --recursive
$ meson --buildtype=release . build
$ ninja -C build
$ ninja -C build install
obmenu-generator
I haven't tested it yet.
$ sudo su
echo 'deb http://download.opensuse.org/repositories/home:/Head_on_a_Stick:/obmenu-generator/Debian_10/ /' > /etc/apt/sources.list.d/home:Head_on_a_Stick:obmenu-generator.list
wget -nv https://download.opensuse.org/repositories/home:Head_on_a_Stick:obmenu-generator/Debian_10/Release.key -O Release.key
apt-key add - < Release.key
apt update
apt install obmenu-generator libgtk2-perl
Arch Linux (and all based distributions)
$ yay -S rsync python psmisc imagemagick ffmpeg wireless_tools openbox alsa-utils brightnessctl nitrogen dunst tint2 gsimplecal rofi qt5-styleplugins lxsession xautolock rxvt-unicode-patched xclip scrot thunar thunar-archive-plugin thunar-media-tags-plugin thunar-volman ffmpegthumbnailer tumbler viewnior mpv mpd mpc ncmpcpp pavucontrol parcellite neofetch w3m htop picom-git obmenu-generator gtk2-perl playerctl xsettingsd
oh-my-zsh & plugins optional
$ sudo pacman -S zsh
$ chsh -s `which zsh` # Change default shell to zsh for current user
$ sh -c "$(curl -fsSL https://raw.githubusercontent.com/ohmyzsh/ohmyzsh/master/tools/install.sh)"
$ git clone https://github.com/zsh-users/zsh-syntax-highlighting.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-syntax-highlighting
$ git clone https://github.com/zsh-users/zsh-autosuggestions.git ${ZSH_CUSTOM:-~/.oh-my-zsh/custom}/plugins/zsh-autosuggestions
$ git clone https://github.com/zsh-users/zsh-completions.git ${ZSH_CUSTOM:=~/.oh-my-zsh/custom}/plugins/zsh-completions
Another Linux Distribution
Customize/port dependencies yourself!
For example
If it's not there, compile it manually from git source code or from elsewhere.
Optional: betterdiscord, geany + geany plugins, gimp, lxappearance, nano + nano syntax highlighting, neovim, obconf, slim, spotify, termite, xfce4-power-manager.
Suggested replacement commands
-
ls
➜exa
... 130 alias ls="exa -lgh --icons --group-directories-first" 131 alias la="exa -lgha --icons --group-directories-first" ...
-
cat
➜bat
... 146 export BAT_THEME="base16"
Most of .files
You can clone or download it as a zip. After that put all files in the dotfiles folder to user's home directory.
$ git clone https://github.com/owl4ce/dotfiles.git && cd dotfiles/
I recommend with rsync.
$ rsync -avxHAXP --exclude '.git*' .* ~/
Explanation
Options Function -a all files, with permissions, etc.. -v verbose, mention files -x stay on one file system -H preserve hard links (not included with -a) -A preserve ACLs/permissions (not included with -a) -X preserve extended attributes (not included with -a) -P show progress --exclude exclude files matching PATTERN Differences
cp
is for duplicating stuff and by default only ensures files have unique full path names.rsync
is for synchronising stuff and uses the size and timestamp of files to decide if they should be replaced. It has many more options and capabilities thancp
.I recommend not deleting dotfiles folder after cloning from this repository, because to make upgrades easier. Read the update section.
Icons
$ cd ~/.icons && tar -Jxvf Papirus-Custom.tar.xz && tar -Jxvf Papirus-Dark-Custom.tar.xz
$ sudo ln -s ~/.icons/Papirus-Custom /usr/share/icons/Papirus-Custom
$ sudo ln -s ~/.icons/Papirus-Dark-Custom /usr/share/icons/Papirus-Dark-Custom
Why I need to link icons to user system resources?
That's needed by dunst in order to display most of icon from notification that spawned by application.Why not just move it directly to user system resources?
Actually it's up to you, but I recommend sticking to~/.icons
plus link to/usr
because I'm using Arch on top of other linux distributions with same homedir. More effective than copying icons to both roots.
Refresh Font Cache
$ fc-cache -rv
Root Privileges with SUID
poweroff
reboot
brightnessctl
- others if needed
$ sudo chmod u+s `which {poweroff,reboot,brightnessctl}`
For
brightnessctl
I recommend adding users to video group.
The final step is login into openbox-session, basically login from display manager you use such as lightdm, gdm, etc. If you are using ~/.xinitrc
, simply add
Systemd Linux Distribution
exec openbox-session
Non-Systemd Linux Distribution
exec dbus-launch --exit-with-session openbox-session
Since I suggested using rsync from start, the easiest way is to list the files that will not be updated to avoid changing personal files with files in this repository. First, update local repository with git repository.
$ cd dotfiles/ && git pull
Then list the files excluded by rsync. For example,
~/rsync_exfiles
1 .git*
2 .lyrics
3 mpd.state
4 current-track
5 .zshrc
6 .nanorc
7 nvim
8 mpv
...
and whatever the file is. Next, of course is rsync.
$ rsync -avxHAXP --exclude-from ~/rsync_exfiles .* ~/
-
SLiM Themes optional
-
Chromium-based web browser suggested
-
Spotify - Spicetify Theme suggested
-
Battery Indicator optional
Because on the tint2 panel I turned off battery status. Alternatively, installxfce4-power-manager
and enable system tray icon inxfce4-power-manager-settings
, then relogin openbox-session. -
Dunst Notification Action - Default Web Browser
middle click
~/.config/dunst/dunstrc-mech
~/.config/dunst/dunstrc-mech-MINMOD
~/.config/dunst/dunstrc-eyc
~/.config/dunst/dunstrc-eyc-MINMOD
... 42 browser = brave-bin ...
-
URxvt - Default Web Browser
middle click
... 63 URxvt.url-select.launcher: brave-bin ...
-
URxvt - Application Icon
~/.Xresources
... 17 URxvt.iconFile: /home/username/.icons/gladient/term.png ...
-
URxvt - Transparent Background optional
If you want to turn on transparency on urxvt, follow this step.
... 15 URxvt.depth: 32 ... 68 #define black0 [90]#373E4D ... 84 #define white0 [90]#F9F9F9 ...
[90]
is the opacity level that will be applied to urxvt. After that do this to reload configuration.$ xrdb ~/.Xresources
The issue is when displaying an image from pixmap (pixbuf) it becomes completely transparent except for internalBorder. So if you don't use ncmpcpp albumart, you can ignore it.
-
Global Variables
~/.owl4ce_var
... 95 #-------------------------------------------------------------------------# 96 # TINT2 EXECUTOR # 97 #-------------------------------------------------------------------------# 98 99 INT_ETH="enp4s0" 100 INT_WIFI="wlp3s0" 101 TEMP_DEV="thermal_zone0" 102 103 #-------------------------------------------------------------------------# 104 # SCREENSHOT OPTIONS # 105 #-------------------------------------------------------------------------# 106 # This will create "Screenshots" folder inside SAVE_DIR # 107 #-------------------------------------------------------------------------# 108 109 TIMER_SEC="5" 110 SAVE_DIR="$HOME/Pictures" 111 FRAME_COLOR="#ffffff" # RGBA supported 112 COPY_FRAMED="yes" # Copy the latest framed screenshot to clipboard 113 OPEN_FRAMED="no" # Open after framed screenshot with viewnior (if exist) 114 FRAMED_SHADOW_OPACITY="25" # 0-100, high value means thick shadows 115 QUALITY="100" # 1-100, high value means high size with low compression 116 117 #-------------------------------------------------------------------------# 118 # XAUTOLOCK - 5 means 5 minutes # 119 #-------------------------------------------------------------------------# 120 121 AUTOLOCK_MINUTE="5" 122 123 #-------------------------------------------------------------------------# 124 # BRIGHTNESS & AUDIO (pulseaudio) VOLUME STEPS LEVEL # 125 #-------------------------------------------------------------------------# 126 127 AUDIO_STEPS="5" # Real value 128 BRIGHTNESS_STEPS="5" # Percentage, 5 means 5%
TEMP_DEV: Check here
/sys/devices/virtual/thermal/
-
Available Default Apps
~/.scripts/default-apps/list
- Terminal: urxvt/termite
- Lockscreen: anything
- Music Player: mpd/spotify
- File Manager: anything
1 terminal="urxvt" 2 lockscreen="slimlock" 3 musicpl="mpd" 4 filemanager="thunar"
-
Tray Icons
~/.config/openbox/tray
An example is turning onnm-applet
, because by default I don't use it and use networkmanager_dmenu instead. Remove hashtags before nm-applet.1 # 2 # This tray will restart after changing visual mode 3 # Please add "&" after command 4 # 5 # --- 6 7 parcellite & 8 #nm-applet &
-
Neovim
~/.config/nvim/
You know what to do with Vim-plug. -
MPD Music Directory
~/.mpd/mpd.conf
... 6 music_directory "~/Music" ...
-
Ncmpcpp Music Directory
Auto connect with MPDHow to use ncmpcpp albumart?
It's easy, putalbum|cover|folder|artwork|front.jp?g|png|gif|bmp
into folder with song album. Recommended image size is 500px ( 1:1 ) or more. See keybinds -
Audio Server optional
~/.config/openbox/autostart
This is optional for Linux distributions that don't use systemd as their init, actually pulseaudio can be triggered from increasing-decreasing audio volume.-
Pulseaudio
... 9 # there was once a pulseaudio here 10 pulseaudio --start --log-target=syslog &> /dev/null & ...
Or if you use pipewire as pulseaudio.
-
Pipewire as Pulseaudio
More details at ArchWiki / Gentoo Wiki.
Make sure pulseaudio is uninstalled or disable autospawn.
/etc/pulse/client.conf
... 25 autospawn = no ...
... 9 # there was once a pulseaudio here 10 pipewire &> /dev/null & ...
-
-
Neofetch Image
~/.config/neofetch/config.conf
... 641 # Image Source 642 # 643 # Which image or ascii file to display. 644 # 645 # Default: 'auto' 646 # Values: 'auto', 'ascii', 'wallpaper', '/path/to/img', '/path/to/ascii', '/path/to/dir/' 647 # 'command output (neofetch --ascii "$(fortune | cowsay -W 30)")' 648 # Flag: --source 649 # 650 # NOTE: 'auto' will pick the best image source for whatever image backend is used. 651 # In ascii mode, distro ascii art will be used and in an image mode, your 652 # wallpaper will be used. 653 #image_source="auto" 654 #image_source="${HOME}/.config/neofetch/images/arch.png" 655 #image_source="${HOME}/.config/neofetch/images/arch_dark.png" 656 #image_source="${HOME}/.config/neofetch/images/artix.png" 657 #image_source="${HOME}/.config/neofetch/images/bedrock.png" 658 #image_source="${HOME}/.config/neofetch/images/gentoo.png" 659 #image_source="${HOME}/.config/neofetch/images/gentoo_dark.png" 660 image_source="${HOME}/.config/neofetch/images/lofi.png" 661 #image_source="${HOME}/.config/neofetch/images/ubuntu.png" 662 #image_source="${HOME}/.config/neofetch/images/ubuntu_dark.png" 663 #image_source="${HOME}/.config/neofetch/images/void.png" 664 #image_source="${HOME}/.config/neofetch/images/void_dark.png" ...
Please don't underrate, I've configured them all since April 2020 and have been stuDYING them since October 2019. Awesome open-source. If you support it, star it or make a PR. Or if there is a problem with configuration you can make an issue here.
Thank you!
Feel free to modify.. under GPL-3.0
-
Inspiration and resources
-
Knowledge and other resources
-
Contributors
-
Softwares
-
Our local linux community Linuxer Desktop Art, @dotfiles_id, and r/unixporn.
-
© All artists who make icons, illustrations, and wallpapers.