From 56b0de085b3eccac8117cf16b4ddf06a8e126028 Mon Sep 17 00:00:00 2001 From: Your Name Date: Sun, 18 Aug 2024 21:15:23 +0000 Subject: [PATCH] first commit --- gentoo.sh | 1018 +++++++++++++++++++++++++++++++++ hypr/hyprland.conf | 216 +++++++ kitty/kitty.conf | 6 + repos.conf/gentoobinhost.conf | 7 + repos.conf/repos.conf | 19 + sway/catppuccin-mocha | 26 + sway/config | 261 +++++++++ sway/sleep.sh | 5 + sway/startup.sh | 8 + systemd/powertop.service | 12 + waybar/bk/config | 167 ++++++ waybar/bk/style.css | 186 ++++++ waybar/config | 167 ++++++ waybar/style.css | 124 ++++ wofi/.current_wallpaper | 1 + wofi/LICENSE | 21 + wofi/README.md | 87 +++ wofi/assets/frappe.webp | Bin 0 -> 18394 bytes wofi/assets/latte.webp | Bin 0 -> 15100 bytes wofi/assets/macchiato.webp | Bin 0 -> 18710 bytes wofi/assets/mocha.webp | Bin 0 -> 15194 bytes wofi/assets/preview.webp | Bin 0 -> 24994 bytes wofi/colors.css | 314 ++++++++++ wofi/config/config | 11 + wofi/src/frappe/style.css | 164 ++++++ wofi/src/latte/style.css | 164 ++++++ wofi/src/macchiato/style.css | 164 ++++++ wofi/src/mocha/style.css | 164 ++++++ 28 files changed, 3312 insertions(+) create mode 100644 gentoo.sh create mode 100644 hypr/hyprland.conf create mode 100644 kitty/kitty.conf create mode 100644 repos.conf/gentoobinhost.conf create mode 100644 repos.conf/repos.conf create mode 100644 sway/catppuccin-mocha create mode 100644 sway/config create mode 100755 sway/sleep.sh create mode 100755 sway/startup.sh create mode 100644 systemd/powertop.service create mode 100644 waybar/bk/config create mode 100644 waybar/bk/style.css create mode 100644 waybar/config create mode 100644 waybar/style.css create mode 120000 wofi/.current_wallpaper create mode 100644 wofi/LICENSE create mode 100644 wofi/README.md create mode 100644 wofi/assets/frappe.webp create mode 100644 wofi/assets/latte.webp create mode 100644 wofi/assets/macchiato.webp create mode 100644 wofi/assets/mocha.webp create mode 100644 wofi/assets/preview.webp create mode 100644 wofi/colors.css create mode 100644 wofi/config/config create mode 100644 wofi/src/frappe/style.css create mode 100644 wofi/src/latte/style.css create mode 100644 wofi/src/macchiato/style.css create mode 100644 wofi/src/mocha/style.css diff --git a/gentoo.sh b/gentoo.sh new file mode 100644 index 0000000..138491f --- /dev/null +++ b/gentoo.sh @@ -0,0 +1,1018 @@ +#!/usr/bin/bash +######################## +# What this script is: +# +# An automatic installer for Gentoo Stable with the following features: +# 1. Sway with SystemD +# 2. Full Disk Encryption +# 3. Encrypted Boot +# 4. Waybar, AutoLogin via Getty +# 5. The ability to build a custom and deployable image onto any machine +# 6. Easily create a bootable USB drive +# 7. Automatic Partitioning +# 8. Steam/Wine/Lutris Install +# +# INSTRUCTIONS +# +# For new disk installs, initialize the disk to setup partitions from the main menu. +# +# Before running the install, ensure that you have Internet access. +# +# Please be sure to change USER,USER_PASSWORD, DISK_PASSWORD, and ROOT_PASSWORD strings in this file +# +# To install a new OS to a disk, run gentoo.sh and choose option 1 from the main menu +# +######################## +#Configure this section +######################## +PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin +TARGET='/install' +mkdir $TARGET +###################################### +echo +HARD_DISK=$2 +###################################### +USER="verita84" +USER_PASSWORD="123456" +ROOT_PASSWORD="123456" +WIRELESS_PASSWORD='123456' +SSID='123456' +DISK_PASSWORD='123456' +AUTO_DECRYPT='True' +WIRELESS_INTERFACE='wlan0' +COMPRESSION='compress=zstd:10' +FLATPAKS+=() +SERVICES+=(cronie libvirtd smartd cronie cups NetworkManager dev-zram0.swap) +MAKEOPTS="-j$(cat /proc/cpuinfo | grep -i processor | grep -vi 'model' | wc -l)" +ROOT_PARTITION_SIZE="30GB" +FEATURES="-pid-sandbox getbinpkg -binpkg-request-signature" +EMERGE_DEFAULT_OPTS="--getbinpkg " +#USEFLAG CONFIGURATION +USE_FLAGS="webchannel qml -gpm plasma luks cryptsetup kernel-install boot proprietary-codecs libei gdk-pixbuf kernel-install gles2 pulseaudio keeshare gtk vpx bluray libaom libdrm libilbc libplacebo libsoxr libv4l libxml2 lv2 openh264 encode iconv ladspa libass libcaca mp3 openal opus theora v4l vorbis xvid x264 gstreamer networkmanager tray appindicator wayland alsa X sound-server screencast systemd firmware btrfs policykit networkmanager zlib pipewire minizip network browser " +VIDEO_CARDS="amdgpu radeon radeonsi" +# +#PACKAGE CONFIGURATION +BASE_PACKAGES=" net-misc/nyx app-emulation/virt-manager sys-power/powertop net-vpn/tor app-shells/bash-completion sys-apps/fwupd sys-power/cpupower net-p2p/syncthing media-libs/gexiv2 app-vim/airline mail-mta/postfix app-admin/sysstat sys-apps/smartmontools sys-process/cronie net-fs/nfs-utils net-firewall/nftables dev-python/pip sys-fs/inotify-tools net-analyzer/nmap app-misc/screen app-portage/gentoolkit sys-fs/dosfstools app-admin/sudo sys-apps/systemd sys-apps/zram-generator app-eselect/eselect-repository dev-vcs/git sys-block/parted sys-block/zram-init sys-process/btop net-vpn/wireguard-tools app-editors/vim app-misc/fastfetch net-misc/yt-dlp sys-fs/btrfs-progs net-print/cups " +#FIX=" dev-libs/libappindicator" +DESKTOP_APPS=" media-video/obs-studio media-video/handbrake xfce-base/thunar app-editors/vscodium app-office/libreoffice-bin media-video/vlc net-im/telegram-desktop-bin app-admin/keepassxc gui-apps/swayidle gui-apps/swaybg gui-apps/wl-clipboard gui-apps/grim gui-apps/slurp gnome-extra/nm-applet media-fonts/fontawesome media-sound/pavucontrol gui-wm/sway x11-terms/kitty gui-apps/waybar gui-apps/swaylock gui-apps/wofi gui-apps/mako sys-apps/xdg-desktop-portal-gtk sys-apps/xdg-desktop-portal-gtk ranger x11-themes/papirus-icon-theme media-gfx/krita " +# +PACKAGES="$BASE_PACKAGES $DESKTOP_APPS" +TMPFS_SIZE="32G" +CPU_TYPE="x86-64" +TAR_EXCLUDES="--exclude=/run/user/* --exclude=/run/media/* --exclude=/var/db/repos/* --exclude=/var/lib/systemd/coredump/* --exclude=/var/cache/distfiles --exclude=/var/lib/flatpak --exclude=/.snapshots --exclude=/snapshots --exclude=/var/backups --exclude=/volumes/* --exclude=/mnt/* --exclude=/var/tmp/* --exclude=/tmp/* --exclude=/raid/* --exclude=/root/* --exclude=/var/cache/apt/archives/* --exclude=/proc/* --exclude=/.snapshots/* --exclude=/var/lib/libvirt/* --exclude=/dev/* --exclude=/sys/* --exclude=/home/* --exclude=/var/lib/postgresql --exclude=/var/lib/containers " + +#Add Masked Packages to the Array +MASKED_PACKAGES+=(media-video/obs-studio net-misc/nyx net-libs/stem sys-libs/libudev-compat dev-libs/nss dev-libs/libappindicator media-video/ffmpeg games-util/game-device-udev-rules games-util/steam-launcher net-im/telegram-desktop-bin) + +partitionDetection() { + #This is used for the installer to do script-based actions + #/usr/sbin/blkid -p /dev/$HARD_DISK + EFI=$(blkid | grep $HARD_DISK | sort | cut -d ":" -f1 | head -1 | tail -1) + BTRFS=$(blkid | grep $HARD_DISK | sort | cut -d ":" -f1 | head -2 | tail -1) + SWAP=$(blkid | grep $HARD_DISK | sort | cut -d ":" -f1 | head -3 | tail -1) + ROOT_MAPPER_NAME="luks-$(/sbin/blkid -s UUID -o value $BTRFS)" +} + +partitionDetection + +torConfig() { + echo "Configuring TOR" + echo + echo "EntryNodes {us}" >/etc/tor/torrc + echo "ExitNodes {us}" >>/etc/tor/torrc + echo "AvoidDiskWrites 1" >>/etc/tor/torrc + echo "HardwareAccel 1" >>/etc/tor/torrc + echo "NumCPUs 4" >>/etc/tor/torrc + chown -R debian-tor:debian-tor /etc/tor +} + +decryptBoot() { + KEYFILE='keyfile.key' + echo + echo "Setting LUKS to use Keyfile for password entry" + + echo + echo "Clearing Old Keys" + echo + for i in 1 2 3 4 5 6; do + printf "$DISK_PASSWORD" | cryptsetup luksKillSlot $1 $i + done + dd if=/dev/urandom of=/boot/$KEYFILE bs=1024 count=4 + chown root:root /boot/$KEYFILE + chmod 0400 /boot/$KEYFILE + echo + echo "Adding new key......" + echo + printf "$DISK_PASSWORD" | cryptsetup luksAddKey $1 /boot/$KEYFILE + sed -i "s/none/\/boot\/$KEYFILE/" /etc/crypttab +} + +autoLogin() { + GETTY_DIR="$TARGET/etc/systemd/system/getty@tty1.service.d" + GETTY="$GETTY_DIR/override.conf" + mkdir -p $GETTY_DIR + echo "[Service]" >$GETTY + echo "ExecStart=" >>$GETTY + echo "ExecStart=-/sbin/agetty --autologin $USER --noclear %I /usr/bin/bash" >>$GETTY +} + +osSnapshots() { + echo + mkdir $2 + echo "[Creating new OS snapshot to $2/$3.tgz]" + echo + echo + NEW_TAR_EXCLUDES="$TAR_EXCLUDES --exclude=/minio --exclude=$TARGET/* --exclude=/var/lib/docker " + echo + rm -f $2/$3.tgz + time tar cpzvf $2/$3.tgz $NEW_TAR_EXCLUDES / + chown $USER:$USER $2/$3.tgz +} + +homeBackup() { + echo + echo "[Copying USER data from /home to $TARGET/@home]" + echo + rsync -a --delete /home/ --exclude=.cache --exclude=.local/share/flatpak --exclude=.local/share/containers $TARGET/\@home/ +} + +osBackup() { + umount $TARGET + printf "$DISK_PASSWORD" | cryptsetup open ${BTRFS} $ROOT_MAPPER_NAME + + if [[ -e "/dev/mapper/$ROOT_MAPPER_NAME" ]]; then + echo + echo "[Mounting.....]" + echo + mount -o $COMPRESSION /dev/mapper/$ROOT_MAPPER_NAME $TARGET + + if [[ -e "$TARGET/@$ROOT_NAME/usr/bin/bash" ]]; then + if [ "$1" = "home" ]; then + homeBackup + fi + + osSnapshots "$1" "$2" "$3" + else + echo + echo "Aborting Install, $TARGET/@$ROOT_MAPPER_NAME/usr/bin/bash not found!" + echo + echo + exit 1 + fi + + else + echo + echo "Aborting Install, /dev/mapper/$ROOT_MAPPER_NAME not found!" + echo + echo + exit 1 + fi + + ls $TARGET/ + umount $TARGET + cryptsetup close $ROOT_MAPPER_NAME +} + +osRestore() { + partitions + rm -rf $TARGET/usr $TARGET/sbin $TARGET/lib32 $TARGET/libx32 $TARGET/lib $TARGET/vmlinuz* $TARGET/initrd* $TARGET/bin $TARGET/var $TARGET/root $TARGET/opt $TARGET/etc $TARGET/run + clear + echo "[Restoring OS tarfile from $4/$2.tgz]" + echo + tar xfp $4/$2.tgz -C $TARGET/ + + if [ "$3" = "home" ]; then + echo "[Restoring /home]" + echo + rsync -a --delete /home/ $TARGET/home/ + fi + + fstab + cp -f gentoo.sh $TARGET/ + systemMounts + chmod +x $TARGET/gentoo.sh + chroot $TARGET /gentoo.sh bootloader + chroot $TARGET /gentoo.sh btrfsTweaks + chroot $TARGET /gentoo.sh accounts + chroot $TARGET /gentoo.sh hibernate + + chown -R $USER:$USER $TARGET/home/$USER + auto_login + rm -f $TARGET/gentoo.sh + #unmount +} + +systemMounts() { + echo + echo "[Checking for BTRFS Partition]" + + if [[ -e "$BTRFS" ]]; then + partitions + echo "BTRFS device found" + echo + echo "Mounting Boot,EFI,HOME" + echo + mount /dev/mapper/$ROOT_MAPPER_NAME $TARGET + mount $BTRFS $TARGET + btrfs_filesytem + mkdir -p $TARGET/boot/EFI + mount $EFI $TARGET/boot + #CONFIGURE DATA DIRS (HOME) + mkdir $TARGET/home + mount -o subvol=@home /dev/mapper/$ROOT_MAPPER_NAME $TARGET/home + mkdir $TARGET/home/$USER + + mkdir $TARGET/run + mkdir $TARGET/dev + mkdir $TARGET/proc + mkdir $TARGET/sys + mkdir -p $TARGET/var/tmp/portage + + mount --types proc /proc $TARGET/proc + mount --rbind /sys $TARGET/sys + mount --make-rslave $TARGET/sys + mount --rbind /dev $TARGET/dev + mount --make-rslave $TARGET/dev + mount --bind /run $TARGET/run + mount --make-slave $TARGET/run + mount -t efivarfs none $TARGET/sys/firmware/efi/efivars + mount -t tmpfs -o size=$TMPFS_SIZE tmpfs $TARGET/var/tmp/portage + else + echo + echo "Aborting Install, $BTRFS not found!" + echo + echo + exit 1 + fi +} + +unmaskPackages() { + mkdir -p /etc/portage/package.use + echo ">=dev-qt/qtmultimedia-5.0.0 -qml -openal" >/etc/portage/package.use/qtmultimedia + + for i in "${MASKED_PACKAGES[@]}"; do + echo "$i ~amd64" >>/etc/portage/package.accept_keywords + done + +} + +installNvidia() { + ACCEPT_KEYWORDS="~amd64" emerge x11-drivers/nvidia-drivers nvidia-cuda-toolkit www-apps/jellyfin net-im/coturn --autounmask-write + etc-update -q --automode -5 + ACCEPT_KEYWORDS="~amd64" emerge x11-drivers/nvidia-drivers nvidia-cuda-toolkit www-apps/jellyfin net-im/coturn +} + +configurePortage() { + + sed -i "s/-O2/-march=$CPU_TYPE -O2/i" $TARGET/etc/portage/make.conf + echo 'ACCEPT_KEYWORDS="amd64"' >>$TARGET/etc/portage/make.conf + echo "FEATURES=\"$FEATURES\"" >>$TARGET/etc/portage/make.conf + echo "EMERGE_DEFAULT_OPTS=\"$EMERGE_DEFAULT_OPTS\"" >>$TARGET/etc/portage/make.conf + echo "L10N=\"en en-US\"" >>$TARGET/etc/portage/make.conf + mkdir -p $TARGET/var/tmp/portage + + if [ -f "./repos.conf" ]; then + echo + echo "Found Local Gentoo Repo" + mkdir -p $TARGET/etc/portage/repos.conf + mkdir -p $TARGET/etc/portage/binrepos.conf + cp -f repos.conf $TARGET/etc/portage/repos.conf/ + cp -f gentoobinhost.conf $TARGET/etc/portage/binrepos.conf/gentoobinhost.conf + echo "GENTOO_MIRRORS=\"https://mirrors.poster.place/\"" >>$TARGET/etc/portage/make.conf + echo + echo + fi + + chroot $TARGET /usr/bin/emerge --sync + + echo + echo "Configuring Binary Package GPG keys" + echo + chroot $TARGET /usr/bin/getuto + + echo "USE=\"$USE_FLAGS\"" >>$TARGET/etc/portage/make.conf + + echo "MAKEOPTS=\"$MAKEOPTS\"" >>$TARGET/etc/portage/make.conf + + echo + echo + echo + echo "[Configuring Profiles]" + echo + echo + echo + GENTOO_PROFILE=$( + chroot $TARGET /usr/bin/eselect profile list | grep -i "desktop/systemd" | grep -Evi 'plasma|gnome' | grep systemd | grep -i stable | head -1 | cut -d '[' -f2 | cut -d ']' -f1 + ) + chroot $TARGET /usr/bin/eselect profile set $GENTOO_PROFILE + + mkdir -p $TARGET/etc/portage/package.license + echo "*/* *" >$TARGET/etc/portage/package.license/license + rm -rf $TARGET/etc/portage/package.accept_keywords + mkdir -p $TARGET/etc/portage/package.mask + echo "dev-lang/rust" >$TARGET/etc/portage/package.mask/rust +} + +buildGentoo() { + + echo "[Install Base System]" + echo + echo + + echo + echo + echo + echo "[Building Base System]" + echo + echo + chroot $TARGET /usr/bin/emerge --update --deep --newuse @world --autounmask-write + chroot $TARGET etc-update -q --automode -5 + chroot $TARGET /usr/bin/emerge --update --deep --newuse @world + locale + + chroot $TARGET /usr/sbin/systemd-machine-id-setup + + echo + echo + echo + echo "[Installing Kernel]" + echo + echo + chroot $TARGET /usr/bin/emerge -uDN dracut sys-kernel/gentoo-kernel-bin sys-kernel/linux-firmware --autounmask-write + chroot $TARGET etc-update -q --automode -5 + chroot $TARGET /usr/bin/emerge -uDN dracut sys-kernel/gentoo-kernel-bin sys-kernel/linux-firmware gentoo-sources + chroot $TARGET /usr/bin/eselect kernel set 1 + + echo + echo + echo + echo "[Installing Packages]" + echo + echo + cp -f gentoo.sh $TARGET/usr/bin/gentoo.sh + chroot $TARGET /usr/bin/bash /usr/bin/gentoo.sh install-packages + + echo + echo + echo + echo "[Installing the Boot Loader]" + echo + echo + cp -f /tmp/disk $TARGET/tmp/ + chroot $TARGET /usr/bin/bash /usr/bin/gentoo.sh bootloader + + echo + echo + echo "[Configuring Accounts and post-setup tasks]" + echo + echo + + echo 'bash /usr/bin/gentoo.sh accounts' >>$TARGET/setup.sh + echo 'bash /usr/bin/gentoo.sh desktop' >>$TARGET/setup.sh + echo 'bash /usr/bin/gentoo.sh btrfs-tweaks' >>$TARGET/setup.sh + echo 'bash /usr/bin/gentoo.sh hibernate' >>$TARGET/setup.sh + autoLogin + chmod +x $TARGET/usr/bin/gentoo.sh + chmod +x $TARGET/setup.sh + chroot $TARGET /setup.sh + rm -f $TARGET/setup.sh +} + +installPackages() { + unmaskPackages + /usr/bin/emerge -uDN $PACKAGES --autounmask-write + /usr/sbin/etc-update -q --automode -5 + /usr/bin/emerge -uDN $PACKAGES + eselect repository add librewolf git https://codeberg.org/librewolf/gentoo.git + emaint sync -r guru + emaint sync -r librewolf + emerge -uDN librewolf-bin + torConfig +} + +snapshots() { + echo + echo "Creating Snapshots....." + echo + DATE=$(echo $(date +%Y-%m-%d-%H-%M-%S)) + CURRENT_ROOT=$(cat /proc/cmdline | cut -d '@' -f2 | cut -d ' ' -f1) + if [[ "$CURRENT_ROOT" == *"previous"* ]]; then + echo "Already booted in Previous" + else + echo "Removing Previous Snapshot" + btrfs sub del /.snapshots/previous + btrfs sub snapshot / /.snapshots/previous + fi +} + +btrfsTweaks() { + DISABLE_COW=("/var/lib/docker" "/var/lib/containers" "/volumes" "/var/lib/mysql" "/var/lib/libvirt") + + for i in "${DISABLE_COW[@]}"; do + chattr -R +C $i + done +} + +liveOSrestore() { + clear + mkdir /tmp/live + LIVE_OS_DM="/dev/mapper/$(mount | grep -i ' / ' | cut -d '/' -f4 | cut -d ' ' -f1)" + LIVE_OS_SUBVOL="@$(mount | grep -i ' / ' | cut -d '@' -f2 | sed 's/)//g')" + partitions + systemMounts + clear + + echo "[Transferring Currenting Running OS from $LIVE_OS_DM to $HARD_DISK ]" + echo + mount $LIVE_OS_DM /tmp/live + cd /tmp/live/$LIVE_OS_SUBVOL + rsync -a --delete . --exclude=home/* --exclude=.snapshots/* --exclude=sys/* --exclude=dev/* --exclude=proc/* --exclude=run/* $TARGET/ + fstab + cp -f $SCRIPT/gentoo.sh $TARGET/usr/bin/ + echo "[Copying Boot Files ]" + echo + rm -f $TARGET/boot/* + rsync -av --delete /boot/ $TARGET/boot/ + + cp -f /tmp/disk $TARGET/tmp/ + echo "bash /usr/bin/gentoo.sh bootloader" >$TARGET/setup.sh + echo 'bash /usr/bin/gentoo.sh accounts' >>$TARGET/setup.sh + echo 'bash /usr/bin/gentoo.sh btrfs-tweaks' >>$TARGET/setup.sh + echo 'bash /usr/bin/gentoo.sh hibernate' >>$TARGET/setup.sh + + chmod +x $TARGET/usr/bin/gentoo.sh + chmod +x $TARGET/setup.sh + chroot $TARGET bash /setup.sh + rm -f $TARGET/setup.sh + + read -p 'Would you like to run your UserTweaks: ' -e -i 'y' user_tweaks + + autoLogin + + if [[ $user_tweaks = *y* ]]; then + userTweaks + else + echo + echo "Skipping User Tweaks" + fi + chown -R $USER:$USER $TARGET/home/$USER + cd + umount /tmp/live + #unmount +} + +flatpaks() { + echo + echo "Installing Flatpaks......" + echo + flatpak remote-add --user --if-not-exists flathub https://flathub.org/repo/flathub.flatpakrepo + for i in "${FLATPAKS[@]}"; do + echo $i + flatpak install --user $i -y + done +} + +btrfs_filesytem() { + btrfs sub create $TARGET/@$ROOT_NAME + btrfs sub create $TARGET/@.snapshots + btrfs sub create $TARGET/@libvirt + btrfs sub create $TARGET/@home + btrfs sub create $TARGET/@root + btrfs sub create $TARGET/@containers + btrfs sub create $TARGET/@flatpak + echo + echo "Binding BTRFS Root" + echo + umount $TARGET + mount -o $COMPRESSION,subvol=@$ROOT_NAME /dev/mapper/$ROOT_MAPPER_NAME $TARGET +} + +userTweaks() { + mkdir $TARGET/home/$USER/.librewolf + mkdir -p $TARGET/home/$USER/.config/waybar + mkdir -p $TARGET/home/$USER/Exodus-linux-x64 + mkdir -p $TARGET/home/$USER/.config/wofi + mkdir -p $TARGET/home/$USER/.config/sway + mkdir -p $TARGET/home/$USER/.config/autostart + mkdir -p $TARGET/home/$USER/.config/hypr + mkdir -p $TARGET/home/$USER/.config/rofi + mkdir -p $TARGET/home/$USER/Documents/keys/keepass + mkdir -p $TARGET/home/$USER/dotfiles + mkdir -p $TARGET/home/$USER/server + mkdir -p $TARGET/home/$USER/.config/Exodus + mkdir -p $TARGET/home/$USER/.config/evolution + mkdir -p $TARGET/home/$USER/.config/goa-1.0 + mkdir -p $TARGET/home/$USER/.local/share/fonts + $TARGET/home/$USER/.local/share/fonts/ + + cp -f /home/$USER/.bash* $TARGET/home/$USER/ + + rsync -av --delete /home/$USER/server/ $TARGET/home/$USER/server/ + rsync -av --delete /home/$USER/Exodus-linux-x64/ $TARGET/home/$USER/Exodus-linux-x64/ + rsync -av --delete /home/$USER/.local/share/fonts/ $TARGET/home/$USER/.local/share/fonts/ + rsync -av --delete /home/$USER/.config/hypr/ $TARGET/home/$USER/.config/hypr/ + rsync -av --delete /home/$USER/.config/wofi/ $TARGET/home/$USER/.config/wofi/ + rsync -av --delete /home/$USER/.config/sway/ $TARGET/home/$USER/.config/sway/ + rsync -av --delete /home/$USER/.config/waybar/ $TARGET/home/$USER/.config/waybar/ + rsync -av --delete /home/$USER/.config/rofi/ $TARGET/home/$USER/.config/rofi/ + rsync -av --delete /home/$USER/.config/Exodus/ $TARGET/home/$USER/.config/Exodus/ + rsync -av --delete /home/$USER/.config/evolution/ $TARGET/home/$USER/.config/evolution/ + rsync -av --delete /home/$USER/.config/goa-1.0/ $TARGET/home/$USER/.config/goa-1.0/ + rsync -av --delete /home/$USER/.librewolf/ $TARGET/home/$USER/.librewolf/ + rsync -av --delete /home/$USER/.config/autostart/ $TARGET/home/$USER/.config/autostart/ + rsync -av --delete /home/$USER/Documents/keys/keepass/ $TARGET/home/$USER/Documents/keys/keepass/ + rsync -av --delete /home/$USER/dotfiles/ $TARGET/home/$USER/dotfiles/ + rsync -av --delete /home/$USER/.config/keepassxc/ $TARGET/home/$USER/.config/keepassxc/ + chmod +x $TARGET/home/$USER/dotfiles/scripts/keepass.sh + chroot $TARGET /usr/bin/systemctl disable libvirtd libvirtd.socket firewall.service +} + +services() { + echo '[zram0]' >/etc/systemd/zram-generator.conf + echo 'zram-size = ram * 2' >>/etc/systemd/zram-generator.conf + + for i in "${SERVICES[@]}"; do + systemctl enable --now $i + done + + #Required for Audio to work + systemctl --user enable --now pipewire.socket pipewire-pulse.socket wireplumber.service + systemctl --user enable --now pipewire.service +} + +desktop() { + services +} + +installSteam() { + eselect repository enable steam-overlay + emerge --sync steam-overlay + emerge -uDN games-util/steam-launcher app-emulation/wine-vanilla --autounmask-write + etc-update -q --automode -5 + emerge -uDN @world + emerge -uDN games-util/steam-launcher app-emulation/wine-vanilla +} + +locale() { + echo "ln -sf /usr/share/zoneinfo/US/Mountain /etc/localtime" >>$TARGET/setup.sh + echo "hwclock --systohc" >>$TARGET/setup.sh + echo "en_US.UTF-8 UTF-8" >$TARGET/etc/locale.gen + echo "locale-gen" >>$TARGET/setup.sh +} + +fstab() { + mkdir $TARGET/etc + echo "UUID=$(/sbin/blkid -s UUID -o value ${EFI}) /boot vfat defaults,fmask=0077,dmask=0077 0 1" >$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME / btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@$ROOT_NAME 0 1" >>$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME /.snapshots btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@.snapshots 0 1" >>$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME /var/lib/libvirt btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@libvirt 0 1" >>$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME /var/lib/flatpak btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@flatpak 0 1" >>$TARGET/etc/fstab + echo "tmpfs /var/log tmpfs defaults,dev,exec 0 0" >>$TARGET/etc/fstab + echo "tmpfs /tmp tmpfs defaults 0 0" >>$TARGET/etc/fstab + echo "tmpfs /home/${USER}/.cache tmpfs rw,user,exec 0 0" >>$TARGET/etc/fstab + echo "tmpfs /home/${USER}/Downloads tmpfs rw,user,exec 0 0" >>$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME /home btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@home 0 1" >>$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME /root btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@root 0 1" >>$TARGET/etc/fstab + echo "/dev/mapper/$ROOT_MAPPER_NAME /var/lib/containers btrfs noatime,nodiratime,autodefrag,$COMPRESSION,subvol=@containers 0 1" >>$TARGET/etc/fstab + if [[ $SWAP_CHOICE = *y* ]]; then + echo "$SWAP none swap 0 0" >>$TARGET/etc/fstab + fi +} + +accounts() { + echo + echo "Set Password for $USER" + useradd -m -s /bin/bash $USER + echo "$USER:$USER_PASSWORD" | chpasswd + gpasswd -a $USER wheel + gpasswd -a $USER network + gpasswd -a $USER video + gpasswd -a $USER libvirt + gpasswd -a $USER netdev + gpasswd -a $USER adm + gpasswd -a $USER video + echo "$USER ALL=(ALL) ALL" >/etc/sudoers + echo "root ALL=(ALL) ALL" >>/etc/sudoers + echo + echo "Setting ROOT Password:" + echo "root:$ROOT_PASSWORD" | chpasswd + /usr/bin/hostnamectl set-hostname $ROOT_NAME +} + +btrfs-tweaks() { + DISABLE_COW=("/var/lib/docker" "/volumes" "/var/lib/mysql" "/var/lib/libvirt") + + for i in "${DISABLE_COW[@]}"; do + chattr -R +C $i + done +} + +initializeDisk() { + clear + echo + echo "[Gentoo Installer - Initialize Device]" + echo + + parted /dev/$HARD_DISK mklabel gpt + parted -a optimal /dev/$HARD_DISK mkpart primary fat32 1MiB 2024MiB + parted -a optimal /dev/$HARD_DISK set 1 esp on + + if [[ $SWAP_CHOICE = *y* ]]; then + parted -a optimal /dev/$HARD_DISK mkpart P2 ext3 2024MiB 98% + parted -a optimal /dev/$HARD_DISK mkpart P2 ext3 98% 100% + else + parted -a optimal /dev/$HARD_DISK mkpart P2 ext3 2024MiB 100% + fi + partitionDetection + printf "$DISK_PASSWORD\n$DISK_PASSWORD" | cryptsetup luksFormat ${BTRFS} + printf "$DISK_PASSWORD" | cryptsetup open ${BTRFS} $ROOT_MAPPER_NAME + echo + echo "Formatting....." + echo y | mkfs.btrfs /dev/mapper/$ROOT_MAPPER_NAME -f + echo + echo "Formatting $EFI" + echo + echo y | mkfs.vfat $EFI + + if [[ $SWAP_CHOICE = *y* ]]; then + mkswap -f $SWAP + fi + echo "Initialize Complete. Please reboot your machine to avoid any issues" + echo + cryptsetup close $ROOT_MAPPER_NAME +} + +wifi() { + iwctl --passphrase $WIRELESS_PASSWORD station $WIRELESS_INTERFACE connect $SSID +} + +show-help() { + clear + echo + echo "[gentoo.sh arguments]" + echo + echo "./gentoo.sh wifi" + echo "./gentoo.sh bootloader [disk] [ROOT_NAME] [ROOT_MAPPER_NAME]" + echo "./gentoo.sh initialize" + echo "./gentoo.sh tar [device name] [location]" + echo "./gentoo.sh snapshot" + echo "./gentoo.sh reomve-snapshot" + echo "./gentoo.sh btrfs-tweaks" + echo +} + +tweaks() { + clear + echo + echo "Gentoo Installer System Tweaks]" + echo + echo "[1] Reinstall Bootloader" + echo "[2] Chroot into existing OS" + echo "[3] Compile the Kernel" + echo "[4] Upgrade gentoo.sh" + echo "[5] Restore Live OS to removable media" + echo "[6] Enable/Disable Disk Password at Boot" + echo + read -p 'Your Choice: ' choice + if [[ $choice = 1 ]]; then + setDevices + bootloader + elif [[ $choice = 2 ]]; then + setDevices + systemMounts + /usr/bin/chroot $TARGET /bin/bash + elif [[ $choice = 3 ]]; then + compile-kernel + elif [[ $choice = 4 ]]; then + rm -f gentoo.sh + rm -f repos.conf + rm -f gentoobinhost.conf + rm -f /tmp/latest-stage3-amd64-desktop-systemd.txt + wget https://git.poster.place/verita84/hyprland/raw/branch/main/gentoo.sh + elif [[ $choice = 5 ]]; then + setDevices + liveOSrestore "$HARD_DISK" $ROOT_MAPPER_NAME "none" "none" "$ROOT_NAME" + elif [[ $choice = 6 ]]; then + clear + echo "[Password Protection at Boot]" + echo + echo + setDevices + read -p 'Unlock Disk without password at boot time? ' -e -i "y" pass_change + if [[ $pass_change = *n* ]]; then + AUTO_DECRYPT="False" + bootloader "$HARD_DISK" "$ROOT_NAME" "$ROOT_MAPPER_NAME" + else + AUTO_DECRYPT="True" + bootloader "$HARD_DISK" "$ROOT_NAME" "$ROOT_MAPPER_NAME" + fi + else + tweaks + fi +} + +download-setup() { + clear + echo "[Choose Deployment Type]" + echo + echo + setDevices + STAGE3_URL=$(curl https://www.gentoo.org/downloads/ | grep -i stage3-amd64-systemd | head -1 | cut -d '"' -f2-3 | cut -d '"' -f1) + STAGE3_FILE="/tmp/stage3.tar.xz" + if [ -f "$STAGE3_FILE" ]; then + echo + echo "Stage 3 already downloaded....." + echo + else + wget -O /tmp/stage3.tar.xz "$STAGE3_URL" + fi + + if [ -f "$STAGE3_FILE" ]; then + echo + echo + echo "Extracting Tar File.........." + echo + echo + systemMounts + echo + echo "Extracting $STAGE3_FILE" + echo + tar xf $STAGE3_FILE -C $TARGET/ + fstab + cp -f /etc/resolv.conf $TARGET/etc/ + configurePortage + cp -f gentoo.sh $TARGET/usr/bin/ + fi +} + +menu() { + clear + echo + echo "[Welcome to the Poster.place Gentoo Installer System]" + echo + echo "[1] Setup Disk" + echo "[2] Download Gentoo Installation Files" + echo "[3] Install System" + echo "[4] Automatic Install" + echo "[5] Backup" + echo "[6] Restore" + echo "[7] Tools and Tweaks" + echo "[8] Initialize Disk" + echo + read -p 'Your Choice: ' choice + + if [[ $choice = 1 ]]; then + setDevices + read -p "Press enter key to Continue" + menu + elif [[ $choice = 2 ]]; then + download-setup + read -p "Press enter key to Continue" + menu + elif [[ $choice = 3 ]]; then + setDevices + buildGentoo + read -p "Press enter key to Continue" + menu + elif [[ $choice = 4 ]]; then + setDevices + download-setup + buildGentoo + exit 1 + elif [[ $choice = 5 ]]; then + clear + echo "[Backup OS]" + echo + read -p 'Backup Home Directory? : ' -e -i 'n' home_backup + read -p 'OS Backup Directory Location : ' -e -i "/mnt" backup_directory + if [[ $home_backup = *n* ]]; then + osBackup "none" "$backup_directory" "$ROOT_NAME" + else + osBackup "home" "$backup_directory" "$ROOT_NAME" + fi + elif [[ $choice = 6 ]]; then + clear + echo "[Restore from Backup]" + echo + echo + rm -f /tmp/disk + setDevices + read -p 'Hostname for Restore: ' -e -i "gentoo" HOSTNAME + read -p 'Restore Directory Image Source: ' -e -i "/mnt" restore_directory + FILE_SCAN=$(ls $restore_directory/gentoo-$HOSTNAME-* | tail -1) + read -p 'Restore Home Directory? : ' -e -i 'n' home_restore + read -p 'Backup file name to restore: ' -e -i "$FILE_SCAN" backup_name + + if [[ $home_restore = *n* ]]; then + osRestore "$HARD_DISK" "$backup_name" "none" "$restore_directory" "$BTRFS" + else + osRestore "$HARD_DISK" "$backup_name" "home" "$restore_directory" "$BTRFS" + fi + elif [[ $choice = 7 ]]; then + tweaks + elif [[ $choice = 8 ]]; then + clear + echo "[Initialize Disk]" + echo + echo + setDevices + initializeDisk + read -p "Press enter key to Continue" + menu + else + menu + fi +} + +partitions() { + echo + echo "Setting Up Partitions....." + echo printf "$DISK_PASSWORD" | cryptsetup open ${BTRFS} $ROOT_MAPPER_NAME + printf "$DISK_PASSWORD" | cryptsetup open ${BTRFS} $ROOT_MAPPER_NAME + if [[ -e "/dev/mapper/$ROOT_MAPPER_NAME" ]]; then + fstab + else + echo + echo "Aborting Install, /dev/mapper/$ROOT_MAPPER_NAME not found!" + echo + echo + exit 1 + fi +} + +setDevices() { + if [ -f "/tmp/disk" ]; then + HARD_DISK=$(cat /tmp/disk | head -1) + ROOT_NAME=$(cat /tmp/disk | tail -3 | head -1) + SWAP_CHOICE=$(cat /tmp/disk | tail -1 | head -1) + else + i=0 + while [ $i != "n" ]; do + clear + echo + echo "Disks and Partitions:" + echo + cat /proc/partitions + echo + echo "Erase the line and press enter to skip to the next detected disk" + echo + i=$(expr $i + 1) + read -p 'Disk Device to Use: ' -e -i $(lsblk | grep -i disk | grep -Evi 'swap' | cut -d ' ' -f1 | head -$i | tail -1) device + if [[ ! -z $device ]]; then + i="n" + fi + done + + read -p 'BTRFS Root Volume name: ' -e -i "gentoo" root_name + read -p 'LUKS Device Mapper Name: ' -e -i "root" device_mapper_name + read -p 'Swap Partition for hibernation? (y/n): ' -e -i "y" SWAP_CHOICE + HARD_DISK=$device + echo $HARD_DISK >/tmp/disk + echo $root_name >>/tmp/disk + echo $device_mapper_name >>/tmp/disk + echo $SWAP_CHOICE >>/tmp/disk + setDevices + fi + partitionDetection +} + +hibernateSetup() { + echo "[Sleep]" >/etc/systemd/sleep.conf + echo "AllowSuspend=yes" >>/etc/systemd/sleep.conf + echo "AllowHibernation=yes" >>/etc/systemd/sleep.conf + echo "AllowSuspendThenHibernate=yes" >>/etc/systemd/sleep.conf + echo "HibernateState=disk" >>/etc/systemd/sleep.conf + echo "HibernateMode=platform" >>/etc/systemd/sleep.conf + echo "HibernateDelaySec=1800" >>/etc/systemd/sleep.conf + echo "HandleLidSwitch=suspend-then-hibernate" >>/etc/systemd/logind.conf + echo "HandleLidSwitchExternalPower=suspend-then-hibernate" >>/etc/systemd/logind.conf + unlink /usr/lib/systemd/system/systemd-suspend.service + rm -f /usr/lib/systemd/system/systemd-suspend.service + ln -s /usr/lib/systemd/system/systemd-suspend-then-hibernate.service /usr/lib/systemd/system/systemd-suspend.service +} + +bootloader() { + chmod -R 740 /boot/EFI + rm -rf /boot/loader/entries/* + #find /boot -type f -name initrd.\* -exec rm -f {} \; + #find /boot/* -type d -exec rm -rf {} \; + bootctl install + MACHINE_ID=$(cat /etc/machine-id) + KERNEL="kernel-$(ls /boot | grep kernel | cut -d '-' -f2-4 | head -1)" + KERNEL_VERSION=$(echo $KERNEL | cut -d '-' -f2-4) + LOADER_FILE="/boot/loader/entries/$MACHINE_ID-$KERNEL_VERSION.conf" + PREVIOUS_LOADER_FILE="/boot/loader/entries/previous.conf" + clear + echo "$ROOT_MAPPER_NAME UUID=$(/sbin/blkid -s UUID -o value ${BTRFS}) none luks" >/etc/crypttab + + echo 'add_dracutmodules+=" crypt dm rootfs-block "' >/etc/dracut.conf + if [[ $SWAP_CHOICE = *y* ]]; then + echo "kernel_cmdline+=\" resume=UUID=$(/sbin/blkid -s UUID -o value ${SWAP}) mitigations=off rd.luks.uuid=$(/sbin/blkid -s UUID -o value ${BTRFS}) root=UUID=$(/sbin/blkid -s UUID -o value /dev/mapper/${ROOT_MAPPER_NAME}) rootflags=subvol=@$ROOT_NAME rw \"" >>/etc/dracut.conf + else + echo "kernel_cmdline+=\" mitigations=off rd.luks.uuid=$(/sbin/blkid -s UUID -o value ${BTRFS}) root=UUID=$(/sbin/blkid -s UUID -o value /dev/mapper/${ROOT_MAPPER_NAME}) rootflags=subvol=@$ROOT_NAME rw \"" >>/etc/dracut.conf + fi + + if [ "$AUTO_DECRYPT" == "True" ]; then + echo "install_items+=/boot/keyfile.key /boot/unlock.sh" >>/etc/dracut.conf + #echo "install_items+=/boot/unlock.sh" >>/etc/dracut.conf + #echo "#!/bin/bash" >/boot/unlock.sh + #echo "cryptsetup open UUID=$(/sbin/blkid -s UUID -o value ${BTRFS}) --key-file /boot/keyfile.key $ROOT_MAPPER_NAME " >>/boot/unlock.sh + #chmod +x /boot/unlock.sh + decryptBoot "${BTRFS}" + fi + + mkdir -p /boot/$MACHINE_ID/$KERNEL_VERSION + dracut --regenerate-all -f + + echo "MachineID=$MACHINE_ID" + echo "KERNEL IS $KERNEL" + echo "Root_Name=$ROOT_NAME" + echo "BTRFS=$BTRFS" + echo "UEFI Kernel: $KERNEL_VERSION" + + echo "default $MACHINE_ID" >/boot/loader/loader.conf + echo "timeout 1" >>/boot/loader/loader.conf + + #Generate Previous Boot Entry + echo "title Previous" >$PREVIOUS_LOADER_FILE + echo "version $KERNEL_VERSION" >>$PREVIOUS_LOADER_FILE + + if [[ $SWAP_CHOICE = *y* ]]; then + echo "options resume=UUID=$(/sbin/blkid -s UUID -o value ${SWAP}) mitigations=off rd.luks.uuid=$(/sbin/blkid -s UUID -o value ${BTRFS}) root=UUID=$(/sbin/blkid -s UUID -o value /dev/mapper/${ROOT_MAPPER_NAME}) rootflags=subvol=@.snapshots/previous rw " >>$PREVIOUS_LOADER_FILE + else + echo "options mitigations=off rd.luks.uuid=$(/sbin/blkid -s UUID -o value ${BTRFS}) root=UUID=$(/sbin/blkid -s UUID -o value /dev/mapper/${ROOT_MAPPER_NAME}) rootflags=subvol=@previous rw " >>$PREVIOUS_LOADER_FILE + fi + echo "machine-id $MACHINE_ID" >>$PREVIOUS_LOADER_FILE + echo "linux /$KERNEL" >>$PREVIOUS_LOADER_FILE + echo "initrd /$MACHINE_ID/$KERNEL_VERSION/initrd" >>$PREVIOUS_LOADER_FILE + + #Generate Main Boot Entry + echo "title Current" >$LOADER_FILE + echo "version $KERNEL_VERSION" >>$LOADER_FILE + if [[ $SWAP_CHOICE = *y* ]]; then + echo "options resume=UUID=$(/sbin/blkid -s UUID -o value ${SWAP}) mitigations=off rd.luks.uuid=$(/sbin/blkid -s UUID -o value ${BTRFS}) root=UUID=$(/sbin/blkid -s UUID -o value /dev/mapper/${ROOT_MAPPER_NAME}) rootflags=subvol=@${ROOT_NAME} rw " >>$LOADER_FILE + else + echo "options mitigations=off rd.luks.uuid=$(/sbin/blkid -s UUID -o value ${BTRFS}) root=UUID=$(/sbin/blkid -s UUID -o value /dev/mapper/${ROOT_MAPPER_NAME}) rootflags=subvol=@${ROOT_NAME} rw " >>$LOADER_FILE + fi + echo "machine-id $MACHINE_ID" >>$LOADER_FILE + echo "linux /$KERNEL" >>$LOADER_FILE + echo "initrd /$MACHINE_ID/$KERNEL_VERSION/initrd" >>$LOADER_FILE + bootctl set-default $MACHINE_ID-$KERNEL_VERSION.conf + #bootctl list +} + +compile-kernel() { + cd /usr/src + eselect kernel set 1 + cd /usr/src/linux + if [ -f "/usr/src/linux/.config" ]; then + make oldconfig + + else + make allyesconfig + fi + + time make -j$(cat /proc/cpuinfo | grep -i processor | grep -vi 'model' | wc -l) + time make -j$(cat /proc/cpuinfo | grep -i processor | grep -vi 'model' | wc -l) modules_install + time make install +} + +if [ "$1" = "desktop" ]; then + desktop +elif [ "$1" = "tar" ]; then + osSnapshots "$3" "$2" +elif [ "$1" = "upgrade-system" ]; then + upgrade-system +elif [ "$1" = "fstab" ]; then + setDevices + export TARGET=/ + fstab +elif [ "$1" = "wifi" ]; then + wifi +elif [ "$1" = "accounts" ]; then + accounts +elif [ "$1" = "hibernate" ]; then + hibernateSetup +elif [ "$1" = "flatpaks" ]; then + flatpaks +elif [ "$1" = "bootloader" ]; then + setDevices + partitionDetection + bootloader +elif [ "$1" = "snapshot" ]; then + snapshots +elif [ "$1" = "steam" ]; then + installSteam +elif [ "$1" = "install-packages" ]; then + installPackages +elif [ "$1" = "btrfs-tweaks" ]; then + btrfsTweaks +elif [ "$1" = "compile-kernel" ]; then + compile-kernel +elif [ "$1" = "remove-snapshot" ]; then + remove-snapshots +elif [ "$1" = "help" ]; then + show-help +else + menu +fi diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..b51f69a --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,216 @@ +# This is an example Hyprland config file. +# +# Refer to the wiki for more information. + +# +# Please note not all available settings / options are set here. +# For a full list, see the wiki +# + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1.3 +#monitor=eDP-1,1920x1080@70,auto,0.8 + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more + +# Execute your favorite apps at launch +exec-once = bash ~/dotfiles/scripts/hyprland-startup.sh & + +# Source a file (multi-file configs) +# source = ~/.config/hypr/myColors.conf + +# Some default env vars. +env = XCURSOR_SIZE,24 + +# For all categories, see https://wiki.hyprland.org/Configuring/Variables/ +input { + kb_layout = us + kb_variant = + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + natural_scroll = 1 + touchpad { + natural_scroll = true + } + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. +} + +general { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + gaps_in = 5 + gaps_out =5 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = dwindle + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false +} + +decoration { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + + rounding = 10 + + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } + + drop_shadow = true + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = true + + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = borderangle, 1, 8, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = true # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = false +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = -1 # Set to 0 to disable the anime mascot wallpapers + mouse_move_enables_dpms=true + key_press_enables_dpms=true +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device:epic-mouse-v1 { + sensitivity = -0.5 +} + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +windowrule = workspace 3, (krita.*)$ +windowrule = workspace 3, (Gimp-2.10.*)$ +windowrule = workspace 3, (xournalpp.*)$ +windowrule = workspace 4, (steam.*)$ +windowrule = workspace 4, (lutris.*)$ +windowrule = workspace 1, (Microsoft-edge.*)$ +windowrule = workspace 2, (nextcloud.*)$ +windowrule = workspace 2, (Element.*)$ +windowrule = workspace 2, (org.telegram.desktop.*)$ +windowrule = workspace 3, (org.kde.kate)$ + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +#Mouse Binds +bindm=alt,mouse:272,movewindow +bindm=shift,mouse:273,wl-copy -p +bindm=shift,mouse:272,wl-paste -p -t text +bind = , Print, exec, grim -g "$(slurp -d)" - | wl-copy +bind = shift,Print, exec, grim - | wl-copy +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, return, exec, kitty +bind = $mainMod, w, exec, microsoft-edge-stable --enable-features=UseOzonePlatform -ozone-platform=wayland --use-cmd-decorder=validating --use-gl=desktop + +bind = $mainMod, f, exec, thunar +bind = $mainMod, r, exec, kitty --class=Ranger --name Ranger /usr/bin/ranger +bind = $mainMod, Q, killactive, +bind = $mainMod, E, exit, +#bind = $mainMod, E, exec, dolphin +bind = $mainMod, V, togglefloating, +bind = $mainMod, space, exec, wofi -s ~/.config/rofi/style.css --show drun +bind = $mainMod, P, pseudo, # dwindle +#bind = $mainMod, J, togglesplit, # dwindle + +# Move Windows like i3 +bind = SUPER SHIFT, H, movewindow, l +bind = SUPER SHIFT, L, movewindow, r +bind = SUPER SHIFT, K, movewindow, u +bind = SUPER SHIFT, J, movewindow, d + +# Move focus with mainMod + arrow keys +bind = $mainMod, h, movefocus, l +bind = $mainMod, l, movefocus, r +bind = $mainMod, k, movefocus, u +bind = $mainMod, j, movefocus, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, 1, 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 + +#Brightness +bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%- +bind = , XF86MonBrightnessUp, exec, brightnessctl set 5%+ +# sound +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle + +#MuteMicrophone +#bind = , XF86AudioMute, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ toggle +# eXAMPLE SPECIAL WORKSPACE (scratchpad) +bind = $mainMod, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, movetoworkspace, special:magic + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow diff --git a/kitty/kitty.conf b/kitty/kitty.conf new file mode 100644 index 0000000..11da42d --- /dev/null +++ b/kitty/kitty.conf @@ -0,0 +1,6 @@ +font_family Operator Mono Book +bold_font Operator Mono Medium +italic_font Operator Mono Book Italic +bold_italic_font Operator Mono Medium Italic +font_size 11.0 + diff --git a/repos.conf/gentoobinhost.conf b/repos.conf/gentoobinhost.conf new file mode 100644 index 0000000..b5ad2dc --- /dev/null +++ b/repos.conf/gentoobinhost.conf @@ -0,0 +1,7 @@ +# These settings were set by the catalyst build script that automatically +# built this stage. +# Please consider using a local mirror. + +[gentoobinhost] +priority = 9999 +sync-uri = https://mirrors.poster.place/releases/amd64/binpackages/17.1/x86-64-v3 diff --git a/repos.conf/repos.conf b/repos.conf/repos.conf new file mode 100644 index 0000000..40184ca --- /dev/null +++ b/repos.conf/repos.conf @@ -0,0 +1,19 @@ +[DEFAULT] +main-repo = gentoo + +[gentoo] +location = /var/db/repos/gentoo +sync-type = rsync +sync-uri = rsync://192.168.0.146/gentoo-portage +auto-sync = yes +sync-rsync-verify-jobs = 1 +sync-rsync-verify-metamanifest = yes +sync-rsync-verify-max-age = 3 +sync-openpgp-key-path = /usr/share/openpgp-keys/gentoo-release.asc +sync-openpgp-keyserver = hkps://keys.gentoo.org +sync-openpgp-key-refresh-retry-count = 40 +sync-openpgp-key-refresh-retry-overall-timeout = 1200 +sync-openpgp-key-refresh-retry-delay-exp-base = 2 +sync-openpgp-key-refresh-retry-delay-max = 60 +sync-openpgp-key-refresh-retry-delay-mult = 4 +sync-webrsync-verify-signature = yes diff --git a/sway/catppuccin-mocha b/sway/catppuccin-mocha new file mode 100644 index 0000000..77749f6 --- /dev/null +++ b/sway/catppuccin-mocha @@ -0,0 +1,26 @@ +set $rosewater #f5e0dc +set $flamingo #f2cdcd +set $pink #f5c2e7 +set $mauve #cba6f7 +set $red #f38ba8 +set $maroon #eba0ac +set $peach #fab387 +set $yellow #f9e2af +set $green #a6e3a1 +set $teal #94e2d5 +set $sky #89dceb +set $sapphire #74c7ec +set $blue #89b4fa +set $lavender #b4befe +set $text #cdd6f4 +set $subtext1 #bac2de +set $subtext0 #a6adc8 +set $overlay2 #9399b2 +set $overlay1 #7f849c +set $overlay0 #6c7086 +set $surface2 #585b70 +set $surface1 #45475a +set $surface0 #313244 +set $base #1e1e2e +set $mantle #181825 +set $crust #11111b diff --git a/sway/config b/sway/config new file mode 100644 index 0000000..f5a3ec2 --- /dev/null +++ b/sway/config @@ -0,0 +1,261 @@ +# Default config for sway +# +# Copy this to ~/.config/sway/config and edit it to your liking. +# +# Read `man 5 sway` for a complete reference. +#output eDP-1 scale 1.5 +output DP-1 pos 0 0 res 1920x1080 +output DP-2 pos 1920 0 res 1920x1080 +workspace 1 output DP-2 +workspace 2 output DP-1 +workspace 3 output DP-1 +workspace 4 output DP-2 +workspace 5 output DP-2 + +#Colors +client.focused #9aa5ce #16161d #c0caf5 #9aa5ce #9aa5ce +client.focused_inactive #16161d #16161d #c0caf5 #16161d #16161d +client.unfocused #16161d #16161d #c0caf5 #16161d #16161d + +# Borders +# Also removes all title bars +for_window [class="^.*"] border pixel 3 +default_border pixel 3 +default_floating_border pixel 3 +# Hide borders at the edge of the screen +#hide_edge_borders smart + +#Gaps +gaps outer 10 +gaps inner 10 + + +### Variables +# +# Logo key. Use Mod1 for Alt. +set $mod Mod4 +# Home row direction keys, like vim +set $left h +set $down j +set $up k +set $right l +# Your preferred terminal emulator +set $term kitty -o font_size=10 +# Your preferred application launcher +# Note: pass the final command to swaymsg so that the resulting window can be opened +# on the original workspace that the command was run on. +set $menu pkill wofi || wofi --conf ~/.config/wofi/config/config --style ~/.config/wofi/src/mocha/style.css --show drun,dmenu,run + +include /etc/sway/config-vars.d/* +include /home/verita84/.config/sway/catppuccin-mocha + +#Sway Idle Debian 13 +#exec swayidle -w \ +# timeout 60 'swaymsg "output * power off"' \ +# resume 'swaymsg "output * power on"' \ +# timeout 1200 'systemctl suspend' + +#Sway Idle Debian 13 +exec swayidle -w \ + timeout 60 'swaymsg "output *" disable' \ + resume 'swaymsg "output *" enable' \ + timeout 1200 'systemctl suspend' + + +### Output configuration +# +# Default wallpaper (more resolutions are available in /usr/share/backgrounds/sway/) +output * bg /home/verita84/Pictures/Backgrounds/debian.jpg fill +# +# Example configuration: +# +# output HDMI-A-1 resolution 1920x1080 position 1920,0 +# +# You can get the names of your outputs by running: swaymsg -t get_outputs + +### Input configuration +# +# Example configuration: +# +# input "2:14:SynPS/2_Synaptics_TouchPad" { +# dwt enabled +# tap enabled +# natural_scroll enabled +# middle_emulation enabled +# } +# +# You can get the names of your inputs by running: swaymsg -t get_inputs +# Read `man 5 sway-input` for more information about this section. + +### Key bindings +# +# Basics: +# + # Start a terminal + bindsym $mod+Return exec $term + + # Kill focused window + bindsym $mod+q kill + + # Start your launcher + bindsym $mod+d exec $menu + + # Drag floating windows by holding down $mod and left mouse button. + # Resize them with right mouse button + $mod. + # Despite the name, also works for non-floating windows. + # Change normal to inverse to use left mouse button for resizing and right + # mouse button for dragging. + floating_modifier $mod normal + + # Reload the configuration file + bindsym $mod+Shift+c reload + + # Exit sway (logs you out of your Wayland session) + bindsym $mod+Shift+e exec swaynag -t warning -m 'You pressed the exit shortcut. Do you really want to exit sway? This will end your Wayland session.' -B 'Yes, exit sway' 'swaymsg exit' +# +# Moving around: +# + # Move your focus around + bindsym $mod+$left focus left + bindsym $mod+$down focus down + bindsym $mod+$up focus up + bindsym $mod+$right focus right + # Or use $mod+[up|down|left|right] + bindsym $mod+Left focus left + bindsym $mod+Down focus down + bindsym $mod+Up focus up + bindsym $mod+Right focus right + + # Move the focused window with the same, but add Shift + bindsym $mod+Shift+$left move left + bindsym $mod+Shift+$down move down + bindsym $mod+Shift+$up move up + bindsym $mod+Shift+$right move right + # Ditto, with arrow keys + bindsym $mod+Shift+Left move left + bindsym $mod+Shift+Down move down + bindsym $mod+Shift+Up move up + bindsym $mod+Shift+Right move right +# +# Workspaces: +# + # Switch to workspace + bindsym $mod+1 workspace number 1 + bindsym $mod+2 workspace number 2 + bindsym $mod+3 workspace number 3 + bindsym $mod+4 workspace number 4 + bindsym $mod+5 workspace number 5 + bindsym $mod+6 workspace number 6 + bindsym $mod+7 workspace number 7 + bindsym $mod+8 workspace number 8 + bindsym $mod+9 workspace number 9 + bindsym $mod+0 workspace number 10 + # Move focused container to workspace + bindsym $mod+Shift+1 move container to workspace number 1 + bindsym $mod+Shift+2 move container to workspace number 2 + bindsym $mod+Shift+3 move container to workspace number 3 + bindsym $mod+Shift+4 move container to workspace number 4 + bindsym $mod+Shift+5 move container to workspace number 5 + bindsym $mod+Shift+6 move container to workspace number 6 + bindsym $mod+Shift+7 move container to workspace number 7 + bindsym $mod+Shift+8 move container to workspace number 8 + bindsym $mod+Shift+9 move container to workspace number 9 + bindsym $mod+Shift+0 move container to workspace number 10 + # Note: workspaces can have any name you want, not just numbers. + # We just use 1-10 as the default. +# +# Layout stuff: +# + # You can "split" the current object of your focus with + # $mod+b or $mod+v, for horizontal and vertical splits + # respectively. + bindsym $mod+b splith + bindsym $mod+v splitv + + # Switch the current container between different layout styles + bindsym $mod+s layout stacking + bindsym $mod+w layout tabbed + bindsym $mod+e layout toggle split + + bindsym $mod+t exec thunar + + # Make the current focus fullscreen + bindsym $mod+f fullscreen + + # Screen Shots + bindsym Print exec grim -g "$(slurp -d)" - | wl-copy + # Toggle the current focus between tiling and floating mode + bindsym $mod+Shift+space floating toggle + + # Swap focus between the tiling area and the floating area + bindsym $mod+space focus mode_toggle + + # Move focus to the parent container + bindsym $mod+a focus parent +# +# Scratchpad: +# + # Sway has a "scratchpad", which is a bag of holding for windows. + # You can send windows there and get them back later. + + # Move the currently focused window to the scratchpad + bindsym $mod+Shift+minus move scratchpad + + # Show the next scratchpad window or hide the focused scratchpad window. + # If there are multiple scratchpad windows, this command cycles through them. + bindsym $mod+minus scratchpad show +# +# Resizing containers: +# +mode "resize" { + # left will shrink the containers width + # right will grow the containers width + # up will shrink the containers height + # down will grow the containers height + bindsym $left resize shrink width 10px + bindsym $down resize grow height 10px + bindsym $up resize shrink height 10px + bindsym $right resize grow width 10px + + # Ditto, with arrow keys + bindsym Left resize shrink width 10px + bindsym Down resize grow height 10px + bindsym Up resize shrink height 10px + bindsym Right resize grow width 10px + + # Return to default mode + bindsym Return mode "default" + bindsym Escape mode "default" +} +bindsym $mod+r mode "resize" + +exec dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP=sway + +#Window Rules +assign [class="krita"] workspace 4 +assign [app_id="org.keepassxc.KeePassXC"] workspace 2 +assign [app_id="virt-manager"] workspace 5 +assign [class="nyx"] workspace 3 +assign [app_id="org.telegram.desktop"] workspace 2 +assign [app_id="LibreWolf"] workspace 1 +assign [app_id="com.obsproject.Studio"] workspace 4 +assign [class="steam"] workspace 5 + +# Startup +exec nm-applet --indicator & +exec swaymsg "workspace 2; exec /home/verita84/dotfiles/scripts/keepass.sh" +exec swaymsg "workspace 1; exec librewolf-bin" +exec swaymsg "workspace 3; exec $term --class nyx -e nyx" +exec swaymsg "workspace 3; exec $term" +exec swaymsg "workspace 3; exec $term" +exec swaymsg "workspace 2; exec telegram-desktop" + +# Status Bar: +# +# Read `man 5 sway-bar` for more information about this section. + + +bar { + swaybar_command waybar +} + diff --git a/sway/sleep.sh b/sway/sleep.sh new file mode 100755 index 0000000..4e9111f --- /dev/null +++ b/sway/sleep.sh @@ -0,0 +1,5 @@ +#!/bin/bash + swayidle -w \ + timeout 10 'swaymsg "output * power off"' \ + resume 'swaymsg "output * power on"' \ + timeout 1200 'systemctl suspend' diff --git a/sway/startup.sh b/sway/startup.sh new file mode 100755 index 0000000..de30b33 --- /dev/null +++ b/sway/startup.sh @@ -0,0 +1,8 @@ +#!/bin/bash +nm-applet --indicator & +/home/verita84/dotfiles/scripts/keepass.sh& +librewolf& +foot& +foot& +foot -a nyx -e nyx& + diff --git a/systemd/powertop.service b/systemd/powertop.service new file mode 100644 index 0000000..791e796 --- /dev/null +++ b/systemd/powertop.service @@ -0,0 +1,12 @@ +[Unit] +Description=Powertop tunings +Requires=multi-user.target +After=multi-user.target + +[Service] +Type=oneshot +RemainAfterExit=yes +ExecStart=/usr/bin/powertop --auto-tune + +[Install] +WantedBy=multi-user.target diff --git a/waybar/bk/config b/waybar/bk/config new file mode 100644 index 0000000..b854f20 --- /dev/null +++ b/waybar/bk/config @@ -0,0 +1,167 @@ +{ + "layer": "top", // Waybar at top layer + "position": "top", // Waybar position (top|bottom|left|right) + "height": 40, + "width":1900, + "margin": "0 0 0 0", + "spacing":10, + + // Choose the order of the modules + + "modules-left": ["hyprland/workspaces", "wlr/taskbar", "hyprland/window"], + "modules-center": ["custom/network_traffic"], + "modules-right": [ "temperature", "cpu", "memory", "battery", "battery#bat1","pulseaudio", "network", "clock", "tray"], + +// Modules configuration + +"hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate", + "all-outputs": true, + "sort-by-number": true, + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "10": "10", + "focused": "", + "default": "" + }, + "on-scroll-up": "hyprctl dispatch workspace e+1", + "on-scroll-down": "hyprctl dispatch workspace e-1", + }, + "hyprland/window": { + "format": "{}", +"icon":true, +"icon-size" : 20 + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "wlr/taskbar": { + "format": "{icon}", + "on-click": "activate", + "on-click-right": "fullscreen", + "on-click-middle": "close", + }, + "tray": { + "icon-size": 20, + "spacing": 5 + }, + "clock": { + "tooltip-format": "{:%A, %d.%B %Y }\n{calendar}", + "format": " {:%a %d %b  %I:%M %p}", //12 hour format + //"format": " {:%a %d %b  %H:%M}", //24 hour format + "format-alt": " {:%d/%m/%Y  %H:%M:%S}", + "timezones": [ "America/Denver" ], + //"max-length": 200 + "interval": 1 + }, + "cpu": { + "format": "{icon0}{icon1}{icon2}{icon3} {usage:>2}% ", + "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"], + "on-click": "kitty -e btop" + }, + "memory": { + "format": "🖴 {: >3}%", + "on-click": "kitty -e btop" + }, + "battery": { + "bat": "BAT0", + "interval": 60, + "states": { + "good": 80, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity: >3}%", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat1": { + "bat": "BAT1", + "interval": 60, + "states": { + "good": 80, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity: >3}%", + "format-icons": ["", "", "", "", ""] + }, + "network": { + //"interface": "wlp0s20f3", // (Optional) To force the use of this interface "format-wifi": " {essid}", + "format": "⚠Disabled", + "format-wifi": "", + "format-ethernet": "", + "format-linked": "{ifname} (No IP)", + "format-disconnected": "⚠Disabled", + "format-alt": "{ifname}: {ipaddr}/{cidr}", + "family": "ipv4", + "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}", + //"min-length": 2, + //"max-length": 2, + "on-click": "nm-connection-editor" + }, + "custom/updates": { + "format": "{} {icon}", + "return-type": "json", + "format-icons": { + "has-updates": "󱍷", + "updated": "󰂪", + "interval": 7200, + }, + "exec-if": "which waybar-module-pacman-updates", + "exec": "waybar-module-pacman-updates", + "on-click": "foot -e update" + }, + "custom/power": { + "format":"⏻", + "on-click": "nwgbar", + "tooltip": false, + }, + "custom/network_traffic": { + "exec": "~/.config/waybar/scripts/network_traffic.sh", + "return-type": "json", + "format-ethernet": "{icon} {ifname} ⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", // optional +}, + "pulseaudio": { + "scroll-step": 3, // %, can be a float + "format": "{icon} {volume}% {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + //"format-source": "{volume}% ", + //"format-source-muted": "", + "format-source": "", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol", + "on-click-right": "pactl set-source-mute @DEFAULT_SOURCE@ toggle" + }, + // https://github.com/chubin/wttr.in + "custom/weather": { + "exec": "curl 'https://wttr.in/Essen?format=2'", + "interval": 900, + "on-click": "yad --html --uri='https://wttr.in/Essen' --center --fixed --width=1000 --height=680 --timeout=60 --timeout-indicator=right" + }, + } + diff --git a/waybar/bk/style.css b/waybar/bk/style.css new file mode 100644 index 0000000..51cd58e --- /dev/null +++ b/waybar/bk/style.css @@ -0,0 +1,186 @@ +/* ============================================================================= + * + * Waybar configuration + * + * Configuration reference: https://github.com/Alexays/Waybar/wiki/Configuration + * + * =========================================================================== */ + +/* ----------------------------------------------------------------------------- + * Keyframes + * -------------------------------------------------------------------------- */ + + +/* +Polar Night +nord0 #2e3440 +nord1 #3b4252 +nord2 #434c5e +nord3 #4c566a +Snow Storm +nord4 #d8dee9 +nord5 #e5e9f0 +nord6 #eceff4 +Frost +nord7 #8fbcbb +nord8 #88c0d0 +nord9 #81a1c1 +nord10 #5e81ac +Aurora +nord11 #bf616a +nord12 #d08770 +nord13 #ebcb8b +nord14 #a3be8c +nord15 #b48ead +*/ + +/* ----------------------------------------------------------------------------- + * Base styles + * -------------------------------------------------------------------------- */ + +/* Reset all styles */ + +* { + color: #eceff4; + border: 0; + border-radius: 0; + padding: 0 0; + font-family:Symbols Nerd Font Mono; + font-size: 15px; + margin-right: 5px; + margin-left: 5px; + padding-bottom:2px; + } + +window#waybar { + background:rgba (0, 0, 0, 0.5); + border-radius: 20px 20px 20px 20px; +} + +#workspaces button { + padding: 2px 0px; + border-bottom: 2px; + color: #eceff4; + border-color: #d8dee9; + border-style: solid; + margin-top:2px; +} + +#workspaces button.active { + border-color: #81a1c1; +} + +#clock, #battery, #cpu, #memory,#idle_inhibitor, #temperature,#custom-keyboard-layout, #backlight, #network, #pulseaudio, #tray, #window,#custom-launcher,#custom-power,#custom-updates ,#custom-network_traffic,#custom-weather{ + padding: 0 3px; + border-bottom: 2px; + border-style: solid; +} + +/* ----------------------------------------------------------------------------- +* Module styles +* -------------------------------------------------------------------------- */ + + +#clock { +color:#a3be8c; +} + +#backlight { + color: #ebcb8b; +} + +#battery { + color: #d8dee9; +} + +#battery.charging { + color: #81a1c1; +} + +@keyframes blink { + to { + color: #4c566a; + background-color: #eceff4; + } +} + +#battery.critical:not(.charging) { + background: #bf616a; + color: #eceff4; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} + +#cpu { + color:#a3be8c ; +} + +#memory { + color: #d3869b; +} + +#network.disabled { + color:#bf616a; +} + +#network{ + color:#a3be8c; +} + +#network.disconnected { + color: #bf616a; +} + +#pulseaudio { + color: #b48ead; +} + +#pulseaudio.muted { + color: #3b4252; +} + +#temperature { + color: #8fbcbb; +} + +#temperature.critical { + color: #bf616a; +} + +#idle_inhibitor { + color: #ebcb8b; +} + +#tray { +} + +#custom-launcher{ + font-size: 20px; + background-image: url('/home/USER/.config/waybar/launcher.png'); + background-position: center; + background-repeat: no-repeat; + background-size: contain; + border-style: hidden; +} + +#custom-power{ + border-style: hidden; + margin-top:2px; +} + +#window{ + border-style: hidden; + margin-top:1px; +} +#custom-keyboard-layout{ + color:#d08770; +} +#custom-network_traffic{ + color:#d08770; +} + + + diff --git a/waybar/config b/waybar/config new file mode 100644 index 0000000..6efe909 --- /dev/null +++ b/waybar/config @@ -0,0 +1,167 @@ +{ + "layer": "top", // Waybar at top layer + "position": "top", // Waybar position (top|bottom|left|right) + "height": 40, + "width":1915, + "margin": "0 0 0 0", + "spacing":10, + + // Choose the order of the modules + + "modules-left": ["hyprland/workspaces", "wlr/taskbar", "hyprland/window"], + "modules-center": ["custom/network_traffic"], + "modules-right": [ "temperature", "cpu", "memory", "battery", "battery#bat1","pulseaudio", "network", "clock", "tray"], + +// Modules configuration + +"hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate", + "all-outputs": true, + "sort-by-number": true, + "format-icons": { + "1": "1", + "2": "2", + "3": "3", + "4": "4", + "5": "5", + "6": "6", + "7": "7", + "8": "8", + "9": "9", + "10": "10", + "focused": "", + "default": "" + }, + "on-scroll-up": "hyprctl dispatch workspace e+1", + "on-scroll-down": "hyprctl dispatch workspace e-1", + }, + "hyprland/window": { + "format": "{}", +"icon":true, +"icon-size" : 20 + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "wlr/taskbar": { + "format": "{icon}", + "on-click": "activate", + "on-click-right": "fullscreen", + "on-click-middle": "close", + }, + "tray": { + "icon-size": 20, + "spacing": 5 + }, + "clock": { + "tooltip-format": "{:%A, %d.%B %Y }\n{calendar}", + "format": " {:%a %d %b  %I:%M %p}", //12 hour format + //"format": " {:%a %d %b  %H:%M}", //24 hour format + "format-alt": " {:%d/%m/%Y  %H:%M:%S}", + "timezones": [ "America/Denver" ], + //"max-length": 200 + "interval": 1 + }, + "cpu": { + "format": "{icon0}{icon1}{icon2}{icon3} {usage:>2}% ", + "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"], + "on-click": "kitty -e btop" + }, + "memory": { + "format": "🖴 {: >3}%", + "on-click": "kitty -e btop" + }, + "battery": { + "bat": "BAT0", + "interval": 60, + "states": { + "good": 80, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity: >3}%", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat1": { + "bat": "BAT1", + "interval": 60, + "states": { + "good": 80, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity: >3}%", + "format-icons": ["", "", "", "", ""] + }, + "network": { + //"interface": "wlp0s20f3", // (Optional) To force the use of this interface "format-wifi": " {essid}", + "format": "⚠Disabled", + "format-wifi": "", + "format-ethernet": "", + "format-linked": "{ifname} (No IP)", + "format-disconnected": "⚠Disabled", + "format-alt": "{ifname}: {ipaddr}/{cidr}", + "family": "ipv4", + "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}", + //"min-length": 2, + //"max-length": 2, + "on-click": "nm-connection-editor" + }, + "custom/updates": { + "format": "{} {icon}", + "return-type": "json", + "format-icons": { + "has-updates": "󱍷", + "updated": "󰂪", + "interval": 7200, + }, + "exec-if": "which waybar-module-pacman-updates", + "exec": "waybar-module-pacman-updates", + "on-click": "foot -e update" + }, + "custom/power": { + "format":"⏻", + "on-click": "nwgbar", + "tooltip": false, + }, + "custom/network_traffic": { + "exec": "~/.config/waybar/scripts/network_traffic.sh", + "return-type": "json", + "format-ethernet": "{icon} {ifname} ⇣{bandwidthDownBytes} ⇡{bandwidthUpBytes}", // optional +}, + "pulseaudio": { + "scroll-step": 3, // %, can be a float + "format": "{icon} {volume}% {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + //"format-source": "{volume}% ", + //"format-source-muted": "", + "format-source": "", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol", + "on-click-right": "pactl set-source-mute @DEFAULT_SOURCE@ toggle" + }, + // https://github.com/chubin/wttr.in + "custom/weather": { + "exec": "curl 'https://wttr.in/Essen?format=2'", + "interval": 900, + "on-click": "yad --html --uri='https://wttr.in/Essen' --center --fixed --width=1000 --height=680 --timeout=60 --timeout-indicator=right" + }, + } + diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..c5131fd --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,124 @@ +#waybar { + font-family: "SF Pro Display", Cantarell, Noto Sans, sans-serif; + font-size: 16px; +} + +#window { + padding: 0 10px; +} + +window#waybar { + border: none; + border-radius: 0; + box-shadow: none; + text-shadow: none; + transition-duration: 0s; + color: rgba(217, 216, 216, 1); + background: #1a1b26; +} + +#workspaces { + margin: 0 5px; +} + +#workspaces button { + padding: 0 8px; + color: #565f89; + border: 3px solid rgba(9, 85, 225, 0); + border-radius: 10px; + min-width: 33px; +} + +#workspaces button.visible { + color: #a9b1d6; +} + +#workspaces button.focused { + border-top: 3px solid #7aa2f7; + border-bottom: 3px solid #7aa2f7; +} + +#workspaces button.urgent { + background-color: #a96d1f; + color: white; +} + +#workspaces button:hover { + box-shadow: inherit; + border-color: #bb9af7; + color: #bb9af7; +} + +/* Repeat style here to ensure properties are overwritten as there's no !important and button:hover above resets the colour */ + +#workspaces button.focused { + color: #7aa2f7; +} +#workspaces button.focused:hover { + color: #bb9af7; +} + +#pulseaudio { + /* font-size: 26px; */ +} + +#custom-recorder { + font-size: 18px; + margin: 2px 7px 0px 7px; + color:#ee2e24; +} + +#tray, +#mode, +#battery, +#temperature, +#cpu, +#memory, +#network, +#pulseaudio, +#idle_inhibitor, +#sway-language, +#backlight, +#custom-storage, +#custom-cpu_speed, +#custom-powermenu, +#custom-spotify, +#custom-weather, +#custom-mail, +#custom-media { + margin: 0px 0px 0px 10px; + padding: 0 5px; + /* border-top: 3px solid rgba(217, 216, 216, 0.5); */ +} + +/* #clock { + margin: 0px 16px 0px 10px; + min-width: 140px; +} */ + +#battery.warning { + color: rgba(255, 210, 4, 1); +} + +#battery.critical { + color: rgba(238, 46, 36, 1); +} + +#battery.charging { + color: rgba(217, 216, 216, 1); +} + +#custom-storage.warning { + color: rgba(255, 210, 4, 1); +} + +#custom-storage.critical { + color: rgba(238, 46, 36, 1); +} + +@keyframes blink { + to { + background-color: #ffffff; + color: black; + } +} diff --git a/wofi/.current_wallpaper b/wofi/.current_wallpaper new file mode 120000 index 0000000..d6af5bf --- /dev/null +++ b/wofi/.current_wallpaper @@ -0,0 +1 @@ +/home/verita84/Pictures/wallpapers/Dynamic-Wallpapers/Dark/Fuji-Dark.png \ No newline at end of file diff --git a/wofi/LICENSE b/wofi/LICENSE new file mode 100644 index 0000000..006383b --- /dev/null +++ b/wofi/LICENSE @@ -0,0 +1,21 @@ +MIT License + +Copyright (c) 2021 Catppuccin + +Permission is hereby granted, free of charge, to any person obtaining a copy +of this software and associated documentation files (the "Software"), to deal +in the Software without restriction, including without limitation the rights +to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +copies of the Software, and to permit persons to whom the Software is +furnished to do so, subject to the following conditions: + +The above copyright notice and this permission notice shall be included in all +copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +SOFTWARE. diff --git a/wofi/README.md b/wofi/README.md new file mode 100644 index 0000000..f6786d8 --- /dev/null +++ b/wofi/README.md @@ -0,0 +1,87 @@ +

