#!/bin/sh

# == MY ARCH SETUP INSTALLER == #
#part1

# Restoring Terminal Defaults
printf '\033c'

echo "Welcome to Arch Linux installer script!"

# Increasing pacman's download streams to 5
sed -i "s/^#ParallelDownloads = 5$/ParallelDownloads = 5/" /etc/pacman.conf

# Printing out conneted drives and asking which drive to partition and how, then mounting them.
lsblk
echo "Enter the drive you want to install the OS on: "
read drive
cfdisk $drive
echo "Enter the partition for your root: "
read rootpartition
mkfs.ext4 $rootpartition



read -p "Did you also create efi partition? [y/n]" answer
if [[ $answer = y ]] ; then
  echo "Enter EFI partition: "
  read efipartition
  mkfs.fat -F32 $efipartition
fi
mount $rootpartition /mnt
mkdir /mnt/home


# Generating fstab file so the system can find our filesystem on reboot
mkdir /mnt/etc
genfstab -U -p /mnt >> /mnt/etc/fstab

# Downloading the core system utilities
pacstrap -i /mnt base

# Generating the second part of the script from the current one and then chrooting into our live installion and executing the new script.
sed '1,/^#part2$/d' `basename $0` > /mnt/arch_install2.sh
chmod +x /mnt/arch_install2.sh
arch-chroot /mnt ./arch_install2.sh
exit

#part2

# Restoring Terminal Defaults
printf '\033c'

# Downloading the kernel base developement and network packages and starting thier services
pacman -S --noconfirm sed linux linux-headers linux-firmware base-devel networkmanager wpa_supplicant wireless_tools netctl dialog
systemctl enable NetworkManager

# Increasing pacman's download streams to 5
sed -i "s/^#ParallelDownloads = 5$/ParallelDownloads = 15/" /etc/pacman.conf

# Enabling multilib support
echo "[multilib]" >> /etc/pacman.conf
echo "Include = /etc/pacman.d/mirrorlist" >> /etc/pacman.conf

# Setting up locales keymap and language settings 
ln -sf /usr/share/zoneinfo/Asia/Kolkata /etc/localtime
echo "en_US.UTF-8 UTF-8" >> /etc/locale.gen
locale-gen
echo "LANG=en_US.UTF-8" > /etc/locale.conf
echo "KEYMAP=us" > /etc/vconsole.conf

# Setting up system name hosts bootloader and the users
echo "Hostname: "
read hostname
echo $hostname > /etc/hostname
echo "127.0.0.1       localhost" >> /etc/hosts
echo "127.0.1.1       $hostname.localdomain $hostname" >> /etc/hosts
mkinitcpio -P
passwd
pacman --noconfirm -Sy grub efibootmgr os-prober dosfstools mtools
echo "Enter EFI partition: "
read efipartition
mkdir /boot/EFI
mount $efipartition /boot/EFI
grub-install --target=x86_64-efi --bootloader-id=grub_uefi --recheck
cp /usr/share/locale/en\@quot/LC_MESSAGES/grub.mo /boot/grub/locale/en.mo
grub-mkconfig -o /boot/grub/grub.cfg

echo "Enter Swap Size: "
read swapsize
mkswap -U clear --size $swapsize --file /swapfile
swapon /swapfile
echo "/swapfile none swap defaults 0 0" >> /etc/fstab

echo "%wheel ALL=(ALL) NOPASSWD: ALL" >> /etc/sudoers
echo "Enter Username: "
read username
useradd -m -g users -G wheel $username
passwd $username

ai3_path=/home/$username/arch_install3.sh
sed '1,/^#part3$/d' arch_install2.sh > $ai3_path
chown $username:users $ai3_path
chmod +x $ai3_path

# Installing various CPU and GPU drivers
read -p "Are you in a virtual machince? [y/n]" answer
if [[ $answer = y ]] ; then
  pacman --noconfirm -Sy virtualbox-guest-utils xf86-video-vmware
  exit
fi

read -p "Do you have AMD cpu or Intel CPU? [amd/intel]" answer
if [[ $answer = amd ]] ; then
  pacman --noconfirm -Sy amd-ucode
else
  pacman --noconfirm -Sy intel-ucode
fi

read -p "Do you have AMD gpu or Nvidia gpu? [amd/nvidia/intel]" answer
if [[ $answer = nvidia ]] ; then
  pacman --noconfirm -Sy nvidia lib32-nvidia-utils nvidia-utils
  echo "GPU=NVIDIA" > /etc/.archinstallscriptconf
elif [[ $answer = amd ]] ; then
  pacman --noconfirm -Sy mesa lib32-mesa vulkan-radeon lib32-vulkan-radeon xf86-video-amdgpu
  echo "GPU=AMD" > /etc/.archinstallscriptconf
else
  pacman --noconfirm -Sy mesa lib32-mesa vulkan-intel lib32-vulkan-intel xorg-server
  echo "GPU=INTEL" > /etc/.archinstallscriptconf
fi

echo "Pre-Installation Finish Reboot now"

exit


#part3

# Setting up terminal defaults 
printf '\033c'

# Installing programs 
sudo pacman -Syu --noconfirm hyprland polkit xdg-desktop-portal-hyprland xdg-desktop-portal-gtk hyprpaper hypridle hyprlock hyprpolkitagent waybar git nsxiv bash-completion mpv ffmpeg fzf man flameshot neovim dunst curl htop lazygit wiremix plocate pipewire lib32-pipewire pipewire-audio pipewire-alsa wireplumber pipewire-pulse 7zip rsync openssh starship ttf-terminus-nerd reflector ranger qutebrowser xclip udiskie alacritty rofi bluez bluez-utils bluetui otf-font-awesome perl-image-exiftool grim brightnessctl ufw rdesktop keyd bitwarden xorg-xrdb xorg-xhost mumble

sudo systemctl enable bluetooth
sudo systemctl enable keyd

# Generating Dotfiles
sed -n '/^##BASHPROFILE#$/,/^##BASHPROFILEEND#$/p' ~/arch_install3.sh | cut -c2- > ~/.bash_profile

