- Introduction
- Overview
- Installation
- Anime Wallpapers
- Virtualization
- Configuration Files
- BSPWM Mouse
- Keyboard Shortcuts
- Theme
- References
Note: This projects was originally started by nozerobit, but got transferred. It's currently maintained by @m4nqn.
A truly colorful linux configuration.
This is my first dotfiles, feel free to use it but don't forget to give me credits @nozerobit.
History:
- 2021: kali-config
- 2021: colorful-kali
- 2022: colorful-dotfiles
- 2022: Colorful (last name)
- 2023: Ownership transfer
Note: Last tested on
Kali GNU/Linux Rolling 2022.3
usingXfce
withlightdm
: 11/27/2022
The installation section will guide you through a step-by-step installation process.
This setup uses the following software:
- WM: bspwm
- Hotkey: sxhkd
- Locker: i3lock-fancy
- Menu: jgmenu
- Notifications: dunst
- Shell: zsh
- Bars: polybar
- Compositor: picom (yshui)
- File Manager: thunar
- Font Terminal: iosevka
- Application Launcher: rofi
- Browsers: firefox
- Terminals: kitty (for aesthetics) and qterminal (for pen-testing)
- Static Wallpaper: feh
- Live Wallpaper: gpu-video-wallpaper
All the features can be seen in the overview section.
Note: This section contains highly compressed / low-quality GIFs, in reality is not blurry and grainy.
Normally you would use Windows + Alt + R
to reload bspwm in order to fix the wallpaper resolution scale and the polybar when changing screen resolution but I have made a script with xeventbind and a polybar configuration so that you don't have to reload bspwm. In other words, it automatically changes the wallpaper and the polybar resolution/size when changing the screen resolution without the need to reload bspwm:
Note: The color of these bars is dynamic and the colors change according to the wallpaper.
Transparent theme created by @nozerobit (me):
Colorblocks theme (default), theme created by @adi1090x and heavily modified by @nozerobit (me):
Some polybars themes have audio volume modules. The volume can be adjusted with the mouse wheel.
You can change the polybar theme with the launcher:
❯ change-polybar
Usage: change-polybar --theme
Available Themes:
--colorblocks
--trans
Here is an example:
change-polybar --trans
Some polybars are slower to load than others so it is recommended to kill the polybar first:
killall polybar; change-polybar --colorblocks
If you want to change the default polybar theme you can use the default-polybar
script:
❯ default-polybar
Usage: default-polybar <theme_name>
Example: default-polybar trans
The available polybar themes are the following:
colorblocks
trans
Change the polybar theme:
❯ default-polybar trans
[+] Changing the default polybar theme to: trans
[+] Resetting BSPWM configuration
[+] Success: Your default polybar theme is now set to 'trans'
You can use Windows + Alt + W
to shuffle wallpapers and change colors on the fly:
Note: In the weird case that the polybar dies, you can use
Windows + Alt + R
to restart BSPWM. Some polybars themes do take more time to load since they use more scripts and icons. The polybarhack
theme is the slowest. The polybarforest
theme is not supported.
Warning: Avoid spamming this keyboard shortcut.
Alternatively, you could use Windows + Alt + E
to change to a specific wallpaper using the GUI:
Alternatively, you can use Windows + Alt + X
to select the wallpaper with a preview, then hit Ctrl + x
and then W
to change the wallpaper. Once the wallpaper is set we can close the program with Windows + W
:
We can also use live wallpaper / animated wallpapers with vwallpaper
(demo script):
vwallpaper --start ~/Videos/wallpapers-animated/Cyberpunk-2077-City-Live-Wallpaper.mp4 &>/dev/null & disown
We can stop the live wallpaper / animated wallpapers with the following:
vwallpaper --stop
Warning: If the wallpaper doesn't have the correct resolution, you can change it by editing:
sudo vim $(which video-wallpaper.sh)
Then change the resolution at line 60:
# Change -g <TO_YOUR_RESOLUTION>
"$scriptdir"/xwinwrap -g 3840x2160 -fdt -ni -b -nf -un -o 1.0 -- mpv -wid WID --loop --no-audio "$VIDEO_PATH" & disown
I'll try to find a better solution but for now that should do the work.
Warning: Transparency should work by default in native installs as long as you have the GPU drivers installed in your system. In most virtual machines that are using virtualized GPUs you will have to set X11 as the video output. If your virtualization software supports GPU passthrough then you may not have to change anything, unless you want to select a specific video output driver.
If you want to add transparency to a VM add the following flags:
-vo x11 --hwdec=auto-safe --profile=sw-fast
Warning: This may increase the CPU usage up to 15%-25% in VMs.
If you don't care about the performance then you can follow this example:
xwinwrap -g 1920x1080 -fdt -ni -b -nf -un -o 1.0 -- mpv -wid WID -vo x11 --hwdec=auto-safe --profile=sw-fast --loop --no-audio ~/Videos/wallpapers-animated/Astronaut-In-Space-With-Jellyfish-Live-Wallpaper.mp4
You can use htop to monitor the performance of each process:
htop
You will probably see that the Xorg process increases up to 60%-70% when the video output (-vo) is set to x11
in mpv
. Therefore, I don't recommend running this "video output driver".
For more information about video output drivers read the mpv repo vo.rst.
The animated wallpapers also support automatic resizing:
We can close an animated wallpaper with the following command:
video-wallpaper.sh --stop
You could also use Windows + Alt + W
or Windows + Alt + E
to change the wallpaper.
The terminal font size can be changed with Windows + Alt + F
:
Note: When using
qterminal
is recommended to use the GUI preferences window instead. Also, you need to open a new terminal to see the changes.
You can change the corners of the windows and the polybar to rounded or sharp corners with the shortcut Windows + Alt + B
.
You can also copy IPs to the clipboard with a left click on the bar (ethernet, vpn or target):
Note: There's a VPN status bar, it shows your VPN IP when connected and it tells you when you're disconnected from a VPN.
There's a network bar where you can configure your network:
On zsh you can set the target IP with the command setarget 10.10.10.10
. You can use the command notarget
to remove the target IP:
You can set a default wallpaper that will be used at startup with the following:
❯ default-wallpaper --set ~/Pictures/Wallpapers/i-love-8-bit-qhd-1920x1080.jpg
[+] Added a default wallpaper!
❯ default-wallpaper --remove
[+] Random wallpapers will be set at startup!
Some polybars themes are slower to load than others so it is recommended to kill the polybar first:
killall polybar; default-wallpaper --set ~/Pictures/Wallpapers/i-love-8-bit-qhd-1920x1080.jpg
You can also schedule a cronjob to change your desktop wallpapers and colors every x minutes:
❯ wallpaper-scheduler
Script usage: wallpaper-scheduler [-h] [-e] [-d] [-m <minutes>]
Example:
wallpaper-scheduler -m 5
Options:
-h: Print this help menu.
-e: Enable the cronjob.
-d: Disable the cronjob.
-m: Amount of minutes within the range of (1-59).
This is awesome if you want your system to change your desktop wallpapers automatically every x minutes. This gives it a more "dynamic" feel to your setup.
Warning: If the color palette differ from the console and polybar, just use
Alt+Ctrl+R
to reset the colors.
You can also customize the polybar theme colorblocks:
This is the command for the polybar-changer
help menu:
polybar-changer --help
You can use Windows + Q
to open the power menu:
You can escape or exit the powermenu with the Escape/Esc
key in your keyboard.
If you put the computer to sleep, you can wake it up with the
Escape/Esc
key on your keyboard.
You can also see a preview of each workspace, this is very useful when we want to know which applications or windows are open in each workspace.
Activate the bspwm workspace preview with the keyboard shortcut Ctrl + Alt + P
, then view the workspaces preview with the Windows
key. Then it takes a screenshot of each workspace when you navigate or change the workspace.
Once you're done, you can close the process with Ctrl + Alt + D
or Ctrl + Alt + P
.
Use
Ctrl + Alt + P
to completely de/activate bspwm workspace preview. UseCtrl + Alt + D
to deactivate bspwm workspace preview for the current screen resolution but automatically activate it again when the screen resolution changes.
Create pentesting project directories with mk
:
mk
View the storage (sda) information:
drive
View your system information:
info
Alternatively, you can use neofetch
to view your system information:
neofetch
Kill a process:
kp ssh
Extract nmap ports:
xp filename.gnmap
Identify the operating system:
os 127.0.0.1
You can print the keyboard shortcuts with the script:
shortcuts
Usage: shortcuts [--sxhkd] [--kitty] [--neovim]
--sxhkd: Print sxhkd shortcuts.
--kitty: Print kitty shortcuts.
--neovim: Print neovim shortcuts.
--help: Print this help menu.
Info: Arrows = Left,Up,Down,Right keys
You can enable or disable picom shadows with pshadow
:
pshadow
Usage: pshadow [--enable] [--disable]
--enable: Enable picom shadow.
--disable: Disable picom shadow.
--help: Print this help menu.
In the case that you're in a "bloated" system, you can use the apt-uninstaller
tool:
❯ apt-uninstaller.sh
APT Uninstaller by nozerobit
[i] This script uninstalls APT packages
[i] You can search and select multiple packages
[i] Keyboard Shortcut: Use Tab to select multiple packages
[i] Keyboard Shortcut: Use Ctrl+C to exit
It is recommended to disable sleep because the script can take a while to finish:
These are the installation steps:
- Clone this repo and change the directory:
git clone https://github.com/m4nqn/Colorful && cd Colorful
Warning: Don't run this script as the
root
user. Run it with a user that's in thesudo
group. Also, don't install this script while using GNOME. For some reasonpywal
doesn't change the wallpaper when using GNOME. Here is a temporary solution.
If you copied this project from a Windows system you may want to convert it to unix:
find . -type f -print0 | xargs -0 dos2unix
- Run the installation script from the
colorful-dotfiles
directory:
chmod +x install.sh && ./install.sh
Warning: If a file fails to download then verify if you can download it manually, if you can. You could try running the script again.
If you want to perform a manual installation you can read the script and manually install it step-by-step.
Note: The installation script may work on other Debian-based systems but it is always tested on
Xfce
using Kali Linux.
Warning: Distribution updates and upgrades do sometimes change the dependencies and also other installations steps do change over time so it is a challenge to consistently maintain this installation script compatible for multiple distributions.
The script has four (4) symbols:
[+]
= Success[-]
= Failed[!]
= Information[i]
= Information to solve the error
The installation can take a while because it downloads a lot of things. The time that it takes to finish will depend mostly on your internet download bandwidth provided by your ISP.
- Reboot the machine (required):
reboot || systemctl reboot
- Once you have rebooted the machine, select bspwm as the window manager and then log in.
You can restart bspwm at any time with Windows + Alt + R
, this is useful to fix a WM issue.
That's it, now hit two (2) times the following keyboard shortcuts:
Windows + Alt + W
andWindows + Alt + B
and see which look you like the most.
Note: You may need to hit those keyboard shortcuts multiple times when you first install this configuration.
It is recommended to verify the Neovim plugins.
If you installed this configuration with a system that uses GNOME you might have an issue with pywal. It can "fixed" with the following:
pywal_get() {
wal -i "$1" -q -t; feh --bg-scale "$(< "${HOME}/.cache/wal/wal")"
}
Edit each pywal script on the following path:
.config/polybar/theme_name/scripts/pywal.sh
.config/polybar/colorblocks/scripts/pywal.sh
If you are in a virtual machine and you want to enable drag-and-drop files and copy-paste then read this section.
In Kali Linux the VMware guest tools are already configured so you don't have to do anything.
If you're using another Debian distro then install the following packages:
sudo apt install open-vm-tools open-vm-tools-desktop
If you're using Arch in VMware, read this documentation.
Install VirtualBox guest tools:
sudo apt install -y virtualbox-guest-x11
Start the service:
sudo systemctl status virtualbox-guest-utils.service
Enable VirtualBox service at startup:
sudo systemctl enable virtualbox-guest-utils.service
The SPICE agent allows for automatic X session resolution adjustment to the client resolution. The SPICE agent also provides support for copy and pasting between the host and guest and prevents mouse cursor lag.
sudo apt install -y spice-vdagent
Start the service:
sudo systemctl start spice-vdagent
The QEMU guest agent runs inside the guest and allows the host machine to issue commands to the guest operating system using libvirt, helping with functions such as freezing and thawing filesystems. The guest operating system then responds to those commands asynchronously.
sudo apt install -y qemu-guest-agent
Start the service:
sudo systemctl start qemu-guest-agent
If you want to add this service at startup, add it to bspwmrc
:
echo "systemctl start qemu-guest-agent" >> ~/.config/bspwm/bspwmrc
Since the service.unit file is not pre-configured for startups as seen here:
❯ sudo systemctl enable qemu-guest-agent
Synchronizing state of qemu-guest-agent.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install enable qemu-guest-agent
The unit files have no installation config (WantedBy=, RequiredBy=, Also=,
Alias= settings in the [Install] section, and DefaultInstance= for template
units). This means they are not meant to be enabled using systemctl.
Possible reasons for having this kind of units are:
• A unit may be statically enabled by being symlinked from another unit's
.wants/ or .requires/ directory.
• A unit's purpose may be to act as a helper for some other unit which has
a requirement dependency on it.
• A unit may be started when needed via activation (socket, path, timer,
D-Bus, udev, scripted systemctl call, ...).
• In case of template units, the unit is meant to be enabled with some
instance name specified.
You could create your own service file though.
More information here.
Enable Hyper-V Enhanced Session
in Hyper-V Settings:
Enable Guest services
in Hyper-V VM Settings:
Lastly, read the official Kali Linux documentation and follow the steps.
If you would like to change some settings, here are the locations of the configuration files.
alacritty
Terminal Configuration:
~/.config/alacritty/alacritty.yml
kitty
Terminal Configuration:
~/.config/kitty/kitty.conf
bspwm
WM Configuration:
~/.config/bspwm/bspwmrc
sxhkd
Keyboard Shortcuts Configuration:
~/.config/sxhkd/sxhkdrc
picom
Transparency Configuration:
~/.config/picom/picom.conf
Warning: If you have issues with picom features, go to the yshui repo and view the issues.
polybar
Workspace and Desktop Panel Configuration:
~/.config/polybar/colorblocks/launch.sh
rofi
Program Launcher Configuration:
~/.config/rofi/config
zsh
Shell Configuration:
~/.zshrc
Action | Shortcut |
---|---|
Move a floating window or swap a tiled window. | alt+left mouse click |
Resize any tiling or floating window. | alt+right mouse click |
Open jgmenu for context menu. | super+right mouse click |
Since some keyboards don't have the arrow keys; the HJKL
keys are used instead.
Also since some keyboards don't have the right windows
key; the alt
key is used instead because the alt
key is almost always on the left side and right side of a keyboard.
Action | Shortcut |
---|---|
Open the terminal emulator (kitty). | windows+enter |
Open the terminal-emulator (qterminal), doesn't apply the pywal color. | windows+ctrl+enter |
Launch the power menu. | windows+q or alt+q |
Close the current window. | windows+w or alt+w |
Restart the bspwm configuration. | windows+alt+r or ctrl+alt+r |
Logout from the system. | windows+alt+q or ctrl+alt+q |
Move through the windows in the current workspace. | windows+left,down,up,right or windows+h,j,k,l |
Open rofi and Esc to exit. | windows+d or alt+d |
Open rofi and run commands as sudo, useful for tools such as wireshark. | windows+ctrl+d |
Change the workspace. | windows+1,2,3,4,5,6,7,8,9 or alt+1,2,3,4,5,6,7,8,9 |
Change the current window to tiling mode. | windows+t or alt+t |
Change the current window to "full" mode. | windows+m or alt+m |
Change the current window to full-screen mode | windows+f or alt+f |
Change the current window to floating mode. | windows+s or alt+s |
Move the current window to another workspace. | windows+shift+1,2,3,4,5,6,7,8,9 or alt+shift+1,2,3,4,5,6,7,8,9 |
Resize current window (only works if you are in terminal or floating mode). | windows+alt+left,down,up,right or windows+alt+h,j,k,l |
Change the position of the current window (only works in floating mode). | windows+ctrl+left,down,up,right or windows+ctrl+h,j,k,l |
Show a preselection and then open a window. | windows+ctrl+alt+left,down,up,right or windows+ctrl+alt+h,j,k,l |
Undo the preselection. | windows+ctrl+space |
Close and kill. | windows+shift+w or alt+shift+w |
Alternate between the tiled and monocle layout. | windows+m or alt+m |
Set the window state. | windows+shift+t,s,f or alt+shift+t,s,f |
Set the node flags. | windows+ctrl+m,x,y,z |
Focus on older or newer node in the focus history. | windows+o,i |
Focus the last node/desktop. | windows+grave,Tab or alt+grave,Tab |
Focus the next/previous desktop in the current monitor. | windows+bracket{left,right} or windows+bracket{h,l} |
Focus the next/previous window in the current desktop. | windows+shift+c |
Focus the node for the given path jump. | windows+p,b,comma,period |
Focus the node in the given direction (swap window). | windows+shift+left,down,up,right or windows+shift+h,j,k,l |
Note: The HJKL navigation uses the format: left = h, down = j, up = k, right = l
Action | Shortcut |
---|---|
Shuffle wallpapers on the fly | windows+alt+w or ctrl+alt+w |
Activate the bspwm workspace preview | ctrl+alt+p |
Deactivate the bspwm workspace preview | ctrl+alt+d |
Show bspwm workspace preview (when activated) | windows |
Change to a specific wallpaper using the GUI. | windows+alt+e or ctrl+alt+e |
Select wallpaper with a preview | windows+alt+x or ctrl+alt+x |
Change the terminal font size. | windows+alt+f or ctrl+alt+f |
Change the corners of the windows. | windows+alt+b or ctrl+alt+b |
Execute the lock screen. | alt+shift+x |
Take a screenshot with flameshot. | print |
BSPWM Workpace Preview Functions: Use
ctrl+alt+p
to completely de/activate bspwm workspace preview. Usectrl+alt+d
to deactivate bspwm workspace preview for the current screen resolution but automatically activate it again when the screen resolution changes.
According to the kitty documentation we can define windows that can be tiled next to each other in arbitrary arrangements, based on layouts. Additionally, kitty also has the ability for window management, tabs management, layout management, and sessions. This means that kitty can be used as a replacement for tmux.
Why use tmux?
Tmux is used for qterminal
since as of this date it doesn't have these features that kitty
does have.
Although it could also be used in kitty; it is not recommended as seen here.
The kitty command line interface provides an option to create sessions.
A session allows you to create one or more customized tabs on startup.
We can create a session with the following example:
kitty --session startup.conf
We can find more information here.
Default keyboard shortcuts:
Action | Shortcut |
---|---|
New window | ctrl+shift+enter |
New OS window | ctrl+shift+n |
Close window | ctrl+shift+w |
Next window | ctrl+shift+] |
Previous window | ctrl+shift+[ |
Move window forward | ctrl+shift+f |
Move window backward | ctrl+shift+b |
Move window to top | ctrl+shift+ ` |
Visually focus window | ctrl+shift+f7 |
Visually swap window | ctrl+shift+f8 |
Focus specific window | ctrl+shift+1, ctrl+shift+2 … ctrl+shift+0 (clockwise from the top-left) |
Default keyboard shortcuts:
Action | Shortcut |
---|---|
New tab | ctrl+shift+t |
Close tab | ctrl+shift+q |
Next tab | ctrl+shift+right |
Previous tab | ctrl+shift+left |
Next layout | ctrl+shift+l |
Move tab forward | ctrl+shift+. |
Move tab backward | ctrl+shift+, |
Set tab title | ctrl+shift+alt+t |
Default keyboard shortcuts:
Action | Shortcut |
---|---|
Next layout | ctrl+shift+up |
Go to layout (tall,stack, etc) | ctrl+shift+down |
Previous layout | ctrl+shift+page_up |
Toggle layout (switches to the named layout or the previous layout) | ctrl+shift+page_down |
Default keyboard shortcuts:
Action | Shortcut |
---|---|
Line up | ctrl+shift+up |
Line down | ctrl+shift+down |
Page up | ctrl+shift+page_up |
Page down | ctrl+shift+page_down |
Top | ctrl+shift+home |
Bottom | ctrl+shift+end |
Previous shell prompt | ctrl+shift+z |
Next shell prompt | ctrl+shift+x |
Browse scrollback in less | ctrl+shift+h |
Browse last cmd output | ctrl+shift+g |
The font size shortcuts are the default as well.
Other shortcuts can be found here.
You can upgrade kitty by following the install documentation.
Make sure that your previous desktop environment doesn't have a notifications daemon enabled such as xfce4-notifyd
which will prevent dunst from acquiring org.freedesktop.Notifications
through D-Bus. We can disable it by renaming the service:
sudo mv /usr/share/dbus-1/services/org.xfce.xfce4-notifyd.Notifications.service /usr/share/dbus-1/services/org.xfce.xfce4-notifyd.Notifications.service.disabled
If you want to enable blur on the picom compositor, you can use this settings:
blur-method = "box";
blur-strength = 8;
blur-background = true;
backend = "xrender";
Alternatively, you can use dual_kawase
with the glx
backend:
blur-method = "dual_kawase";
blur-strength = 8;
blur-background = true;
backend = "glx";
Warning: This will affect the performance, especially in virtual machines.
Then run picom with experimental-backends
:
picom --experimental-backends
Warning: You will need to edit the scripts and the bspwm configuration file
bspwmrc
.
Install the required package:
sudo apt install tree
We can perform a performance test with the following command:
time tree /
Note: I usually run the command above using my zsh configuration because I can see the time in seconds in the terminal prompt.
Then simply compare the results with another terminal emulator such as alacritty or qterminal.
Note: The less time it takes to finish then the faster it is.
This configuration wouldn't have been possible without these softwares and awesome people:
xeventbind:
Configuration related software:
- https://www.zsh.org/
- https://github.com/baskerville/bspwm
- https://github.com/baskerville/sxhkd
- https://github.com/meskarune/i3lock-fancy
- https://github.com/johanmalm/jgmenu
- https://github.com/dunst-project/dunst
- https://github.com/jwilm/alacritty
- https://github.com/kovidgoyal/kitty
- https://sw.kovidgoyal.net/kitty/
- https://github.com/polybar/polybar
- https://github.com/adi1090x/polybar-themes
- https://github.com/yshui/picom
- https://github.com/davatorium/rofi
- https://github.com/ohmyzsh/ohmyzsh
- https://github.com/gpakosz/.tmux.git
- https://docs.xfce.org/xfce/thunar/start
- https://github.com/lxqt/qterminal
- https://github.com/derf/feh
- https://github.com/dylanaraps/pywal
Fonts:
- https://github.com/ryanoasis/nerd-fonts.git
- https://github.com/ryanoasis/nerd-fonts/tree/master/patched-fonts/Iosevka
Modules (Modified a little-bit):