diff --git a/Makefile b/Makefile index a488d93..46fff06 100644 --- a/Makefile +++ b/Makefile @@ -56,3 +56,12 @@ zsh: -git clone https://github.com/sunlei/zsh-ssh ~/.config/zsh/plugins/zsh-ssh mkdir -p ~/.config/zsh/plugins/bd curl https://raw.githubusercontent.com/Tarrasch/zsh-bd/master/bd.zsh > ~/.config/zsh/plugins/bd/bd.zsh + + +### Arch / Hyprland +hyprach: + ln -fs ~/Git/dotfiles/home/.config/alacrity ~/.config/ + ln -fs ~/Git/dotfiles/home/.config/btop ~/.config/ + ln -fs ~/Git/dotfiles/home/.config/eww ~/.config/ + ln -fs ~/Git/dotfiles/home/.config/hypr ~/.config/ + ln -fs ~/Git/dotfiles/home/.config/rofi ~/.config/ diff --git a/home/.config/alacritty/alacritty.toml b/home/.config/alacritty/alacritty.toml new file mode 100644 index 0000000..269b1e1 --- /dev/null +++ b/home/.config/alacritty/alacritty.toml @@ -0,0 +1,23 @@ +import = [ + "~/.config/alacritty/themes/themes/tomorrow_night_bright.toml" +] + +shell = '/bin/zsh' + +[window] +padding = { x = 16, y = 8 } +dynamic_title = true +opacity = 0.6 +blur = true + +[scrolling] +history = 10000 +multiplier = 3 + +[font] +normal = { family = "CaskaydiaMono Nerd Font" } +size = 12 +offset = { y = 1 } + +[cursor] +style = { shape = "Beam", blinking = "Always" } diff --git a/home/.config/btop/btop.conf b/home/.config/btop/btop.conf new file mode 100644 index 0000000..d8e594d --- /dev/null +++ b/home/.config/btop/btop.conf @@ -0,0 +1,248 @@ +#? Config file for btop v. 1.3.2 + +#* Name of a btop++/bpytop/bashtop formatted ".theme" file, "Default" and "TTY" for builtin themes. +#* Themes should be placed in "../share/btop/themes" relative to binary or "$HOME/.config/btop/themes" +color_theme = "/usr/share/btop/themes/matcha-dark-sea.theme" + +#* If the theme set background should be shown, set to False if you want terminal background transparency. +theme_background = False + +#* Sets if 24-bit truecolor should be used, will convert 24-bit colors to 256 color (6x6x6 color cube) if false. +truecolor = True + +#* Set to true to force tty mode regardless if a real tty has been detected or not. +#* Will force 16-color mode and TTY theme, set all graph symbols to "tty" and swap out other non tty friendly symbols. +force_tty = False + +#* Define presets for the layout of the boxes. Preset 0 is always all boxes shown with default settings. Max 9 presets. +#* Format: "box_name:P:G,box_name:P:G" P=(0 or 1) for alternate positions, G=graph symbol to use for box. +#* Use whitespace " " as separator between different presets. +#* Example: "cpu:0:default,mem:0:tty,proc:1:default cpu:0:braille,proc:0:tty" +presets = "cpu:1:default,proc:0:default cpu:0:default,mem:0:default,net:0:default cpu:0:block,net:0:tty" + +#* Set to True to enable "h,j,k,l,g,G" keys for directional control in lists. +#* Conflicting keys for h:"help" and k:"kill" is accessible while holding shift. +vim_keys = False + +#* Rounded corners on boxes, is ignored if TTY mode is ON. +rounded_corners = True + +#* Default symbols to use for graph creation, "braille", "block" or "tty". +#* "braille" offers the highest resolution but might not be included in all fonts. +#* "block" has half the resolution of braille but uses more common characters. +#* "tty" uses only 3 different symbols but will work with most fonts and should work in a real TTY. +#* Note that "tty" only has half the horizontal resolution of the other two, so will show a shorter historical view. +graph_symbol = "braille" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_cpu = "default" + +# Graph symbol to use for graphs in gpu box, "default", "braille", "block" or "tty". +graph_symbol_gpu = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_mem = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_net = "default" + +# Graph symbol to use for graphs in cpu box, "default", "braille", "block" or "tty". +graph_symbol_proc = "default" + +#* Manually set which boxes to show. Available values are "cpu mem net proc" and "gpu0" through "gpu5", separate values with whitespace. +shown_boxes = "cpu mem net proc" + +#* Update time in milliseconds, recommended 2000 ms or above for better sample times for graphs. +update_ms = 2000 + +#* Processes sorting, "pid" "program" "arguments" "threads" "user" "memory" "cpu lazy" "cpu direct", +#* "cpu lazy" sorts top process over time (easier to follow), "cpu direct" updates top process directly. +proc_sorting = "cpu lazy" + +#* Reverse sorting order, True or False. +proc_reversed = False + +#* Show processes as a tree. +proc_tree = False + +#* Use the cpu graph colors in the process list. +proc_colors = True + +#* Use a darkening gradient in the process list. +proc_gradient = True + +#* If process cpu usage should be of the core it's running on or usage of the total available cpu power. +proc_per_core = True + +#* Show process memory as bytes instead of percent. +proc_mem_bytes = True + +#* Show cpu graph for each process. +proc_cpu_graphs = True + +#* Use /proc/[pid]/smaps for memory information in the process info box (very slow but more accurate) +proc_info_smaps = False + +#* Show proc box on left side of screen instead of right. +proc_left = False + +#* (Linux) Filter processes tied to the Linux kernel(similar behavior to htop). +proc_filter_kernel = False + +#* In tree-view, always accumulate child process resources in the parent process. +proc_aggregate = False + +#* Sets the CPU stat shown in upper half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_upper = "Auto" + +#* Sets the CPU stat shown in lower half of the CPU graph, "total" is always available. +#* Select from a list of detected attributes from the options menu. +cpu_graph_lower = "Auto" + +#* If gpu info should be shown in the cpu box. Available values = "Auto", "On" and "Off". +show_gpu_info = "Auto" + +#* Toggles if the lower CPU graph should be inverted. +cpu_invert_lower = True + +#* Set to True to completely disable the lower CPU graph. +cpu_single_graph = False + +#* Show cpu box at bottom of screen instead of top. +cpu_bottom = False + +#* Shows the system uptime in the CPU box. +show_uptime = True + +#* Show cpu temperature. +check_temp = True + +#* Which sensor to use for cpu temperature, use options menu to select from list of available sensors. +cpu_sensor = "Auto" + +#* Show temperatures for cpu cores also if check_temp is True and sensors has been found. +show_coretemp = True + +#* Set a custom mapping between core and coretemp, can be needed on certain cpus to get correct temperature for correct core. +#* Use lm-sensors or similar to see which cores are reporting temperatures on your machine. +#* Format "x:y" x=core with wrong temp, y=core with correct temp, use space as separator between multiple entries. +#* Example: "4:0 5:1 6:3" +cpu_core_map = "" + +#* Which temperature scale to use, available values: "celsius", "fahrenheit", "kelvin" and "rankine". +temp_scale = "celsius" + +#* Use base 10 for bits/bytes sizes, KB = 1000 instead of KiB = 1024. +base_10_sizes = False + +#* Show CPU frequency. +show_cpu_freq = True + +#* Draw a clock at top of screen, formatting according to strftime, empty string to disable. +#* Special formatting: /host = hostname | /user = username | /uptime = system uptime +clock_format = "%X" + +#* Update main ui in background when menus are showing, set this to false if the menus is flickering too much for comfort. +background_update = False + +#* Custom cpu model name, empty string to disable. +custom_cpu_name = "" + +#* Optional filter for shown disks, should be full path of a mountpoint, separate multiple values with whitespace " ". +#* Begin line with "exclude=" to change to exclude filter, otherwise defaults to "most include" filter. Example: disks_filter="exclude=/boot /home/user". +disks_filter = "" + +#* Show graphs instead of meters for memory values. +mem_graphs = True + +#* Show mem box below net box instead of above. +mem_below_net = False + +#* Count ZFS ARC in cached and available memory. +zfs_arc_cached = True + +#* If swap memory should be shown in memory box. +show_swap = False + +#* Show swap as a disk, ignores show_swap value above, inserts itself after first disk. +swap_disk = False + +#* If mem box should be split to also show disks info. +show_disks = True + +#* Filter out non physical disks. Set this to False to include network disks, RAM disks and similar. +only_physical = True + +#* Read disks list from /etc/fstab. This also disables only_physical. +use_fstab = True + +#* Setting this to True will hide all datasets, and only show ZFS pools. (IO stats will be calculated per-pool) +zfs_hide_datasets = False + +#* Set to true to show available disk space for privileged users. +disk_free_priv = False + +#* Toggles if io activity % (disk busy time) should be shown in regular disk usage view. +show_io_stat = True + +#* Toggles io mode for disks, showing big graphs for disk read/write speeds. +io_mode = False + +#* Set to True to show combined read/write io graphs in io mode. +io_graph_combined = False + +#* Set the top speed for the io graphs in MiB/s (100 by default), use format "mountpoint:speed" separate disks with whitespace " ". +#* Example: "/mnt/media:100 /:20 /boot:1". +io_graph_speeds = "" + +#* Set fixed values for network graphs in Mebibits. Is only used if net_auto is also set to False. +net_download = 100 + +net_upload = 100 + +#* Use network graphs auto rescaling mode, ignores any values set above and rescales down to 10 Kibibytes at the lowest. +net_auto = True + +#* Sync the auto scaling for download and upload to whichever currently has the highest scale. +net_sync = True + +#* Starts with the Network Interface specified here. +net_iface = "" + +#* Show battery stats in top right if battery is present. +show_battery = False + +#* Which battery to use if multiple are present. "Auto" for auto detection. +selected_battery = "Auto" + +#* Show power stats of battery next to charge indicator. +show_battery_watts = False + +#* Set loglevel for "~/.config/btop/btop.log" levels are: "ERROR" "WARNING" "INFO" "DEBUG". +#* The level set includes all lower levels, i.e. "DEBUG" will show all logging info. +log_level = "WARNING" + +#* Measure PCIe throughput on NVIDIA cards, may impact performance on certain cards. +nvml_measure_pcie_speeds = True + +#* Horizontally mirror the GPU graph. +gpu_mirror_graph = True + +#* Custom gpu0 model name, empty string to disable. +custom_gpu_name0 = "" + +#* Custom gpu1 model name, empty string to disable. +custom_gpu_name1 = "" + +#* Custom gpu2 model name, empty string to disable. +custom_gpu_name2 = "" + +#* Custom gpu3 model name, empty string to disable. +custom_gpu_name3 = "" + +#* Custom gpu4 model name, empty string to disable. +custom_gpu_name4 = "" + +#* Custom gpu5 model name, empty string to disable. +custom_gpu_name5 = "" diff --git a/home/.config/eww/eww.scss b/home/.config/eww/eww.scss new file mode 100644 index 0000000..c3aedbd --- /dev/null +++ b/home/.config/eww/eww.scss @@ -0,0 +1,96 @@ +* { + all: unset; +} + +.bar { + font-family: "FiraCode Nerd Fonot"; + border-radius: 8px; +} + + +.interactive, .workspace { + border-radius: 4px; + margin: 4px 0; + transition: background-color 0.4s ease; +} + +.workspace { + padding: 0 8px; +} + +.workspace.current { + background-color: #fff; + color: #000; + font-weight: bold; +} + +.interactive:not(.active):hover, +.workspace:not(.current):hover { + background-color: rgba(255, 255, 255, 0.3); +} + +.box { + background-color: rgba(255, 255, 255, 0.2); + border-radius: 8px; + padding-left: 8px; + padding-right: 12px; +} + +.right > :not(:first-child) { + margin-left: 8px; +} + +.audio-source { + margin-top: 6px; + padding-left: 8px; + padding-right: 12px; +} + +.audio-source-2 { + padding-left: 8px; + padding-right: 10px; +} + +.volume { + padding-right: 6px; +} + +.kbd-layout { + padding: 0 8px; +} + +.control-centre { + background-color: rgba(0, 0, 0, 0.8); + padding: 16px 32px; + +} + +.media-status { + padding-right: 8px; + padding-left: 8px; +} + +.media-window { + .media-cover { + border-radius: 8px; + border: 2px solid #fff; + background-size: contain; + + } + + .media-controls { + margin-top: 16px; + } + + .media-button { + border-radius: 8px; + padding: 32px 0; + background-color: rgba(255, 255, 255, 0.4); + transition: background-color 0.4s ease; + + &:hover { + background-color: rgba(255, 255, 255, 0.2); + } + } + +} diff --git a/home/.config/eww/eww.yuck b/home/.config/eww/eww.yuck new file mode 100644 index 0000000..5570437 --- /dev/null +++ b/home/.config/eww/eww.yuck @@ -0,0 +1,76 @@ + +(include "./widgets/active-window/active-window.yuck") +(include "./widgets/audio/audio.yuck") +; (include "./widgets/brightness/brightness.yuck") +(include "./widgets/clock/clock.yuck") +(include "./widgets/kbd-layout/kbd-layout.yuck") +(include "./widgets/media/media.yuck") +(include "./widgets/workspaces/workspaces.yuck") + + +(defwidget right [] + (box :class "box right" + :orientation "h" + :space-evenly false + :halign "end" + (systray :hexpand true :class "systray" :icon-size 18 :spacing 4) + (kbd-layout) + (audio) + (media) + ; (brightness) + (clock) + )) + + +(defwindow bar + :monitor 0 + :geometry (geometry :x "0%" + :y "4px" + :width "99.7%" + :height "32px" + :anchor "top center" + ) + :exclusive true + :windowtype "dock" + :wm-ignore false + :focusable false + (box :class "bar" :orientation "h" + (workspaces :monitor-workspaces "[1, 2]") + (active-window) + (right) + ) +) + + +(defwindow bar2 + :monitor 1 + :geometry (geometry :x "0%" + :y "4px" + :width "99.7%" + :height "32px" + :anchor "top center" + ) + :exclusive true + :windowtype "dock" + :wm-ignore false + :focusable false + (box :class "bar" :orientation "h" + (workspaces :monitor-workspaces "[3, 4]") + (active-window) + (right) + ) +) + + +; (defvar r_bar_systray false) + +; (defwidget w_bar_tray[] (revealer + ; :reveal r_bar_systray + ; :transition "slideleft" + ; (eventbox :class "tray" :spacing 20 :space-evenly false + ; (box :class "widget" :spacing 0 :space-evenly false + ; (systray :icon-size 18) + ; ) + ; ) + ; ) +; ) diff --git a/home/.config/eww/lib/__pycache__/hyprsocket.cpython-312.pyc b/home/.config/eww/lib/__pycache__/hyprsocket.cpython-312.pyc new file mode 100644 index 0000000..a74121b Binary files /dev/null and b/home/.config/eww/lib/__pycache__/hyprsocket.cpython-312.pyc differ diff --git a/home/.config/eww/lib/debug.py b/home/.config/eww/lib/debug.py new file mode 100644 index 0000000..5d848a0 --- /dev/null +++ b/home/.config/eww/lib/debug.py @@ -0,0 +1,10 @@ +#!/usr/bin/env python + +from hyprsocket import run_on_line + + +def get_kb_layout(line): + print(line) + + +run_on_line(get_kb_layout) diff --git a/home/.config/eww/lib/get-kb-layout.py b/home/.config/eww/lib/get-kb-layout.py new file mode 100644 index 0000000..239f9a0 --- /dev/null +++ b/home/.config/eww/lib/get-kb-layout.py @@ -0,0 +1,14 @@ +#!/usr/bin/env python + +from hyprsocket import run_on_line + + +def get_kb_layout(line): + if "activelayout" in line: + res = line.split(">>")[1] + language = res.split(",")[1] + lang_short = language[0:2] + print("bg" if lang_short == "Bu" else "en", flush=True) + + +run_on_line(get_kb_layout) diff --git a/home/.config/eww/lib/hyprsocket.py b/home/.config/eww/lib/hyprsocket.py new file mode 100644 index 0000000..0af1447 --- /dev/null +++ b/home/.config/eww/lib/hyprsocket.py @@ -0,0 +1,24 @@ +import socket +import os, os.path + + +def get_socket_path(): + XDG_RUNTIME_DIR = os.getenv("XDG_RUNTIME_DIR") + HYPRLAND_INSTANCE_SIGNATURE = os.getenv("HYPRLAND_INSTANCE_SIGNATURE") + + socket_path = os.path.join( + XDG_RUNTIME_DIR, "hypr", HYPRLAND_INSTANCE_SIGNATURE, ".socket2.sock" + ) + + return socket_path + + +def run_on_line(method): + server = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM) + server.connect(get_socket_path()) + + while True: + data_chunk = server.recv(4096) + if data_chunk: + line = data_chunk.decode("utf-8") + method(line) diff --git a/home/.config/eww/widgets/active-window/active-window.yuck b/home/.config/eww/widgets/active-window/active-window.yuck new file mode 100644 index 0000000..edf7f6a --- /dev/null +++ b/home/.config/eww/widgets/active-window/active-window.yuck @@ -0,0 +1,7 @@ +(deflisten window :initial "..." "sh ./widgets/active-window/get-active-window.sh") + +(defwidget active-window [] + (box + (label :class "box" :text "${window}") + ) +) diff --git a/home/.config/eww/widgets/active-window/get-active-window.sh b/home/.config/eww/widgets/active-window/get-active-window.sh new file mode 100644 index 0000000..1dd0fe4 --- /dev/null +++ b/home/.config/eww/widgets/active-window/get-active-window.sh @@ -0,0 +1,4 @@ +#!/usr/bin/env sh + +hyprctl activewindow -j | jq --raw-output .title +socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | stdbuf -o0 awk -F '>>|,' '/^activewindow>>/{print $3}' diff --git a/home/.config/eww/widgets/audio/audio.yuck b/home/.config/eww/widgets/audio/audio.yuck new file mode 100644 index 0000000..da9b3ff --- /dev/null +++ b/home/.config/eww/widgets/audio/audio.yuck @@ -0,0 +1,24 @@ +(defpoll volume-level :interval "1s" "sh widgets/audio/get-volume-level.sh") + +(defwidget icon [] + (label :text {volume-level > 66 ? "" : volume-level > 0 ? "" : ""}) +) + +; TODO figure out the sink IDs dynamically? + +(defwidget audio [] + (box + :orientation "h" + :space-evenly false + :halign "end" + (eventbox :cursor "pointer" (button :class "audio-source interactive" :onclick "pactl set-default-sink 57" "󰍹")) + (eventbox :cursor "pointer" (button :class "audio-source-2 interactive" :onclick "pactl set-default-sink 64" "󰋋")) + (eventbox :cursor "pointer" :class "interactive" :onscroll "sh widgets/audio/change-volume.sh {}" + (box :class "volume" + (icon) + (button :onclick "pavucontrol &" + (label :text "${volume-level}%") + ) + )) + ) +) diff --git a/home/.config/eww/widgets/audio/change-volume.sh b/home/.config/eww/widgets/audio/change-volume.sh new file mode 100644 index 0000000..e899025 --- /dev/null +++ b/home/.config/eww/widgets/audio/change-volume.sh @@ -0,0 +1,9 @@ +#!/usr/bin/env sh + +if [[ $1 == "up" ]]; then + wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +elif [[ $1 == "down" ]]; then + wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +else + wpctl set-volume @DEFAULT_AUDIO_SINK@ $1 +fi diff --git a/home/.config/eww/widgets/audio/get-volume-level.sh b/home/.config/eww/widgets/audio/get-volume-level.sh new file mode 100644 index 0000000..d4410e2 --- /dev/null +++ b/home/.config/eww/widgets/audio/get-volume-level.sh @@ -0,0 +1,21 @@ +#!/usr/bin/env sh + +volume=$(wpctl get-volume @DEFAULT_AUDIO_SINK@) +#todo fix 100% case + +volume_value=$(echo $volume | cut -d':' -f2) + +if [ $volume_value == "0.00" ]; then + echo "0" + exit 0 +fi + + +if [[ $volume_value =~ ^" 1" ]]; then + echo "${volume_value//.}" + exit 0 +fi + +volume_percent=$(echo $volume_value | cut -d'.' -f2) + +echo $volume_percent diff --git a/home/.config/eww/widgets/brightness/brightness.yuck b/home/.config/eww/widgets/brightness/brightness.yuck new file mode 100644 index 0000000..38fd684 --- /dev/null +++ b/home/.config/eww/widgets/brightness/brightness.yuck @@ -0,0 +1,9 @@ +; this is taking up too much CPU time + +(defpoll brightness-1 :interval "2s" "ddcutil -d 1 getvcp 10 | awk '{ split($9, a, \",\"); print a[1]}'") + +(defwidget brightness [] + (eventbox :onscroll "sh widgets/brightness/change-brightness.sh {} ${brightness-1 + 0}" + (label :text "󰃞 ${substring(brightness-1, 0, 2)}") + ) +) diff --git a/home/.config/eww/widgets/brightness/change-brightness.sh b/home/.config/eww/widgets/brightness/change-brightness.sh new file mode 100644 index 0000000..901adb9 --- /dev/null +++ b/home/.config/eww/widgets/brightness/change-brightness.sh @@ -0,0 +1,10 @@ +#!/usr/bin/env sh + +case $1 in + up) + ddcutil -d 1 setvcp 10 $(($2 + 10)) + ;; + down) + ddcutil -d 1 setvcp 10 $(($2 - 10)) + ;; +esac diff --git a/home/.config/eww/widgets/clock/clock.yuck b/home/.config/eww/widgets/clock/clock.yuck new file mode 100644 index 0000000..f5d56b4 --- /dev/null +++ b/home/.config/eww/widgets/clock/clock.yuck @@ -0,0 +1,10 @@ +(defwidget clock [] + (box :class "clock" + :orientation "h" + :space-evenly false + :halign "center" + date-time) +) + +(defpoll date-time :interval "1s" +"sh widgets/clock/date-time.sh") diff --git a/home/.config/eww/widgets/clock/date-time.sh b/home/.config/eww/widgets/clock/date-time.sh new file mode 100755 index 0000000..cddf805 --- /dev/null +++ b/home/.config/eww/widgets/clock/date-time.sh @@ -0,0 +1,13 @@ +#!/usr/bin/env sh + +DaySuffix() { + case `date +%-d` in + 1|21|31) echo "st";; + 2|22) echo "nd";; + 3|23) echo "rd";; + *) echo "th";; + esac +} + +date=$(date "+%a, %b %-d`DaySuffix` · %H:%M") +printf "%s" "$date" diff --git a/home/.config/eww/widgets/kbd-layout/kbd-layout.yuck b/home/.config/eww/widgets/kbd-layout/kbd-layout.yuck new file mode 100644 index 0000000..2ebfab5 --- /dev/null +++ b/home/.config/eww/widgets/kbd-layout/kbd-layout.yuck @@ -0,0 +1,12 @@ +(defwidget kbd-layout [] + (box + :orientation "h" + :space-evenly false + :halign "center" + (eventbox :cursor "pointer" :class "interactive" :onclick "hyprctl switchxkblayout usb-hid-keyboard next" + (label :text {keyboard-layout} :class "kbd-layout") + ) + ) +) + +(deflisten keyboard-layout :initial "en" "python ./lib/get-kb-layout.py") diff --git a/home/.config/eww/widgets/media/media.yuck b/home/.config/eww/widgets/media/media.yuck new file mode 100644 index 0000000..5a4d1a3 --- /dev/null +++ b/home/.config/eww/widgets/media/media.yuck @@ -0,0 +1,50 @@ +(defpoll media-status :interval "1s" "playerctl status") + + +(defpoll media-artist :interval "1s" "playerctl metadata --format \"{{artist}}\"") +(defpoll media-title :interval "1s" "playerctl metadata --format \"{{title}}\"") +(defpoll media-album :interval "1s" "playerctl metadata --format \"{{album}}\"") +(defpoll media-artUrl :interval "1s" "playerctl metadata --format \"{{mpris:artUrl}}\"") +(defpoll media-length :interval "1s" "playerctl metadata --format \"{{duration(mpris:length)}}\"") + + +(defwidget media [] + (box + (eventbox :cursor "pointer" :onclick "eww open --toggle window_media" :class "interactive" :onmiddleclick "playerctl play-pause" + (box :class "media-status" + (label :text "${media-status == "Playing" ? "" : media-status == "Paused" ? "" : ""}") + ) + ) + + ) +) + +(defwidget media_full [] + (box :orientation "v" :space-evenly false :class "media-window" + (label :text media-artist :show-truncated false) + (label :text media-title :show-truncated false) + (label :text media-album :show-truncated false) + (box :class "media-cover" :style "background: url('${media-artUrl}')" :width 180 :height 140) + (box :class "media-controls" :spacing 16 + (eventbox :cursor "pointer" :onclick "playerctl previous" :class "media-button" "") + (eventbox :cursor "pointer" :class "media-button play" :onclick "playerctl play" "") + (eventbox :cursor "pointer" :class "media-button pause" :onclick "playerctl pause" "") + (eventbox :cursor "pointer" :class "media-button next" :onclick "playerctl next" "") + ) + ) +) + + +(defwindow window_media + :monitor 0 + :geometry (geometry :x "8px" + :y "8px" + :width "300px" + :anchor "top right" + ) + :wm-ignore false + :focusable false + (box :class "control-centre bar" + (media_full) + ) +) diff --git a/home/.config/eww/widgets/workspaces/change-active-workspace.sh b/home/.config/eww/widgets/workspaces/change-active-workspace.sh new file mode 100644 index 0000000..c794f72 --- /dev/null +++ b/home/.config/eww/widgets/workspaces/change-active-workspace.sh @@ -0,0 +1,17 @@ +#!/usr/bin/env sh + +direction=$1 +current=$2 +if [[ $direction == "down" ]]; then + target=$(($current+1)) + if [[ $target == 11 ]]; then + exit 0 + fi + hyprctl dispatch workspace $target +elif [[ $direction == "up" ]]; then + target=$(($current-1)) + hyprctl dispatch workspace $target +else + target=$1 + hyprctl dispatch workspace $target +fi diff --git a/home/.config/eww/widgets/workspaces/get-active-workspace.sh b/home/.config/eww/widgets/workspaces/get-active-workspace.sh new file mode 100644 index 0000000..444331d --- /dev/null +++ b/home/.config/eww/widgets/workspaces/get-active-workspace.sh @@ -0,0 +1,6 @@ +##!/usr/bin/env sh + +hyprctl monitors -j | jq '.[] | select(.focused) | .activeWorkspace.id' + +socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | + stdbuf -o0 awk -F '>>|,' -e '/^workspace>>/ {print $2}' -e '/^focusedmon>>/ {print $3}' diff --git a/home/.config/eww/widgets/workspaces/workspaces.sh b/home/.config/eww/widgets/workspaces/workspaces.sh new file mode 100644 index 0000000..ea878f8 --- /dev/null +++ b/home/.config/eww/widgets/workspaces/workspaces.sh @@ -0,0 +1,46 @@ +#!/usr/bin/env sh +## NOTE: This file is unused currently + +NUMBER_OF_WORKSPACES=6 + +window_class() { + echo `hyprctl activewindow -j | jq --raw-output .class` +} + +window_title() { + echo `hyprctl activewindow -j | jq --raw-output .title` +} + +workspaces (){ + WORKSPACE_WINDOWS=$(hyprctl workspaces -j | jq 'map({key: .id | tostring, value: .windows}) | from_entries') + seq 1 $NUMBER_OF_WORKSPACES | jq --argjson windows "${WORKSPACE_WINDOWS}" --slurp -Mc 'map(tostring) | map({id: ., windows: ($windows[.]//0)})' +} + +if [[ $1 == 'workspaces' ]]; then + echo "{ \"workspaces\": $(workspaces), \"active\": 1, \"active_empty\": true }" + socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do + active=$(eww get workspaces | jq .active) + if [[ ${line:0:9} == 'workspace' ]]; then + active=${line:11:2} + fi + + active_empty='true' + let "i = $active - 1" + if [[ $(workspaces | jq --raw-output .[$i].windows) -gt 0 ]]; then active_empty='false'; fi + + eww update workspaces="{ + \"workspaces\": $(workspaces), + \"active\": $active, + \"active_empty\": $active_empty + }" + + eww update dock_reveal="$active_empty" + done +fi + +if [[ $1 == 'window' ]]; then + window_class + socat -u UNIX-CONNECT:$XDG_RUNTIME_DIR/hypr/$HYPRLAND_INSTANCE_SIGNATURE/.socket2.sock - | while read -r line; do + window_class + done +fi diff --git a/home/.config/eww/widgets/workspaces/workspaces.yuck b/home/.config/eww/widgets/workspaces/workspaces.yuck new file mode 100644 index 0000000..ffedbf5 --- /dev/null +++ b/home/.config/eww/widgets/workspaces/workspaces.yuck @@ -0,0 +1,13 @@ +(deflisten active-workspace :initial "." "sh widgets/workspaces/get-active-workspace.sh") + +(defwidget workspaces [?monitor-workspaces] + (box :class "workspaces" + :orientation "h" + :space-evenly true + :halign "start" + :spacing 10 + (for workspace in monitor-workspaces + (button :class "workspace ${active-workspace == workspace ? "current" : ""}" :onclick "hyprctl dispatch workspace ${workspace}" "${workspace}") + ) + ) +) diff --git a/home/.config/hypr/binds.conf b/home/.config/hypr/binds.conf new file mode 100644 index 0000000..c916ee5 --- /dev/null +++ b/home/.config/hypr/binds.conf @@ -0,0 +1,95 @@ +#################### +### KEYBINDINGSS ### +#################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ +$mainMod = SUPER # Sets "Windows" key as main modifier + + +windowrulev2=float,class:(floatingTerm) +# Example binds, see https://wiki.hyprland.org/Configuring/Binds/ for more +bind = $mainMod, T, exec, $terminal +bind = $mainMod, Q, killactive, +bind = alt, Q, killactive +bind = $mainMod, M, exit, +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = alt, space, exec, $menu --class=floatingTerm +bind = alt win shift, e, exec, $emojiMenu +# bind = $mainMod, P, pseudo, # dwindle +bind = $mainMod, J, togglesplit, # dwindle + +# 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 + +bind = ctrl alt win, left, movewindow, mon:+1 +bind = ctrl alt win, right, movewindow, mon:-1 + +bind = SUPER, S, swapactiveworkspaces, 0 1 + +# resize with ctrl win shift hjkl +bind = $mainMod ctrl SHIFT, L, resizeactive, 30 0 +bind = $mainMod ctrl SHIFT, H, resizeactive, -30 0 +bind = $mainMod ctrl SHIFT, K, resizeactive, 0 30 +bind = $mainMod ctrl SHIFT, J, resizeactive, 0 -30 + +# move with ctrl alt hjkl +bind = ctrl win, H, movewindow, l +bind = ctrl win, L, movewindow, r +bind = ctrl win, K, movewindow, u +bind = ctrl win, J, movewindow, 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 = ctrl SHIFT alt, 1, movetoworkspace, 1 +bind = ctrl SHIFT alt, 2, movetoworkspace, 2 +bind = ctrl SHIFT alt, 3, movetoworkspace, 3 +bind = ctrl SHIFT alt, 4, movetoworkspace, 4 +bind = ctrl SHIFT alt, 5, movetoworkspace, 5 +bind = ctrl SHIFT alt, 6, movetoworkspace, 6 +bind = ctrl SHIFT alt, 7, movetoworkspace, 7 +bind = ctrl SHIFT alt, 8, movetoworkspace, 8 +bind = ctrl SHIFT alt, 9, movetoworkspace, 9 +bind = ctrl SHIFT alt, 0, movetoworkspace, 10 + +bind = ctrl alt, H, workspace, -1 +bind = ctrl alt, L, workspace, +1 + +bind = ctrl alt SHIFT, H, movetoworkspace, -1 +bind = ctrl alt SHIFT, L, movetoworkspace, +1 + +bind = $mainMod, F, fullscreen + +# 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 + +# game mode +bind = $mainMod, F1, exec, ~/.config/hypr/game-mode.sh + +# eww +bind = ctrl SHIFT win, M, exec, eww open --toggle window_media + +bind = ctrl SHIFT win, W, exec, /home/georgi/Scripts/wallpaper diff --git a/home/.config/hypr/env.conf b/home/.config/hypr/env.conf new file mode 100644 index 0000000..3ce66d9 --- /dev/null +++ b/home/.config/hypr/env.conf @@ -0,0 +1,23 @@ +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 + +env = LIBVA_DRIVER_NAME,nvidia +env = XDG_SESSION_TYPE,wayland +env = GBM_BACKEND,nvidia-drm +env = __GLX_VENDOR_LIBRARY_NAME,nvidia + +env = QT_QPA_PLATFORM,wayland;xcb +env = GDK_BACKEND,wayland,x11 +env = QT_QPA_PLATFORMTHEME,qt5ct +env = XDG_SESSION_DESKTOP,Hyprland + +exec = gsettings set org.gnome.desktop.interface gtk-theme 'adw-gtk3-dark' +exec = gsettings set org.gnome.desktop.interface color-scheme 'prefer-dark' # for GTK4 apps + +env = QT_QPA_PLATFORMTHEME,qt6ct # for Qt apps diff --git a/home/.config/hypr/game-mode.sh b/home/.config/hypr/game-mode.sh new file mode 100755 index 0000000..94f0119 --- /dev/null +++ b/home/.config/hypr/game-mode.sh @@ -0,0 +1,15 @@ +#!/usr/bin/env sh + +HYPRGAMEMODE=$(hyprctl getoption animations:enabled | awk 'NR==1{print $2}') +if [ "$HYPRGAMEMODE" = 1 ] ; then + hyprctl --batch "\ + keyword animations:enabled 0;\ + keyword decoration:drop_shadow 0;\ + keyword decoration:blur:enabled 0;\ + keyword general:gaps_in 0;\ + keyword general:gaps_out 0;\ + keyword general:border_size 1;\ + keyword decoration:rounding 0" + exit +fi +hyprctl reload diff --git a/home/.config/hypr/hyprland.conf b/home/.config/hypr/hyprland.conf new file mode 100644 index 0000000..7d17cec --- /dev/null +++ b/home/.config/hypr/hyprland.conf @@ -0,0 +1,55 @@ +################ +### MONITORS ### +################ + +# See https://wiki.hyprland.org/Configuring/Monitors/ +monitor=DP-1, 3840x1600@144, 0x0, 1, vrr, 1 +monitor=DP-2, 2560x1440@144, 0x-1440, 1 + +################### +### MY PROGRAMS ### +################### + +$terminal = alacritty +$fileManager = nautilus +$menu = rofi -show combi -combi-modes "window,run,ssh" -modes combi +$emojiMenu = rofi -modi emoji -show emoji + +################# +### AUTOSTART ### +################# + +# exec-once = $terminal +# exec-once = nm-applet & +# exec-once = waybar & hyprpaper & firefox +exec-once = eww open bar & +exec-once = eww open bar2 & +exec-once = swww-daemon --format xrgb & +exec-once = swaync & + +source = ~/.config/hypr/env.conf +source = ~/.config/hypr/style.conf + +# https://wiki.hyprland.org/Configuring/Variables/#misc +misc { + force_default_wallpaper = 0 + disable_hyprland_logo = true + animate_manual_resizes = true + mouse_move_focuses_monitor = true +} + +workspace = 1, monitor:DP-1 +workspace = 2, monitor:DP-1 +workspace = 3, monitor:DP-2 +workspace = 4, monitor:DP-2 + +windowrulev2 = suppressevent maximize, class:.* # You'll probably like this. + +windowrulev2 = workspace 3,class:(org.telegram.desktop) +windowrulev2 = workspace 3,class:(discord) +windowrulev2 = workspace 2,class:(steam) +windowrulev2 = float,class:(steam),title:(Friends List) +windowrulev2 = float,class:(steam),title:(Steam Settings) + +source = ~/.config/hypr/input.conf +source = ~/.config/hypr/binds.conf diff --git a/home/.config/hypr/input.conf b/home/.config/hypr/input.conf new file mode 100644 index 0000000..3965f3a --- /dev/null +++ b/home/.config/hypr/input.conf @@ -0,0 +1,31 @@ +############# +### INPUT ### +############# + +# https://wiki.hyprland.org/Configuring/Variables/#input +input { + kb_layout = us,bg + kb_variant = ,phonetic + kb_model = + kb_options = caps:escape,grp:ctrl_space_toggle + kb_rules = + + follow_mouse = 1 + + sensitivity = 0.2 # -1.0 - 1.0, 0 means no modification. + accel_profile = flat + + touchpad { + natural_scroll = false + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +cursor { + no_hardware_cursors = true + default_monitor = DP-1 +} diff --git a/home/.config/hypr/style.conf b/home/.config/hypr/style.conf new file mode 100644 index 0000000..54a41e8 --- /dev/null +++ b/home/.config/hypr/style.conf @@ -0,0 +1,63 @@ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 3 + gaps_out = 6 + + border_size = 3 + + col.active_border = rgba(ca9ee6ff) rgba(f2d5cfff) 45deg + col.inactive_border = rgba(b4befecc) rgba(6c7086cc) 45deg + + # Set to true enable resizing windows by clicking and dragging on borders and gaps + resize_on_border = true + + allow_tearing = false + layout = dwindle +} + +# https://wiki.hyprland.org/Configuring/Variables/#decoration +decoration { + rounding = 5 + + # Change transparency of focused and unfocused windows + active_opacity = 1.0 + inactive_opacity = 1.0 + + drop_shadow = false + shadow_range = 4 + shadow_render_power = 3 + col.shadow = rgba(1a1a1aee) + + # https://wiki.hyprland.org/Configuring/Variables/#blur + blur { + enabled = yes + size = 6 + passes = 3 + new_optimizations = on + ignore_opacity = on + xray = false + } +} + +# 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 +} + +# https://wiki.hyprland.org/Configuring/Dwindle-Layout/ +dwindle { + pseudotile = true + preserve_split = true +} diff --git a/home/.config/rofi/config.rasi b/home/.config/rofi/config.rasi new file mode 100644 index 0000000..23116f1 --- /dev/null +++ b/home/.config/rofi/config.rasi @@ -0,0 +1,207 @@ +configuration { + /* modes: "window,drun,run,ssh"; */ + font: "Fira Code 12"; + show-icons: true; +/* location: 0;*/ +/* yoffset: 0;*/ +/* xoffset: 0;*/ +/* fixed-num-lines: true;*/ +/* terminal: "rofi-sensible-terminal";*/ +/* ssh-client: "ssh";*/ +/* ssh-command: "{terminal} -e {ssh-client} {host} [-p {port}]";*/ +/* run-command: "{cmd}";*/ +/* run-list-command: "";*/ +/* run-shell-command: "{terminal} -e {cmd}";*/ +/* window-command: "wmctrl -i -R {window}";*/ +/* window-match-fields: "all";*/ +/* icon-theme: ;*/ +/* drun-match-fields: "name,generic,exec,categories,keywords";*/ +/* drun-categories: ;*/ +/* drun-show-actions: false;*/ +/* drun-display-format: "{name} [({generic})]";*/ +/* drun-url-launcher: "xdg-open";*/ +/* disable-history: false;*/ +/* ignored-prefixes: "";*/ +/* sort: false;*/ +/* sorting-method: "normal";*/ +/* case-sensitive: false;*/ +/* cycle: true;*/ +/* sidebar-mode: false;*/ + hover-select: true; +/* eh: 1;*/ +/* auto-select: false;*/ +/* parse-hosts: false;*/ +/* parse-known-hosts: true;*/ +/* combi-modes: "window,run";*/ +/* matching: "normal";*/ +/* tokenize: true;*/ +/* m: "-5";*/ +/* filter: ;*/ +/* dpi: -1;*/ +/* threads: 0;*/ +/* scroll-method: 0;*/ +/* window-format: "{w} {c} {t}";*/ +/* click-to-exit: true;*/ +/* global-kb: false;*/ +/* max-history-size: 25;*/ +/* combi-hide-mode-prefix: false;*/ +/* combi-display-format: "{mode} {text}";*/ +/* matching-negate-char: '-' /* unsupported */;*/ +/* cache-dir: ;*/ +/* window-thumbnail: false;*/ +/* drun-use-desktop-cache: false;*/ +/* drun-reload-desktop-cache: false;*/ +/* normalize-match: false;*/ +/* steal-focus: false;*/ +/* application-fallback-icon: ;*/ +/* refilter-timeout-limit: 300;*/ +/* xserver-i300-workaround: false;*/ +/* completer-mode: "recursivebrowser";*/ +/* pid: "/run/user/1000/rofi.pid";*/ +/* display-window: ;*/ +/* display-run: ;*/ +/* display-ssh: ;*/ +/* display-drun: ;*/ +/* display-combi: ;*/ +/* display-keys: ;*/ +/* display-filebrowser: ;*/ +/* display-recursivebrowser: ;*/ +/* kb-primary-paste: "Control+V,Shift+Insert";*/ +/* kb-secondary-paste: "Control+v,Insert";*/ +/* kb-secondary-copy: "Control+c";*/ +/* kb-clear-line: "Control+w";*/ +/* kb-move-front: "Control+a";*/ +/* kb-move-end: "Control+e";*/ +/* kb-move-word-back: "Alt+b,Control+Left";*/ +/* kb-move-word-forward: "Alt+f,Control+Right";*/ +/* kb-move-char-back: "Left,Control+b";*/ +/* kb-move-char-forward: "Right,Control+f";*/ +/* kb-remove-word-back: "Control+Alt+h,Control+BackSpace";*/ +/* kb-remove-word-forward: "Control+Alt+d";*/ +/* kb-remove-char-forward: "Delete,Control+d";*/ +/* kb-remove-char-back: "BackSpace,Shift+BackSpace,Control+h";*/ +/* kb-remove-to-eol: "Control+k";*/ +/* kb-remove-to-sol: "Control+u";*/ +/* kb-accept-entry: "Control+j,Control+m,Return,KP_Enter";*/ +/* kb-accept-custom: "Control+Return";*/ +/* kb-accept-custom-alt: "Control+Shift+Return";*/ +/* kb-accept-alt: "Shift+Return";*/ +/* kb-delete-entry: "Shift+Delete";*/ +/* kb-mode-next: "Shift+Right,Control+Tab";*/ +/* kb-mode-previous: "Shift+Left,Control+ISO_Left_Tab";*/ +/* kb-mode-complete: "Control+l";*/ +/* kb-row-left: "Control+Page_Up";*/ +/* kb-row-right: "Control+Page_Down";*/ +/* kb-row-up: "Up,Control+p";*/ +/* kb-row-down: "Down,Control+n";*/ +/* kb-row-tab: "";*/ +/* kb-element-next: "Tab";*/ +/* kb-element-prev: "ISO_Left_Tab";*/ +/* kb-page-prev: "Page_Up";*/ +/* kb-page-next: "Page_Down";*/ +/* kb-row-first: "Home,KP_Home";*/ +/* kb-row-last: "End,KP_End";*/ +/* kb-row-select: "Control+space";*/ +/* kb-screenshot: "Alt+S";*/ +/* kb-ellipsize: "Alt+period";*/ +/* kb-toggle-case-sensitivity: "grave,dead_grave";*/ +/* kb-toggle-sort: "Alt+grave";*/ +/* kb-cancel: "Escape,Control+g,Control+bracketleft";*/ +/* kb-custom-1: "Alt+1";*/ +/* kb-custom-2: "Alt+2";*/ +/* kb-custom-3: "Alt+3";*/ +/* kb-custom-4: "Alt+4";*/ +/* kb-custom-5: "Alt+5";*/ +/* kb-custom-6: "Alt+6";*/ +/* kb-custom-7: "Alt+7";*/ +/* kb-custom-8: "Alt+8";*/ +/* kb-custom-9: "Alt+9";*/ +/* kb-custom-10: "Alt+0";*/ +/* kb-custom-11: "Alt+exclam";*/ +/* kb-custom-12: "Alt+at";*/ +/* kb-custom-13: "Alt+numbersign";*/ +/* kb-custom-14: "Alt+dollar";*/ +/* kb-custom-15: "Alt+percent";*/ +/* kb-custom-16: "Alt+dead_circumflex";*/ +/* kb-custom-17: "Alt+ampersand";*/ +/* kb-custom-18: "Alt+asterisk";*/ +/* kb-custom-19: "Alt+parenleft";*/ + kb-select-1: "Ctrl+Alt+1"; + kb-select-2: "Ctrl+Alt+2"; + kb-select-3: "Ctrl+Alt+3"; + kb-select-4: "Ctrl+Alt+4"; + kb-select-5: "Ctrl+Alt+5"; + kb-select-6: "Ctrl+Alt+6"; + kb-select-7: "Ctrl+Alt+7"; + kb-select-8: "Ctrl+Alt+8"; + kb-select-9: "Ctrl+Alt+9"; + kb-select-10: "Ctrl+Alt+0"; +/* kb-entry-history-up: "Control+Up";*/ +/* kb-entry-history-down: "Control+Down";*/ +/* ml-row-left: "ScrollLeft";*/ +/* ml-row-right: "ScrollRight";*/ +/* ml-row-up: "ScrollUp";*/ +/* ml-row-down: "ScrollDown";*/ +/* me-select-entry: "MousePrimary";*/ +/* me-accept-entry: "MouseDPrimary";*/ +/* me-accept-custom: "Control+MouseDPrimary";*/ + timeout { + action: "kb-cancel"; + delay: 0; + } + filebrowser { + directories-first: true; + sorting-method: "name"; + } +} + + +* { + selected-normal-foreground: rgba ( 249, 249, 249, 100 % ); + foreground: rgba ( 196, 203, 212, 100 % ); + normal-foreground: @foreground; + alternate-normal-background: @background; + red: rgba ( 220, 50, 47, 100 % ); + selected-urgent-foreground: rgba ( 249, 249, 249, 100 % ); + blue: rgba ( 38, 139, 210, 100 % ); + urgent-foreground: rgba ( 204, 102, 102, 100 % ); + alternate-urgent-background: rgba ( 75, 81, 96, 90 % ); + active-foreground: rgba ( 101, 172, 255, 100 % ); + lightbg: rgba ( 238, 232, 213, 100 % ); + selected-active-foreground: rgba ( 249, 249, 249, 100 % ); + alternate-active-background: rgba ( 75, 81, 96, 89 % ); + background: rgba ( 45, 48, 59, 95 % ); + alternate-normal-foreground: @foreground; + normal-background: @background; + lightfg: rgba ( 88, 104, 117, 100 % ); + selected-normal-background: rgba ( 64, 132, 214, 100 % ); + border-color: rgba ( 124, 131, 137, 100 % ); + spacing: 2; + separatorcolor: rgba ( 0, 0, 0, 0 % ); + urgent-background: rgba ( 29, 31, 33, 17 % ); + selected-urgent-background: rgba ( 165, 66, 66, 100 % ); + alternate-urgent-foreground: @urgent-foreground; + background-color: rgba ( 0, 0, 0, 0 % ); + alternate-active-foreground: @active-foreground; + active-background: rgba ( 29, 31, 33, 17 % ); + selected-active-background: rgba ( 68, 145, 237, 100 % ); +} +window { + width: 25%; + border-radius: 10; + background-color: @background; + border: 1; + padding: 16; +} + +mainbox { + border: 0; +} + +element { + padding: 8px 16px; +} + +element-icon { + padding: 0 20px 0 0; +} diff --git a/home/.config/rofi/example.rasi b/home/.config/rofi/example.rasi new file mode 100644 index 0000000..a8c7996 --- /dev/null +++ b/home/.config/rofi/example.rasi @@ -0,0 +1,177 @@ +/** + * rofi -dump-theme output. + * Rofi version: 1.7.5+wayland3 + **/ +* { + red: rgba ( 220, 50, 47, 100 % ); + selected-active-foreground: rgba ( 249, 249, 249, 100 % ); + lightfg: rgba ( 88, 104, 117, 100 % ); + separatorcolor: rgba ( 29, 31, 33, 100 % ); + urgent-foreground: rgba ( 204, 102, 102, 100 % ); + alternate-urgent-background: rgba ( 75, 81, 96, 90 % ); + lightbg: rgba ( 238, 232, 213, 100 % ); + background-color: transparent; + border-color: rgba ( 124, 131, 137, 100 % ); + normal-background: var(background); + selected-urgent-background: rgba ( 165, 66, 66, 100 % ); + alternate-active-background: rgba ( 75, 81, 96, 89 % ); + spacing: 2; + blue: rgba ( 38, 139, 210, 100 % ); + alternate-normal-foreground: var(foreground); + urgent-background: rgba ( 29, 31, 33, 17 % ); + selected-normal-foreground: rgba ( 249, 249, 249, 100 % ); + active-foreground: rgba ( 101, 172, 255, 100 % ); + background: rgba ( 45, 48, 59, 95 % ); + selected-active-background: rgba ( 68, 145, 237, 100 % ); + active-background: rgba ( 29, 31, 33, 17 % ); + selected-normal-background: rgba ( 64, 132, 214, 100 % ); + alternate-normal-background: rgba ( 64, 69, 82, 59 % ); + foreground: rgba ( 196, 203, 212, 100 % ); + selected-urgent-foreground: rgba ( 249, 249, 249, 100 % ); + normal-foreground: var(foreground); + alternate-urgent-foreground: var(urgent-foreground); + alternate-active-foreground: var(active-foreground); +} +element { + padding: 1px ; + cursor: pointer; + spacing: 5px ; + border: 0; +} +element normal.normal { + background-color: var(normal-background); + text-color: var(normal-foreground); +} +element normal.urgent { + background-color: var(urgent-background); + text-color: var(urgent-foreground); +} +element normal.active { + background-color: var(active-background); + text-color: var(active-foreground); +} +element selected.normal { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +element selected.urgent { + background-color: var(selected-urgent-background); + text-color: var(selected-urgent-foreground); +} +element selected.active { + background-color: var(selected-active-background); + text-color: var(selected-active-foreground); +} +element alternate.normal { + background-color: var(alternate-normal-background); + text-color: var(alternate-normal-foreground); +} +element alternate.urgent { + background-color: var(alternate-urgent-background); + text-color: var(alternate-urgent-foreground); +} +element alternate.active { + background-color: var(alternate-active-background); + text-color: var(alternate-active-foreground); +} +element-text { + background-color: inherit; + cursor: inherit; + highlight: inherit; + text-color: inherit; +} +element-icon { + background-color: transparent; + size: 1.0000em ; + cursor: inherit; + text-color: inherit; +} +window { + padding: 5; + background-color: var(background); + border: 1; +} +mainbox { + padding: 0; + border: 0; +} +message { + padding: 1px ; + border-color: var(separatorcolor); + border: 2px 0px 0px ; +} +textbox { + text-color: var(foreground); +} +listview { + padding: 2px 0px 0px ; + scrollbar: true; + border-color: var(separatorcolor); + spacing: 2px ; + fixed-height: 0; + border: 2px 0px 0px ; +} +scrollbar { + width: 4px ; + padding: 0; + handle-width: 8px ; + border: 0; + handle-color: var(normal-foreground); +} +sidebar { + border-color: var(separatorcolor); + border: 2px dash 0px 0px ; +} +button { + cursor: pointer; + spacing: 0; + text-color: var(normal-foreground); +} +button selected { + background-color: var(selected-normal-background); + text-color: var(selected-normal-foreground); +} +num-filtered-rows { + expand: false; + text-color: Gray; +} +num-rows { + expand: false; + text-color: Gray; +} +textbox-num-sep { + expand: false; + str: "/"; + text-color: Gray; +} +inputbar { + padding: 1px ; + spacing: 0; + text-color: var(normal-foreground); + children: [ "prompt","textbox-prompt-colon","entry","case-indicator" ]; +} +case-indicator { + spacing: 0; + text-color: var(normal-foreground); +} +entry { + text-color: var(normal-foreground); + cursor: text; + spacing: 0; + placeholder-color: Gray; + placeholder: "Type to filter"; +} +prompt { + spacing: 0; + text-color: var(normal-foreground); +} +textbox-prompt-colon { + margin: 0px 0.3000em 0.0000em 0.0000em ; + expand: false; + str: ":"; + text-color: var(normal-foreground); +} +mode-switcher { + border-color: var(separatorcolor); + border: 2px 0px 0px ; +}