##BASHPROFILE#
##
## ~/.bash_profile
##
#
#[[ -f ~/.bashrc ]] && . ~/.bashrc
#
#if [[ "$(tty)" = "/dev/tty1" ]]; then
#    pgrep hyprland || start-hyprland
#fi
##BASHPROFILEEND#


sed -n '/^##BASHRC#$/,/^##BASHRCEND#$/p' ~/arch_install3.sh | cut -c2- > ~/.bashrc


##BASHRC#
##
## ~/.bashrc
##
#
## If not running interactively, don't do anything
#[[ $- != *i* ]] && return
#PS1='[\u@\h \W]\$ '
#
##Quality of life Changes
#shopt -s autocd
#set -o vi
#
#
##XDG
#export XDG_DATA_HOME=$HOME/.local/share
#export XDG_CONFIG_HOME=$HOME/.config
#export XDG_STATE_HOME=$HOME/.local/state
#export XDG_CACHE_HOME=$HOME/.cache
#
#
##ENVAR
#export GNUPGHOME="$XDG_DATA_HOME"/gnupg
#export LESSHISTFILE="$XDG_STATE_HOME"/lesshistory
#export WINEPREFIX="$XDG_DATA_HOME"/wineprefixes/default
#export PATH=~/.local/bin:$PATH
#export EDITOR=nvim
#export VISUAL=nvim
#export TERMINAL=alacritty
#export RANGER_LOAD_DEFAULT_RC=FALSE
#
#
##Shortcuts
#alias l='ls -lAh --color=auto'
#alias ls='ls --color=auto'
#alias grep='grep --color=auto'
#alias vim='nvim'
#alias wget='wget --hsts-file="$XDG_DATA_HOME"/wget-hsts'
#
#if [[ -r /usr/share/bash-completion/bash_completion ]]; then
#  . /usr/share/bash-completion/bash_completion
#fi
#
#eval "$(starship init bash)"
##BASHRCEND#

mkdir -p ~/.config/git
sed -n '/^##GIT#$/,/^##GITEND#$/p' ~/arch_install3.sh | cut -c2- > ~/.config/git/config

##GIT#
#[user]
#   email = harsh13virdi@gmail.com
#	name = Harsh Virdi
#[protocol "file"]
#	allow = always
##GITEND#

mkdir -p ~/.config/hypr
sed -n '/^###HYPRLANDCONF########$/,/^##HYPRLANDCONFEND######$/p' ~/arch_install3.sh | cut -c2- > ~/.config/hypr/hyprland.conf

#######################
###HYPRLANDCONF########
#######################

