#!/bin/bash
# Qtile Martin Andersen Desktop Environment, Qmade for short.! install - ITmail.dk

# bash -c "$(wget -O- https://raw.githubusercontent.com/ITmail-dk/qmade/main/install.sh)"
# sudo DEBIAN_FRONTEND=noninteractive apt install -y git && git clone https://github.com/ITmail-dk/qmade && cd qmade && . install.sh

# Resource links to source
# https://qtile.org

# Rofi - Run menu
# https://github.com/ericmurphyxyz/rofi-wifi-menu

# autorandr 
# Autorandr “fingerprints” displays connected to the system and associate them 
# with their current X11 server settings in “profiles” which are automatically applied each time a fingerprint is matched.
# Use "arandr" to set the Screens as you want them and then save them to a profile with "autorandr --save PROFILENAME"

# autorandr --save PROFILENAME
# autorandr --remove PROFILENAME
# autorandr --default PROFILENAME

# fwupd "Firmware update daemon" - https://github.com/fwupd/fwupd
# fwupdmgr get-devices && fwupdmgr refresh
# fwupdmgr get-updates && fwupdmgr update

# fzf "general-purpose command-line fuzzy finder"
# https://github.com/junegunn/fzf
# nano $(fzf --preview='cat {}')

# nsxiv "Neo (or New or Not) Simple (or Small or Suckless) X Image Viewer" - https://github.com/nsxiv/nsxiv

# Neovim (nvim) - https://neovim.io/ - https://neovim.io/doc/user/vimindex.html
# Vim commands you NEED TO KNOW https://www.youtube.com/watch?v=RSlrxE21l_k

# LazyVim - Can be used after Neovim >= 0.9.0 - https://github.com/LazyVim/LazyVim
# https://github.com/folke/lazy.nvim



# Start the install *_:*:_*:*:_*_*:*:_*::*_*::*_*:_*::*_*:*:_:*:*_*:*:_*:*_:*:#

# Whiptail colors
export NEWT_COLORS='
root=white,gray
window=white,lightgray
border=black,lightgray
shadow=white,black
button=white,blue
actbutton=black,red
compactbutton=black,
title=black,
roottext=black,magenta
textbox=black,lightgray
acttextbox=gray,white
entry=lightgray,gray
disentry=gray,lightgray
checkbox=black,lightgray
actcheckbox=white,blue
emptyscale=,black
fullscale=,red
listbox=black,lightgray
actlistbox=lightgray,gray
actsellistbox=white,blue'

# Set Echo colors
# for c in {0..255}; do tput setaf $c; tput setaf $c | cat -v; echo =$c; done
NC="\033[0m"
RED="\033[0;31m"
RED2="\033[38;5;196m"
GREEN="\033[0;32m"
YELLOW="\033[0;33m"
BLUE="\033[0;94m"

clear

# Check User Sudo Access
#check_sudo_access() {
#    if sudo -n true 2>/dev/null; then
#        return 0
#    else
#        return 1
#    fi
#}

#if check_sudo_access; then
#    echo "User has SUDO Access, installation continues..."
#else
#    echo -e "${RED} ${NC}"
#    echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'- ${NC}"
#    echo -e "${RED} ${NC}"
#    echo -e "${RED}       ERROR: This installation must be run by a normal user with SUDO Access. ${NC}"
#    echo -e "${RED} ${NC}"
#    echo -e "${RED}       So Add your user to sudo with this Command,from a user who has sudo access ${NC}"
#    echo -e "${RED}       sudo usermod -aG sudo USERNAME ${NC}"
#    echo -e "${RED} ${NC}"
#    echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'- ${NC}"
#    echo -e "${RED} ${NC}"
#    exit 1
#fi
# Check User Sudo Access Done
clear

if ! dpkg -s whiptail >/dev/null 2>&1; then
    echo -e "${RED} "
    echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
    echo -e "${RED} "
    echo -e "${RED}      Preparation before starting the installation..."
    echo -e "${RED}      Enter your user password, to continue if necessary"
    echo -e "${RED} "
    echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
    echo -e "${RED} ${NC}"
    sudo apt update
    sudo apt install -y whiptail
else
    echo -e "${YELLOW} Preparation before starting the installation... done ;-) ${NC}"
fi

clear


# Installation start screen
FULLUSERNAME=$(awk -v user="$USER" -F":" 'user==$1{print $5}' /etc/passwd | rev | cut -c 4- | rev)

if (whiptail --title "Installation of the Martin Qtile Desktop" --yesno "Hi $FULLUSERNAME do you want to start \nthe installation of Qtile Martin Andersen Desktop Environment, Qmade for short.! \n \nRemember you user must have sudo \naccess to run the installation." 13 50); then
    echo -e "${GREEN} Okay, let's start the installation"
else
    exit 1
fi


echo -e "${YELLOW} Install selection choose what to install Start ${NC}"

PROGRAMS=$(whiptail --title "The Install selection" --checklist --separate-output \
"Choose what to install:" 20 78 15 \
"1" "Do you want to install Libre Office" OFF \
"2" "Is this a laptop we are installing on!" OFF \
"3" "Install XRDP Server" OFF \
"4" "Install XfreeRDP Client" OFF \
"5" "Install Google Chrome Webbrowser" ON \
"6" "Install Firefox Webbrowser" OFF \
"7" "Install SMB/CIFS Storage Client" ON \
"8" "Install NFS Storage Client" OFF \
"9" "Install Ceph Storage Client" OFF \
"10" "Install VS Code Editor" OFF \
"11" "Install Neovim Text Editor" ON 3>&1 1>&2 2>&3)

# See the actual installation below - Install selection choose what to install End

PROGRAMS_EXIT_STATUS=$?
clear

if [ $PROGRAMS_EXIT_STATUS != 0 ]; then
  echo -e "${RED} Installation Cancel - You have now stopped the installation. ${NC}"
  exit 1
fi


clear
echo -e "${RED} "
echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
echo -e "${RED} "
echo -e "${RED}      Preparation before starting the installation..."
echo -e "${RED}      Enter your user password, to continue if necessary"
echo -e "${RED} "
echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
echo -e "${RED} ${NC}"

if ! dpkg -s apt-transport-https >/dev/null 2>&1; then
    sudo apt install -y apt-transport-https
    sudo sed -i 's+http:+https:+g' /etc/apt/sources.list
else
    echo "apt-transport-https is already installed."
fi

# APT Add "contrib non-free" to the sources list
if [ -f /etc/apt/sources.list.d/debian.sources ]; then
    sudo sed -i 's/^Components:* main/& contrib non-free non-free-firmware/g' /etc/apt/sources.list.d/debian.sources
else 
	sudo sed -i 's/^deb.* main/& contrib non-free/g' /etc/apt/sources.list
fi

clear
sudo apt update

# -------------------------------------------------------------------------------------------------
# Function to echo, handle errors - Stop the entire installation if an error occurs during the installation
error_handler() {
    echo -e "${RED} An error occurred during installation and has been stopped. ${NC}"
    exit 1
}

# Set the error handler to be called on any error
trap error_handler ERR

# Exit immediately if a command exits with a non-zero status
set -e

# -------------------------------------------------------------------------------------------------

clear
echo -e "${YELLOW} Core System APT install ${NC}"
sudo DEBIAN_FRONTEND=noninteractive apt install apt -y --ignore-missing install xserver-xorg x11-utils xinit arandr autorandr picom fwupd mesa-utils htop wget curl git tmux numlockx kitty cups xsensors xbacklight brightnessctl unzip network-manager dunst libnotify-bin notify-osd xautolock xsecurelock pm-utils rofi imagemagick nitrogen nsxiv mpv flameshot speedcrunch mc thunar gvfs-backends parted gparted mpd mpc ncmpcpp fzf ccrypt xarchiver notepadqq fontconfig fontconfig-config fonts-liberation fonts-dejavu-core fonts-freefont-ttf fonts-noto-core libfontconfig1 fonts-arkpandora pipewire pipewire-pulse wireplumber pipewire-alsa libspa-0.2-bluetooth pavucontrol alsa-utils qpwgraph sddm-theme-maui ffmpeg
sudo DEBIAN_FRONTEND=noninteractive apt install apt -y install linux-headers-$(uname -r)
sudo DEBIAN_FRONTEND=noninteractive apt install apt -y install sddm --no-install-recommends

clear
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Audio Start - https://alsa.opensrc.org - https://wiki.debian.org/ALSA ${NC}"
# See hardware run: "pacmd list-sinks" or "lspci | grep -i audio" or... sudo dmesg  | grep 'snd\|firmware\|audio'
# Run.: "pw-cli info" provides detailed information about the PipeWire nodes and devices, including ALSA devices.
# Test file run: "aplay /usr/share/sounds/alsa/Front_Center.wav"
# sudo adduser $USER audio


# PipeWire Sound Server "Audio" - https://pipewire.org/
systemctl enable --user --now pipewire.socket pipewire-pulse.socket wireplumber.service

# More Audio tools
# sudo DEBIAN_FRONTEND=noninteractive apt install -y alsa-tools

# PulseAudio
# sudo DEBIAN_FRONTEND=noninteractive apt install -y pulseaudio
# systemctl --user enable pulseaudio

# sudo alsactl init

