From a7ad2b9aa4aac327002c5aa518b63070662bf500 Mon Sep 17 00:00:00 2001 From: Tovi Jaeschke-Rogers Date: Sat, 30 Dec 2023 15:31:15 +1030 Subject: [PATCH] Add hyperland configuration --- .config/hypr/hyprland.conf | 183 ++++++++++++++++++++++++++++++++++ .config/hypr/hyprpaper.conf | 4 + .config/hypr/start-in-tray.sh | 34 +++++++ .config/hypr/xdg.sh | 8 ++ .config/waybar/config | 161 ++++++++++++++++++++++++++++++ .config/waybar/style.css | 98 ++++++++++++++++++ .config/wofi/style.css | 46 +++++++++ 7 files changed, 534 insertions(+) create mode 100644 .config/hypr/hyprland.conf create mode 100644 .config/hypr/hyprpaper.conf create mode 100755 .config/hypr/start-in-tray.sh create mode 100755 .config/hypr/xdg.sh create mode 100644 .config/waybar/config create mode 100644 .config/waybar/style.css create mode 100644 .config/wofi/style.css diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf new file mode 100644 index 0000000..2c48b3b --- /dev/null +++ b/.config/hypr/hyprland.conf @@ -0,0 +1,183 @@ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=DVI-D-1,preferred,-1920x0,auto +monitor=HDMI-A-1,preferred,auto,auto + +# workspace binding +workspace=1,monitor:DVI-D-1 +workspace=2,monitor:HDMI-A-1 +workspace=3,monitor:HDMI-A-1 +workspace=4,monitor:HDMI-A-1 +workspace=5,monitor:HDMI-A-1 +workspace=6,monitor:HDMI-A-1 +workspace=7,monitor:HDMI-A-1 +workspace=8,monitor:HDMI-A-1 +workspace=9,monitor:HDMI-A-1 +workspace=10,monitor:HDMI-A-1 + + +# Execute your favorite apps at launch +exec-once = ~/.config/hypr/xdg.sh +exec-once = hyprpaper +exec-once = swayidle -w timeout 600 swaylock before-sleep swaylock +exec-once = ~/.config/hypr/start-in-tray.sh + +# Set programs that you use +$terminal = alacritty +$fileManager = dolphin +$menu = wofi --show drun + +# 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 + + touchpad { + natural_scroll = no + } + + 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 = 10 + border_size = 2 + col.active_border = rgba(33ccffee) rgba(00ff99ee) 45deg + col.inactive_border = rgba(595959aa) + + layout = master + + # 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 = 5 + + blur { + enabled = true + size = 3 + passes = 1 + } + + drop_shadow = yes + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) +} + +animations { + enabled = yes + + # 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 = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + new_is_master = true + new_on_top = true +} + +gestures { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + workspace_swipe = off +} + +misc { + # See https://wiki.hyprland.org/Configuring/Variables/ for more + force_default_wallpaper = 0 # Set to 0 to disable the anime mascot wallpapers +} + +# Example per-device config +# See https://wiki.hyprland.org/Configuring/Keywords/#executing 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 +windowrulev2 = nomaximizerequest, class:.* # You'll probably like this. + + +# See https://wiki.hyprland.org/Configuring/Keywords/ for more +$mainMod = SUPER + +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod SHIFT, Return, exec, $terminal +bind = $mainMod, Q, killactive, +bind = $mainMod SHIFT, Q, exit, +bind = $mainMod, V, togglefloating, +bind = $mainMod, P, exec, $menu + +# DWM style window management +bind = $mainMod, Return, layoutmsg, swapwithmaster +bind = $mainMod, J, layoutmsg, cyclenext +bind = $mainMod, K, layoutmsg, cycleprev +bind = $mainMod, I, layoutmsg, addmaster +bind = $mainMod, D, layoutmsg, removemaster + +# 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 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow diff --git a/.config/hypr/hyprpaper.conf b/.config/hypr/hyprpaper.conf new file mode 100644 index 0000000..15d6dac --- /dev/null +++ b/.config/hypr/hyprpaper.conf @@ -0,0 +1,4 @@ +preload = ~/Pictures/arch-wp-1.png + +wallpaper = DVI-D-1,~/Pictures/arch-wp-1.png +wallpaper = HDMI-A-1,~/Pictures/arch-wp-1.png diff --git a/.config/hypr/start-in-tray.sh b/.config/hypr/start-in-tray.sh new file mode 100755 index 0000000..dfb448b --- /dev/null +++ b/.config/hypr/start-in-tray.sh @@ -0,0 +1,34 @@ +#!/bin/sh +# start waybar and programs with tray icons after pause + +waybar_loop() { + # restart waybar on crash (after suspend mode) + WAYBAR_RESTARTS=0 + while [ $WAYBAR_RESTARTS != 6 ]; do # limited to 5 restars + pgrep Hyprland || break # exit if Hyprland is not running + waybar + let WAYBAR_RESTARTS++ + notify-send -a "start-in-tray.sh" "Waybar crashed!" + sleep 1 + done +} + +# wait for xdg-desktop-portal-hyprland to start +until pgrep -f 'xdg-desktop-portal-hyprland'; do echo 'test' && sleep 2; done + +# override monitor for workspace 2 and 4 with eDP-2 +# hyprctl monitors | grep eDP-2 && \ +# hyprctl --batch "keyword workspace 2,monitor:eDP-2 ; keyword workspace 4,monitor:eDP-2" + +waybar_loop & + +sleep 1 # wait for waybar + +nm-applet --indicator & +# crow & +# syncthingtray --wait & +XDG_CURRENT_DESKTOP=gnome telegram-desktop & +# blueman-applet & + +hyprctl dispatch workspace 1 +# hyprctl dispatch moveworkspacetomonitor 2 0 diff --git a/.config/hypr/xdg.sh b/.config/hypr/xdg.sh new file mode 100755 index 0000000..5a31a4a --- /dev/null +++ b/.config/hypr/xdg.sh @@ -0,0 +1,8 @@ +#!/bin/bash +sleep 1 +killall -e xdg-desktop-portal-hyprland +killall -e xdg-desktop-portal-wlr +killall xdg-desktop-portal +/usr/lib/xdg-desktop-portal-hyprland & +sleep 2 +/usr/lib/xdg-desktop-portal & diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..bde0d60 --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,161 @@ +{ + "layer": "top", // Waybar at top layer + "position": "top", // Waybar position (top|bottom|left|right) + "height": 34, // Waybar height (to be removed for auto height) + // "width": 1280, // Waybar width + "spacing": 4, // Gaps between modules (4px) + // Choose the order of the modules + "modules-left": ["hyprland/workspaces", "idle_inhibitor", "pulseaudio", "network", "custom/updates"], + "modules-center": ["hyprland/window"], + "modules-right": ["cpu", "memory", "temperature", "tray", "clock"], + // Modules configuration + "hyprland/workspaces": { + "disable-scroll": true, + "on-click": "activate", + "all-outputs": false, + // "format": "{name}: {icon}", + "format": "{name}", + "on-scroll-up": "hyprctl dispatch workspace m-1 > /dev/null", + "on-scroll-down": "hyprctl dispatch workspace m+1 > /dev/null", + }, + "keyboard-state": { + "numlock": false, + "capslock": false, + "format": "{name} {icon}", + "format-icons": { + "locked": "", + "unlocked": "" + } + }, + "hyprland/window": { + "max-length": 50, + "separate-outputs": true + }, + "mpd": { + "format": "{stateIcon} {consumeIcon}{randomIcon}{repeatIcon}{singleIcon}{artist} - {album} - {title} ({elapsedTime:%M:%S}/{totalTime:%M:%S}) ⸨{songPosition}|{queueLength}⸩ {volume}% ", + "format-disconnected": "Disconnected ", + "format-stopped": "{consumeIcon}{randomIcon}{repeatIcon}{singleIcon}Stopped ", + "unknown-tag": "N/A", + "interval": 2, + "consume-icons": { + "on": " " + }, + "random-icons": { + "off": " ", + "on": " " + }, + "repeat-icons": { + "on": " " + }, + "single-icons": { + "on": "1 " + }, + "state-icons": { + "paused": "", + "playing": "" + }, + "tooltip-format": "MPD (connected)", + "tooltip-format-disconnected": "MPD (disconnected)" + }, + "idle_inhibitor": { + "format": "{icon}", + "format-icons": { + "activated": "", + "deactivated": "" + } + }, + "tray": { + "spacing": 0 + }, + "clock": { + "tooltip-format": "{:%Y %B}\n{calendar}", + "format-alt": "{:%Y-%m-%d}" + }, + "cpu": { + "format": "{usage}% ", + "tooltip": false + }, + "memory": { + "format": "{}% " + }, + "temperature": { + "critical-threshold": 80, + "format": "{temperatureC}°C {icon}", + "format-icons": ["", "", ""] + }, + "battery": { + "states": { + // "good": 95, + "warning": 30, + "critical": 15 + }, + "format": "{capacity}% {icon}", + "format-charging": "{capacity}% 🗲", + "format-plugged": "{capacity}% ", + "format-alt": "{time} {icon}", + // "format-good": "", // An empty format will hide the module + // "format-full": "", + "format-icons": ["", "", "", "", ""] + }, + "battery#bat2": { + "bat": "BAT2" + }, + "network": { + // "interface": "wlan0", // (Optional) To force the use of this interface + "format-wifi": "{essid} ", + "format-ethernet": "{ipaddr}/{cidr} ", + "tooltip-format": "{ifname} via {gwaddr} ", + "format-linked": "{ifname} (No IP) ", + "format-disconnected": "Disconnected ⚠", + "format-alt": "{ifname}: {ipaddr}/{cidr}" + }, + "pulseaudio": { + // "scroll-step": 10, // %, can be a float + "format": "{volume}%{icon} {format_source}", + "format-bluetooth": "{volume}% {icon} {format_source}", + "format-bluetooth-muted": " {icon} {format_source}", + "format-muted": " {format_source}", + "format-source": "{volume}% ", + "format-source-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["", "", ""] + }, + "on-click": "pavucontrol" + }, + "custom/notification": { + "tooltip": false, + "format": "{} {icon}", + "format-icons": { + "notification": " ", + "none": "", + "dnd-notification": " ", + "dnd-none": "", + "inhibited-notification": " ", + "inhibited-none": "", + "dnd-inhibited-notification": " ", + "dnd-inhibited-none": "" + }, + "return-type": "json", + "exec-if": "which swaync-client", + "exec": "swaync-client -swb", + "on-click": "sleep 0.1 && swaync-client -t -sw", + "on-click-right": "swaync-client -d -sw", + "escape": true + }, + "custom/updates": { + "format": "{} {icon}", + "return-type": "json", + "format-icons": { + "has-updates": "󱍷", + "updated": "󰂪" + }, + "exec-if": "which waybar-module-pacman-updates", + "exec": "waybar-module-pacman-updates" + } +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..78e39a6 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,98 @@ +@define-color base00 #181818; +@define-color base01 #2b2e37; +@define-color base02 #3b3e47; +@define-color base03 #585858; +@define-color base04 #b8b8b8; +@define-color base05 #d8d8d8; +@define-color base06 #e8e8e8; +@define-color base07 #f8f8f8; +@define-color base08 #ab4642; +@define-color base09 #dc9656; +@define-color base0A #f7ca88; +@define-color base0B #a1b56c; +@define-color base0C #86c1b9; +@define-color base0D #7cafc2; +@define-color base0E #ba8baf; +@define-color base0F #a16946; + +* { + transition: none; + box-shadow: none; +} + +#waybar { + font-family: 'Source Code Pro', sans-serif; + font-size: 1.2em; + font-weight: 400; + color: @base04; + background: @base01; +} + +#workspaces { + margin: 0 4px; +} + +#workspaces button { + margin: 4px 0; + padding: 0 4px; + color: @base05; +} + +#workspaces button.visible { +} + +#workspaces button.active { + border-radius: 4px; + background-color: @base02; +} + +#workspaces button.urgent { + color: rgba(238, 46, 36, 1); +} + +#tray { + margin: 4px 4px 4px 4px; + border-radius: 4px; + background-color: @base02; +} + +#tray * { + padding: 0 6px; + border-left: 1px solid @base00; +} + +#tray *:first-child { + border-left: none; +} + +#mode, #battery, #cpu, #memory, #network, #pulseaudio, #idle_inhibitor, #backlight, #custom-storage, #custom-updates, #custom-weather, #custom-mail, #clock, #temperature { + margin: 4px 2px; + padding: 0 6px; + background-color: @base02; + border-radius: 4px; + min-width: 20px; +} + +#pulseaudio.muted { + color: @base0F; +} + +#pulseaudio.bluetooth { + color: @base0C; +} + +#clock { + margin-left: 0px; + margin-right: 4px; + background-color: transparent; +} + +#temperature.critical { + color: @base0F; +} + +#window { + font-size: 0.9em; + font-weight: 400; + font-family: sans-serif; +} diff --git a/.config/wofi/style.css b/.config/wofi/style.css new file mode 100644 index 0000000..360e44d --- /dev/null +++ b/.config/wofi/style.css @@ -0,0 +1,46 @@ +/* +Arc-Dark Color Scheme +*/ + +@define-color highlight #fbf1c7; +@define-color base1 #ffffff; +@define-color base3 #282828; + +*{ + font-family: UbuntuMono; +} + +window { + border: 1px solid @highlight; +} + +#input { + margin-bottom: 15px; + padding:3px; + border-radius: 5px; + border:none; + color: #282828; +} + +#inner-box { + background-color: @base3; +} + +#outer-box { + margin: 1px; + padding:15px; + background-color: #282828; +} + +#text { + padding: 5px; + color: @highlight; +} + +#entry:nth-child() { + color: @base1; +} + +#entry:selected { + border: 2px solid @highlight; +}