## This is an example Hyprland config file.
## Refer to the wiki for more information.
## https://wiki.hyprland.org/Configuring/
#
## Please note not all available settings / options are set here.
## For a full list, see the wiki
#
## You can split this configuration into multiple files
## Create your files separately and then link them to this file like this:
## source = ~/.config/hypr/myColors.conf
#
#
#################
#### MONITORS ###
#################
#
## See https://wiki.hyprland.org/Configuring/Monitors/
##monitor=DP-2, 2560x1080@99.94, 0x0, 1, bitdepth, 10, cm, hdr, sdrbrightness, 1.2, sdrsaturation, 0.98, vrr, 1
#monitor=DP-2, 2560x1080@99.94, 0x0, 1, vrr, 1
##monitor=HDMI-A-2, 2560x1080@120.00, 0x0, 1, bitdepth, 10, cm, hdr, sdrbrightness, 1.2, sdrsaturation, 0.98, vrr, 1
##monitor=HDMI-A-2, 2560x1080@120.00, 0x0, 1, vrr, 1
##monitor=DP-2, disable
#monitor=HDMI-A-2, disable
#
####################
#### MY PROGRAMS ###
####################
#
## See https://wiki.hyprland.org/Configuring/Keywords/
#
## Set programs that you use
#$terminal = alacritty
#$fileManager = alacritty -e ranger
#$menu = rofi -show run
#
#
##################
#### AUTOSTART ###
##################
#
## Autostart necessary processes (like notifications daemons, status bars, etc.)
## Or execute your favorite apps at launch like this:
#
#exec-once = waybar
#exec-once = dunst
#exec-once = systemctl --user start hyprpolkitagent
#exec-once = hyprpaper
#exec-once = udiskie
#exec-once = xrdb -load ~/.cache/wal/colors.Xresources
#exec-once = gsettings set org.gnome.desktop.interface gtk-theme "oomox-colors-oomox"
#exec-once = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark"
#
##############################
#### ENVIRONMENT VARIABLES ###
##############################
## See https://wiki.hyprland.org/Configuring/Environment-variables/
#
##Nvidia GPU 
##env = LIBVA_DRIVER_NAME,nvidia
##env = __GLX_VENDOR_LIBRARY_NAME,nvidia
#
##Hyprland
#env = XDG_CURRENT_DESKTOP,Hyprland
#env = XDG_SESSION_TYPE,wayland
#env = XDG_SESSION_DESKTOP,Hyprland
#env = XCURSOR_SIZE,24
#env = HYPRCURSOR_SIZE,24
#
##QT
#env = QT_QPA_PLATFORM=wayland
#env = QT_STYLE_OVERRIDE,Oomox
#
####################
#### PERMISSIONS ###
####################
#
## See https://wiki.hyprland.org/Configuring/Permissions/
## Please note permission changes here require a Hyprland restart and are not applied on-the-fly
## for security reasons
#
## ecosystem {
##   enforce_permissions = 1
## }
#
## permission = /usr/(bin|local/bin)/grim, screencopy, allow
## permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow
## permission = /usr/(bin|local/bin)/hyprpm, plugin, allow
#
#
######################
#### LOOK AND FEEL ###
######################
#
## Refer to https://wiki.hyprland.org/Configuring/Variables/
#
## https://wiki.hyprland.org/Configuring/Variables/#general
#
#source = ~/.cache/wal/hyprland-looknfeel.conf
#
## https://wiki.hyprland.org/Configuring/Variables/#animations
#animations {
#    enabled = yes, please :)
#
#    # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more
#
#    bezier = easeOutQuint,0.23,1,0.32,1
#    bezier = easeInOutCubic,0.65,0.05,0.36,1
#    bezier = linear,0,0,1,1
#    bezier = almostLinear,0.5,0.5,0.75,1.0
#    bezier = quick,0.15,0,0.1,1
#
#    animation = global, 1, 10, default
#    animation = border, 1, 5.39, easeOutQuint
#    animation = windows, 1, 4.79, easeOutQuint
#    animation = windowsIn, 1, 4.1, easeOutQuint, popin 87%
#    animation = windowsOut, 1, 1.49, linear, popin 87%
#    animation = fadeIn, 1, 1.73, almostLinear
#    animation = fadeOut, 1, 1.46, almostLinear
#    animation = fade, 1, 3.03, quick
#    animation = layers, 1, 3.81, easeOutQuint
#    animation = layersIn, 1, 4, easeOutQuint, fade
#    animation = layersOut, 1, 1.5, linear, fade
#    animation = fadeLayersIn, 1, 1.79, almostLinear
#    animation = fadeLayersOut, 1, 1.39, almostLinear
#    animation = workspaces, 1, 1.94, almostLinear, fade
#    animation = workspacesIn, 1, 1.21, almostLinear, fade
#    animation = workspacesOut, 1, 1.94, almostLinear, fade
#}
#
## Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/
## "Smart gaps" / "No gaps when only"
## uncomment all if you wish to use that.
## workspace = w[tv1], gapsout:0, gapsin:0
## workspace = f[1], gapsout:0, gapsin:0
## windowrule = bordersize 0, floating:0, onworkspace:w[tv1]
## windowrule = rounding 0, floating:0, onworkspace:w[tv1]
## windowrule = bordersize 0, floating:0, onworkspace:f[1]
## windowrule = rounding 0, floating:0, onworkspace:f[1]
#
## See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more
#dwindle {
#    pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below
#    preserve_split = true # You probably want this
#}
#
## See https://wiki.hyprland.org/Configuring/Master-Layout/ for more
#master {
#    new_status = master
#    new_on_top = true
#}
#
## https://wiki.hyprland.org/Configuring/Variables/#misc
#misc {
#    force_default_wallpaper = 0 # Set to 0 or 1 to disable the anime mascot wallpapers
#    disable_hyprland_logo = true # If true disables the random hyprland logo / anime girl background. :(
#}
#
#
##############
#### INPUT ###
##############
#
## https://wiki.hyprland.org/Configuring/Variables/#input
#input {
#    kb_layout = us
#    kb_variant =
#    kb_model =
#    kb_options =
#    kb_rules =
#
#    follow_mouse = 1
#    accel_profile = flat
#
#    sensitivity = 0 # -1.0 - 1.0, 0 means no modification.
#
#    touchpad {
#        natural_scroll = false
#    }
#}
#
## https://wiki.hyprland.org/Configuring/Variables/#gestures
#gestures {
#    workspace_swipe_touch = false
#}
#
## Example per-device config
## See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more
#device {
#    name = epic-mouse-v1
#    sensitivity = -0.5
#}
#
#
####################
#### KEYBINDINGS ###
####################
#
## See https://wiki.hyprland.org/Configuring/Keywords/
#$mainMod = SUPER # Sets "Windows" key as main modifier
#
## Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more
#bind = SUPERSHIFT, RETURN, exec, $terminal
#bind = $mainMod, Q, killactive,
#bind = SUPERSHIFT, Q, exit,
#bind = $mainMod, E, exec, $fileManager
#bind = $mainMod, V, togglefloating,
#bind = $mainMod, R, exec, $menu
#bind = Alt_L, F4, exec, kill -9 $(hyprctl activewindow | grep pid | tail -1 | awk '{print$2}')
## bind = $mainMod, J, togglesplit, # dwindle
#
## Window manipulation
#bind = $mainMod, j, cyclenext
#bind = $mainMod, k, cyclenext, prev
#bind = $mainMod, RETURN, swapnext
#bind = $mainMod, h, splitratio, -0.1
#bind = $mainMod, l, splitratio, 0.1
#bind = $mainMod, m, fullscreen, 0
#
## Switch workspaces with mainMod + [0-9]
#bind = $mainMod, 1, workspace, 1
#bind = $mainMod, 2, workspace, 2
#bind = $mainMod, 3, workspace, 3
#bind = $mainMod, 4, workspace, 4
#bind = $mainMod, 5, workspace, 5
#bind = $mainMod, 6, workspace, 6
#bind = $mainMod, 7, workspace, 7
#bind = $mainMod, 8, workspace, 8
#bind = $mainMod, 9, workspace, 9
#bind = $mainMod, 0, workspace, 10
#
## Move active window to a workspace with mainMod + SHIFT + [0-9]
#bind = $mainMod SHIFT, 1, movetoworkspacesilent, 1
#bind = $mainMod SHIFT, 2, movetoworkspacesilent, 2
#bind = $mainMod SHIFT, 3, movetoworkspacesilent, 3
#bind = $mainMod SHIFT, 4, movetoworkspacesilent, 4
#bind = $mainMod SHIFT, 5, movetoworkspacesilent, 5
#bind = $mainMod SHIFT, 6, movetoworkspacesilent, 6
#bind = $mainMod SHIFT, 7, movetoworkspacesilent, 7
#bind = $mainMod SHIFT, 8, movetoworkspacesilent, 8
#bind = $mainMod SHIFT, 9, movetoworkspacesilent, 9
#bind = $mainMod SHIFT, 0, movetoworkspacesilent, 10
#
## Example special workspace (scratchpad)
#bind = $mainMod, `, togglespecialworkspace, magic
#bind = $mainMod SHIFT, `, movetoworkspace, special:magic
#
## Scroll through existing workspaces with mainMod + scroll
#bind = $mainMod, mouse_down, workspace, e+1
#bind = $mainMod, mouse_up, workspace, e-1
#
## Move/resize windows with mainMod + LMB/RMB and dragging
#bindm = $mainMod, mouse:272, movewindow
#bindm = $mainMod, mouse:273, resizewindow
#
## Laptop multimedia keys for volume and LCD brightness
#bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+
#bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
#bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
#bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle
#bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+
#bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%-
#
## Requires playerctl
#bindl = , XF86AudioNext, exec, playerctl next
#bindl = , XF86AudioPause, exec, playerctl play-pause
#bindl = , XF86AudioPlay, exec, playerctl play-pause
#bindl = , XF86AudioPrev, exec, playerctl previous
#
## Binds for ScriptExec
#bind = $mainMod, F, exec, alacritty -e fuzzyopen
#bind = $mainMod SHIFT, B, exec, blender
#bind = $mainMod SHIFT, S, exec, steam
#bind = $mainMod SHIFT, D, exec, discord
#bind = $mainMod SHIFT ALT_L, B, exec, qutebrowser
#bind = , Print, exec, flameshot screen -p ~/Pictures/
#
## Global Keybinds
#bind = , mouse:276, pass, class:^(TeamSpeak)$  
#bind = , mouse:276, pass, class:^(Discord)$  
#
###############################
#### WINDOWS AND WORKSPACES ###
###############################
#
## See https://wiki.hyprland.org/Configuring/Window-Rules/ for more
## See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules
#
## windowrules for pinning windows to specific workspaces
#windowrule = workspace 3 silent,match:title .*Blender
#windowrule = workspace 3 silent,match:title .*Kdenlive
#windowrule = workspace 3 silent,match:title .*Krita
#windowrule = workspace 4 silent, match:title .*Steam.*
#windowrule = workspace 4 silent, match:title .*RPCS3.*
#windowrule = workspace 4 silent, match:title .*PCSX2.*
#windowrule = workspace 4 silent, match:title .*Lutris.*
#windowrule = workspace 5 silent,match:title .*mpv
#windowrule = workspace 5 silent,match:title .*OBS.*
#windowrule = workspace 6 silent,match:title .*Discord
#windowrule = workspace 6 silent,match:title .*TeamSpeak.*
#windowrule = workspace 6 silent,match:title .*Mumble.*
#windowrule = workspace 7 silent,match:class .*pcmanfm
#windowrule = workspace 7 silent,match:title .*nsxiv
#windowrule = workspace 8 silent,match:title .*qutebrowser
#
## Ignore maximize requests from apps. You'll probably like this.
#windowrule = suppress_event maximize, match:class .*
#
## Fix some dragging issues with XWayland
#windowrule = no_initial_focus on,match:class .*,match:title .*,match:xwayland 1,match:float 1,match:fullscreen 0,match:pin 0
#
#######################
##HYPRLANDCONFEND######

