diff --git a/.install/backup.sh b/.install/backup.sh index abf1726..877270d 100755 --- a/.install/backup.sh +++ b/.install/backup.sh @@ -3,45 +3,160 @@ # ------------------------------------------------------ datets=$(date '+%Y%m%d%H%M%S') -if [ -d ~/dotfiles ] || [ -f ~/.bashrc ]; then -echo -e "${GREEN}" -figlet "Backup" -echo -e "${NONE}" + +# Create Backup File Structure + +if [ ! -d ~/dotfiles-versions ]; then + mkdir ~/dotfiles-versions + echo "~/dotfiles-versions created." +fi +if [ ! -d ~/dotfiles-versions/backup ]; then + mkdir ~/dotfiles-versions/backup + echo "~/dotfiles-versions/backup created" +fi +if [ -d ~/dotfiles-versions/backups ]; then + mv ~/dotfiles-versions/backups ~/dotfiles-versions/archive + echo ":: Existing backups moved into ~/dotfiles-versions/archive" +fi +if [ ! -d ~/dotfiles-versions/archive ]; then + mkdir ~/dotfiles-versions/archive + echo "~/dotfiles-versions/archive created" +fi + +# Backup Existing Dotfiles + +if [ -d ~/dotfiles ] || ! test -L ~/.bashrc || [ -d ~/.config/hypr ] || [ -d ~/.config/qtile ]; then + + echo -e "${GREEN}" + figlet "Backup" + echo -e "${NONE}" + echo "The script has detected the following files and folders for a backup:" + if [ -d ~/dotfiles ]; then - echo ":: The script has detected an existing dotfiles folder and will try to create a backup into the folder:" - echo " ~/dotfiles-versions/backups/$datets" + echo " - $HOME/dotfiles" fi - if [ ! -L ~/.bashrc ] && [ -f ~/.bashrc ]; then - echo ":: The script has detected an existing .bashrc file and will try to create a backup to:" - echo " ~/dotfiles-versions/backups/$datets/.bashrc-old" + if ! test -L ~/.bashrc ;then + echo " - $HOME/.bashrc" fi + if ! test -L ~/.config/qtile && [ -d ~/.config/qtile ] ;then + echo " - $HOME/.config/qtile/" + fi + if ! test -L ~/.config/hypr && [ -d ~/.config/hypr ] ;then + echo " - $HOME/.config/hypr/" + fi + if ! test -L ~/.config/rofi && [ -d ~/.config/rofi ] ;then + echo " - $HOME/.config/rofi/" + fi + if ! test -L ~/.config/wal && [ -d ~/.config/wal ] ;then + echo " - $HOME/.config/wal/" + fi + if ! test -L ~/.config/waybar && [ -d ~/.config/waybar ] ;then + echo " - $HOME/.config/waybar/" + fi + if ! test -L ~/.config/wlogout && [ -d ~/.config/wlogout ] ;then + echo " - $HOME/.config/wlogout/" + fi + if ! test -L ~/.config/alacritty && [ -d ~/.config/alacritty ] ;then + echo " - $HOME/.config/alacritty/" + fi + if ! test -L ~/.config/starship && [ -d ~/.config/starship ] ;then + echo " - $HOME/.config/starship/" + fi + if ! test -L ~/.config/picom && [ -d ~/.config/picom ] ;then + echo " - $HOME/.config/picom/" + fi + if ! test -L ~/.config/nvim && [ -d ~/.config/nvim ] ;then + echo " - $HOME/.config/nvim/" + fi + if ! test -L ~/.config/vim && [ -d ~/.config/vim ] ;then + echo " - $HOME/.config/vim/" + fi + if ! test -L ~/.config/dunst && [ -d ~/.config/dunst ] ;then + echo " - $HOME/.config/dunst/" + fi + if ! test -L ~/.config/swappy && [ -d ~/.config/swappy ] ;then + echo " - $HOME/.config/swappy/" + fi + + # Start Backup + if gum confirm "Do you want to create a backup?" ;then - if [ ! -d ~/dotfiles-versions ]; then - mkdir ~/dotfiles-versions - echo "~/dotfiles-versions created." - fi - if [ ! -d ~/dotfiles-versions/backups ]; then - mkdir ~/dotfiles-versions/backups - echo "~/dotfiles-versions/backups created" - fi - if [ ! -d ~/dotfiles-versions/backups/$datets ]; then - mkdir ~/dotfiles-versions/backups/$datets - echo "~/dotfiles-versions/backups/$datets created" + + if [ ! -z "$(ls -A ~/dotfiles-versions/backup)" ] ;then + if gum confirm "Do you want to archive the existing backup?" ;then + rsync -a ~/dotfiles-versions/backup/ ~/dotfiles-versions/archive/$datets/ + echo ":: Current backup archived in ~/dotfiles-versions/archive/$datets" + fi fi if [ -d ~/dotfiles ]; then - rsync -a ~/dotfiles/ ~/dotfiles-versions/backups/$datets/ - echo ":: Backup of your current dotfiles in ~/dotfiles-versions/backups/$datets created." + rsync -a ~/dotfiles ~/dotfiles-versions/backup/ + echo ":: Backup of $HOME/dotfiles created in ~/dotfiles-versions/backup" fi - if [ -f ~/.bashrc ]; then - cp ~/.bashrc ~/dotfiles-versions/backups/$datets/.bashrc-old - echo ":: Existing .bashrc file found in homefolder. .bashrc-old created" + if ! test -L ~/.bashrc ;then + cp ~/.bashrc ~/dotfiles-versions/backup + echo ":: Backup of $HOME/.bashrc created in ~/dotfiles-versions/backup" fi - echo - echo ":: PLEASE NOTE: You can create a fresh installation of teh dotfiles by removing the folder ~/dotfiles" + if [ ! -d ~/dotfiles-versions/backup/config ] ;then + mkdir ~/dotfiles-versions/backup/config + fi + if ! test -L ~/.config/qtile && [ -d ~/.config/qtile ] ;then + cp -r ~/.config/qtile ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/qtile created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/hypr && [ -d ~/.config/hypr ] ;then + cp -r ~/.config/hypr ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/hypr created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/qtile && [ -d ~/.config/rofi ] ;then + cp -r ~/.config/rofi ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/rofi created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/wal && [ -d ~/.config/wal ] ;then + cp -r ~/.config/wal ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/wal created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/waybar && [ -d ~/.config/waybar ] ;then + cp -r ~/.config/waybar ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/waybar created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/wlogout && [ -d ~/.config/wlogout ] ;then + cp -r ~/.config/wlogout ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/wlogout created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/alacritty && [ -d ~/.config/alacritty ] ;then + cp -r ~/.config/alacritty ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/alacritty created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/starship && [ -d ~/.config/starship ] ;then + cp -r ~/.config/starship ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/starship created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/picom && [ -d ~/.config/picom ] ;then + cp -r ~/.config/picom ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/picom created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/nvim && [ -d ~/.config/nvim ] ;then + cp -r ~/.config/nvim ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/nvim created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/vim && [ -d ~/.config/vim ] ;then + cp -r ~/.config/vim ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/vim created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/dunst && [ -d ~/.config/dunst ] ;then + cp -r ~/.config/dunst ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/dunst created in ~/dotfiles-versions/backup/config/" + fi + if ! test -L ~/.config/swappy && [ -d ~/.config/swappy ] ;then + cp -r ~/.config/swappy ~/dotfiles-versions/backup/config + echo ":: Backup of $HOME/.config/swappy created in ~/dotfiles-versions/backup/config/" + fi elif [ $? -eq 130 ]; then exit 130 else echo ":: Backup skipped." fi - echo "" +else + echo ":: Nothing to backup" fi +echo \ No newline at end of file diff --git a/.install/packages/hyprland-packages.sh b/.install/packages/hyprland-packages.sh index 80b9e72..acf57d0 100644 --- a/.install/packages/hyprland-packages.sh +++ b/.install/packages/hyprland-packages.sh @@ -1,11 +1,14 @@ packagesPacman=( "hyprland" + "hyprpaper" "xdg-desktop-portal-hyprland" "waybar" "grim" "slurp" "swappy" "cliphist" + "hyprlock" + "hypridle" ); packagesYay=( @@ -13,6 +16,4 @@ packagesYay=( "wlogout" "nwg-look" "emote" - "hypridle" - "hyprlock" ); diff --git a/.install/preparation.sh b/.install/preparation.sh index e20c5d2..cee13dd 100644 --- a/.install/preparation.sh +++ b/.install/preparation.sh @@ -5,13 +5,13 @@ echo -e "${GREEN}" figlet "Preparation" echo -e "${NONE}" if [ -d ~/.config ]; then - echo ".config folder already exists." + echo ":: $HOME/.config folder already exists." else mkdir ~/.config - echo ".config folder created." + echo ":: $HOME/.config folder created." fi echo -echo ":: Preparing temporary folders for the installation." +echo "Preparing temporary folders for the installation." if [ ! -d ~/dotfiles-versions ]; then mkdir ~/dotfiles-versions echo ":: ~/dotfiles-versions folder created." @@ -32,5 +32,5 @@ if [[ $(_isFolderEmpty ~/dotfiles-versions/$version/) == 0 ]] ;then echo "Execution of rsync -a -I --exclude-from=.install/includes/excludes.txt . ~/dotfiles-versions/$version/ is required." exit fi -echo ":: dotfiles $version successfully prepared in ~/dotfiles-versions/$version/" -echo "" +echo ":: ML4W Dotfiles $version successfully prepared in ~/dotfiles-versions/$version/" +echo diff --git a/.install/required.sh b/.install/required.sh index 2c7d72c..3c4ac36 100644 --- a/.install/required.sh +++ b/.install/required.sh @@ -4,12 +4,11 @@ # Synchronize packages sudo pacman -Sy -echo "" +echo # Check for required packages -echo ":: Checking that required packages for the installation are installed..." +echo "Checking that required packages for the installation are installed..." _installPackagesPacman "rsync" "gum" "figlet" "python"; -echo "" # Double check rsync if ! command -v rsync &> /dev/null; then @@ -18,4 +17,4 @@ if ! command -v rsync &> /dev/null; then else echo ":: rsync double checked" fi -echo "" \ No newline at end of file +echo \ No newline at end of file diff --git a/.install/updatesystem.sh b/.install/updatesystem.sh index ce775f9..e3891a7 100644 --- a/.install/updatesystem.sh +++ b/.install/updatesystem.sh @@ -5,7 +5,13 @@ echo -e "${GREEN}" figlet "System Update" echo -e "${NONE}" -echo "It's important that your system is up-to-date before you proceed with the installation of the ML4W Dotfiles." -if gum confirm "Do you want to update the packages of your system with yay now?" ;then +echo "It's important that your system is up-to-date before you proceed." +if gum confirm "Do you want to update your system with yay now?" ;then + echo ":: Update started" yay +elif [ $? -eq 130 ]; then + exit 130 +else + echo ":: System update skipped" fi +echo diff --git a/.settings/hyprpaper.tpl b/.settings/hyprpaper.tpl new file mode 100644 index 0000000..3033ff3 --- /dev/null +++ b/.settings/hyprpaper.tpl @@ -0,0 +1,8 @@ +# Preload Wallpapers +preload = WALLPAPER + +# Set Wallpapers +wallpaper = ,WALLPAPER + +# Disable Splash +splash = false \ No newline at end of file diff --git a/.settings/wallpaper-engine.sh b/.settings/wallpaper-engine.sh new file mode 100644 index 0000000..16f3d37 --- /dev/null +++ b/.settings/wallpaper-engine.sh @@ -0,0 +1 @@ +swww \ No newline at end of file diff --git a/.version/name b/.version/name index 4fdf0ae..0409c16 100644 --- a/.version/name +++ b/.version/name @@ -1 +1 @@ -2.8.3.4 \ No newline at end of file +2.8.4 \ No newline at end of file diff --git a/.version/version b/.version/version index 539d6d3..7f9ce49 100644 --- a/.version/version +++ b/.version/version @@ -1 +1 @@ -2834 \ No newline at end of file +2840 \ No newline at end of file diff --git a/CHANGELOG b/CHANGELOG index 1b81a8d..3c15f35 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,13 @@ +Version 2.8.4 +https://gitlab.com/stephan-raabe/dotfiles/-/releases/2.8.4 +-------------------------------------------------------- +- In the ML4W Dotfiles Settings App you can now switch between the wallpaper applications swww or hyprpaper. In case of issues with the default application swww you can select hyprpaper. The wallpaper application can also be disabled but background images for wlogout, hyprlock and rofi will be generated with the selected wallpaper. +PLEASE NOTE: Logout & Login is required after a change. +- New folder structure for backups: dotfiles-versions/backup holds the latest backup, dotfiles-versions/archive stores archived backups +- Installer can now backup configurations in .config before overwriting by dotfiles +- You can uninstall the ML4W dotfiles with the new uninstaller script starting from the ML4W dotfiles or by executing ~/dotfiles/uninstall.sh +- Using the hypridle.conf suggested by https://wiki.hyprland.org/Hypr-Ecosystem/hypridle/ + Version 2.8.3.4 https://gitlab.com/stephan-raabe/dotfiles/-/releases/2.8.3.4 -------------------------------------------------------- diff --git a/README.md b/README.md index 54b1444..024e181 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,8 @@ -# ML4W Dotfiles 2.8.3.4 +# ML4W Dotfiles 2.8.4 An advanced configuration of Hyprland and Qtile for Arch Linux based distributions. This package includes an installation script to install and setup the required components. -[![Screenshot](screenshots/v283/screenshot-283-2.png "Title Text")](screenshots/v283/screenshot-283-2.png) - -You can find the overview video (Version 2.8.3) on Youtube: [ML4W Dotfiles 2.8.3](https://youtu.be/zM2AYue0o8s) - -You can find the installation video (Version 2.8.2) on YouTube: [Install/Update the ML4W Dotfiles](https://youtu.be/n6Yg232bCOU) - -> PLEASE NOTE: In case of issues with the latest Hyprland version 0.37.1, please update your ML4W Dotfiles installation to the latest version. See the troubleshooting section for more information. +[![Screenshot](screenshots/v284/screenshot-284-1.png "Title Text")](screenshots/v283/screenshot-284-1.png) The ML4W Dotfiles are available as @@ -19,11 +13,9 @@ The ML4W Dotfiles are available as # Installation -To make it easy for you to get started with the ML4W dotfiles, here's a list of recommended next steps. +The package includes an installation script that will guide you through all steps of the installation or update process. -The package includes an installation script install.sh that will guide you through all steps of the installation or update process. - -> PLEASE NOTE: Every Linux distribution and setup can be different. Therefore, I cannot guarantee that the installation will work smoothly everywhere. Installation on your own risk. +> PLEASE NOTE: Every Linux distribution and setup can be different. Therefore, I cannot guarantee that the installation will work everywhere. Installation on your own risk. ## Supported platforms @@ -44,16 +36,26 @@ The installation should work on all Arch Linux based distributions as well. **PLEASE BACKUP YOUR EXISTING .config FOLDER WITH YOUR DOTFILES BEFORE STARTING THE SCRIPTS FOR INITIAL INSTALLTION.** -The installation script will create a backup from an previous dotfiles installation. +The installation script will create a backups from configurations of your .config folder that will be overwritten from the installation procedure and previous ML4W Dotfiles installation. If possible, please create a snapshot of your current system if snapper or Timeshift is installed and available. -## ML4W Installer App +## Installation -The easiest way to install the ML4W Dotfiles is to use the ML4W Dotfiles Installer App. [You can download the app here.](https://gitlab.com/stephan-raabe/dotfiles/-/raw/main/apps/ML4W_Dotfiles_Installer.AppImage) (Right click + Save link as...) +The easiest way to install the ML4W Dotfiles is to use the ML4W Dotfiles Installer App. + +[You can download the app here.](https://gitlab.com/stephan-raabe/dotfiles/-/raw/main/apps/ML4W_Dotfiles_Installer.AppImage) (Right click + Save link as... into your Downloads Folder) + +Or with wget if your starting point is a minimal Arch Linux installation without DE: ``` -# Change to the download location (normally the Downloads folder) +mkdir ~/Downloads # If Downloads folder doesn't exists +wget -P ~/Downloads/ https://gitlab.com/stephan-raabe/dotfiles/-/raw/main/apps/ML4W_Dotfiles_Installer.AppImage + +``` + +``` +# Change to the Downloads folder cd ~/Downloads # Make the file executable @@ -63,78 +65,50 @@ chmod +x ML4W_Dotfiles_Installer.AppImage ./ML4W_Dotfiles_Installer.AppImage ``` -## Installation with GIT - -You can also install the dotfiles by cloning the latest main release: - -``` -# 1.) Change into your Downloads folder (create the folder if not available) -cd ~/Downloads - -# 2.) Clone the dotfiles repository into the Downloads folder -git clone --depth=1 https://gitlab.com/stephan-raabe/dotfiles.git - -# 3.) Change into the dotfiles folder -cd dotfiles - -# 4.) Start the installation -./install.sh - -``` - -## Installation with GIT of the rolling release - -You can install the dotfiles by cloning the latest development version from the rolling release: - -``` -# 1.) Change into your Downloads folder (create the folder if not available) -cd ~/Downloads - -# 2.) Clone the dotfiles repository into the Downloads folder -git clone https://gitlab.com/stephan-raabe/dotfiles.git - -# 3.) Change into the new dotfiles folder -cd dotfiles - -# 4.) Checkout the dev branch -git checkout dev - -# 4.) Start the installation -./install.sh - -``` +Alternatively you can install with GIT. ## Update -From 2.8.2 onwards you can use the integrated update feature to update your dotfiles to the main or rolling release whenever you want. +You can use the integrated update feature to update your dotfiles to the main or rolling release whenever you want. ![Update](screenshots/welcome-update-dotfiles.png "Updates") -You can also use the ML4W installer to update to the main-release (Latest Version) or the Rolling Release: https://gitlab.com/stephan-raabe/installer +Start the ML4W Welcome App. You will see a notification when an update is available. You can start the update or re-installation of the ML4W Dotfiles at any time. You can force a clean re-installation of the dotfiles by removing the folder ~/dotfiles before starting the installation. > Please note that you can create a backup of your existing configuration with the backup feature of the install script. It's recommended to remove the folder ~/dotfiles only after creating a backup. -Please follow the steps to update from earlier dotfiles versions to 2.8.3 +## Uninstall -``` -# 1.) Remove existing downloaded dotfiles -rm -rf ~/Downloads/dotfiles +You can use the integrated uninstallation function (ML4W Dotfiles Uninstaller App) to remove the ML4W Dotfiles from your system. -# 2.) Change into your Downloads folder -cd ~/Downloads +Please select "Uninstall Dotfiles" from the ML4W Welcome App or execute ~/dotfiles/uninstall.sh -# 3.) Clone the dotfiles repository into the Downloads folder -git clone --depth=1 https://gitlab.com/stephan-raabe/dotfiles.git +The ML4W Dotfiles Uninstaller App will remove the dotfiles folder, related symbolic links and the desktop files of the ML4W Apps. -# 4.) Change into the dotfiles folder -cd dotfiles +The script will also try to restore old configurations back into .config if available and restored during the installation of the ML4W Dotfiles. -# 5.) Start the installation -./install.sh +## Installation in a KVM virtual machine -``` +Qtile X11 works fine in a KVM virtual machine. The Hyprland performance is low but it's enough for testing new features. + +In virt-manager please make sure that 3D acceleration is enabled in Video Virtio and the Listen type is set to None in Display Spice. + +To fix the mouse issue on Hyprland, open the Hyprland settings with SUPER + CTRL + S and select in Environments the variation kvm.conf + +## Hyprland & NVIDIA + +There is no official Hyprland support for Nvidia hardware. However, you might make it work properly following this page. +https://wiki.hyprland.org/Nvidia/ + +Users have reported that Hyprland with dotfiles could be installed successfully on setups with NVDIA GPUs using the nouveau open source drivers. + +Please select the following variation in the settings script (system/environment): + +https://gitlab.com/stephan-raabe/dotfiles/-/blob/main/hypr/conf/environments/nvidia.conf + +Or set the included environment variables in hyprland.conf ## Installation Hook @@ -154,19 +128,6 @@ This script will for example remove the vim and nvim folder before the installat You can find a template in .install/templates/hook.sh -## Hyprland & NVIDIA - -There is no official Hyprland support for Nvidia hardware. However, you might make it work properly following this page. -https://wiki.hyprland.org/Nvidia/ - -Users have reported that Hyprland with dotfiles could be installed successfully on setups with NVDIA GPUs using the nouveau open source drivers. - -Please select the following variation in the settings script (system/environment): - -https://gitlab.com/stephan-raabe/dotfiles/-/blob/main/hypr/conf/environments/nvidia.conf - -Or set the included environment variables in hyprland.conf - ## Launch Hyprland from tty The suggested method to start Hyprland is from tty with the command Hyprland because login managers (display managers) are not officially supported (https://wiki.hyprland.org/Getting-Started/Master-Tutorial/#launching-hyprland) @@ -202,17 +163,7 @@ In the ML4W Dotfiles Settings App you can define the timeouts for Hyprlock, susp The selected hypridle configuration can be restored from the ML4W installer during a dotfiles update. -## Installation in a KVM virtual machine - -Qtile X11 works fine in a KVM virtual machine. The Hyprland performance is low but it's enough for testing new features. - -In virt-manager please make sure that 3D acceleration is enabled in Video Virtio and the Listen type is set to None in Display Spice. - -To fix the mouse issue on Hyprland, open the Hyprland settings with SUPER + CTRL + S and select in Environments the variation kvm.conf - -## Base Hyprland installation with Hyperland Starter - -If you want to install only the core packages of Hyprland as a starting point for your Hyprland experiments please also try my Hyprland Starter script: https://gitlab.com/stephan-raabe/hyprland-starter +The ML4W Dotfiles are using the recommended configuration from https://wiki.hyprland.org/Hypr-Ecosystem/hypridle/ # Some important key bindings @@ -231,7 +182,7 @@ All keybindings for Hyprland with right mouse click on Apps in waybar or here: # Hyprland - + @@ -292,12 +243,18 @@ With configuration variations, you can customize settings and configurations for > Please don't edit the shipped configuration variations. These will be overwritten with every update of the ML4W dotfiles. Create your own custom variation instead. -## Wallpaper and Pywal +## Wallpaper with swww or hyprpaper and Pywal Included is a pywal configuration that changes the color scheme based on a randomly selected wallpaper. With the key binding SUPER + SHIFT + W you can change the wallpaper coming from the folder ~/wallpaper/. SUPER + CTRL + W opens rofi with a list of installed wallpapers in ~/wallpaper/ for your individual selection. +In case of issues with swww, you can switch between the Wallpaper application swww and hyprpaper. Open the ML4W Dotfiles Settings app and select the tab system. At the top you can find the Wallpaper Engine Selector. + +> PLEASE NOTE: A logout and login is required to activate the new wallpaper application. + +The hyprpaper engine uses a template stored in dotfiles/.settings/hyprpaper.tpl You can add additional configurations there. The WALLPAPER placeholder will be replaced with the current wallpaper. + ## Waybar themes and themeswitcher In addition, you can switch the Waybar Template with SUPER + CTRL + T or by pressing the "..." icon in Waybar with the themeswitcher. @@ -318,6 +275,7 @@ https://gist.github.com/PowerBall253/2dea6ddf6974ba4e5d26c3139ffb7580 - Terminal: alacritty - Editor: nvim - Prompt: starship +- Wallpaper: swww or hyprpaper - Icons: Font Awesome - Launch Menus: Rofi (Wayland fork) - Colorscheme: pywal @@ -360,11 +318,80 @@ Included is a pywal configuration that changes the color scheme based on a rando - Compositor: picom - Screenshots: scrot +# Installation/Update with GIT + +## Installation with GIT + +You can also install the dotfiles by cloning the latest main release: + +``` +# 1.) Change into your Downloads folder (create the folder if not available) +cd ~/Downloads + +# 2.) Clone the dotfiles repository into the Downloads folder +git clone --depth=1 https://gitlab.com/stephan-raabe/dotfiles.git + +# 3.) Change into the dotfiles folder +cd dotfiles + +# 4.) Start the installation +./install.sh + +``` + +## Installation with GIT (Rolling release) + +You can install the dotfiles by cloning the latest development version from the rolling release: + +``` +# 1.) Change into your Downloads folder (create the folder if not available) +cd ~/Downloads + +# 2.) Clone the dotfiles repository into the Downloads folder +git clone https://gitlab.com/stephan-raabe/dotfiles.git + +# 3.) Change into the new dotfiles folder +cd dotfiles + +# 4.) Checkout the dev branch +git checkout dev + +# 4.) Start the installation +./install.sh + +``` + +## Update with GIT + +Please follow the steps to update from earlier dotfiles versions to 2.8.3 + +``` +# 1.) Remove existing downloaded dotfiles +rm -rf ~/Downloads/dotfiles + +# 2.) Change into your Downloads folder +cd ~/Downloads + +# 3.) Clone the dotfiles repository into the Downloads folder +git clone --depth=1 https://gitlab.com/stephan-raabe/dotfiles.git + +# 4.) Change into the dotfiles folder +cd dotfiles + +# 5.) Start the installation +./install.sh + +``` + +# Base Hyprland installation with Hyperland Starter Package + +If you want to install only the core packages of Hyprland as a starting point for your Hyprland experiments please also try my Hyprland Starter script: https://gitlab.com/stephan-raabe/hyprland-starter + # Troubleshooting ## Wallpaper issues (grey or distroyed image) with latest swww 0.9.1 -Please install the latest version of the ML4W Dotfiles > 2.8.3.4 +Please install the latest version of the ML4W Dotfiles > 2.8.4 Or replace the swww launch command in /dotfiles/hypr/conf/autostart.conf with @@ -372,22 +399,9 @@ Or replace the swww launch command in /dotfiles/hypr/conf/autostart.conf with exec-once = swww init || swww-daemon --format xrgb ``` -swww is currently extremly under development. Upcoming updates could require different launch commands. I will monitor the development as well and update the dotfiles accordingly. +> swww is currently extremly under development. Upcoming updates could require different launch commands. I will monitor the development as well and update the dotfiles accordingly. -## Issues after Hyprland 0.37.1 Updates - -Hyprland has released the version 0.37.1. This comes with many changes of the system and required dependencies. - -Please update to the latest version of the ML4W Dotfiles 2.8.3.2 - -If you don't have access to Waybar because of overlayed error messages you can start the ML4W app with the application launcher SUPER + CTRL + RETURN and search for the ML4W Welcome App. - -Or you open a terminal with SUPER + RETURN and enter - -``` -ml4w -``` -Then select in the upper right side menu the entry "Update/ Dotfiles" +You can use the ML4W Dotfiles Settings app to replace swww with hyprpaper. ## hypridle and hyprlock is not starting after an update of the dotfiles @@ -443,7 +457,7 @@ sudo rm /etc/systemd/system/display-manager.service ## Waybar is not loading -There could be a conflict with xdg-desktop-portal-gtk. Please try to remove the package if installed with: +There could be a conflict with xdg-desktop-portal-gtk or xdg-desktop-portal-gnome. Please try to remove the package if installed with: ``` sudo pacman -R xdg-desktop-portal-gtk diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml index 05f6c32..7ae3ad2 100644 --- a/alacritty/alacritty.toml +++ b/alacritty/alacritty.toml @@ -1,5 +1,5 @@ [font] -size = 12.0 +size = 16.0 [font.normal] family = "FiraCode Nerd Font" diff --git a/alacritty/alacritty.yml b/alacritty/alacritty.yml deleted file mode 100644 index 262c410..0000000 --- a/alacritty/alacritty.yml +++ /dev/null @@ -1,905 +0,0 @@ -# _ _ _ _ _ -# / \ | | __ _ ___ _ __(_) |_| |_ _ _ -# / _ \ | |/ _` |/ __| '__| | __| __| | | | -# / ___ \| | (_| | (__| | | | |_| |_| |_| | -# /_/ \_\_|\__,_|\___|_| |_|\__|\__|\__, | -# |___/ -# by Stephan Raabe (2023) -# ----------------------------------------------------- -# -# Configuration for Alacritty, the GPU enhanced terminal emulator. -# -# Import additional configuration files -# -# Imports are loaded in order, skipping all missing files, with the importing -# file being loaded last. If a field is already present in a previous import, it -# will be replaced. -# -# All imports must either be absolute paths starting with `/`, or paths relative -# to the user's home directory starting with `~/`. -#import: -# - /path/to/alacritty.yml - -# Any items in the `env` entry below will be added as -# environment variables. Some entries may override variables -# set by alacritty itself. -#env: - # TERM variable - # - # This value is used to set the `$TERM` environment variable for - # each instance of Alacritty. If it is not present, alacritty will - # check the local terminfo database and use `alacritty` if it is - # available, otherwise `xterm-256color` is used. - #TERM: alacritty - -window: - # Window dimensions (changes require restart) - # - # Number of lines/columns (not pixels) in the terminal. Both lines and columns - # must be non-zero for this to take effect. The number of columns must be at - # least `2`, while using a value of `0` for columns and lines will fall back - # to the window manager's recommended size - #dimensions: - # columns: 0 - # lines: 0 - - # Window position (changes require restart) - # - # Specified in number of pixels. - # If the position is not set, the window manager will handle the placement. - #position: - # x: 0 - # y: 0 - - # Window padding (changes require restart) - # - # Blank space added around the window in pixels. This padding is scaled - # by DPI and the specified value is always added at both opposing sides. - padding: - x: 15 - y: 15 - - # Spread additional padding evenly around the terminal content. - #dynamic_padding: false - - # Window decorations - # - # Values for `decorations`: - # - full: Borders and title bar - # - none: Neither borders nor title bar - # - # Values for `decorations` (macOS only): - # - transparent: Title bar, transparent background and title bar buttons - # - buttonless: Title bar, transparent background and no title bar buttons - #decorations: full - - # Background opacity - # - # Window opacity as a floating point number from `0.0` to `1.0`. - # The value `0.0` is completely transparent and `1.0` is opaque. - opacity: 0.7 - - # Startup Mode (changes require restart) - # - # Values for `startup_mode`: - # - Windowed - # - Maximized - # - Fullscreen - # - # Values for `startup_mode` (macOS only): - # - SimpleFullscreen - #startup_mode: Windowed - - # Window title - #title: Alacritty - - # Allow terminal applications to change Alacritty's window title. - #dynamic_title: true - - # Window class (Linux/BSD only): - #class: - # Application instance name - #instance: Alacritty - # General application class - #general: Alacritty - - # Decorations theme variant (Linux/BSD only) - # - # Override the variant of the GTK theme/Wayland client side decorations. - # Commonly supported values are `dark` and `light`. Set this to `None` to use - # the default theme variant. - #decorations_theme_variant: None - -#scrolling: - # Maximum number of lines in the scrollback buffer. - # Specifying '0' will disable scrolling. - #history: 10000 - - # Scrolling distance multiplier. - #multiplier: 3 - -# Font configuration -font: - # Normal (roman) font face - normal: - # Font family - # - # Default: - # - (macOS) Menlo - # - (Linux/BSD) monospace - # - (Windows) Consolas - family: FiraCode Nerd Font - - # The `style` can be specified to pick a specific face. - style: Regular - - # Bold font face - #bold: - # Font family - # - # If the bold family is not specified, it will fall back to the - # value specified for the normal font. - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Bold - - # Italic font face - #italic: - # Font family - # - # If the italic family is not specified, it will fall back to the - # value specified for the normal font. - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Italic - - # Bold italic font face - #bold_italic: - # Font family - # - # If the bold italic family is not specified, it will fall back to the - # value specified for the normal font. - #family: monospace - - # The `style` can be specified to pick a specific face. - #style: Bold Italic - - # Point size - size: 12.0 - - # Offset is the extra space around each character. `offset.y` can be thought - # of as modifying the line spacing, and `offset.x` as modifying the letter - # spacing. - #offset: - # x: 0 - # y: 0 - - # Glyph offset determines the locations of the glyphs within their cells with - # the default being at the bottom. Increasing `x` moves the glyph to the - # right, increasing `y` moves the glyph upward. - #glyph_offset: - # x: 0 - # y: 0 - - # Use built-in font for box drawing characters. - # - # If `true`, Alacritty will use a custom built-in font for box drawing - # characters (Unicode points 2500 - 259f). - # - #builtin_box_drawing: true - -# If `true`, bold text is drawn using the bright color variants. -#draw_bold_text_with_bright_colors: false - -# Colors (Tomorrow Night) -# colors: - # Default colors - # primary: - # background: '#1d1f21' - # background: '#000000' - # foreground: '#c5c8c6' - - # Bright and dim foreground colors - # - # The dimmed foreground color is calculated automatically if it is not - # present. If the bright foreground color is not set, or - # `draw_bold_text_with_bright_colors` is `false`, the normal foreground - # color will be used. - #dim_foreground: '#828482' - #bright_foreground: '#eaeaea' - - # Cursor colors - # - # Colors which should be used to draw the terminal cursor. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - #cursor: - # text: CellBackground - # cursor: CellForeground - - # Vi mode cursor colors - # - # Colors for the cursor when the vi mode is active. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - #vi_mode_cursor: - # text: CellBackground - # cursor: CellForeground - - # Search colors - # - # Colors used for the search bar and match highlighting. - #search: - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - #matches: - # foreground: '#000000' - # background: '#ffffff' - #focused_match: - # foreground: '#ffffff' - # background: '#000000' - - # Keyboard hints - #hints: - # First character in the hint label - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - #start: - # foreground: '#1d1f21' - # background: '#e9ff5e' - - # All characters after the first one in the hint label - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - #end: - # foreground: '#e9ff5e' - # background: '#1d1f21' - - # Line indicator - # - # Color used for the indicator displaying the position in history during - # search and vi mode. - # - # By default, these will use the opposing primary color. - #line_indicator: - # foreground: None - # background: None - - # Footer bar - # - # Color used for the footer bar on the bottom, used by search regex input, - # hyperlink URI preview, etc. - # - #footer_bar: - # background: '#c5c8c6' - # foreground: '#1d1f21' - - # Selection colors - # - # Colors which should be used to draw the selection area. - # - # Allowed values are CellForeground/CellBackground, which reference the - # affected cell, or hexadecimal colors like #ff00ff. - #selection: - # text: CellBackground - # background: CellForeground - - # Normal colors - #normal: - # black: '#1d1f21' - # red: '#cc6666' - # green: '#b5bd68' - # yellow: '#f0c674' - # blue: '#81a2be' - # magenta: '#b294bb' - # cyan: '#8abeb7' - # white: '#c5c8c6' - - # Bright colors - #bright: - # black: '#666666' - # red: '#d54e53' - # green: '#b9ca4a' - # yellow: '#e7c547' - # blue: '#7aa6da' - # magenta: '#c397d8' - # cyan: '#70c0b1' - # white: '#eaeaea' - - # Dim colors - # - # If the dim colors are not set, they will be calculated automatically based - # on the `normal` colors. - #dim: - # black: '#131415' - # red: '#864343' - # green: '#777c44' - # yellow: '#9e824c' - # blue: '#556a7d' - # magenta: '#75617b' - # cyan: '#5b7d78' - # white: '#828482' - - # Indexed Colors - # - # The indexed colors include all colors from 16 to 256. - # When these are not set, they're filled with sensible defaults. - # - # Example: - # `- { index: 16, color: '#ff00ff' }` - # - #indexed_colors: [] - - # Transparent cell backgrounds - # - # Whether or not `window.opacity` applies to all cell backgrounds or only to - # the default background. When set to `true` all cells will be transparent - # regardless of their background color. - #transparent_background_colors: false - -# Bell -# -# The bell is rung every time the BEL control character is received. -#bell: - # Visual Bell Animation - # - # Animation effect for flashing the screen when the visual bell is rung. - # - # Values for `animation`: - # - Ease - # - EaseOut - # - EaseOutSine - # - EaseOutQuad - # - EaseOutCubic - # - EaseOutQuart - # - EaseOutQuint - # - EaseOutExpo - # - EaseOutCirc - # - Linear - #animation: EaseOutExpo - - # Duration of the visual bell flash in milliseconds. A `duration` of `0` will - # disable the visual bell animation. - #duration: 0 - - # Visual bell animation color. - #color: '#ffffff' - - # Bell Command - # - # This program is executed whenever the bell is rung. - # - # When set to `command: None`, no command will be executed. - # - # Example: - # command: - # program: notify-send - # args: ["Hello, World!"] - # - #command: None - -#selection: - # This string contains all characters that are used as separators for - # "semantic words" in Alacritty. - #semantic_escape_chars: ",│`|:\"' ()[]{}<>\t" - - # When set to `true`, selected text will be copied to the primary clipboard. - #save_to_clipboard: false - -#cursor: - # Cursor style - #style: - # Cursor shape - # - # Values for `shape`: - # - ▇ Block - # - _ Underline - # - | Beam - #shape: Block - - # Cursor blinking state - # - # Values for `blinking`: - # - Never: Prevent the cursor from ever blinking - # - Off: Disable blinking by default - # - On: Enable blinking by default - # - Always: Force the cursor to always blink - #blinking: Off - - # Vi mode cursor style - # - # If the vi mode cursor style is `None` or not specified, it will fall back to - # the style of the active value of the normal cursor. - # - # See `cursor.style` for available options. - #vi_mode_style: None - - # Cursor blinking interval in milliseconds. - #blink_interval: 750 - - # Time after which cursor stops blinking, in seconds. - # - # Specifying '0' will disable timeout for blinking. - #blink_timeout: 5 - - # If this is `true`, the cursor will be rendered as a hollow box when the - # window is not focused. - #unfocused_hollow: true - - # Thickness of the cursor relative to the cell width as floating point number - # from `0.0` to `1.0`. - #thickness: 0.15 - -# Live config reload (changes require restart) -#live_config_reload: true - -# Shell -# -# You can set `shell.program` to the path of your favorite shell, e.g. -# `/bin/fish`. Entries in `shell.args` are passed unmodified as arguments to the -# shell. -# -# Default: -# - (Linux/BSD/macOS) `$SHELL` or the user's login shell, if `$SHELL` is unset -# - (Windows) powershell -#shell: -# program: /bin/bash -# args: -# - --login - -# Startup directory -# -# Directory the shell is started in. If this is unset, or `None`, the working -# directory of the parent process will be used. -#working_directory: None - -# Send ESC (\x1b) before characters when alt is pressed. -#alt_send_esc: true - -# Offer IPC using `alacritty msg` (unix only) -#ipc_socket: true - -#mouse: - # Click settings - # - # The `double_click` and `triple_click` settings control the time - # alacritty should wait for accepting multiple clicks as one double - # or triple click. - #double_click: { threshold: 300 } - #triple_click: { threshold: 300 } - - # If this is `true`, the cursor is temporarily hidden when typing. - #hide_when_typing: false - -# Hints -# -# Terminal hints can be used to find text or hyperlink in the visible part of -# the terminal and pipe it to other applications. -#hints: - # Keys used for the hint labels. - #alphabet: "jfkdls;ahgurieowpq" - - # List with all available hints - # - # Each hint must have any of `regex` or `hyperlinks` field and either an - # `action` or a `command` field. The fields `mouse`, `binding` and - # `post_processing` are optional. - # - # The `hyperlinks` option will cause OSC 8 escape sequence hyperlinks to be - # highlighted. - # - # The fields `command`, `binding.key`, `binding.mods`, `binding.mode` and - # `mouse.mods` accept the same values as they do in the `key_bindings` section. - # - # The `mouse.enabled` field controls if the hint should be underlined while - # the mouse with all `mouse.mods` keys held or the vi mode cursor is above it. - # - # If the `post_processing` field is set to `true`, heuristics will be used to - # shorten the match if there are characters likely not to be part of the hint - # (e.g. a trailing `.`). This is most useful for URIs and applies only to - # `regex` matches. - # - # Values for `action`: - # - Copy - # Copy the hint's text to the clipboard. - # - Paste - # Paste the hint's text to the terminal or search. - # - Select - # Select the hint's text. - # - MoveViModeCursor - # Move the vi mode cursor to the beginning of the hint. - #enabled: - # - regex: "(ipfs:|ipns:|magnet:|mailto:|gemini:|gopher:|https:|http:|news:|file:|git:|ssh:|ftp:)\ - # [^\u0000-\u001F\u007F-\u009F<>\"\\s{-}\\^⟨⟩`]+" - # hyperlinks: true - # command: xdg-open - # post_processing: true - # mouse: - # enabled: true - # mods: None - # binding: - # key: U - # mods: Control|Shift - -# Mouse bindings -# -# Mouse bindings are specified as a list of objects, much like the key -# bindings further below. -# -# To trigger mouse bindings when an application running within Alacritty -# captures the mouse, the `Shift` modifier is automatically added as a -# requirement. -# -# Each mouse binding will specify a: -# -# - `mouse`: -# -# - Middle -# - Left -# - Right -# - Numeric identifier such as `5` -# -# - `action` (see key bindings for actions not exclusive to mouse mode) -# -# - Mouse exclusive actions: -# -# - ExpandSelection -# Expand the selection to the current mouse cursor location. -# -# And optionally: -# -# - `mods` (see key bindings) -#mouse_bindings: -# - { mouse: Right, action: ExpandSelection } -# - { mouse: Right, mods: Control, action: ExpandSelection } -# - { mouse: Middle, mode: ~Vi, action: PasteSelection } - -# Key bindings -# -# Key bindings are specified as a list of objects. For example, this is the -# default paste binding: -# -# `- { key: V, mods: Control|Shift, action: Paste }` -# -# Each key binding will specify a: -# -# - `key`: Identifier of the key pressed -# -# - A-Z -# - F1-F24 -# - Key0-Key9 -# -# A full list with available key codes can be found here: -# https://docs.rs/glutin/*/glutin/event/enum.VirtualKeyCode.html#variants -# -# Instead of using the name of the keys, the `key` field also supports using -# the scancode of the desired key. Scancodes have to be specified as a -# decimal number. This command will allow you to display the hex scancodes -# for certain keys: -# -# `showkey --scancodes`. -# -# Then exactly one of: -# -# - `chars`: Send a byte sequence to the running application -# -# The `chars` field writes the specified string to the terminal. This makes -# it possible to pass escape sequences. To find escape codes for bindings -# like `PageUp` (`"\x1b[5~"`), you can run the command `showkey -a` outside -# of tmux. Note that applications use terminfo to map escape sequences back -# to keys. It is therefore required to update the terminfo when changing an -# escape sequence. -# -# - `action`: Execute a predefined action -# -# - ToggleViMode -# - SearchForward -# Start searching toward the right of the search origin. -# - SearchBackward -# Start searching toward the left of the search origin. -# - Copy -# - Paste -# - IncreaseFontSize -# - DecreaseFontSize -# - ResetFontSize -# - ScrollPageUp -# - ScrollPageDown -# - ScrollHalfPageUp -# - ScrollHalfPageDown -# - ScrollLineUp -# - ScrollLineDown -# - ScrollToTop -# - ScrollToBottom -# - ClearHistory -# Remove the terminal's scrollback history. -# - Hide -# Hide the Alacritty window. -# - Minimize -# Minimize the Alacritty window. -# - Quit -# Quit Alacritty. -# - ToggleFullscreen -# - SpawnNewInstance -# Spawn a new instance of Alacritty. -# - CreateNewWindow -# Create a new Alacritty window from the current process. -# - ClearLogNotice -# Clear Alacritty's UI warning and error notice. -# - ClearSelection -# Remove the active selection. -# - ReceiveChar -# - None -# -# - Vi mode exclusive actions: -# -# - Open -# Perform the action of the first matching hint under the vi mode cursor -# with `mouse.enabled` set to `true`. -# - ToggleNormalSelection -# - ToggleLineSelection -# - ToggleBlockSelection -# - ToggleSemanticSelection -# Toggle semantic selection based on `selection.semantic_escape_chars`. -# - CenterAroundViCursor -# Center view around vi mode cursor -# -# - Vi mode exclusive cursor motion actions: -# -# - Up -# One line up. -# - Down -# One line down. -# - Left -# One character left. -# - Right -# One character right. -# - First -# First column, or beginning of the line when already at the first column. -# - Last -# Last column, or beginning of the line when already at the last column. -# - FirstOccupied -# First non-empty cell in this terminal row, or first non-empty cell of -# the line when already at the first cell of the row. -# - High -# Top of the screen. -# - Middle -# Center of the screen. -# - Low -# Bottom of the screen. -# - SemanticLeft -# Start of the previous semantically separated word. -# - SemanticRight -# Start of the next semantically separated word. -# - SemanticLeftEnd -# End of the previous semantically separated word. -# - SemanticRightEnd -# End of the next semantically separated word. -# - WordLeft -# Start of the previous whitespace separated word. -# - WordRight -# Start of the next whitespace separated word. -# - WordLeftEnd -# End of the previous whitespace separated word. -# - WordRightEnd -# End of the next whitespace separated word. -# - Bracket -# Character matching the bracket at the cursor's location. -# - SearchNext -# Beginning of the next match. -# - SearchPrevious -# Beginning of the previous match. -# - SearchStart -# Start of the match to the left of the vi mode cursor. -# - SearchEnd -# End of the match to the right of the vi mode cursor. -# -# - Search mode exclusive actions: -# - SearchFocusNext -# Move the focus to the next search match. -# - SearchFocusPrevious -# Move the focus to the previous search match. -# - SearchConfirm -# - SearchCancel -# - SearchClear -# Reset the search regex. -# - SearchDeleteWord -# Delete the last word in the search regex. -# - SearchHistoryPrevious -# Go to the previous regex in the search history. -# - SearchHistoryNext -# Go to the next regex in the search history. -# -# - macOS exclusive actions: -# - ToggleSimpleFullscreen -# Enter fullscreen without occupying another space. -# -# - Linux/BSD exclusive actions: -# -# - CopySelection -# Copy from the selection buffer. -# - PasteSelection -# Paste from the selection buffer. -# -# - `command`: Fork and execute a specified command plus arguments -# -# The `command` field must be a map containing a `program` string and an -# `args` array of command line parameter strings. For example: -# `{ program: "alacritty", args: ["-e", "vttest"] }` -# -# And optionally: -# -# - `mods`: Key modifiers to filter binding actions -# -# - Command -# - Control -# - Option -# - Super -# - Shift -# - Alt -# -# Multiple `mods` can be combined using `|` like this: -# `mods: Control|Shift`. -# Whitespace and capitalization are relevant and must match the example. -# -# - `mode`: Indicate a binding for only specific terminal reported modes -# -# This is mainly used to send applications the correct escape sequences -# when in different modes. -# -# - AppCursor -# - AppKeypad -# - Search -# - Alt -# - Vi -# -# A `~` operator can be used before a mode to apply the binding whenever -# the mode is *not* active, e.g. `~Alt`. -# -# Bindings are always filled by default, but will be replaced when a new -# binding with the same triggers is defined. To unset a default binding, it can -# be mapped to the `ReceiveChar` action. Alternatively, you can use `None` for -# a no-op if you do not wish to receive input characters for that binding. -# -# If the same trigger is assigned to multiple actions, all of them are executed -# in the order they were defined in. -#key_bindings: - #- { key: Paste, action: Paste } - #- { key: Copy, action: Copy } - #- { key: L, mods: Control, action: ClearLogNotice } - #- { key: L, mods: Control, mode: ~Vi|~Search, chars: "\x0c" } - #- { key: PageUp, mods: Shift, mode: ~Alt, action: ScrollPageUp } - #- { key: PageDown, mods: Shift, mode: ~Alt, action: ScrollPageDown } - #- { key: Home, mods: Shift, mode: ~Alt, action: ScrollToTop } - #- { key: End, mods: Shift, mode: ~Alt, action: ScrollToBottom } - - # Vi Mode - #- { key: Space, mods: Shift|Control, mode: ~Search, action: ToggleViMode } - #- { key: Space, mods: Shift|Control, mode: Vi|~Search, action: ScrollToBottom } - #- { key: Escape, mode: Vi|~Search, action: ClearSelection } - #- { key: I, mode: Vi|~Search, action: ToggleViMode } - #- { key: I, mode: Vi|~Search, action: ScrollToBottom } - #- { key: C, mods: Control, mode: Vi|~Search, action: ToggleViMode } - #- { key: Y, mods: Control, mode: Vi|~Search, action: ScrollLineUp } - #- { key: E, mods: Control, mode: Vi|~Search, action: ScrollLineDown } - #- { key: G, mode: Vi|~Search, action: ScrollToTop } - #- { key: G, mods: Shift, mode: Vi|~Search, action: ScrollToBottom } - #- { key: B, mods: Control, mode: Vi|~Search, action: ScrollPageUp } - #- { key: F, mods: Control, mode: Vi|~Search, action: ScrollPageDown } - #- { key: U, mods: Control, mode: Vi|~Search, action: ScrollHalfPageUp } - #- { key: D, mods: Control, mode: Vi|~Search, action: ScrollHalfPageDown } - #- { key: Y, mode: Vi|~Search, action: Copy } - #- { key: Y, mode: Vi|~Search, action: ClearSelection } - #- { key: Copy, mode: Vi|~Search, action: ClearSelection } - #- { key: V, mode: Vi|~Search, action: ToggleNormalSelection } - #- { key: V, mods: Shift, mode: Vi|~Search, action: ToggleLineSelection } - #- { key: V, mods: Control, mode: Vi|~Search, action: ToggleBlockSelection } - #- { key: V, mods: Alt, mode: Vi|~Search, action: ToggleSemanticSelection } - #- { key: Return, mode: Vi|~Search, action: Open } - #- { key: Z, mode: Vi|~Search, action: CenterAroundViCursor } - #- { key: K, mode: Vi|~Search, action: Up } - #- { key: J, mode: Vi|~Search, action: Down } - #- { key: H, mode: Vi|~Search, action: Left } - #- { key: L, mode: Vi|~Search, action: Right } - #- { key: Up, mode: Vi|~Search, action: Up } - #- { key: Down, mode: Vi|~Search, action: Down } - #- { key: Left, mode: Vi|~Search, action: Left } - #- { key: Right, mode: Vi|~Search, action: Right } - #- { key: Key0, mode: Vi|~Search, action: First } - #- { key: Key4, mods: Shift, mode: Vi|~Search, action: Last } - #- { key: Key6, mods: Shift, mode: Vi|~Search, action: FirstOccupied } - #- { key: H, mods: Shift, mode: Vi|~Search, action: High } - #- { key: M, mods: Shift, mode: Vi|~Search, action: Middle } - #- { key: L, mods: Shift, mode: Vi|~Search, action: Low } - #- { key: B, mode: Vi|~Search, action: SemanticLeft } - #- { key: W, mode: Vi|~Search, action: SemanticRight } - #- { key: E, mode: Vi|~Search, action: SemanticRightEnd } - #- { key: B, mods: Shift, mode: Vi|~Search, action: WordLeft } - #- { key: W, mods: Shift, mode: Vi|~Search, action: WordRight } - #- { key: E, mods: Shift, mode: Vi|~Search, action: WordRightEnd } - #- { key: Key5, mods: Shift, mode: Vi|~Search, action: Bracket } - #- { key: Slash, mode: Vi|~Search, action: SearchForward } - #- { key: Slash, mods: Shift, mode: Vi|~Search, action: SearchBackward } - #- { key: N, mode: Vi|~Search, action: SearchNext } - #- { key: N, mods: Shift, mode: Vi|~Search, action: SearchPrevious } - - # Search Mode - #- { key: Return, mode: Search|Vi, action: SearchConfirm } - #- { key: Escape, mode: Search, action: SearchCancel } - #- { key: C, mods: Control, mode: Search, action: SearchCancel } - #- { key: U, mods: Control, mode: Search, action: SearchClear } - #- { key: W, mods: Control, mode: Search, action: SearchDeleteWord } - #- { key: P, mods: Control, mode: Search, action: SearchHistoryPrevious } - #- { key: N, mods: Control, mode: Search, action: SearchHistoryNext } - #- { key: Up, mode: Search, action: SearchHistoryPrevious } - #- { key: Down, mode: Search, action: SearchHistoryNext } - #- { key: Return, mode: Search|~Vi, action: SearchFocusNext } - #- { key: Return, mods: Shift, mode: Search|~Vi, action: SearchFocusPrevious } - - # (Windows, Linux, and BSD only) - #- { key: V, mods: Control|Shift, mode: ~Vi, action: Paste } - #- { key: C, mods: Control|Shift, action: Copy } - #- { key: F, mods: Control|Shift, mode: ~Search, action: SearchForward } - #- { key: B, mods: Control|Shift, mode: ~Search, action: SearchBackward } - #- { key: C, mods: Control|Shift, mode: Vi|~Search, action: ClearSelection } - #- { key: Insert, mods: Shift, action: PasteSelection } - #- { key: Key0, mods: Control, action: ResetFontSize } - #- { key: Equals, mods: Control, action: IncreaseFontSize } - #- { key: Plus, mods: Control, action: IncreaseFontSize } - #- { key: NumpadAdd, mods: Control, action: IncreaseFontSize } - #- { key: Minus, mods: Control, action: DecreaseFontSize } - #- { key: NumpadSubtract, mods: Control, action: DecreaseFontSize } - - # (Windows only) - #- { key: Return, mods: Alt, action: ToggleFullscreen } - - # (macOS only) - #- { key: K, mods: Command, mode: ~Vi|~Search, chars: "\x0c" } - #- { key: K, mods: Command, mode: ~Vi|~Search, action: ClearHistory } - #- { key: Key0, mods: Command, action: ResetFontSize } - #- { key: Equals, mods: Command, action: IncreaseFontSize } - #- { key: Plus, mods: Command, action: IncreaseFontSize } - #- { key: NumpadAdd, mods: Command, action: IncreaseFontSize } - #- { key: Minus, mods: Command, action: DecreaseFontSize } - #- { key: NumpadSubtract, mods: Command, action: DecreaseFontSize } - #- { key: V, mods: Command, action: Paste } - #- { key: C, mods: Command, action: Copy } - #- { key: C, mods: Command, mode: Vi|~Search, action: ClearSelection } - #- { key: H, mods: Command, action: Hide } - #- { key: H, mods: Command|Alt, action: HideOtherApplications } - #- { key: M, mods: Command, action: Minimize } - #- { key: Q, mods: Command, action: Quit } - #- { key: W, mods: Command, action: Quit } - #- { key: N, mods: Command, action: SpawnNewInstance } - #- { key: F, mods: Command|Control, action: ToggleFullscreen } - #- { key: F, mods: Command, mode: ~Search, action: SearchForward } - #- { key: B, mods: Command, mode: ~Search, action: SearchBackward } - -#debug: - # Display the time it takes to redraw each frame. - #render_timer: false - - # Keep the log file after quitting Alacritty. - #persistent_logging: false - - # Log level - # - # Values for `log_level`: - # - Off - # - Error - # - Warn - # - Info - # - Debug - # - Trace - #log_level: Warn - - # Print all received window events. - #print_events: false - - # Highlight window damage information. - #highlight_damage: false diff --git a/apps/ML4W_Dotfiles_Installer.AppImage b/apps/ML4W_Dotfiles_Installer.AppImage index b9b753b..1f705a2 100755 Binary files a/apps/ML4W_Dotfiles_Installer.AppImage and b/apps/ML4W_Dotfiles_Installer.AppImage differ diff --git a/apps/ML4W_Dotfiles_Settings-x86_64.AppImage b/apps/ML4W_Dotfiles_Settings-x86_64.AppImage index b11bb2a..95d869f 100755 Binary files a/apps/ML4W_Dotfiles_Settings-x86_64.AppImage and b/apps/ML4W_Dotfiles_Settings-x86_64.AppImage differ diff --git a/apps/ML4W_Dotfiles_Uninstaller.AppImage b/apps/ML4W_Dotfiles_Uninstaller.AppImage new file mode 100755 index 0000000..79432b7 Binary files /dev/null and b/apps/ML4W_Dotfiles_Uninstaller.AppImage differ diff --git a/apps/ML4W_Welcome-x86_64.AppImage b/apps/ML4W_Welcome-x86_64.AppImage index bbd5634..cd45671 100755 Binary files a/apps/ML4W_Welcome-x86_64.AppImage and b/apps/ML4W_Welcome-x86_64.AppImage differ diff --git a/hypr/conf/animation.conf b/hypr/conf/animation.conf index fe66c0f..68c1127 100644 --- a/hypr/conf/animation.conf +++ b/hypr/conf/animation.conf @@ -1 +1 @@ -source = ~/dotfiles/hypr/conf/animations/default.conf +source = ~/dotfiles/hypr/conf/animations/animation-moving.conf diff --git a/hypr/conf/autostart.conf b/hypr/conf/autostart.conf index dacaf1c..5a28c57 100644 --- a/hypr/conf/autostart.conf +++ b/hypr/conf/autostart.conf @@ -26,11 +26,8 @@ exec-once = hypridle # Load cliphist history exec-once = wl-paste --watch cliphist store -# Initialize swww -exec-once = swww init || swww-daemon --format xrgb - -# Load last wallpaper and waybar with pywal colors -exec-once = ~/dotfiles/hypr/scripts/wallpaper.sh init +# Initialize Wallpaper Engine +exec-once = ~/dotfiles/hypr/scripts/init-wallpaper-engine.sh # Start ML4W Welcome App exec-once = ~/dotfiles/hypr/scripts/ml4w-welcome-autostart.sh diff --git a/hypr/conf/decoration.conf b/hypr/conf/decoration.conf index 7f906f4..e9490b4 100644 --- a/hypr/conf/decoration.conf +++ b/hypr/conf/decoration.conf @@ -1 +1 @@ -source = ~/dotfiles/hypr/conf/decorations/default.conf \ No newline at end of file +source = ~/dotfiles/hypr/conf/decorations/custom.conf diff --git a/hypr/conf/decorations/custom.conf b/hypr/conf/decorations/custom.conf new file mode 100644 index 0000000..bb4f1fd --- /dev/null +++ b/hypr/conf/decorations/custom.conf @@ -0,0 +1,25 @@ +# ----------------------------------------------------- +# General window decoration +# name: "Default" +# ----------------------------------------------------- + +decoration { + rounding = 10 + blur { + enabled = true + size = 10 + passes = 3 + new_optimizations = on + ignore_opacity = true + xray = false + blurls = waybar + } + active_opacity = 1.0 + inactive_opacity = 0.8 + fullscreen_opacity = 1.0 + + drop_shadow = true + shadow_range = 30 + shadow_render_power = 3 + col.shadow = 0x66000000 +} diff --git a/hypr/conf/keybinding.conf b/hypr/conf/keybinding.conf index 792e52f..e695cdb 100644 --- a/hypr/conf/keybinding.conf +++ b/hypr/conf/keybinding.conf @@ -1 +1 @@ -source = ~/dotfiles/hypr/conf/keybindings/default.conf \ No newline at end of file +source = ~/dotfiles/hypr/conf/keybindings/custom.conf diff --git a/hypr/conf/keybindings/custom.conf b/hypr/conf/keybindings/custom.conf new file mode 100644 index 0000000..9d07479 --- /dev/null +++ b/hypr/conf/keybindings/custom.conf @@ -0,0 +1,94 @@ +# ----------------------------------------------------- +# Key bindings +# name: "Default" +# ----------------------------------------------------- + +# SUPER KEY +$mainMod = SUPER + +# Applications +bind = $mainMod, RETURN, exec, ~/dotfiles/.settings/terminal.sh +bind = $mainMod, B, exec, ~/dotfiles/.settings/browser.sh +bind = $mainMod, period, exec, emote + +# Windows +bind = $mainMod, Q, killactive +bind = $mainMod, F, fullscreen +bind = $mainMod, E, exec, ~/dotfiles/.settings/filemanager.sh +bind = $mainMod, T, togglefloating +bind = $mainMod SHIFT, T, exec, ~/dotfiles/hypr/scripts/toggleallfloat.sh +bind = $mainMod, J, togglesplit +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow +bind = $mainMod SHIFT, right, resizeactive, 100 0 +bind = $mainMod SHIFT, left, resizeactive, -100 0 +bind = $mainMod SHIFT, up, resizeactive, 0 -100 +bind = $mainMod SHIFT, down, resizeactive, 0 100 +bind = $mainMod, G, togglegroup + +# Actions +bind = $mainMod, PRINT, exec, ~/dotfiles/hypr/scripts/screenshot.sh +bind = $mainMod CTRL, Q, exec, wlogout +bind = $mainMod SHIFT, W, exec, ~/dotfiles/hypr/scripts/wallpaper.sh +bind = $mainMod CTRL, W, exec, ~/dotfiles/hypr/scripts/wallpaper.sh select +bind = $mainMod CTRL, RETURN, exec, rofi -show drun -replace -i +bind = $mainMod CTRL, H, exec, ~/dotfiles/hypr/scripts/keybindings.sh +bind = $mainMod SHIFT, B, exec, ~/dotfiles/waybar/launch.sh +bind = $mainMod SHIFT, R, exec, ~/dotfiles/hypr/scripts/loadconfig.sh +bind = $mainMod CTRL, F, exec, ~/dotfiles/scripts/filemanager.sh +bind = $mainMod CTRL, C, exec, ~/dotfiles/scripts/cliphist.sh +bind = $mainMod, V, exec, ~/dotfiles/scripts/cliphist.sh +bind = $mainMod CTRL, T, exec, ~/dotfiles/waybar/themeswitcher.sh +bind = $mainMod CTRL, S, exec, ~/dotfiles/apps/ML4W_Dotfiles_Settings-x86_64.AppImage + +# Workspaces +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 +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 +bind = $mainMod CTRL, down, workspace, empty +bind = $mainMod CTRL, left, workspace, e-1 +bind = $mainMod CTRL, right, workspace, e+1 + +# Fn keys +bind = , XF86MonBrightnessUp, exec, brightnessctl -q s +10% +bind = , XF86MonBrightnessDown, exec, brightnessctl -q s 10%- +bind = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% +bind = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioPause, exec, playerctl pause +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous +bind = , XF86AudioMicMute, exec, pactl set-source-mute @DEFAULT_SOURCE@ toggle +bind = , XF86Calculator, exec, qalculate-gtk +bind = , XF86Lock, exec, hyprlock +bind = , XF86Tools, exec, alacritty --class dotfiles-floating -e ~/dotfiles/hypr/settings/settings.sh + +# Passthrough SUPER KEY to Virtual Machine +bind = $mainMod, P, submap, passthru +submap = passthru +bind = SUPER, Escape, submap, reset +submap = reset diff --git a/hypr/conf/monitors/dual.conf b/hypr/conf/monitors/dual.conf new file mode 100644 index 0000000..23591a5 --- /dev/null +++ b/hypr/conf/monitors/dual.conf @@ -0,0 +1,7 @@ +# ----------------------------------------------------- +# Monitor Setup +# name: "Default" +# ----------------------------------------------------- + +monitor=DP-1,preferred,0x0,2 +monitor=HDMI-A-1,3840x2160,1920x-180,2,transform,1 diff --git a/hypr/conf/windowrule.conf b/hypr/conf/windowrule.conf index 4ab74ea..b964d4c 100644 --- a/hypr/conf/windowrule.conf +++ b/hypr/conf/windowrule.conf @@ -1 +1 @@ -source = ~/dotfiles/hypr/conf/windowrules/default.conf \ No newline at end of file +source = ~/dotfiles/hypr/conf/windowrules/custom.conf diff --git a/hypr/conf/windowrules/custom.conf b/hypr/conf/windowrules/custom.conf new file mode 100644 index 0000000..3f8dbff --- /dev/null +++ b/hypr/conf/windowrules/custom.conf @@ -0,0 +1,18 @@ +# ----------------------------------------------------- +# Window rules +# ----------------------------------------------------- + +windowrule = tile,^(Microsoft-edge)$ +windowrule = tile,^(Brave-browser)$ +windowrule = tile,^(Chromium)$ +windowrule = float,^(pavucontrol)$ +windowrule = float,^(blueman-manager)$ +windowrule = float,^(nm-connection-editor)$ +windowrule = float,^(qalculate-gtk)$ +windowrule = float,^(showmethekey-gtk)$ +windowrule = pin,^(showmethekey-gtk)$ +layerrule = blur, gtk-layer-shell +layerrule = blur, logout_dialog + +windowrule = float,title=^(Mathematica)$ +windowrule = opacity 0.75, ^(Code)$ diff --git a/hypr/hypridle.conf b/hypr/hypridle.conf index e6fbf8e..d02b4ea 100644 --- a/hypr/hypridle.conf +++ b/hypr/hypridle.conf @@ -8,9 +8,16 @@ # Version 2.8.3 # DO NOT REMOVE THE REPLACEMENT COMMENTS # REQUIRED BY THE ML4W SETTINGS APP +# https://wiki.hyprland.org/Hypr-Ecosystem/hypridle/ + +# general { +# ignore_dbus_inhibit = false +# } general { - ignore_dbus_inhibit = false + lock_cmd = pidof hyprlock || hyprlock # avoid starting multiple hyprlock instances. + before_sleep_cmd = loginctl lock-session # lock before suspend. + after_sleep_cmd = hyprctl dispatch dpms on # to avoid having to press a key twice to turn on the display. } # Screenlock @@ -18,7 +25,7 @@ listener { # HYPRLOCK TIMEOUT timeout = 600 # HYPRLOCK ONTIMEOUT - on-timeout = hyprlock + on-timeout = loginctl lock-session } # dpms diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf new file mode 100644 index 0000000..c121332 --- /dev/null +++ b/hypr/hyprpaper.conf @@ -0,0 +1,3 @@ +preload = $HOME/wallpaper/hyprland.jpg +wallpaper = ,$HOME/wallpaper/hyprland.jpg +splash = false \ No newline at end of file diff --git a/hypr/scripts/init-wallpaper-engine.sh b/hypr/scripts/init-wallpaper-engine.sh new file mode 100755 index 0000000..bfe31c1 --- /dev/null +++ b/hypr/scripts/init-wallpaper-engine.sh @@ -0,0 +1,19 @@ +#!/bin/bash +wallpaper_engine=$(cat $HOME/dotfiles/.settings/wallpaper-engine.sh) +if [ "$wallpaper_engine" == "swww" ] ;then + # swww + echo ":: Using swww" + swww init + swww-daemon --format xrgb + sleep 0.5 + ~/dotfiles/hypr/scripts/wallpaper.sh init +elif [ "$wallpaper_engine" == "hyprpaper" ] ;then + # hyprpaper + echo ":: Using hyprpaper" + sleep 0.5 + ~/dotfiles/hypr/scripts/wallpaper.sh init +else + echo ":: Wallpaper Engine disabled" + ~/dotfiles/hypr/scripts/wallpaper.sh init +fi + diff --git a/hypr/scripts/restart-hypridle.sh b/hypr/scripts/restart-hypridle.sh new file mode 100755 index 0000000..fe29461 --- /dev/null +++ b/hypr/scripts/restart-hypridle.sh @@ -0,0 +1,5 @@ +#!/bin/bash +killall hypridle +sleep 1 +hypridle & +notify-send "hypridle has been restarted." \ No newline at end of file diff --git a/hypr/scripts/wallpaper.sh b/hypr/scripts/wallpaper.sh index f548d25..f749345 100755 --- a/hypr/scripts/wallpaper.sh +++ b/hypr/scripts/wallpaper.sh @@ -88,12 +88,27 @@ transition_type="wipe" # transition_type="outer" # transition_type="random" -swww img $wallpaper \ - --transition-bezier .43,1.19,1,.4 \ - --transition-fps=60 \ - --transition-type=$transition_type \ - --transition-duration=0.7 \ - --transition-pos "$( hyprctl cursorpos )" +wallpaper_engine=$(cat $HOME/dotfiles/.settings/wallpaper-engine.sh) +if [ "$wallpaper_engine" == "swww" ] ;then + # swww + echo ":: Using swww" + swww img $wallpaper \ + --transition-bezier .43,1.19,1,.4 \ + --transition-fps=60 \ + --transition-type=$transition_type \ + --transition-duration=0.7 \ + --transition-pos "$( hyprctl cursorpos )" +elif [ "$wallpaper_engine" == "hyprpaper" ] ;then + # hyprpaper + echo ":: Using hyprpaper" + killall hyprpaper + wal_tpl=$(cat $HOME/dotfiles/.settings/hyprpaper.tpl) + output=${wal_tpl//WALLPAPER/$wallpaper} + echo "$output" > $HOME/dotfiles/hypr/hyprpaper.conf + hyprpaper & +else + echo ":: Wallpaper Engine disabled" +fi if [ "$1" == "init" ] ;then echo ":: Init" diff --git a/install.sh b/install.sh index 73487f8..284454e 100755 --- a/install.sh +++ b/install.sh @@ -14,11 +14,11 @@ if [ ! -z $1 ]; then fi echo -e "${GREEN}" cat <<"EOF" - __ __ _ _ ___ __ _ _ __ _ _ -| \/ | | | || \ \ / / __| | ___ | |_ / _(_) | ___ ___ -| |\/| | | | || |\ \ /\ / / / _` |/ _ \| __| |_| | |/ _ \/ __| -| | | | |__|__ _\ V V / | (_| | (_) | |_| _| | | __/\__ \ -|_| |_|_____| |_| \_/\_/ \__,_|\___/ \__|_| |_|_|\___||___/ + __ __ _ _ ___ __ ____ _ __ _ _ +| \/ | | | || \ \ / / | _ \ ___ | |_ / _(_) | ___ ___ +| |\/| | | | || |\ \ /\ / / | | | |/ _ \| __| |_| | |/ _ \/ __| +| | | | |__|__ _\ V V / | |_| | (_) | |_| _| | | __/\__ \ +|_| |_|_____| |_| \_/\_/ |____/ \___/ \__|_| |_|_|\___||___/ EOF echo -e "${NONE}" @@ -27,8 +27,8 @@ echo "Version: $version" echo "by Stephan Raabe 2024" echo "" if [ -d ~/dotfiles ] ;then - echo "A ML4W dotfiles installation has been detected." - echo "This script will guide you through the update process of the ML4W dotfiles." + echo "A ML4W Dotfiles installation has been detected." + echo "This script will guide you through the update process of the ML4W Dotfiles." else echo "This script will guide you through the installation process of the ML4W dotfiles." fi diff --git a/screenshots/screenshot-dotfiles-settings-app.png b/screenshots/screenshot-dotfiles-settings-app.png index f157dc1..d6657f1 100644 Binary files a/screenshots/screenshot-dotfiles-settings-app.png and b/screenshots/screenshot-dotfiles-settings-app.png differ diff --git a/screenshots/screenshot-welcome.app.png b/screenshots/screenshot-welcome.app.png index 8cacb50..8038959 100644 Binary files a/screenshots/screenshot-welcome.app.png and b/screenshots/screenshot-welcome.app.png differ diff --git a/screenshots/v284/screenshot-284-1.png b/screenshots/v284/screenshot-284-1.png new file mode 100644 index 0000000..35cec80 Binary files /dev/null and b/screenshots/v284/screenshot-284-1.png differ diff --git a/screenshots/welcome-update-dotfiles.png b/screenshots/welcome-update-dotfiles.png index f1fe8ec..9c6e467 100644 Binary files a/screenshots/welcome-update-dotfiles.png and b/screenshots/welcome-update-dotfiles.png differ diff --git a/uninstall.sh b/uninstall.sh new file mode 100755 index 0000000..becd86c --- /dev/null +++ b/uninstall.sh @@ -0,0 +1,12 @@ +#!/bin/bash +# _ _ _ _ _ _ +# | | | |_ __ (_)_ __ ___| |_ __ _| | | +# | | | | '_ \| | '_ \/ __| __/ _` | | | +# | |_| | | | | | | | \__ \ || (_| | | | +# \___/|_| |_|_|_| |_|___/\__\__,_|_|_| +# +clear +sleep 1 +cp $HOME/dotfiles/apps/ML4W_Dotfiles_Uninstaller.AppImage $HOME/.cache +cd $HOME/.cache +./ML4W_Dotfiles_Uninstaller.AppImage \ No newline at end of file diff --git a/waybar/themes/custom/colored/style.css b/waybar/themes/custom/colored/style.css new file mode 100644 index 0000000..f440400 --- /dev/null +++ b/waybar/themes/custom/colored/style.css @@ -0,0 +1,16 @@ +/* ----------------------------------------------------- + * Import Pywal colors + * ----------------------------------------------------- */ + @import '../../../../../.cache/wal/colors-waybar.css'; + + @define-color backgroundlight @color5; + @define-color backgrounddark @color11; + @define-color workspacesbackground1 @color5; + @define-color workspacesbackground2 @color11; + @define-color bordercolor @color11; + @define-color textcolor1 #FFFFFF; + @define-color textcolor2 #FFFFFF; + @define-color textcolor3 #FFFFFF; + @define-color iconcolor #FFFFFF; + + @import '../style.css'; \ No newline at end of file diff --git a/waybar/themes/custom/config b/waybar/themes/custom/config new file mode 100644 index 0000000..d4a4ae5 --- /dev/null +++ b/waybar/themes/custom/config @@ -0,0 +1,73 @@ +// __ __ _ +// \ \ / /_ _ _ _| |__ __ _ _ __ +// \ \ /\ / / _` | | | | '_ \ / _` | '__| +// \ V V / (_| | |_| | |_) | (_| | | +// \_/\_/ \__,_|\__, |_.__/ \__,_|_| +// |___/ +// +// by Stephan Raabe (2023) +// ----------------------------------------------------- +// +{ + // General Settings + + // Position TOP + "layer": "top", + "margin-bottom": 0, + + // Position BOTTOM + // "position": "bottom", + // "margin-top": 0, + // "margin-bottom": 14, + + "layer": "top", + "margin-left": 0, + "margin-right": 0, + "spacing": 0, + + // Load Modules + "include": ["~/dotfiles/waybar/themes/custom/modules.json"], + + // Modules Left + "modules-left": [ + "custom/appmenu", + "custom/settings", + "custom/waybarthemes", + "custom/wallpaper", + // START TASK TOOGLE + // "wlr/taskbar", + // END TASK TOOGLE + "group/quicklinks", + "hyprland/window", + "custom/starter" + ], + + // Modules Center + "modules-center": [ + "hyprland/workspaces" + ], + + // Modules Right + "modules-right": [ + "custom/updates", + "pulseaudio", + // START BT TOOGLE + "bluetooth", + // END BT TOOGLE + "battery", + // START NETWORK TOOGLE + "network", + // END NETWORK TOOGLE + "group/hardware", + "custom/cliphist", + // START IDLE TOOGLE + "idle_inhibitor", + // END IDLE TOOGLE + // START TRAY TOOGLE + "tray", + // END TRAY TOOGLE + "custom/exit", + "custom/ml4w-welcome", + "clock" + ] +} diff --git a/waybar/themes/custom/config.sh b/waybar/themes/custom/config.sh new file mode 100644 index 0000000..b3f7a65 --- /dev/null +++ b/waybar/themes/custom/config.sh @@ -0,0 +1,2 @@ +#!/bin/bash +theme_name="Custum 4k" diff --git a/waybar/themes/custom/modules.json b/waybar/themes/custom/modules.json new file mode 100644 index 0000000..8644a83 --- /dev/null +++ b/waybar/themes/custom/modules.json @@ -0,0 +1,330 @@ +// __ __ _ _ +// | \/ | ___ __| |_ _| | ___ ___ +// | |\/| |/ _ \ / _` | | | | |/ _ \/ __| +// | | | | (_) | (_| | |_| | | __/\__ \ +// |_| |_|\___/ \__,_|\__,_|_|\___||___/ +// +// +// by Stephan Raabe (2023) +// ----------------------------------------------------- +// +{ + // Workspaces + "hyprland/workspaces" : { + "on-click": "activate", + "active-only": false, + "all-outputs": true, + "format": "{}", + "format-icons": { + "urgent": "", + "active": "", + "default": "" + }, + "persistent-workspaces": { + "*": 5 + } + }, + + // Taskbar + "wlr/taskbar": { + "format": "{icon}", + "icon-size": 18, + "tooltip-format": "{title}", + "on-click": "activate", + "on-click-middle": "close", + "ignore-list": [ + "Alacritty" + ], + "app_ids-mapping": { + "firefoxdeveloperedition": "firefox-developer-edition" + }, + "rewrite": { + "Firefox Web Browser": "Firefox", + "Foot Server": "Terminal" + } + }, + + // Hyprland Window + "hyprland/window": { + "rewrite": { + "(.*) - Brave": "$1", + "(.*) - Chromium": "$1", + "(.*) - Brave Search": "$1", + "(.*) - Outlook": "$1", + "(.*) Microsoft Teams": "$1" + }, + "separate-outputs": true + }, + + // Cliphist + "custom/cliphist": { + "format": "", + "on-click": "sleep 0.1 && ~/dotfiles/scripts/cliphist.sh", + "on-click-right": "sleep 0.1 && ~/dotfiles/scripts/cliphist.sh d", + "on-click-middle": "sleep 0.1 && ~/dotfiles/scripts/cliphist.sh w", + "tooltip": false + }, + + // Updates Count + "custom/updates": { + "format": " {}", + "tooltip-format": "{}", + "escape": true, + "return-type": "json", + "exec": "~/dotfiles/scripts/updates.sh", + "restart-interval": 60, + "on-click": "alacritty -e ~/dotfiles/scripts/installupdates.sh", + "tooltip": false + }, + + // Theme Starter Label + "custom/starter": { + "format": "THEME STARTER", + "tooltip": false + }, + + // Wallpaper + "custom/wallpaper": { + "format": "", + "on-click": "~/dotfiles/hypr/scripts/wallpaper.sh select", + "on-click-right": "~/dotfiles/hypr/scripts/wallpaper.sh", + "tooltip": false + }, + + // Waybar Themes + "custom/waybarthemes": { + "format": "", + "on-click": "~/dotfiles/waybar/themeswitcher.sh", + "tooltip": false + }, + + // Settings + "custom/settings": { + "format": "", + "on-click": "alacritty --class dotfiles-floating -e ~/dotfiles/hypr/settings/settings.sh", + "tooltip": false + }, + + // Keybindings + "custom/keybindings": { + "format": "", + "on-click": "~/dotfiles/hypr/scripts/keybindings.sh", + "tooltip": false + }, + + // Filemanager Launcher + "custom/filemanager": { + "format": "", + "on-click": "thunar", + "tooltip": false + }, + + // Browser Launcher + "custom/browser": { + "format": "", + "on-click": "~/dotfiles/.settings/browser.sh", + "tooltip": false + }, + + // ML4W Welcome App + "custom/ml4w-welcome": { + "on-click": "~/dotfiles/apps/ML4W_Welcome-x86_64.AppImage", + "format": " ", + "tooltip": false + }, + + // ChatGPT Launcher + "custom/chatgpt": { + "format": "", + "on-click": "chromium --app=https://chat.openai.com", + "tooltip": false + }, + + // Rofi Application Launcher + "custom/appmenu": { + "format": "Apps", + "on-click": "rofi -show drun -replace", + "on-click-right": "~/dotfiles/hypr/scripts/keybindings.sh", + "tooltip": false + }, + + // Power Menu + "custom/exit": { + "format": "", + "on-click": "wlogout", + "tooltip": false + }, + + // Keyboard State + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + + // System tray + "tray": { + // "icon-size": 21, + "spacing": 10 + }, + + // Clock + "clock": { + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + + // System + "custom/system": { + "format": "", + "tooltip": false + }, + + // CPU + "cpu": { + "format": "/ C {usage}% ", + "on-click": "alacritty -e htop" + }, + + // Memory + "memory": { + "format": "/ M {}% ", + "on-click": "alacritty -e htop" + }, + + // Harddisc space used + "disk": { + "interval": 30, + "format": "D {percentage_used}% ", + "path": "/", + "on-click": "alacritty -e htop" + }, + + "hyprland/language": { + "format": "/ K {short}" + }, + + // Group Hardware + "group/hardware": { + "orientation": "inherit", + "drawer": { + "transition-duration": 300, + "children-class": "not-memory", + "transition-left-to-right": false + }, + "modules": [ + "custom/system", + "disk", + "cpu", + "memory", + "hyprland/language" + ] + }, + + // Group Settings + "group/settings": { + "orientation": "inherit", + "drawer": { + "transition-duration": 300, + "children-class": "not-memory", + "transition-left-to-right": false + }, + "modules": [ + "custom/settings", + "custom/waybarthemes", + "custom/wallpaper" + ] + }, + + // Group Quicklinks + "group/quicklinks": { + "orientation": "horizontal", + "modules": [ + "custom/filemanager", + "custom/browser" + ] + }, + + // Network + "network": { + "format": "{ifname}", + "format-wifi": " {signalStrength}%", + "format-ethernet": " {ipaddr}", + "format-disconnected": "Not connected", //An empty format will hide the module. + "tooltip-format": " {ifname} via {gwaddri}", + "tooltip-format-wifi": " {essid} ({signalStrength}%)", + "tooltip-format-ethernet": " {ifname} ({ipaddr}/{cidr})", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50, + "on-click": "alacritty -e nmtui" + }, + + // Battery + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-charging": " {capacity}%", + "format-plugged": " {capacity}%", + "format-alt": "{icon} {time}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": [" ", " ", " ", " ", " "] + }, + + // Pulseaudio + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{icon} {volume}%", + "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": "pavucontrol" + }, + + // Bluetooth + "bluetooth": { + "format-disabled": "", + "format-off": "", + "interval": 30, + "on-click": "blueman-manager", + "format-no-controller": "" + }, + + // Other + "user": { + "format": "{user}", + "interval": 60, + "icon": false, + }, + + // Idle Inhibator + "idle_inhibitor": { + "format": "{icon}", + "tooltip": true, + "format-icons":{ + "activated": "", + "deactivated": "" + }, + "on-click-right": "hyprlock" + } +} diff --git a/waybar/themes/custom/style.css b/waybar/themes/custom/style.css new file mode 100644 index 0000000..fd877a2 --- /dev/null +++ b/waybar/themes/custom/style.css @@ -0,0 +1,430 @@ +/* + * __ __ _ ____ _ _ + * \ \ / /_ _ _ _| |__ __ _ _ __ / ___|| |_ _ _| | ___ + * \ \ /\ / / _` | | | | '_ \ / _` | '__| \___ \| __| | | | |/ _ \ + * \ V V / (_| | |_| | |_) | (_| | | ___) | |_| |_| | | __/ + * \_/\_/ \__,_|\__, |_.__/ \__,_|_| |____/ \__|\__, |_|\___| + * |___/ |___/ + * + * by Stephan Raabe (2023) + * ----------------------------------------------------- +*/ + +/* ----------------------------------------------------- + * Import Pywal colors + * ----------------------------------------------------- */ +/* @import 'style-light.css'; */ +/* @define-color backgroundlight #FFFFFF; +@define-color backgrounddark #FFFFFF; +@define-color workspacesbackground1 #FFFFFF; +@define-color workspacesbackground2 #CCCCCC; +@define-color bordercolor #FFFFFF; +@define-color textcolor1 #000000; +@define-color textcolor2 #000000; +@define-color textcolor3 #FFFFFF; +@define-color iconcolor #FFFFFF; */ + +/* ----------------------------------------------------- + * General + * ----------------------------------------------------- */ + +* { + font-family: "Fira Sans Semibold", FontAwesome, Roboto, Helvetica, Arial, sans-serif; + border: none; + border-radius: 0px; +} + +window#waybar { + background-color: rgba(0,0,0,0.2); + border-bottom: 0px solid #ffffff; + /* color: #FFFFFF; */ + transition-property: background-color; + transition-duration: .5s; +} + +/* ----------------------------------------------------- + * Workspaces + * ----------------------------------------------------- */ + +#workspaces { + margin: 5px 1px 6px 1px; + padding: 0px 1px; + border-radius: 15px; + border: 0px; + font-weight: bold; + font-style: normal; + font-size: 16px; + color: @textcolor1; +} + +#workspaces button { + padding: 0px 5px; + margin: 4px 3px; + border-radius: 15px; + border: 0px; + color: @textcolor3; + transition: all 0.3s ease-in-out; +} + +#workspaces button.active { + color: @textcolor1; + background: @workspacesbackground2; + border-radius: 15px; + min-width: 40px; + transition: all 0.3s ease-in-out; +} + +#workspaces button:hover { + color: @textcolor1; + background: @workspacesbackground2; + border-radius: 15px; +} + +/* ----------------------------------------------------- + * Tooltips + * ----------------------------------------------------- */ + +tooltip { + border-radius: 10px; + background-color: @backgroundlight; + opacity:0.8; + padding:20px; + margin:0px; +} + +tooltip label { + color: @textcolor2; +} + +/* ----------------------------------------------------- + * Window + * ----------------------------------------------------- */ + +#window { + background: @backgroundlight; + margin: 10px 15px 10px 0px; + padding: 2px 10px 0px 10px; + border-radius: 12px; + color:@textcolor2; + font-size:16px; + font-weight:normal; +} + +window#waybar.empty #window { + background-color:transparent; +} + +/* ----------------------------------------------------- + * Taskbar + * ----------------------------------------------------- */ + +#taskbar { + background: @backgroundlight; + margin: 6px 15px 6px 0px; + padding:0px; + border-radius: 15px; + font-weight: normal; + font-style: normal; + border: 3px solid @backgroundlight; +} + +#taskbar button { + margin:0; + border-radius: 15px; + padding: 0px 5px 0px 5px; +} + +/* ----------------------------------------------------- + * Modules + * ----------------------------------------------------- */ + +.modules-left > widget:first-child > #workspaces { + margin-left: 0; +} + +.modules-right > widget:last-child > #workspaces { + margin-right: 0; +} + +/* ----------------------------------------------------- + * Custom Quicklinks + * ----------------------------------------------------- */ + +#custom-brave, +#custom-browser, +#custom-keybindings, +#custom-outlook, +#custom-filemanager, +#custom-teams, +#custom-chatgpt, +#custom-calculator, +#custom-windowsvm, +#custom-cliphist, +#custom-wallpaper, +#custom-settings, +#custom-wallpaper, +#custom-system, +#custom-waybarthemes { + margin-right: 23px; + font-size: 20px; + font-weight: bold; + color: @iconcolor; +} + + #custom-waybarthemes,#custom-system { + margin-right:15px; + } + + + #custom-ml4w-welcome { + margin-right: 15px; + background-image: url("../assets/ml4w-icon.png"); + background-repeat: no-repeat; + background-position: center; + padding-right: 24px; +} + +/* ----------------------------------------------------- + * Idle Inhibator + * ----------------------------------------------------- */ + + #idle_inhibitor { + margin-right: 15px; + font-size: 22px; + font-weight: bold; + opacity: 0.8; + color: @iconcolor; +} + +#idle_inhibitor.activated { + margin-right: 15px; + font-size: 20px; + font-weight: bold; + opacity: 0.8; + color: #dc2f2f; +} + +/* ----------------------------------------------------- + * Custom Modules + * ----------------------------------------------------- */ + +#custom-appmenu { + background-color: @backgrounddark; + font-size: 16px; + color: @textcolor1; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 10px; +} + +/* ----------------------------------------------------- + * Custom Exit + * ----------------------------------------------------- */ + +#custom-exit { + margin: 0px 20px 0px 0px; + padding:0px; + font-size:20px; + color: @iconcolor; +} + +/* ----------------------------------------------------- + * Custom Updates + * ----------------------------------------------------- */ + +#custom-updates { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 0px; +} + +#custom-updates.green { + background-color: @backgroundlight; +} + +#custom-updates.yellow { + background-color: #ff9a3c; + color: #FFFFFF; +} + +#custom-updates.red { + background-color: #dc2f2f; + color: #FFFFFF; +} + +/* ----------------------------------------------------- + * Custom Youtube + * ----------------------------------------------------- */ + +#custom-youtube { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 0px; +} + +/* ----------------------------------------------------- + * Hardware Group + * ----------------------------------------------------- */ + + #disk,#memory,#cpu,#language { + margin:0px; + padding:0px; + font-size:16px; + color:@iconcolor; +} + +#language { + margin-right:10px; +} + +/* ----------------------------------------------------- + * Clock + * ----------------------------------------------------- */ + +#clock { + background-color: @backgrounddark; + font-size: 16px; + color: @textcolor1; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 0px; +} + +/* ----------------------------------------------------- + * Pulseaudio + * ----------------------------------------------------- */ + +#pulseaudio { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 0px; +} + +#pulseaudio.muted { + background-color: @backgrounddark; + color: @textcolor1; +} + +/* ----------------------------------------------------- + * Network + * ----------------------------------------------------- */ + +#network { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 0px; +} + +#network.ethernet { + background-color: @backgroundlight; + color: @textcolor2; +} + +#network.wifi { + background-color: @backgroundlight; + color: @textcolor2; +} + +/* ----------------------------------------------------- + * Bluetooth + * ----------------------------------------------------- */ + + #bluetooth, #bluetooth.on, #bluetooth.connected { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 10px 15px 10px 0px; +} + +#bluetooth.off { + background-color: transparent; + padding: 0px; + margin: 0px; +} + +/* ----------------------------------------------------- + * Battery + * ----------------------------------------------------- */ + +#battery { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 15px 0px 10px; + margin: 10px 15px 10px 0px; +} + +#battery.charging, #battery.plugged { + color: @textcolor2; + background-color: @backgroundlight; +} + +@keyframes blink { + to { + background-color: @backgroundlight; + color: @textcolor2; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: @textcolor3; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +/* ----------------------------------------------------- + * Tray + * ----------------------------------------------------- */ + +#tray { + background-color: #2980b9; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #eb4d4b; +} + +/* ----------------------------------------------------- + * Other + * ----------------------------------------------------- */ + +label:focus { + background-color: #000000; +} + +#backlight { + background-color: #90b1b1; +} + +#network { + background-color: #2980b9; +} + +#network.disconnected { + background-color: #f53c3c; +} + diff --git a/waybar/themes/ml4w-blur-custom/colored/config.sh b/waybar/themes/ml4w-blur-custom/colored/config.sh new file mode 100644 index 0000000..3a49354 --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/colored/config.sh @@ -0,0 +1,2 @@ +#!/bin/bash +theme_name="ML4W Blur Custom Colored" diff --git a/waybar/themes/ml4w-blur-custom/colored/style.css b/waybar/themes/ml4w-blur-custom/colored/style.css new file mode 100644 index 0000000..f9008da --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/colored/style.css @@ -0,0 +1,16 @@ +/* ----------------------------------------------------- + * Import Pywal colors + * ----------------------------------------------------- */ +@import '../../../../../.cache/wal/colors-waybar.css'; + +@define-color backgroundlight @color5; +@define-color backgrounddark @color11; +@define-color workspacesbackground1 @color5; +@define-color workspacesbackground2 @color11; +@define-color bordercolor @color11; +@define-color textcolor1 #FFFFFF; +@define-color textcolor2 #FFFFFF; +@define-color textcolor3 #FFFFFF; +@define-color iconcolor #FFFFFF; + +@import '../style.css'; diff --git a/waybar/themes/ml4w-blur-custom/config b/waybar/themes/ml4w-blur-custom/config new file mode 100644 index 0000000..df6e6bb --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/config @@ -0,0 +1,58 @@ +// __ __ _ +// \ \ / /_ _ _ _| |__ __ _ _ __ +// \ \ /\ / / _` | | | | '_ \ / _` | '__| +// \ V V / (_| | |_| | |_) | (_| | | +// \_/\_/ \__,_|\__, |_.__/ \__,_|_| +// |___/ +// +// by Stephan Raabe (2023) +// ----------------------------------------------------- +// +{ + // General Settings + "layer": "top", + "margin-top": 0, + "margin-bottom": 0, + "layer": "top", + "margin-left": 0, + "margin-right": 0, + "spacing": 0, + + // Load Modules + "include": ["~/dotfiles/waybar/themes/ml4w-blur-custom/modules.json"], + + // Modules Left + "modules-left": [ + "custom/appmenuicon", + "hyprland/workspaces", + //"custom/appmenu", + //"group/settings", + "wlr/taskbar", + //"group/quicklinks", + "hyprland/window", + "custom/empty" + ], + + // Modules Center + //"modules-center": [ + // "hyprland/workspaces" + //], + + // Modules Right + "modules-right": [ + "custom/updates", + "pulseaudio", + //"bluetooth", + //"battery", + "network", + "cpu", + "memory", + //"group/hardware", + //"custom/cliphist", + "idle_inhibitor", + "tray", + "custom/exit", + //"custom/ml4w-welcome", + "clock" + ] +} diff --git a/waybar/themes/ml4w-blur-custom/mixed/config.sh b/waybar/themes/ml4w-blur-custom/mixed/config.sh new file mode 100644 index 0000000..eb698ad --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/mixed/config.sh @@ -0,0 +1,2 @@ +#!/bin/bash +theme_name="ML4W Blur Mixed" \ No newline at end of file diff --git a/waybar/themes/ml4w-blur-custom/mixed/style.css b/waybar/themes/ml4w-blur-custom/mixed/style.css new file mode 100644 index 0000000..09032ae --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/mixed/style.css @@ -0,0 +1,16 @@ +/* ----------------------------------------------------- + * Import Pywal colors + * ----------------------------------------------------- */ +@import '../../../../../.cache/wal/colors-waybar.css'; + +@define-color backgroundlight @color8; +@define-color backgrounddark #FFFFFF; +@define-color workspacesbackground1 @color8; +@define-color workspacesbackground2 #FFFFFF; +@define-color bordercolor @color8; +@define-color textcolor1 @color8; +@define-color textcolor2 #FFFFFF; +@define-color textcolor3 #FFFFFF; +@define-color iconcolor #FFFFFF; + +@import '../style.css'; diff --git a/waybar/themes/ml4w-blur-custom/modules.json b/waybar/themes/ml4w-blur-custom/modules.json new file mode 100644 index 0000000..e58eb30 --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/modules.json @@ -0,0 +1,382 @@ +// __ __ _ _ +// | \/ | ___ __| |_ _| | ___ ___ +// | |\/| |/ _ \ / _` | | | | |/ _ \/ __| +// | | | | (_) | (_| | |_| | | __/\__ \ +// |_| |_|\___/ \__,_|\__,_|_|\___||___/ +// +// +// by Stephan Raabe (2023) +// ----------------------------------------------------- +// +{ + // Workspaces + "hyprland/workspaces" : { + "on-click": "activate", + "active-only": false, + "all-outputs": true, + "format": "{}", + "format-icons": { + "urgent": "", + "active": "", + "default": "" + }, + "persistent-workspaces": { + // START WORKSPACES + "*": 3 + // END WORKSPACES + } + }, + + // Taskbar + "wlr/taskbar": { + "format": "{icon}", + "icon-size": 18, + "tooltip-format": "{title}", + "on-click": "activate", + "on-click-middle": "close", + "ignore-list": [ + "Alacritty" + ], + "app_ids-mapping": { + "firefoxdeveloperedition": "firefox-developer-edition" + }, + "rewrite": { + "Firefox Web Browser": "Firefox", + "Foot Server": "Terminal" + } + }, + + // Hyprland Window + "hyprland/window": { + "rewrite": { + "(.*) - Brave": "$1", + "(.*) - Chromium": "$1", + "(.*) - Brave Search": "$1", + "(.*) - Outlook": "$1", + "(.*) Microsoft Teams": "$1" + }, + "separate-outputs": true + }, + + // ML4W Welcome App + "custom/ml4w-welcome": { + "on-click": "~/dotfiles/apps/ML4W_Welcome-x86_64.AppImage", + "format": " ", + "tooltip": false + }, + + // Empty + "custom/empty": { + "format": "" + }, + + // Youtube Subscriber Count + "custom/youtube": { + "format": " {}", + "exec": "python ~/private/youtube.py", + "restart-interval": 600, + "on-click": "chromium https://studio.youtube.com", + "tooltip": false + }, + + // Cliphist + "custom/cliphist": { + "format": "", + "on-click": "sleep 0.1 && ~/dotfiles/scripts/cliphist.sh", + "on-click-right": "sleep 0.1 && ~/dotfiles/scripts/cliphist.sh d", + "on-click-middle": "sleep 0.1 && ~/dotfiles/scripts/cliphist.sh w", + "tooltip": false + }, + + // Updates Count + "custom/updates": { + "format": " {}", + "tooltip-format": "{}", + "escape": true, + "return-type": "json", + "exec": "~/dotfiles/scripts/updates.sh", + "restart-interval": 60, + "on-click": "alacritty --class dotfiles-floating -e ~/dotfiles/scripts/installupdates.sh", + "on-click-right": "~/dotfiles/.settings/software.sh", + "tooltip": false + }, + + // Wallpaper + "custom/wallpaper": { + "format": "", + "on-click": "~/dotfiles/hypr/scripts/wallpaper.sh select", + "on-click-right": "~/dotfiles/hypr/scripts/wallpaper.sh", + "tooltip": false + }, + + // Waybar Themes + "custom/waybarthemes": { + "format": "", + "on-click": "~/dotfiles/waybar/themeswitcher.sh", + "tooltip": false + }, + + // Settings + "custom/settings": { + "format": "", + "on-click": "~/dotfiles/apps/ML4W_Dotfiles_Settings-x86_64.AppImage", + "tooltip": false + }, + + // Keybindings + "custom/keybindings": { + "format": "", + "on-click": "~/dotfiles/hypr/scripts/keybindings.sh", + "tooltip": false + }, + + // Filemanager Launcher + "custom/filemanager": { + "format": "", + "on-click": "~/dotfiles/.settings/filemanager.sh", + "tooltip": false + }, + + // Outlook Launcher + "custom/outlook": { + "format": "", + "on-click": "chromium --app=https://outlook.office.com/mail/", + "tooltip": false + }, + + // Teams Launcher + "custom/teams": { + "format": "", + "on-click": "chromium --app=https://teams.microsoft.com/go", + "tooltip": false + }, + + // Browser Launcher + "custom/browser": { + "format": "", + "on-click": "~/dotfiles/.settings/browser.sh", + "tooltip": false + }, + + // ChatGPT Launcher + "custom/chatgpt": { + "format": " ", + "on-click": "chromium --app=https://chat.openai.com", + "tooltip": false + }, + + // Calculator + "custom/calculator": { + "format": "", + "on-click": "qalculate-gtk", + "tooltip": false + }, + + // Windows VM + "custom/windowsvm": { + "format": "", + "on-click": "~/dotfiles/scripts/launchvm.sh", + "tooltip": false + }, + + // Rofi Application Launcher + "custom/appmenu": { + // START APPS LABEL + "format": "Apps", + // END APPS LABEL + "on-click": "sleep 0.2;rofi -show drun -replace", + "on-click-right": "~/dotfiles/hypr/scripts/keybindings.sh", + "tooltip": false + }, + + // Rofi Application Launcher + "custom/appmenuicon": { + "format": "", + "on-click": "rofi -show drun -replace", + "on-click-right": "~/dotfiles/hypr/scripts/keybindings.sh", + "tooltip": false + }, + + // Power Menu + "custom/exit": { + "format": "", + "on-click": "wlogout", + "tooltip": false + }, + + // Keyboard State + "keyboard-state": { + "numlock": true, + "capslock": true, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + + // System tray + "tray": { + "icon-size": 21, + "spacing": 10 + }, + + // Clock + "clock": { + // TIMEDATEFORMAT + "format": "{:%H:%M - %a}", + // "timezone": "America/New_York", + "tooltip-format": "{:%Y %B}\n{calendar}", + // START CLOCK FORMAT + "format-alt": "{:%Y-%m-%d}" + // END CLOCK FORMAT + }, + + // System + "custom/system": { + "format": "", + "tooltip": false + }, + + // CPU + "cpu": { + "format": " {usage}%", + "on-click": "alacritty -e htop" + }, + + // Memory + "memory": { + "format": "󰍛 {used:0.1f}G", + "on-click": "alacritty -e htop" + }, + + // Harddisc space used + "disk": { + "interval": 30, + "format": "D {percentage_used}% ", + "path": "/", + "on-click": "alacritty -e htop" + }, + + "hyprland/language": { + "format": "/ K {short}" + }, + + // Group Hardware + "group/hardware": { + "orientation": "inherit", + "drawer": { + "transition-duration": 300, + "children-class": "not-memory", + "transition-left-to-right": false + }, + "modules": [ + "custom/system", + "disk", + "cpu", + "memory", + "hyprland/language" + ] + }, + + // Group Settings + "group/settings": { + "orientation": "horizontal", + "modules": [ + // START CHATGPT TOOGLE + "custom/chatgpt", + // END CHATGPT TOOGLE + "custom/settings", + "custom/waybarthemes", + "custom/wallpaper" + ] + }, + + // Group Quicklinks + "group/quicklinks": { + "orientation": "horizontal", + "modules": [ + "custom/browser", + "custom/filemanager", + ] + }, + + // Network + "network": { + "format": "{ifname}", + "format-wifi": " {signalStrength}%", + "format-ethernet": " {ifname}", + "format-disconnected": "Disconnected", + "tooltip-format": " {ifname} via {gwaddri}", + "tooltip-format-wifi": " {ifname} @ {essid}\nIP: {ipaddr}\nStrength: {signalStrength}%\nFreq: {frequency}MHz\nUp: {bandwidthUpBits} Down: {bandwidthDownBits}", + "tooltip-format-ethernet": " {ifname}\nIP: {ipaddr}\n up: {bandwidthUpBits} down: {bandwidthDownBits}", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50, + "on-click": "~/dotfiles/.settings/networkmanager.sh" + }, + + // Battery + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-charging": " {capacity}%", + "format-plugged": " {capacity}%", + "format-alt": "{icon} {time}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": [" ", " ", " ", " ", " "] + }, + + // Pulseaudio + "pulseaudio": { + // "scroll-step": 1, // %, can be a float + "format": "{icon} {volume}%", + "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": "pavucontrol" + }, + + // Bluetooth + "bluetooth": { + "format": " {status}", + "format-disabled": "", + "format-off": "", + "interval": 30, + "on-click": "blueman-manager", + "format-no-controller": "" + }, + + // Other + "user": { + "format": "{user}", + "interval": 60, + "icon": false, + }, + + // Idle Inhibator + "idle_inhibitor": { + "format": "{icon}", + "tooltip": true, + "format-icons":{ + "activated": "", + "deactivated": "" + }, + "on-click-right": "hyprlock" + } +} diff --git a/waybar/themes/ml4w-blur-custom/style.css b/waybar/themes/ml4w-blur-custom/style.css new file mode 100644 index 0000000..fb68626 --- /dev/null +++ b/waybar/themes/ml4w-blur-custom/style.css @@ -0,0 +1,431 @@ +/* + * __ __ _ ____ _ _ + * \ \ / /_ _ _ _| |__ __ _ _ __ / ___|| |_ _ _| | ___ + * \ \ /\ / / _` | | | | '_ \ / _` | '__| \___ \| __| | | | |/ _ \ + * \ V V / (_| | |_| | |_) | (_| | | ___) | |_| |_| | | __/ + * \_/\_/ \__,_|\__, |_.__/ \__,_|_| |____/ \__|\__, |_|\___| + * |___/ |___/ + * + * by Stephan Raabe (2023) + * ----------------------------------------------------- +*/ + +/* ----------------------------------------------------- + * Import Pywal colors + * ----------------------------------------------------- */ +/* @import 'style-light.css'; */ + +/* ----------------------------------------------------- + * General + * ----------------------------------------------------- */ + +* { + font-family: "Fira Sans Semibold", FontAwesome, Roboto, Helvetica, Arial, sans-serif; + border: none; + border-radius: 0px; +} + +window#waybar { + background-color: rgba(0,0,0,0.2); + border-bottom: 0px solid #ffffff; + /* color: #FFFFFF; */ + transition-property: background-color; + transition-duration: .5s; +} + +/* ----------------------------------------------------- + * Workspaces + * ----------------------------------------------------- */ + +#workspaces { + background: @workspacesbackground1; + margin: 5px 10px 6px 0px; + padding: 0px 1px; + border-radius: 15px; + border: 0px; + font-weight: bold; + font-style: normal; + opacity: 0.8; + font-size: 16px; + color: @textcolor1; +} + +#workspaces button { + padding: 0px 5px; + margin: 4px 3px; + border-radius: 15px; + border: 0px; + color: @textcolor1; + background-color: @workspacesbackground2; + transition: all 0.3s ease-in-out; + opacity: 0.4; +} + +#workspaces button.active { + color: @textcolor1; + background: @workspacesbackground2; + border-radius: 15px; + min-width: 40px; + transition: all 0.3s ease-in-out; + opacity:1.0; +} + +#workspaces button:hover { + color: @textcolor1; + background: @workspacesbackground2; + border-radius: 15px; + opacity:0.7; +} + +/* ----------------------------------------------------- + * Tooltips + * ----------------------------------------------------- */ + +tooltip { + border-radius: 10px; + background-color: @backgroundlight; + opacity:0.8; + padding:20px; + margin:0px; +} + +tooltip label { + color: @textcolor2; +} + +/* ----------------------------------------------------- + * Window + * ----------------------------------------------------- */ + +#window { + background: @backgroundlight; + margin: 6px 15px 6px 0px; + padding: 0px 10px 0px 10px; + border-radius: 15px; + color:@textcolor2; + font-size:16px; + font-weight:normal; + opacity:0.8; +} + +window#waybar.empty #window { + background-color:transparent; +} + +/* ----------------------------------------------------- + * Taskbar + * ----------------------------------------------------- */ + +#taskbar { + background: @backgroundlight; + margin: 6px 10px 6px 0px; + padding:0px; + border-radius: 15px; + font-weight: normal; + font-style: normal; + opacity:0.8; + border: 3px solid @backgroundlight; +} + +#taskbar button { + margin:0; + border-radius: 15px; + padding: 0px 5px 0px 5px; +} + + +/* ----------------------------------------------------- + * Custom Quicklinks + * ----------------------------------------------------- */ + +#custom-brave, +#custom-browser, +#custom-keybindings, +#custom-outlook, +#custom-filemanager, +#custom-teams, +#custom-chatgpt, +#custom-calculator, +#custom-windowsvm, +#custom-cliphist, +#custom-wallpaper, +#custom-settings, +#custom-wallpaper, +#custom-system, +#custom-waybarthemes { + margin-right: 23px; + font-size: 20px; + font-weight: bold; + opacity: 0.8; + color: @iconcolor; +} + +#custom-system { + margin-right:15px; +} + +#custom-wallpaper { + margin-right:25px; +} + +#custom-waybarthemes, #custom-settings { + margin-right:20px; +} + +#custom-ml4w-welcome { + margin-right: 15px; + background-image: url("../assets/ml4w-icon.png"); + background-repeat: no-repeat; + background-position: center; + padding-right: 24px; +} + +#custom-chatgpt { + margin-right: 15px; + background-image: url("../assets/ai-icon-20.png"); + background-repeat: no-repeat; + background-position: center; + padding-right: 24px; +} + +/* ----------------------------------------------------- + * Idle Inhibator + * ----------------------------------------------------- */ + +#idle_inhibitor { + margin-right: 10px; + font-size: 22px; + font-weight: bold; + opacity: 0.8; + color: @iconcolor; +} + +#idle_inhibitor.activated { + margin-right: 10px; + font-size: 20px; + font-weight: bold; + opacity: 0.8; + color: #dc2f2f; +} + +/* ----------------------------------------------------- + * Custom Modules + * ----------------------------------------------------- */ + +#custom-appmenu, #custom-appmenuicon { + background-color: @backgrounddark; + font-size: 16px; + color: @textcolor1; + border-radius: 15px; + padding: 0px 10px 0px 10px; + margin: 6px 10px 6px 10px; + opacity:0.8; + border:3px solid @bordercolor; +} + +#custom-appmenuicon { + padding-right: 12px; + padding-left: 8px; +} + +/* ----------------------------------------------------- + * Custom Exit + * ----------------------------------------------------- */ + +#custom-exit { + margin: 0px 15px 0px 0px; + padding:0px; + font-size:20px; + color: @iconcolor; +} + +/* ----------------------------------------------------- + * Custom Updates + * ----------------------------------------------------- */ + +#custom-updates { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 8px 10px 8px 0px; + opacity:0.8; +} + +#custom-updates.green { + background-color: @backgroundlight; +} + +#custom-updates.yellow { + background-color: #ff9a3c; + color: #FFFFFF; +} + +#custom-updates.red { + background-color: #dc2f2f; + color: #FFFFFF; +} + +/* ----------------------------------------------------- + * Custom Youtube + * ----------------------------------------------------- */ + +#custom-youtube { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 8px 15px 8px 0px; + opacity:0.8; +} + +/* ----------------------------------------------------- + * Hardware Group + * ----------------------------------------------------- */ + + #disk,#memory,#cpu,#language { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 8px 10px 8px 0px; + opacity:0.8; +} + +#language { + margin-right:10px; +} + +/* ----------------------------------------------------- + * Clock + * ----------------------------------------------------- */ + +#clock { + background-color: @backgrounddark; + font-size: 16px; + color: @textcolor1; + border-radius: 15px; + padding: 1px 10px 0px 10px; + margin: 6px 10px 6px 0px; + opacity:0.8; + border:3px solid @bordercolor; +} + +/* ----------------------------------------------------- + * Pulseaudio + * ----------------------------------------------------- */ + +#pulseaudio { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 8px 10px 8px 0px; + opacity:0.8; +} + +#pulseaudio.muted { + background-color: @backgrounddark; + color: @textcolor1; +} + +/* ----------------------------------------------------- + * Network + * ----------------------------------------------------- */ + +#network { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 8px 10px 8px 0px; + opacity:0.8; +} + +#network.ethernet { + background-color: @backgroundlight; + color: @textcolor2; +} + +#network.wifi { + background-color: @backgroundlight; + color: @textcolor2; +} + +/* ----------------------------------------------------- + * Bluetooth + * ----------------------------------------------------- */ + + #bluetooth, #bluetooth.on, #bluetooth.connected { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 10px 0px 10px; + margin: 8px 10px 8px 0px; + opacity:0.8; +} + +#bluetooth.off { + background-color: transparent; + padding: 0px; + margin: 0px; +} + +/* ----------------------------------------------------- + * Battery + * ----------------------------------------------------- */ + +#battery { + background-color: @backgroundlight; + font-size: 16px; + color: @textcolor2; + border-radius: 15px; + padding: 2px 15px 0px 10px; + margin: 8px 10px 8px 0px; + opacity:0.8; +} + +#battery.charging, #battery.plugged { + color: @textcolor2; + background-color: @backgroundlight; +} + +@keyframes blink { + to { + background-color: @backgroundlight; + color: @textcolor2; + } +} + +#battery.critical:not(.charging) { + background-color: #f53c3c; + color: @textcolor3; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +/* ----------------------------------------------------- + * Tray + * ----------------------------------------------------- */ + +#tray { + padding: 0px 10px 0px 0px; + color: @textcolor3; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; +} diff --git a/waybar/themeswitcher.sh b/waybar/themeswitcher.sh index 61a1227..30161a6 100755 --- a/waybar/themeswitcher.sh +++ b/waybar/themeswitcher.sh @@ -18,6 +18,7 @@ themes_path="$HOME/dotfiles/waybar/themes" # ----------------------------------------------------- listThemes="" listNames="" +listNames2="" # ----------------------------------------------------- # Read theme folder @@ -35,8 +36,10 @@ do if [ -f $themes_path$result/config.sh ]; then source $themes_path$result/config.sh listNames+="$theme_name\n" + listNames2+="$theme_name~" else listNames+="/${arrThemes[1]};$result\n" + listNames2+="/${arrThemes[1]};$result~" fi fi fi @@ -48,6 +51,9 @@ done # ----------------------------------------------------- listNames=${listNames::-2} choice=$(echo -e "$listNames" | rofi -dmenu -replace -i -config ~/dotfiles/rofi/config-themes.rasi -no-show-icons -width 30 -p "Themes" -format i) +IFS="~" +input=$listNames2 +read -ra array <<< "$input" # ----------------------------------------------------- # Set new theme by writing the theme information to ~/.cache/.themestyle.sh @@ -56,4 +62,5 @@ if [ "$choice" ]; then echo "Loading waybar theme..." echo "${listThemes[$choice+1]}" > ~/.cache/.themestyle.sh ~/dotfiles/waybar/launch.sh + notify-send "Waybar Theme changed" "to ${array[$choice]}" fi