echo -e "${YELLOW} Audio End ${NC}"
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} CPU Microcode install ${NC}"
export LC_ALL=C # All subsequent command output will be in English
CPUVENDOR=$(lscpu | grep "Vendor ID:" | awk '{print $3}')

if [ "$CPUVENDOR" == "GenuineIntel" ]; then
    if ! dpkg -s intel-microcode >/dev/null 2>&1; then
    sudo DEBIAN_FRONTEND=noninteractive apt install -y intel-microcode
    fi
else
    echo -e "${GREEN} Intel Microcode OK ${NC}"
fi

if [ "$CPUVENDOR" == "AuthenticAMD" ]; then
    if ! dpkg -s amd64-microcode >/dev/null 2>&1; then
    sudo DEBIAN_FRONTEND=noninteractive apt install apt install -y amd64-microcode
    fi
else
    echo -e "${GREEN} Amd64 Microcode OK ${NC}"
fi
unset LC_ALL # unset the LC_ALL=C 
echo -e "${YELLOW} CPU Microcode install END ${NC}"
# -------------------------------------------------------------------------------------------------

echo -e "${YELLOW} Alias echo to ~/.bashrc ${NC}"
echo 'alias ls="ls --color=auto --group-directories-first -v -lah"' >> ~/.bashrc
echo 'alias upup="sudo apt update && sudo apt upgrade -y && sudo apt clean && sudo apt autoremove -y"' >> ~/.bashrc
echo 'bind '"'"'"\C-f":"open "$(fzf)"\n"'"'" >> ~/.bashrc
echo 'alias qtileconfig="nano ~/.config/qtile/config.py"' >> ~/.bashrc
echo 'alias qtileconfig-test="python3 .config/qtile/config.py"' >> ~/.bashrc
echo 'alias qtileconfig-test-venv="source .local/src/qtile_venv/bin/activate && python3 .config/qtile/config.py && deactivate"' >> ~/.bashrc
#echo "bind 'set show-all-if-ambiguous on'" >> ~/.bashrc

# -------------------------------------------------------------------------------------------------


echo -e "${YELLOW} Set User folders via xdg-user-dirs-update & xdg-mime default. ${NC}"
# ls /usr/share/applications/ Find The Default run.: "xdg-mime query default inode/directory"

xdg-user-dirs-update

xdg-mime default kitty.desktop text/x-shellscript
xdg-mime default nsxiv.desktop image/jpeg
xdg-mime default nsxiv.desktop image/png
xdg-mime default thunar.desktop inode/directory

# Picom (Yshui) install
#sudo DEBIAN_FRONTEND=noninteractive apt install -y libconfig-dev libdbus-1-dev libegl-dev libev-dev libgl-dev libepoxy-dev libpcre2-dev libpixman-1-dev libx11-xcb-dev libxcb1-dev libxcb-composite0-dev libxcb-damage0-dev libxcb-dpms0-dev libxcb-glx0-dev libxcb-image0-dev libxcb-present-dev libxcb-randr0-dev libxcb-render0-dev libxcb-render-util0-dev libxcb-shape0-dev libxcb-util-dev libxcb-xfixes0-dev libxext-dev meson ninja-build uthash-dev
#cd /tmp/
#git clone https://github.com/yshui/picom
#cd picom
#meson setup --buildtype=release build && ninja -C build && sudo ninja -C build install

#mkdir -p ~/.config/picom
#cp picom.sample.conf ~/.config/picom/picom.conf

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Qtile Core Dependencies apt install ${NC}"
sudo DEBIAN_FRONTEND=noninteractive apt install -y feh python3-full python3-pip python3-venv libxkbcommon-dev libxkbcommon-x11-dev libcairo2-dev pkg-config 

# Colorgram for auto-generated color themes
pip install colorgram.py --break-system-packages
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Install Qtile from source via github and Pip ${NC}"
cd ~
mkdir -p ~/.local/bin
mkdir -p ~/.local/src && cd ~/.local/src

# Git src install ----------------------------------------------------------
#if [ -d qtile ]; then
#    rm -rf qtile
#fi

#git clone https://github.com/qtile/qtile.git
#cd qtile

#pip install dbus-next psutil wheel --break-system-packages
#pip install -r ~/.local/src/qtile/requirements.txt --break-system-packages

#pip install . --break-system-packages --no-warn-script-location


# Python3 venv install -----------------------------------------------------

python3 -m venv qtile_venv && cd qtile_venv

if [ -d qtile ]; then
    rm -rf qtile
fi

git clone https://github.com/qtile/qtile.git

source bin/activate
pip install dbus-next psutil wheel
pip install -r qtile/requirements.txt
bin/pip install qtile/.
deactivate

cp ~/.local/src/qtile_venv/bin/qtile ~/.local/bin/

# ------------------------------------------------------------------------

sudo mkdir -p /usr/share/xsessions/
sudo bash -c 'cat << "QTILEDESKTOP" >> /usr/share/xsessions/qtile.desktop
[Desktop Entry]
Name=Qtile
Comment=Qtile Session
Exec=qtile start
Type=Application
Keywords=wm;tiling
QTILEDESKTOP'

# Add .xsession
touch ~/.xsession && echo "qtile start" > ~/.xsession

# Qtile Autostart.sh file
mkdir -p ~/.config/qtile/
if [ ! -f ~/.config/qtile/autostart.sh ]; then
cat << "QTILEAUTOSTART" > ~/.config/qtile/autostart.sh
#!/bin/sh
pgrep -x picom > /dev/null || picom -b &
autorandr --change &&

# This here if statement sets your background image, with feh... 
# and is also used for the auto-generation of the background image and colors.
if [ -f ~/.fehbg ]; then
    . ~/.fehbg
else
    feh --bg-scale ~/Wallpapers/default_wallpaper_by_natalia-y_on_unsplash.jpg
fi

wpctl set-volume @DEFAULT_AUDIO_SINK@ 10% &
dunst &
numlockx on &
mpd &
xrdb ~/.Xresources &
#nitrogen --restore &

# lock computer automatically after X time of minutes.
xautolock -time 120 -locker "xsecurelock" -detectsleep -secure &

QTILEAUTOSTART

chmod +x ~/.config/qtile/autostart.sh

else 
	echo "File autostart.sh already exists."
fi

# Qtile Colors.sh file
if [ ! -f ~/.config/qtile/qtile_colors.py ]; then
cat << "QTILECOLORS" > ~/.config/qtile/qtile_colors.py
colors = {
    "base00": "#1b0200",  # Default Background
    "base01": "#240002",  # Lighter Background (Used for status bars, line number and folding marks)
    "base02": "#d74d00",  # Selection Background
    "base03": "#d74d00",  # Comments, Invisibles, Line Highlighting
    "base04": "#9c2101",  # Dark Foreground (Used for status bars)
    "base05": "#d74d00",  # Default Foreground, Caret, Delimiters, Operators
    "base06": "#d74d00",  # Light Foreground (Not often used)
    "base07": "#d74d00",  # Light Background (Not often used)
    "base08": "#d74d00",  # Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted
    "base09": "#830508",  # Integers, Boolean, Constants, XML Attributes, Markup Link Url
    "base0A": "#d74d00",  # Classes, Markup Bold, Search Text Background
    "base0B": "#d74d00",  # Strings, Inherited Class, Markup Code, Diff Inserted
    "base0C": "#9a292f",  # Support, Regular Expressions, Escape Characters, Markup Quotes
    "base0D": "#e46324",  # Functions, Methods, Attribute IDs, Headings
    "base0E": "#ea6f10",  # Keywords, Storage, Selector, Markup Italic, Diff Changed
    "base0F": "#ee712d",  # Deprecated, Opening/Closing Embedded Language Tags
}
QTILECOLORS

else 
	echo "File qtile_colors.py already exists."
fi

# -------------------------------------------------------------------------------------------------
# Add User NOPASSWD to shutdown now and reboot
echo "$USER ALL=(ALL) NOPASSWD: /sbin/shutdown now, /sbin/reboot" | sudo tee /etc/sudoers.d/$USER && sudo visudo -c -f /etc/sudoers.d/$USER

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} MPD Setup & config START ${NC}"

mkdir -p ~/.config/mpd/playlists
mkdir -p ~/.local/state/mpd
if [ ! -f ~/.config/mpd/mpd.conf ]; then
touch ~/.config/mpd/database
cat << MPDCONFIG > ~/.config/mpd/mpd.conf
# ~/.config/mpd/mpd.conf or /etc/mpd.conf
# Example: /usr/share/doc/mpd/mpdconf.example

# Recommended location for database
db_file            "~/.config/mpd/database"

# If running mpd using systemd, delete this line to log directly to systemd.
# syslog or ~/.config/mpd/log
log_file           "~/.config/mpd/log"

# The music directory is by default the XDG directory, uncomment to amend and choose a different directory
#music_directory    "~/Music"

# MPD Server network
bind_to_address     "127.0.0.1"
port                "6600"

# Suppress all messages below the given threshold.  Use "verbose" for
# troubleshooting. Available setting arguments are "notice", "info", "verbose", "warning" and "error".
log_level           "error"

# Setting "restore_paused" to "yes" puts MPD into pause mode instead of starting playback after startup.
restore_paused "yes"

# Uncomment to refresh the database whenever files in the music_directory are changed
auto_update "yes"