mkdir -p ~/.local/share/nvim/undodir
mkdir -p ~/.config/nvim
sed -n '/^##INITVIM#$/,/^##INITVIMEND#$/p' ~/arch_install3.sh | cut -c2- > ~/.config/nvim/init.vim

##INITVIM#
#hi Normal guibg=NONE ctermbg=NONE
#syntax enable
#filetype plugin on
#set nu rnu 
#set cursorline 
#set wrap 
#set textwidth=0 wrapmargin=0 
#set linebreak 
#set scrolloff=8 sidescrolloff=8
#set tabstop=4 softtabstop=4 shiftwidth=4 
#set expandtab smartindent autoindent
#set ignorecase smartcase incsearch
#set notermguicolors showmatch showmode showcmd
#set nobackup noswapfile undofile undodir=~/.local/share/nvim/undodir
#set nocompatible noerrorbells hidden 
#set iskeyword+=- 
#set path+=** 
#set clipboard+=unnamedplus 
#set wildmenu spell spelllang=en_us
#set splitbelow splitright
#set showtabline=1 tabline=''
#let mapleader = " "
#nnoremap <leader>c :nohlsearch<CR>
#nnoremap Y y$
#nnoremap n nzzzv
#nnoremap N Nzzzv
#nnoremap <C-d> <C-d>zz
#nnoremap <C-u> <C-u>zz
#nnoremap <leader>bn :bnext<CR>
#nnoremap <leader>bp :bprevious<CR>
#nnoremap <C-h> <C-w>h
#nnoremap <C-j> <C-w>j
#nnoremap <C-k> <C-w>k
#nnoremap <C-l> <C-w>l
#nnoremap <leader>sv :vsplit<CR>
#nnoremap <leader>sh :split<CR>
#nnoremap <C-Up> :resize +2<CR>
#nnoremap <C-Down> :resize -2<CR>
#nnoremap <C-Left> :vertical resize -2<CR>
#nnoremap <C-Right> :vertical resize +2<CR>
#nnoremap <A-j> :m .+1<CR>==
#nnoremap <A-k> :m .-2<CR>==
#vnoremap <A-j> :m '>+1<CR>gv=gv
#vnoremap <A-k> :m '>-2<CR>gv=gv
#vnoremap < <gv
#vnoremap > >gv
#nnoremap <leader>e :Explore<CR>
#nnoremap <leader>ff :find
#nnoremap J mzJ`z
#nnoremap <leader>rc :e $MYVIMRC<CR>
#nnoremap <leader>rl :so $MYVIMRC<CR>
#nnoremap <leader>tn :tabnew<CR>
#nnoremap <leader>tx :tabclose<CR>
#nnoremap <leader>tm :tabmove<CR>
#nnoremap <leader>tr :tabmove +1<CR>
#nnoremap <leader>tl :tabmove -1<CR>
#set statusline=
#set statusline+=\ %F\ %M\ %Y\ %R
#set statusline+=%=
#set statusline+=\ ascii:\ %b\ hex:\ 0x%B\ row:\ %l\ col:\ %c\ percent:\ %p%%
#set laststatus=2
#
##INITVIMEND#

