commit 07feb9f64a932cf095b7ec6b4cfd6ec192520dd8 Author: aneuhmanh Date: Sun Jun 22 21:18:32 2025 +0300 init diff --git a/README.md b/README.md new file mode 100644 index 0000000..b3f25b6 --- /dev/null +++ b/README.md @@ -0,0 +1,31 @@ +# aneuhmanh dotfiles + +#### тут собраны НЕ ВСЕ конфиги.Я собрал только самые основные.Настройки GTK, QT и других приложений вы можете найти [тут](https://catppuccin.com/ports/ "тут") +- Все конфиги собраны под Arch Hyprland + +Сам рис собран с использованием темы [Catpuccin Frappe Mauve](https://catppuccin.com/palette/ "Catpuccin Frappe Mauve") + +#### Компоненты: +**Дисплей менеджер: [SDDM](https://github.com/sddm/sddm "SDDM")** + +**Текстовый редактор: [NEOVIM](https://github.com/neovim/neovim "NEOVIM")** + +**Терминал: [KITTY](https://github.com/kovidgoyal/kitty "KITTY")** + +**Композитор: [HYPRLAND](https://github.com/hyprwm/Hyprland "HYPRLAND")** + +**Уведомления: [MAKO](https://github.com/emersion/mako "MAKO")** + +**Файловый менеджер: [THUNAR](https://github.com/neilbrown/thunar "THUNAR")** + +**Лаунчер приложений: [WOFI](https://github.com/SimplyCEO/wofi "WOFI")** + +**Обои: [Hyprpaper](https://github.com/hyprwm/hyprpaper "Hyprpaper")** +#### Полезности: +**[Waybar wiki](https://github.com/Alexays/Waybar/wiki "Waybar wiki")** + +**[Hyprland wiki](https://wiki.hypr.land/ "Hyprland wiki")** + +**[Mako wiki](https://github.com/emersion/mako/wiki/Frequently-asked-questions "Mako wiki")** + +**[Neovim wiki](https://github.com/neovim/neovim/wiki "Neovim wiki")** diff --git a/cava/config b/cava/config new file mode 100644 index 0000000..e4300a1 --- /dev/null +++ b/cava/config @@ -0,0 +1,265 @@ +## Configuration file for CAVA. +# Remove the ; to change parameters. + + +[general] + +# Smoothing mode. Can be 'normal', 'scientific' or 'waves'. DEPRECATED as of 0.6.0 +; mode = normal + +# Accepts only non-negative values. +; framerate = 60 + +# 'autosens' will attempt to decrease sensitivity if the bars peak. 1 = on, 0 = off +# new as of 0.6.0 autosens of low values (dynamic range) +# 'overshoot' allows bars to overshoot (in % of terminal height) without initiating autosens. DEPRECATED as of 0.6.0 +; autosens = 1 +; overshoot = 20 + +# Manual sensitivity in %. If autosens is enabled, this will only be the initial value. +# 200 means double height. Accepts only non-negative values. +; sensitivity = 100 + +# The number of bars (0-512). 0 sets it to auto (fill up console). +# Bars' width and space between bars in number of characters. +; bars = 0 +; bar_width = 2 +; bar_spacing = 1 +# bar_height is only used for output in "noritake" format +; bar_height = 32 + +# For SDL width and space between bars is in pixels, defaults are: +; bar_width = 20 +; bar_spacing = 5 + +# sdl_glsl have these default values, they are only used to calculate max number of bars. +; bar_width = 1 +; bar_spacing = 0 + + +# Lower and higher cutoff frequencies for lowest and highest bars +# the bandwidth of the visualizer. +# Note: there is a minimum total bandwidth of 43Mhz x number of bars. +# Cava will automatically increase the higher cutoff if a too low band is specified. +; lower_cutoff_freq = 50 +; higher_cutoff_freq = 10000 + + +# Seconds with no input before cava goes to sleep mode. Cava will not perform FFT or drawing and +# only check for input once per second. Cava will wake up once input is detected. 0 = disable. +; sleep_timer = 0 + + +[input] + +# Audio capturing method. Possible methods are: 'fifo', 'portaudio', 'pipewire', 'alsa', 'pulse', 'sndio', 'oss', 'jack' or 'shmem' +# Defaults to 'oss', 'pipewire', 'sndio', 'jack', 'pulse', 'alsa', 'portaudio' or 'fifo', in that order, dependent on what support cava was built with. +# On Mac it defaults to 'portaudio' or 'fifo' +# On windows this is automatic and no input settings are needed. +# +# All input methods uses the same config variable 'source' +# to define where it should get the audio. +# +# For pulseaudio and pipewire 'source' will be the source. Default: 'auto', which uses the monitor source of the default sink +# (all pulseaudio sinks(outputs) have 'monitor' sources(inputs) associated with them). +# +# For pipewire 'source' will be the object name or object.serial of the device to capture from. +# Both input and output devices are supported. +# +# For alsa 'source' will be the capture device. +# For fifo 'source' will be the path to fifo-file. +# For shmem 'source' will be /squeezelite-AA:BB:CC:DD:EE:FF where 'AA:BB:CC:DD:EE:FF' will be squeezelite's MAC address +# +# For sndio 'source' will be a raw recording audio descriptor or a monitoring sub-device, e.g. 'rsnd/2' or 'snd/1'. Default: 'default'. +# README.md contains further information on how to setup CAVA for sndio. +# +# For oss 'source' will be the path to a audio device, e.g. '/dev/dsp2'. Default: '/dev/dsp', i.e. the default audio device. +# README.md contains further information on how to setup CAVA for OSS on FreeBSD. +# +# For jack 'source' will be the name of the JACK server to connect to, e.g. 'foobar'. Default: 'default'. +# README.md contains further information on how to setup CAVA for JACK. +# +; method = pulse +; source = auto + +; method = pipewire +; source = auto + +; method = alsa +; source = hw:Loopback,1 + +; method = fifo +; source = /tmp/mpd.fifo + +; method = shmem +; source = /squeezelite-AA:BB:CC:DD:EE:FF + +; method = portaudio +; source = auto + +; method = sndio +; source = default + +; method = oss +; source = /dev/dsp + +; method = jack +; source = default + +# The options 'sample_rate', 'sample_bits', 'channels' and 'autoconnect' can be configured for some input methods: +# sample_rate: fifo, pipewire, sndio, oss +# sample_bits: fifo, pipewire, sndio, oss +# channels: sndio, oss, jack +# autoconnect: jack +# Other methods ignore these settings. +# +# For 'sndio' and 'oss' they are only preferred values, i.e. if the values are not supported +# by the chosen audio device, the device will use other supported values instead. +# Example: 48000, 32 and 2, but the device only supports 44100, 16 and 1, then it +# will use 44100, 16 and 1. +# +; sample_rate = 44100 +; sample_bits = 16 +; channels = 2 +; autoconnect = 2 + + +[output] + +# Output method. Can be 'ncurses', 'noncurses', 'raw', 'noritake', 'sdl' +# or 'sdl_glsl'. +# 'noncurses' (default) uses a buffer and cursor movements to only print +# changes from frame to frame in the terminal. Uses less resources and is less +# prone to tearing (vsync issues) than 'ncurses'. +# +# 'raw' is an 8 or 16 bit (configurable via the 'bit_format' option) data +# stream of the bar heights that can be used to send to other applications. +# 'raw' defaults to 200 bars, which can be adjusted in the 'bars' option above. +# +# 'noritake' outputs a bitmap in the format expected by a Noritake VFD display +# in graphic mode. It only support the 3000 series graphical VFDs for now. +# +# 'sdl' uses the Simple DirectMedia Layer to render in a graphical context. +# 'sdl_glsl' uses SDL to create an OpenGL context. Write your own shaders or +# use one of the predefined ones. +; method = noncurses + +# Orientation of the visualization. Can be 'bottom', 'top', 'left', 'right' or +# 'horizontal'. Default is 'bottom'. 'left and 'right' are only supported on sdl +# and ncruses output. 'horizontal' (bars go up and down from center) is only supported +# on noncurses output. +# Note: many fonts have weird or missing glyphs for characters used in orientations +# other than 'bottom', which can make output not look right. +; orientation = bottom + +# Visual channels. Can be 'stereo' or 'mono'. +# 'stereo' mirrors both channels with low frequencies in center. +# 'mono' outputs left to right lowest to highest frequencies. +# 'mono_option' set mono to either take input from 'left', 'right' or 'average'. +# set 'reverse' to 1 to display frequencies the other way around. +; channels = stereo +; mono_option = average +; reverse = 0 + +# Raw output target. +# On Linux, a fifo will be created if target does not exist. +# On Windows, a named pipe will be created if target does not exist. +; raw_target = /dev/stdout + +# Raw data format. Can be 'binary' or 'ascii'. +; data_format = binary + +# Binary bit format, can be '8bit' (0-255) or '16bit' (0-65530). +; bit_format = 16bit + +# Ascii max value. In 'ascii' mode range will run from 0 to value specified here +; ascii_max_range = 1000 + +# Ascii delimiters. In ascii format each bar and frame is separated by a delimiters. +# Use decimal value in ascii table (i.e. 59 = ';' and 10 = '\n' (line feed)). +; bar_delimiter = 59 +; frame_delimiter = 10 + +# sdl window size and position. -1,-1 is centered. +; sdl_width = 1000 +; sdl_height = 500 +; sdl_x = -1 +; sdl_y= -1 +; sdl_full_screen = 0 + +# set label on bars on the x-axis. Can be 'frequency' or 'none'. Default: 'none' +# 'frequency' displays the lower cut off frequency of the bar above. +# Only supported on ncurses and noncurses output. +; xaxis = none + +# enable synchronized sync. 1 = on, 0 = off +# removes flickering in alacritty terminal emulator. +# defaults to off since the behaviour in other terminal emulators is unknown +; synchronized_sync = 0 + +# Shaders for sdl_glsl, located in $HOME/.config/cava/shaders +; vertex_shader = pass_through.vert +; fragment_shader = bar_spectrum.frag + +; for glsl output mode, keep rendering even if no audio +; continuous_rendering = 0 + +# disable console blank (screen saver) in tty +# (Not supported on FreeBSD) +; disable_blanking = 0 + +# show a flat bar at the bottom of the screen when idle, 1 = on, 0 = off +; show_idle_bar_heads = 1 + +# show waveform instead of frequency spectrum, 1 = on, 0 = off +; waveform = 0 + +[color] +gradient = 1 + +gradient_color_1 = '#81c8be' +gradient_color_2 = '#99d1db' +gradient_color_3 = '#85c1dc' +gradient_color_4 = '#8caaee' +gradient_color_5 = '#ca9ee6' +gradient_color_6 = '#f4b8e4' +gradient_color_7 = '#ea999c' +gradient_color_8 = '#e78284' + +[smoothing] + +# Percentage value for integral smoothing. Takes values from 0 - 100. +# Higher values means smoother, but less precise. 0 to disable. +# DEPRECATED as of 0.8.0, use noise_reduction instead +; integral = 77 + +# Disables or enables the so-called "Monstercat smoothing" with or without "waves". Set to 0 to disable. +; monstercat = 0 +; waves = 0 + +# Set gravity percentage for "drop off". Higher values means bars will drop faster. +# Accepts only non-negative values. 50 means half gravity, 200 means double. Set to 0 to disable "drop off". +# DEPRECATED as of 0.8.0, use noise_reduction instead +; gravity = 100 + + +# In bar height, bars that would have been lower that this will not be drawn. +# DEPRECATED as of 0.8.0 +; ignore = 0 + +# Noise reduction, int 0 - 100. default 77 +# the raw visualization is very noisy, this factor adjusts the integral and gravity filters to keep the signal smooth +# 100 will be very slow and smooth, 0 will be fast but noisy. +; noise_reduction = 77 + + +[eq] + +# This one is tricky. You can have as much keys as you want. +# Remember to uncomment more than one key! More keys = more precision. +# Look at readme.md on github for further explanations and examples. +; 1 = 1 # bass +; 2 = 1 +; 3 = 1 # midtone +; 4 = 1 +; 5 = 1 # treble diff --git a/cava/frappe-transparent.cava b/cava/frappe-transparent.cava new file mode 100644 index 0000000..42f012d --- /dev/null +++ b/cava/frappe-transparent.cava @@ -0,0 +1,11 @@ +[color] +gradient = 1 + +gradient_color_1 = '#81c8be' +gradient_color_2 = '#99d1db' +gradient_color_3 = '#85c1dc' +gradient_color_4 = '#8caaee' +gradient_color_5 = '#ca9ee6' +gradient_color_6 = '#f4b8e4' +gradient_color_7 = '#ea999c' +gradient_color_8 = '#e78284' diff --git a/cava/shaders/bar_spectrum.frag b/cava/shaders/bar_spectrum.frag new file mode 100644 index 0000000..b078913 --- /dev/null +++ b/cava/shaders/bar_spectrum.frag @@ -0,0 +1,79 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +//colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) +{ + //create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() +{ + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + //calculate a bar size + float bar_size = u_resolution.x / bars_count; + + //the y coordinate and bar values are the same + float y = bars[bar]; + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) + { + y = 1.0 / u_resolution.y; + } + + //draw the bar up to current height + if (y > fragCoord.y) + { + //make some space between bars basen on settings + if (x > (bar + 1) * (bar_size) - bar_spacing) + { + fragColor = vec4(bg_color,1.0); + } + else + { + if (gradient_count == 0) + { + fragColor = vec4(fg_color,1.0); + } + else + { + //find which color in the configured gradient we are at + int color = int((gradient_count - 1) * fragCoord.y); + + //find where on y this and next color is supposed to be + float y_min = color / (gradient_count - 1.0); + float y_max = (color + 1.0) / (gradient_count - 1.0); + + //make color + fragColor = vec4(normalize_C(fragCoord.y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); + } + } + } + else + { + fragColor = vec4(bg_color,1.0); + } +} \ No newline at end of file diff --git a/cava/shaders/northern_lights.frag b/cava/shaders/northern_lights.frag new file mode 100644 index 0000000..ecd859a --- /dev/null +++ b/cava/shaders/northern_lights.frag @@ -0,0 +1,34 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) + +uniform vec3 u_resolution; // window resolution, not used here + +//colors, configurable in cava config file +uniform vec3 bg_color; // background color(r,g,b) (0.0 - 1.0), not used here +uniform vec3 fg_color; // foreground color, not used here + +void main() +{ + // find which bar to use based on where we are on the x axis + int bar = int(bars_count * fragCoord.x); + + float bar_y = 1.0 - abs((fragCoord.y - 0.5)) * 2.0; + float y = (bars[bar]) * bar_y; + + float bar_x = (fragCoord.x - float(bar) / float(bars_count)) * bars_count; + float bar_r = 1.0 - abs((bar_x - 0.5)) * 2; + + bar_r = bar_r * bar_r * 2; + + // set color + fragColor.r = fg_color.x * y * bar_r; + fragColor.g = fg_color.y * y * bar_r; + fragColor.b = fg_color.z * y * bar_r; +} diff --git a/cava/shaders/pass_through.vert b/cava/shaders/pass_through.vert new file mode 100644 index 0000000..a4f20e5 --- /dev/null +++ b/cava/shaders/pass_through.vert @@ -0,0 +1,14 @@ +#version 330 + + +// Input vertex data, different for all executions of this shader. +layout(location = 0) in vec3 vertexPosition_modelspace; + +// Output data ; will be interpolated for each fragment. +out vec2 fragCoord; + +void main() +{ + gl_Position = vec4(vertexPosition_modelspace,1); + fragCoord = (vertexPosition_modelspace.xy+vec2(1,1))/2.0; +} diff --git a/cava/shaders/spectrogram.frag b/cava/shaders/spectrogram.frag new file mode 100644 index 0000000..ccb79ae --- /dev/null +++ b/cava/shaders/spectrogram.frag @@ -0,0 +1,53 @@ +#version 330 + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high +// to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +// colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +uniform sampler2D inputTexture; // Texture from the first render pass + +vec3 normalize_C(float y, vec3 col_1, vec3 col_2, float y_min, float y_max) { + // create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() { + // find which bar to use based on where we are on the y axis + int bar = int(bars_count * fragCoord.y); + float y = bars[bar]; + float band_size = 1.0 / float(bars_count); + float current_band_min = bar * band_size; + float current_band_max = (bar + 1) * band_size; + + int hist_length = 512; + float win_size = 1.0 / hist_length; + + if (fragCoord.x > 1.0 - win_size) { + + if (fragCoord.y > current_band_min && fragCoord.y < current_band_max) { + + fragColor = vec4(fg_color * y, 1.0); + } + } else { + vec2 offsetCoord = fragCoord; + offsetCoord.x += float(win_size); + fragColor = texture(inputTexture, offsetCoord); + } +} \ No newline at end of file diff --git a/cava/shaders/winamp_line_style_spectrum.frag b/cava/shaders/winamp_line_style_spectrum.frag new file mode 100644 index 0000000..375ff27 --- /dev/null +++ b/cava/shaders/winamp_line_style_spectrum.frag @@ -0,0 +1,112 @@ +#version 330 + +// Emulate the "line style" spectrum analyzer from Winamp 2. +// Try this config for a demonstration: + +/* +[general] +bar_width = 2 +bar_spacing = 0 +higher_cutoff_freq = 22000 + +[output] +method = sdl_glsl +channels = mono +fragment_shader = winamp_line_style_spectrum.frag + +[color] +background = '#000000' +gradient = 1 +gradient_color_1 = '#319C08' +gradient_color_2 = '#29CE10' +gradient_color_3 = '#BDDE29' +gradient_color_4 = '#DEA518' +gradient_color_5 = '#D66600' +gradient_color_6 = '#CE2910' + +[smoothing] +noise_reduction = 10 +*/ + +in vec2 fragCoord; +out vec4 fragColor; + +// bar values. defaults to left channels first (low to high), then right (high to low). +uniform float bars[512]; + +uniform int bars_count; // number of bars (left + right) (configurable) +uniform int bar_width; // bar width (configurable), not used here +uniform int bar_spacing; // space bewteen bars (configurable) + +uniform vec3 u_resolution; // window resolution + +//colors, configurable in cava config file (r,g,b) (0.0 - 1.0) +uniform vec3 bg_color; // background color +uniform vec3 fg_color; // foreground color + +uniform int gradient_count; +uniform vec3 gradient_colors[8]; // gradient colors + +vec3 normalize_C(float y,vec3 col_1, vec3 col_2, float y_min, float y_max) +{ + //create color based on fraction of this color and next color + float yr = (y - y_min) / (y_max - y_min); + return col_1 * (1.0 - yr) + col_2 * yr; +} + +void main() +{ + // find which bar to use based on where we are on the x axis + float x = u_resolution.x * fragCoord.x; + int bar = int(bars_count * fragCoord.x); + + //calculate a bar size + float bar_size = u_resolution.x / bars_count; + + //the y coordinate is stretched by 4X to resemble Winamp + float y = min(bars[bar] * 4.0, 1.0); + + // make sure there is a thin line at bottom + if (y * u_resolution.y < 1.0) + { + y = 1.0 / u_resolution.y; + } + + vec4 bar_color; + + if (gradient_count == 0) + { + bar_color = vec4(fg_color,1.0); + } + else + { + //find color in the configured gradient for the top of the bar + int color = int((gradient_count - 1) * y); + + //find where on y this and next color is supposed to be + float y_min = float(color) / (gradient_count - 1.0); + float y_max = float(color + 1) / (gradient_count - 1.0); + + //make a solid color for the entire bar + bar_color = vec4(normalize_C(y, gradient_colors[color], gradient_colors[color + 1], y_min, y_max), 1.0); + } + + + //draw the bar up to current height + if (y > fragCoord.y) + { + //make some space between bars based on settings + if (x > (bar + 1) * (bar_size) - bar_spacing) + { + fragColor = vec4(bg_color,1.0); + } + else + { + fragColor = bar_color; + } + } + else + { + fragColor = vec4(bg_color,1.0); + } +} \ No newline at end of file diff --git a/hypr/hyprland.conf b/hypr/hyprland.conf new file mode 100644 index 0000000..26676d2 --- /dev/null +++ b/hypr/hyprland.conf @@ -0,0 +1,361 @@ +source = /home/aneuhmanh/.config/hypr/themes/frappe.conf +# ####################################################################################### +# AUTOGENERATED HYPRLAND CONFIG. +# PLEASE USE THE CONFIG PROVIDED IN THE GIT REPO /examples/hyprland.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/ + +# 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=HDMI-A-1,1920x1080@100Hz,auto,auto + + +################### +### MY PROGRAMS ### +################### + +# See https://wiki.hyprland.org/Configuring/Keywords/ + +# Set programs that you use +$terminal = kitty +$fileManager = thunar +$menu = wofi --show drun + + +################# +### AUTOSTART ### +################# + +# Autostart necessary processes (like notifications daemons, status bars, etc.) +# Or execute your favorite apps at launch like this: + +# exec-once = $terminal +# exec-once = nm-applet & +exec-once = waybar +exec-once = mako +exec-once=hyprpaper -c ~/.config/hypr/hyprpaper.conf +#exec-once = mpvpaper -o "no-audio --loop-file=inf --vo=gpu-next --fs --vf=eq=brightness=-0.2" HDMI-A-1 /home/aneuhmanh/wallpaper.mp4 + +############################# +### ENVIRONMENT VARIABLES ### +############################# + +# See https://wiki.hyprland.org/Configuring/Environment-variables/ + +env = XCURSOR_THEME,Airi-Viridis +env = XCURSOR_SIZE,24 +env = HYPRCURSOR_SIZE,24 + + +################### +### PERMISSIONS ### +################### + +# See https://wiki.hyprland.org/Configuring/Permissions/ +# Please note permission changes here require a Hyprland restart and are not applied on-the-fly +# for security reasons + +# ecosystem { +# enforce_permissions = 1 +# } + +# permission = /usr/(bin|local/bin)/grim, screencopy, allow +# permission = /usr/(lib|libexec|lib64)/xdg-desktop-portal-hyprland, screencopy, allow +# permission = /usr/(bin|local/bin)/hyprpm, plugin, allow + + +##################### +### LOOK AND FEEL ### +##################### + +# Refer to https://wiki.hyprland.org/Configuring/Variables/ + +# https://wiki.hyprland.org/Configuring/Variables/#general +general { + gaps_in = 5 + gaps_out = 20 + + border_size = 2 + + col.active_border = $mauve + + col.inactive_border = rgb(232634) + + resize_on_border = $mantle + + allow_tearing = false + + layout = dwindle +} + +decoration { + rounding = 12 + rounding_power = 2 + + active_opacity = 1.0 + inactive_opacity = 0.85 + + shadow { + enabled = true + range = 6 + render_power = 4 + color = rgba(2e3440bb) + } + + blur { + enabled = true + size = 3 + passes = 1 + vibrancy = 0.17 + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#animations +animations { + enabled = yes + + # Default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + + bezier = easeOutQuint,0.23,1,0.32,1 + bezier = easeInOutCubic,0.65,0.05,0.36,1 + bezier = linear,0,0,1,1 + bezier = almostLinear,0.5,0.5,0.75,1.0 + bezier = quick,0.15,0,0.1,1 + + animation = global, 1, 10, default + animation = border, 1, 5.39, easeOutQuint + animation = windows, 1, 4.79, easeOutQuint + animation = windowsIn, 1, 4.1, easeOutQuint, popin 87% + animation = windowsOut, 1, 1.49, linear, popin 87% + animation = fadeIn, 1, 1.73, almostLinear + animation = fadeOut, 1, 1.46, almostLinear + animation = fade, 1, 3.03, quick + animation = layers, 1, 3.81, easeOutQuint + animation = layersIn, 1, 4, easeOutQuint, fade + animation = layersOut, 1, 1.5, linear, fade + animation = fadeLayersIn, 1, 1.79, almostLinear + animation = fadeLayersOut, 1, 1.39, almostLinear + animation = workspaces, 1, 1.94, almostLinear, fade + animation = workspacesIn, 1, 1.21, almostLinear, fade + animation = workspacesOut, 1, 1.94, almostLinear, fade +} + +# Ref https://wiki.hyprland.org/Configuring/Workspace-Rules/ +# "Smart gaps" / "No gaps when only" +# uncomment all if you wish to use that. +# workspace = w[tv1], gapsout:0, gapsin:0 +# workspace = f[1], gapsout:0, gapsin:0 +# windowrule = bordersize 0, floating:0, onworkspace:w[tv1] +# windowrule = rounding 0, floating:0, onworkspace:w[tv1] +# windowrule = bordersize 0, floating:0, onworkspace:f[1] +# windowrule = rounding 0, floating:0, onworkspace:f[1] + +# 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, ru + kb_variant = + kb_model = pc105 + kb_options = grp:alt_shift_toggle + kb_rules = + + follow_mouse = 1 + + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + + touchpad { + natural_scroll = false + } +} + +# https://wiki.hyprland.org/Configuring/Variables/#gestures +gestures { + workspace_swipe = false +} + +# 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 +} + + +################### +### KEYBINDINGS ### +################### + +# 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, B, exec, firefox +bind = , Print, exec, flameshot gui +bind = SUPER, I, exec, ~/.config/waybar/scripts/power_menu.sh + + +bind = SUPER, Return, exec, node /home/aneuhmanh/obs/start-record.js + +bind = SUPER, Backspace, exec, node /home/aneuhmanh/obs/stop-record.js + +bind = SUPER, H, exec, flatpak run dev.vencord.Vesktop +bind = $mainMod, left, movefocus, l +bind = $mainMod, right, movefocus, r +bind = $mainMod, up, movefocus, u +bind = $mainMod, down, movefocus, d + +bind = $mainMod ALT, left, moveactive, -20 0 +bind = $mainMod ALT, right, moveactive, 20 0 +bind = $mainMod ALT, up, moveactive, 0 -20 +bind = $mainMod ALT, down, moveactive, 0 20 + +bind = $mainMod SHIFT, left, resizeactive, -20 0 +bind = $mainMod SHIFT, right, resizeactive, 20 0 +bind = $mainMod SHIFT, up, resizeactive, 0 -20 +bind = $mainMod SHIFT, down, resizeactive, 0 20 + +bind = $mainMod, KP_5, centerwindow + +bind = $mainMod, KP_4, resizeactive, exact 960 1080 +bind = $mainMod, KP_4, moveactive, exact 0 0 + +bind = $mainMod, KP_6, resizeactive, exact 960 1080 +bind = $mainMod, KP_6, moveactive, exact 960 0 + +bind = $mainMod, KP_8, resizeactive, exact 1920 1080 +bind = $mainMod, KP_8, moveactive, exact 0 0 + +bind = $mainMod ALT, left, moveactive, -20 0 +bind = $mainMod ALT, right, moveactive, 20 0 +bind = $mainMod ALT, up, moveactive, 0 -20 +bind = $mainMod ALT, down, moveactive, 0 20 + +bind = $mainMod SHIFT, left, resizeactive, -20 0 +bind = $mainMod SHIFT, right, resizeactive, 20 0 +bind = $mainMod SHIFT, up, resizeactive, 0 -20 +bind = $mainMod SHIFT, down, resizeactive, 0 20 + +bind = $mainMod, G, centerwindow + +bind = $mainMod, KP_4, moveactive, exact 0 0 +bind = $mainMod, KP_4, resizeactive, exact 960 1080 + +bind = $mainMod, KP_6, moveactive, exact 960 0 +bind = $mainMod, KP_6, resizeactive, exact 960 1080 + +bind = $mainMod, KP_5, moveactive, exact 480 0 +bind = $mainMod, KP_5, resizeactive, exact 960 1080 + +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 CTRL, right, resizeactive, 20 0 +bind = $mainMod CTRL, left, resizeactive, -20 0 +bind = $mainMod CTRL, up, resizeactive, 0 -20 +bind = $mainMod CTRL, down, resizeactive, 0 20 + +bind = $mainMod CTRL SHIFT, right, resizeactive, -20 0 +bind = $mainMod CTRL SHIFT, left, resizeactive, 20 0 +bind = $mainMod CTRL SHIFT, up, resizeactive, 0 20 +bind = $mainMod CTRL SHIFT, down, resizeactive, 0 -20 + +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, S, togglespecialworkspace, magic +bind = $mainMod SHIFT, S, 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 + +bindel = ,XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 5%+ +bindel = ,XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bindel = ,XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bindel = ,XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_AUDIO_SOURCE@ toggle +bindel = ,XF86MonBrightnessUp, exec, brightnessctl -e4 -n2 set 5%+ +bindel = ,XF86MonBrightnessDown, exec, brightnessctl -e4 -n2 set 5%- + +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPause, exec, playerctl play-pause +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioPrev, exec, playerctl previous + +############################## +### 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 +# windowrule = float,class:^(kitty)$,title:^(kitty)$ + +# Ignore maximize requests from apps. You'll probably like this. +windowrule = suppressevent maximize, class:.* + +# Fix some dragging issues with XWayland +windowrule = nofocus,class:^$,title:^$,xwayland:1,floating:1,fullscreen:0,pinned:0 diff --git a/hypr/hyprpaper.conf b/hypr/hyprpaper.conf new file mode 100644 index 0000000..63a9ce9 --- /dev/null +++ b/hypr/hyprpaper.conf @@ -0,0 +1,2 @@ +preload = /home/aneuhmanh/wallpaper.png +wallpaper = HDMI-A-1,/home/aneuhmanh/wallpaper.png diff --git a/hypr/themes/frappe.conf b/hypr/themes/frappe.conf new file mode 100644 index 0000000..9bcd81f --- /dev/null +++ b/hypr/themes/frappe.conf @@ -0,0 +1,78 @@ + +$rosewater = rgb(f2d5cf) +$rosewaterAlpha = f2d5cf + +$flamingo = rgb(eebebe) +$flamingoAlpha = eebebe + +$pink = rgb(f4b8e4) +$pinkAlpha = f4b8e4 + +$mauve = rgb(ca9ee6) +$mauveAlpha = ca9ee6 + +$red = rgb(e78284) +$redAlpha = e78284 + +$maroon = rgb(ea999c) +$maroonAlpha = ea999c + +$peach = rgb(ef9f76) +$peachAlpha = ef9f76 + +$yellow = rgb(e5c890) +$yellowAlpha = e5c890 + +$green = rgb(a6d189) +$greenAlpha = a6d189 + +$teal = rgb(81c8be) +$tealAlpha = 81c8be + +$sky = rgb(99d1db) +$skyAlpha = 99d1db + +$sapphire = rgb(85c1dc) +$sapphireAlpha = 85c1dc + +$blue = rgb(8caaee) +$blueAlpha = 8caaee + +$lavender = rgb(babbf1) +$lavenderAlpha = babbf1 + +$text = rgb(c6d0f5) +$textAlpha = c6d0f5 + +$subtext1 = rgb(b5bfe2) +$subtext1Alpha = b5bfe2 + +$subtext0 = rgb(a5adce) +$subtext0Alpha = a5adce + +$overlay2 = rgb(949cbb) +$overlay2Alpha = 949cbb + +$overlay1 = rgb(838ba7) +$overlay1Alpha = 838ba7 + +$overlay0 = rgb(737994) +$overlay0Alpha = 737994 + +$surface2 = rgb(626880) +$surface2Alpha = 626880 + +$surface1 = rgb(51576d) +$surface1Alpha = 51576d + +$surface0 = rgb(414559) +$surface0Alpha = 414559 + +$base = rgb(303446) +$baseAlpha = 303446 + +$mantle = rgb(292c3c) +$mantleAlpha = 292c3c + +$crust = rgb(232634) +$crustAlpha = 232634 diff --git a/kitty/catppuccin b/kitty/catppuccin new file mode 160000 index 0000000..b14e838 --- /dev/null +++ b/kitty/catppuccin @@ -0,0 +1 @@ +Subproject commit b14e8385c827f2d41660b71c7fec1e92bdcf2676 diff --git a/kitty/current-theme.conf b/kitty/current-theme.conf new file mode 100644 index 0000000..80c3a35 --- /dev/null +++ b/kitty/current-theme.conf @@ -0,0 +1,80 @@ +# vim:ft=kitty + +## name: Catppuccin-Frappe +## author: Pocco81 (https://github.com/Pocco81) +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/frappe.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #C6D0F5 +background #303446 +selection_foreground #303446 +selection_background #F2D5CF + +# Cursor colors +cursor #F2D5CF +cursor_text_color #303446 + +# URL underline color when hovering with mouse +url_color #F2D5CF + +# Kitty window border colors +active_border_color #BABBF1 +inactive_border_color #737994 +bell_border_color #E5C890 + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #232634 +active_tab_background #CA9EE6 +inactive_tab_foreground #C6D0F5 +inactive_tab_background #292C3C +tab_bar_background #232634 + +# Colors for marks (marked text in the terminal) +mark1_foreground #303446 +mark1_background #BABBF1 +mark2_foreground #303446 +mark2_background #CA9EE6 +mark3_foreground #303446 +mark3_background #85C1DC + +# The 16 terminal colors + +# black +color0 #51576D +color8 #626880 + +# red +color1 #E78284 +color9 #E78284 + +# green +color2 #A6D189 +color10 #A6D189 + +# yellow +color3 #E5C890 +color11 #E5C890 + +# blue +color4 #8CAAEE +color12 #8CAAEE + +# magenta +color5 #F4B8E4 +color13 #F4B8E4 + +# cyan +color6 #81C8BE +color14 #81C8BE + +# white +color7 #B5BFE2 +color15 #A5ADCE diff --git a/kitty/kitty.conf b/kitty/kitty.conf new file mode 100644 index 0000000..b3b009d --- /dev/null +++ b/kitty/kitty.conf @@ -0,0 +1,24 @@ +font_family JetBrainsMono Nerd Font +fallback_family Noto Color Emoji +font_size 12.0 + +confirm_quit no +force_window_close yes +confirm_os_window_close 0 +env TERM=xterm-256color + +map ctrl+shift+equal change_font_size all +2.0 +map ctrl+shift+minus change_font_size all -2.0 + +selection: + save_to_clipboard: true + +include themes/Catppuccin-Frappe.conf + +tab_bar_min_tabs 1 +tab_bar_edge bottom +tab_bar_style powerline +tab_powerline_style slanted +tab_title_template {title}{' :{}:'.format(num_windows) if num_windows > 1 else ''} + +include current-theme.conf diff --git a/kitty/themes/Catppuccin-Frappe.conf b/kitty/themes/Catppuccin-Frappe.conf new file mode 100644 index 0000000..a785bce --- /dev/null +++ b/kitty/themes/Catppuccin-Frappe.conf @@ -0,0 +1,80 @@ +# vim:ft=kitty + +## name: Catppuccin Kitty Frappé +## author: Catppuccin Org +## license: MIT +## upstream: https://github.com/catppuccin/kitty/blob/main/themes/frappe.conf +## blurb: Soothing pastel theme for the high-spirited! + + + +# The basic colors +foreground #c6d0f5 +background #303446 +selection_foreground #303446 +selection_background #f2d5cf + +# Cursor colors +cursor #f2d5cf +cursor_text_color #303446 + +# URL underline color when hovering with mouse +url_color #f2d5cf + +# Kitty window border colors +active_border_color #babbf1 +inactive_border_color #737994 +bell_border_color #e5c890 + +# OS Window titlebar colors +wayland_titlebar_color system +macos_titlebar_color system + +# Tab bar colors +active_tab_foreground #232634 +active_tab_background #ca9ee6 +inactive_tab_foreground #c6d0f5 +inactive_tab_background #292c3c +tab_bar_background #232634 + +# Colors for marks (marked text in the terminal) +mark1_foreground #303446 +mark1_background #babbf1 +mark2_foreground #303446 +mark2_background #ca9ee6 +mark3_foreground #303446 +mark3_background #85c1dc + +# The 16 terminal colors + +# black +color0 #51576d +color8 #626880 + +# red +color1 #e78284 +color9 #e78284 + +# green +color2 #a6d189 +color10 #a6d189 + +# yellow +color3 #e5c890 +color11 #e5c890 + +# blue +color4 #8caaee +color12 #8caaee + +# magenta +color5 #f4b8e4 +color13 #f4b8e4 + +# cyan +color6 #81c8be +color14 #81c8be + +# white +color7 #b5bfe2 +color15 #a5adce diff --git a/mako/config b/mako/config new file mode 100644 index 0000000..70f7772 --- /dev/null +++ b/mako/config @@ -0,0 +1,20 @@ +font=JetBrainsMono Nerd Font 11 +background-color=#303446 +text-color=#c6d0f5 +border-color=#ca9ee6 +border-size=2 +padding=10 +margin=10 +default-timeout=5000 +max-history=25 +layer=overlay +anchor=top-right +border-radius=8 +icon-path=/usr/share/icons +progress-color=#414559 + +[urgency=low] +border-color=#4c566a + +[urgency=high] +border-color=#ef9f76 diff --git a/nvim/init.lua b/nvim/init.lua new file mode 100644 index 0000000..8e0f5e7 --- /dev/null +++ b/nvim/init.lua @@ -0,0 +1,267 @@ +local lazypath = vim.fn.stdpath("data") .. "/lazy/lazy.nvim" + +if not vim.loop.fs_stat(lazypath) then + vim.fn.system({ + "git", + "clone", + "--filter=blob:none", + "https://github.com/folke/lazy.nvim.git", + "--branch=stable", + lazypath, + }) +end + +vim.opt.rtp:prepend(lazypath) + +require("lazy").setup({ + { + "catppuccin/nvim", + name = "catppuccin", + priority = 1000, + config = function() + require("catppuccin").setup({ + flavour = "frappe", + background = { + light = "latte", + dark = "frappe", + }, + transparent_background = false, + show_end_of_buffer = false, + term_colors = false, + dim_inactive = { + enabled = false, + shade = "dark", + percentage = 0.15, + }, + styles = { + comments = { "italic" }, + conditionals = { "italic" }, + }, + color_overrides = { + frappe = { + mauve = "#ca9ee6", + }, + }, + integrations = { + cmp = true, + gitsigns = true, + nvimtree = true, + treesitter = true, + notify = false, + mini = { + enabled = true, + indentscope_color = "", + }, + }, + }) + vim.cmd.colorscheme("catppuccin") + end, + }, + + { + "nvim-tree/nvim-tree.lua", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + local function my_on_attach(bufnr) + local api = require("nvim-tree.api") + api.config.mappings.default_on_attach(bufnr) + end + + require("nvim-tree").setup({ + disable_netrw = true, + hijack_netrw = true, + update_focused_file = { + enable = true, + update_cwd = true, + }, + view = { + width = 40, + side = "left", + }, + renderer = { + highlight_git = true, + icons = { + show = { + file = true, + folder = true, + folder_arrow = true, + git = true, + }, + }, + }, + on_attach = my_on_attach, + }) + + vim.keymap.set("n", "", ":NvimTreeToggle", { noremap = true, silent = true }) + end, + }, + + { + "lewis6991/gitsigns.nvim", + config = function() + require("gitsigns").setup() + end, + }, + + +{ + "nvim-lualine/lualine.nvim", + config = function() + local function gitsigns_status() + local gs = vim.b.gitsigns_status_dict + if gs then + local added = gs.added or 0 + local changed = gs.changed or 0 + local removed = gs.removed or 0 + local status = "" + if added > 0 then status = status .. "[+]" .. added .. " " end + if changed > 0 then status = status .. "[~]" .. changed .. " " end + if removed > 0 then status = status .. "[-]" .. removed .. " " end + return status + end + return "" + end + + require("lualine").setup({ + options = { + theme = "catppuccin", + section_separators = { "", "" }, + component_separators = { "", "" }, + }, + sections = { + lualine_a = { "mode" }, + lualine_b = { "branch" }, + lualine_c = { "filename" }, + lualine_x = { + gitsigns_status, + "encoding", + "filetype", + }, + lualine_y = {}, + lualine_z = {}, + }, + }) + end, +}, + + +{ + "akinsho/bufferline.nvim", + tag = "*", + dependencies = { "nvim-tree/nvim-web-devicons" }, + config = function() + vim.g.mapleader = "\\" + + require("bufferline").setup({ + options = { + show_buffer_close_icons = true, + tab_size = 22, + separator_style = "slant", + }, + }) + + for i = 1, 9 do + vim.keymap.set("n", "" .. i, ":BufferLineGoToBuffer " .. i .. "", { noremap = true, silent = true }) + end + + vim.keymap.set("n", "", ":BufferLineCycleNext", { noremap = true, silent = true }) + vim.keymap.set("n", "", ":BufferLineCyclePrev", { noremap = true, silent = true }) + end, +}, + + { + "petertriho/nvim-scrollbar", + config = function() + require("scrollbar").setup() + end, + }, + + { + "nvim-telescope/telescope.nvim", + dependencies = { "nvim-lua/plenary.nvim" }, + config = function() + require("telescope").setup() + end, + }, + + { + "stevearc/dressing.nvim", + opts = {}, + }, + + { + "brenoprata10/nvim-highlight-colors", + config = function() + require("nvim-highlight-colors").setup({ + render = "background", + enable_named_colors = true, + enable_tailwind = true, + }) + end, + }, + + { + "williamboman/mason.nvim", + build = ":MasonUpdate", + config = true, + }, + + { + "williamboman/mason-lspconfig.nvim", + config = true, + }, + + { + "neovim/nvim-lspconfig", + config = function() + require("mason").setup() + require("mason-lspconfig").setup({ + automatic_installation = true, + }) + require("lspconfig").lua_ls.setup({}) + end, + }, + + { + "hrsh7th/nvim-cmp", + dependencies = { + "hrsh7th/cmp-nvim-lsp", + "L3MON4D3/LuaSnip", + }, + config = function() + local cmp = require("cmp") + cmp.setup({ + snippet = { + expand = function(args) + require("luasnip").lsp_expand(args.body) + end, + }, + mapping = cmp.mapping.preset.insert({ + [""] = cmp.mapping.select_next_item(), + [""] = cmp.mapping.select_prev_item(), + [""] = cmp.mapping.confirm({ select = true }), + }), + sources = { + { name = "nvim_lsp" }, + }, + }) + end, + }, +}) + +-- Общие настройки +vim.opt.termguicolors = true +vim.opt.number = true +vim.opt.cursorline = true +vim.opt.expandtab = true +vim.opt.shiftwidth = 2 +vim.opt.tabstop = 2 +vim.opt.smartindent = true +vim.opt.mouse = "a" +vim.opt.clipboard = "unnamedplus" +vim.opt.showcmd = false + +vim.keymap.set("n", "", "h", { noremap = true }) +vim.keymap.set("n", "", "j", { noremap = true }) +vim.keymap.set("n", "", "k", { noremap = true }) +vim.keymap.set("n", "", "l", { noremap = true }) diff --git a/nvim/lazy-lock.json b/nvim/lazy-lock.json new file mode 100644 index 0000000..72b9bee --- /dev/null +++ b/nvim/lazy-lock.json @@ -0,0 +1,21 @@ +{ + "LuaSnip": { "branch": "master", "commit": "fb525166ccc30296fb3457441eb979113de46b00" }, + "bufferline.nvim": { "branch": "main", "commit": "655133c3b4c3e5e05ec549b9f8cc2894ac6f51b3" }, + "catppuccin": { "branch": "main", "commit": "fa42eb5e26819ef58884257d5ae95dd0552b9a66" }, + "cmp-nvim-lsp": { "branch": "main", "commit": "a8912b88ce488f411177fc8aed358b04dc246d7b" }, + "dressing.nvim": { "branch": "master", "commit": "2d7c2db2507fa3c4956142ee607431ddb2828639" }, + "gitsigns.nvim": { "branch": "main", "commit": "88205953bd748322b49b26e1dfb0389932520dc9" }, + "lazy.nvim": { "branch": "main", "commit": "6c3bda4aca61a13a9c63f1c1d1b16b9d3be90d7a" }, + "lualine.nvim": { "branch": "master", "commit": "a94fc68960665e54408fe37dcf573193c4ce82c9" }, + "mason-lspconfig.nvim": { "branch": "main", "commit": "f54e3c11fc9ebfcfc27e696182b0295b071d0811" }, + "mason.nvim": { "branch": "main", "commit": "8024d64e1330b86044fed4c8494ef3dcd483a67c" }, + "nvim-cmp": { "branch": "main", "commit": "b5311ab3ed9c846b585c0c15b7559be131ec4be9" }, + "nvim-highlight-colors": { "branch": "main", "commit": "b42a5ccec7457b44e89f7ed3b3afb1b375bb2093" }, + "nvim-lspconfig": { "branch": "master", "commit": "314b35335cc84bc2a085c84c69da955ba22da163" }, + "nvim-scrollbar": { "branch": "main", "commit": "5b103ef0fd2e8b9b4be3878ed38d224522192c6c" }, + "nvim-tree.lua": { "branch": "master", "commit": "8eb5e0bfd1c4da6efc03ab0c1ccf463dbaae831e" }, + "nvim-web-devicons": { "branch": "master", "commit": "1fb58cca9aebbc4fd32b086cb413548ce132c127" }, + "plenary.nvim": { "branch": "master", "commit": "857c5ac632080dba10aae49dba902ce3abf91b35" }, + "telescope.nvim": { "branch": "master", "commit": "b4da76be54691e854d3e0e02c36b0245f945c2c7" }, + "toggleterm.nvim": { "branch": "main", "commit": "50ea089fc548917cc3cc16b46a8211833b9e3c7c" } +} diff --git a/nvim/plugin/packer_compiled.lua b/nvim/plugin/packer_compiled.lua new file mode 100644 index 0000000..642db6e --- /dev/null +++ b/nvim/plugin/packer_compiled.lua @@ -0,0 +1,124 @@ +-- Automatically generated packer.nvim plugin loader code + +if vim.api.nvim_call_function('has', {'nvim-0.5'}) ~= 1 then + vim.api.nvim_command('echohl WarningMsg | echom "Invalid Neovim version for packer.nvim! | echohl None"') + return +end + +vim.api.nvim_command('packadd packer.nvim') + +local no_errors, error_msg = pcall(function() + +_G._packer = _G._packer or {} +_G._packer.inside_compile = true + +local time +local profile_info +local should_profile = false +if should_profile then + local hrtime = vim.loop.hrtime + profile_info = {} + time = function(chunk, start) + if start then + profile_info[chunk] = hrtime() + else + profile_info[chunk] = (hrtime() - profile_info[chunk]) / 1e6 + end + end +else + time = function(chunk, start) end +end + +local function save_profiles(threshold) + local sorted_times = {} + for chunk_name, time_taken in pairs(profile_info) do + sorted_times[#sorted_times + 1] = {chunk_name, time_taken} + end + table.sort(sorted_times, function(a, b) return a[2] > b[2] end) + local results = {} + for i, elem in ipairs(sorted_times) do + if not threshold or threshold and elem[2] > threshold then + results[i] = elem[1] .. ' took ' .. elem[2] .. 'ms' + end + end + if threshold then + table.insert(results, '(Only showing plugins that took longer than ' .. threshold .. ' ms ' .. 'to load)') + end + + _G._packer.profile_output = results +end + +time([[Luarocks path setup]], true) +local package_path_str = "/home/aneuhmanh/.cache/nvim/packer_hererocks/2.1.1748459687/share/lua/5.1/?.lua;/home/aneuhmanh/.cache/nvim/packer_hererocks/2.1.1748459687/share/lua/5.1/?/init.lua;/home/aneuhmanh/.cache/nvim/packer_hererocks/2.1.1748459687/lib/luarocks/rocks-5.1/?.lua;/home/aneuhmanh/.cache/nvim/packer_hererocks/2.1.1748459687/lib/luarocks/rocks-5.1/?/init.lua" +local install_cpath_pattern = "/home/aneuhmanh/.cache/nvim/packer_hererocks/2.1.1748459687/lib/lua/5.1/?.so" +if not string.find(package.path, package_path_str, 1, true) then + package.path = package.path .. ';' .. package_path_str +end + +if not string.find(package.cpath, install_cpath_pattern, 1, true) then + package.cpath = package.cpath .. ';' .. install_cpath_pattern +end + +time([[Luarocks path setup]], false) +time([[try_loadstring definition]], true) +local function try_loadstring(s, component, name) + local success, result = pcall(loadstring(s), name, _G.packer_plugins[name]) + if not success then + vim.schedule(function() + vim.api.nvim_notify('packer.nvim: Error running ' .. component .. ' for ' .. name .. ': ' .. result, vim.log.levels.ERROR, {}) + end) + end + return result +end + +time([[try_loadstring definition]], false) +time([[Defining packer_plugins]], true) +_G.packer_plugins = { + ["bufferline.nvim"] = { + loaded = true, + path = "/home/aneuhmanh/.local/share/nvim/site/pack/packer/start/bufferline.nvim", + url = "https://github.com/akinsho/bufferline.nvim" + }, + catppuccin = { + loaded = true, + path = "/home/aneuhmanh/.local/share/nvim/site/pack/packer/start/catppuccin", + url = "https://github.com/catppuccin/nvim" + }, + ["lualine.nvim"] = { + loaded = true, + path = "/home/aneuhmanh/.local/share/nvim/site/pack/packer/start/lualine.nvim", + url = "https://github.com/nvim-lualine/lualine.nvim" + }, + ["nvim-tree.lua"] = { + loaded = true, + path = "/home/aneuhmanh/.local/share/nvim/site/pack/packer/start/nvim-tree.lua", + url = "https://github.com/nvim-tree/nvim-tree.lua" + }, + ["nvim-web-devicons"] = { + loaded = true, + path = "/home/aneuhmanh/.local/share/nvim/site/pack/packer/start/nvim-web-devicons", + url = "https://github.com/nvim-tree/nvim-web-devicons" + }, + ["packer.nvim"] = { + loaded = true, + path = "/home/aneuhmanh/.local/share/nvim/site/pack/packer/start/packer.nvim", + url = "https://github.com/wbthomason/packer.nvim" + } +} + +time([[Defining packer_plugins]], false) + +_G._packer.inside_compile = false +if _G._packer.needs_bufread == true then + vim.cmd("doautocmd BufRead") +end +_G._packer.needs_bufread = false + +if should_profile then save_profiles() end + +end) + +if not no_errors then + error_msg = error_msg:gsub('"', '\\"') + vim.api.nvim_command('echohl ErrorMsg | echom "Error in packer_compiled: '..error_msg..'" | echom "Please check your config for correctness" | echohl None') +end diff --git a/waybar/backup/config b/waybar/backup/config new file mode 100644 index 0000000..2bfbf09 --- /dev/null +++ b/waybar/backup/config @@ -0,0 +1,108 @@ +{ + "layer": "top", + "position": "top", + + "modules-left": [ + "cpu", + "custom/cpu_temp", + + "memory", + + "custom/gpu", + "custom/gpu_temp", + + "custom/disk", + "custom/disk_hdd" + ], + + "modules-center": ["clock"], + "modules-right": ["custom/net_speed", "network", "pulseaudio","custom/keyboard-state", "tray", "custom/uptime", "custom/power"], + "custom/net_speed": { + "exec": "~/.config/waybar/scripts/net_speed.sh", + "interval": 1, + "format": "{}", + "return-type": "string" + }, + + "cpu": { + "format": " {usage}%", + "interval": 1 + }, + +"custom/cpu_temp": { + "exec": "~/.config/waybar/scripts/cpu_temp.sh", + "interval": 1, + "format": " {}°C", + "return-type": "string" +}, + "memory": { + "format": " {used:0.1f}G", + "interval": 1 + }, + + "custom/gpu": { + "exec": "~/.config/waybar/scripts/gpu_usage.sh", + "interval": 1, + "format": "󰘚 {}%", + "return-type": "string" + }, + + "custom/gpu_temp": { + "exec": "~/.config/waybar/scripts/gpu_temp.sh", + "interval": 1, + "format": " {}°C", + "return-type": "string" + }, + + "custom/disk": { + "exec": "~/.config/waybar/scripts/disk_usage.sh", + "interval": 60, + "format": " {}", + "return-type": "string" + }, + + "custom/disk_hdd": { + "exec": "~/.config/waybar/scripts/disk_hdd.sh", + "interval": 60, + "format": " {}", + "return-type": "string" + }, + + "clock": { + "format": " {:%H:%M %d.%m.%Y}" + }, + + "network": { + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": "🖧 {ipaddr}", + "format-disconnected": " No Net" + }, + +"pulseaudio": { + "format": " {volume}%", + "format-muted": " mute", + "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle" +}, + "tray": { + "icon-size": 16, + "spacing": 10, + "types": ["systemtray"] + }, + "custom/uptime": { + "exec": "uptime -p | sed 's/up //'", + "interval": 60, + "format": "󰔟 {}", + "return-type": "string" +}, +"custom/power": { + "format": "󰐥", + "tooltip": "Power Menu", + "on-click": "~/.config/waybar/scripts/power_menu.sh" +}, +"custom/keyboard-state": { + "exec": "/home/aneuhmanh/.config/waybar/scripts/keyboard_state_daemon.sh", + "format": "{}", + "return-type": "text", + "tail": true +} +} diff --git a/waybar/backup/style.css b/waybar/backup/style.css new file mode 100644 index 0000000..5a6a92e --- /dev/null +++ b/waybar/backup/style.css @@ -0,0 +1,97 @@ +@import "./frappe.css"; + +* { + font-family: "JetBrainsMono Nerd Font", "Font Awesome 6 Free", sans-serif; + font-size: 14px; + color: @text; + background-color: @base; + min-height: 0; + padding: 0; + margin: 0; + border: none; +} + +window#waybar { + background-color: @base; + border-bottom: 2px solid @overlay0; +} + +#cpu, +#custom-cpu_temp, +#memory, +#custom-gpu, +#custom-gpu_temp, +#custom-disk, +#custom-disk_hdd, +#network, +#pulseaudio, +#clock, +#custom-uptime, +#custom-power, +#custom-keyboard-state, +#custom-net_speed { + padding: 0 10px; + background-color: @surface0; + border-radius: 10px; +} + +#tray > * { + background-color: @surface0; + border-radius: 6px; + padding: 4px; +} +#cpu { + margin-left: 12px; +} +#custom-cpu_temp { + margin-left: 6px; +} +#memory { + margin-left: 12px; +} +#custom-gpu { + margin-left: 12px; +} +#custom-gpu_temp { + margin-left: 6px; +} +#custom-disk { + margin-left: 12px; +} +#custom-disk_hdd { + margin-left: 6px; + margin-right: 12px; +} + +#clock { + font-weight: bold; +} + +#custom-net_speed { + margin-left: 12px; +} +#network { + margin-left: 12px; +} +#pulseaudio { + margin-left: 12px; +} +#custom-keyboard-state { + margin-left: 12px; +} +#custom-uptime { + margin-left: 12px; +} +#custom-power { + margin-left: 12px; + margin-right: 12px; +} +#tray { + margin-left: 12px; +} + +#custom-cpu_temp.critical, +#custom-gpu_temp.critical { + color: @red; + background-color: @overlay1; +} diff --git a/waybar/config b/waybar/config new file mode 100644 index 0000000..2bfbf09 --- /dev/null +++ b/waybar/config @@ -0,0 +1,108 @@ +{ + "layer": "top", + "position": "top", + + "modules-left": [ + "cpu", + "custom/cpu_temp", + + "memory", + + "custom/gpu", + "custom/gpu_temp", + + "custom/disk", + "custom/disk_hdd" + ], + + "modules-center": ["clock"], + "modules-right": ["custom/net_speed", "network", "pulseaudio","custom/keyboard-state", "tray", "custom/uptime", "custom/power"], + "custom/net_speed": { + "exec": "~/.config/waybar/scripts/net_speed.sh", + "interval": 1, + "format": "{}", + "return-type": "string" + }, + + "cpu": { + "format": " {usage}%", + "interval": 1 + }, + +"custom/cpu_temp": { + "exec": "~/.config/waybar/scripts/cpu_temp.sh", + "interval": 1, + "format": " {}°C", + "return-type": "string" +}, + "memory": { + "format": " {used:0.1f}G", + "interval": 1 + }, + + "custom/gpu": { + "exec": "~/.config/waybar/scripts/gpu_usage.sh", + "interval": 1, + "format": "󰘚 {}%", + "return-type": "string" + }, + + "custom/gpu_temp": { + "exec": "~/.config/waybar/scripts/gpu_temp.sh", + "interval": 1, + "format": " {}°C", + "return-type": "string" + }, + + "custom/disk": { + "exec": "~/.config/waybar/scripts/disk_usage.sh", + "interval": 60, + "format": " {}", + "return-type": "string" + }, + + "custom/disk_hdd": { + "exec": "~/.config/waybar/scripts/disk_hdd.sh", + "interval": 60, + "format": " {}", + "return-type": "string" + }, + + "clock": { + "format": " {:%H:%M %d.%m.%Y}" + }, + + "network": { + "format-wifi": " {essid} ({signalStrength}%)", + "format-ethernet": "🖧 {ipaddr}", + "format-disconnected": " No Net" + }, + +"pulseaudio": { + "format": " {volume}%", + "format-muted": " mute", + "on-click": "pactl set-sink-mute @DEFAULT_SINK@ toggle" +}, + "tray": { + "icon-size": 16, + "spacing": 10, + "types": ["systemtray"] + }, + "custom/uptime": { + "exec": "uptime -p | sed 's/up //'", + "interval": 60, + "format": "󰔟 {}", + "return-type": "string" +}, +"custom/power": { + "format": "󰐥", + "tooltip": "Power Menu", + "on-click": "~/.config/waybar/scripts/power_menu.sh" +}, +"custom/keyboard-state": { + "exec": "/home/aneuhmanh/.config/waybar/scripts/keyboard_state_daemon.sh", + "format": "{}", + "return-type": "text", + "tail": true +} +} diff --git a/waybar/frappe.css b/waybar/frappe.css new file mode 100644 index 0000000..c06b8fb --- /dev/null +++ b/waybar/frappe.css @@ -0,0 +1,26 @@ +@define-color rosewater #f2d5cf; +@define-color flamingo #eebebe; +@define-color pink #f4b8e4; +@define-color mauve #ca9ee6; +@define-color red #e78284; +@define-color maroon #ea999c; +@define-color peach #ef9f76; +@define-color yellow #e5c890; +@define-color green #a6d189; +@define-color teal #81c8be; +@define-color sky #99d1db; +@define-color sapphire #85c1dc; +@define-color blue #8caaee; +@define-color lavender #babbf1; +@define-color text #c6d0f5; +@define-color subtext1 #b5bfe2; +@define-color subtext0 #a5adce; +@define-color overlay2 #949cbb; +@define-color overlay1 #838ba7; +@define-color overlay0 #737994; +@define-color surface2 #626880; +@define-color surface1 #51576d; +@define-color surface0 #414559; +@define-color base #303446; +@define-color mantle #292c3c; +@define-color crust #232634; diff --git a/waybar/scripts/cpu.sh b/waybar/scripts/cpu.sh new file mode 100755 index 0000000..b1d1976 --- /dev/null +++ b/waybar/scripts/cpu.sh @@ -0,0 +1,18 @@ +#!/bin/bash + +if command -v sensors &> /dev/null; then + temp=$(sensors | grep -m1 -E 'Package id 0|Tdie|Tctl|Core 0' | grep -oP '\+?\d+(\.\d+)?(?=°C)') + if [[ -n "$temp" ]]; then + echo "$temp" + exit 0 + fi +fi + +if [[ -f /sys/class/thermal/thermal_zone0/temp ]]; then + temp=$(cat /sys/class/thermal/thermal_zone0/temp) + echo "$((temp / 1000))" + exit 0 +fi + +echo "N/A" +exit 1 diff --git a/waybar/scripts/cpu_temp.sh b/waybar/scripts/cpu_temp.sh new file mode 100755 index 0000000..3874351 --- /dev/null +++ b/waybar/scripts/cpu_temp.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +if command -v sensors &> /dev/null; then + raw_temp=$(sensors | grep -m1 -E 'Package id 0|Tdie|Tctl|Core 0' | grep -oP '\+?\d+(\.\d+)?(?=°C)') + if [[ -n "$raw_temp" ]]; then + # Удалим "+" и округлим + clean_temp=$(echo "$raw_temp" | sed 's/+//' | awk '{printf("%d\n", $1)}') + echo "$clean_temp" + exit 0 + fi +fi + +if [[ -f /sys/class/thermal/thermal_zone0/temp ]]; then + temp=$(cat /sys/class/thermal/thermal_zone0/temp) + echo "$((temp / 1000))" + exit 0 +fi + +echo "N/A" +exit 1 diff --git a/waybar/scripts/datetime.sh b/waybar/scripts/datetime.sh new file mode 100755 index 0000000..763a6c0 --- /dev/null +++ b/waybar/scripts/datetime.sh @@ -0,0 +1,3 @@ +#!/bin/bash +date_str=$(date "+%H:%M:%S %d.%m.%Y") +echo "{\"text\":\" $date_str\",\"tooltip\":\"Current Time and Date\"}" diff --git a/waybar/scripts/disk.sh b/waybar/scripts/disk.sh new file mode 100755 index 0000000..48f796e --- /dev/null +++ b/waybar/scripts/disk.sh @@ -0,0 +1,4 @@ +#!/bin/bash +main_disk=$(df -h / | awk 'NR==2 {print $3 "/" $2}') +hdd_disk=$(df -h /mnt/hdd 2>/dev/null | awk 'NR==2 {print $3 "/" $2}') +echo "{\"text\":\" ${main_disk} / ${hdd_disk:-N/A}\",\"tooltip\":\"Disk Usage\"}" diff --git a/waybar/scripts/disk_hdd.sh b/waybar/scripts/disk_hdd.sh new file mode 100755 index 0000000..e6072d6 --- /dev/null +++ b/waybar/scripts/disk_hdd.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +# Выводит использование /mnt/hdd (или укажи свой путь) +mount_point="/mnt/hdd" + +if mount | grep "$mount_point" > /dev/null; then + usage=$(df -h "$mount_point" | awk 'NR==2 {print $3 "/" $2}') + echo "$usage" +else + echo "N/A" +fi diff --git a/waybar/scripts/disk_usage.sh b/waybar/scripts/disk_usage.sh new file mode 100755 index 0000000..7c90745 --- /dev/null +++ b/waybar/scripts/disk_usage.sh @@ -0,0 +1,4 @@ +#!/bin/bash + +used=$(df -h / | awk 'NR==2 {print $3 "/" $2}') +echo "$used" diff --git a/waybar/scripts/gpu.sh b/waybar/scripts/gpu.sh new file mode 100755 index 0000000..8e0536a --- /dev/null +++ b/waybar/scripts/gpu.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +USAGE=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | head -n1) +TEMP=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits | head -n1) + +if [[ -z "$USAGE" || -z "$TEMP" ]]; then + echo '{"icon": "", "usage": "?", "temp": "?"}' +else + echo "{\"icon\": \"\", \"usage\": \"$USAGE\", \"temp\": \"$TEMP\"}" +fi + diff --git a/waybar/scripts/gpu_temp.sh b/waybar/scripts/gpu_temp.sh new file mode 100755 index 0000000..f6ce9a5 --- /dev/null +++ b/waybar/scripts/gpu_temp.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +if command -v nvidia-smi &> /dev/null; then + temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits | head -n1) + echo "$temp" + exit 0 +fi + +if command -v sensors &> /dev/null; then + temp=$(sensors | grep -iE 'edge|junction|temp1' | grep -Eo '[0-9]+(\.[0-9]+)?°C' | head -n1 | tr -d '°C') + echo "$temp" + exit 0 +fi + +echo "N/A" +exit 1 diff --git a/waybar/scripts/gpu_usage.sh b/waybar/scripts/gpu_usage.sh new file mode 100755 index 0000000..ab8d5e8 --- /dev/null +++ b/waybar/scripts/gpu_usage.sh @@ -0,0 +1,16 @@ +#!/bin/bash + +if command -v nvidia-smi &> /dev/null; then + usage=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits | head -n1) + echo "$usage" + exit 0 +fi + +if command -v radeontop &> /dev/null; then + usage=$(radeontop -d - -l 1 | grep -m1 "gpu" | awk '{print $2}' | tr -d '%') + echo "$usage" + exit 0 +fi + +echo "N/A" +exit 1 diff --git a/waybar/scripts/keyboard_state.sh b/waybar/scripts/keyboard_state.sh new file mode 100755 index 0000000..1147d38 --- /dev/null +++ b/waybar/scripts/keyboard_state.sh @@ -0,0 +1,14 @@ +#!/bin/bash + +if [ "$XDG_SESSION_TYPE" = "wayland" ]; then + layout=$(hyprctl devices -j | jq -r '.keyboards[] | select(.main==true) | .active_keymap') +else + layout=$(setxkbmap -query | grep layout | awk '{print $2}') +fi + +case "$layout" in + *English*) layout="EN" ;; + *Russian*) layout="RU" ;; +esac + +echo "$layout" diff --git a/waybar/scripts/keyboard_state_daemon.sh b/waybar/scripts/keyboard_state_daemon.sh new file mode 100755 index 0000000..e58cb32 --- /dev/null +++ b/waybar/scripts/keyboard_state_daemon.sh @@ -0,0 +1,17 @@ +#!/bin/bash + +current_layout="" + +while true; do + layout=$(hyprctl -j devices | jq -r '.keyboards[] | select(.main==true) | .active_keymap') + + [[ "$layout" == *Russian* ]] && layout="RU" + [[ "$layout" == *English* ]] && layout="EN" + + if [ "$layout" != "$current_layout" ]; then + echo "$layout" + current_layout="$layout" + fi + + sleep 0.1 +done diff --git a/waybar/scripts/memory.sh b/waybar/scripts/memory.sh new file mode 100755 index 0000000..11d34e9 --- /dev/null +++ b/waybar/scripts/memory.sh @@ -0,0 +1,3 @@ +#!/bin/bash +read total used <<<$(free -m | awk '/Mem:/ {print $2, $3}') +echo "{\"text\":\" ${used}M/${total}M\",\"tooltip\":\"Memory Usage\"}" diff --git a/waybar/scripts/net_speed.sh b/waybar/scripts/net_speed.sh new file mode 100755 index 0000000..bc52397 --- /dev/null +++ b/waybar/scripts/net_speed.sh @@ -0,0 +1,37 @@ +#!/bin/bash + +INTERFACE=$(ip route | grep default | awk '{print $5}' | head -n1) +STATE_FILE="/tmp/.net_speed_prev_$INTERFACE" + +RX_NOW=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes) +TX_NOW=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes) +TIME_NOW=$(date +%s) + +if [[ ! -f "$STATE_FILE" ]]; then + echo "$RX_NOW $TX_NOW $TIME_NOW" > "$STATE_FILE" + echo "0↓ 0↑" + exit +fi + +read RX_PREV TX_PREV TIME_PREV < "$STATE_FILE" +RX_DIFF=$((RX_NOW - RX_PREV)) +TX_DIFF=$((TX_NOW - TX_PREV)) +TIME_DIFF=$((TIME_NOW - TIME_PREV)) +echo "$RX_NOW $TX_NOW $TIME_NOW" > "$STATE_FILE" +(( TIME_DIFF == 0 )) && TIME_DIFF=1 + +RX_RATE=$((RX_DIFF / TIME_DIFF)) +TX_RATE=$((TX_DIFF / TIME_DIFF)) + +format_speed() { + local b=$1 + if (( b > 1048576 )); then + echo "$((b / 1048576))M" + elif (( b > 1024 )); then + echo "$((b / 1024))K" + else + echo "${b}B" + fi +} + +echo "$(format_speed $RX_RATE)↓ $(format_speed $TX_RATE)↑" diff --git a/waybar/scripts/net_speed_daemon.sh b/waybar/scripts/net_speed_daemon.sh new file mode 100755 index 0000000..813bf83 --- /dev/null +++ b/waybar/scripts/net_speed_daemon.sh @@ -0,0 +1,35 @@ +#!/bin/bash + +INTERFACE=$(ip route get 8.8.8.8 2>/dev/null | awk '{print $5; exit}') +[ -z "$INTERFACE" ] && INTERFACE="eth0" + +RX_PATH="/sys/class/net/$INTERFACE/statistics/rx_bytes" +TX_PATH="/sys/class/net/$INTERFACE/statistics/tx_bytes" + +OUTFILE="/tmp/waybar_net_speed_output" + +prev_rx=$(cat "$RX_PATH") +prev_tx=$(cat "$TX_PATH") +prev_time=$(date +%s) + +while true; do + sleep 1 + + cur_rx=$(cat "$RX_PATH") + cur_tx=$(cat "$TX_PATH") + cur_time=$(date +%s) + + drx=$((cur_rx - prev_rx)) + dtx=$((cur_tx - prev_tx)) + dt=$((cur_time - prev_time)) + + if (( dt > 0 )); then + rx_mbps=$(awk "BEGIN { printf \"%.1f\", $drx * 8 / 1024 / 1024 / $dt }") + tx_mbps=$(awk "BEGIN { printf \"%.1f\", $dtx * 8 / 1024 / 1024 / $dt }") + echo " ${rx_mbps}Mbit/s  ${tx_mbps}Mbit/s" > "$OUTFILE" + fi + + prev_rx=$cur_rx + prev_tx=$cur_tx + prev_time=$cur_time +done diff --git a/waybar/scripts/net_speedtest.sh b/waybar/scripts/net_speedtest.sh new file mode 100755 index 0000000..c6a2a4e --- /dev/null +++ b/waybar/scripts/net_speedtest.sh @@ -0,0 +1,8 @@ +#!/bin/bash + +result=$(speedtest-cli --simple 2>/dev/null) + +download=$(echo "$result" | grep "Download" | awk '{print $2, $3}') +upload=$(echo "$result" | grep "Upload" | awk '{print $2, $3}') + +echo " $download ↓↑ $upload" diff --git a/waybar/scripts/power_menu.sh b/waybar/scripts/power_menu.sh new file mode 100755 index 0000000..1f02125 --- /dev/null +++ b/waybar/scripts/power_menu.sh @@ -0,0 +1,13 @@ +#!/bin/bash + +choice=$(echo -e "⏻ Shutdown\n Reboot\n Lock\n Logout\n Suspend\n Hibernate\nCancel" | wofi --dmenu --width=250 --height=300 --prompt="Power Menu") + +case "$choice" in + *Shutdown) systemctl poweroff ;; + *Reboot) systemctl reboot ;; + *Lock) hyprlock ;; + *Logout) hyprctl dispatch exit ;; + *Suspend) systemctl suspend ;; + *Hibernate) systemctl hibernate ;; + *) ;; +esac diff --git a/waybar/scripts/volume.sh b/waybar/scripts/volume.sh new file mode 100755 index 0000000..c63a9f9 --- /dev/null +++ b/waybar/scripts/volume.sh @@ -0,0 +1,8 @@ +#!/bin/bash +muted=$(pactl get-sink-mute @DEFAULT_SINK@ | awk '{print $2}') +vol=$(pactl get-sink-volume @DEFAULT_SINK@ | awk '{print $5}') +if [ "$muted" = "yes" ]; then + echo "{\"text\":\" MUTE\",\"tooltip\":\"Volume muted\"}" +else + echo "{\"text\":\" $vol\",\"tooltip\":\"Volume\"}" +fi diff --git a/waybar/style.css b/waybar/style.css new file mode 100644 index 0000000..5a6a92e --- /dev/null +++ b/waybar/style.css @@ -0,0 +1,97 @@ +@import "./frappe.css"; + +* { + font-family: "JetBrainsMono Nerd Font", "Font Awesome 6 Free", sans-serif; + font-size: 14px; + color: @text; + background-color: @base; + min-height: 0; + padding: 0; + margin: 0; + border: none; +} + +window#waybar { + background-color: @base; + border-bottom: 2px solid @overlay0; +} + +#cpu, +#custom-cpu_temp, +#memory, +#custom-gpu, +#custom-gpu_temp, +#custom-disk, +#custom-disk_hdd, +#network, +#pulseaudio, +#clock, +#custom-uptime, +#custom-power, +#custom-keyboard-state, +#custom-net_speed { + padding: 0 10px; + background-color: @surface0; + border-radius: 10px; +} + +#tray > * { + background-color: @surface0; + border-radius: 6px; + padding: 4px; +} +#cpu { + margin-left: 12px; +} +#custom-cpu_temp { + margin-left: 6px; +} +#memory { + margin-left: 12px; +} +#custom-gpu { + margin-left: 12px; +} +#custom-gpu_temp { + margin-left: 6px; +} +#custom-disk { + margin-left: 12px; +} +#custom-disk_hdd { + margin-left: 6px; + margin-right: 12px; +} + +#clock { + font-weight: bold; +} + +#custom-net_speed { + margin-left: 12px; +} +#network { + margin-left: 12px; +} +#pulseaudio { + margin-left: 12px; +} +#custom-keyboard-state { + margin-left: 12px; +} +#custom-uptime { + margin-left: 12px; +} +#custom-power { + margin-left: 12px; + margin-right: 12px; +} +#tray { + margin-left: 12px; +} + +#custom-cpu_temp.critical, +#custom-gpu_temp.critical { + color: @red; + background-color: @overlay1; +} diff --git a/waybar/themes/frappe.css b/waybar/themes/frappe.css new file mode 100644 index 0000000..c06b8fb --- /dev/null +++ b/waybar/themes/frappe.css @@ -0,0 +1,26 @@ +@define-color rosewater #f2d5cf; +@define-color flamingo #eebebe; +@define-color pink #f4b8e4; +@define-color mauve #ca9ee6; +@define-color red #e78284; +@define-color maroon #ea999c; +@define-color peach #ef9f76; +@define-color yellow #e5c890; +@define-color green #a6d189; +@define-color teal #81c8be; +@define-color sky #99d1db; +@define-color sapphire #85c1dc; +@define-color blue #8caaee; +@define-color lavender #babbf1; +@define-color text #c6d0f5; +@define-color subtext1 #b5bfe2; +@define-color subtext0 #a5adce; +@define-color overlay2 #949cbb; +@define-color overlay1 #838ba7; +@define-color overlay0 #737994; +@define-color surface2 #626880; +@define-color surface1 #51576d; +@define-color surface0 #414559; +@define-color base #303446; +@define-color mantle #292c3c; +@define-color crust #232634;