# Uncomment to enable the functionalities
playlist_directory "~/.config/mpd/playlists"
pid_file           "~/.config/mpd/pid"
state_file         "~/.local/state/mpd/state"
sticker_file       "~/.config/mpd/sticker.sql"
follow_inside_symlinks  "yes"
# save_absolute_paths_in_playlists       "no"


decoder {
        plugin "wildmidi"
        config_file "/etc/timidity/timidity.cfg"
        enabled "no"
}

# Audio output

audio_output {                                                                 
    type     "pipewire"                                                       
    name     "PipeWire Sound Server"                                           
    enabled  "yes"   
}
audio_output {                                                                 
    type     "pulse"                                                           
    name     "Local PulseAudio Server"                                         
    enabled  "no"                                                             
}       

MPDCONFIG

else 
	echo "mpd.conf already exists."
fi

# sudo systemctl enable mpd
#systemctl enable --now --user mpd.service
#systemctl enable --now --user mpd
# systemctl status mpd.service

#systemctl enable --now --user mpd.socket 
#systemctl enable --now --user mpd.service

# mpd --version
# mpd --stderr --no-daemon --verbose
# aplay --list-pcm

echo -e "${YELLOW} MPD END ${NC}"
# -------------------------------------------------------------------------------------------------

echo -e "${YELLOW} Nano config START ${NC}"
if [ ! -f ~/.nanorc ]; then
    cp /etc/nanorc ~/.nanorc
    sed -i 's/^# set linenumbers/set linenumbers/' ~/.nanorc
    sed -i 's/^# set minibar/set minibar/' ~/.nanorc
    sed -i 's/^# set softwrap/set softwrap/' ~/.nanorc
    sed -i 's/^# set atblanks/set atblanks/' ~/.nanorc
else 
	echo "File .nanorc already exists."
fi

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Wallpapers START ${NC}"

if [ ! -d ~/Wallpapers ]; then
mkdir -p ~/Wallpapers
echo -e "${GREEN} Download some wallpapers, Please wait..."

wget -O ~/Wallpapers/default_wallpaper_by_natalia-y_on_unsplash.jpg https://github.com/ITmail-dk/qmade/blob/main/default_wallpaper_by_natalia-y_on_unsplash.jpg?raw=true

# Download random wallpapers from https://unsplash.com
# Set the desired number of wallpapers to download
#count="9"

# Categories topics for the wallpapers like, minimalist-wallpapers "Remember to put a hyphen between the words"
#query="cool-colors-wallpapers"

# Downloading random wallpapers to ~/Wallpapers folder
#for ((i = 1; i <= count; i++)); do
#    wget -qO "$HOME/Wallpapers/unsplash_${query}_${i}.jpg" "https://source.unsplash.com/random/3440x1440/?$query"
#    done

#echo "Wallpapers downloaded successfully."

else 
	echo "Wallpapers folder already exists."
fi

# Nitrogen - - - - - - - - - - - - - - - - - - - - - - - - - - -
# Download some wallpapers from https://unsplash.com/wallpapers

mkdir -p ~/.config/nitrogen

if [ ! -f ~/.config/nitrogen/bg-saved.cfg ]; then
touch ~/.config/nitrogen/bg-saved.cfg
echo "[xin_-1]" >> ~/.config/nitrogen/bg-saved.cfg
echo "file=$HOME/Wallpapers/default-wallpaper.jpg" >> ~/.config/nitrogen/bg-saved.cfg
echo "mode=5" >> ~/.config/nitrogen/bg-saved.cfg
echo "bgcolor=#2E3440" >> ~/.config/nitrogen/bg-saved.cfg
else 
	echo "Nitrogen config file already exists."
fi

if [ ! -f ~/.config/nitrogen/nitrogen.cfg ]; then
cat << "NITROGENCONFIG" > ~/.config/nitrogen/nitrogen.cfg
[geometry]
posx=5
posy=36
sizex=1908
sizey=1037

[nitrogen]
view=icon
recurse=true
sort=alpha
icon_caps=false
NITROGENCONFIG

echo "dirs=$HOME/Wallpapers/;" >> ~/.config/nitrogen/nitrogen.cfg

else 
	echo "Nitrogen config file already exists."
fi

echo -e "${YELLOW} Wallpapers END ${NC}"
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Neovim config Start ${NC}"

if [ ! -f ~/.config/nvim/init.vim ]; then
mkdir -p ~/.config/nvim
cat << "NEOVIMCONFIG" > ~/.config/nvim/init.vim
syntax on
set number
set numberwidth=5
set relativenumber
set ignorecase
NEOVIMCONFIG

else 
	echo "Neovim config file already exists."
fi

echo -e "${YELLOW} Neovim config END ${NC}"
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Kitty theme.conf Start ${NC}"

if [ ! -f $HOME/.config/kitty/themes/kittytheme.conf ]; then
mkdir -p $HOME/.config/kitty/themes
cat << "KITTYTHEMECONF" > $HOME/.config/kitty/themes/kittytheme.conf
background #1b0200
foreground #ee712d
color0 #1b0200
color1 #240002
color2 #d74d00
color3 #d74d00
color4 #9c2101
color5 #d74d00
color6 #d74d00
color7 #d74d00
color8 #d74d00
color9 #830508
color10 #d74d00
color11 #d74d00
color12 #9a292f
color13 #e46324
color14 #ea6f10
color15 #ee712d

KITTYTHEMECONF

else 
	echo "kittytheme.conf file already exists."
fi

echo -e "${YELLOW} Kitty theme.conf END ${NC}"

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Tmux config Start ${NC}"

if [ ! -f ~/.config/tmux/tmux.conf ]; then
mkdir -p ~/.config/tmux
cat << "TMUXCONFIG" > ~/.config/tmux/tmux.conf
unbind r
bind r source-file ~/.config/tmux/tmux.conf

TMUXCONFIG

else 
	echo "Tmux config file already exists."
fi

echo -e "${YELLOW} Tmux config END ${NC}"

# -------------------------------------------------------------------------------------------------

#echo -e "${YELLOW} Xresources config Start ${NC}"

#if [ ! -f ~/.Xresources ]; then

#cat << "XRCONFIG" > ~/.Xresources

#XRCONFIG

#else 
#	echo ".Xresources config file already exists."
#fi


# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Themes START ${NC}"
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Nerd Fonts START - https://www.nerdfonts.com/font-downloads - https://www.nerdfonts.com/cheat-sheet - - - ${NC}"
if [ ! -d ~/.fonts ]; then
mkdir -p ~/.fonts

else 
	echo ".fonts already exists."
fi

# DejaVu Sans Mono font
wget -P /tmp/ https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/DejaVuSansMono.zip
unzip -q -n /tmp/DejaVuSansMono.zip -d ~/.fonts

# Space Mono
#wget -P /tmp/ https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/SpaceMono.zip
#unzip -q -n /tmp/SpaceMono.zip -d ~/.fonts

# Roboto Mono
#wget -P /tmp/ https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/RobotoMono.zip
#unzip -q -n /tmp/RobotoMono.zip -d ~/.fonts

# Fira Mono
#wget -P /tmp/ https://github.com/ryanoasis/nerd-fonts/releases/download/v3.2.1/FiraMono.zip
#unzip -q -n /tmp/FiraMono.zip -d ~/.fonts