mkdir -p ~/.config/waybar
sed -n '/#\/\/WAYBARCONFIG/,/#\/\/WAYBARCONFIGEND/p' ~/arch_install3.sh | cut -c2- > ~/.config/waybar/config.jsonc

#######################
########WAYBAR#########
#######################

#//WAYBARCONFIG
#// -*- mode: jsonc -*-
#{
#    // "layer": "top", // Waybar at top layer
#    // "position": "bottom", // Waybar position (top|bottom|left|right)
#    "height": 30, // Waybar height (to be removed for auto height)
#    // "width": 1280, // Waybar width
#    "spacing": 4, // Gaps between modules (4px)
#    // Choose the order of the modules
#    "modules-left": [
#        "hyprland/workspaces",
#    ],
#    "modules-center": [
#        "hyprland/window"
#    ],
#    "modules-right": [
#        "tray",
#        "pulseaudio",
#        "network",
#        "cpu",
#        "custom/gettemp",
#        "memory",
#        "battery",
#        "battery#bat2",
#        "clock",
#        "power-profiles-daemon"
#    ],
#    "tray": {
#        "spacing": 10,
#    },
#    "clock": {
#        "tooltip-format": "<big>{:%Y %B}</big>\n<tt><small>{calendar}</small></tt>",
#        "format-alt": "{:%Y-%m-%d}"
#    },
#    "cpu": {
#        "format": "{usage}% ",
#        "tooltip": false,
#        "on-click": "alacritty -e htop"
#    },
#    "memory": {
#        "format": "{}% ",
#        "on-click": "alacritty -e htop -s PERCENT_MEM"
#    },
#    "battery": {
#        "states": {
#            "warning": 30,
#            "critical": 15
#        },
#        "format": "{capacity}% {icon}",
#        "format-full": "{capacity}% {icon}",
#        "format-charging": "{capacity}% ",
#        "format-plugged": "{capacity}% ",
#        "format-alt": "{time} {icon}",
#        "format-icons": ["", "", "", "", ""]
#    },
#    "battery#bat2": {
#        "bat": "BAT2"
#    },
#    "power-profiles-daemon": {
#      "format": "{icon}",
#      "tooltip-format": "Power profile: {profile}\nDriver: {driver}",
#      "tooltip": true,
#      "format-icons": {
#        "default": "",
#        "performance": "",
#        "balanced": "",
#        "power-saver": ""
#      }
#    },
#    "network": {
#        "format-wifi": "{essid} ({signalStrength}%) ",
#        "format-ethernet": "{ipaddr}/{cidr} ",
#        "tooltip-format": "{ifname} via {gwaddr} ",
#        "format-linked": "{ifname} (No IP) ",
#        "format-disconnected": "Disconnected ⚠",
#        "on-click": "alacritty -e nmtui"
#    },
#    "custom/gettemp": {
#        "exec": "gettemp",
#        "format": "{text} "
#    },
#    "pulseaudio": {
#        "format": "{volume}% {icon} {format_source}",
#        "format-bluetooth": "{volume}% {icon} {format_source}",
#        "format-bluetooth-muted": " {icon} {format_source}",
#        "format-muted": " {format_source}",
#        "format-source": "{volume}% ",
#        "format-source-muted": "",
#        "format-icons": {
#            "headphone": "",
#            "hands-free": "",
#            "headset": "",
#            "phone": "",
#            "portable": "",
#            "car": "",
#            "default": ["", "", ""]
#        },
#        "on-click": "alacritty -e wiremix"
#    },
#}
#//WAYBARCONFIGEND


#######################
#####PYWALTEMPLATE#####
#######################

mkdir -p ~/.config/wal/templates
sed -n '/#\/\/ROFICONFIG/,/#\/\/ROFICONFIGEND/p' ~/arch_install3.sh | cut -c2- > ~/.config/wal/templates/dmenu.rasi

#//ROFICONFIG
#/**
# * ROFI Color theme
# * User: Qball
# * Copyright: Dave Davenport
# */
#
#* {{
#    background-color:      {color11};
#    border-color:          {color10};
#    text-color:           {color0};
#    font:            "Terminess Nerd Font 12";
#}}
#window {{
#    anchor:     south;
#    location:   south;
#    width:      100%;
#    padding:    2px;
#    children:   [ horibox ];
#}}
#horibox {{
#    orientation: horizontal;
#    children:   [ prompt, entry, listview ];
#}}
#listview {{
#    layout:     horizontal;
#    lines:      100;
#}}
#entry {{
#    expand:     false;
#    width:      10em;
#    background-color: {color12};
#    margin:    2px 2px;
#}}
#element {{
#    padding: 0px 2px;
#    border: 2px;
#}}
#element selected {{
#    background-color: {color10};
#}}
#
#element-text, element-icon {{
#  background-color: inherit;
#  text-color: inherit;
#}}
#//ROFICONFIGEND

sed -n '/^##HYPRLANDLOOKNFEEL$/,/^##HYPRLANDLOOKNFEELEND$/p' ~/arch_install3.sh | cut -c2- > ~/.config/wal/templates/hyprland-looknfeel.conf

##HYPRLANDLOOKNFEEL
#
#general {{
#    gaps_in = 3
#    gaps_out = 3
#
#    border_size = 2
#
#    # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors
#    col.active_border = rgba({color9.strip}ff) 
#    col.inactive_border = rgba({color10.strip}aa)
#
#    # Set to true enable resizing windows by clicking and dragging on borders and gaps
#    resize_on_border = false
#
#    # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on
#    allow_tearing = true
#
#    layout = master
#}}
#
## https://wiki.hyprland.org/Configuring/Variables/#decoration
#decoration {{
#    rounding = 0
#    rounding_power = 2
#
#    # Change transparency of focused and unfocused windows
#    active_opacity = 1.0
#    inactive_opacity = 1.0
#
#    shadow {{
#        enabled = true
#        range = 4
#        render_power = 3
#        color = rgba(1a1a1aee)
#    }}
#
#    # https://wiki.hyprland.org/Configuring/Variables/#blur
#    blur {{
#        enabled = true
#        size = 3
#        passes = 1
#
#        vibrancy = 0.1696
#    }}
#}}
##HYPRLANDLOOKNFEELEND

