From c6e4ef543593887fbd63632f5d31aa6140fc8166 Mon Sep 17 00:00:00 2001 From: Viyurz <128215328+Viyurz@users.noreply.github.com> Date: Tue, 26 Sep 2023 17:12:28 +0200 Subject: [PATCH] First commit --- .config/hypr/hyprland.conf | 151 ++++++++++ .config/hypr/keybindings.conf | 88 ++++++ .config/hypr/monitors.conf | 18 ++ .config/hypr/windowrules.conf | 75 +++++ .config/kitty/kitty.conf | 99 +++++++ .config/pulse/default.pa | 1 + .config/swaync/config.json | 60 ++++ .config/swaync/style.css | 215 ++++++++++++++ .config/waybar/bluetooth_toggle_power.sh | 10 + .config/waybar/config | 200 +++++++++++++ .config/waybar/style.css | 129 +++++++++ .config/wlogout/layout | 24 ++ .config/wlogout/lock-focus.png | Bin 0 -> 5755 bytes .config/wlogout/lock.png | Bin 0 -> 5755 bytes .config/wlogout/logout-focus.png | Bin 0 -> 3768 bytes .config/wlogout/logout.png | Bin 0 -> 3768 bytes .config/wlogout/reboot-focus.png | Bin 0 -> 7794 bytes .config/wlogout/reboot.png | Bin 0 -> 7794 bytes .config/wlogout/shutdown-focus.png | Bin 0 -> 7560 bytes .config/wlogout/shutdown.png | Bin 0 -> 7560 bytes .config/wlogout/style.css | 63 +++++ .config/wofi/style.css | 32 +++ .gitconfig | 15 + .local/bin/genshin-impact | 3 + .local/bin/lol | 9 + .local/bin/sw | 339 +++++++++++++++++++++++ .scripts/foobar2000.sh | 42 +++ .scripts/grim.sh | 34 +++ .scripts/kill-wine-explorer.sh | 6 + .scripts/lol-watcher.sh | 13 + .scripts/swayidle.sh | 12 + .scripts/swaylock.sh | 66 +++++ .scripts/toggle-weeb-mode.sh | 13 + .scripts/waybar-cpu-temp.sh | 19 ++ .scripts/waybar-gpu-temp.sh | 24 ++ .scripts/waybar-gpu-usage.sh | 25 ++ .vimrc | 15 + .zaliases | 14 + .zprofile | 26 ++ .zshrc | 117 ++++++++ 40 files changed, 1957 insertions(+) create mode 100644 .config/hypr/hyprland.conf create mode 100644 .config/hypr/keybindings.conf create mode 100644 .config/hypr/monitors.conf create mode 100644 .config/hypr/windowrules.conf create mode 100644 .config/kitty/kitty.conf create mode 100644 .config/pulse/default.pa create mode 100644 .config/swaync/config.json create mode 100644 .config/swaync/style.css create mode 100755 .config/waybar/bluetooth_toggle_power.sh create mode 100644 .config/waybar/config create mode 100644 .config/waybar/style.css create mode 100644 .config/wlogout/layout create mode 100644 .config/wlogout/lock-focus.png create mode 100644 .config/wlogout/lock.png create mode 100644 .config/wlogout/logout-focus.png create mode 100644 .config/wlogout/logout.png create mode 100644 .config/wlogout/reboot-focus.png create mode 100644 .config/wlogout/reboot.png create mode 100644 .config/wlogout/shutdown-focus.png create mode 100644 .config/wlogout/shutdown.png create mode 100644 .config/wlogout/style.css create mode 100644 .config/wofi/style.css create mode 100644 .gitconfig create mode 100755 .local/bin/genshin-impact create mode 100755 .local/bin/lol create mode 100755 .local/bin/sw create mode 100755 .scripts/foobar2000.sh create mode 100755 .scripts/grim.sh create mode 100755 .scripts/kill-wine-explorer.sh create mode 100755 .scripts/lol-watcher.sh create mode 100755 .scripts/swayidle.sh create mode 100755 .scripts/swaylock.sh create mode 100755 .scripts/toggle-weeb-mode.sh create mode 100755 .scripts/waybar-cpu-temp.sh create mode 100755 .scripts/waybar-gpu-temp.sh create mode 100755 .scripts/waybar-gpu-usage.sh create mode 100644 .vimrc create mode 100644 .zaliases create mode 100644 .zprofile create mode 100644 .zshrc diff --git a/.config/hypr/hyprland.conf b/.config/hypr/hyprland.conf new file mode 100644 index 0000000..c09232a --- /dev/null +++ b/.config/hypr/hyprland.conf @@ -0,0 +1,151 @@ +# Jaaj Hyprland config + +# Source colors variables +source = ~/.config/hypr/colors.conf + + + +# Monitors config in separate file to allow multiple configs +source = ~/.config/hypr/monitors.conf + + + +# Exec once +exec-once = artix-pipewire-launcher +exec-once = nm-applet +exec-once = /usr/lib/polkit-gnome/polkit-gnome-authentication-agent-1 +exec-once = $HOME/.scripts/swayidle.sh +exec-once = swayosd-server + +# XWayland +exec-once = xprop -root -f _XWAYLAND_GLOBAL_OUTPUT_SCALE 32c -set _XWAYLAND_GLOBAL_OUTPUT_SCALE 2 + +# Clipboard +exec-once = wl-paste -w wl-copy -p +exec-once = cliphist wipe && wl-paste --watch cliphist store + +# Discord +exec-once = discord --start-minimized +# exec-once = xwaylandvideobridge + +# Nextcloud +exec-once = nextcloud --background +exec-once = gnome-keyring-daemon -s -f + +# Theming +exec-once = echo 1 > "$HOME/.cache/weeb-mode" +exec-once = sw -r + +# Prevent hidden Wine System Tray window from keeping workspace existing +exec-once = $HOME/.scripts/kill-wine-explorer.sh + + + +# Environement variables +env = EDITOR,vim +env = XDG_CURRENT_DESKTOP,Hyprland +env = XDG_SESSION_TYPE,wayland +env = XDG_SESSION_DESKTOP,Hyprland +env = QT_AUTO_SCREEN_SCALE_FACTOR,1 +env = QT_QPA_PLATFORM,wayland;xcb +env = SDL_VIDEODRIVER,wayland +env = _JAVA_AWT_WM_NONEREPARENTING,1 +env = CLUTTER_BACKEND,wayland +env = GRIM_DEFAULT_DIR,$HOME/Images/grim-screenshots +env = DXVK_LOG_LEVEL,none +env = MOZ_ENABLE_WAYLAND,1 +env = GDK_BACKEND,wayland +env = GDK_SCALE,1 +env = XCURSOR_SIZE,24 + + + +# Variables +general { + border_size = $border_size + gaps_in = $gaps_in + gaps_out = $gaps_out + col.active_border = $accent1 $accent2 45deg + col.inactive_border = $background1 $background2 45deg +} + +input { + kb_layout = fr + kb_variant = latin9 + numlock_by_default = true + sensitivity = 0 # -1.0 - 1.0, 0 means no modification. + follow_mouse = 2 + float_switch_override_focus = 0 + touchpad { + disable_while_typing = false + natural_scroll = yes + } +} + +device:asus-rog-sica { + sensitivity = -0.55 +} + +device:logitech-g203-lightsync-gaming-mouse { + sensitivity = -0.55 +} + + +decoration { + rounding = $border_radius + active_opacity = 0.85 + inactive_opacity = 0.65 + blur { + enabled = true + size = 2 + passes = 1 + ignore_opacity = true + new_optimizations = on + xray = true + } +} + +animations { + enabled = yes + # Some default animations, see https://wiki.hyprland.org/Configuring/Animations/ for more + bezier = myBezier, 0.05, 0.9, 0.1, 1.05 + animation = windows, 1, 7, myBezier + animation = windowsOut, 1, 7, default, popin 80% + animation = border, 1, 10, default + animation = fade, 1, 7, default + animation = workspaces, 1, 6, default +} + +gestures { + workspace_swipe = on +} + +dwindle { + # See https://wiki.hyprland.org/Configuring/Dwindle-Layout/ for more + pseudotile = yes # master switch for pseudotiling. Enabling is bound to mainMod + P in the keybinds section below + preserve_split = yes # you probably want this +} + +master { + # See https://wiki.hyprland.org/Configuring/Master-Layout/ for more + new_is_master = true +} + +misc { + vfr = true + vrr = 2 + disable_autoreload = true + mouse_move_enables_dpms = true + key_press_enables_dpms = true + disable_hyprland_logo = true +} + + + +# Keybindings +source = ~/.config/hypr/keybindings.conf + + + +# Window rules +source = ~/.config/hypr/windowrules.conf diff --git a/.config/hypr/keybindings.conf b/.config/hypr/keybindings.conf new file mode 100644 index 0000000..4bda679 --- /dev/null +++ b/.config/hypr/keybindings.conf @@ -0,0 +1,88 @@ +$mainMod = SUPER + +binde = $mainMod_SHIFT, Q, killactive, +bind = $mainMod_SHIFT, E, exec, wlogout -b 4 -T 400 -B 400 -p layer-shell +binde = $mainMod_SHIFT, Space, togglefloating, +binde = $mainMod, P, pseudo, +binde = $mainMod_SHIFT, V, togglesplit, +bind = $mainMod, L, exec, $HOME/.scripts/swaylock.sh +bind = $mainMod, F, fullscreen + +bind = $mainMod_SHIFT, N, exec, swaync-client -t -sw +bind = $mainMod, R, exec, wofi --show run +bind = $mainMod, E, exec, thunar +binde = $mainMod_SHIFT, T, exec, kitty +bind = $mainMod_SHIFT, F, exec, firefox +bind = $mainMod_SHIFT, D, exec, discord +bind = , 107, exec, $HOME/.scripts/grim.sh screen +bind = ALT_L, 107, exec, $HOME/.scripts/grim.sh window +bind = CONTROL_L, 107, exec, $HOME/.scripts/grim.sh region +bind = $mainMod, V, exec, cliphist list | wofi --show dmenu | cliphist decode | wl-copy -n + +# 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 = $mainMod_SHIFT, left, movewindow, l +bind = $mainMod_SHIFT, right, movewindow, r +bind = $mainMod_SHIFT, up, movewindow, u +bind = $mainMod_SHIFT, down, movewindow, d + +# Switch workspaces with mainMod + [0-9] +bind = $mainMod, ampersand, workspace, 1 +bind = $mainMod, eacute, workspace, 2 +bind = $mainMod, quotedbl, workspace, 3 +bind = $mainMod, apostrophe, workspace, 4 +bind = $mainMod, parenleft, workspace, 5 +bind = $mainMod, minus, workspace, 6 +bind = $mainMod, egrave, workspace, 7 +bind = $mainMod, underscore, workspace, 8 +bind = $mainMod, ccedilla, workspace, 9 +bind = $mainMod, agrave, workspace, 10 + +# Move active window to a workspace with mainMod + SHIFT + [0-9] +bind = $mainMod SHIFT, ampersand, movetoworkspace, 1 +bind = $mainMod SHIFT, eacute, movetoworkspace, 2 +bind = $mainMod SHIFT, quotedbl, movetoworkspace, 3 +bind = $mainMod SHIFT, apostrophe, movetoworkspace, 4 +bind = $mainMod SHIFT, parenleft, movetoworkspace, 5 +bind = $mainMod SHIFT, minus, movetoworkspace, 6 +bind = $mainMod SHIFT, egrave, movetoworkspace, 7 +bind = $mainMod SHIFT, underscore, movetoworkspace, 8 +bind = $mainMod SHIFT, ccedilla, movetoworkspace, 9 +bind = $mainMod SHIFT, agrave, movetoworkspace, 10 + +# Scroll through existing workspaces with mainMod + scroll +bind = $mainMod, mouse_down, workspace, e+1 +bind = $mainMod, mouse_up, workspace, e-1 +# Same with ALT + TAB +bind = ALT, TAB, workspace, e+1 +bind = ALT_SHIFT, TAB, workspace, e-1 + +# Move/resize windows with mainMod + LMB/RMB and dragging +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Swayosd Audio/Brightness/Caps Lock +bindl = , Caps_Lock, exec, swayosd-client --caps-lock +binde = , XF86AudioRaiseVolume, exec, swayosd-client --output-volume=raise +binde = , XF86AudioLowerVolume, exec, swayosd-client --output-volume=lower +binde = , XF86AudioMute, exec, swayosd-client --output-volume=mute-toggle +binde = , XF86AudioMicMute, exec, swayosd-client --input-volume=mute-toggle +bindel = , XF86MonBrightnessUp, exec, swayosd-client --brightness raise +bindel = , XF86MonBrightnessDown, exec, swayosd-client --brightness lower + +# Media keys +bindl = , XF86AudioPlay, exec, playerctl play-pause +bindl = , XF86AudioNext, exec, playerctl next +bindl = , XF86AudioPrev, exec, playerctl previous + +# Foobar2000 +bind = CTRL, P, exec, $HOME/.scripts/foobar2000.sh -pp +bind = CTRL, up, exec, $HOME/.scripts/foobar2000.sh -vu +bind = CTRL, down, exec, $HOME/.scripts/foobar2000.sh -vd + +# Weeb mode +bind = $mainMod SHIFT, W, exec, $HOME/.scripts/toggle-weeb-mode.sh diff --git a/.config/hypr/monitors.conf b/.config/hypr/monitors.conf new file mode 100644 index 0000000..20dc64d --- /dev/null +++ b/.config/hypr/monitors.conf @@ -0,0 +1,18 @@ +# Laptop config +monitor = eDP-1, 1920x1080@60, 0x0, 1 +monitor = , preferred, auto, 1, mirror, eDP-1 + +workspace = 1, monitor:eDP-1, default:true +workspace = 2, monitor:eDP-1 +workspace = 3, monitor:eDP-1 +workspace = 4, monitor:eDP-1 + +# Desktop config +# monitor = DP-1, 1920x1080@165, 0x0, 1 +# monitor = HDMI-A-1, preferred, 1920x0, 1 +# monitor = , preferred, auto, 1 + +# workspace = 1, monitor:DP-1, default:true +# workspace = 2, monitor:DP-1 +# workspace = 3, monitor:DP-1 +# workspace = 4, monitor:DP-1 diff --git a/.config/hypr/windowrules.conf b/.config/hypr/windowrules.conf new file mode 100644 index 0000000..ff2d601 --- /dev/null +++ b/.config/hypr/windowrules.conf @@ -0,0 +1,75 @@ +# Opaque windows +windowrule = opaque,^(firefox|libreoffice-writer)$ + +# Idle Inhibit +windowrule = idleinhibit focus, class:^(vlc)$ +windowrule = idleinhibit focus, class:^(zoom)$ + +# Foobar2000 +windowrule = float,^(foobar2000.exe)$ +windowrule = size 1024 576,^(foobar2000.exe)$ +windowrulev2 = size 740 516,class:^(foobar2000.exe)$,title:^(Preferences:) +windowrulev2 = size 575,115,class:^(foobar2000.exe)$,title:^(Processing...)$ +windowrulev2 = size 660 440,class:^(foobar2000.exe)$,title:^(Playlist Search) +windowrulev2 = center,class:^(foobar2000.exe)$,title:^(Playlist Search) + +# Firefox/NetworkManager +windowrule = float,title:^(Firefox - Choose User Profile)$ +windowrule = float,^(nm-connection-editor)$ + +# Winecfg +windowrule = float,^(winecfg.exe)$ +windowrulev2 = size 410 462,class:^(winecfg.exe)$,xwayland:1 +windowrulev2 = size 415 487,class:^(winecfg.exe)$,xwayland:0 +# Hide Wine System Tray +#windowrule = workspace 1,title:^(Wine System Tray)$ +windowrule = float,title:^(Wine System Tray)$ +windowrule = move -5 -5,title:^(Wine System Tray)$ +windowrule = size 0 0,title:^(Wine System Tray)$ +windowrule = nofocus,title:^(Wine System Tray)$ +windowrule = noinitialfocus,title:^(Wine System Tray)$ + + +# Hide xwaylandvideobridge window +windowrulev2 = move -5 -5,class:^(xwaylandvideobridge)$ +windowrulev2 = size 0 0,class:^(xwaylandvideobridge)$ +windowrulev2 = nofocus,class:^(xwaylandvideobridge)$ +windowrulev2 = noinitialfocus,class:^(xwaylandvideobridge)$ + + +# Gamescope +windowrule = nofullscreenrequest,title:^(gamescope) +windowrule = forceinput,^(gamescope) + + +# Riot Client +windowrule = size 1536 864,title:^(Riot Client Main)$ +windowrule = move 192 108,title:^(Riot Client Main)$ +windowrule = float,title:^(Riot Client Main) +windowrule = forceinput,title:^(Riot Client Main) + +# LoL Client +windowrule = size 1280 720,title:^(League of Legends) +windowrule = float,title:^(League of Legends) +windowrule = center,title:^(League of Legends) +windowrule = forceinput,title:^(League of Legends) + +# LoL +windowrule = float,title:^(League of Legends (TM) Client) +windowrule = size 1920 1080,^(League of Legends (TM) Client) +windowrule = fullscreen,^(League of Legends (TM) Client) +windowrule = forceinput,^(League of Legends (TM) Client) + + + +# Ubisoft Connect +windowrule = float,^(upc.exe)$ + + +# Genshin Impact +windowrule = float,title:^(Genshin Impact)$ + + +# Warframe +windowrulev2 = float,class:^(launcher.exe)$,title:^(Warframe)$ +windowrule = fullscreen,^(warframe.x64.exe)$ diff --git a/.config/kitty/kitty.conf b/.config/kitty/kitty.conf new file mode 100644 index 0000000..7687b39 --- /dev/null +++ b/.config/kitty/kitty.conf @@ -0,0 +1,99 @@ +# https://sw.kovidgoyal.net/kitty/conf/ + +# Fonts +font_family 'JetBrainsMono Nerd Font' +bold_font auto +italic_font auto +bold_italic_font auto + +font_size 11 + + + +# Cursor +cursor_shape beam +cursor_beam_thickness 1 + + + +# Mouse +mouse_hide_wait 0 + +url_color #eca37a +url_style single + +show_hyperlink_target yes + +strip_trailing_spaces always + +# select_by_word_characters @-./_~?&=%+# + +focus_follows_mouse no + +pointer_shape_when_grabbed hand + +default_pointer_shape arrow + +pointer_shape_when_dragging beam + + + +# Performance tuning +repaint_delay 10 +input_delay 3 +sync_to_monitor no + + + +# Terminal bell +enable_audio_bell no +visual_bell_duration 0.0 +window_alert_on_bell no + + + +# Window layout +remember_window_size no +initial_window_width 960 +initial_window_height 540 + +window_border_width 0 + +window_padding_width 0 6 + + + +# Tab bar +tab_bar_edge top + +tab_bar_style powerline + +tab_bar_align left + +tab_bar_min_tabs 2 + +tab_switch_strategy previous + +tab_powerline_style angled + +tab_activity_symbol (!) +tab_title_template "{index}{activity_symbol}: {title.replace('proxzima@proxzima:', '')}" + +tab_bar_background #59290d + +active_tab_foreground #f0e6de +active_tab_background #9c4716 +active_tab_font_style bold-italic + +inactive_tab_foreground #f0e6de +inactive_tab_background #703310 +inactive_tab_font_style normal + + + +# Keyboard shortcuts +# Don't intercept the following key strokes to make zsh-shift-select work. +map ctrl+shift+left no_op +map ctrl+shift+right no_op +map ctrl+shift+home no_op +map ctrl+shift+end no_op diff --git a/.config/pulse/default.pa b/.config/pulse/default.pa new file mode 100644 index 0000000..2d46430 --- /dev/null +++ b/.config/pulse/default.pa @@ -0,0 +1 @@ +load-module module-switch-on-connect diff --git a/.config/swaync/config.json b/.config/swaync/config.json new file mode 100644 index 0000000..aaf71b2 --- /dev/null +++ b/.config/swaync/config.json @@ -0,0 +1,60 @@ +{ + "$schema": "/etc/xdg/swaync/configSchema.json", + "positionX": "right", + "positionY": "top", + "layer": "top", + "cssPriority": "application", + "control-center-margin-top": 0, + "control-center-margin-bottom": 0, + "control-center-margin-right": 0, + "control-center-margin-left": 0, + "notification-icon-size": 64, + "notification-body-image-height": 100, + "notification-body-image-width": 200, + "timeout": 10, + "timeout-low": 5, + "timeout-critical": 0, + "fit-to-screen": true, + "control-center-width": 500, + "control-center-height": 600, + "notification-window-width": 500, + "keyboard-shortcuts": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "script-fail-notify": true, + "scripts": { + "example-script": { + "exec": "echo 'Do something...'", + "urgency": "Normal" + } + }, + "notification-visibility": { + "example-name": { + "state": "muted", + "urgency": "Low", + "app-name": "Spotify" + } + }, + "widgets": [ + "title", + "dnd", + "notifications", + "mpris" + ], + "widget-config": { + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": "Clear All" + }, + "dnd": { + "text": "Do Not Disturb" + }, + "mpris": { + "image-size": 96, + "image-radius": 12 + } + } +} diff --git a/.config/swaync/style.css b/.config/swaync/style.css new file mode 100644 index 0000000..736e38d --- /dev/null +++ b/.config/swaync/style.css @@ -0,0 +1,215 @@ +@import url('file:///home/viyurz/.config/gtk-3.0/colors-gtk.css'); + +* { + font-family: "Cantarell"; + color: @foreground; +} + +.blank-window { + background: transparent; +} + +.notification-row { + outline: none; +} + +.notification-row:focus, +.notification-row:hover { + background: @hovered; +} + +.notification, .control-center { + border: 2px solid transparent; + border-radius: 4px; + margin: 30px; + background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2); + background-clip: padding-box, border-box; + background-origin: border-box; + box-shadow: none; +} + +.widget-title, +.widget-dnd, +.control-center .notification { + margin: 10px; +} + +.notification-default-action, +.notification-action { + padding: 0; + margin: 0; + box-shadow: none; + background: transparent; + border: none; + border-radius: 0px; +} + +.notification-default-action:hover, +.notification-action:hover { + /*-gtk-icon-effect: none;*/ + background-image: linear-gradient(160deg, @hovered, @hovered), linear-gradient(160deg, @accent1, @accent2); +} + +.notification-content { + background: transparent; + padding: 6px; +} + +/* Uncomment to enable specific urgency colors +.low { + background: yellow; + padding: 6px; + border-radius: 12px; +} + +.normal { + background: green; + padding: 6px; + border-radius: 12px; +} + +.critical { + background: red; + padding: 6px; + border-radius: 12px; +} +*/ + + +.close-button { + background: transparent; + text-shadow: none; + padding: 0; + border-radius: 100%; + margin: 32px; + box-shadow: none; + border: none; + min-width: 24px; + min-height: 24px; +} + +.close-button:hover { + box-shadow: none; + background-color: @bad; + transition: all 0.15s ease-in-out; + border: none; +} + +/* When alternative actions are visible */ +.notification-default-action:not(:only-child) { + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +/* add bottom border radius to eliminate clipping */ +.notification-action:first-child { + border-bottom-left-radius: 10px; +} + +.notification-action:last-child { + border-bottom-right-radius: 10px; + border-right: 1px solid @noti-border-color; +} + +.image { +} + +.body-image { + margin-top: 6px; + background-color: white; + border-radius: 12px; +} + +.summary { + font-size: 16px; + font-weight: bold; + background: transparent; + text-shadow: none; +} + +.time { + font-size: 16px; + font-weight: bold; + background: transparent; + text-shadow: none; +} + +.body { + font-size: 15px; + font-weight: normal; + background: transparent; + text-shadow: none; +} + +/* The "Notifications" and "Do Not Disturb" text widget */ +.top-action-title { + text-shadow: none; +} + +.control-center-list { + background: transparent; +} + +.floating-notifications { + background: transparent; +} + +/*** Widgets ***/ + +/* Title widget */ +.widget-title { + font-size: 1.5rem; +} + +.widget-title > button { + font-size: initial; + text-shadow: none; + border: 2px solid transparent; + border-radius: 4px; + background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2); + background-clip: padding-box, border-box; + background-origin: border-box; + box-shadow: none; +} + +.widget-title > button:hover { + background-image: linear-gradient(160deg, @selected, @selected), linear-gradient(160deg, @accent1, @accent2); +} + +/* DND widget */ +.widget-dnd > switch { + border: 2px solid transparent; + border-radius: 16px; + background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2); + background-clip: padding-box, border-box; + background-origin: border-box; + box-shadow: none; +} + +.widget-dnd > switch:checked { + background-image: linear-gradient(160deg, @selected, @selected), linear-gradient(160deg, @accent1, @accent2); +} + +.widget-dnd > switch slider { + background-color: alpha(@disabled, 0.5); +} + +.widget-dnd > switch:checked slider { + background-color: alpha(@accent1, 0.5); +} + +/* Mpris widget */ +.widget-mpris { + /* The parent to all players */ +} +.widget-mpris-player { + padding: 8px; + margin: 8px; +} +.widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} +.widget-mpris-subtitle { + font-size: 1.1rem; +} diff --git a/.config/waybar/bluetooth_toggle_power.sh b/.config/waybar/bluetooth_toggle_power.sh new file mode 100755 index 0000000..68c9d89 --- /dev/null +++ b/.config/waybar/bluetooth_toggle_power.sh @@ -0,0 +1,10 @@ +#!/bin/bash + +if [[ $(bluetoothctl show | grep Powered: | cut -f 2 -d ' ') == "no" ]]; then + if [[ ! $(bluetoothctl power on) ]]; then + rfkill block bluetooth + rfkill unblock bluetooth + fi +else + bluetoothctl power off +fi diff --git a/.config/waybar/config b/.config/waybar/config new file mode 100644 index 0000000..baa9421 --- /dev/null +++ b/.config/waybar/config @@ -0,0 +1,200 @@ +{ + "layer": "top", // Waybar at top layer + // "position": "top", // Waybar position (top|bottom|left|right) + // "height": 30, // Waybar height (to be removed for auto height) + "modules-left": [ + "hyprland/workspaces", + "tray", + "network", + "bluetooth", + "pulseaudio#output", + "pulseaudio#input", + "mpris" + ], + "modules-right": [ + "hyprland/window", + "backlight", + "battery", + "custom/gpu-temp", + "custom/gpu-usage", + "memory", + "custom/cpu-temp", + "cpu", + "clock" + ], + + "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": false, + "on-click": "activate", + "format": "{name}" + }, + "tray": { + // "icon-size": 21, + "spacing": 8 + }, + "network": { + // "interface": "wlp2*", // (Optional) To force the use of this interface + "interval": 5, + "format-wifi": "󰖩 {essid} ({frequency}GHz) 󰜮 {bandwidthDownBytes} 󰜷 {bandwidthUpBytes}", + "format-ethernet": "󰛳 󰜮 {bandwidthDownBytes} 󰜷 {bandwidthUpBytes}", + "tooltip-format-wifi": "{essid} ({signalStrength}%) - {frequency}GHz\n󰜮 {bandwidthDownBytes} | 󰜷 {bandwidthUpBytes}", + "tooltip-format-ethernet": "{ipaddr}/{cidr}\n󰜮 {bandwidthDownBytes} | 󰜷 {bandwidthUpBytes}", + "format-linked": "󰲛 {ifname} (No IP)", + "format-disconnected": "󰲛 Disconnected", + "on-click-right": "nm-connection-editor" + }, + "bluetooth": { + "format": "", + "format-connected": " {device_alias}", + "format-connected-battery": " {device_alias} {device_battery_percentage}%", + // "format-device-preference": [ "device1", "device2" ], // preference list deciding the displayed device + "tooltip-format": "{controller_alias} ({controller_address})\n{num_connections} connected", + "tooltip-format-connected": "{controller_alias} ({controller_address})\n{num_connections} connected\n\n{device_enumerate}", + "tooltip-format-enumerate-connected": "{device_alias} {device_address}", + "tooltip-format-enumerate-connected-battery": "{device_alias} {device_address} {device_battery_percentage}%", + "on-click": "$HOME/.config/waybar/bluetooth_toggle_power.sh", + "on-click-right": "blueman-manager" + }, + "pulseaudio#output": { + "on-click": "swayosd-client --output-volume=mute-toggle", + "on-click-right": "pavucontrol", + "on-scroll-up": "swayosd-client --output-volume=raise", + "on-scroll-down": "swayosd-client --output-volume=lower", + "scroll-step": 5, + "smooth-scrolling-threshold": 1, + "format": "{icon} {volume}%", + "format-muted": "󰝟 {volume}%", + "format-bluetooth": "(){icon} {volume}%", + "format-bluetooth-muted": "()󰝟 {volume}%", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "portable": "", + "car": "", + "default": ["󰕿", "󰖀", "󰕾"] + } + }, + "pulseaudio#input": { + "on-click": "swayosd-client --input-volume=mute-toggle", + "on-click-right": "pavucontrol", + "on-scroll-up": "swayosd-client --input-volume=raise", + "on-scroll-down": "swayosd-client --input-volume=lower", + "scroll-step": 5, + "smooth-scrolling-threshold": 1, + "format": "{format_source}", + "format-muted": "{format_source}", + "format-bluetooth": "(){format_source}", + "format-bluetooth-muted": "(){format_source}", + "format-source": "󰍬 {volume}%", + "format-source-muted": "󰍭 {volume}%" + }, + "mpris": { + "format": " {status_icon} {title}", + "player": "beefweb", + "ignored-players": ["firefox"], + "status-icons": { + "playing": "", + "paused": "󰏥", + "stopped": "" + }, + "max-length": 35 + }, + "hyprland/window" : { + "format": "{}", + "separate-outputs": true, + "max-length": 35 + }, + "backlight": { + "on-scroll-up": "swayosd-client --brightness=raise", + "on-scroll-down": "swayosd-client --brightness=lower", + "format": "{icon} {percent}%", + "format-icons": ["", "", "", "", "", "", "", "", ""], + "scroll-step": 5, + "smooth-scrolling-threshold": 1 + }, + "battery": { + "interval": 15, + "states": { + "100": 100, + "90": 90, + "80": 80, + "70": 70, + "60": 60, + "50": 50, + "40": 40, + "30": 30, + "20": 20, + "10": 10 + }, + "format-time": "{H}:{m}", + "format": "{icon} {capacity}% ({time})", + "format-icons": ["󰂎", "󰁺", "󰁻", "󰁼", "󰁽", "󰁾", "󰁿", "󰂀", "󰂁", "󰂂", "󰁹"], + "format-plugged": "󰂄 {capacity}%", + "format-charging-100": "󰂅 {capacity}% ({time})", + "format-charging-90": "󰂋 {capacity}% ({time})", + "format-charging-80": "󰂊 {capacity}% ({time})", + "format-charging-70": "󰢞 {capacity}% ({time})", + "format-charging-60": "󰂉 {capacity}% ({time})", + "format-charging-50": "󰢝 {capacity}% ({time})", + "format-charging-40": "󰂈 {capacity}% ({time})", + "format-charging-30": "󰂇 {capacity}% ({time})", + "format-charging-20": "󰂆 {capacity}% ({time})", + "format-charging-10": "󰢜 {capacity}% ({time})", + "tooltip-format": "{timeTo}\nPower draw: {power}W" + }, + "custom/gpu-temp": { + "exec": "$HOME/.scripts/waybar-gpu-temp.sh", + "interval": 5, + "return-type": "json", + "format": "{icon} {}", + "format-icons": { + "low": "󱃃", + "normal": "󰔏", + "high": "󰔏", + "alert": "󰸁" + } + }, + "custom/gpu-usage": { + "exec": "$HOME/.scripts/waybar-gpu-usage.sh", + "return-type": "json", + "format": "󰢮 {}", + "interval" : 5 + }, + "memory": { + "format": " {used}GiB", + "interval": 5 + }, + "custom/cpu-temp": { + "exec": "$HOME/.scripts/waybar-cpu-temp.sh", + "interval": 5, + "return-type": "json", + "format": "{icon} {}", + "format-icons": { + "low": "󱃃", + "normal": "󰔏", + "high": "󰔏", + "alert": "󰸁" + } + }, + "cpu": { + "format": " {usage}%", + "interval": 5 + }, + "clock": { + "interval": 1, + "format": "󰥔 {:%X}", + "tooltip-format": "{calendar}", + "calendar": { + "mode": "month", + "format": { + "months": "{}", + "days": "{}", + "weekdays": "{}", + "today": "{}" + } + } + } +} diff --git a/.config/waybar/style.css b/.config/waybar/style.css new file mode 100644 index 0000000..bdb1994 --- /dev/null +++ b/.config/waybar/style.css @@ -0,0 +1,129 @@ +@import url("file:///home/viyurz/.config/gtk-3.0/colors-gtk.css"); + +* { + font-family: 'JetBrainsMono Nerd Font'; + font-size: 13px; +} + +#waybar { + background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2); + background-clip: padding-box, border-box; + background-origin: border-box; + border-bottom: 2px solid transparent; + border-radius: 0; +} + +.modules-left, .modules-center, .modules-right { + margin-bottom: 2px; + color: @foreground; +} + +#workspaces button { + box-shadow: none; + border: none; + border-radius: 0; +} + +#workspaces button:hover { + background-color: @hovered; +} + +#workspaces button.active { + background-color: @selected; +} + +#workspaces button.urgent { + background-color: @urgent; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: @urgent; +} + +#button, +#tray, +#network, +#bluetooth, +#pulseaudio, +#custom-media, +#window, +#backlight, +#battery, +#custom-gpu-temp, +#custom-gpu-usage, +#memory, +#custom-cpu-temp, +#cpu, +#clock { + padding: 2px 8px; +} + +/* +.modules-left { + color: @accent1; +} + + .modules-right { + color: @accent2; +} +*/ + +#pulseaudio, +#backlight, +#custom-gpu-temp, +#custom-gpu-usage, +#custom-cpu-temp, +#cpu { + color: @accent1; +} + +#network, +#bluetooth, +#mpris, +#battery, +#memory, +#clock { + color: @accent2; +} + +#pulseaudio.output.muted, +#pulseaudio.input.source-muted { + color: @disabled; +} + +#network.disabled, #network.disconnected, +#bluetooth.disabled, #bluetooth.off { + color: @disabled2; +} + +#battery.charging { + background-color: alpha(@good, 0.33); +} + +#battery.30:not(.charging), +#custom-temp-gpu.high, +#custom-temp-cpu.high { + background-color: alpha(@bad, 0.33); +} + +#battery.20:not(.charging), +#battery.10:not(.charging), +#custom-temp-gpu.alert, +#custom-temp-cpu.alert { + background-color: alpha(@bad, 0.5); + animation-name: blink; + animation-duration: 1.5s; + animation-timing-function: steps(2, start); + animation-iteration-count: infinite; +} + +@keyframes blink { + to { + background-color: transparent; + } +} diff --git a/.config/wlogout/layout b/.config/wlogout/layout new file mode 100644 index 0000000..2de5285 --- /dev/null +++ b/.config/wlogout/layout @@ -0,0 +1,24 @@ +{ + "label" : "lock", + "action" : "~/.config/hypr/swaylock", + "text" : "Lock", + "keybind" : "l" +} +{ + "label" : "logout", + "action" : "hyprctl dispatch exit --", + "text" : "Logout", + "keybind" : "e" +} +{ + "label" : "shutdown", + "action" : "sudo poweroff", + "text" : "Shutdown", + "keybind" : "s" +} +{ + "label" : "reboot", + "action" : "sudo reboot", + "text" : "Reboot", + "keybind" : "r" +} diff --git a/.config/wlogout/lock-focus.png b/.config/wlogout/lock-focus.png new file mode 100644 index 0000000000000000000000000000000000000000..4fead942f229fe905f0a64154f8af820db0d9cc0 GIT binary patch literal 5755 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