rm -f ~/.fonts/*.md
rm -f ~/.fonts/*.txt

echo -e "${YELLOW} Nerd Fonts END - https://www.nerdfonts.com/font-downloads "
# -------------------------------------------------------------------------------------------------

# -------------------------------------------------------------------------------------------------

# ls -d /usr/share/themes/*
# ls -d /usr/share/icons/*
# ls -d /usr/share/
# sudo nano /etc/gtk-3.0/settings.ini
# sudo nano /etc/gtk-2.0/gtkrc

# https://github.com/EliverLara/Nordic

sudo rm -rf /tmp/EliverLara-Nordic
sudo git clone https://github.com/EliverLara/Nordic /tmp/EliverLara-Nordic
sudo cp -r /tmp/EliverLara-Nordic /usr/share/themes/

#sudo mkdir -p /usr/share/sddm/themes/debian-theme/
#sudo cp -r /tmp/EliverLara-Nordic/kde/sddm/Nordic-darker/* /usr/share/sddm/themes/debian-theme/

# Nordzy-cursors --------------------------------------------------------

# https://github.com/alvatip/Nordzy-cursors

cd /tmp/
if [ -d Nordzy-cursors ]; then
    sudo rm -rf Nordzy-cursors
fi

git clone https://github.com/alvatip/Nordzy-cursors
cd Nordzy-cursors
sudo ./install.sh
cd /tmp/

# .Xresources
# Xcursor.theme: Nordzy-cursors
# Xcursor.size: 22

# Nordzy-icon --------------------------------------------------------
# https://github.com/alvatip/Nordzy-icon

cd /tmp/

if [ -d Nordzy-icon ]; then
    sudo rm -rf Nordzy-icon
fi

git clone https://github.com/alvatip/Nordzy-icon
cd Nordzy-icon/
sudo ./install.sh
cd /tmp/


# GTK Settings START --------------------------------------------------------
# /etc/gtk-3.0/settings.ini
# https://docs.gtk.org/gtk4/property.Settings.gtk-cursor-theme-name.html
if [ ! -d /etc/gtk-3.0 ]; then
sudo kdir -p /etc/gtk-3.0

else 
	echo "/etc/gtk-3.0 already exists."
fi

sudo bash -c 'cat << "GTK3SETTINGS" >> /etc/gtk-3.0/settings.ini
[Settings]
gtk-theme-name=EliverLara-Nordic
gtk-fallback-icon-theme=default
gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-font-name=DejaVu Sans Mono 10
gtk-application-prefer-dark-theme=1
gtk-cursor-theme-name=Nordzy-cursors
gtk-cursor-theme-size=0
gtk-icon-theme-name=Nordzy-icon
gtk-enable-event-sounds=0
gtk-enable-input-feedback-sounds=0
GTK3SETTINGS'

if [ ! -d /etc/gtk-4.0 ]; then
sudo mkdir -p /etc/gtk-4.0

else 
	echo "/etc/gtk-4.0 already exists."
fi

sudo bash -c 'cat << "GTK4SETTINGS" >> /etc/gtk-4.0/settings.ini
[Settings]
gtk-theme-name=EliverLara-Nordic
gtk-fallback-icon-theme=default
gtk-toolbar-style=GTK_TOOLBAR_BOTH
gtk-font-name=DejaVu Sans Mono 10
gtk-application-prefer-dark-theme=1
gtk-cursor-theme-name=Nordzy-cursors
gtk-cursor-theme-size=0
gtk-icon-theme-name=Nordzy-icon
gtk-enable-event-sounds=0
gtk-enable-input-feedback-sounds=0
GTK4SETTINGS'


sudo sed -i 's/Adwaita/Nordzy-cursors/g' /usr/share/icons/default/index.theme

# GTK Settings END --------------------------

sudo fc-cache -fv

echo -e "${YELLOW} Themes END ${NC}"
# -------------------------------------------------------------------------------------------------

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} xrandr-set-max + Xsession START ${NC}"

if [ ! -f /usr/local/bin/xrandr-set-max ]; then
# Define the content of the script
xrandrsetmaxcontent=$(cat << "XRANDRSETMAX"
#!/bin/bash

# Get the names of all connected displays
displays=$(xrandr | awk '/ connected/{print $1}')

# Loop through each connected display and set its resolution to the maximum supported resolution
for display in $displays; do
    # Get the maximum supported resolution for the current display
    max_resolution=$(xrandr | awk '/'"$display"'/ && / connected/{getline; print $1}')

    # Set the screen resolution to the maximum supported resolution for the current display
    xrandr --output "$display" --mode "$max_resolution"
done
XRANDRSETMAX
)

# Write the script content to the target file using sudo
echo "$xrandrsetmaxcontent" | sudo tee /usr/local/bin/xrandr-set-max >/dev/null

# SDDM Before Login - /usr/share/sddm/scripts/Xsetup and After Login - /usr/share/sddm/scripts/Xsession
sudo sed -i '$a\. /usr/local/bin/xrandr-set-max' /usr/share/sddm/scripts/Xsetup
#sudo sed -i '$a\. /usr/local/bin/xrandr-set-max' /usr/share/sddm/scripts/Xsession

sudo chmod +x /usr/local/bin/xrandr-set-max

else 
	echo "xrandr-set-max already exists."
fi

#if [ ! -f /etc/X11/Xsession.d/90_xrandr-set-max ]; then
#    sudo cp /usr/local/bin/xrandr-set-max /etc/X11/Xsession.d/90_xrandr-set-max
#    # Run at Login /etc/X11/Xsession.d/FILENAME
#else
#	echo "/etc/X11/Xsession.d/90_xrandr-set-max already exists."
#fi

echo -e "${YELLOW} xrandr-set-max + Xsession END ${NC}"
# -------------------------------------------------------------------------------------------------

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Download Unsplash Wallpapers BIN START ${NC}"
sudo bash -c 'cat << "UNSPLASHDOWNLOADBIN" >> /usr/local/bin/unsplash-download-wallpapers
#!/bin/bash

# Function to download wallpapers
download_wallpapers() {
    # Set the desired number of wallpapers to download
    count="$2"

    # Categories topics for the wallpapers like, minimalist-wallpapers "Remember to put a hyphen between the words"
    query="$1"

    echo "Wallpapers are being downloaded, Please wait..."

    # Download images
    for ((i = 1; i <= count; i++)); do
        wget -qO "$HOME/Wallpapers/unsplash_${query}_${i}.jpg" "https://source.unsplash.com/random/3440x1440/?$query"
    done

    echo "Wallpapers downloaded successfully."
}

if [ -z "$1" ] || [ -z "$2" ]; then
    echo "Usage: unsplash-download-wallpapers <query> <count>"
    echo "Example: unsplash-download-wallpapers hd-nature-landscape 15"
    exit 1
fi

query="$1"
count="$2"

download_wallpapers "$query" "$count"
UNSPLASHDOWNLOADBIN'

sudo chmod +x /usr/local/bin/unsplash-download-wallpapers

echo -e "${YELLOW} Download Unsplash Wallpapers BIN END ${NC}"
# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} auto-new-wallpaper-and-colors BIN START ${NC}"
sudo bash -c 'cat << "AUTONEWWALLPAPERANDCOLORSBIN" >> /usr/local/bin/auto-new-wallpaper-and-colors
#!/bin/bash
export PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:$HOME/.local/bin

if [ ! -f "$HOME/.config/qtile/extract_colors.py" ]; then
    echo "$HOME/.config/qtile/extract_colors.py not found! Please ensure the Python script is in the same directory."
    exit 1
fi

RWALLP="$(find $HOME/Wallpapers -type f | shuf -n 1)"

notify-send -u low "Automatically new background and color theme" "Please wait while we find a new background image and some colors to match"

python3 $HOME/.config/qtile/extract_colors.py $RWALLP
feh --bg-scale $RWALLP
qtile cmd-obj -o cmd -f reload_config
kitty +kitten themes --reload-in=all Kittytheme

notify-send -u low "Automatically new background and color theme" "The background image and colors has been updated."

AUTONEWWALLPAPERANDCOLORSBIN'

sudo chmod +x /usr/local/bin/auto-new-wallpaper-and-colors

echo -e "${YELLOW} auto-new-wallpaper-and-colors BIN END ${NC}"

# Extract New-Colors file
if [ ! -f ~/.config/qtile/extract_colors.py ]; then
cat << "EXTRACTCOLORS" > ~/.config/qtile/extract_colors.py
import sys
import os
import colorgram
from PIL import Image, ImageDraw, ImageFont

def rgb_to_hex(rgb):
    return '#{:02x}{:02x}{:02x}'.format(rgb[0], rgb[1], rgb[2])

def luminance(rgb):
    r, g, b = rgb[0]/255.0, rgb[1]/255.0, rgb[2]/255.0
    a = [r, g, b]
    for i in range(len(a)):
        if a[i] <= 0.03928:
            a[i] = a[i] / 12.92
        else:
            a[i] = ((a[i] + 0.055) / 1.055) ** 2.4
    return 0.2126 * a[0] + 0.7152 * a[1] + 0.0722 * a[2]

def choose_text_color(background_color):
    if luminance(background_color) > 0.5:
        return (0, 0, 0)  # dark text for light background
    else:
        return (255, 255, 255)  # light text for dark background

def create_color_grid(colors, base16_colors, filename='color_grid.png'):
    grid_size = 4  # 4x4 grid
    square_size = 150  # Size of each small square
    img_size = square_size * grid_size  # Calculate total image size

    img = Image.new('RGB', (img_size, img_size))
    draw = ImageDraw.Draw(img)

    # Load a font
    try:
        font = ImageFont.truetype("arial.ttf", 30)
    except IOError:
        font = ImageFont.load_default()

    # Fill the grid with colors and add text labels
    for i, (key, value) in enumerate(base16_colors.items()):
        x = (i % grid_size) * square_size
        y = (i // grid_size) * square_size
        draw.rectangle([x, y, x + square_size, y + square_size], fill=value)
        # Choose text color based on background color luminance
        text_color = choose_text_color(tuple(int(value[i:i+2], 16) for i in (1, 3, 5)))
        # Add text label
        text_position = (x + 10, y + 10)
        draw.text(text_position, key, fill=text_color, font=font)

    img.save(filename)


def main(image_path):
    colors = colorgram.extract(image_path, 16)

    # Ensure there are exactly 16 colors by duplicating if necessary
    while len(colors) < 16:
        colors.append(colors[len(colors) % len(colors)])

    # Sort colors by luminance
    colors.sort(key=lambda col: luminance(col.rgb))

    # Assign colors to Base16 scheme slots ensuring the tonal range
    base16_colors = {
        'base00': rgb_to_hex(colors[0].rgb),
        'base01': rgb_to_hex(colors[5].rgb),
        'base02': rgb_to_hex(colors[12].rgb),
        'base03': rgb_to_hex(colors[9].rgb),
        'base04': rgb_to_hex(colors[4].rgb),
        'base05': rgb_to_hex(colors[10].rgb),
        'base06': rgb_to_hex(colors[6].rgb),
        'base07': rgb_to_hex(colors[14].rgb),
        'base08': rgb_to_hex(colors[2].rgb),
        'base09': rgb_to_hex(colors[3].rgb),
        'base0A': rgb_to_hex(colors[1].rgb),
        'base0B': rgb_to_hex(colors[11].rgb),
        'base0C': rgb_to_hex(colors[8].rgb),
        'base0D': rgb_to_hex(colors[13].rgb),
        'base0E': rgb_to_hex(colors[7].rgb),
        'base0F': rgb_to_hex(colors[15].rgb),
    }

    descriptions = [
        "Default Background",
        "Lighter Background (Used for status bars, line number and folding marks)",
        "Selection Background",
        "Comments, Invisibles, Line Highlighting",
        "Dark Foreground (Used for status bars)",
        "Default Foreground, Caret, Delimiters, Operators",
        "Light Foreground (Not often used)",
        "Light Background (Not often used)",
        "Variables, XML Tags, Markup Link Text, Markup Lists, Diff Deleted",
        "Integers, Boolean, Constants, XML Attributes, Markup Link Url",
        "Classes, Markup Bold, Search Text Background",
        "Strings, Inherited Class, Markup Code, Diff Inserted",
        "Support, Regular Expressions, Escape Characters, Markup Quotes",
        "Functions, Methods, Attribute IDs, Headings",
        "Keywords, Storage, Selector, Markup Italic, Diff Changed",
        "Deprecated, Opening/Closing Embedded Language Tags",
    ]

    # Ensure the directory exists
    qtile_config_dir = os.path.expanduser('~/.config/qtile/')
    os.makedirs(qtile_config_dir, exist_ok=True)

    # Path to the output file
    output_file_path = os.path.join(qtile_config_dir, 'qtile_colors.py')

    # Write the colors to the Python file
    with open(output_file_path, 'w') as f:
        f.write("colors = {\n")
        for key, value in base16_colors.items():
            description = descriptions.pop(0)
            f.write(f'    "{key}": "{value}",  # {description}\n')
        f.write("}\n")

    # Ensure the directory exists
    kitty_config_dir = os.path.expanduser('~/.config/kitty/themes/')
    os.makedirs(kitty_config_dir, exist_ok=True)

    # Path to the output file
    output_file_path = os.path.join(kitty_config_dir, 'kittytheme.conf')

    with open(output_file_path, 'w') as f:
        f.write(f'background {base16_colors["base00"]}\n')
        f.write(f'foreground {base16_colors["base0F"]}\n')
        for index, (_, value) in enumerate(base16_colors.items()):
            f.write(f'color{index} {value}\n')
    # Create a PNG file with the extracted colors and labels
    create_color_grid(colors, base16_colors)

if __name__ == "__main__":
    if len(sys.argv) != 2:
        print("Usage: extract_colors.py <image_path>")
    else:
        main(sys.argv[1])

EXTRACTCOLORS

else 
	echo "File ~/.config/qtile/extract_colors.py already exists."
fi

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Rofi Run menu START ${NC}"
if [ ! -d ~/.config/rofi ]; then
mkdir -p ~/.config/rofi

else 
	echo "Rofi folder already exists."
fi

if [ ! -f ~/.config/rofi/config.rasi ]; then
#touch ~/.config/rofi/config.rasi
cat << "ROFICONFIG" > ~/.config/rofi/config.rasi
configuration {
  display-drun: "Applications:";
  display-window: "Windows:";
  drun-display-format: "{name}";
  font: "DejaVuSansMono Nerd Font Book 10";
  modi: "window,run,drun";
}

/* The Theme */
@theme "~/.config/rofi/rofi-colors.rasi"

