From cf72da26d14d33d9c3d03d26566dec887e68af91 Mon Sep 17 00:00:00 2001 From: Maxwell Jeffress Date: Tue, 5 Aug 2025 08:18:20 +1000 Subject: [PATCH] initial commit --- hypr/hyprland.conf | 294 ++++++++++++++++++++++++++++++++++ hypr/hyprlock.conf | 73 +++++++++ hypr/hyprshade/bluelight.glsl | 8 + install.sh | 11 ++ waybar/config | 94 +++++++++++ waybar/refresh.sh | 2 + waybar/scripts/colorpicker.sh | 60 +++++++ waybar/style.css | 168 +++++++++++++++++++ 8 files changed, 710 insertions(+) create mode 100644 hypr/hyprland.conf create mode 100644 hypr/hyprlock.conf create mode 100644 hypr/hyprshade/bluelight.glsl create mode 100755 install.sh create mode 100644 waybar/config create mode 100755 waybar/refresh.sh create mode 100755 waybar/scripts/colorpicker.sh create mode 100644 waybar/style.css diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..9993f5a --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,294 @@ + +# ####################################################################################### +# AUTOGENERATED HYPR CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hypr.conf AND EDIT IT, +# OR EDIT THIS ONE ACCORDING TO THE WIKI INSTRUCTIONS. +# ####################################################################################### + +# This is an example Hyprland config file. +# Refer to the wiki for more information. +# https://wiki.hyprland.org/Configuring/Configuring-Hyprland/ + +# Please note not all available settings / options are set here. +# For a full list, see the wiki + +# You can split this configuration into multiple files +# Create your files separately and then link them to this file like this: +# source = ~/.config/hypr/myColors.conf + + +################ +### MONITORS ### +################ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=,preferred,auto,1 + + +################### +### MY PROGRAMS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ + +# Set programs that you use +$terminal = kitty +$fileManager = dolphin +#$menu = albert toggle +$menu = wofi --show drun + +windowrule=noblur on,title:Albert +windowrule=noborder on,title:Albert + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: + +# exec-once = $terminal +exec-once = 1password --silent +exec-once = pulseaudio & +exec-once = swaync & +exec-once = waybar & swaybg -m fit -i ~/Pictures/Wallpapers/top.jpg -c 000000 +exec-once = /usr/lib/polkit-kde-authentication-agent-1 +# exec-once = hyprshade on /home/max/.config/hypr/hyprshade/bluelight.glsl +exec-once = /usr/bin/kdeconnectd +exec-once = hyprctl setcursor Breeze 24 +exec-once = protonmail-bridge +exec-once = albert + +permission = /usr/(bin|local/bin)/hyprpm, plugin, allow + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 +env = QT_QPA_PLATFORM,wayland +env = QT_QPA_PLATFORMTHEME,qt5ct +env = QT_WAYLAND_DISABLE_WINDOWDECORATION,1 +env = QT_AUTO_SCREEN_SCALE_FACTOR,1 +env = QT_STYLE_OVERRIDE,qt6ct-style + +##################### +### LOOK AND FEEL ### +##################### + +# Refer to https://wiki.hyprland.org/Configuring/Variables/ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 5 + gaps_out = 5 + + border_size = 1 + + # https://wiki.hyprland.org/Configuring/Variables/#variable-types for info about colors + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = true + + # Please see https://wiki.hyprland.org/Configuring/Tearing/ before you turn this on + allow_tearing = false + + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 7 + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 1.0 + + + #drop_shadow = true + #shadow_range = 4 + #shadow_render_power = 3 + #col.shadow = rgba(1a1a1aee) + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = true + size = 3 + passes = 1 + + vibrancy = 0.1696 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = true + + # 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 +} + +# See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more +dwindle { + pseudotile = true # Master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = true # You probably want this +} + +# See https://wiki.hyprland.org/Configuring/Master-Layout/ for more +master { + new_status = master +} + +# https://wiki.hyprland.org/Configuring/Variables/#misc +misc { + force_default_wallpaper = -1 # Set to 0 or 1 to disable the anime mascot wallpapers + disable_hyprland_logo = false # If true disables the random hyprland logo / anime girl background. :( +} + + +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = us + kb_variant = ,qwerty + kb_model = + kb_options = + kb_rules = + + follow_mouse = 1 + + sensitivity = 0.25 # -1.0 - 1.0, 0 means no modification. + + + + touchpad { + natural_scroll = true + disable_while_typing = false + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = true +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#per-device-input-configs for more +device { + name = epic-mouse-v1 + sensitivity = -0.5 +} + + +#################### +### KEYBINDINGSS ### +#################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = $mainMod, R, exec, $menu +bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle +bind = $mainMod, L, exec, hyprlock +bind = $mainMod, S, exec, hyprshot -m region +bind = $mainMod, T, exec, 1password --quick-access + +# Move focus with mainMod + arrow keys +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, 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 + +# 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 + +bind = $mainMod SHIFT, F23, exec, $terminal + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + + +############################## +### WINDOWS AND WORKSPACES ### +############################## + +# See https://wiki.hyprland.org/Configuring/Window-Rules/ for more +# See https://wiki.hyprland.org/Configuring/Workspace-Rules/ for workspace rules + +# Example windowrule v1 +# windowrule = float, ^(kitty)$ + +# Example windowrule v2 +# windowrulev2 = float,class:^(kitty)$,title:^(kitty)$ + +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + +layerrule = blur, waybar +layerrule = ignorezero, waybar +layerrule = ignorealpha 0.5, waybar + +layerrule = blur, swaync-control-center +layerrule = blur, swaync-notification-window +layerrule = ignorezero, swaync-control-center +layerrule = ignorezero, swaync-notification-window +layerrule = ignorealpha 0.5, swaync-control-center +layerrule = ignorealpha 0.5, swaync-notification-window + +env = XDG_MENU_PREFIX,arch- + +plugin:dynamic-cursors { + enabled = true + mode = tilt +} diff --git a/hypr/hyprlock.conf b/hypr/hyprlock.conf new file mode 100644 index 0000000..c440647 --- /dev/null +++ b/hypr/hyprlock.conf @@ -0,0 +1,73 @@ +# sample hyprlock.conf +# for more configuration options, refer https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock +# +# rendered text in all widgets supports pango markup (e.g. or tags) +# ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#general-remarks +# +# shortcuts to clear password buffer: ESC, Ctrl+U, Ctrl+Backspace +# +# you can get started by copying this config to ~/.config/hypr/hyprlock.conf +# + +$font = Inter + +general { + hide_cursor = true +} + +animations { + enabled = true + bezier = linear, 1, 1, 0, 0 + animation = fadeIn, 1, 5, linear + animation = fadeOut, 1, 5, linear + animation = inputFieldDots, 1, 2, linear +} + +background { + monitor = + path = /home/max/Pictures/Wallpapers/blue.png + blur_passes = 0 +} + +input-field { + monitor = + size = 20%, 5% + outline_thickness = 3 + inner_color = rgba(0, 0, 0, 0.0) # no fill + + outer_color = rgba(33ccffee) rgba(00ff99ee) 45deg + check_color = rgba(00ff99ee) rgba(ff6633ee) 120deg + fail_color = rgba(ff6633ee) rgba(ff0066ee) 40deg + + font_color = rgb(143, 143, 143) + fade_on_empty = false + rounding = 15 + + font_family = $font + placeholder_text = Password... + fail_text = $PAMFAIL + + # uncomment to use a letter instead of a dot to indicate the typed password + # dots_text_format = * + # dots_size = 0.4 + dots_spacing = 0.3 + + # uncomment to use an input indicator that does not show the password length (similar to swaylock's input indicator) + # hide_input = true + + position = 0, 50 + halign = center + valign = bottom +} + +# TIME +label { + monitor = + text = $TIME # ref. https://wiki.hyprland.org/Hypr-Ecosystem/hyprlock/#variable-substitution + font_size = 30 + font_family = $font + + position = 0, 140 + halign = center + valign = bottom +} diff --git a/hypr/hyprshade/bluelight.glsl b/hypr/hyprshade/bluelight.glsl new file mode 100644 index 0000000..a224ace --- /dev/null +++ b/hypr/hyprshade/bluelight.glsl @@ -0,0 +1,8 @@ +precision highp float; +varying vec2 v_texcoord; +uniform sampler2D tex; + +void main() { + vec4 pixColor = texture2D(tex, v_texcoord); + gl_FragColor = vec4(pixColor.r, pixColor.g, pixColor.b*0.8, pixColor.a); +} diff --git a/install.sh b/install.sh new file mode 100755 index 0000000..b1a000c --- /dev/null +++ b/install.sh @@ -0,0 +1,11 @@ +#!/usr/bin/env bash + +# Install dependencies + +sudo pacman -S --needed hyprland hyprcursor hyprlock swaybg kitty wofi + +# Copy things into place + +cp -r * ~/.config/ + +echo "Done!" diff --git a/waybar/config b/waybar/config new file mode 100644 index 0000000..b314721 --- /dev/null +++ b/waybar/config @@ -0,0 +1,94 @@ +{ + "layer": "top", + "position": "top", + "reload_style_on_change": true, + "modules-left": ["custom/notification","clock","custom/pacman","tray"], + "modules-center": ["hyprland/workspaces"], + "modules-right": ["group/expand","bluetooth","network","battery","power-profiles-daemon"], + + + "hyprland/workspaces": { + "format": "{icon}", + "format-icons": { + "active": "", + "default": "", + "empty": "" + }, + "persistent-workspaces": { + "*": [ 1,2,3,4,5 ] + } + }, + "custom/notification": { + "tooltip": false, + "format": "Menu", + "on-click": "swaync-client -t -sw", + "escape": true + }, + "clock": { + "format": "{:%H:%M:%S %A %b %d} ", + "interval": 1, + "tooltip-format": "{calendar}", + "calendar": { + "format": { + "today": "{}" + } + }, + "actions": { + "on-click-right": "shift_down", + "on-click": "shift_up" + } + }, + "network": { + "format-wifi": "", + "format-ethernet":"", + "format-disconnected": "", + "tooltip-format-disconnected": "Error", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} 🖧 ", + "on-click": "kitty nmtui" + }, + "power-profiles-daemon": { + "format": "{icon}", + "tooltip-format": "Power profile: {profile}\nDriver: {driver}", + "tooltip": true, + "format-icons": { + "default": "", + "performance": "", + "balanced": "", + "power-saver": "" + } + }, + "battery": { + "interval":1, + "states": { + "good": 95, + "warning": 30, + "critical": 20 + }, + "format": "{capacity}%", + "format-charging": "{capacity}%", + "format-plugged": "{capacity}%", + "format-alt": "{time}", + }, + "custom/expand": { + "format": "", + "tooltip": false + }, + "custom/endpoint":{ + "format": "|", + "tooltip": false + }, + "group/expand": { + "orientation": "horizontal", + "drawer": { + "transition-duration": 600, + "transition-to-left": true, + "click-to-reveal": true + }, + "modules": ["custom/expand", "custom/colorpicker","cpu","memory","temperature","custom/endpoint"], + }, + "tray": { + "icon-size": 14, + "spacing": 10 + }, +} diff --git a/waybar/refresh.sh b/waybar/refresh.sh new file mode 100755 index 0000000..adec096 --- /dev/null +++ b/waybar/refresh.sh @@ -0,0 +1,2 @@ +pkill waybar +waybar diff --git a/waybar/scripts/colorpicker.sh b/waybar/scripts/colorpicker.sh new file mode 100755 index 0000000..28eb819 --- /dev/null +++ b/waybar/scripts/colorpicker.sh @@ -0,0 +1,60 @@ +#!/usr/bin/env bash + +check() { + command -v "$1" 1>/dev/null +} + +notify() { + check notify-send && { + notify-send -a "Color Picker" "$@" + return + } + echo "$@" +} + +loc="$HOME/.cache/colorpicker" +[ -d "$loc" ] || mkdir -p "$loc" +[ -f "$loc/colors" ] || touch "$loc/colors" + +limit=10 + +[[ $# -eq 1 && $1 = "-l" ]] && { + cat "$loc/colors" + exit +} + +[[ $# -eq 1 && $1 = "-j" ]] && { + text="$(head -n 1 "$loc/colors")" + + mapfile -t allcolors < <(tail -n +2 "$loc/colors") + # allcolors=($(tail -n +2 "$loc/colors")) + tooltip=" COLORS\n\n" + + tooltip+="-> $text \n" + for i in "${allcolors[@]}"; do + tooltip+=" $i \n" + done + + cat <", "tooltip":"$tooltip"} +EOF + + exit +} + +check hyprpicker || { + notify "hyprpicker is not installed" + exit +} +killall -q hyprpicker +color=$(hyprpicker) + +check wl-copy && { + echo "$color" | sed -z 's/\n//g' | wl-copy +} + +prevColors=$(head -n $((limit - 1)) "$loc/colors") +echo "$color" >"$loc/colors" +echo "$prevColors" >>"$loc/colors" +sed -i '/^$/d' "$loc/colors" +pkill -RTMIN+1 waybar diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..e15ed66 --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,168 @@ + +* { + font-size:15px; + font-family: "Inter"; +} +window#waybar{ + all:unset; +} +.modules-left { + padding:7px; + margin:5px; + border-radius:10px; + background: alpha(@background,.5); + box-shadow: 0px 0px 2px rgba(0, 0, 0, .5); +} +.modules-center { + padding:7px; + margin:5px; + border-radius:10px; + background: alpha(@background,.5); + box-shadow: 0px 0px 2px rgba(0, 0, 0, .5); +} +.modules-right { + padding:7px; + margin:5px; + border-radius:10px; + background: alpha(@background,.5); + box-shadow: 0px 0px 2px rgba(0, 0, 0, .5); +} +tooltip { + background:@background; + color: @color7; +} +#clock:hover, #custom-pacman:hover, #custom-notification:hover,#bluetooth:hover,#network:hover,#battery:hover, #cpu:hover,#memory:hover,#temperature:hover{ + transition: all .3s ease; + color:@color9; +} +#custom-notification { + padding: 0px 5px; + transition: all .3s ease; + color:@color7; +} +#clock{ + padding: 0px 5px; + color:@color7; + transition: all .3s ease; +} +#custom-pacman{ + padding: 0px 5px; + transition: all .3s ease; + color:@color7; + +} +#workspaces { + padding: 0px 5px; +} +#workspaces button { + all:unset; + padding: 0px 5px; + color: rgba(0,0,0,0); + text-shadow: 0px 0px 1px rgba(0, 0, 0, .4); +} +#workspaces button:hover { + color:rgba(0,0,0,0); + text-shadow: 0px 0px 1px rgba(0, 0, 0, .7); + transition: all 1s ease; +} +#workspaces button.active { + color: @color9; + border: none; + transition: all 1s ease; +} +#workspaces button.empty { + color: rgba(0,0,0,0); + border: none; + text-shadow: 0px 0px 1.5px rgba(0, 0, 0, .2); +} +#workspaces button.empty:hover { + color: rgba(0,0,0,0); + border: none; + text-shadow: 0px 0px 1.5px rgba(0, 0, 0, .5); + transition: all 1s ease; +} +#workspaces button.empty.active { + color: @color9; + border: none; + transition: all 1s ease; +} +#bluetooth{ + padding: 0px 5px; + transition: all .3s ease; + color:@color7; + +} +#network{ + padding: 0px 5px; + transition: all .3s ease; + color:@color7; + +} +#battery{ + padding: 0px 5px; + transition: all .3s ease; + color:@color7; + + +} +#battery.charging { + color: #26A65B; +} + +#battery.warning:not(.charging) { + color: #ffbe61; +} + +#battery.critical:not(.charging) { + color: #f53c3c; + animation-name: blink; + animation-duration: 0.5s; + animation-timing-function: linear; + animation-iteration-count: infinite; + animation-direction: alternate; +} +#group-expand{ + padding: 0px 5px; + transition: all .3s ease; +} +#custom-expand{ + padding: 0px 5px; + color:alpha(@foreground,.2); + text-shadow: 0px 0px 2px rgba(0, 0, 0, .7); + transition: all .3s ease; +} +#custom-expand:hover{ + color:rgba(255,255,255,.2); + text-shadow: 0px 0px 2px rgba(255, 255, 255, .5); +} +#custom-colorpicker{ + padding: 0px 5px; +} +#cpu,#memory,#temperature{ + padding: 0px 5px; + transition: all .3s ease; + color:@color7; + +} +#custom-endpoint{ + color:transparent; + text-shadow: 0px 0px 1.5px rgba(0, 0, 0, 1); + +} +#tray{ + padding: 0px 5px; + transition: all .3s ease; + +} +#tray menu * { + padding: 0px 5px; + transition: all .3s ease; +} + +#tray menu separator { + padding: 0px 5px; + transition: all .3s ease; +} +#power-profiles-daemon { + color: white; +}