+ Logo
+ + Catppuccin for Wofi + +

+ +

+ + + +

+ +

+ +

+ +## Previews + +
+🌻 Latte + +
+
+🪴 Frappé + +
+
+🌺 Macchiato + +
+
+🌿 Mocha + +
+ +## Usage + +1. Clone this repository locally to your desired location. Typically something like `~/.config/` +2. Launch Wofi with your desired flavor (e.g. `latte`, `frappe`, `macchiato` or `mocha`). + +```bash +wofi --conf /config --style //style.css + +``` + +I'm personally using a bash script: + +```bash +#!/usr/bin/env bash + +CONFIG="$HOME/.config/hypr/wofi/config/config" +STYLE="$HOME/.config/hypr/wofi/src/mocha/style.css" + +if [[ ! $(pidof wofi) ]]; then + wofi --conf "${CONFIG}" --style "${STYLE}" +else + pkill wofi +fi +``` + +- Q: **_"Which flavor of CSS is supported."_**\ + A: [GTK CSS](https://docs.gtk.org/gtk3/). Note that hsl-colors are not supported. + +- Q: **_"Where can I find CSS targets for theme customization."_**\ + A: On the [Wofi page](https://hg.sr.ht/~scoopta/wofi) and on the [man page](https://man.archlinux.org/man/wofi.7.en). + +- Q: **_"My CSS imports are not working."_**\ + A: Please read the [Wofi configuration](https://man.archlinux.org/man/wofi.5.en#CONFIG_OPTIONS) options. Especially in regards to `style` and `stylesheet`. We avoid import statements for simplicity. + +## 💝 Thanks to + +- [quantumfate](https://github.com/quantumfate) + +  + +

