###################################################################################################################### ##################################################################################################################### ################# Start of all the settings ################# ##################################################################################################################### ##################################################################################################################### # KEY DEFINITIONS TO REMEMBER # $Mod = WINDOWS key or Super key or Mod4 # Mod1 = ALT key # Control = CTRL key # Shift = SHIFT key # Escape = ESCAPE key # Return = ENTER or RETURN key # KP_Enter = Keypad Enter # Pause = PAUSE key # Print = PRINT key # Tab = TAB key ##################################################################################################################### ################# Define the $mod variable/key ################# ##################################################################################################################### # Key to rule them all : Super(Windows) or Alt key? # Mod4 = Windows or Super key on keyboard # Mod1 = Alt key on keyboard #Set Alt key #set $mod Mod1 #set Super key set $mod Mod4 ##################################################################################################################### ################# Define the movements keys - variables ################# ##################################################################################################################### #This is setup for qwerty set $up k set $down j set $left h set $right l ##################################################################################################################### ################# Workspaces location ################# ##################################################################################################################### # setting variables for later use # use xrandr and/or arandr to know the names of your monitors exec --no-startup-id xrandr --output eDP1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI1 --off --output VIRTUAL1 --off exec --no-startup-id xrandr --output HDMI2 --right-of HDMI1 --auto # my current setup #set $firstMonitor DP3 #set $secondMonitor LVDS1 #set $firstMonitor DVI-I-0 #set $secondMonitor HDMI-0 #set $firstMonitor DVI-0 #set $secondMonitor DVI-1 #set $firstMonitor DVI-I-1 #set $secondMonitor DVI-D-1 set $firstMonitor HDMI1 set $secondMonitor HDMI2 workspace 1 output $firstMonitor workspace 2 output $firstMonitor workspace 3 output $firstMonitor workspace 4 output $firstMonitor workspace 5 output $firstMonitor workspace 6 output $secondMonitor workspace 7 output $secondMonitor workspace 8 output $secondMonitor workspace 9 output $secondMonitor workspace 10 output $secondMonitor # switch to workspace bindsym $mod+1 workspace 1 bindsym $mod+2 workspace 2 bindsym $mod+3 workspace 3 bindsym $mod+4 workspace 4 bindsym $mod+5 workspace 5 bindsym $mod+6 workspace 6 bindsym $mod+7 workspace 7 bindsym $mod+8 workspace 8 bindsym $mod+9 workspace 9 bindsym $mod+0 workspace 10 # move focused container to workspace bindsym $mod+Shift+1 move container to workspace 1; workspace 1 bindsym $mod+Shift+2 move container to workspace 2; workspace 2 bindsym $mod+Shift+3 move container to workspace 3; workspace 3 bindsym $mod+Shift+4 move container to workspace 4; workspace 4 bindsym $mod+Shift+5 move container to workspace 5; workspace 5 bindsym $mod+Shift+6 move container to workspace 6; workspace 6 bindsym $mod+Shift+7 move container to workspace 7; workspace 7 bindsym $mod+Shift+8 move container to workspace 8; workspace 8 bindsym $mod+Shift+9 move container to workspace 9; workspace 9 bindsym $mod+Shift+0 move container to workspace 10; workspace 10 ##################################################################################################################### ################# how to exit, logoff, suspend, ... ################# ##################################################################################################################### #Press $mod (super) and X to exit - check toolbar for next choices bindsym $mod+x mode "$mode_system" set $mode_system System (k) lock, (l) logout, (r) reboot, (s) shutdown, (u) suspend, (h) hibernate mode "$mode_system" { bindsym k exec --no-startup-id ~/.config/i3/scripts/i3exit.sh lock, mode "default" bindsym l exec --no-startup-id ~/.config/i3/scripts/i3exit.sh logout, mode "default" bindsym u exec --no-startup-id ~/.config/i3/scripts/i3exit.sh suspend, mode "default" bindsym h exec --no-startup-id ~/.config/i3/scripts/i3exit.sh hibernate, mode "default" bindsym r exec --no-startup-id ~/.config/i3/scripts/i3exit.sh reboot, mode "default" bindsym s exec --no-startup-id ~/.config/i3/scripts/i3exit.sh shutdown, mode "default" # back to normal: Enter or Escape bindsym Return mode "default" bindsym Escape mode "default" } ##################################################################################################################### ################# reload changed configuration ################# ##################################################################################################################### # restart i3 inplace (preserves your layout/session, can be used to upgrade i3) bindsym $mod+Shift+r restart # reload the configuration file bindsym $mod+Shift+c reload ##################################################################################################################### ################# Stopping an application ################# ##################################################################################################################### # kill focused window bindsym $mod+Shift+q kill bindsym $mod+q kill ##################################################################################################################### ################# Moving around in i3 ################# ##################################################################################################################### # Use Mouse+$mod to drag floating windows to their wanted position floating_modifier $mod # toggle tiling / floating bindsym $mod+Shift+f floating toggle # change focus bindsym $mod+$left focus left bindsym $mod+$down focus down bindsym $mod+$up focus up bindsym $mod+$right focus right # alternatively, you can use the cursor keys: bindsym $mod+Left focus left bindsym $mod+Down focus down bindsym $mod+Up focus up bindsym $mod+Right focus right # move focused window bindsym $mod+Shift+$left move left bindsym $mod+Shift+$down move down bindsym $mod+Shift+$up move up bindsym $mod+Shift+$right move right # alternatively, you can use the cursor keys: bindsym $mod+Shift+Left move left bindsym $mod+Shift+Down move down bindsym $mod+Shift+Up move up bindsym $mod+Shift+Right move right ##################################################################################################################### ################# moving around workspaces ################# ##################################################################################################################### # next/previous workspace bindsym $mod+Tab workspace next bindsym $mod+Shift+Tab workspace prev # switch to workspace with urgent window automatically for_window [urgent=latest] focus ##################################################################################################################### ################# Tiling parameters ################# ##################################################################################################################### # orientation for new workspaces default_orientation horizontal # split in horizontal orientation bindsym $mod+o split h # split in vertical orientation bindsym $mod+v split v # enter fullscreen mode for the focused container bindsym $mod+f fullscreen toggle # change container layout (stacked, tabbed, toggle split) # qwerty/azerty issue for letter z bindsym $mod+s layout stacking bindsym $mod+z layout tabbed bindsym $mod+e layout toggle split # change focus between tiling / floating windows bindsym $mod+t focus mode_toggle # focus the parent container bindsym $mod+a focus parent # focus the child container #bindsym $mod+d focus child ##################################################################################################################### ################# change modes ################# ##################################################################################################################### bindsym $mod+m mode "$main" set $main Media (m), Gaming (g), Crypto (c), Resize (r), Layout (l) mode "$main"{ bindsym m mode "$media" bindsym g mode "$gaming" bindsym c mode "$crypto" bindsym r mode "resize" bindsym l mode "$layout" bindsym Return mode "default" bindsym Escape mode "default" } ############################################################################# ################## media ################## ############################################################################# set $media Discord (d), Element (e), Telegram (b), Slack (s), Teams (t) mode "$media"{ bindsym d exec --no-startup-id discord;focus bindsym e exec --no-startup-id element-desktop;focus bindsym b exec --no-startup-id telegram-desktop;focus bindsym s exec --no-startup-id slack;focus bindsym t exec --no-startup-id teams;focus bindsym Return mode "default" bindsym Escape mode "default" } ############################################################################## ################# gaming ################# ############################################################################## set $crypto Electrum (b), Electon Cash (c), Monero (m) mode "$crypto"{ bindsym b exec --no-startup-id electrum;focus bindsym c exec --no-startup-id electron-cash;focus bindsym m exec --no-startup-id monero-wallet-gui;focus bindsym Return mode "default" bindsym Escape mode "default" } ############################################################################## ################# gaming ################# ############################################################################## # launch gaming focused programs set $gaming Steam (s), Lutris (l) mode "$gaming" { bindsym s exec --no-startup-id steam-native;focus bindsym l exec --no-startup-id lutris;focus bindsym Return mode "default" bindsym Escape mode "default" } ############################################################################# ################### resize ################## ############################################################################# # resize window (you can also use the mouse for that) bindsym $mod+r mode "resize" mode "resize" { # These bindings trigger as soon as you enter the resize mode # Pressing left will shrink the window’s width. # Pressing right will grow the window’s width. # Pressing down will shrink the window’s height. # Pressing up will grow the window’s height. bindsym $left resize shrink width 10 px or 10 ppt bindsym Shift+$left resize shrink width 20 px or 20 ppt bindsym $up resize grow height 10 px or 10 ppt bindsym Shift+$up resize grow height 20 px or 20 ppt bindsym $down resize shrink height 10 px or 10 ppt bindsym Shift+$down resize shrink height 20 px or 20 ppt bindsym $right resize grow width 10 px or 10 ppt bindsym Shift+$right resize grow width 20 px or 20 ppt # same bindings, but for the arrow keys bindsym Left resize shrink width 10 px or 10 ppt bindsym Shift+Left resize shrink width 20 px or 20 ppt bindsym Up resize grow height 10 px or 10 ppt bindsym Shift+Up resize grow height 20 px or 20 ppt bindsym Down resize shrink height 10 px or 10 ppt bindsym Shift+Down resize shrink height 20 px or 20 ppt bindsym Right resize grow width 10 px or 10 ppt bindsym Shift+Right resize grow width 20 px or 20 ppt # back to normal: Enter or Escape bindsym Return mode "default" bindsym Escape mode "default" } ############################################################################## ################# start normal layout ################# ############################################################################## # launch programs in the right workspaces bindsym $mod+w mode "$layout" set $layout full (f), work (w) mode "$layout" { bindsym f exec --no-startup-id bash $HOME/.config/i3/scripts/layout-default.sh bindsym w exec --no-startup-id bash $HOME/.config/i3/scripts/layout-work.sh bindsym Return mode "default" bindsym Escape mode "default" } ##################################################################################################################### ################# display ################# ##################################################################################################################### # change xrandr display configuration bindsym $mod+d mode "$xrandr" set $xrandr arco-pc 1x hdmi (h), laptop 1x eDPI (l) mode "$xrandr" { bindsym h exec --no-startup-id xrandr --output DisplayPort-0 --off --output DisplayPort-1 --off --output HDMI-A-0 --set "scaling mode" "Full Aspect" --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI-A-1 --off --output DVI-D-0 --off bindsym l exec --no-startup-id xrandr --output eDP1 --primary --mode 1920x1080 --pos 0x0 --rotate normal --output HDMI1 --off --output VIRTUAL1 --off bindsym Return mode "default" bindsym Escape mode "default" } ##################################################################################################################### ################# choose the font ################# ##################################################################################################################### # Font for window titles. Will also be used by the bar unless a different font # is used in the bar {} block below. # choose your font font pango:Noto Mono Regular 9 ##################################################################################################################### ################# execute applications at boot time ################# ##################################################################################################################### # TRAY APPLICATIONS #Authentication dialog exec --no-startup-id /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 & #nextcloud exec --no-startup-id nextcloud # bluetooth #exec --no-startup-id blueberry-tray # network exec --no-startup-id nm-applet # num lock activated exec_always --no-startup-id numlockx on # volume #exec --no-startup-id volumeicon #variety #exec --no-startup-id variety #Corectrl exec --no-startup-id corectrl #Easystroke exec --no-startup-id easystroke #Transmission exec --no-startup-id transmission-gtk -m #Conky #exec --no-startup-id conky -c ~/.config/i3/system-overview #Polybar exec_always --no-startup-id ~/.config/polybar/launch.sh & #startup functions exec_always --no-startup-id ~/scritps/startup.sh # Protonmail Bridge exec --no-startup-id protonmail-bridge -no-window # PulseEffects exec --no-startup-id pulseeffects --gapplication-service # feh background image exec --no-startup-id bash $HOME/.fehbg & ##################################################################################################################### ################# system applications ################# ##################################################################################################################### exec --no-startup-id xfce4-power-manager & # ommitted next line to get super key to bring up the menu in xfce and avoid error then in i3 # IF xfsettingsd is activated you can not change themes #exec --no-startup-id xfsettingsd & #exec --no-startup-id /usr/lib/xfce4/notifyd/xfce4-notifyd & exec --no-startup-id /usr/bin/dunst & ##################################################################################################################### ################# applications keyboard shortcuts ################# ##################################################################################################################### #terminal bindsym ctrl+mod1+Return exec --no-startup-id kitty;focus #System monitor bindsym ctrl+mod1+r exec --no-startup-id xfce4-taskmanager;focus #settings bindsym control+mod1+s exec --no-startup-id xfce4-settings-manager #pavucontrol bindsym control+mod1+u exec --no-startup-id pavucontrol #rofi bindsym control+mod1+a exec --no-startup-id rofi -show drun #texteditors #bindsym ctrl+mod1+e exec --no-startup-id vscodium;focus bindsym ctrl+mod1+e exec --no-startup-id emacs;focus #thunar bindsym ctrl+mod1+t exec --no-startup-id thunar;focus #ranger #bindsym ctrl+mod1+t exec --no-startup-id termite -e ranger;focus #libreoffice bindsym ctrl+mod1+l exec --no-startup-id libreoffice;focus #browsers bindsym control+mod1+f exec --no-startup-id firefox;focus #pragha #bindsym ctrl+mod1+n exec --no-startup-id pragha;focus #cmus #bindsym ctrl+mod1+m exec --no-startup-id termite -e cmus;focus #tauon music box bindsym ctrl+mod1+m exec --no-startup-id tauon;focus #thunderbird bindsym ctrl+mod1+b exec --no-startup-id thunderbird;focus #redetect pulseaudio bindsym $mod+shift+a exec --no-startup-id bash $HOME/scripts/redetect-audio.sh ##################################################################################################################### ################# screenshots ################# ##################################################################################################################### bindsym Print exec --no-startup-id xfce4-screenshooter bindsym Control+Print exec --no-startup-id xfce4-screenshooter ##################################################################################################################### ################# floating or tiled ################# ##################################################################################################################### # class = WM_CLASS, title = WM_NAME ############################## ### floating disabled ### ############################## for_window [class="Bleachbit"] floating disable for_window [class="Brasero"] floating disable for_window [class="Gnome-disks"] floating disable for_window [class="Hexchat"] floating disable for_window [class="Nitrogen"] floating disable for_window [class="Pavucontrol"] floating disable for_window [class="^Spotify$"] floating disable for_window [class="System-config-printer.py"] floating enable for_window [class="^Vlc$"] floating disable for_window [class="Xfburn"] floating disable for_window [class="Xfce4-settings-manager"] floating disable # variety for_window [instance="variety"] floating disable # epic for_window [title="Epic Games Launcher"] floating disable # ubisoft for_window [title="Ubisoft Connect"] floating disable # firefox picture in picture for_window [title="Picture-in-Picture"] floating enable ############################## ### floating enabled ### ############################## for_window [class="Xfce4-taskmanager"] floating enable for_window [class="Blueberry.py"] floating enable for_window [class="Galculator"] floating enable for_window [class="^Gpick$"] floating enable for_window [class="Imagewriter"] floating enable for_window [class="^Gnome-font-viewer$"] floating enable for_window [class="Peek"] floating enable for_window [class="^Skype$"] floating enable for_window [class="Unetbootin.elf"] floating enable for_window [class="Usb-creator-gtk"] floating enable for_window [class="Wine"] floating enable for_window [class="Xfce4-appfinder"] floating enable for_window [title="Copying"] floating enable for_window [title="Deleting"] floating enable for_window [title="Moving"] floating enable for_window [title="^Terminator Preferences$"] floating enable for_window [window_role="pop-up"] floating enable for_window [window_role="^Preferences$"] floating enable for_window [window_role="setup"] floating enable # ms teams for_window [title="Microsoft Teams Notification"] floating enable for_window [title="Microsoft Teams-Benachrichtigung"] floating enable # vue for_window [class="tufts-vue-VUE" title="Format"] floating enable for_window [class="tufts-vue-VUE" title="ColorPopupMenu"] floating enable ##################################################################################################################### ################# variety for your wallpapers ################# ##################################################################################################################### #Variety keybindings mod1 = ALT # next wallpaper #bindsym mod1+n exec --no-startup-id variety -n #bindsym mod1+Right exec --no-startup-id variety -n # previous wallpaper #bindsym mod1+p exec --no-startup-id variety -p #bindsym mod1+Left exec --no-startup-id variety -p ##################################################################################################################### ################# audio settings ################# ##################################################################################################################### bindsym XF86AudioRaiseVolume exec --no-startup-id bash $HOME/scripts/dunst-volume.sh up bindsym XF86AudioLowerVolume exec --no-startup-id bash $HOME/scripts/dunst-volume.sh down bindsym XF86AudioMute exec --no-startup-id bash $HOME/scripts/dunst-volume.sh mute #bindsym XF86AudioRaiseVolume exec --no-startup-id "amixer -D pulse sset Master '5%+'" #bindsym XF86AudioLowerVolume exec --no-startup-id "amixer -D pulse sset Master '5%-'" #bindsym XF86AudioMute exec --no-startup-id "amixer -D pulse set Master toggle" #https://github.com/acrisci/playerctl/ bindsym XF86AudioPlay exec --no-startup-id playerctl play-pause bindsym XF86AudioNext exec --no-startup-id playerctl next bindsym XF86AudioPrev exec --no-startup-id playerctl previous bindsym XF86AudioStop exec --no-startup-id playerctl stop ##################################################################################################################### ################# xbacklight ################# ##################################################################################################################### bindsym $mod+Shift+u exec --no-startup-id bash $HOME/scripts/dunst-backlight.sh up # increase screen brightness bindsym $mod+Shift+d exec --no-startup-id bash $HOME/scripts/dunst-backlight.sh down # decrease screen brightness bindsym XF86MonBrightnessUp exec --no-startup-id bash $HOME/scripts/dunst-backlight.sh up # increase screen brightness bindsym XF86MonBrightnessDown exec --no-startup-id bash $HOME/scripts/dunst-backlight.sh down # decrease screen brightness #bindsym XF86MonBrightnessUp exec --no-startup-id xbacklight -inc 10 # increase screen brightness #bindsym XF86MonBrightnessDown exec --no-startup-id xbacklight -dec 10 # decrease screen brightness ##################################################################################################################### ################# border control ################# ##################################################################################################################### # Border control hide_edge_borders none bindsym $mod+u mode "$border" set $border none (o), pixel (p), normal (n) mode "$border" { bindsym o border none bindsym p border pixel 2 bindsym n border normal 2 bindsym Return mode "default" bindsym Escape mode "default" } ##################################################################################################################### ################# Popups control ################# ##################################################################################################################### #Popups during fullscreen mode popup_during_fullscreen smart ##################################################################################################################### ################# i3 gaps next ################# ##################################################################################################################### # Settings for I3 next gap git # https://github.com/Airblader/i3/tree/gaps-next # delete or uncomment the following lines if you do not have it or do not # want it # set border and gaps for_window [class="^.*"] border pixel 2 gaps inner 5 gaps outer 5 ##################################################################################################################### ################# compton (now picom) of i3wm ################# ##################################################################################################################### #if you want transparency on non-focused windows, ... exec_always --no-startup-id picom -b --config ~/.config/i3/picom.conf ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### ################# bar appearance ################# ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### #bar { # # height 25 # workspace_buttons yes # font pango:Noto Sans 14 # # #position top # position bottom # # #system icons # #tray_output none # #tray_output $firstMonitor # #tray_output $secondMonitor # OPTION 1 : i3status # type status_command i3status without the config file and # you will get the standard i3status bar # Second one is the standard statusbar with my personal settings #status_command i3status #status_command i3status -c ~/.config/i3/i3status.conf # OPTION 2 : i3blocks # https://github.com/vivien/i3blocks # another way to provide text in the statusbar # put hastag in front if not installed #status_command i3blocks #status_command i3blocks -c ~/.config/i3/i3blocks.conf #status_command i3blocks -c ~/.config/i3/i3blocks-rainbow.conf #status_command i3blocks -c ~/.config/i3/i3blocks-original.conf #status_command i3blocks -c ~/.config/i3/i3blocks-awesome.conf # OPTION 3 : conky # You can also replace the istatus bar with a conky # start-conky-i3statusbar.sh is started and conky will follow # documentation : https://i3wm.org/docs/user-contributed/conky-i3bar.html # conky configuration is in conky-i3statusbar #status_command ~/.config/i3/start-conky-i3statusbar.sh # OPTION 4 : polybar # polybar is launched elsewhere - search for the word # from the opening of the "bar {...}" till the end has to go or hashtagged out # in order for the system trayicons to show up in polybar #colors { # background #2F2F2F # statusline #eeeeee # separator #666666 # # border backgr. text # focused_workspace #a9a9a9 #5f676a #eeeeee # active_workspace #a9a9a9 #5f676a #a9a9a9 # inactive_workspace #a9a9a9 #222222 #a9a9a9 # urgent_workspace #a9a9a9 #d42121 #FFFFFF # } # # } # DarkGrey background with white text - not focus grey background - black text # Windows decoration colors # class border backgr. text indicator #client.placeholder #242424 #242424 #242424 #client.background #242424 #242424 #242424 #client.focused #4A4A4A #4A4A4A #e5e5e5 #4A4A4A #client.unfocused #222222 #222222 #aaaaaa #222222 #client.focused_inactive #222222 #222222 #a9a9a9 #222222 #client.urgent #d42121 #d42121 #f7f7f7 #d42121 # Purple/Pink # class border backgr. text indicator client.placeholder #00ff00 #00ff00 #00ff00 client.background #00ff00 #00ff00 #00ff00 client.focused #592c54 #592c54 #eeeeee #592c54 client.unfocused #33022f #33022f #eeeeee #33022f client.focused_inactive #33022f #33022f #eeeeee #33022f client.urgent #a5096a #a5096a #eeeeee #a5096a ################################################################# ################### BAR APPEARANCE ARCHIVE ###################### ################################################################# # Orange background with black text - not focus grey background - white text # Windows decoration colors # class border backgr. text indicator # client.background color #222222 # client.focused #FFAF00 #FFAF00 #333333 #00AA00 # client.unfocused #222222 #222222 #aaaaaa #2e9ef4 # client.focused_inactive #333333 #5f676a #ffffff #484e50 # client.urgent #2f343a #900000 #ffffff #900000 # DarkGrey background with white text - not focus grey background - black text # Windows decoration colors # https://i3wm.org/docs/userguide.html#_changing_colors # client.background color # class border backgr. text indicator # client.focused #4c7899 #285577 #ffffff #2e9ef4 # client.focused_inactive #333333 #5f676a #ffffff #484e50 # client.unfocused #333333 #222222 #888888 #292d2e # client.urgent #2f343a #900000 #ffffff #900000 # client.placeholder #000000 #0c0c0c #ffffff #000000 # colors { # background #222222 # statusline #eeeeee # separator #666666 # border backgr. text # focused_workspace #4c7899 #285577 #ffffff # active_workspace #333333 #5f676a #ffffff # inactive_workspace #333333 #222222 #888888 # urgent_workspace #2f343a #900000 #ffffff # } # Alternatives # BLue and grey Colors # https://github.com/Gravemind/ArchLinux/blob/master/.i3/config # class border backgr. text indicator # client.focused #000000 #285577 #dddddd #0099ff # client.focused_inactive #000000 #333333 #888888 #484e50 # client.unfocused #000000 #000000 #555555 #292d2e # client.urgent #2f343a #900000 #ffffff #900000 # blue background with white text # Windows decoration colors # class border backgr. text indicator # client.background color #222222 # client.focused #4c7899 #285577 #ffffff #2e9ef4 # client.focused_inactive #333333 #5f676a #ffffff #484e50 # client.unfocused #333333 #222222 #888888 #292d2e # client.urgent #2f343a #900000 #ffffff #900000 # Blue-green background - orange text # Windows decoration colors # http://www.fastlinux.eu/_archiv/index.php?page=linux047 # class border backgr. text # client.focused #2B6473 #2B6473 #FFA000 # client.focused_inactive #004050 #004050 #FFA000 # client.unfocused #004050 #004050 #cccccc # client.urgent #900000 #900000 #ffffff # Red background - black text # Windows decoration colors # https://github.com/Blueblur/dotfiles/blob/master/.i3/config # class border backgr. text indicator # client.focused #d64937 #d64937 #2D2D2D #2e9ef4 # client.focused_inactive #2d2d2d #2d2d2d #dcdcdc #484e50 # client.unfocused #2D2D2D #2d2d2d #dcdcdc #292d2e # client.urgent #2D2D2D #2D2D2D #dcdcdc #900000 ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### ######################################## THE END ########################################### ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### ##################################################################################################################### #####################################################################################################################