sed -n '/#\/\*WAYBARSTYLE\*\//,/#\/\*WAYBARSTYLEEND\*\//p' ~/arch_install3.sh | cut -c2- > ~/.config/wal/templates/waybar-style.css

#/*WAYBARSTYLE*/
#* {{
#    /* `otf-font-awesome` is required to be installed for icons */
#    font-family: Terminess Nerd Font, FontAwesome, Roboto, Helvetica, Arial, sans-serif;
#    font-size: 13px;
#}}
#
#window#waybar {{
#    background-color: {color14.rgba};
#    border-bottom: 3px solid {color1.rgba};
#    border-top: 3px solid {color1.rgba};
#    color: {color0};
#    transition-property: background-color;
#    transition-duration: .5s;
#    box-shadow: inset 0 3px transparent;
#}}
#
#window#waybar.hidden {{
#    opacity: 0.2;
#}}
#
#button {{
#    /* Use box-shadow instead of border so the text isn't offset */
#    /* Avoid rounded borders under each button name */
#    border: none;
#    border-radius: 0;
#}}
#
#/* https://github.com/Alexays/Waybar/wiki/FAQ#the-workspace-buttons-have-a-strange-hover-effect */
#button:hover {{
#    background: inherit;
#    text-shadow: inherit;
#    box-shadow: inherit;
#}}
#
##clock,#battery,#cpu,#memory,#network,#pulseaudio,#tray,#power-profiles-daemon,#custom-gettemp {{
#    padding: 0 10px;
#    margin: 3 0px;
#    color: #ffffff;
#}}
#
#/* you can set a style on hover for any module like this */
##pulseaudio,#battery {{
#    background-color: {color2};
#    color: {color0};
#}}
#
##pulseaudio:hover {{
#    background-color: {color10};
#}}
#
##clock {{
#    background-color: {color6};
#    color: {color0};
#}}
#
##clock:hover {{
#    background-color: {color14};
#}}
#
##network,#cpu,#memory,#custom-gettemp {{
#    background-color: {color5};
#    color: {color0};
#}}
#
##cpu:hover,#network:hover,#memory:hover,custom-gettemp:hover {{
#    background-color: {color13};
#}}
#
##tray {{
#    background-color: {color11};
#}}
#
##workspaces button {{
#    padding: 0 5px;
#    margin: 3 0px;
#    background-color: {color11};
#    color: {color0};
#}}
#
##workspaces button:hover {{
#    background: {color12.rgba};
#}}
#
##workspaces button.active {{
#    background-color: {color10};
#}}
#
##workspaces button.urgent {{
#    background-color: #eb4d4b;
#}}
#
##window,#workspaces {{
#    margin: 0 4px;
#}}
#
#/* If workspaces is the leftmost module, omit left margin */
#.modules-left > widget:first-child > #workspaces {{
#    margin-left: 0;
#}}
#
#/* If workspaces is the rightmost module, omit right margin */
#.modules-right > widget:last-child > #workspaces {{
#    margin-right: 0;
#}}
#
##battery.charging, #battery.plugged {{
#    color: #ffffff;
#    background-color: #26A65B;
#}}
#
#@keyframes blink {{
#    to {{
#        background-color: #ffffff;
#        color: #000000;
#    }}
#}}
#
#/* Using steps() instead of linear as a timing function to limit cpu usage */
##battery.critical:not(.charging) {{
#    background-color: #f53c3c;
#    color: #ffffff;
#    animation-name: blink;
#    animation-duration: 0.5s;
#    animation-timing-function: steps(12);
#    animation-iteration-count: infinite;
#    animation-direction: alternate;
#}}
#
##power-profiles-daemon {{
#    padding-right: 15px;
#}}
#
##power-profiles-daemon.performance {{
#    background-color: #f53c3c;
#    color: #ffffff;
#}}
#
##power-profiles-daemon.balanced {{
#    background-color: #2980b9;
#    color: #ffffff;
#}}
#
##power-profiles-daemon.power-saver {{
#    background-color: #2ecc71;
#    color: #000000;
#}}
#
#label:focus {{
#    background-color: {color13};
#    color: {color0};
#}}
#
##network.disconnected {{
#    background-color: {color15};
#    color: {color0};
#}}
#
##pulseaudio.muted {{
#    background-color: {color15};
#    color: {color0};
#}}
#
##tray > .passive {{
#    -gtk-icon-effect: dim;
#}}
#
##tray > .needs-attention {{
#    -gtk-icon-effect: highlight;
#    background-color: #eb4d4b;
#}}
#
#/*WAYBARSTYLEEND*/

mkdir ~/.config/flameshot
sed -n '/#\/\/FLAMESHOTCONFIG/,/#\/\/FLAMESHOTCONFIGEND/p' ~/arch_install3.sh | cut -c2- > ~/.config/wal/templates/flameshot.ini

#//FLAMESHOTCONFIG
#[General]
#contrastOpacity=188
#savePath=~/Pictures
#useGrimAdapter=true
#uiColor={color1}
#contrastUiColor={color10}
#//FLAMESHOTCONFIGEND

mkdir ~/.config/dunst
sed -n '/^#DUNSTRC$/,/^#DUNSTRCEND$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.config/wal/templates/dunstrc

#DUNSTRC
#    frame_color = "{color14}ff"
#[urgency_low]
#    background = "{color10}ff"
#    foreground = "#888888"
#    timeout = 10
#
#[urgency_normal]
#    background = "{color9}ff"
#    foreground = "#ffffff"
#    timeout = 10
#
#[urgency_critical]
#    background = "#900000"
#    foreground = "#ffffff"
#    frame_color = "#ff0000"
#    timeout = 0
#DUNSTRCEND

#######################
#######SCRIPTS#########
#######################

mkdir -p ~/.local/bin