// Theme location is "/usr/share/rofi/themes/name.rasi"
//@theme "/usr/share/rofi/themes/Arc-Dark.rasi"

ROFICONFIG

else 
	echo "Rofi rofi-colors file already exists."
fi

if [ ! -f ~/.config/rofi/rofi-colors.rasi ]; then
#touch ~/.config/rofi/config.rasi
cat << "ROFITHEMECONFIG" > ~/.config/rofi/rofi-colors.rasi
* {
  bg: #10171c;
  bg-alt: #344959;

  fg: #EBEBEB;
  fg-alt: #768ca3;

  background-color: @bg;
  
  border: 0;
  margin: 0;
  padding: 0;
  spacing: 0;
}

@import "rofi-common.rasi"

ROFITHEMECONFIG

else 
	echo "Rofi config file already exists."
fi

if [ ! -f ~/.config/rofi/rofi-common.rasi ]; then
cat << "ROFITHEMECOMMONCONFIG" > ~/.config/rofi/rofi-common.rasi
window {
  width: 30%;
}

element {
  padding: 8 0;
  text-color: @fg-alt;
}

element selected {
  text-color: @fg;
}

element-text {
  background-color: inherit;
  text-color: inherit;
  vertical-align: 0.5;
}

element-icon {
  size: 30;
}

entry {
  background-color: @bg-alt;
  padding: 12;
  text-color: @fg;
}

inputbar {
  children: [prompt, entry];
}

listview {
  padding: 8 12;
  background-color: @bg;
  columns: 1;
  lines: 8;
}

mainbox {
  background-color: @bg;
  children: [inputbar, listview];
}

prompt {
  background-color: @bg-alt;
  enabled: true;
  padding: 12 0 0 12;
  text-color: @fg;
}

ROFITHEMECOMMONCONFIG

else 
	echo "Rofi rofi-common file already exists."
fi

echo -e "${YELLOW} Rofi Run menu END ${NC}"

# Rofi Wifi menu
# https://github.com/ericmurphyxyz/rofi-wifi-menu/tree/master
echo -e "${YELLOW} Rofi Wifi menu Start ${NC}"
if [ ! -f ~/.config/rofi/rofi-wifi-menu.sh ]; then
cat << "ROFIWIFI" > ~/.config/rofi/rofi-wifi-menu.sh
#!/usr/bin/env bash

notify-send "Getting list of available Wi-Fi networks..."
# Get a list of available wifi connections and morph it into a nice-looking list
wifi_list=$(nmcli --fields "SECURITY,SSID" device wifi list | sed 1d | sed 's/  */ /g' | sed -E "s/WPA*.?\S/ /g" | sed "s/^--/ /g" | sed "s/  //g" | sed "/--/d")

connected=$(nmcli -fields WIFI g)
if [[ "$connected" =~ "enabled" ]]; then
	toggle="󰖪  Disable Wi-Fi"
elif [[ "$connected" =~ "disabled" ]]; then
	toggle="󰖩  Enable Wi-Fi"
fi

# Use rofi to select wifi network
chosen_network=$(echo -e "$toggle\n$wifi_list" | uniq -u | rofi -dmenu -i -selected-row 1 -p "Wi-Fi SSID: " )
# Get name of connection
read -r chosen_id <<< "${chosen_network:3}"

if [ "$chosen_network" = "" ]; then
	exit
elif [ "$chosen_network" = "󰖩  Enable Wi-Fi" ]; then
	nmcli radio wifi on
elif [ "$chosen_network" = "󰖪  Disable Wi-Fi" ]; then
	nmcli radio wifi off
else
	# Message to show when connection is activated successfully
  	success_message="You are now connected to the Wi-Fi network \"$chosen_id\"."
	# Get saved connections
	saved_connections=$(nmcli -g NAME connection)
	if [[ $(echo "$saved_connections" | grep -w "$chosen_id") = "$chosen_id" ]]; then
		nmcli connection up id "$chosen_id" | grep "successfully" && notify-send "Connection Established" "$success_message"
	else
		if [[ "$chosen_network" =~ "" ]]; then
			wifi_password=$(rofi -dmenu -p "Password: " )
		fi
		nmcli device wifi connect "$chosen_id" password "$wifi_password" | grep "successfully" && notify-send "Connection Established" "$success_message"
    fi
fi

ROFIWIFI

chmod +x ~/.config/rofi/rofi-wifi-menu.sh

else 
	echo "Rofi WiFi menu file already exists."
fi

echo -e "${YELLOW} Rofi Wifi menu END ${NC}"

# -------------------------------------------------------------------------------------------------

#if [ -f /etc/NetworkManager/NetworkManager.conf ]; then
#sudo sed -i 's/managed=false/managed=true/' /etc/NetworkManager/NetworkManager.conf
#sudo systemctl restart NetworkManager

#else 
#	echo "NetworkManager.conf file does not exist."
#fi

# -------------------------------------------------------------------------------------------------



# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Kitty config file START ${NC}"

if [ ! -f ~/.config/kitty/kitty.conf ]; then
mkdir -p ~/.config/kitty/themes
cat << "KITTYCONFIG" > ~/.config/kitty/kitty.conf
# A default configuration file can also be generated by running:
# kitty +runpy 'from kitty.config import *; print(commented_out_default_config())'
#
# The following command will bring up the interactive terminal GUI
# kitty +kitten themes
#
# kitty +kitten themes Catppuccin-Mocha
# kitty +kitten themes --reload-in=all Catppuccin-Mocha

background_opacity 0.98

font_family      monospace
bold_font        auto
italic_font      auto
bold_italic_font auto

font_size 12
force_ltr no

adjust_line_height  0
adjust_column_width 0

adjust_baseline 0

disable_ligatures never

box_drawing_scale 0.001, 1, 1.5, 2

cursor #f2f2f2

cursor_text_color #f2f2f2

cursor_shape underline

cursor_beam_thickness 1.5