+ +

+ +

+ Copyright © 2021-present Catppuccin Org +

+ +

+ +

diff --git a/wofi/assets/frappe.webp b/wofi/assets/frappe.webp new file mode 100644 index 0000000000000000000000000000000000000000..9de667840baf409112af311a033a8b0b44f70690 GIT binary patch literal 18394 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 literal 0 HcmV?d00001 diff --git a/wofi/assets/latte.webp b/wofi/assets/latte.webp new file mode 100644 index 0000000000000000000000000000000000000000..50990c6fab3febe9c6d456e9a2b3d6c65db7168f GIT binary patch literal 15100 zcmaL6V{j%w(=HrmV{B|^W81cEdt=+SwXtp6ww-KjJGt*~-}gE1SLd7`r|PPynfcM( zb9GP8bhWaSxcCz{2#AK5u%fymC(+rz`Ftx#4k+~vSOO>r2ncyjSLjZN_=uk;py+{S zj9ukU;I?lZFbClMh`xdf@JUikUdbDNct0V$2PP2i^PBt6e$u>~oPd7heeXT^?@6q# zz1Ry9jsTm1nLzxTK7jMf>kj2>{1%df!V%#dpPB!(|MM#?U51LJ`j0Hpr1C&F`}0PqV4BJlVT;059}^+fuv@fZ4%=g#-S2;=q)4MKp>0I|2o zZ+AfWJ3V7Q=$phH@VIY7Kue(B{~XA5vGC!30Nvgv11tit`-1pG0kFTOJ_#>5UI^a> zP66eBB>>Gx(dFKTf4_GC5Dg&pE%7<`VSg*I?SK271&I9a`|NwSf7(0r|L`vQa{sV@ zMY``h>YE0J0AB%PPjGMH_j?xtoBm_K7{CH>@0(%Ez0P1G?{oLWzhckZzYhppaNp## zmEn9!R&&#FK0WxsME=K1sDTBIP%M_S1XvXtwD8 zK#WXdSxvPZet7yT=BLjl1?&F_9(jLGPn)F^1svO-|3CPM{

d>~<}uVH20+xa$Lu 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%0AAeDq%~! zP(Rj_kNp-X;QE2G6swWhT z#7wU_hKxGNQ!9@DtAGX?QBPA68|qHx^Go031Nb)d#=?go4=PoK=}PZ0M)OHCBG$sWNeSg){oERWm zDbkfg@=$-r#KP5$-5M?hnTmRZ0`3HIBV-aeY)bA(h>K%hWI~88-<*07D3u*SSeIKL z;5|rohm=97E}2;4I6qV^K+zE!PJ{Ik+IYcVh%oq18<>y2=w&LB&%57tl-;+} z#Oxb_w>HIWlql@E{!At)#e(9%=g*1qY;z3F5wdnQZ9z^By0T=oLVNUYNgFE|10i>| zH=$VQAWpM!Dg$QIp$*n+6{hPlnLtRqay<`QCZp6Y5T&}lyvVSdgDd=&2suwozy3s2 zPFGQ8^poOw{H!}>0yfNhx}y-vjC!4#XqN9k`ANT=(3-V8p+MrmhmZp3{{1T(cedSwBKg?`IdU*>@9hyl1y7b1gjM{? zoqkK?)?oMM08y5#3aOi#$E=kCD4;|-sB#B(eR}Qi6jrX{*b@LqRFmIQi}%7JXZr;E z+M0e<<%z}m2#ekJiF8%wp`J5`ep#18yS@R%e{N4z{K5GLtMEfSU(Yo9h zJ&Ue@p~|Vn*|z9j}4K$0Wd;5 zu3%(l4mD0p6?oRSFAl8AcQtF^#L##w6kEXu_a6xw4H;mbsRJE0(dSHEiZt9&N`290 z|MBVSoGl%@toS(YSs60!yPPKOv*W?MU8j28bi?S@00gEg39K>l2L>#M z4WcM~%Xc0VE&4N)ROfXtSqVM`Y9r*nch1n@D{kuJumP>Ceq5lUQr_Q`Dl6|GxdMK`jHU?Pt<^B6nckrk$d#yRf^s+PE?d2~V zk}Tw3m_5i!M;nl>6`*D15h{}8%sjYNyfkumWRl`CXcW3pz8vR@11AVn5=(F!^(iLYUs`0ru=Xx|} zc)S$Qnu2w_L`YK-%$a1J2&nG z5vBmvtt=p@z})xyR%6+dMI=Dnx#Y3t1q;MFyo0yojnq1GMp5fhgU-|V!Z4CjxST$~ zyb8x*9eCqMe99#C7op@uMRX2YNCX8?p7`n6+Jd;*w&N0YC2KP5t!kmHh2l#f$$P&j z{Xk5pcV;^MbY?aNx{GR<2Y}HDTjCb=eOCOV(nIdkwQ|_Yuy-ifW+=k$@j?KLU8V+rk9(hX&IwKhD`Q zEK6HsX)hTSa5+I=+f6A!BRV_`_q-?&w%03>Nt)y_Y5N@Nsd&l#L+B0 z4LwrJQ(3)o9T5QR962@m8mv4BJ)$tV#_xI^pJ3*p_0NuQ7yv8xKjadiMZRR;o+-1q_w?stTl!$?Yx!nyst1!ua>$#5Fu z98fC7n+}s+=TLdU6Pf;w0*QAVQWI!76iHa4U7r8;0l)k6A+$_8H>Z$og`!ZydPlN* z%B&$4Ax=2f&NN3}490pfm7}%l4Zf0`(vvVm;|fmJtn$(nrM4y!1pl>A|wZi^oUf&sT|E0A@SyhxjS1B z=h;Tim>dTtj+K9RZkzujDy+tXlvb**m2*EEdUt3EA8S(VM z1BSs_=cYecTIoVt)99^FiL^r@(^FFSb@k`Z^3Fzu{^MX|1=P=kZ5e@yUT+dAr99L) zN}fbWmI3z*qJtQtZtKoTMYU#kUzlhg+>ooQRQ#?0W*bLV}Na(abu-8 z?6ZdSKKj9wvqIEWqf?Mc9`MS)5DNr7L+%R;FpI?+<*a}SbJ*&2Sda*#3}3h=%s7uk zUVSGh65rpEXD<>pnLt#ju%x&yIEyBy7J3lNH4OroR}T#+uULb<{?MBybt^WiV&r12 zvx-H|SEr7Oi4P(8z(3d#c@oaGSal@U^7zVwh$6|etc!eRD4`K9_FRAnV-Zj|*)v8A z>&~zg&GKoI+lp<|(`YvmlY8EVN=SV_!z0PLUZS9;>py5Mtc1k~S$40={*lt80VmBO z3#Q17YBfAsjZd>&%p8q{HZUT$Il@D`WdCiE{!?neIa&yzX7IPX{@@Pr-MPauqt32z zaUWHNPCeSyqxUh6Un&rI-2XOtyDS6WVCy|tK#6FeOCZZ|mat5bOte_=WkO&~r#F{& zhR>K7{p81n6jt34Rs3}ql?e5@&St(|poZLiFOIj>$_Z-=cRbB)hA(v@oK@KgdH?n7 z4#ojRXJw=;6nV=YWQ33X*Tn4jIb1n^qQC!5zbleS-uLWQkz^-KUn%Vvw6R ztJm3pb!}jR;1TG%jqxWduqup2H{4sQmTP1VYJMYBa&t?G5bLcz|3{f1<&&~EW&CE^ zx>w?SKJl(X0=-nTeIx8P8raRs`pwdCCIDwPi2766_BOAhoW+(BpBELzuMW~2B;2-W zNG_4S-nlxE{I?z>Zlx;N@UXCU9=3q6WS)l;WZl4pKYS4-0g?}|H<)qgO8Bu_%k@)} z9#W}Wcf(pB9!?mRpe<>FoYc{NIJM_m`M*ZRS5eoW5U&Knz&ZC?!A63hY_cU9JaBb> zz*n+xo86KyDYK4zjz-$JvD`F0_7 zToF~3#k1nyrW~GaS_i8cO01P8@6=X>N7~?Z#fzLX*$ePm3~OCH33H>dUK-lLi^y+= z`NW*@7{z?=Ht0kKzV%dCNht(&HGSO8ymZz1eAr1GoB}V%&9g&OW zEqI!YIj=XX8Ck|Nmq;s}O)3v}KksFKH(i40uQ({!#8CRg1{BJMK?w31qaB=?7d!UC z3GjbND@d6`E;4^tT5^|h_@ z^D=Xw8roS|)Zaal4^!8Xq=wH!ccPYq4rCW{wAJSiVgf`vRy5KeYTR}85-S2YejwYP zbFZr+WoOEGm8eC|vPfE?TqiVBK;DnmM!^TWdb|>j1r}pMXIocvO7035-!^#T6_Zv7 z8Zj~0ab!qsL^>!)*hGz7@sIry6#7a};!LGnLks+Vus`}H6r)`|1_6OM6@JE|O*Swy z>(O$#;(C;NgbZ@FMx0-c+^E%w5mMTEX$m?12yf^8W$CPE{}f literal 0 HcmV?d00001 diff --git a/wofi/assets/macchiato.webp b/wofi/assets/macchiato.webp new file mode 100644 index 0000000000000000000000000000000000000000..279c04d6b3a31d4118897087b92a532f89e3533a GIT binary patch literal 18710 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 literal 0 HcmV?d00001 diff --git a/wofi/colors.css b/wofi/colors.css new file mode 100644 index 0000000..0e914e2 --- /dev/null +++ b/wofi/colors.css @@ -0,0 +1,314 @@ +:root { + --ctp-latte-rosewater: #dc8a78; + --ctp-latte-rosewater-rgb: rgb(220, 138, 120); + --ctp-latte-rosewater-hsl: hsl(11, 59%, 67%); + --ctp-frappe-rosewater: #f2d5cf; + --ctp-frappe-rosewater-rgb: rgb(242, 213, 207); + --ctp-frappe-rosewater-hsl: hsl(10, 57%, 88%); + --ctp-macchiato-rosewater: #f4dbd6; + --ctp-macchiato-rosewater-rgb: rgb(244, 219, 214); + --ctp-macchiato-rosewater-hsl: hsl(10, 58%, 90%); + --ctp-mocha-rosewater: #f5e0dc; + --ctp-mocha-rosewater-rgb: rgb(245, 224, 220); + --ctp-mocha-rosewater-hsl: hsl(10, 56%, 91%); + --ctp-latte-flamingo: #dd7878; + --ctp-latte-flamingo-rgb: rgb(221, 120, 120); + --ctp-latte-flamingo-hsl: hsl(0, 60%, 67%); + --ctp-frappe-flamingo: #eebebe; + --ctp-frappe-flamingo-rgb: rgb(238, 190, 190); + --ctp-frappe-flamingo-hsl: hsl(0, 59%, 84%); + --ctp-macchiato-flamingo: #f0c6c6; + --ctp-macchiato-flamingo-rgb: rgb(240, 198, 198); + --ctp-macchiato-flamingo-hsl: hsl(0, 58%, 86%); + --ctp-mocha-flamingo: #f2cdcd; + --ctp-mocha-flamingo-rgb: rgb(242, 205, 205); + --ctp-mocha-flamingo-hsl: hsl(0, 59%, 88%); + --ctp-latte-pink: #ea76cb; + --ctp-latte-pink-rgb: rgb(234, 118, 203); + --ctp-latte-pink-hsl: hsl(316, 73%, 69%); + --ctp-frappe-pink: #f4b8e4; + --ctp-frappe-pink-rgb: rgb(244, 184, 228); + --ctp-frappe-pink-hsl: hsl(316, 73%, 84%); + --ctp-macchiato-pink: #f5bde6; + --ctp-macchiato-pink-rgb: rgb(245, 189, 230); + --ctp-macchiato-pink-hsl: hsl(316, 74%, 85%); + --ctp-mocha-pink: #f5c2e7; + --ctp-mocha-pink-rgb: rgb(245, 194, 231); + --ctp-mocha-pink-hsl: hsl(316, 72%, 86%); + --ctp-latte-mauve: #8839ef; + --ctp-latte-mauve-rgb: rgb(136, 57, 239); + --ctp-latte-mauve-hsl: hsl(266, 85%, 58%); + --ctp-frappe-mauve: #ca9ee6; + --ctp-frappe-mauve-rgb: rgb(202, 158, 230); + --ctp-frappe-mauve-hsl: hsl(277, 59%, 76%); + --ctp-macchiato-mauve: #c6a0f6; + --ctp-macchiato-mauve-rgb: rgb(198, 160, 246); + --ctp-macchiato-mauve-hsl: hsl(267, 83%, 80%); + --ctp-mocha-mauve: #cba6f7; + --ctp-mocha-mauve-rgb: rgb(203, 166, 247); + --ctp-mocha-mauve-hsl: hsl(267, 84%, 81%); + --ctp-latte-red: #d20f39; + --ctp-latte-red-rgb: rgb(210, 15, 57); + --ctp-latte-red-hsl: hsl(347, 87%, 44%); + --ctp-frappe-red: #e78284; + --ctp-frappe-red-rgb: rgb(231, 130, 132); + --ctp-frappe-red-hsl: hsl(359, 68%, 71%); + --ctp-macchiato-red: #ed8796; + --ctp-macchiato-red-rgb: rgb(237, 135, 150); + --ctp-macchiato-red-hsl: hsl(351, 74%, 73%); + --ctp-mocha-red: #f38ba8; + --ctp-mocha-red-rgb: rgb(243, 139, 168); + --ctp-mocha-red-hsl: hsl(343, 81%, 75%); + --ctp-latte-maroon: #e64553; + --ctp-latte-maroon-rgb: rgb(230, 69, 83); + --ctp-latte-maroon-hsl: hsl(355, 76%, 59%); + --ctp-frappe-maroon: #ea999c; + --ctp-frappe-maroon-rgb: rgb(234, 153, 156); + --ctp-frappe-maroon-hsl: hsl(358, 66%, 76%); + --ctp-macchiato-maroon: #ee99a0; + --ctp-macchiato-maroon-rgb: rgb(238, 153, 160); + --ctp-macchiato-maroon-hsl: hsl(355, 71%, 77%); + --ctp-mocha-maroon: #eba0ac; + --ctp-mocha-maroon-rgb: rgb(235, 160, 172); + --ctp-mocha-maroon-hsl: hsl(350, 65%, 77%); + --ctp-latte-peach: #fe640b; + --ctp-latte-peach-rgb: rgb(254, 100, 11); + --ctp-latte-peach-hsl: hsl(22, 99%, 52%); + --ctp-frappe-peach: #ef9f76; + --ctp-frappe-peach-rgb: rgb(239, 159, 118); + --ctp-frappe-peach-hsl: hsl(20, 79%, 70%); + --ctp-macchiato-peach: #f5a97f; + --ctp-macchiato-peach-rgb: rgb(245, 169, 127); + --ctp-macchiato-peach-hsl: hsl(21, 86%, 73%); + --ctp-mocha-peach: #fab387; + --ctp-mocha-peach-rgb: rgb(250, 179, 135); + --ctp-mocha-peach-hsl: hsl(23, 92%, 75%); + --ctp-latte-yellow: #df8e1d; + --ctp-latte-yellow-rgb: rgb(223, 142, 29); + --ctp-latte-yellow-hsl: hsl(35, 77%, 49%); + --ctp-frappe-yellow: #e5c890; + --ctp-frappe-yellow-rgb: rgb(229, 200, 144); + --ctp-frappe-yellow-hsl: hsl(40, 62%, 73%); + --ctp-macchiato-yellow: #eed49f; + --ctp-macchiato-yellow-rgb: rgb(238, 212, 159); + --ctp-macchiato-yellow-hsl: hsl(40, 70%, 78%); + --ctp-mocha-yellow: #f9e2af; + --ctp-mocha-yellow-rgb: rgb(249, 226, 175); + --ctp-mocha-yellow-hsl: hsl(41, 86%, 83%); + --ctp-latte-green: #40a02b; + --ctp-latte-green-rgb: rgb(64, 160, 43); + --ctp-latte-green-hsl: hsl(109, 58%, 40%); + --ctp-frappe-green: #a6d189; + --ctp-frappe-green-rgb: rgb(166, 209, 137); + --ctp-frappe-green-hsl: hsl(96, 44%, 68%); + --ctp-macchiato-green: #a6da95; + --ctp-macchiato-green-rgb: rgb(166, 218, 149); + --ctp-macchiato-green-hsl: hsl(105, 48%, 72%); + --ctp-mocha-green: #a6e3a1; + --ctp-mocha-green-rgb: rgb(166, 227, 161); + --ctp-mocha-green-hsl: hsl(115, 54%, 76%); + --ctp-latte-teal: #179299; + --ctp-latte-teal-rgb: rgb(23, 146, 153); + --ctp-latte-teal-hsl: hsl(183, 74%, 35%); + --ctp-frappe-teal: #81c8be; + --ctp-frappe-teal-rgb: rgb(129, 200, 190); + --ctp-frappe-teal-hsl: hsl(172, 39%, 65%); + --ctp-macchiato-teal: #8bd5ca; + --ctp-macchiato-teal-rgb: rgb(139, 213, 202); + --ctp-macchiato-teal-hsl: hsl(171, 47%, 69%); + --ctp-mocha-teal: #94e2d5; + --ctp-mocha-teal-rgb: rgb(148, 226, 213); + --ctp-mocha-teal-hsl: hsl(170, 57%, 73%); + --ctp-latte-sky: #04a5e5; + --ctp-latte-sky-rgb: rgb(4, 165, 229); + --ctp-latte-sky-hsl: hsl(197, 97%, 46%); + --ctp-frappe-sky: #99d1db; + --ctp-frappe-sky-rgb: rgb(153, 209, 219); + --ctp-frappe-sky-hsl: hsl(189, 48%, 73%); + --ctp-macchiato-sky: #91d7e3; + --ctp-macchiato-sky-rgb: rgb(145, 215, 227); + --ctp-macchiato-sky-hsl: hsl(189, 59%, 73%); + --ctp-mocha-sky: #89dceb; + --ctp-mocha-sky-rgb: rgb(137, 220, 235); + --ctp-mocha-sky-hsl: hsl(189, 71%, 73%); + --ctp-latte-sapphire: #209fb5; + --ctp-latte-sapphire-rgb: rgb(32, 159, 181); + --ctp-latte-sapphire-hsl: hsl(189, 70%, 42%); + --ctp-frappe-sapphire: #85c1dc; + --ctp-frappe-sapphire-rgb: rgb(133, 193, 220); + --ctp-frappe-sapphire-hsl: hsl(199, 55%, 69%); + --ctp-macchiato-sapphire: #7dc4e4; + --ctp-macchiato-sapphire-rgb: rgb(125, 196, 228); + --ctp-macchiato-sapphire-hsl: hsl(199, 66%, 69%); + --ctp-mocha-sapphire: #74c7ec; + --ctp-mocha-sapphire-rgb: rgb(116, 199, 236); + --ctp-mocha-sapphire-hsl: hsl(199, 76%, 69%); + --ctp-latte-blue: #1e66f5; + --ctp-latte-blue-rgb: rgb(30, 102, 245); + --ctp-latte-blue-hsl: hsl(220, 91%, 54%); + --ctp-frappe-blue: #8caaee; + --ctp-frappe-blue-rgb: rgb(140, 170, 238); + --ctp-frappe-blue-hsl: hsl(222, 74%, 74%); + --ctp-macchiato-blue: #8aadf4; + --ctp-macchiato-blue-rgb: rgb(138, 173, 244); + --ctp-macchiato-blue-hsl: hsl(220, 83%, 75%); + --ctp-mocha-blue: #89b4fa; + --ctp-mocha-blue-rgb: rgb(137, 180, 250); + --ctp-mocha-blue-hsl: hsl(217, 92%, 76%); + --ctp-latte-lavender: #7287fd; + --ctp-latte-lavender-rgb: rgb(114, 135, 253); + --ctp-latte-lavender-hsl: hsl(231, 97%, 72%); + --ctp-frappe-lavender: #babbf1; + --ctp-frappe-lavender-rgb: rgb(186, 187, 241); + --ctp-frappe-lavender-hsl: hsl(239, 66%, 84%); + --ctp-macchiato-lavender: #b7bdf8; + --ctp-macchiato-lavender-rgb: rgb(183, 189, 248); + --ctp-macchiato-lavender-hsl: hsl(234, 82%, 85%); + --ctp-mocha-lavender: #b4befe; + --ctp-mocha-lavender-rgb: rgb(180, 190, 254); + --ctp-mocha-lavender-hsl: hsl(232, 97%, 85%); + --ctp-latte-text: #4c4f69; + --ctp-latte-text-rgb: rgb(76, 79, 105); + --ctp-latte-text-hsl: hsl(234, 16%, 35%); + --ctp-frappe-text: #c6d0f5; + --ctp-frappe-text-rgb: rgb(198, 208, 245); + --ctp-frappe-text-hsl: hsl(227, 70%, 87%); + --ctp-macchiato-text: #cad3f5; + --ctp-macchiato-text-rgb: rgb(202, 211, 245); + --ctp-macchiato-text-hsl: hsl(227, 68%, 88%); + --ctp-mocha-text: #cdd6f4; + --ctp-mocha-text-rgb: rgb(205, 214, 244); + --ctp-mocha-text-hsl: hsl(226, 64%, 88%); + --ctp-latte-subtext1: #5c5f77; + --ctp-latte-subtext1-rgb: rgb(92, 95, 119); + --ctp-latte-subtext1-hsl: hsl(233, 13%, 41%); + --ctp-frappe-subtext1: #b5bfe2; + --ctp-frappe-subtext1-rgb: rgb(181, 191, 226); + --ctp-frappe-subtext1-hsl: hsl(227, 44%, 80%); + --ctp-macchiato-subtext1: #b8c0e0; + --ctp-macchiato-subtext1-rgb: rgb(184, 192, 224); + --ctp-macchiato-subtext1-hsl: hsl(228, 39%, 80%); + --ctp-mocha-subtext1: #bac2de; + --ctp-mocha-subtext1-rgb: rgb(186, 194, 222); + --ctp-mocha-subtext1-hsl: hsl(227, 35%, 80%); + --ctp-latte-subtext0: #6c6f85; + --ctp-latte-subtext0-rgb: rgb(108, 111, 133); + --ctp-latte-subtext0-hsl: hsl(233, 10%, 47%); + --ctp-frappe-subtext0: #a5adce; + --ctp-frappe-subtext0-rgb: rgb(165, 173, 206); + --ctp-frappe-subtext0-hsl: hsl(228, 29%, 73%); + --ctp-macchiato-subtext0: #a5adcb; + --ctp-macchiato-subtext0-rgb: rgb(165, 173, 203); + --ctp-macchiato-subtext0-hsl: hsl(227, 27%, 72%); + --ctp-mocha-subtext0: #a6adc8; + --ctp-mocha-subtext0-rgb: rgb(166, 173, 200); + --ctp-mocha-subtext0-hsl: hsl(228, 24%, 72%); + --ctp-latte-overlay2: #7c7f93; + --ctp-latte-overlay2-rgb: rgb(124, 127, 147); + --ctp-latte-overlay2-hsl: hsl(232, 10%, 53%); + --ctp-frappe-overlay2: #949cbb; + --ctp-frappe-overlay2-rgb: rgb(148, 156, 187); + --ctp-frappe-overlay2-hsl: hsl(228, 22%, 66%); + --ctp-macchiato-overlay2: #939ab7; + --ctp-macchiato-overlay2-rgb: rgb(147, 154, 183); + --ctp-macchiato-overlay2-hsl: hsl(228, 20%, 65%); + --ctp-mocha-overlay2: #9399b2; + --ctp-mocha-overlay2-rgb: rgb(147, 153, 178); + --ctp-mocha-overlay2-hsl: hsl(228, 17%, 64%); + --ctp-latte-overlay1: #8c8fa1; + --ctp-latte-overlay1-rgb: rgb(140, 143, 161); + --ctp-latte-overlay1-hsl: hsl(231, 10%, 59%); + --ctp-frappe-overlay1: #838ba7; + --ctp-frappe-overlay1-rgb: rgb(131, 139, 167); + --ctp-frappe-overlay1-hsl: hsl(227, 17%, 58%); + --ctp-macchiato-overlay1: #8087a2; + --ctp-macchiato-overlay1-rgb: rgb(128, 135, 162); + --ctp-macchiato-overlay1-hsl: hsl(228, 15%, 57%); + --ctp-mocha-overlay1: #7f849c; + --ctp-mocha-overlay1-rgb: rgb(127, 132, 156); + --ctp-mocha-overlay1-hsl: hsl(230, 13%, 55%); + --ctp-latte-overlay0: #9ca0b0; + --ctp-latte-overlay0-rgb: rgb(156, 160, 176); + --ctp-latte-overlay0-hsl: hsl(228, 11%, 65%); + --ctp-frappe-overlay0: #737994; + --ctp-frappe-overlay0-rgb: rgb(115, 121, 148); + --ctp-frappe-overlay0-hsl: hsl(229, 13%, 52%); + --ctp-macchiato-overlay0: #6e738d; + --ctp-macchiato-overlay0-rgb: rgb(110, 115, 141); + --ctp-macchiato-overlay0-hsl: hsl(230, 12%, 49%); + --ctp-mocha-overlay0: #6c7086; + --ctp-mocha-overlay0-rgb: rgb(108, 112, 134); + --ctp-mocha-overlay0-hsl: hsl(231, 11%, 47%); + --ctp-latte-surface2: #acb0be; + --ctp-latte-surface2-rgb: rgb(172, 176, 190); + --ctp-latte-surface2-hsl: hsl(227, 12%, 71%); + --ctp-frappe-surface2: #626880; + --ctp-frappe-surface2-rgb: rgb(98, 104, 128); + --ctp-frappe-surface2-hsl: hsl(228, 13%, 44%); + --ctp-macchiato-surface2: #5b6078; + --ctp-macchiato-surface2-rgb: rgb(91, 96, 120); + --ctp-macchiato-surface2-hsl: hsl(230, 14%, 41%); + --ctp-mocha-surface2: #585b70; + --ctp-mocha-surface2-rgb: rgb(88, 91, 112); + --ctp-mocha-surface2-hsl: hsl(233, 12%, 39%); + --ctp-latte-surface1: #bcc0cc; + --ctp-latte-surface1-rgb: rgb(188, 192, 204); + --ctp-latte-surface1-hsl: hsl(225, 14%, 77%); + --ctp-frappe-surface1: #51576d; + --ctp-frappe-surface1-rgb: rgb(81, 87, 109); + --ctp-frappe-surface1-hsl: hsl(227, 15%, 37%); + --ctp-macchiato-surface1: #494d64; + --ctp-macchiato-surface1-rgb: rgb(73, 77, 100); + --ctp-macchiato-surface1-hsl: hsl(231, 16%, 34%); + --ctp-mocha-surface1: #45475a; + --ctp-mocha-surface1-rgb: rgb(69, 71, 90); + --ctp-mocha-surface1-hsl: hsl(234, 13%, 31%); + --ctp-latte-surface0: #ccd0da; + --ctp-latte-surface0-rgb: rgb(204, 208, 218); + --ctp-latte-surface0-hsl: hsl(223, 16%, 83%); + --ctp-frappe-surface0: #414559; + --ctp-frappe-surface0-rgb: rgb(65, 69, 89); + --ctp-frappe-surface0-hsl: hsl(230, 16%, 30%); + --ctp-macchiato-surface0: #363a4f; + --ctp-macchiato-surface0-rgb: rgb(54, 58, 79); + --ctp-macchiato-surface0-hsl: hsl(230, 19%, 26%); + --ctp-mocha-surface0: #313244; + --ctp-mocha-surface0-rgb: rgb(49, 50, 68); + --ctp-mocha-surface0-hsl: hsl(237, 16%, 23%); + --ctp-latte-base: #eff1f5; + --ctp-latte-base-rgb: rgb(239, 241, 245); + --ctp-latte-base-hsl: hsl(220, 23%, 95%); + --ctp-frappe-base: #303446; + --ctp-frappe-base-rgb: rgb(48, 52, 70); + --ctp-frappe-base-hsl: hsl(229, 19%, 23%); + --ctp-macchiato-base: #24273a; + --ctp-macchiato-base-rgb: rgb(36, 39, 58); + --ctp-macchiato-base-hsl: hsl(232, 23%, 18%); + --ctp-mocha-base: #1e1e2e; + --ctp-mocha-base-rgb: rgb(30, 30, 46); + --ctp-mocha-base-hsl: hsl(240, 21%, 15%); + --ctp-latte-mantle: #e6e9ef; + --ctp-latte-mantle-rgb: rgb(230, 233, 239); + --ctp-latte-mantle-hsl: hsl(220, 22%, 92%); + --ctp-frappe-mantle: #292c3c; + --ctp-frappe-mantle-rgb: rgb(41, 44, 60); + --ctp-frappe-mantle-hsl: hsl(231, 19%, 20%); + --ctp-macchiato-mantle: #1e2030; + --ctp-macchiato-mantle-rgb: rgb(30, 32, 48); + --ctp-macchiato-mantle-hsl: hsl(233, 23%, 15%); + --ctp-mocha-mantle: #181825; + --ctp-mocha-mantle-rgb: rgb(24, 24, 37); + --ctp-mocha-mantle-hsl: hsl(240, 21%, 12%); + --ctp-latte-crust: #dce0e8; + --ctp-latte-crust-rgb: rgb(220, 224, 232); + --ctp-latte-crust-hsl: hsl(220, 21%, 89%); + --ctp-frappe-crust: #232634; + --ctp-frappe-crust-rgb: rgb(35, 38, 52); + --ctp-frappe-crust-hsl: hsl(229, 20%, 17%); + --ctp-macchiato-crust: #181926; + --ctp-macchiato-crust-rgb: rgb(24, 25, 38); + --ctp-macchiato-crust-hsl: hsl(236, 23%, 12%); + --ctp-mocha-crust: #11111b; + --ctp-mocha-crust-rgb: rgb(17, 17, 27); + --ctp-mocha-crust-hsl: hsl(240, 23%, 9%); +} diff --git a/wofi/config/config b/wofi/config/config new file mode 100644 index 0000000..eb34489 --- /dev/null +++ b/wofi/config/config @@ -0,0 +1,11 @@ +show=drun +width=750 +height=400 +always_parse_args=true +show_all=false +term=kitty +hide_scroll=true +print_command=true +insensitive=true +prompt= +columns=2 diff --git a/wofi/src/frappe/style.css b/wofi/src/frappe/style.css new file mode 100644 index 0000000..85742ae --- /dev/null +++ b/wofi/src/frappe/style.css @@ -0,0 +1,164 @@ +@define-color rosewater #f2d5cf; +@define-color rosewater-rgb rgb(242, 213, 207); +@define-color flamingo #eebebe; +@define-color flamingo-rgb rgb(238, 190, 190); +@define-color pink #f4b8e4; +@define-color pink-rgb rgb(244, 184, 228); +@define-color mauve #ca9ee6; +@define-color mauve-rgb rgb(202, 158, 230); +@define-color red #e78284; +@define-color red-rgb rgb(231, 130, 132); +@define-color maroon #ea999c; +@define-color maroon-rgb rgb(234, 153, 156); +@define-color peach #ef9f76; +@define-color peach-rgb rgb(239, 159, 118); +@define-color yellow #e5c890; +@define-color yellow-rgb rgb(229, 200, 144); +@define-color green #a6d189; +@define-color green-rgb rgb(166, 209, 137); +@define-color teal #81c8be; +@define-color teal-rgb rgb(129, 200, 190); +@define-color sky #99d1db; +@define-color sky-rgb rgb(153, 209, 219); +@define-color sapphire #85c1dc; +@define-color sapphire-rgb rgb(133, 193, 220); +@define-color blue #8caaee; +@define-color blue-rgb rgb(140, 170, 238); +@define-color lavender #babbf1; +@define-color lavender-rgb rgb(186, 187, 241); +@define-color text #c6d0f5; +@define-color text-rgb rgb(198, 208, 245); +@define-color subtext1 #b5bfe2; +@define-color subtext1-rgb rgb(181, 191, 226); +@define-color subtext0 #a5adce; +@define-color subtext0-rgb rgb(165, 173, 206); +@define-color overlay2 #949cbb; +@define-color overlay2-rgb rgb(148, 156, 187); +@define-color overlay1 #838ba7; +@define-color overlay1-rgb rgb(131, 139, 167); +@define-color overlay0 #737994; +@define-color overlay0-rgb rgb(115, 121, 148); +@define-color surface2 #626880; +@define-color surface2-rgb rgb(98, 104, 128); +@define-color surface1 #51576d; +@define-color surface1-rgb rgb(81, 87, 109); +@define-color surface0 #414559; +@define-color surface0-rgb rgb(65, 69, 89); +@define-color base #303446; +@define-color base-rgb rgb(48, 52, 70); +@define-color mantle #292c3c; +@define-color mantle-rgb rgb(41, 44, 60); +@define-color crust #232634; +@define-color crust-rgb rgb(35, 38, 52); + +* { + font-family: 'Inconsolata Nerd Font', monospace; + font-size: 14px; +} + +/* Window */ +window { + margin: 0px; + padding: 10px; + border: 0.16em solid @lavender; + border-radius: 0.1em; + background-color: @base; + animation: slideIn 0.5s ease-in-out both; +} + +/* Slide In */ +@keyframes slideIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Inner Box */ +#inner-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +/* Fade In */ +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Outer Box */ +#outer-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Scroll */ +#scroll { + margin: 0px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Input */ +#input { + margin: 5px 20px; + padding: 10px; + border: none; + border-radius: 0.1em; + color: @text; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +#input image { + border: none; + color: @red; +} + +#input * { + outline: 4px solid @red!important; +} + +/* Text */ +#text { + margin: 5px; + border: none; + color: @text; + animation: fadeIn 0.5s ease-in-out both; +} + +#entry { + background-color: @base; +} + +#entry arrow { + border: none; + color: @lavender; +} + +/* Selected Entry */ +#entry:selected { + border: 0.11em solid @lavender; +} + +#entry:selected #text { + color: @mauve; +} + +#entry:drop(active) { + background-color: @lavender!important; +} diff --git a/wofi/src/latte/style.css b/wofi/src/latte/style.css new file mode 100644 index 0000000..dc37414 --- /dev/null +++ b/wofi/src/latte/style.css @@ -0,0 +1,164 @@ +@define-color rosewater #dc8a78; +@define-color rosewater-rgb rgb(220, 138, 120); +@define-color flamingo #dd7878; +@define-color flamingo-rgb rgb(221, 120, 120); +@define-color pink #ea76cb; +@define-color pink-rgb rgb(234, 118, 203); +@define-color mauve #8839ef; +@define-color mauve-rgb rgb(136, 57, 239); +@define-color red #d20f39; +@define-color red-rgb rgb(210, 15, 57); +@define-color maroon #e64553; +@define-color maroon-rgb rgb(230, 69, 83); +@define-color peach #fe640b; +@define-color peach-rgb rgb(254, 100, 11); +@define-color yellow #df8e1d; +@define-color yellow-rgb rgb(223, 142, 29); +@define-color green #40a02b; +@define-color green-rgb rgb(64, 160, 43); +@define-color teal #179299; +@define-color teal-rgb rgb(23, 146, 153); +@define-color sky #04a5e5; +@define-color sky-rgb rgb(4, 165, 229); +@define-color sapphire #209fb5; +@define-color sapphire-rgb rgb(32, 159, 181); +@define-color blue #1e66f5; +@define-color blue-rgb rgb(30, 102, 245); +@define-color lavender #7287fd; +@define-color lavender-rgb rgb(114, 135, 253); +@define-color text #4c4f69; +@define-color text-rgb rgb(76, 79, 105); +@define-color subtext1 #5c5f77; +@define-color subtext1-rgb rgb(92, 95, 119); +@define-color subtext0 #6c6f85; +@define-color subtext0-rgb rgb(108, 111, 133); +@define-color overlay2 #7c7f93; +@define-color overlay2-rgb rgb(124, 127, 147); +@define-color overlay1 #8c8fa1; +@define-color overlay1-rgb rgb(140, 143, 161); +@define-color overlay0 #9ca0b0; +@define-color overlay0-rgb rgb(156, 160, 176); +@define-color surface2 #acb0be; +@define-color surface2-rgb rgb(172, 176, 190); +@define-color surface1 #bcc0cc; +@define-color surface1-rgb rgb(188, 192, 204); +@define-color surface0 #ccd0da; +@define-color surface0-rgb rgb(204, 208, 218); +@define-color base #eff1f5; +@define-color base-rgb rgb(239, 241, 245); +@define-color mantle #e6e9ef; +@define-color mantle-rgb rgb(230, 233, 239); +@define-color crust #dce0e8; +@define-color crust-rgb rgb(220, 224, 232); + +* { + font-family: 'Inconsolata Nerd Font', monospace; + font-size: 14px; +} + +/* Window */ +window { + margin: 0px; + padding: 10px; + border: 0.16em solid @lavender; + border-radius: 0.1em; + background-color: @base; + animation: slideIn 0.5s ease-in-out both; +} + +/* Slide In */ +@keyframes slideIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Inner Box */ +#inner-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +/* Fade In */ +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Outer Box */ +#outer-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Scroll */ +#scroll { + margin: 0px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Input */ +#input { + margin: 5px 20px; + padding: 10px; + border: none; + border-radius: 0.1em; + color: @text; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +#input image { + border: none; + color: @red; +} + +#input * { + outline: 4px solid @red!important; +} + +/* Text */ +#text { + margin: 5px; + border: none; + color: @text; + animation: fadeIn 0.5s ease-in-out both; +} + +#entry { + background-color: @base; +} + +#entry arrow { + border: none; + color: @lavender; +} + +/* Selected Entry */ +#entry:selected { + border: 0.11em solid @lavender; +} + +#entry:selected #text { + color: @mauve; +} + +#entry:drop(active) { + background-color: @lavender!important; +} diff --git a/wofi/src/macchiato/style.css b/wofi/src/macchiato/style.css new file mode 100644 index 0000000..3aa9a07 --- /dev/null +++ b/wofi/src/macchiato/style.css @@ -0,0 +1,164 @@ +@define-color rosewater #f4dbd6; +@define-color rosewater-rgb rgb(244, 219, 214); +@define-color flamingo #f0c6c6; +@define-color flamingo-rgb rgb(240, 198, 198); +@define-color pink #f5bde6; +@define-color pink-rgb rgb(245, 189, 230); +@define-color mauve #c6a0f6; +@define-color mauve-rgb rgb(198, 160, 246); +@define-color red #ed8796; +@define-color red-rgb rgb(237, 135, 150); +@define-color maroon #ee99a0; +@define-color maroon-rgb rgb(238, 153, 160); +@define-color peach #f5a97f; +@define-color peach-rgb rgb(245, 169, 127); +@define-color yellow #eed49f; +@define-color yellow-rgb rgb(238, 212, 159); +@define-color green #a6da95; +@define-color green-rgb rgb(166, 218, 149); +@define-color teal #8bd5ca; +@define-color teal-rgb rgb(139, 213, 202); +@define-color sky #91d7e3; +@define-color sky-rgb rgb(145, 215, 227); +@define-color sapphire #7dc4e4; +@define-color sapphire-rgb rgb(125, 196, 228); +@define-color blue #8aadf4; +@define-color blue-rgb rgb(138, 173, 244); +@define-color lavender #b7bdf8; +@define-color lavender-rgb rgb(183, 189, 248); +@define-color text #cad3f5; +@define-color text-rgb rgb(202, 211, 245); +@define-color subtext1 #b8c0e0; +@define-color subtext1-rgb rgb(184, 192, 224); +@define-color subtext0 #a5adcb; +@define-color subtext0-rgb rgb(165, 173, 203); +@define-color overlay2 #939ab7; +@define-color overlay2-rgb rgb(147, 154, 183); +@define-color overlay1 #8087a2; +@define-color overlay1-rgb rgb(128, 135, 162); +@define-color overlay0 #6e738d; +@define-color overlay0-rgb rgb(110, 115, 141); +@define-color surface2 #5b6078; +@define-color surface2-rgb rgb(91, 96, 120); +@define-color surface1 #494d64; +@define-color surface1-rgb rgb(73, 77, 100); +@define-color surface0 #363a4f; +@define-color surface0-rgb rgb(54, 58, 79); +@define-color base #24273a; +@define-color base-rgb rgb(36, 39, 58); +@define-color mantle #1e2030; +@define-color mantle-rgb rgb(30, 32, 48); +@define-color crust #181926; +@define-color crust-rgb rgb(24, 25, 38); + +* { + font-family: 'Inconsolata Nerd Font', monospace; + font-size: 14px; +} + +/* Window */ +window { + margin: 0px; + padding: 10px; + border: 0.16em solid @lavender; + border-radius: 0.1em; + background-color: @base; + animation: slideIn 0.5s ease-in-out both; +} + +/* Slide In */ +@keyframes slideIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Inner Box */ +#inner-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +/* Fade In */ +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Outer Box */ +#outer-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Scroll */ +#scroll { + margin: 0px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Input */ +#input { + margin: 5px 20px; + padding: 10px; + border: none; + border-radius: 0.1em; + color: @text; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +#input image { + border: none; + color: @red; +} + +#input * { + outline: 4px solid @red!important; +} + +/* Text */ +#text { + margin: 5px; + border: none; + color: @text; + animation: fadeIn 0.5s ease-in-out both; +} + +#entry { + background-color: @base; +} + +#entry arrow { + border: none; + color: @lavender; +} + +/* Selected Entry */ +#entry:selected { + border: 0.11em solid @lavender; +} + +#entry:selected #text { + color: @mauve; +} + +#entry:drop(active) { + background-color: @lavender!important; +} diff --git a/wofi/src/mocha/style.css b/wofi/src/mocha/style.css new file mode 100644 index 0000000..e8c0124 --- /dev/null +++ b/wofi/src/mocha/style.css @@ -0,0 +1,164 @@ +@define-color rosewater #f5e0dc; +@define-color rosewater-rgb rgb(245, 224, 220); +@define-color flamingo #f2cdcd; +@define-color flamingo-rgb rgb(242, 205, 205); +@define-color pink #f5c2e7; +@define-color pink-rgb rgb(245, 194, 231); +@define-color mauve #cba6f7; +@define-color mauve-rgb rgb(203, 166, 247); +@define-color red #f38ba8; +@define-color red-rgb rgb(243, 139, 168); +@define-color maroon #eba0ac; +@define-color maroon-rgb rgb(235, 160, 172); +@define-color peach #fab387; +@define-color peach-rgb rgb(250, 179, 135); +@define-color yellow #f9e2af; +@define-color yellow-rgb rgb(249, 226, 175); +@define-color green #a6e3a1; +@define-color green-rgb rgb(166, 227, 161); +@define-color teal #94e2d5; +@define-color teal-rgb rgb(148, 226, 213); +@define-color sky #89dceb; +@define-color sky-rgb rgb(137, 220, 235); +@define-color sapphire #74c7ec; +@define-color sapphire-rgb rgb(116, 199, 236); +@define-color blue #89b4fa; +@define-color blue-rgb rgb(137, 180, 250); +@define-color lavender #b4befe; +@define-color lavender-rgb rgb(180, 190, 254); +@define-color text #cdd6f4; +@define-color text-rgb rgb(205, 214, 244); +@define-color subtext1 #bac2de; +@define-color subtext1-rgb rgb(186, 194, 222); +@define-color subtext0 #a6adc8; +@define-color subtext0-rgb rgb(166, 173, 200); +@define-color overlay2 #9399b2; +@define-color overlay2-rgb rgb(147, 153, 178); +@define-color overlay1 #7f849c; +@define-color overlay1-rgb rgb(127, 132, 156); +@define-color overlay0 #6c7086; +@define-color overlay0-rgb rgb(108, 112, 134); +@define-color surface2 #585b70; +@define-color surface2-rgb rgb(88, 91, 112); +@define-color surface1 #45475a; +@define-color surface1-rgb rgb(69, 71, 90); +@define-color surface0 #313244; +@define-color surface0-rgb rgb(49, 50, 68); +@define-color base #1e1e2e; +@define-color base-rgb rgb(30, 30, 46); +@define-color mantle #181825; +@define-color mantle-rgb rgb(24, 24, 37); +@define-color crust #11111b; +@define-color crust-rgb rgb(17, 17, 27); + +* { + font-family: 'Inconsolata Nerd Font', monospace; + font-size: 14px; +} + +/* Window */ +window { + margin: 0px; + padding: 10px; + border: 0.16em solid @lavender; + border-radius: 0.1em; + background-color: @base; + animation: slideIn 0.5s ease-in-out both; +} + +/* Slide In */ +@keyframes slideIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Inner Box */ +#inner-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +/* Fade In */ +@keyframes fadeIn { + 0% { + opacity: 0; + } + + 100% { + opacity: 1; + } +} + +/* Outer Box */ +#outer-box { + margin: 5px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Scroll */ +#scroll { + margin: 0px; + padding: 10px; + border: none; + background-color: @base; +} + +/* Input */ +#input { + margin: 5px 20px; + padding: 10px; + border: none; + border-radius: 0.1em; + color: @text; + background-color: @base; + animation: fadeIn 0.5s ease-in-out both; +} + +#input image { + border: none; + color: @red; +} + +#input * { + outline: 4px solid @red!important; +} + +/* Text */ +#text { + margin: 5px; + border: none; + color: @text; + animation: fadeIn 0.5s ease-in-out both; +} + +#entry { + background-color: @base; +} + +#entry arrow { + border: none; + color: @lavender; +} + +/* Selected Entry */ +#entry:selected { + border: 0.11em solid @lavender; +} + +#entry:selected #text { + color: @mauve; +} + +#entry:drop(active) { + background-color: @lavender!important; +}