sed -n '/^#MOUNTLOCALVOLSCRIPT$/,/^#MOUNTLOCALVOLSCRIPTEND$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.local/bin/mountlocalvol

#MOUNTLOCALVOLSCRIPT
##!/bin/sh
#
#lsblk
#
#echo "Enter the drive you want to mount:"
#read drive
#echo "Where do you want to mount the drive?"
#read mountpath
#sudo mkdir -p $mountpath
#sudo chown $(id -u):$(id -g) $mountpath
#
##finding UUID
#UUID=$(lsblk -f | grep $drive | awk '{print $4}')
#fs=$(lsblk -f | grep $drive | awk '{print $2}')
#
#echo " " | sudo tee -a /etc/fstab
#echo "# /dev/$drive" | sudo tee -a /etc/fstab
#echo "UUID=$UUID    $mountpath  $fs rw,relatime 0   0" | sudo tee -a /etc/fstab
#
#sudo systemctl daemon-reload
#sudo mount -a
#MOUNTLOCALVOLSCRIPTEND

sed -n '/^#MOUNTSMBVOLSCRIPT$/,/^#MOUNTSMBVOLSCRIPTEND$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.local/bin/mountsmbvol

#MOUNTSMBVOLSCRIPT
##!/bin/sh
#
#sudo pacman -Syu cifs-utils
#
#echo "Enter the url/IP of your share:"
#read ndrive
#echo "Where do you want to mount the drive?"
#read mountpath
#sudo mkdir -p $mountpath
#sudo chown $(id -u):$(id -g) $mountpath
#
##Saving credentials
#echo "Username:"
#read user
#echo "Password:"
#read pass
#echo "username=$user" | sudo tee /etc/.smbcred
#echo "password=$pass" | sudo tee -a /etc/.smbcred
#
#echo " " | sudo tee -a /etc/fstab
#echo "# Network Share" | sudo tee -a /etc/fstab
#echo "$ndrive    $mountpath cifs    uid=$(id -u),gid=$(id -g),credentials=/etc/.smbcred,iocharset=utf8   0   0" | sudo tee -a /etc/fstab
#
#sudo systemctl daemon-reload
#sudo mount -a
#MOUNTSMBVOLSCRIPTEND

sed -n '/^#DISABLEIPV6$/,/^#DISABLEIP6END$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.local/bin/disableipv6

#DISABLEIPV6
##!/bin/sh
#
#ip addr show
#
#echo "Enter your network device: "
#read netdev
#
#echo "net.ipv6.conf.all.disable_ipv6 = 1" | sudo tee /etc/sysctl.d/40-ipv6.conf
#echo "net.ipv6.conf.$netdev.disable_ipv6 = 1" | sudo tee -a /etc/sysctl.d/40-ipv6.conf
#
#cat /etc/sysctl.d/40-ipv6.conf
#
#echo "Add -->sudo systemctl restart systemd-sysctl.service &<-- to your init script of liking to automatically unbind the ipv6 address assigned to your ethernet controller"
#DISABLEIP6END

sed -n '/^#FUZZYOPEN$/,/^#FUZZYOPENEND$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.local/bin/fuzzyopen

#FUZZYOPEN
##! /bin/sh
#
#item="$(find ~/ | fzf)"
#xdg-open "$item" || nvim "$item"
#FUZZYOPENEND

sed -n '/^#GETTEMP$/,/^#GETTEMPEND$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.local/bin/gettemp

#GETTEMP
##!/bin/sh
#
#while
#    cputemp=$(sensors | grep Tctl | awk '{print$2}' | cut -c2-)
#    gputemp=$(sensors | grep edge | awk '{print$2}' | cut -c2-)
#    echo $cputemp $gputemp
#    sleep 2s
#do true; done
#GETTEMPEND

sed -n '/^#UPDATETHEME$/,/^#UPDATETHEMEEND$/p' ~/arch_install3.sh | cut -c2- | sed '1d;$d' > ~/.local/bin/updatetheme

#UPDATETHEME
##!/bin/sh
#
#wallpaper=$(nsxiv -frto ~/Pictures/Wallpapers/)
#wal --cols16 lighten -n --contrast 1.5 -i "$wallpaper"
#echo "wallpaper {" > ~/.config/hypr/hyprpaper.conf
#echo "  monitor =" >> ~/.config/hypr/hyprpaper.conf
#echo "  path = $wallpaper" >> ~/.config/hypr/hyprpaper.conf
#echo "  fit_mode = cover" >> ~/.config/hypr/hyprpaper.conf
#echo "}" >> ~/.config/hypr/hyprpaper.conf
#echo " " >> ~/.config/hypr/hyprpaper.conf
#echo "splash = 0" >> ~/.config/hypr/hyprpaper.conf
#hyprctl hyprpaper wallpaper ,"$wallpaper"
#cp ~/.cache/wal/dmenu.rasi ~/.config/rofi/dmenu.rasi
#cp ~/.cache/wal/waybar-style.css ~/.config/waybar/style.css
#cp ~/.cache/wal/flameshot.ini ~/.config/flameshot/flameshot.ini
#cp ~/.cache/wal/dunstrc ~/.config/dunst/dunstrc
#/opt/oomox/plugins/theme_oomox/change_color.sh ~/.cache/wal/colors-oomox
#xrdb -load ~/.cache/wal/colors.Xresources
#dunstctl reload
#killall -SIGUSR2 waybar
#UPDATETHEMEEND


#######################
#########ROFI##########
#######################
mkdir -p ~/.config/rofi
echo '@theme "dmenu.rasi"' > ~/.config/rofi/config.rasi

#######################
######ALACRITTY########
#######################
mkdir -p ~/.config/alacritty
echo '[font]' > ~/.config/alacritty/alacritty.toml
echo 'size = 12.0' >> ~/.config/alacritty/alacritty.toml
echo '[font.normal]' >> ~/.config/alacritty/alacritty.toml
echo 'family = "Terminess Nerd Font"' >> ~/.config/alacritty/alacritty.toml
echo 'style = "Regular"' >> ~/.config/alacritty/alacritty.toml
echo '[window]' >> ~/.config/alacritty/alacritty.toml
echo 'opacity = 0.8' >> ~/.config/alacritty/alacritty.toml
echo '[general]' >> ~/.config/alacritty/alacritty.toml
echo 'import = ["~/.cache/wal/colors-alacritty.toml",]' >> ~/.config/alacritty/alacritty.toml