cursor_underline_thickness 2.0

cursor_blink_interval -1

cursor_stop_blinking_after 99.0

scrollback_lines 5000

scrollback_pager less --chop-long-lines --RAW-CONTROL-CHARS +INPUT_LINE_NUMBER

scrollback_pager_history_size 0

scrollback_fill_enlarged_window no

wheel_scroll_multiplier 5.0

touch_scroll_multiplier 1.0

mouse_hide_wait 3.0

mouse_map right click paste_from_clipboard

url_color #0087bd
url_style curly

open_url_with default

url_prefixes http https file ftp gemini irc gopher mailto news git

detect_urls yes

url_excluded_characters 

copy_on_select yes

strip_trailing_spaces never

select_by_word_characters @-./_~?&=%+#

click_interval -1.0

focus_follows_mouse no

pointer_shape_when_grabbed arrow

default_pointer_shape beam

pointer_shape_when_dragging beam

mouse_map left            click ungrabbed mouse_click_url_or_select
mouse_map shift+left      click grabbed,ungrabbed mouse_click_url_or_select
mouse_map ctrl+shift+left release grabbed,ungrabbed mouse_click_url

mouse_map ctrl+shift+left press grabbed discard_event

mouse_map middle        release ungrabbed paste_from_selection
mouse_map left          press ungrabbed mouse_selection normal
mouse_map ctrl+alt+left press ungrabbed mouse_selection rectangle
mouse_map left          doublepress ungrabbed mouse_selection word
mouse_map left          triplepress ungrabbed mouse_selection line

mouse_map ctrl+alt+left triplepress ungrabbed mouse_selection line_from_point

#mouse_map right               press ungrabbed mouse_selection extend
mouse_map shift+middle        release ungrabbed,grabbed paste_selection
mouse_map shift+left          press ungrabbed,grabbed mouse_selection normal
mouse_map shift+ctrl+alt+left press ungrabbed,grabbed mouse_selection rectangle
mouse_map shift+left          doublepress ungrabbed,grabbed mouse_selection word
mouse_map shift+left          triplepress ungrabbed,grabbed mouse_selection line

mouse_map shift+ctrl+alt+left triplepress ungrabbed,grabbed mouse_selection line_from_point

repaint_delay 10

input_delay 5

sync_to_monitor yes

enable_audio_bell no

visual_bell_duration 0.0

window_alert_on_bell no

bell_on_tab no

command_on_bell none

remember_window_size  yes
initial_window_width  800
initial_window_height 500

enabled_layouts *

window_resize_step_cells 2
window_resize_step_lines 2

window_border_width 0.0pt

draw_minimal_borders yes

window_margin_width 0

single_window_margin_width -1

window_padding_width 3

placement_strategy center

active_border_color #f2f2f2

inactive_border_color #cccccc

bell_border_color #ff5a00

inactive_text_alpha 1.0

hide_window_decorations no

resize_debounce_time 0.1

resize_draw_strategy static

resize_in_steps no

confirm_os_window_close 0

tab_bar_edge bottom

tab_bar_margin_width 0.0

tab_bar_margin_height 0.0 0.0

tab_bar_style fade

tab_bar_min_tabs 2

tab_switch_strategy previous

tab_fade 0.25 0.5 0.75 1

tab_separator " |"

tab_powerline_style angled

tab_activity_symbol none

tab_title_template "{title}"

active_tab_title_template none

active_tab_foreground   #000
active_tab_background   #eee
active_tab_font_style   bold-italic
inactive_tab_foreground #444
inactive_tab_background #999
inactive_tab_font_style normal

tab_bar_background none

background_image none

background_image_layout tiled

background_image_linear no

dynamic_background_opacity no

background_tint 0.0

dim_opacity 0.75

selection_foreground #000000

selection_background #fffacd

mark1_foreground black

mark1_background #98d3cb

mark2_foreground black

mark2_background #f2dcd3

mark3_foreground black

mark3_background #f274bc

shell .

editor .

close_on_child_death no

allow_remote_control yes

listen_on none

update_check_interval 0

startup_session none

clipboard_control write-clipboard write-primary

allow_hyperlinks yes

term xterm-kitty

wayland_titlebar_color system

macos_titlebar_color system

macos_option_as_alt no

macos_hide_from_tasks no

macos_quit_when_last_window_closed no

macos_window_resizable yes

macos_thicken_font 0

macos_traditional_fullscreen no

macos_show_window_title_in all

macos_custom_beam_cursor no

linux_display_server auto

kitty_mod ctrl+shift

