commit 8ff9cb0e98f015079f8cced325f906f51f7dce68 Author: Coby Powers Date: Sat Apr 6 19:31:51 2024 -0500 initial commit diff --git a/README.md b/README.md new file mode 100644 index 0000000..6fa987c --- /dev/null +++ b/README.md @@ -0,0 +1,3 @@ +# Linux Dotfiles + +A collection of dotfiles I use for my Arch Linux system. diff --git a/alacritty/alacritty.toml b/alacritty/alacritty.toml new file mode 100644 index 0000000..cae459e --- /dev/null +++ b/alacritty/alacritty.toml @@ -0,0 +1,32 @@ +# _____ .__ .__ __ __ +# / _ \ | | _____ ___________|__|/ |__/ |_ ___.__. +# / /_\ \| | \__ \ _/ ___\_ __ \ \ __\ __< | | +# / | \ |__/ __ \\ \___| | \/ || | | | \___ | +# \____|__ /____(____ /\___ >__| |__||__| |__| / ____| +# \/ \/ \/ \/ +# +# https://alacritty.org/config-alacritty.html +# Configuration by Coby Powers + +import = [ + "~/.config/alacritty/catppuccin-mocha.toml" +] + + +[window] +padding.x = 10 +padding.y = 10 +opacity = 0.9 + +[scrolling] +multiplier = 2 + +[font] +normal.family = "JetBrains Mono Nerd Font" +size = 12 + +[cursor] +style.shape = "Beam" +style.blinking = "On" +blink_interval = 500 +unfocused_hollow = false diff --git a/alacritty/catppuccin-mocha.toml b/alacritty/catppuccin-mocha.toml new file mode 100644 index 0000000..1dfe857 --- /dev/null +++ b/alacritty/catppuccin-mocha.toml @@ -0,0 +1,75 @@ +[colors.primary] +background = "#1E1E2E" +foreground = "#CDD6F4" +dim_foreground = "#CDD6F4" +bright_foreground = "#CDD6F4" + +[colors.cursor] +text = "#1E1E2E" +cursor = "#F5E0DC" + +[colors.vi_mode_cursor] +text = "#1E1E2E" +cursor = "#B4BEFE" + +[colors.search.matches] +foreground = "#1E1E2E" +background = "#A6ADC8" + +[colors.search.focused_match] +foreground = "#1E1E2E" +background = "#A6E3A1" + +[colors.footer_bar] +foreground = "#1E1E2E" +background = "#A6ADC8" + +[colors.hints.start] +foreground = "#1E1E2E" +background = "#F9E2AF" + +[colors.hints.end] +foreground = "#1E1E2E" +background = "#A6ADC8" + +[colors.selection] +text = "#1E1E2E" +background = "#F5E0DC" + +[colors.normal] +black = "#45475A" +red = "#F38BA8" +green = "#A6E3A1" +yellow = "#F9E2AF" +blue = "#89B4FA" +magenta = "#F5C2E7" +cyan = "#94E2D5" +white = "#BAC2DE" + +[colors.bright] +black = "#585B70" +red = "#F38BA8" +green = "#A6E3A1" +yellow = "#F9E2AF" +blue = "#89B4FA" +magenta = "#F5C2E7" +cyan = "#94E2D5" +white = "#A6ADC8" + +[colors.dim] +black = "#45475A" +red = "#F38BA8" +green = "#A6E3A1" +yellow = "#F9E2AF" +blue = "#89B4FA" +magenta = "#F5C2E7" +cyan = "#94E2D5" +white = "#BAC2DE" + +[[colors.indexed_colors]] +index = 16 +color = "#FAB387" + +[[colors.indexed_colors]] +index = 17 +color = "#F5E0DC" diff --git a/hypr/catppuccin-mocha.conf b/hypr/catppuccin-mocha.conf new file mode 100644 index 0000000..1463565 --- /dev/null +++ b/hypr/catppuccin-mocha.conf @@ -0,0 +1,61 @@ +$rosewaterAlpha = f5e0dc +$flamingoAlpha = f2cdcd +$pinkAlpha = f5c2e7 +$mauveAlpha = cba6f7 +$redAlpha = f38ba8 +$maroonAlpha = eba0ac +$peachAlpha = fab387 +$yellowAlpha = f9e2af +$greenAlpha = a6e3a1 +$tealAlpha = 94e2d5 +$skyAlpha = 89dceb +$sapphireAlpha = 74c7ec +$blueAlpha = 89b4fa +$lavenderAlpha = b4befe + +$textAlpha = cdd6f4 +$subtext1Alpha = bac2de +$subtext0Alpha = a6adc8 + +$overlay2Alpha = 9399b2 +$overlay1Alpha = 7f849c +$overlay0Alpha = 6c7086 + +$surface2Alpha = 585b70 +$surface1Alpha = 45475a +$surface0Alpha = 313244 + +$baseAlpha = 1e1e2e +$mantleAlpha = 181825 +$crustAlpha = 11111b + +$rosewater = 0xfff5e0dc +$flamingo = 0xfff2cdcd +$pink = 0xfff5c2e7 +$mauve = 0xffcba6f7 +$red = 0xfff38ba8 +$maroon = 0xffeba0ac +$peach = 0xfffab387 +$yellow = 0xfff9e2af +$green = 0xffa6e3a1 +$teal = 0xff94e2d5 +$sky = 0xff89dceb +$sapphire = 0xff74c7ec +$blue = 0xff89b4fa +$lavender = 0xffb4befe + +$text = 0xffcdd6f4 +$subtext1 = 0xffbac2de +$subtext0 = 0xffa6adc8 + +$overlay2 = 0xff9399b2 +$overlay1 = 0xff7f849c +$overlay0 = 0xff6c7086 + +$surface2 = 0xff585b70 +$surface1 = 0xff45475a +$surface0 = 0xff313244 + +$base = 0xff1e1e2e +$mantle = 0xff181825 +$crust = 0xff11111b diff --git a/hypr/hypridle.conf b/hypr/hypridle.conf new file mode 100644 index 0000000..9c9ee74 --- /dev/null +++ b/hypr/hypridle.conf @@ -0,0 +1,49 @@ +# ___ ___ .__ .___.__ +# / | \ ___.__._____________|__| __| _/| | ____ +# / ~ < | |\____ \_ __ \ |/ __ | | | _/ __ \ +# \ Y /\___ || |_> > | \/ / /_/ | | |_\ ___/ +# \___|_ / / ____|| __/|__| |__\____ | |____/\___ > +# \/ \/ |__| \/ \/ +# +# https://wiki.hyprland.org/Hypr-Ecosystem/hypridle/ +# Configuration by Coby Powers + +general { + lock_cmd = pidof hyprlock || hyprlock + unlock_cmd = pidof hyprlock && pkill -USR1 hyprlock + before_sleep_cmd = loginctl lock-session + after_sleep_cmd = hyprctl dispatch dpms on +} + +listener { + timeout = 180 + on-timeout = brightnessctl -s s 10 + on-resume = brightnessctl -r +} + +listener { + timeout = 180 + on-timeout = brightnessctl -sd asus::kbd_backlight s 0 + on-resume = brightnessctl -rd asus::kbd_backlight +} + +listener { + timeout = 300 + on-timeout = loginctl lock-session +} + +listener { + timeout = 600 + on-timeout = hyprctl dispatch dpms off + on-resume = hyprctl dispatch dpms on +} + +listener { + timeout = 1200 + on-timeout = playerctl pause +} + +listener { + timeout = 1800 + on-timeout = systemctl suspend +} diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..52d324b --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,207 @@ +# ___ ___ .__ .___ +# / | \ ___.__._____________| | _____ ____ __| _/ +# / ~ < | |\____ \_ __ \ | \__ \ / \ / __ | +# \ Y /\___ || |_> > | \/ |__/ __ \| | \/ /_/ | +# \___|_ / / ____|| __/|__| |____(____ /___| /\____ | +# \/ \/ |__| \/ \/ \/ +# +# https://wiki.hyprland.org/Configuring/Variables/#general +# Configuration by Coby Powers + +source = ~/.config/hypr/catppuccin-mocha.conf + +monitor = HDMI-A-1, 2560x1440@144, 0x1080, 1 +monitor = DP-10, 1920x1080@74.97, 320x0, 1 +monitor = DP-11, 1920x1080@74.97,320x0, 1 +monitor = eDP-1, 2560x1600@120, 2560x1400, 2 +monitor = eDP-2, 2560x1600@120, 2560x1400, 2 +monitor = , preferred, auto, auto + +# keybind variables +$mainMod = SUPER + +# app variables +$terminal = alacritty +$browser = brave +$fileManager = nautilus +$musicPlayer = spotify +$menu = wofi +$powerMenu = wlogout + +# environment variables +env = XDG_CURRENT_DESKTOP, Hyprland +env = XDG_SESSION_DESTOP, Hyprland +env = XDG_SESSION_TYPE, wayland +env = GDK_BACKEND, wayland,x11 +env = QT_QPA_PLATFORM, wayland;xcb +env = QT_QPA_PLATFORMTHEME, qt6ct +env = QT_AUTO_SCREEN_SCALE_FACTOR, 1 +env = SDL_VIDEODRIVER, wayland +env = CLUTTER_BACKEND, wayland +env = ELECTRON_OZONE_PLATFORM_HINT, wayland + +env = HYPRCURSOR_THEME, Oxygen-18-White +env = HYPRCURSOR_SIZE, 24 + +# launch system apps +exec-once = ~/.config/hypr/scripts/xdg-portal-hyprland.sh +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP +exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 + +# launch util apps +exec-once = wl-paste --watch cliphist store +exec-once = hyprpaper +exec-once = hypridle +exec-once = waybar +exec-once = nm-applet +exec-once = blueman-applet +exec-once = nextcloud-client +exec-once = notify-send -u low "Daily Quote" "$(python ~/.config/hypr/scripts/quotes.py)" + +general { + border_size = 2 + gaps_in = 5 + gaps_out = 10 + col.inactive_border = $surface0 + col.active_border = $blue + resize_on_border = true +} + +decoration { + rounding = 12 + inactive_opacity = 0.95 +} + +animations { + enabled = true + + bezier = custom, .8, 0, .08, 1 + + animation = windows, 1, 2, custom + animation = layers, 1, 2, custom + animation = fade, 1, 3, default + animation = border, 1, 3, default + animation = borderangle, 1, 3, default + animation = workspaces, 1, 2, custom +} + +misc { + disable_hyprland_logo = true + disable_splash_rendering = true # isn't working +} + +input { + repeat_rate = 30 + repeat_delay = 400 + follow_mouse = 1 + + touchpad { + natural_scroll = true + scroll_factor = 0.3 + } +} + +gestures { + workspace_swipe = true +} + +device { + name = razer-razer-viper-ultimate-dongle + #sensitivity = -0.9 +} + +dwindle { + pseudotile = true + preserve_split = true +} + +windowrulev2 = float, class:(Lxappearance) +windowrulev2 = float, class:(nwg-look) +windowrulev2 = float, class:(qt5ct) +windowrulev2 = float, class:(qt6ct) +windowrulev2 = float, class:(com.nextcloud.desktopclient.nextcloud) +windowrulev2 = float, class:(minecraft-launcher) +windowrulev2 = float, class:(org.gnome.Nautilus) +windowrulev2 = float, title:(Save File) +windowrulev2 = float, title:(Open File) + +windowrulev2 = opacity 0.9, class:(org.gnome.Nautilus) +windowrulev2 = opacity, 0.9, class:(wofi) +windowrulev2 = opacity 0.95, class:(signal) + +layerrule = blur, logout_dialog + +bind = $mainMod, T, exec, $terminal +bind = $mainMod, B, exec, $browser +bind = $mainMod, F, exec, $fileManager +bind = $mainMod, M, exec, $musicPlayer +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, exec, $powerMenu +bind = $mainMod, Q, killactive, +bind = $mainMod SHIFT, Q, exit, +bind = $mainMod, K, togglefloating, +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, C, exec, grim -g "$(slurp -p)" -t ppm - | convert - -format '%[pixel:p{0,0}]' txt:- | tail -n 1 | cut -d ' ' -f 4 | wl-copy +bind = $mainMod, V, exec, cliphist list | wofi --dmenu | cliphist decode | wl-copy +bind = $mainMod SHIFT, V, exec, cliphist wipe +bind = $mainMod, S, exec, grim -g "$(slurp)" - | wl-copy && wl-paste > /home/coby/Pictures/Screenshots/$(date +"scrn_%Y%m%d_%H%M%S.png") && notify-send "Screenshot taken!" +bind = $mainMod SHIFT, S, exec, grim - | wl-copy && wl-paste > /home/coby/Pictures/Screenshots/$(date +"fscrn_%Y%m%d_%H%M%S.png") && notify-send "Screenshot taken!" + +bind = $mainMod, left, swapwindow, l +bind = $mainMod, right, swapwindow, r +bind = $mainMod, up, swapwindow, u +bind = $mainMod, down, swapwindow, d + +bind = $mainMod SHIFT, left, resizeactive, -5% 0% +bind = $mainMod SHIFT, right, resizeactive, 5% 0% +bind = $mainMod SHIFT, up, resizeactive, 0% -5% +bind = $mainMod SHIFT, down, resizeactive, 0% 5% + +bind = $mainMod, 1, workspace, 1 +bind = $mainMod, 2, workspace, 2 +bind = $mainMod, 3, workspace, 3 +bind = $mainMod, 4, workspace, 4 +bind = $mainMod, 5, workspace, 5 +bind = $mainMod, 6, workspace, 6 +bind = $mainMod, 7, workspace, 7 +bind = $mainMod, 8, workspace, 8 +bind = $mainMod, 9, workspace, 9 +bind = $mainMod, 0, workspace, 10 + +bind = $mainMod SHIFT, 1, movetoworkspace, 1 +bind = $mainMod SHIFT, 2, movetoworkspace, 2 +bind = $mainMod SHIFT, 3, movetoworkspace, 3 +bind = $mainMod SHIFT, 4, movetoworkspace, 4 +bind = $mainMod SHIFT, 5, movetoworkspace, 5 +bind = $mainMod SHIFT, 6, movetoworkspace, 6 +bind = $mainMod SHIFT, 7, movetoworkspace, 7 +bind = $mainMod SHIFT, 8, movetoworkspace, 8 +bind = $mainMod SHIFT, 9, movetoworkspace, 9 +bind = $mainMod SHIFT, 0, movetoworkspace, 10 + +bind = $mainMod, N, togglespecialworkspace, magic +bind = $mainMod SHIFT, N, movetoworkspace, special:magic + +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 + +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# TODO: maybe extrapolate notification behavior into scripts +bindel = ,XF86AudioRaiseVolume, exec, pamixer -i 5; notify-send -h string:x-canonical-private-synchronous:vol "Volume set to $(pamixer --get-volume)%" +bindel = ,XF86AudioLowerVolume, exec, pamixer -d 5; notify-send -h string:x-canonical-private-synchronous:vol "Volume set to $(pamixer --get-volume)%" +bindel = ,XF86KbdBrightnessUp, exec, brightnessctl -d asus::kbd_backlight set 1%+; notify-send -h string:x-canonical-private-synchronous:kbd_bright "Keyboard brightness set to $(brightnessctl -d asus::kbd_backlight g)" +bindel = ,XF86KbdBrightnessDown, exec, brightnessctl -d asus::kbd_backlight set 1%-; notify-send -h string:x-canonical-private-synchronous:kbd_bright "Keyboard brightness set to $(brightnessctl -d asus::kbd_backlight g)" +bindel = ,XF86MonBrightnessUp, exec, brightnessctl set 5%+; notify-send -h string:x-canonical-private-synchronous:mon_bright "Monitor brightness set to $(brightnessctl g)" +bindel = ,XF86MonBrightnessDown, exec, brightnessctl set 5%-; notify-send -h string:x-canonical-private-synchronous:mon_bright "Monitor brightness set to $(brightnessctl g)" +bindl = ,XF86AudioMute, exec, pamixer -t; notify-send -h string:x-canonical-private-synchronous:vol "Volume is now $(pamixer --get-volume-human)" +bindl = ,XF86AudioMicMute, exec, pamixer --default-source -t +bindl = ,XF86AudioPrev, exec, playerctl previous +bindl = ,XF86AudioPlay, exec, playerctl play-pause +bindl = ,XF86AudioNext, exec, playerctl next +bindl = ,XF86TouchpadToggle, exec, notify-send -u normal "Unavailable" "Disabling the touchpad has not been implemented yet." +bind = ,156, exec, rog-control-center # rog button +bind = ,210, exec, asusctl led-mode -n # aura button +bind = ,211, exec, asusctl profile -n # fan button diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf new file mode 100644 index 0000000..bbdc4ef --- /dev/null +++ b/hypr/hyprlock.conf @@ -0,0 +1,80 @@ +# ___ ___ .__ __ +# / | \ ___.__._____________| | ____ ____ | | __ +# / ~ < | |\____ \_ __ \ | / _ \_/ ___\| |/ / +# \ Y /\___ || |_> > | \/ |_( <_> ) \___| < +# \___|_ / / ____|| __/|__| |____/\____/ \___ >__|_ \ +# \/ \/ |__| \/ \/ +# +# https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/ +# Configuration by Coby Powers + +background { + monitor = + path = /home/coby/Nextcloud/Wallpapers/Color Mountains.png + #color = rgba(30, 30, 46, 0.9) + + blur_passes = 3 + blur_size = 8 + noise = 0.0117 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + +label { + monitor = + text = cmd[update:1000] echo $(date +"%l:%M") + color = rgb(205, 214, 244) + font_size = 180 + font_family = Noto Sans + shadow_passes = 1 + shadow_color = rgb(49, 50, 68) + + position = 0, -110 + halign = center + valign = center +} + +input-field { + monitor = + size = 600, 75 + outline_thickness = 3 + dots_size = 0.25 + dots_spacing = 0.3 + dots_center = false + dots_rounding = -1 + outer_color = rgb(49, 50, 68) + inner_color = rgb(30, 30, 46) + font_color = rgb(205, 214, 244) + fade_on_empty = true + fade_timeout = 1000 + placeholder_text = Please enter your password... + hide_input = false + rounding = 16 + check_color = rgb(249, 226, 175) + fail_color = rgb(243, 139, 168) + fail_text = + fail_transition = 200 + capslock_color = rgb(203, 166, 247) + numlock_color = rgb(203, 166, 247) + bothlock_color = rgb(203, 166, 247) + invert_numlock = false + swap_font_color = false + + position = 0, -200 + halign = center + valign = center +} + +label { + monitor = + text = cmd[update:60000] echo -e $(python ~/.config/hypr/scripts/quotes.py || "Hello, Coby") + color = rgb(166, 173, 200) + font_size = 18 + font_family = JetBrainsMono Nerd Font + + position = 0, -35 + halign = center + valign = bottom +} diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf new file mode 100644 index 0000000..d350f8b --- /dev/null +++ b/hypr/hyprpaper.conf @@ -0,0 +1,12 @@ +# ___ ___ +# / | \ ___.__.________________________ ______ ___________ +# / ~ < | |\____ \_ __ \____ \__ \ \____ \_/ __ \_ __ \ +# \ Y /\___ || |_> > | \/ |_> > __ \| |_> > ___/| | \/ +# \___|_ / / ____|| __/|__| | __(____ / __/ \___ >__| +# \/ \/ |__| |__| \/|__| \/ +# +# https://wiki.hyprland.org/Hypr-Ecosystem/hyprpaper/ +# Configuration by Coby Powers + +preload = /home/coby/Nextcloud/Wallpapers/Color Mountains.png +wallpaper = ,/home/coby/Nextcloud/Wallpapers/Color Mountains.png diff --git a/hypr/scripts/powermenu.sh b/hypr/scripts/powermenu.sh new file mode 100755 index 0000000..23a6dd9 --- /dev/null +++ b/hypr/scripts/powermenu.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env bash + +op=$( echo -e " Shutdown\n Reboot\n Suspend\n Lock" | wofi --dmenu | awk '{print tolower($2)}' ) + +case $op in + shutdown) + shutdown now + ;; + reboot) + ;& + suspend) + systemctl $op + ;; + lock) + hyprlock + ;; +esac diff --git a/hypr/scripts/quotes.py b/hypr/scripts/quotes.py new file mode 100755 index 0000000..cca5f49 --- /dev/null +++ b/hypr/scripts/quotes.py @@ -0,0 +1,13 @@ +#!/usr/bin/env python + +import requests + +res = requests.get('https://zenquotes.io/api/random') + +if not res: + exit(1) + +json = res.json() +data = json[0] + +print(f"{data['q']}\n -- {data['a']}") diff --git a/hypr/scripts/xdg-portal-hyprland.sh b/hypr/scripts/xdg-portal-hyprland.sh new file mode 100755 index 0000000..2802ece --- /dev/null +++ b/hypr/scripts/xdg-portal-hyprland.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env bash + +sleep 1 +killall xdg-desktop-portal-hyprland +killall xdg-desktop-portal-wlr +killall xdg-desktop-portal +/usr/lib/xdg-desktop-portal-hyprland & + +sleep 2 +/usr/lib/xdg-desktop-portal & diff --git a/mako/config b/mako/config new file mode 100644 index 0000000..db7e96b --- /dev/null +++ b/mako/config @@ -0,0 +1,27 @@ +sort=-time +layer=overlay +background-color=#181825 +progress-color=#1e1e2e +text-color=#cdd6f4 +width=400 +height=200 +outer-margin=45,45 +margin=0,0,12,0 +padding=16 +border-size=2 +border-color=#b4befe +border-radius=10 +max-icon-size=64 +default-timeout=5000 +ignore-timeout=1 +font=monospace 12 + +[urgency=low] +border-color=#b4befe + +[urgency=normal] +border-color=#fab387 + +[urgency=high] +border-color=#f38ba8 +default-timeout=0 diff --git a/waybar/config.jsonc b/waybar/config.jsonc new file mode 100644 index 0000000..a27d450 --- /dev/null +++ b/waybar/config.jsonc @@ -0,0 +1,145 @@ +// __ __ ___. +// / \ / \_____ ___.__.\_ |__ _____ _______ +// \ \/\/ /\__ \< | | | __ \\__ \\_ __ \ +// \ / / __ \\___ | | \_\ \/ __ \| | \/ +// \__/\ / (____ / ____| |___ (____ /__| +// \/ \/\/ \/ \/ +// +// https://github.com/Alexays/Waybar/wiki +// Configuration by Coby Powers + +{ + "layer": "top", + "position": "top", + "height": 50, + "modules-left": ["custom/app-drawer", "hyprland/workspaces", "cpu", "disk", "memory", "custom/weather"], + "modules-center": ["clock", "custom/updates"], + "modules-right": ["temperature", "custom/power_profile", "battery", "pulseaudio", "pulseaudio#microphone", "tray"], + + "custom/app-drawer": { + "format": "", + "on-click": "sleep 0.1 && wofi", + "tooltip": false + }, + + "hyprland/workspaces": { + "persistent-workspaces": { + "1": [], + "2": [], + "3": [] + } + }, + + "cpu": { + "format": " {usage}%", + //"format": "{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}", + "format-icons": ["▁", "▂", "▃", "▄", "▅", "▆", "▇", "█"], + //"tooltip-format": "CPU Usage\n{usage}% | {load}\n{avg_frequency} GHz\n\n{icon0}{icon1}{icon2}{icon3}{icon4}{icon5}{icon6}{icon7}\n{icon8}{icon9}{icon10}{icon11}{icon12}{icon13}{icon14}{icon15}", + "tooltip-format": "bruh", + "on-click": "alacritty -o 'window.startup_mode=\"Fullscreen\"' -e btop" + }, + + "disk": { + "format": "󰋊 {percentage_used}%", + "tooltip-format": "Disk Usage\n\nFree: {percentage_free}%\nUsed: {percentage_used}%\nTotal: {total}", + "on-click": "alacritty -o 'window.startup_mode=\"Fullscreen\"' -e btop" + }, + + "memory": { + "format": " {percentage}%", + "tooltip-format": "Memory Usage\n\nFree: {avail} GiB\nUsed: {used} GiB\nTotal: {total} GiB", + "on-click": "alacritty -o 'window.startup_mode=\"Fullscreen\"' -e btop" + }, + + "custom/weather":{ + "exec": "~/.config/waybar/scripts/weather.py", + "interval": 30, + "format": "{}", + "return-type": "json" + }, + + "clock": { + "format": "{:%I:%M %p • %D}", + "tooltip-format": "{:%A, %b %d}\n{calendar}", + "calendar": { + "format": { + "months": "", + "weekdays": "{}", + "today": "{}" + } + } + }, + + "custom/updates":{ + "exec": "~/.config/waybar/scripts/updates.sh json", + "interval": 300, + "format": "{}", + "on-click": "~/.config/waybar/scripts/updates.sh update", + "return-type": "json" + }, + + "temperature": { + "thermal-zone": 0, + "critical-threshold": 75, + "format": " {temperatureC}°C", + "format-critical": " {temperatureC}°C", + "tooltip-format": "CPU Temp\n{temperatureC}°C | {temperatureF}°F" + }, + + "custom/power_profile":{ + "exec": "asusctl profile -p | sed s:'Active profile is '::", + "interval": 30, + "format": "󰈐 {}", + "tooltip-format": "CPU Mode\n{}", + "on-click": "asusctl profile -n; pkill -SIGRTMIN+8 waybar", + "signal": 8 + }, + + "battery": { + "states": { + "ok": 50, + "warning": 30, + "critical": 15 + }, + "format": "{icon} {capacity}%", + "format-charging": " {capacity}%", + "format-plugged": " {capacity}%", + "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "tooltip-format": "Battery\n{capacity}% | {power} W\n\n{timeTo}" + }, + + "pulseaudio": { + "format": "{icon} {volume}%", + "tooltip-format": "{icon} {desc}", + "format-muted": " Muted", + "on-click": "pamixer -t", + "on-scroll-up": "pamixer -i 5", + "on-scroll-down": "pamixer -d 5", + "scroll-step": 5, + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + } + }, + + "pulseaudio#microphone": { + "format": "{format_source}", + "format-source": " {volume}%", + "format-source-muted": " Muted", + "tooltip-format": " {desc}", + "on-click": "pamixer --default-source -t", + "on-scroll-up": "pamixer --default-source -i 5", + "on-scroll-down": "pamixer --default-source -d 5", + "scroll-step": 5 + }, + + "tray": { + "icon-size": 14, + "spacing": 10 + } +} diff --git a/waybar/scripts/updates.sh b/waybar/scripts/updates.sh new file mode 100755 index 0000000..72eab13 --- /dev/null +++ b/waybar/scripts/updates.sh @@ -0,0 +1,27 @@ +#!/usr/bin/env bash + +if [ ! -f /etc/arch-release ]; then + exit 0 +fi + +AUR=$(paru -Qua | wc -l) +OFFICIAL=$(checkupdates | wc -l) + +case $1 in + aur) echo " $AUR";; + official) echo " $OFFICIAL";; +esac + +if [ "$1" = "update" ]; then + alacritty -o 'window.startup_mode="Fullscreen"' -e 'paru' +fi + +if [ "$1" = "json" ]; then + COUNT=$((OFFICIAL+AUR)) + + echo "{ \"text\": \" $COUNT\", \"alt\": \"$COUNT Updates\", \"tooltip\": \"Updates Available\n\nAUR: $AUR\nOfficial: $OFFICIAL\nTotal: $COUNT\" }" +fi + +if [ "$1" = "" ]; then + echo " $((OFFICIAL+AUR))" +fi diff --git a/waybar/scripts/weather.py b/waybar/scripts/weather.py new file mode 100755 index 0000000..c988ee0 --- /dev/null +++ b/waybar/scripts/weather.py @@ -0,0 +1,115 @@ +#!/usr/bin/env python + +import json +import requests +from datetime import datetime + +ZIP_CODE = 38654 + +WEATHER_CODES = { + '113': '☀️', + '116': '⛅', + '119': '☁️', + '122': '☁️', + '143': '☁️', + '176': '🌧️', + '179': '🌧️', + '182': '🌧️', + '185': '🌧️', + '200': '⛈️', + '227': '🌨️', + '230': '🌨️', + '248': '☁️', + '260': '☁️', + '263': '🌧️', + '266': '🌧️', + '281': '🌧️', + '284': '🌧️', + '293': '🌧️', + '296': '🌧️', + '299': '🌧️', + '302': '🌧️', + '305': '🌧️', + '308': '🌧️', + '311': '🌧️', + '314': '🌧️', + '317': '🌧️', + '320': '🌨️', + '323': '🌨️', + '326': '🌨️', + '329': '❄️', + '332': ' ', + '335': '❄️', + '338': '❄️', + '350': '🌧️', + '353': '🌧️', + '356': '', + '359': '', + '362': '', + '365': '', + '368': '', + '371': '❄️', + '374': '', + '377': '', + '386': '', + '389': '', + '392': '', + '395': '❄️' +} + +data = {} + +weather = requests.get(f"https://wttr.in/{ZIP_CODE}?format=j1").json() + +def format_time(time): + return time.replace("00", "").zfill(2) + +def format_temp(temp): + return (hour['FeelsLikeF']+"°").ljust(3) + +def format_chances(hour): + chances = { + "chanceoffog": "Fog", + "chanceoffrost": "Frost", + "chanceofovercast": "Overcast", + "chanceofrain": "Rain", + "chanceofsnow": "Snow", + "chanceofsunshine": "Sunshine", + "chanceofthunder": "Thunder", + "chanceofwindy": "Wind" + } + + conditions = [] + for event in chances.keys(): + if int(hour[event]) > 0: + conditions.append(chances[event]+" "+hour[event]+"%") + return ", ".join(conditions) + +tempint = int(weather['current_condition'][0]['FeelsLikeF']) +extrachar = '' +if tempint > 0 and tempint < 10: + extrachar = '+' + +data['text'] = ' '+WEATHER_CODES[weather['current_condition'][0]['weatherCode']] + \ + " "+extrachar+weather['current_condition'][0]['FeelsLikeF']+"°" + +data['tooltip'] = f"{weather['current_condition'][0]['weatherDesc'][0]['value']} {weather['current_condition'][0]['temp_F']}°\n" +data['tooltip'] += f"Feels like: {weather['current_condition'][0]['FeelsLikeF']}°\n" +data['tooltip'] += f"Wind: {weather['current_condition'][0]['windspeedKmph']}Km/h\n" +data['tooltip'] += f"Humidity: {weather['current_condition'][0]['humidity']}%\n" +for i, day in enumerate(weather['weather']): + data['tooltip'] += f"\n" + if i == 0: + data['tooltip'] += "Today, " + if i == 1: + data['tooltip'] += "Tomorrow, " + data['tooltip'] += f"{day['date']}\n" + data['tooltip'] += f"⬆️ {day['maxtempF']}° ⬇️ {day['mintempF']}° " + data['tooltip'] += f"🌅 {day['astronomy'][0]['sunrise']} 🌇 {day['astronomy'][0]['sunset']}\n" + for hour in day['hourly']: + if i == 0: + if int(format_time(hour['time'])) < datetime.now().hour-2: + continue + data['tooltip'] += f"{format_time(hour['time'])} {WEATHER_CODES[hour['weatherCode']]} {format_temp(hour['FeelsLikeF'])} {hour['weatherDesc'][0]['value'].replace('Clear ', 'Clear')}, {format_chances(hour)}\n" + +print(json.dumps(data)) diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..7db48fd --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,175 @@ +* { + border: none; + border-radius: 0; + font-family: "JetBrainsMono Nerd Font"; + font-weight: bold; + font-size: 13px; +} + +window#waybar { + background: transparent; + color: #cdd6f4; +} + +tooltip { + background: #1e1e2e; + border-radius: 10px; + border: 1px solid #181825; +} + +tooltip label { + color: #cdd6f4; + text-decoration: none; +} + +tooltip > * { + border-radius: 10px; +} + +#custom-app-drawer, +#cpu, +#disk, +#memory, +#custom-weather, +#workspaces, +#clock, +#custom-updates, +#window, +#temperature, +#custom-power_profile, +#battery, +#pulseaudio, +#tray { + background: #1e1e2e; + opacity: 0.9; + padding: 0px 10px; + margin-top: 10px; + border: 1px solid #181825; +} + +#custom-app-drawer { + color: #94e2d5; + margin-left: 10px; + padding: 0 15px; + border-radius: 10px 0 0 10px; +} + +#workspaces { + margin-right: 10px; + padding-right: 5px; + border-radius: 0 10px 10px 0; + border-left: 0; +} + +#cpu, +#disk, +#memory { + color: #f2cdcd; +} + +#cpu { + border-radius: 10px 0 0 10px; +} + +#disk { + border-left: 0; +} + +#memory { + border-left: none; + border-radius: 0 10px 10px 0; + margin-right: 10px; +} + +#custom-weather { + color: #f9e2af; + border-radius: 10px; +} + +#workspaces button { + color: #6c7086; + padding: 5px; + margin-right: 5px; +} + +#workspaces button.active { + color: #a6adc8; +} + +#workspaces button.focused { + color: #a6adc8; + background: #eba0ac; +} + +#workspaces button.urgent { + color: #11111b; + background: #a6e3a1; +} + +#workspaces button:hover { + background: #11111b; + color: #cdd6f4; +} + +#clock { + color: #89b4fa; + border-radius: 10px 0 0 10px; + margin-left: 60px; +} + +#custom-updates { + border-left: 0; + border-radius: 0 10px 10px 0; + margin-right: 60px; +} + +#temperature { + color: #94e2d5; + border-radius: 10px 0px 0px 10px; +} + +#temperature.critical { + color: #eba0ac; +} + +#custom-power_profile { + color: #a6e3a1; + border-left: 0px; + border-right: 0px; +} + +#battery { + color: #a6e3a1; + border-radius: 0 10px 10px 0; + margin-right: 10px; + border-left: 0px; +} + +#battery.ok { + color: #f9e2af; +} + +#battery.warning { + color: #fab387; +} + +#battery.critical { + color: #eba0ac; +} + +#pulseaudio { + color: #cba6f7; + border-radius: 10px 0 0 10px; +} + +#pulseaudio.microphone { + color: #cba6f7; + border-radius: 0 10px 10px 0; + border-left: none; + margin-right: 10px; +} + +#tray { + border-radius: 10px; + margin-right: 10px; +} diff --git a/wlogout/icons/active/hibernate.png b/wlogout/icons/active/hibernate.png new file mode 100644 index 0000000..19ca77f Binary files /dev/null and b/wlogout/icons/active/hibernate.png differ diff --git a/wlogout/icons/active/lock.png b/wlogout/icons/active/lock.png new file mode 100644 index 0000000..4847b16 Binary files /dev/null and b/wlogout/icons/active/lock.png differ diff --git a/wlogout/icons/active/logout.png b/wlogout/icons/active/logout.png new file mode 100644 index 0000000..9b6bf1c Binary files /dev/null and b/wlogout/icons/active/logout.png differ diff --git a/wlogout/icons/active/reboot.png b/wlogout/icons/active/reboot.png new file mode 100644 index 0000000..08d3331 Binary files /dev/null and b/wlogout/icons/active/reboot.png differ diff --git a/wlogout/icons/active/shutdown.png b/wlogout/icons/active/shutdown.png new file mode 100644 index 0000000..52ad326 Binary files /dev/null and b/wlogout/icons/active/shutdown.png differ diff --git a/wlogout/icons/active/suspend.png b/wlogout/icons/active/suspend.png new file mode 100644 index 0000000..e57ebc7 Binary files /dev/null and b/wlogout/icons/active/suspend.png differ diff --git a/wlogout/icons/inactive/hibernate.png b/wlogout/icons/inactive/hibernate.png new file mode 100644 index 0000000..13deab8 Binary files /dev/null and b/wlogout/icons/inactive/hibernate.png differ diff --git a/wlogout/icons/inactive/lock.png b/wlogout/icons/inactive/lock.png new file mode 100644 index 0000000..edf5236 Binary files /dev/null and b/wlogout/icons/inactive/lock.png differ diff --git a/wlogout/icons/inactive/logout.png b/wlogout/icons/inactive/logout.png new file mode 100644 index 0000000..92a0db4 Binary files /dev/null and b/wlogout/icons/inactive/logout.png differ diff --git a/wlogout/icons/inactive/reboot.png b/wlogout/icons/inactive/reboot.png new file mode 100644 index 0000000..9212cca Binary files /dev/null and b/wlogout/icons/inactive/reboot.png differ diff --git a/wlogout/icons/inactive/shutdown.png b/wlogout/icons/inactive/shutdown.png new file mode 100644 index 0000000..b042920 Binary files /dev/null and b/wlogout/icons/inactive/shutdown.png differ diff --git a/wlogout/icons/inactive/suspend.png b/wlogout/icons/inactive/suspend.png new file mode 100644 index 0000000..0024da2 Binary files /dev/null and b/wlogout/icons/inactive/suspend.png differ diff --git a/wlogout/layout b/wlogout/layout new file mode 100644 index 0000000..ba34624 --- /dev/null +++ b/wlogout/layout @@ -0,0 +1,35 @@ +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "Shutdown" +} + +{ + "label" : "lock", + "action" : "loginctl lock-session", + "text" : "Lock" +} + +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "Reboot" +} + +{ + "label" : "logout", + "action" : "hyprctl dispatch exit 0", + "text" : "Logout" +} + +{ + "label" : "suspend", + "action" : "systemctl suspend", + "text" : "Suspend" +} + +{ + "label": "hibernate", + "action": "systemctl hibernate", + "text": "Hibernate" +} diff --git a/wlogout/style.css b/wlogout/style.css new file mode 100644 index 0000000..1e1af3a --- /dev/null +++ b/wlogout/style.css @@ -0,0 +1,69 @@ +window { + background-color: rgba(17, 17, 17, 0.8); +} + +button { + margin: 4px; + color: #cdd6f4; + background-color: #1e1e2e; + background-repeat: no-repeat; + background-position: 50% 32%; + background-size: 25%; + border-radius: 10px; + transition: 0.2s ease-out all; +} + +button:focus, button:active, button:hover { + background-color: #89b4fa; + color: #1e1e2e; + box-shadow: none; +} + +#shutdown { + background-image: image(url("./icons/inactive/shutdown.png"), url("./icons/inactive/shutdown.png")); +} + +#reboot { + background-image: image(url("./icons/inactive/reboot.png"), url("./icons/inactive/reboot.png")); +} + +#suspend { + background-image: image(url("./icons/inactive/suspend.png"), url("./icons/inactive/suspend.png")); +} + +#lock { + background-image: image(url("./icons/inactive/lock.png"), url("./icons/inactive/lock.png")); +} + +#logout { + background-image: image(url("./icons/inactive/logout.png"), url("./icons/inactive/logout.png")); +} + +#hibernate { + background-image: image(url("./icons/inactive/hibernate.png"), url("./icons/inactive/hibernate.png")); +} + +#shutdown:focus, #shutdown:active, #shutdown:hover { + background-image: image(url("./icons/active/shutdown.png"), url("./icons/active/shutdown.png")); +} + +#reboot:focus, #reboot:active, #reboot:hover { + background-image: image(url("./icons/active/reboot.png"), url("./icons/active/reboot.png")); +} + +#suspend:focus, #suspend:active, #suspend:hover { + background-image: image(url("./icons/active/suspend.png"), url("./icons/active/suspend.png")); +} + +#lock:focus, #lock:active, #lock:hover { + background-image: image(url("./icons/active/lock.png"), url("./icons/active/lock.png")); +} + +#logout:focus, #logout:active, #logout:hover { + background-image: image(url("./icons/active/logout.png"), url("./icons/active/logout.png")); +} + +#hibernate:focus, #hibernate:active, #hibernate:hover { + background-image: image(url("./icons/active/hibernate.png"), url("./icons/active/hibernate.png")); +} + diff --git a/wofi/config b/wofi/config new file mode 100644 index 0000000..2073027 --- /dev/null +++ b/wofi/config @@ -0,0 +1,15 @@ +width=600 +height=400 +location=center +show=drun +prompt=Search... +filter_rate=100 +allow_markup=true +no_actions=true +halign=fill +orientation=vertical +content_halign=fill +insensitive=true +allow_images=true +image_size=40 +gtk_dark=true diff --git a/wofi/style.css b/wofi/style.css new file mode 100644 index 0000000..aa85d9a --- /dev/null +++ b/wofi/style.css @@ -0,0 +1,62 @@ +window { + border-radius: 16px; +} + +#input { + margin: 4px; + padding: 6px 18px; + border: none; + color: #cdd6f4; + background-color: #1e1e2e; + outline: none; + border-radius: 8px; + margin: 10px; + margin-bottom: 0; +} + +#input:first-child > :nth-child(1) { + margin-right: 12px; +} + +#input > * { + color: inherit; +} + +#input:focus { + margin: 12px; + margin-bottom: 0; +} + +#inner-box { +} + +#outer-box { +} + +#scroll { + margin: 16px; +} + +#img { + margin-right: 14px; +} + +#text { + color: #e2e7f9; + font-weight: bold; +} + +#text:selected { + color: #1e1e2e; +} + +#entry { + padding: 6px 8px; + border-radius: 8px; +} + +#entry:selected { + background-color: #89b4fa; + border: none; + outline: none; +}