#######################
########RANGER#########
#######################
ranger --copy-config all
sed -i "s/column_ratios 1,3,4/column_ratios 1,2,2/" ~/.config/ranger/rc.conf
sed -i "s/preview_files true/preview_files false/" ~/.config/ranger/rc.conf
sed -i "s/draw_borders none/draw_borders both/" ~/.config/ranger/rc.conf
sed -i "s/update_title false/update_title true/" ~/.config/ranger/rc.conf
sed -i "s/tilde_in_titlebar false/tilde_in_titlebar true/" ~/.config/ranger/rc.conf
sed -i "s/cd_tab_fuzzy false/cd_tab_fuzzy true/" ~/.config/ranger/rc.conf
sed -i "s/line_numbers false/line_numbers relative/" ~/.config/ranger/rc.conf

#######################
#########KEYD##########
#######################
echo '[ids]' | sudo tee /etc/keyd/default.conf
echo ' ' | sudo tee -a /etc/keyd/default.conf
echo '*' | sudo tee -a /etc/keyd/default.conf
echo ' ' | sudo tee -a /etc/keyd/default.conf
echo '[main]' | sudo tee -a /etc/keyd/default.conf
echo ' ' | sudo tee -a /etc/keyd/default.conf
echo 'capslock = esc' | sudo tee -a /etc/keyd/default.conf
echo ' ' | sudo tee -a /etc/keyd/default.conf
echo 'esc = capslock' | sudo tee -a /etc/keyd/default.conf

# Making all of the generated scripts executable

sudo chmod +x ~/.local/bin/mountlocalvol
sudo chmod +x ~/.local/bin/mountsmbvol
sudo chmod +x ~/.local/bin/disableipv6
sudo chmod +x ~/.local/bin/fuzzyopen
sudo chmod +x ~/.local/bin/updatetheme
sudo chmod +x ~/.local/bin/gettemp

# Configuring firewall and OpenSSH
sudo systemctl enable ufw
sudo ufw default deny
echo "Input the IP of your Network with proper CIDR notation:"
read cidr
sudo ufw allow from "$cidr"
sudo ufw limit ssh
sudo ufw enable
sudo systemctl enable sshd

# Configuring Wake on Lan

ip addr show

echo "Choose the device you want to use for wake on lan: "
read netdev

netdevMacadd=$(ip addr show "$netdev" | awk 'NR==2 {print$2}')

echo "[Match]" | sudo tee /etc/systemd/network/50-wired.link
echo "MACAddress=$netdevMacadd" | sudo tee -a /etc/systemd/network/50-wired.link
echo " " | sudo tee -a /etc/systemd/network/50-wired.link
echo "[Link]" | sudo tee -a /etc/systemd/network/50-wired.link
echo "NamePolicy=kernel database onboard slot path" | sudo tee -a /etc/systemd/network/50-wired.link
echo "MACAddressPolicy=persistent" | sudo tee -a /etc/systemd/network/50-wired.link
echo "WakeOnLan=magic" | sudo tee -a /etc/systemd/network/50-wired.link

cat /etc/systemd/network/50-wired.link

# Downloading wallpapers

cd $HOME
mkdir -p Pictures/Wallpapers
cd Pictures/Wallpapers
for (( w=306; w<307; w++ )); do   curl -LOS "https://raw.githubusercontent.com/whoisYoges/lwalpapers/PicturesOnly/wallpapers/$(printf b-%0.3d.jpg "$w")"; done

# Installing Yay

cd $HOME
git clone https://aur.archlinux.org/yay.git
cd yay
makepkg -si
yay --version
cd $HOME
sudo rm -rf yay
sudo pacman -Rsn go

# Installing Aur Packages

yay -Syu xpadneo-dkms python-pywal16 themix-theme-oomox-git oomox-qt5-styleplugin-git oomox-qt6-styleplugin-git bitwarden-bin

# Setting up Wallpaper for first use
wal --cols16 lighten -n --contrast 1.5 -i ~/Pictures/Wallpapers/b-306.jpg
echo "wallpaper {" > ~/.config/hypr/hyprpaper.conf
echo "  monitor =" >> ~/.config/hypr/hyprpaper.conf
echo "  path = /home/$(whoami)/Pictures/Wallpapers/b-306.jpg" >> ~/.config/hypr/hyprpaper.conf
echo "  fit_mode = cover" >> ~/.config/hypr/hyprpaper.conf
echo "}" >> ~/.config/hypr/hyprpaper.conf
echo " " >> ~/.config/hypr/hyprpaper.conf
echo "splash = 0" >> ~/.config/hypr/hyprpaper.conf
cp ~/.cache/wal/dmenu.rasi ~/.config/rofi/dmenu.rasi
cp ~/.cache/wal/waybar-style.css ~/.config/waybar/style.css
cp ~/.cache/wal/flameshot.ini ~/.config/flameshot/flameshot.ini
cp ~/.cache/wal/dunstrc ~/.config/dunst/dunstrc
/opt/oomox/plugins/theme_oomox/change_color.sh ~/.cache/wal/colors-oomox
xrdb -load ~/.cache/wal/colors.Xresources

# Setting up pywal for qutebrowser

mkdir ~/.local/share/repositories -p
mkdir ~/.config/qutebrowser -p
cd ~/.local/share/repositories
git clone https://github.com/harsh13virdi/qutewal
cd qutewal
cp ./qutewal.py ~/.config/qutebrowser/

echo "config.load_autoconfig()" > ~/.config/qutebrowser/config.py
echo "config.source('qutewal.py')" >> ~/.config/qutebrowser/config.py


exit