clear_all_shortcuts no
map kitty_mod+c copy_to_clipboard
map kitty_mod+v paste_from_clipboard
map kitty_mod+up        scroll_line_up
map kitty_mod+down      scroll_line_down
map kitty_mod+page_up   scroll_page_up
map kitty_mod+page_down scroll_page_down
map kitty_mod+home      scroll_home
map kitty_mod+end       scroll_end
map kitty_mod+h         show_scrollback
map kitty_mod+w close_window
map kitty_mod+] next_window
map kitty_mod+[ previous_window
map kitty_mod+f move_window_forward
map kitty_mod+b move_window_backward
map kitty_mod+` move_window_to_top
map kitty_mod+r start_resizing_window
map kitty_mod+1 first_window
map kitty_mod+2 second_window
map kitty_mod+3 third_window
map kitty_mod+4 fourth_window
map kitty_mod+5 fifth_window
map kitty_mod+6 sixth_window
map kitty_mod+7 seventh_window
map kitty_mod+8 eighth_window
map kitty_mod+9 ninth_window
map kitty_mod+0 tenth_window
map kitty_mod+right next_tab
map kitty_mod+left  previous_tab
map kitty_mod+t     new_tab
map kitty_mod+q     close_tab
map shift+cmd+w     close_os_window
map kitty_mod+.     move_tab_forward
map kitty_mod+,     move_tab_backward
map kitty_mod+alt+t set_tab_title
map kitty_mod+l next_layout
map kitty_mod+equal     change_font_size all +2.0
map kitty_mod+minus     change_font_size all -2.0
map kitty_mod+backspace change_font_size all 0
map kitty_mod+e kitten hints
map kitty_mod+p>f kitten hints --type path --program -
map kitty_mod+p>shift+f kitten hints --type path
map kitty_mod+p>l kitten hints --type line --program -
map kitty_mod+p>w kitten hints --type word --program -
map kitty_mod+p>h kitten hints --type hash --program -
map kitty_mod+p>n kitten hints --type linenum
map kitty_mod+p>y kitten hints --type hyperlink
map kitty_mod+f11    toggle_fullscreen
map kitty_mod+f10    toggle_maximized
map kitty_mod+u      kitten unicode_input
map kitty_mod+f2     edit_config_file
map kitty_mod+escape kitty_shell window
map kitty_mod+a>m    set_background_opacity +0.1
map kitty_mod+a>l    set_background_opacity -0.1
map kitty_mod+a>1    set_background_opacity 1
map kitty_mod+a>d    set_background_opacity default
map kitty_mod+delete clear_terminal reset active
map kitty_mod+f5 load_config_file
map kitty_mod+f6 debug_config

include ~/.config/kitty/themes/kittytheme.conf

KITTYCONFIG

else 
	echo "Kitty config already exists."
fi


echo -e "${YELLOW} Kitty config file END ${NC}"
# -------------------------------------------------------------------------------------------------

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Edit GRUB BOOT TIMEOUT START ${NC}"
sudo sed -i 's+GRUB_TIMEOUT=5+GRUB_TIMEOUT=1+g' /etc/default/grub && sudo update-grub
echo -e "${YELLOW} Edit GRUB BOOT TIMEOUT END ${NC}"
# -------------------------------------------------------------------------------------------------

echo -e "${YELLOW} Install selection choose what to install Start ${NC}"
for PROGRAM in $PROGRAMS
do
    case $PROGRAM in
        "1")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y libreoffice
            ;;
        "2")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y tlp tlp-rdw bluetooth bluez bluez-cups bluez-obexd bluez-meshd pulseaudio-module-bluetooth bluez-firmware blueman acpi
            ;;
        "3")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y xrdp && sudo systemctl restart xrdp.service
            ;;
        "4")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y freerdp2-x11 libfreerdp-client2-2 libfreerdp2-2 libwinpr2-2
            ;;
        "5")
            cd /tmp/ && wget https://dl.google.com/linux/direct/google-chrome-stable_current_amd64.deb && sudo DEBIAN_FRONTEND=noninteractive apt install -y /tmp/google-chrome-stable_current_amd64.deb && rm google-chrome-stable_current_amd64.deb
            ;;
        "6")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y firefox-esr
            ;;
        "7")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y smbclient
            ;;
        "8")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y nfs-common
            ;;
        "9")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y ceph-common
            ;;
        "10")
            cd /tmp/ && wget -O vscode_amd64.deb 'https://code.visualstudio.com/sha/download?build=stable&os=linux-deb-x64' && sudo DEBIAN_FRONTEND=noninteractive apt install -y /tmp/vscode_amd64.deb && rm vscode_amd64.deb
            ;;
        "11")
            sudo DEBIAN_FRONTEND=noninteractive apt install -y neovim
            ;;
    esac
done
echo -e "${YELLOW} Install selection choose what to install End ${NC}"


# Check for Nvidia graphics card and install drivers ----------------------------------------------

if lspci | grep -i nvidia; then
    echo "Nvidia graphics card detected. Installing drivers..."
    sudo DEBIAN_FRONTEND=noninteractive apt install -y --install-recommends --install-suggests nvidia-driver
    echo 'nvidia-settings --assign CurrentMetaMode="nvidia-auto-select +0+0 { ForceFullCompositionPipeline = On }"' >> ~/.config/qtile/autostart.sh
else
    echo "No Nvidia graphics card detected."
fi

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Qtile Config file START ${NC}"

if [ ! -f ~/.config/qtile/config.py ]; then

cat << "QTILECONFIG" > ~/.config/qtile/config.py
# Qtile Config - Start
# https://docs.qtile.org/en/latest/index.html
# -',.-'-,.'-,'.-',.-',-.'-,.'-,.'-,.'-,'.-',.-'-
#
import os
import subprocess
from libqtile import bar, layout, qtile, widget, hook
from libqtile.config import Click, Drag, Group, Key, Match, Screen, ScratchPad, DropDown, re
from libqtile.lazy import lazy
from libqtile.utils import guess_terminal # terminal = guess_terminal()
from qtile_colors import colors
#from libqtile.dgroups import simple_key_binder


# Custom code start ----------------------------------------------------

def guess_browser():
    """Guess the default web browser."""
    # Define a list of common web browsers
    browsers = ["google-chrome", "firefox", "chromium", "vivaldi", "opera", "brave-browser", "safari"]

    # Loop through the list of browsers and check if they exist in PATH
    for browser in browsers:
        try:
            subprocess.run(["which", browser], check=True, stdout=subprocess.PIPE, stderr=subprocess.PIPE)
            return browser
        except subprocess.CalledProcessError:
            continue

    # If no browser is found, return None
    return None



# Custom code end ------------------------------------------------------

# Colors use example active=colors["3"],


mod = "mod4"
terminal = guess_terminal()
browser = guess_browser()
fileexplorer = "thunar"
runmenu = 'rofi -modi "drun,run,window,filebrowser" -show drun' # Switch between -modi... Default key CTRL+TAB


keys = [
    # A list of available commands that can be bound to keys can be found
    # at https://docs.qtile.org/en/latest/manual/config/lazy.html
    #
    # Examples:
    # a key binding that can run an external Script or Command
    # Key([mod], "l", lazy.spawn(os.path.expanduser("xsecurelock")), desc='Computer Lockdown'),
    #
    # a normal key binding that pulls from a variable
    # Key([mod], "Return", lazy.spawn(terminal), desc="Launch Terminal"),

    # Keybindings
    Key([mod], "Return", lazy.spawn(terminal), desc="Terminal"),
    Key([mod], "b", lazy.spawn(browser), desc="Web Browser"),
    Key([mod], "e", lazy.spawn(fileexplorer), desc="File Explorer"),
    Key([mod], "r", lazy.spawn(runmenu), desc="Run Menu"),
    Key([mod, "shift"], "r", lazy.spawncmd(), desc="Spawn a command using a prompt widget"),
    Key([mod, "control", "mod1"], "l", lazy.spawn(os.path.expanduser("xsecurelock")), desc="Computer Lockdown"),
    Key([mod, "control", "mod1"], "t", lazy.spawn(os.path.expanduser("auto-new-wallpaper-and-colors")), desc="Random Theme"),
    Key([mod, "control", "mod1"], "w", lazy.spawn(os.path.expanduser("~/.config/rofi/rofi-wifi-menu.sh")), desc="WiFi Manager"),
    Key([mod, "control", "mod1"], "n", lazy.spawn(os.path.expanduser("kitty -e sudo nmtui")), desc="Network Manager"),

    # Default
    Key([mod], "h", lazy.layout.left(), desc="Move focus to left"),
    Key([mod], "l", lazy.layout.right(), desc="Move focus to right"),
    Key([mod], "j", lazy.layout.down(), desc="Move focus down"),
    Key([mod], "k", lazy.layout.up(), desc="Move focus up"),
    Key([mod], "space", lazy.layout.next(), desc="Move window focus to other window"),

    # Move windows between left/right columns or move up/down in current stack.
    # Moving out of range in Columns layout will create new column.
    Key([mod, "shift"], "h", lazy.layout.shuffle_left(), desc="Move window to the left"),
    Key([mod, "shift"], "l", lazy.layout.shuffle_right(), desc="Move window to the right"),
    Key([mod, "shift"], "j", lazy.layout.shuffle_down(), desc="Move window down"),
    Key([mod, "shift"], "k", lazy.layout.shuffle_up(), desc="Move window up"),

    # Grow windows. If current window is on the edge of screen and direction
    # will be to screen edge - window would shrink.
    Key([mod, "control"], "h", lazy.layout.grow_left(), lazy.layout.grow(), desc="Grow window to the left"),
    Key([mod, "control"], "l", lazy.layout.grow_right(), lazy.layout.shrink(), desc="Grow window to the right"),
    Key([mod, "control"], "j", lazy.layout.grow_down(), desc="Grow window down"),
    Key([mod, "control"], "k", lazy.layout.grow_up(), desc="Grow window up"),
    Key([mod, "control"], "n", lazy.layout.normalize(), lazy.layout.reset(), desc="Reset all window sizes"),

    # Toggle between split and unsplit sides of stack.
    # Split = all windows displayed
    # Unsplit = 1 window displayed, like Max layout, but still with
    # multiple stack panes
    Key(
        [mod, "shift"],
        "Return",
        lazy.layout.toggle_split(),
        desc="Toggle between split and unsplit sides of stack",
    ),

    # Toggle between different layouts as defined below
    Key([mod], "Tab", lazy.next_layout(), desc="Toggle between layouts"),
    Key([mod], "w", lazy.window.kill(), desc="Kill focused window"),
    Key(
        [mod],
        "f",
        lazy.window.toggle_fullscreen(),
        desc="Toggle fullscreen on the focused window",
    ),
    Key([mod], "t", lazy.window.toggle_floating(), desc="Toggle floating on the focused window"),
    Key([mod, "mod1", "control"], "r", lazy.reload_config(), desc="Reload the config"),
    Key([mod, "mod1", "control"], "q", lazy.shutdown(), desc="Shutdown Qtile"),

    # Audio
    Key([mod, "mod1"], "Up", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"), desc='Volume Up'),
    Key([mod, "mod1"], "Down", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), desc='Volume Down'),
    Key([mod, "mod1"], "m", lazy.spawn("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), desc='Volume Mute Toggle'),

    # XF86 Audio & Brightness keys
    Key([], "XF86AudioRaiseVolume", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 1%+"), desc='Volume Up'),
    Key([], "XF86AudioLowerVolume", lazy.spawn("wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-"), desc='Volume Down'),
    Key([], "XF86AudioMute", lazy.spawn("wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle"), desc='Volume Mute Toggle'),
# mute/unmute the microphone - wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
# Show volume level - wpctl get-volume @DEFAULT_AUDIO_SINK@

    Key([], "XF86AudioPlay", lazy.spawn("playerctl play-pause"), desc='Play-Pause'),
    Key([], "XF86AudioPrev", lazy.spawn("playerctl previous"), desc='Previous'),
    Key([], "XF86AudioNext", lazy.spawn("playerctl next"), desc='Next'),
    Key([], "XF86MonBrightnessUp", lazy.spawn("brightnessctl set +10%"), desc='Brightness UP'),
    Key([], "XF86MonBrightnessDown", lazy.spawn("brightnessctl set 10%-"), desc='Brightness Down'),
    Key([], "Print", lazy.spawn("bash -c 'flameshot gui --path ~/Screenshots'"), desc='Screenshot'),
]

# Add key bindings to switch VTs in Wayland.
# We can't check qtile.core.name in default config as it is loaded before qtile is started
# We therefore defer the check until the key binding is run by using .when(func=...)
for vt in range(1, 8):
    keys.append(
        Key(
            ["control", "mod1"],
            f"f{vt}",
            lazy.core.change_vt(vt).when(func=lambda: qtile.core.name == "wayland"),
            desc=f"Switch to VT{vt}",
        )
    )


# Create labels for groups and assign them a default layout.
# Find icons here - https://www.nerdfonts.com/cheat-sheet
# nf-linux-debian  nf-md-rocket_launch 󱓞 nf-cod-rocket  nf-cod-settings  nf-dev-android  nf-dev-chrome  nf-dev-terminal 
# nf-dev-prolog  nf-fa-apple  nf-fa-earlybirds  nf-fa-egg  nf-fa-grav  nf-fa-linux  nf-fa-snapchat 
# nf-fa-steam  nf-fa-terminal  nf-fa-wifi  nf-fae-pi  nf-md-recycle 󰑌 nf-md-symbol 󱔁 nf-fa-mug_hot 
# nf-fa-thermometer_2  nf-md-battery_medium 󱊢 nf-md-battery_charging 󰂄
# nf-fa-volume_high  nf-fa-volume_low  nf-fa-volume_xmark 
# nf-md-pac_man 󰮯 nf-md-ghost 󰊠 nf-fa-circle  nf-cod-circle_large  nf-cod-circle_filled  nf-md-circle_small 󰧟 nf-md-circle_medium 󰧞 

groups = [
    Group("1", label="", layout="monadtall", matches=[Match(wm_class=re.compile(r"^(Google\-chrome)$"))]),
    Group("2", label="", layout="monadtall"),
    Group("3", label="", layout="monadtall"),
    Group("4", label="", layout="monadtall"),
    Group("5", label="", layout="monadtall"),
    Group("6", label="", layout="monadtall"),
    Group("7", label="", layout="monadtall"),
    Group("8", label="", layout="monadtall"),
    Group("9", label="", layout="monadtall", matches=[Match(wm_class=re.compile(r"^(Firefox\-esr)$"))]),
    Group("0", label="", layout="bsp"),
]

for i in groups:
    keys.extend(
        [
            # mod + group number = switch to group
            Key(
                [mod],
                i.name,
                lazy.group[i.name].toscreen(),
                desc="Switch to group {}".format(i.name),
            ),
            # mod + shift + group number = switch to & move focused window to group
            Key(
                [mod, "shift"],
                i.name,
                lazy.window.togroup(i.name, switch_group=True),
                desc="Switch to & move focused window to group {}".format(i.name),
            ),
            # Or, use below if you prefer not to switch to that group.
            # # mod + shift + group number = move focused window to group
            # Key([mod, "shift"], i.name, lazy.window.togroup(i.name),
            #     desc="move focused window to group {}".format(i.name)),
        ]
    )

# ScratchPad Keybindings
keys.extend([
    Key([mod, "shift"], "Return", lazy.group['scratchpad'].dropdown_toggle('term')),
    Key([mod, "shift"], "e", lazy.group['scratchpad'].dropdown_toggle('mc')),
    Key([mod, "shift"], "a", lazy.group['scratchpad'].dropdown_toggle('audio')),
    Key([mod, "shift"], "n", lazy.group['scratchpad'].dropdown_toggle('notes')),
    Key([mod, "shift"], "m", lazy.group['scratchpad'].dropdown_toggle('music')),
])

# ScratchPads
groups.append(ScratchPad("scratchpad", [
    DropDown("term", "kitty --class=scratch", width=0.8, height=0.8, x=0.1, y=0.1, opacity=1),
    DropDown("mc", "kitty --class=mc -e mc", width=0.8, height=0.8, x=0.1, y=0.1, opacity=1),
    DropDown("audio", "kitty --class=volume -e alsamixer", width=0.8, height=0.8, x=0.1, y=0.1, opacity=1),
    DropDown("notes", "notepadqq", width=0.6, height=0.6, x=0.2, y=0.2, opacity=1),
    DropDown("music", "kitty --class=music -e ncmpcpp", width=0.8, height=0.8, x=0.1, y=0.1, opacity=1),
]))

# Define layouts and layout themes
def init_layout_theme():
    return {"margin":5,
            "border_width":1,
            "border_focus": colors["base06"],
            "border_normal": colors["base02"]
            }

layout_theme = init_layout_theme()

layouts = [
    layout.MonadTall(**layout_theme),
    layout.Max(**layout_theme),
    #layout.Bsp(**layout_theme),
    #layout.Columns(**layout_theme),
    #layout.Stack(num_stacks=2),
    #layout.Matrix(**layout_theme),
    #layout.MonadWide(**layout_theme),
    #layout.RatioTile(**layout_theme),
    #layout.Tile(**layout_theme),
    #layout.TreeTab(**layout_theme),
    #layout.VerticalTile(**layout_theme),
    #layout.Zoomy(**layout_theme),
]

widget_defaults = dict(
    font="DejaVu Sans Mono, sans",
    fontsize=14,
    padding=5,
)
extension_defaults = widget_defaults.copy()

# Bar widgets - https://docs.qtile.org/en/latest/manual/ref/widgets.html

screens = [
    Screen(
        top=bar.Bar(
            [
                widget.CurrentLayoutIcon(scale=0.7, padding=10),
                widget.Spacer(length=5),
                widget.GroupBox(fontsize=18, highlight_method="text", this_current_screen_border="#f7f7f7", highlight_color=colors["base0B"], this_screen_border=colors["base04"], urgent_border=colors["base03"], active=colors["base05"], inactive=colors["base03"], rounded="False", borderwidth=0),                widget.Spacer(length=9),
                widget.Prompt(),
                widget.Spacer(),
                widget.WindowName(width=bar.CALCULATED, max_chars=120),
                widget.Spacer(),
                widget.Systray(fmt="󱊖  {}", icon_size=20),
                # NB Wayland is incompatible with Systray, consider using StatusNotifier
                # widget.StatusNotifier(),
                #widget.Wallpaper(directory="~/Wallpapers/", label="", random_selection="True"),
                #widget.NetGraph(type='line', line_width=1),
                #widget.Net(prefix='M'),
                widget.ThermalSensor(format='CPU: {temp:.0f}{unit}'),
                widget.Volume(fmt="  {}"),
                widget.Spacer(length=5),
                widget.Clock(fmt="  {}",format="%H:%M %A %d-%m-%Y %p"),
                #widget.QuickExit(default_text="LOGOUT", countdown_format="     {}     "),
                widget.Spacer(length=20),
            ], 30, # Define bar height
            background=colors["base00"], opacity=0.95, # Bar background color can also take transparency with "hex color code" or .75
            margin=[5, 5, 0, 5], # Space around bar as int or list of ints [N E S W]
            border_width=[0, 0, 0, 0],  # Width of border as int of list of ints [N E S W]
            border_color=["f7f7f7", "f7f7f7", "f7f7f7", "f7f7f7"]  # Border colour as str or list of str [N E S W]
        ),
        # You can uncomment this variable if you see that on X11 floating resize/moving is laggy
        # By default we handle these events delayed to already improve performance, however your system might still be struggling
        # This variable is set to None (no cap) by default, but you can set it to 60 to indicate that you limit it to 60 events per second
        # x11_drag_polling_rate = 60,
        #wallpaper="~/Wallpapers/default-wallpaper.jpg",
        #wallpaper_mode="fill"
    ),
]

# Drag floating layouts.
mouse = [
    Drag([mod], "Button1", lazy.window.set_position_floating(), start=lazy.window.get_position()),
    Drag([mod], "Button3", lazy.window.set_size_floating(), start=lazy.window.get_size()),
    Click([mod], "Button2", lazy.window.bring_to_front()),
]

dgroups_key_binder = None
dgroups_app_rules = []  # type: list
follow_mouse_focus = True
bring_front_click = False
floats_kept_above = True
cursor_warp = False
floating_layout = layout.Floating(**layout_theme,
    float_rules=[
        # Run the utility xprop to see the wm class and name of an X client.
        *layout.Floating.default_float_rules,
        Match(wm_class="confirmreset"),  # gitk
        Match(wm_class="makebranch"),  # gitk
        Match(wm_class="maketag"),  # gitk
        Match(wm_class="ssh-askpass"),  # ssh-askpass
        Match(title="branchdialog"),  # gitk
        Match(title="pinentry"),  # GPG key password entry
    ]
)
auto_fullscreen = True
focus_on_window_activation = "smart"
reconfigure_screens = True

# If things like steam games want to auto-minimize themselves when losing
# focus, should we respect this or not?
auto_minimize = True

# Remember to add, "hook" "import os" "import subprocess" "Match"
@hook.subscribe.startup_once
def autostart():
    autostartscript = os.path.expanduser("~/.config/qtile/autostart.sh")
    subprocess.run([autostartscript])

@hook.subscribe.client_new
def move_window_to_group(client):
    for group in groups:
        if any(client.match(match) for match in group.matches):
            client.togroup(group.name)
            client.qtile.groups_map[group.name].toscreen()
            break


# When using the Wayland backend, this can be used to configure input devices.
wl_input_rules = None

wmname = "Qtile"

QTILECONFIG

else 
	echo "Qtile config file already exists."
fi

# -------------------------------------------------------------------------------------------------
echo -e "${YELLOW} Qtile Config file END ${NC}"
# -------------------------------------------------------------------------------------------------

# -------------------------------------------------------------------------------------------------

# Install closing screen ##### ##### ##### ##### ##### ##### ##### ##### ##### ####
clear
if (whiptail --title "Installation Complete" --yesno "Qmade Installation is complete. \nDo you want to restart the computer ?\n\nSome practical information. \nWindows key + Enter opens a terminal \nWindows key + B opens a web browser \nWindows key + W closes the active window" 15 60); then
    cd ~
    clear
    echo -e "${RED} "
    echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
    echo -e "${RED} "
    echo -e "${RED}      Enter your user password, to continue if necessary"
    echo -e "${RED} "
    echo -e "${RED}-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
    echo -e "${RED} ${NC}"
    sudo reboot
    echo -e "${GREEN}See you later alligator..."
    echo -e "${GREEN} "
    echo -e "${GREEN} ${NC}"
else
    cd ~
    clear
    echo -e "${GREEN} -'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-"
    echo -e "${GREEN} "
    echo -e "${GREEN}    You chose not to restart the computer, Installation complete."
    echo -e "${GREEN}                Run startx to get to the login screen"
    echo -e "${GREEN} "
    echo -e "${GREEN} -'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'-'- ${NC}"
fi

# Install Done ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##### ##

# Test Qtile config file.
# python3 ~/.config/qtile/config.py