qQHqz)vfni5J6!DJsQZ9OHgeM(Oz@OeT? z6uw{_=?q#{bOw~a4jr~S`qyXeeEGE@B=^&aHLZ44+{9;*W$wq4Du##qSPs1iJ~3_k zmwi}m#fb4AQ3t@;wUVoL@m|JOEv&oJFgN+HqjtpBKY0d1Riq)2#32)PaUBLItP$;^yB_=u^a4^ zVW}U<`P$kITJSf)G%_E_(ym3Tk1J;xs^8H{8B2I)45r+QT^aBq;4~^pLK=pCC|(b9 zSj$RF(bb<(k9K$UH$yA`dCMqWNan+N@vI!>U)h zQS0w%*8Bqh)AEH0xD{}ZA8unF1%IO)MI#;2UhZgbxM!$0*Z`Uunp$car_?mH?KSk^ znkV2VbyYMp;2IipkUJayK_C$2<$FEqzZb}KK5YpKDE-?CXx~8ZFtmGM@PC%kgllO3 zeUTzWdjcpU_FKjdbsZh)9_kH5Mn)d@4e}53bPx7Ejtce3Up_4kG69xI8?$N?xA?yS D7N~Dj literal 0 HcmV?d00001 diff --git a/.config/wlogout/lock.png b/.config/wlogout/lock.png new file mode 100644 index 0000000000000000000000000000000000000000..a313e5867ac6779f89980ca2eccf545a7e769bb4 GIT binary patch literal 5755 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 Mg=;BR%OgYo3$bD`MF0Q* literal 0 HcmV?d00001 diff --git a/.config/wlogout/shutdown-focus.png b/.config/wlogout/shutdown-focus.png new file mode 100644 index 0000000000000000000000000000000000000000..4c5f00446ff96390dccf9eea7189da0392e5456d GIT binary patch literal 7560 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 ZuoHIobjUuCW5kjG4OLy0Y9*_%{{R$GzQq6l literal 0 HcmV?d00001 diff --git a/.config/wlogout/shutdown.png b/.config/wlogout/shutdown.png new file mode 100644 index 0000000000000000000000000000000000000000..3d8e4fd804c6dad84c428236ad5ecdc8bf020c94 GIT binary patch literal 7560 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

W265Aie?=( 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 Zp7z2XUXD2ja*S9KpsA*(TBB?o{vTjyZb$$C literal 0 HcmV?d00001 diff --git a/.config/wlogout/style.css b/.config/wlogout/style.css new file mode 100644 index 0000000..8f969bc --- /dev/null +++ b/.config/wlogout/style.css @@ -0,0 +1,63 @@ +@import url("file:///home/viyurz/.config/gtk-3.0/colors-gtk.css"); + +* { + background-image: none; +} + +window { + background-color: rgba(12, 12, 12, 0.5); +} + +button { + font-family: "Hack Nerd Font"; + font-size: 13pt; + color: @foreground; + margin: 5px; + background-repeat: no-repeat; + background-position: center; + background-size: 25%; + background-color: transparent; + border: 2px solid transparent; + border-radius: 16px; + box-shadow: none +} + +button:hover { + background-color: alpha(@foreground, 0.25); +} + +button:focus, button:active { + background-color: alpha(@foreground, 0.5); +} + +#lock { + background-image: image(url("./lock.png")); +} + +#lock:focus, #lock:active { + background-image: image(url("./lock-focus.png")); +} + +#logout { + background-image: image(url("./logout.png")); +} + +#logout:focus, #logout:active { + background-image: image(url("./logout-focus.png")); +} + +#shutdown { + background-image: image(url("./shutdown.png")); +} + +#shutdown:focus, #shutdown:active { + background-image: image(url("./shutdown-focus.png")); +} + +#reboot { + background-image: image(url("./reboot.png")); +} + +#reboot:focus, #reboot:active { + background-image: image(url("./reboot-focus.png")); +} diff --git a/.config/wofi/style.css b/.config/wofi/style.css new file mode 100644 index 0000000..567cb55 --- /dev/null +++ b/.config/wofi/style.css @@ -0,0 +1,32 @@ +@import url('file:///home/viyurz/.config/gtk-3.0/colors-gtk.css'); + +window { + color: @foreground; + font-family: 'JetBrainsMono Nerd Font'; + background-image: linear-gradient(160deg, @background1, @background2), linear-gradient(160deg, @accent1, @accent2); + background-clip: padding-box, border-box; + background-origin: border-box; + border: 2px solid transparent; + border-radius: 4px; +} + +#scroll { + margin: 5px 7px; + border: none; + outline: none; + background: none; +} + +#input { + margin: 2px; + box-shadow: none; + border-radius: 4px 4px 0 0; + background-color: @hovered; +} + +#entry:selected { + outline: none; + padding-left: 8px; + border-radius: 2px; + background-color: @selected; +} diff --git a/.gitconfig b/.gitconfig new file mode 100644 index 0000000..4357af0 --- /dev/null +++ b/.gitconfig @@ -0,0 +1,15 @@ +[user] + name = Viyurz + username = Viyurz + email = 128215328+Viyurz@users.noreply.github.com + signingkey = /home/viyurz/.ssh/id_ed25519.pub +[init] + defaultBranch = main +[commit] + gpgsign = true +[gpg] + format = ssh +[pull] + rebase = true +[diff] + colorMoved = zebra diff --git a/.local/bin/genshin-impact b/.local/bin/genshin-impact new file mode 100755 index 0000000..71b4eda --- /dev/null +++ b/.local/bin/genshin-impact @@ -0,0 +1,3 @@ +#!/bin/sh + +lutris lutris:rungame/genshin-impact diff --git a/.local/bin/lol b/.local/bin/lol new file mode 100755 index 0000000..b727e28 --- /dev/null +++ b/.local/bin/lol @@ -0,0 +1,9 @@ +#!/bin/sh + +# Note: If running in wayland, switch to borderless windowed to prevent the game window from disappearing + +hyprctl monitors | grep -qe 'HDMI-A-1' && "$HOME/.scripts/lol-watcher.sh" & + +lutris lutris:rungame/league-of-legends + +killall -9 lol-watcher.sh &> /dev/null diff --git a/.local/bin/sw b/.local/bin/sw new file mode 100755 index 0000000..0d45fac --- /dev/null +++ b/.local/bin/sw @@ -0,0 +1,339 @@ +#!/bin/sh + +wp_base_dir="$HOME/Images/Wallpapers/Desktop" +declare -A wp_dirs=([SFW]="$wp_base_dir/SFW" + [NSFW]="$wp_base_dir/( ͡° ͜ʖ ͡°)" + [BONK]="$wp_base_dir/Bonk") + + + +function pick_random_wallpaper { + if [[ ${#wp_opts[@]} -eq 0 ]]; then + target_wp_dirs=("${wp_dirs[SFW]}") + else + for opt in "${!wp_opts[@]}"; do + opt_value=${wp_opts[$opt]} + if [[ $opt_value -eq 1 ]]; then + target_wp_dirs+=("${wp_dirs[$opt]}") + fi + done + fi + + echo "Picking a random wallpaper from ${target_wp_dirs[@]}." + + wallpaper="$(find "${target_wp_dirs[@]}" -type f | shuf -n 1)" + wallpaper="$wallpaper" +} + + + + +function help { + cat <<- EOF + Usage: $(basename "$0") [options...] + + -h, --help Show this message and quit. + -r, --random Change the theme by picking a random wallpaper. + -w, --wallpaper Change the theme using this wallpaper. + -s, --sfw Pick a wallpaper from SFW folder (default). + -n, --nsfw Pick a wallpaper from NSFW folder. + -b, --bonk U horny dog ¬‿¬. + + Options -s and -n can be used together. + If no option is specified, reloads the current theme. + EOF +} + + + +declare -A wp_opts +while getopts "hrw:snb" opt; do + case $opt in + h) + help + exit + ;; + r) + opt_random=1 + ;; + w) + opt_wallpaper=1 + opt_wallpaper_arg="$OPTARG" + ;; + s) + wp_opts[SFW]=1 + ;; + n) + wp_opts[NSFW]=1 + ;; + b) + wp_opts[BONK]=1 + ;; + \?) + echo "Invalid option: $opt." + exit 1 + ;; + esac +done + + + +if [[ $opt_random -eq 1 && $opt_wallpaper -eq 1 ]]; then + echo "Option -r and -w can't be used together." + exit 1 +elif [[ $opt_random -eq 1 ]]; then + pick_random_wallpaper +elif [[ $opt_wallpaper -eq 1 ]]; then + if [[ -f "$opt_wallpaper_arg" ]]; then + wallpaper="$opt_wallpaper_arg" + else + echo "Error: $opt_wallpaper_arg is not a valid path." + exit 1 + fi +else + if [[ $# -gt 0 ]]; then + echo "Warning: Neither -r or -w were specified, ignoring option(s): $*." + fi + # To get the current wallpaper + source "$HOME/.cache/wal/colors.sh" +fi + + + +echo "Selected wallpaper: $wallpaper" +#viu -h 15 "$wallpaper" + + + +# Create the colors scheme +echo "Generating color scheme using pywal." +wal -qni "$wallpaper" --saturate 0.75 + +# Pour si ya un apostrophe dans le nom du fichier +sed -iE "/^wallpaper=/,/#/ s/='/=\"/" /home/viyurz/.cache/wal/colors.sh +sed -iE "/^wallpaper=/,/#/ s/'$/\"/" /home/viyurz/.cache/wal/colors.sh + + + +# Source colors scheme generated +source "$HOME/.cache/wal/colors.sh" + + + +# Set additional colors +accent1_dark_hsl="$(pastel darken 1 "$color5" | pastel format hsl)" +accent2_dark_hsl="$(pastel darken 1 "$color6" | pastel format hsl)" +declare -A colors=( + [foreground]="$foreground" + [good]="#00BB66" + [bad]="#AA2222" + [urgent]="$color4" + [accent1]="$color5" + [accent2]="$color6" + [background1]="$(pastel lighten 0.2 "$accent1_dark_hsl" | pastel format hex)" + [background2]="$(pastel lighten 0.2 "$accent2_dark_hsl" | pastel format hex)" + [hovered]="$(pastel lighten 0.25 "$accent1_dark_hsl" | pastel format hex)" + [selected]="$(pastel lighten 0.35 "$accent1_dark_hsl" | pastel format hex)" + [disabled]="$(pastel lighten 0.35 "$accent1_dark_hsl" | pastel format hex)" + [disabled2]="$(pastel lighten 0.35 "$accent2_dark_hsl" | pastel format hex)" +) + +declare -A params=( + [border_radius]=4 + [border_size]=2 + [gaps_out]=15 + [gaps_in]=8 + [font]="'JetBrainsMono Nerd Font'" +) + +# Display accent colors +pastel color "${colors[accent1]}" +pastel color "${colors[accent2]}" + + + +# Set wallpaper using swaybg +if grep 0 "$HOME/.cache/weeb-mode"; then + wallpaper="/usr/share/hyprland/wall_2K.png" +fi +echo "Setting wallpaper using swaybg." +killall -9 swaybg &> /dev/null +hyprctl dispatch exec "swaybg -i \"$wallpaper\"" > /dev/null + + + +# Clear colors/params files +echo -n '' > "$HOME/.config/gtk-3.0/colors-gtk.css" +echo -n '' > "$HOME/.config/hypr/colors.conf" +echo "wallpaper=\"$wallpaper\"" > "$HOME/.config/hypr/colors.sh" + + + +# Set colors variables in files +echo "Writing colors to .conf/css/sh files." +for key in "${!colors[@]}"; do + value="${colors[$key]}" + # Hyprland + echo '$'"$key=rgb(${value:1})" >> "$HOME/.config/hypr/colors.conf" + # GTK + echo "@define-color $key $value;" >> "$HOME/.config/gtk-3.0/colors-gtk.css" + # Shell + echo "${key}=$value" >> "$HOME/.config/hypr/colors.sh" +done + +# Add Hyprland params +echo "Adding parameters to Hyprland .conf file." +for key in "${!params[@]}"; do + value="${params[$key]}" + echo '$'"$key=$value" >> "$HOME/.config/hypr/colors.conf" +done + +# Reload Hyprland +echo "Reloading Hyprland." +hyprctl reload &> /dev/null + + + +# Set Kitty params +echo "Setting Kitty parameters." +declare -A kitty_vars=( + [font_family]="${params[font]}" + [url_color]="${colors[accent1]}" + [tab_bar_background]="${colors[background1]}" + [active_tab_background]="${colors[selected]}" + [inactive_tab_background]="${colors[hovered]}" + [active_tab_foreground]="${colors[foreground]}" + [inactive_tab_foreground]="${colors[foreground]}" +) +for key in "${!kitty_vars[@]}"; do + value="${kitty_vars[$key]}" + sed -i "s/^$key.*/$key $value/" "$HOME/.config/kitty/kitty.conf" +done +echo "Reloading opened Kitties." +killall -SIGUSR1 kitty &> /dev/null + + + +# Convert CSS to SCSS for eww +# echo "Converting CSS colors file to SCSS for eww." +# cp "$HOME/.config/gtk-3.0/colors-gtk.css" "$HOME/.config/eww/colors.scss" +# sed -i -E 's/^@define-color /$/; s/^\$\S*/&:/' "$HOME/.config/eww/colors.scss" + + + +# Set Waybar params +echo "Setting Waybar parameters." +declare -A waybar_vars=( + [font-family]="${params[font]}" + [border-bottom]="${params[border_size]}px solid transparent" + [margin-bottom]="${params[border_size]}px" +) +for key in "${!waybar_vars[@]}"; do + value="${waybar_vars[$key]}" + sed -i "s~$key:[^;]*~$key: $value~" "$HOME/.config/waybar/style.css" +done + +echo "Reloading Waybar." +if pgrep -x -u "$USER" waybar > /dev/null; then + killall -SIGUSR2 waybar +else + hyprctl dispatch exec waybar > /dev/null +fi + + + +# Set Wofi params +echo "Setting Wofi parameters." +declare -A wofi_vars_window=( + [font-family]="${params[font]}" + [border]="${params[border_size]}px solid transparent" + [border-radius]="${params[border_radius]}px" +) +for key in "${!wofi_vars_window[@]}"; do + value="${wofi_vars_window[$key]}" + sed -i "/^window/,/$key:/ s~$key:[^;]*~$key: $value~" "$HOME/.config/wofi/style.css" +done + +declare -A wofi_vars_input=( + [margin]="${params[border_size]}px" + [border-radius]="${params[border_radius]}px ${params[border_radius]}px 0 0" +) +for key in "${!wofi_vars_input[@]}"; do + value="${wofi_vars_input[$key]}" + sed -i "/^#input/,/$key:/ s~$key:[^;]*~$key: $value~" "$HOME/.config/wofi/style.css" +done + +# Set entry:selected border-radius +sed -i "/^#entry:selected/,/border-radius:/ s/border-radius:[^;]*/border-radius: $(( params[border_radius]/2 ))px/" "$HOME/.config/wofi/style.css" + + + +# Set swaync params +#echo "Setting swaync parameters." +#sed -zi "s/border-radius:[^;]*/border-radius: ${params[border_radius]}px/1" "$HOME/.config/swaync/style.css" +#sed -i "s/border: [0-9]+.*/border: ${params[border_size]}px solid transparent;/" "$HOME/.config/swaync/style.css" +#sed -zi "s/margin:[^;]*/margin: $((params[gaps_out]*2))px/1" "$HOME/.config/swaync/style.css" +#sed -zi "s/margin:[^;]*/margin: ${params[gaps_out]}px/3" "$HOME/.config/swaync/style.css" +#sed -zi "s/border-radius:[^;]*/border-radius: ${params[border_radius]}px/8" "$HOME/.config/swaync/style.css" +echo "Reloading swaync." +if pgrep -x -u "$USER" swaync > /dev/null; then + swaync-client -rs > /dev/null +else + hyprctl dispatch exec swaync > /dev/null +fi + + + +# BetterDiscord +if [[ -x /bin/betterdiscordctl ]]; then + if [[ ! -f "$HOME/.config/BetterDiscord/data/stable/custom.css" ]]; then + echo "Downloading ClearVision theme for BetterDiscord." + mkdir -p "$HOME/.config/BetterDiscord/data/stable" + wget -O "$HOME/.config/BetterDiscord/data/stable/custom.css" "https://betterdiscord.app/Download?id=23" + fi + + echo "Setting BetterDiscord colors." + declare -A bd_vars=( + [main-color]="${colors[accent1]}" + [hover-color]="${colors[accent2]}" + [text-normal]="${colors[foreground]}" + [background-shading]='0%' + [background-overlay]='rgba(0, 0, 0, 0)' + [background-image]="linear-gradient(160deg, ${colors[background1]}, ${colors[background2]})" + ) + for key in "${!bd_vars[@]}"; do + value="${bd_vars[$key]}" + sed -i "s~--$key:[^;]*~--$key: $value~" "$HOME/.config/BetterDiscord/data/stable/custom.css" + done +fi + + + +# Change Wlogout icons color +echo "Changing wlogout icons colors." +wlogout_img=('lock' 'reboot' 'shutdown' 'logout') +for img in "${wlogout_img[@]}"; do + convert "$HOME/.config/wlogout/$img.png" -fill "${colors[accent1]}" -colorize 100 "$HOME/.config/wlogout/$img.png" + convert "$HOME/.config/wlogout/$img-focus.png" -fill "${colors[accent2]}" -colorize 100 "$HOME/.config/wlogout/$img-focus.png" +done + + + +# Reload pywalfox +if pgrep firefox &> /dev/null; then + echo "Reloading pywalfox." + pywalfox update 2> /dev/null +fi + + + +# OpenRGB +if [[ -x /bin/openrgb ]]; then + echo "Setting keyboard colors." + openrgb --noautoconnect -c "${colors[accent1]:1}" > /dev/null +fi + + + +# To use with swaylock +convert "$wallpaper" -blur 0x5 "$HOME/.cache/wallpaper-blurred.jpg" & diff --git a/.scripts/foobar2000.sh b/.scripts/foobar2000.sh new file mode 100755 index 0000000..79e8c5a --- /dev/null +++ b/.scripts/foobar2000.sh @@ -0,0 +1,42 @@ +#!/bin/sh +# Required: foo_runcmd + +export WINEPREFIX="$HOME/.local/share/wineprefixes/foobar2000" +foobar2000_cmd="$HOME/.foobar2000/foobar2000.exe" + + + +function start_foobar2000 { + [[ "$XDG_SESSION_TYPE" == 'wayland' ]] && opt="DISPLAY=" + hyprctl dispatch exec "$opt beefweb_mpris" > /dev/null + while ! pgrep foobar2000.exe &> /dev/null; do + sleep 0.1 + done + foo_runcmd '/runcmd=Playback/Volume/Set to -21 dB' + for ((i = 0 ; i < 10 ; i++)); do + foo_runcmd '/runcmd=Playback/Volume/Down' + done +} + + + +function foo_runcmd { + wine "$foobar2000_cmd" "${@}" &> /dev/null +} + + + +case "$1" in + -vu|volume-up) + foo_runcmd '/runcmd=Playback/Volume/Up';; + -vd|volume-down) + foo_runcmd '/runcmd=Playback/Volume/Down';; + -pp|play-pause) + if ! pgrep foobar2000.exe &> /dev/null; then + start_foobar2000 + fi + foo_runcmd '/playpause';; + *) + echo "Invalid option." + exit 1;; +esac diff --git a/.scripts/grim.sh b/.scripts/grim.sh new file mode 100755 index 0000000..6edd3e7 --- /dev/null +++ b/.scripts/grim.sh @@ -0,0 +1,34 @@ +#!/bin/sh + +usage="Usage: $(basename "$0") screen | window | region" + +if [[ $# -ne 1 ]]; then + echo "$usage" + exit 1 +fi + + +case "$1" in + screen) + grim - | wl-copy + ;; + window) + grim -g "$(hyprctl activewindow -j | jq -r '"\(.at[0]),\(.at[1]) \(.size[0])x\(.size[1])"')" - | wl-copy + ;; + region) + region="$(slurp)" + [[ $? -ne 0 ]] && exit 1 + grim -g "$region" - | wl-copy + ;; + *) + echo "$usage" + exit 1 + ;; +esac + + +img_name="$(date +'%Y-%m-%d_%H-%M-%S'_grim.png)" + +wl-paste -t image > "$GRIM_DEFAULT_DIR/$img_name" + +notify-send "Grim" "Screenshot saved to $img_name" diff --git a/.scripts/kill-wine-explorer.sh b/.scripts/kill-wine-explorer.sh new file mode 100755 index 0000000..c836f4a --- /dev/null +++ b/.scripts/kill-wine-explorer.sh @@ -0,0 +1,6 @@ +#!/bin/sh + +while true; do + killall -9 explorer.exe + sleep 5 +done diff --git a/.scripts/lol-watcher.sh b/.scripts/lol-watcher.sh new file mode 100755 index 0000000..4435044 --- /dev/null +++ b/.scripts/lol-watcher.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +# This script + pgrep command +[[ $(pgrep "lol-watcher.sh" | wc -l) -gt 2 ]] && exit 1 + +while true; do + if hyprctl clients | grep -qe 'title: League of Legends (TM) Client'; then + hyprctl monitors | grep -qe 'HDMI-A-1' && hyprctl keyword monitor HDMI-A-1,disable + else + hyprctl monitors | grep -qe 'HDMI-A-1' || hyprctl keyword monitor HDMI-A-1,1920x1080@60,1920x0,1 + fi + sleep 5 +done diff --git a/.scripts/swayidle.sh b/.scripts/swayidle.sh new file mode 100755 index 0000000..6893a68 --- /dev/null +++ b/.scripts/swayidle.sh @@ -0,0 +1,12 @@ +#!/bin/sh + +# Edit /etc/elogind/logind.conf and change these lines: +# HandleLidSwitch=suspend -> HandleLidSwitch=lock +# HandleLidSwitchExternalPower=suspend -> HandleLidSwitchExternalPower=lock + +swayidle -w \ + timeout 300 "$HOME/.scripts/swaylock.sh" \ + timeout 360 'hyprctl dispatch dpms off' \ + resume 'hyprctl dispatch dpms on' \ + before-sleep "$HOME/.scripts/swaylock.sh" \ + lock "$HOME/.scripts/swaylock.sh" diff --git a/.scripts/swaylock.sh b/.scripts/swaylock.sh new file mode 100755 index 0000000..b91fb2f --- /dev/null +++ b/.scripts/swaylock.sh @@ -0,0 +1,66 @@ +#!/bin/sh + +source "$HOME/.config/hypr/colors.sh" + +options=( + --daemonize + --font Hack + --indicator-caps-lock + --indicator-radius 100 + --indicator-thickness 7 + --text-color "$foreground" + --text-caps-lock-color "$foreground" + --text-ver-color "$foreground" + --text-wrong-color "$foreground" + --text-clear-color "$disabled" + --ring-color "$accent1" + --ring-caps-lock-color "$accent2" + --ring-ver-color "$good" + --ring-wrong-color "$bad" + --ring-clear-color "$disabled" + --key-hl-color "$foreground" + --bs-hl-color "$disabled" + --caps-lock-key-hl-color "$foreground" + --caps-lock-bs-hl-color "$disabled2" + --separator-color 00000000 + --line-color 00000000 + --line-caps-lock-color 00000000 + --line-ver-color 00000000 + --line-wrong-color 00000000 + --line-clear-color 00000000 + --inside-color 00000000 + --inside-caps-lock-color 00000000 + --inside-ver-color 00000000 + --inside-wrong-color 00000000 + --inside-clear-color 00000000 + --separator-color 00000000 +) + +if swaylock --help 2>&1 | grep -qe '--screenshots'; then + options+=( + --disable-caps-lock-text + --indicator + --clock + --screenshots + --effect-blur 7x5 + --effect-vignette 0.5:0.5 + --grace 0 + --fade-in 0.2 + ) +else + options+=( + --show-failed-attempts + --indicator-idle-visible + --image "$HOME/.cache/wallpaper-blurred.jpg" + ) +fi + +if swaylock -v | grep -q fprintd; then + options+=( + --fingerprint + ) +fi + +swaylock "${options[@]}" + +sw -r diff --git a/.scripts/toggle-weeb-mode.sh b/.scripts/toggle-weeb-mode.sh new file mode 100755 index 0000000..611e613 --- /dev/null +++ b/.scripts/toggle-weeb-mode.sh @@ -0,0 +1,13 @@ +#!/bin/sh + +source "$HOME/.cache/wal/colors.sh" + +if grep -q 1 "$HOME/.cache/weeb-mode"; then + wallpaper='/usr/share/hyprland/wall_2K.png' + echo 0 > "$HOME/.cache/weeb-mode" +else + echo 1 > "$HOME/.cache/weeb-mode" +fi + +killall -9 swaybg +hyprctl dispatch exec "swaybg -i \"$wallpaper\"" > /dev/null diff --git a/.scripts/waybar-cpu-temp.sh b/.scripts/waybar-cpu-temp.sh new file mode 100755 index 0000000..d7035d0 --- /dev/null +++ b/.scripts/waybar-cpu-temp.sh @@ -0,0 +1,19 @@ +#!/bin/sh + +declare -i hwmon_nr=$(( $(cat -n /sys/class/hwmon/hwmon*/name | grep -oP '\d+\s+k10temp' | grep -oP '^\d+') - 1)) + +temp=$(cat /sys/class/hwmon/hwmon$hwmon_nr/temp1_input | cut -c -2) + +if [[ $temp -lt 45 ]]; then + class=low +elif [[ $temp -lt 70 ]]; then + class=normal +elif [[ $temp -lt 80 ]]; then + class=high +else + class=alert +fi + +cat << EOF +{"text": "$temp°C", "alt": "$class", "tooltip": "$temp°C", "class": "$class", "percentage": ""} +EOF diff --git a/.scripts/waybar-gpu-temp.sh b/.scripts/waybar-gpu-temp.sh new file mode 100755 index 0000000..6fe1f66 --- /dev/null +++ b/.scripts/waybar-gpu-temp.sh @@ -0,0 +1,24 @@ +#!/bin/sh + +declare -i hwmon_nr_amd=$(( $(cat -n /sys/class/hwmon/hwmon*/name | grep 'amdgpu' | grep -oP '\d+') - 1)) + +if (( $hwmon_nr_amd >= 0 )); then + hwmon_path="/sys/class/hwmon/hwmon$hwmon_nr_amd" + temp=$(head -c -4 "$hwmon_path/temp1_input") +elif which nvidia-smi &> /dev/null; then + temp=$(nvidia-smi --query-gpu=temperature.gpu --format=csv,noheader,nounits) +fi + +if [[ $temp -lt 45 ]]; then + class=low +elif [[ $temp -lt 70 ]]; then + class=normal +elif [[ $temp -lt 80 ]]; then + class=high +else + class=alert +fi + +cat << EOF +{"text": "$temp°C", "alt": "$class", "tooltip": "$temp°C", "class": "$class", "percentage": ""} +EOF diff --git a/.scripts/waybar-gpu-usage.sh b/.scripts/waybar-gpu-usage.sh new file mode 100755 index 0000000..323a9a4 --- /dev/null +++ b/.scripts/waybar-gpu-usage.sh @@ -0,0 +1,25 @@ +#!/bin/sh + +declare -i hwmon_nr_amd=$(( $(cat -n /sys/class/hwmon/hwmon*/name | grep 'amdgpu' | grep -oP '\d+') - 1)) + +if (( $hwmon_nr_amd >= 0 )); then + hwmon_path="/sys/class/hwmon/hwmon$hwmon_nr_amd" + usage=$(cat "$hwmon_path/device/gpu_busy_percent") + vram=$(awk '{ print int($1/1024/1024) }' "$hwmon_path/device/mem_info_vram_used") + power=$(head -c -7 "$hwmon_path/power1_average") +elif which nvidia-smi &> /dev/null; then + usage=$(nvidia-smi --query-gpu=utilization.gpu --format=csv,noheader,nounits) + vram=$(nvidia-smi --query-gpu=memory.used --format=csv,noheader,nounits) + power=$(nvidia-smi --query-gpu=power.draw --format=csv,noheader,nounits | awk '{ print int($1) }') +fi + +if [[ $vram -ge 1024 ]]; then + vram=$vram/1024 + vram_unit="GiB" +else + vram_unit="MiB" +fi + +cat << EOF +{"text": "$usage%", "alt": "", "tooltip": "GPU usage: $usage%\nVRAM usage: ${vram}$vram_unit\nPower draw: ${power}W", "class": "", "percentage": ""} +EOF diff --git a/.vimrc b/.vimrc new file mode 100644 index 0000000..57a38c8 --- /dev/null +++ b/.vimrc @@ -0,0 +1,15 @@ +set term=kitty + +set number +filetype indent on +set autoindent + +set tabstop=4 +set shiftwidth=4 + +filetype plugin on +syntax on + +set mouse=a + +set clipboard=unnamedplus diff --git a/.zaliases b/.zaliases new file mode 100644 index 0000000..471e16c --- /dev/null +++ b/.zaliases @@ -0,0 +1,14 @@ +if grep -q '^NAME="Artix Linux"$' /etc/os-release; then + alias reboot="sudo reboot" + alias poweroff="sudo poweroff" +fi + +alias ssh="TERM=xterm-256color ssh" +#alias ssh="TERM=xterm-256color kitty +kitten ssh" +alias ff="fastfetch" +alias sc="shellcheck -s bash" +alias ip="ip --color=auto" + +# git init --bare $HOME/.dotfiles +# cfg config --local status.showUntrackedFiles no +alias cfg="/usr/bin/git --git-dir=$HOME/.dotfiles --work-tree=$HOME" diff --git a/.zprofile b/.zprofile new file mode 100644 index 0000000..6d353cf --- /dev/null +++ b/.zprofile @@ -0,0 +1,26 @@ +typeset -U path PATH +path=(~/.local/bin $path) +export PATH + +# SSH Agent +if [[ ! -f "$XDG_RUNTIME_DIR/ssh-agent.env" ]]; then + pkill -u "$USER" -9 ssh-agent + ssh-agent > "$XDG_RUNTIME_DIR/ssh-agent.env" +fi +source "$XDG_RUNTIME_DIR/ssh-agent.env" > /dev/null + +# If NVIDIA, set env vars +if ! printenv SSH_TTY &> /dev/null && lspci | grep -q 'VGA.*NVIDIA'; then + export GBM_BACKEND=nvidia-drm + export __GLX_VENDOR_LIBRARY_NAME=nvidia + export LIBVA_DRIVER_NAME=nvidia + export __GL_GSYNC_ALLOWED=1 + export __GL_VRR_ALLOWED=0 + export WLR_NO_HARDWARE_CURSORS=1 +fi + +# Restore Wal colors if not SSH session +printenv SSH_TTY &> /dev/null || wal -R + +# Autostart Hyprland on TTY1 +[[ "$XDG_VTNR" -eq 1 ]] && exec dbus-run-session Hyprland diff --git a/.zshrc b/.zshrc new file mode 100644 index 0000000..59e45bc --- /dev/null +++ b/.zshrc @@ -0,0 +1,117 @@ +# Path to your oh-my-zsh installation. +ZSH=/usr/share/oh-my-zsh/ + +# Uncomment the following line to use case-sensitive completion. +# CASE_SENSITIVE="true" + +# Uncomment the following line to use hyphen-insensitive completion. +# Case-sensitive completion must be off. _ and - will be interchangeable. +HYPHEN_INSENSITIVE="true" + +# Uncomment the following line to enable command auto-correction. +ENABLE_CORRECTION="true" + +plugins=(git-prompt sudo zsh-autosuggestions zsh-shift-select) + +ZSH_CACHE_DIR=$HOME/.cache/oh-my-zsh +if [[ ! -d $ZSH_CACHE_DIR ]]; then + mkdir $ZSH_CACHE_DIR +fi + +# If not running interactively, don't do anything +[[ $- != *i* ]] && exit + +source $HOME/.zaliases + +# Disable bell +unsetopt autocd beep + +# Enable case-insensitive auto completion +autoload -Uz compinit && compinit +zstyle ':completion:*' matcher-list '' 'm:{a-zA-Z}={A-Za-z}' + +# Set prompt +PROMPT="%B%F{198}%n%F{015}@%F{014}%m%F{015}:%F{198}%~%F{015}> %b%f" +#autoload -Uz promptinit && promptinit + +# History settings +HISTFILE=~/.zhistory +HISTSIZE=10000 +SAVEHIST=10000 +setopt appendhistory +setopt extended_history +setopt share_history +setopt inc_append_history +setopt hist_find_no_dups +setopt hist_reduce_blanks + +# Enable case-insensitive globbing +setopt no_case_glob +setopt glob_complete + +autoload -Uz up-line-or-beginning-search down-line-or-beginning-search +zle -N up-line-or-beginning-search +zle -N down-line-or-beginning-search + +# Import colorscheme from 'wal' asynchronously +# & # Run the process in the background. +# # ( ) # Hide shell job control messages. +# # Not supported in the "fish" shell. +(cat ~/.cache/wal/sequences &) +# # To add support for TTYs this line can be optionally added. +source ~/.cache/wal/colors-tty.sh + +# create a zkbd compatible hash; +# to add other keys to this hash, see: man 5 terminfo +typeset -g -A key + +key[Home]="${terminfo[khome]}" +key[End]="${terminfo[kend]}" +key[Insert]="${terminfo[kich1]}" +key[Backspace]="${terminfo[kbs]}" +key[Delete]="${terminfo[kdch1]}" +key[Up]="${terminfo[kcuu1]}" +key[Down]="${terminfo[kcud1]}" +key[Left]="${terminfo[kcub1]}" +key[Right]="${terminfo[kcuf1]}" +key[PageUp]="${terminfo[kpp]}" +key[PageDown]="${terminfo[knp]}" +key[Shift-Tab]="${terminfo[kcbt]}" +key[Control-Left]="${terminfo[kLFT5]}" +key[Control-Right]="${terminfo[kRIT5]}" +key[Control-Backspace]="^H" +key[Control-Delete]="^5" + +# Setup key accordingly +bindkey -- "${key[Home]}" beginning-of-line +bindkey -- "${key[End]}" end-of-line +bindkey -- "${key[Insert]}" overwrite-mode +bindkey -- "${key[Backspace]}" backward-delete-char +bindkey -- "${key[Delete]}" delete-char +bindkey -- "${key[Up]}" up-line-or-history +bindkey -- "${key[Down]}" down-line-or-history +bindkey -- "${key[Left]}" backward-char +bindkey -- "${key[Right]}" forward-char +bindkey -- "${key[PageUp]}" beginning-of-buffer-or-history +bindkey -- "${key[PageDown]}" end-of-buffer-or-history +bindkey -- "${key[Shift-Tab]}" reverse-menu-complete +bindkey -- "${key[Up]}" up-line-or-beginning-search +bindkey -- "${key[Down]}" down-line-or-beginning-search +bindkey -- "${key[Control-Left]}" backward-word +bindkey -- "${key[Control-Right]}" forward-word +bindkey -- "${key[Control-Delete]}" kill-word +bindkey -M emacs "${key[Control-Backspace]}" backward-kill-word +bindkey -M viins "${key[Control-Backspace]}" backward-kill-word +bindkey -M vicmd "${key[Control-Backspace]}" backward-kill-word + +# Finally, make sure the terminal is in application mode, when zle is +# active. Only then are the values from $terminfo valid. +if (( ${+terminfo[smkx]} && ${+terminfo[rmkx]} )); then + autoload -Uz add-zle-hook-widget + function zle_application_mode_start { echoti smkx } + function zle_application_mode_stop { echoti rmkx } + add-zle-hook-widget -Uz zle-line-init zle_application_mode_start + add-zle-hook-widget -Uz zle-line-finish zle_application_mode_stop +fi + +source $ZSH/oh-my-zsh.sh