commit 3fab9257e06c1436976232e47564067e46bf5768 Author: nouredeen Date: Mon Jun 15 00:24:26 2026 +0300 files diff --git a/config/hypr/autostart.conf b/config/hypr/autostart.conf new file mode 100644 index 0000000..7f942c4 --- /dev/null +++ b/config/hypr/autostart.conf @@ -0,0 +1,11 @@ +exec-once = hyprswitch init --show-title +exec-once = hyprpaper +exec-once = waybar +exec-once = awww-daemon +exec-once = hyprctl dispatch workspace 1 +exec-once = ~/.config/hypr/scripts/replay-startup.sh +exec-once = walker --gapplication-service +exec-once = swaync +exec-once = gsettings set org.gnome.desktop.interface gtk-theme "catppuccin-mocha-mauve-standard+default" +exec-once = gsettings set org.gnome.desktop.interface color-scheme "prefer-dark" +exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP diff --git a/config/hypr/binds.conf b/config/hypr/binds.conf new file mode 100644 index 0000000..b093558 --- /dev/null +++ b/config/hypr/binds.conf @@ -0,0 +1,97 @@ +$mainMod = SUPER +$secMod = SUPER SHIFT +$terminal = kitty +$fileManager = thunar +$menu = walker +$menuLauncher = ~/.config/rofi/launchers/type-2/launcher.sh + +# System +bind = $mainMod, F4, exec, wlogout -l ~/.config/wlogout/layout -s ~/.config/wlogout/style.css -b 4 -T 350 -B 350 +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, L, exec, hyprlock + +# Windows +bind = $secMod, V, togglefloating +bind = $mainMod, F11, fullscreen, 0 +bind = $mainMod, T, layoutmsg, togglesplit +bind = $secMod, right, movewindow, r +bind = $secMod, left, movewindow, l +bind = $secMod, up, movewindow, u +bind = $secMod, down, movewindow, d +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow + +# Applications +bind = $mainMod, F, exec, firefox +bind = $mainMod, S, exec, spotify +bind = $mainMod, N, exec, swaync-client -t -sw +bind = $secMod, N, exec, swaync-cleint --close-all +bind = ALT, SPACE, exec, $menu +bind = $mainMod, V, exec, walker --provider clipboard +bind = ALT, Tab, exec, hyprswitch gui --mod-key=alt --key=tab --close=mod-key-release --reverse-key=mod=shift + +# Screenshots +bind = $secMod, S, exec, hyprshot -m region -z + +# Screen recording +bind = $mainMod, R, exec, notify-send "Recording Started" "Screen recording has started, Press Super + Shift + R to end it."; wf-recorder -f ~/Videos/$(date +%Y%m%d_%H%M%S).mp4 -g "$(slurp)" +bind = $mainMod SHIFT, R, exec, pkill -INT wf-recorder && notify-send "Recording Saved" "Screen recording saved to ~/Videos/" +bind = ALT, E, exec, killall -SIGUSR1 gpu-screen-recorder && notify-send "Replay Saved" "Clip dumped to ~/Videos/Replays" + +# Audio +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ + +# Display +bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%- +bind = , XF86MonBrightnessUp, exec, brightnessctl set 5%+ + +# Opacity +bind = $secMod, mouse_down, exec, ~/.config/hypr/scripts/opacity.sh decrease +bind = $secMod, mouse_up, exec, ~/.config/hypr/scripts/opacity.sh increase + +# Touchpad +bind = , XF86TouchpadToggle, exec, hyprctl keyword input:touchpad:enabled toggle + +# Switch to workspace +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 + +# Move window to workspace +bind = $secMod, 1, movetoworkspace, 1 +bind = $secMod, 2, movetoworkspace, 2 +bind = $secMod, 3, movetoworkspace, 3 +bind = $secMod, 4, movetoworkspace, 4 +bind = $secMod, 5, movetoworkspace, 5 +bind = $secMod, 6, movetoworkspace, 6 + +# Next/previous workspace on focused monitor +bind = $mainMod, mouse_up, workspace, m+1 +bind = $mainMod, mouse_down, workspace, m-1 +bind = $mainMod, bracketright, exec, ~/.config/hypr/workspace_next.sh +bind = $mainMod, bracketleft, exec, ~/.config/hypr/workspace_prev.sh + +# Pin workspaces to monitors (uncomment to use) +#workspace = 1, monitor:DP-1 +#workspace = 2, monitor:DP-1 +#workspace = 3, monitor:DP-1 +#workspace = 1, monitor:HDMI-A-1 +#workspace = 2, monitor:HDMI-A-1 +#workspace = 3, monitor:HDMI-A-1 +#workspace = 4, monitor:eDP-2 +#workspace = 5, monitor:eDP-2 +#workspace = 6, monitor:eDP-2 +#monitor = DP-1, 1920x1080@60, 0x0, 1 +#monitor = eDP-2, 2560x1600@144, 0x1080, 1.67 +#monitor = eDP-2, disable diff --git a/config/hypr/env.conf b/config/hypr/env.conf new file mode 100644 index 0000000..c83adec --- /dev/null +++ b/config/hypr/env.conf @@ -0,0 +1,6 @@ +env = QT_QPA_PLATFORMTHEME, qt6ct +env = JAVA_AWT_WM_NONPARENTING, 1 +env = GTK_THEME,catppuccin-mocha-mauve-standard+default +env = COLOR_SCHEME, prefer-dark +env = LIBVA_DRIVER_NAME, nvidia +env = __GLX_VENDOR_LIBRARY_NAME, nvidia diff --git a/config/hypr/hyprland.conf b/config/hypr/hyprland.conf new file mode 100644 index 0000000..5776b6b --- /dev/null +++ b/config/hypr/hyprland.conf @@ -0,0 +1,7 @@ +source = ~/.config/hypr/monitors.conf +source = ~/.config/hypr/workspaces.conf +source = ~/.config/hypr/autostart.conf +source = ~/.config/hypr/env.conf +source = ~/.config/hypr/windowrules.conf +source = ~/.config/hypr/settings.conf +source = ~/.config/hypr/binds.conf diff --git a/config/hypr/hyprland.conf.bak b/config/hypr/hyprland.conf.bak new file mode 100644 index 0000000..03d52d0 --- /dev/null +++ b/config/hypr/hyprland.conf.bak @@ -0,0 +1,83 @@ + +# This config is a STUB! This should never be generated. +# Use the default lua config from https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.lua + +exec-once = hyprswitch init --show-title +exec-once = waybar + +env = QT_QPA_PLATFORMTHEME, qt6ct +env = JAVA_AWT_WM_NONPARENTING, 1 +env = GTK_THEME = Adwaita:dark + +input { + touchpad { + natural_scroll = true + } +} + +xwayland { + force_zero_scaling = true +} + +$mainMod = SUPER +$secMod = SUPER SHIFT +$terminal = kitty +$fileManager = dolphin +$menu = rofi +$menuLauncher = ~/.config/rofi/launchers/type-2/launcher.sh + +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = ALT, SPACE, exec, bash $menuLauncher +bind = $secMod, right, movewindow, r +bind = $secMod, left, movewindow, l +bind = $secMod, up, movewindow, u +bind = $secMod, down, movewindow, d +bind = $mainMod, F11, fullscreen, 0 +bind = $mainMod, F, exec, firefox +bind = ALT, Tab, exec, hyprswitch gui --mod-key=alt --key=tab --close=mod-key-release --reverse-key=mod=shift +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = $secMod, S, exec, hyprshot -m region + +# Pin workspaces to monitors +workspace = 1, monitor:DP-1 +workspace = 2, monitor:DP-1 +workspace = 3, monitor:DP-1 +workspace = 4, monitor:eDP-1 +workspace = 5, monitor:eDP-1 +workspace = 6, monitor:eDP-1 + +# Switch to workspace +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 + +# Move window to workspace +bind = $secMod, 1, movetoworkspace, 1 +bind = $secMod, 2, movetoworkspace, 2 +bind = $secMod, 3, movetoworkspace, 3 +bind = $secMod, 4, movetoworkspace, 4 +bind = $secMod, 5, movetoworkspace, 5 +bind = $secMod, 6, movetoworkspace, 6 + +# Next/previous workspace on focused monitor +bind = $mainMod, mouse_down, workspace, m+1 +bind = $mainMod, mouse_up, workspace, m-1 +bind = $mainMod, bracketright, workspace, m+1 +bind = $mainMod, bracketleft, workspace, m-1 + +monitor = DP-1, 1920x1080@60, 0x0, 1 +monitor = eDP-1, 2560x1600@144, 1920x0, 1.67 + +workspace = 1, monitor:DP-1 +workspace = 2, monitor:DP-1 +workspace = 3, monitor:DP-1 +workspace = 4, monitor:eDP-1 +workspace = 5, monitor:eDP-1 +workspace = 6, monitor:eDP-1 diff --git a/config/hypr/hyprland.conf.bak2 b/config/hypr/hyprland.conf.bak2 new file mode 100644 index 0000000..b6bc48f --- /dev/null +++ b/config/hypr/hyprland.conf.bak2 @@ -0,0 +1,130 @@ + +# This config is a STUB! This should never be generated. +# Use the default lua config from https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.lua + +source = ~/.config/hypr/monitors.conf +source = ~/.config/hypr/workspaces.conf +exec-once = hyprswitch init --show-title +exec-once = hyprpaper +exec-once = waybar +exec-once = awww-daemon +exec-once = hyprctl dispatch workspace 1 +exec-once = ~/.config/hypr/scripts/replay-startup.sh +exec-once = walker --gapplication-service +exec-once = swaync +env = QT_QPA_PLATFORMTHEME, qt6ct +env = JAVA_AWT_WM_NONPARENTING, 1 +env = GTK_THEME, Adwaita:dark +env = COLOR_SCHEME, prefer-dark +env = LIBVA_DRIVER_NAME, nvidia +env = __GLX_VENDOR_LIBRARY_NAME, nvidia + +windowrule = match:class ^(steam_app_1091500)$, fullscreen 1 +windowrule = match:class ^(ArqaamAccounting)$, float true +windowrule = match:class ^(ArqaamAccounting)$, center true +windowrule = match:title ^(Network Manager)$, float true + +general { + col.active_border = rgba(6C7086ff) # focused window border + col.inactive_border = rgba(313244ff) # unfocused windows + gaps_out = 10,10,10,10 +} + +input { + touchpad { + natural_scroll = true + clickfinger_behavior = true + } + numlock_by_default = true + kb_layout = us,ara + kb_variant = , + kb_options = grp:alt_shift_toggle +} + +general { +} + +xwayland { + force_zero_scaling = true +} + +$mainMod = SUPER +$secMod = SUPER SHIFT +$terminal = kitty +$fileManager = hyprfm +$menu = walker +$menuLauncher = ~/.config/rofi/launchers/type-2/launcher.sh +bind = $mainMod, F4, exec, wlogout -l ~/.config/wlogout/layout -s ~/.config/wlogout/style.css -b 4 -T 350 -B 350 +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit +bind = $mainMod, E, exec, $fileManager +bind = $secMod, V, togglefloating +bind = $mainMod, V, exec, walker --provider clipboard +bind = ALT, SPACE, exec, $menu +bind = ALT, E, exec, killall -SIGUSR1 gpu-screen-recorder && notify-send "Replay Saved" "Clip dumped to ~/Videos/Replays" +bind = $secMod, right, movewindow, r +bind = $secMod, left, movewindow, l +bind = $secMod, up, movewindow, u +bind = $secMod, down, movewindow, d +bind = $mainMod, F11, fullscreen, 0 +bind = $mainMod, F, exec, firefox +bind = $mainMod, S, exec, spotify +bind = $mainMod, N, exec, swaync-client -t -sw +bind = $secMod, N, exec, swaync-cleint --close-all +bind = ALT, Tab, exec, hyprswitch gui --mod-key=alt --key=tab --close=mod-key-release --reverse-key=mod=shift +bind = $mainMod, L, exec, hyprlock +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = , XF86AudioNext, exec, playerctl next +bind = , XF86AudioPrev, exec, playerctl previous +bind = $secMod, S, exec, hyprshot -m region -z +bind = $mainMod, T, layoutmsg, togglesplit +# Screen recording +bind = $mainMod, R, exec, wf-recorder -f ~/Videos/$(date +%Y%m%d_%H%M%S).mp4 -g "$(slurp)" +bind = $mainMod SHIFT, R, exec, pkill -INT wf-recorder +bindm = $mainMod, mouse:272, movewindow +bindm = $mainMod, mouse:273, resizewindow +bind = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle +bind = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%- +bind = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+ +bind = , XF86MonBrightnessDown, exec, brightnessctl set 5%- +bind = , XF86MonBrightnessUp, exec, brightnessctl set 5%+ +bind = $secMod, mouse_down, exec, ~/.config/hypr/scripts/opacity.sh decrease +bind = $secMod, mouse_up, exec, ~/.config/hypr/scripts/opacity.sh increase +bind = , XF86TouchpadToggle, exec, hyprctl keyword input:touchpad:enabled toggle +# Pin workspaces to monitors +#workspace = 1, monitor:DP-1 +#workspace = 2, monitor:DP-1 +#workspace = 3, monitor:DP-1 +#workspace = 1, monitor:HDMI-A-1 +#workspace = 2, monitor:HDMI-A-1 +#workspace = 3, monitor:HDMI-A-1 +#workspace = 4, monitor:eDP-2 +#workspace = 5, monitor:eDP-2 +#workspace = 6, monitor:eDP-2 + +# Switch to workspace +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 + +# Move window to workspace +bind = $secMod, 1, movetoworkspace, 1 +bind = $secMod, 2, movetoworkspace, 2 +bind = $secMod, 3, movetoworkspace, 3 +bind = $secMod, 4, movetoworkspace, 4 +bind = $secMod, 5, movetoworkspace, 5 +bind = $secMod, 6, movetoworkspace, 6 + +# Next/previous workspace on focused monitor +bind = $mainMod, mouse_up, workspace, m+1 +bind = $mainMod, mouse_down, workspace, m-1 +bind = $mainMod, bracketright, exec, ~/.config/hypr/workspace_next.sh +bind = $mainMod, bracketleft, exec, ~/.config/hypr/workspace_prev.sh + +#monitor = DP-1, 1920x1080@60, 0x0, 1 +#monitor = eDP-2, 2560x1600@144, 0x1080, 1.67 +# monitor = eDP-2, disable diff --git a/config/hypr/hyprland.conf.save b/config/hypr/hyprland.conf.save new file mode 100644 index 0000000..b1f09f9 --- /dev/null +++ b/config/hypr/hyprland.conf.save @@ -0,0 +1,78 @@ + +# This config is a STUB! This should never be generated. +# Use the default lua config from https://github.com/hyprwm/Hyprland/blob/main/example/hyprland.lua + +exec-once = hyprswitch init --show-title + +windowrule = match:fullscreen 1, border_size 0 + +env = QT_QPA_PLATFORMTHEME, qt6ct +env = JAVA_AWT_WM_NONPARENTING, 1 + + +xwayland { + force_zero_scaling = true +} + +$mainMod = SUPER +$secMod = SUPER SHIFT +$terminal = kitty +$fileManager = dolphin +$menu = rofi +$menuLauncher = ~/.config/rofi/launchers/type-2/launcher.sh + +bind = $mainMod, Q, exec, $terminal +bind = $mainMod, C, killactive, +bind = $mainMod, M, exec, command -v hyprshutdown >/dev/null 2>&1 && hyprshutdown || hyprctl dispatch exit +bind = $mainMod, E, exec, $fileManager +bind = $mainMod, V, togglefloating, +bind = ALT, SPACE, exec, bash $menuLauncher +bind = $secMod, right, movewindow, r +bind = $secMod, left, movewindow, l +bind = $secMod, up, movewindow, u +bind = $secMod, down, movewindow, d +bind = $mainMod, F11, fullscreen, 1 +bind = $mainMod, F, exec, firefox +bind = ALT, Tab, exec, hyprswitch gui --mod-key=alt --key=tab --close=mod-key-release --reverse-key=mod=shift +bind = , XF86AudioPlay, exec, playerctl play-pause +bind = $secMod, S, exec, hyprshot -m region + +# Pin workspaces to monitors +workspace = 1, monitor:DP-1 +workspace = 2, monitor:DP-1 +workspace = 3, monitor:DP-1 +workspace = 4, monitor:eDP-1 +workspace = 5, monitor:eDP-1 +workspace = 6, monitor:eDP-1 + +# Switch to workspace +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 + +# Move window to workspace +bind = $secMod, 1, movetoworkspace, 1 +bind = $secMod, 2, movetoworkspace, 2 +bind = $secMod, 3, movetoworkspace, 3 +bind = $secMod, 4, movetoworkspace, 4 +bind = $secMod, 5, movetoworkspace, 5 +bind = $secMod, 6, movetoworkspace, 6 + +# Next/previous workspace on focused monitor +bind = $mainMod, mouse_down, workspace, m+1 +bind = $mainMod, mouse_up, workspace, m-1 +bind = $mainMod, bracketright, workspace, m+1 +bind = $mainMod, bracketleft, workspace, m-1 + +monitor = DP-1, 1920x1080@60, 0x0, 1 +monitor = eDP-1, 2560x1600@144, 1920x0, 1.67 + +workspace = 1, monitor:DP-1 +workspace = 2, monitor:DP-1 +workspace = 3, monitor:DP-1 +workspace = 4, monitor:eDP-1 +workspace = 5, monitor:eDP-1 +workspace = 6, monitor:eDP-1 diff --git a/config/hypr/hyprlock.conf b/config/hypr/hyprlock.conf new file mode 100644 index 0000000..836c1b0 --- /dev/null +++ b/config/hypr/hyprlock.conf @@ -0,0 +1,108 @@ +source = ~/.config/hypr/mocha.conf + +$accent = $mauve +$accentAlpha = $mauveAlpha +$font = JetBrainsMono Nerd Font + +# GENERAL +general { + hide_cursor = true +} + +# BACKGROUND +background { + monitor = + path = $HOME/.config/background + blur_passes = 0 + color = $base +} + +# LAYOUT +label { + monitor = + text = Layout: $LAYOUT + color = $text + font_size = 25 + font_family = $font + position = 30, -30 + halign = left + valign = top +} + +# TIME +label { + monitor = + text = $TIME + color = $text + font_size = 90 + font_family = $font + position = -30, 0 + halign = right + valign = top +} + +# DATE +label { + monitor = + text = cmd[update:43200000] date +"%A, %d %B %Y" + color = $text + font_size = 25 + font_family = $font + position = -30, -150 + halign = right + valign = top +} + +# FINGERPRINT +{ + monitor = ""; + text = "$FPRINTPROMPT"; + color = "$text"; + font_size = 14; + font_family = $font; + position = "0, -107"; + halign = "center"; + valign = "center"; +} + +# USER AVATAR +image { + monitor = + path = $HOME/.face + size = 100 + border_color = $accent + position = 0, 75 + halign = center + valign = center +} + +# INPUT FIELD +input-field { + monitor = + size = 300, 60 + outline_thickness = 4 + dots_size = 0.2 + dots_spacing = 0.2 + dots_center = true + outer_color = $accent + inner_color = $surface0 + font_color = $text + fade_on_empty = false + placeholder_text = Logged in as $USER + hide_input = false + check_color = $accent + fail_color = $red + fail_text = $FAIL ($ATTEMPTS) + capslock_color = $yellow + position = 0, -47 + halign = center + valign = center +} + +auth { + fingerprint { + enabled = true + ready_message = Scan fingerprint to unlock + present_message = Scanning... + } +} diff --git a/config/hypr/hyprpaper.conf b/config/hypr/hyprpaper.conf new file mode 100644 index 0000000..37e9adb --- /dev/null +++ b/config/hypr/hyprpaper.conf @@ -0,0 +1,8 @@ +preload = /home/nouredeen/wallpapers/disco.png +splash = false + +wallpaper { + monitor = + path = /home/nouredeen/wallpapers/disco.png + fit_mode = cover +} diff --git a/config/hypr/mocha.conf b/config/hypr/mocha.conf new file mode 100644 index 0000000..8ccb56a --- /dev/null +++ b/config/hypr/mocha.conf @@ -0,0 +1,78 @@ + +$rosewater = rgb(f5e0dc) +$rosewaterAlpha = f5e0dc + +$flamingo = rgb(f2cdcd) +$flamingoAlpha = f2cdcd + +$pink = rgb(f5c2e7) +$pinkAlpha = f5c2e7 + +$mauve = rgb(cba6f7) +$mauveAlpha = cba6f7 + +$red = rgb(f38ba8) +$redAlpha = f38ba8 + +$maroon = rgb(eba0ac) +$maroonAlpha = eba0ac + +$peach = rgb(fab387) +$peachAlpha = fab387 + +$yellow = rgb(f9e2af) +$yellowAlpha = f9e2af + +$green = rgb(a6e3a1) +$greenAlpha = a6e3a1 + +$teal = rgb(94e2d5) +$tealAlpha = 94e2d5 + +$sky = rgb(89dceb) +$skyAlpha = 89dceb + +$sapphire = rgb(74c7ec) +$sapphireAlpha = 74c7ec + +$blue = rgb(89b4fa) +$blueAlpha = 89b4fa + +$lavender = rgb(b4befe) +$lavenderAlpha = b4befe + +$text = rgb(cdd6f4) +$textAlpha = cdd6f4 + +$subtext1 = rgb(bac2de) +$subtext1Alpha = bac2de + +$subtext0 = rgb(a6adc8) +$subtext0Alpha = a6adc8 + +$overlay2 = rgb(9399b2) +$overlay2Alpha = 9399b2 + +$overlay1 = rgb(7f849c) +$overlay1Alpha = 7f849c + +$overlay0 = rgb(6c7086) +$overlay0Alpha = 6c7086 + +$surface2 = rgb(585b70) +$surface2Alpha = 585b70 + +$surface1 = rgb(45475a) +$surface1Alpha = 45475a + +$surface0 = rgb(313244) +$surface0Alpha = 313244 + +$base = rgb(1e1e2e) +$baseAlpha = 1e1e2e + +$mantle = rgb(181825) +$mantleAlpha = 181825 + +$crust = rgb(11111b) +$crustAlpha = 11111b diff --git a/config/hypr/monitors.conf b/config/hypr/monitors.conf new file mode 100644 index 0000000..e55769d --- /dev/null +++ b/config/hypr/monitors.conf @@ -0,0 +1,4 @@ +# Generated by nwg-displays on 2026-06-05 at 18:10:13. Do not edit manually. + +monitor=eDP-2,2560x1600@144.0,3650x898,1.67 +monitor=DP-1,1920x1080@60.0,1730x898,1.0 diff --git a/config/hypr/monitors.lua b/config/hypr/monitors.lua new file mode 100644 index 0000000..4aa4531 --- /dev/null +++ b/config/hypr/monitors.lua @@ -0,0 +1,14 @@ +-- Generated by nwg-displays on 2026-06-05 at 18:10:13. Do not edit manually. + +hl.monitor({ + output = "eDP-2", + mode = "2560x1600@144.0", + position = "3650x898", + scale = 1.67 +}) +hl.monitor({ + output = "DP-1", + mode = "1920x1080@60.0", + position = "1730x898", + scale = 1.0 +}) diff --git a/config/hypr/scripts/dock-startup.sh b/config/hypr/scripts/dock-startup.sh new file mode 100755 index 0000000..caf667b --- /dev/null +++ b/config/hypr/scripts/dock-startup.sh @@ -0,0 +1,20 @@ +#!/bin/bash + +# Define your monitor names +EXTERNAL="DP-1" +LAPTOP="eDP-1" + +# Kill any existing dock instances +pkill -f nwg-dock-hyprland + +# Give Wayland a little more time to clear the screen edge +sleep 0.6 + +# Check if the external monitor is actively connected +if hyprctl monitors | grep -q "Monitor $EXTERNAL"; then + # Launch on external using Hyprland's native exec + hyprctl dispatch exec "nwg-dock-hyprland -o $EXTERNAL -p bottom -a center -ml 10 -mr 10 -mb 10 -i 28 -nolauncher -x" +else + # Fallback to laptop + hyprctl dispatch exec "nwg-dock-hyprland -o $LAPTOP -p bottom -a center -ml 10 -mr 10 -mb 10 -i 28 -nolauncher -x" +fi diff --git a/config/hypr/scripts/opacity.sh b/config/hypr/scripts/opacity.sh new file mode 100755 index 0000000..62d6fa4 --- /dev/null +++ b/config/hypr/scripts/opacity.sh @@ -0,0 +1,21 @@ +#!/bin/bash +# Usage: opacity.sh [increase|decrease] + +STEP=0.1 +ADDRESS=$(hyprctl activewindow -j | grep -oP '"address": "\K[^"]+') +CURRENT=$(hyprctl getprop active opacity | grep -oP '[\d.]+' | head -1) + +if [[ -z "$CURRENT" ]]; then + CURRENT=1.0 +fi + +if [[ "$1" == "increase" ]]; then + NEW=$(echo "$CURRENT + $STEP" | bc) +else + NEW=$(echo "$CURRENT - $STEP" | bc) +fi + +# Clamp between 0.1 and 1.0 +NEW=$(echo "if ($NEW > 1.0) 1.0 else if ($NEW < 0.1) 0.1 else $NEW" | bc) + +hyprctl dispatch setprop active opacity "$NEW" diff --git a/config/hypr/scripts/replay-startup.sh b/config/hypr/scripts/replay-startup.sh new file mode 100755 index 0000000..61dbe29 --- /dev/null +++ b/config/hypr/scripts/replay-startup.sh @@ -0,0 +1,25 @@ +#!/bin/bash + +# Define your monitors +EXTERNAL="DP-1" +LAPTOP="eDP-1" +REPLAY_DIR="$HOME/Videos/Replays" + +# Ensure the output directory exists +mkdir -p "$REPLAY_DIR" + +# Kill any existing recorder instances to prevent duplicates/errors +# 2>/dev/null hides the "no process found" message if it wasn't running +killall gpu-screen-recorder 2>/dev/null +# Give the hardware encoder a fraction of a second to free up +sleep 0.5 + +# Check if the external monitor is actively connected +if hyprctl monitors | grep -q "Monitor $EXTERNAL"; then + TARGET_MONITOR=$EXTERNAL +else + TARGET_MONITOR=$LAPTOP +fi + +# Launch the recorder on the chosen monitor in the background +gpu-screen-recorder -w "$TARGET_MONITOR" -f 60 -r 120 -c mp4 -a default_output -a "alsa_input.pci-0000_00_1f.3.analog-stereo" -o "$REPLAY_DIR" & diff --git a/config/hypr/settings.conf b/config/hypr/settings.conf new file mode 100644 index 0000000..afd72e2 --- /dev/null +++ b/config/hypr/settings.conf @@ -0,0 +1,20 @@ +general { + col.active_border = rgba(6C7086ff) # focused window border + col.inactive_border = rgba(313244ff) # unfocused windows + gaps_out = 10,10,10,10 +} + +input { + touchpad { + natural_scroll = true + clickfinger_behavior = true + } + numlock_by_default = true + kb_layout = us,ara + kb_variant = , + kb_options = grp:alt_shift_toggle +} + +xwayland { + force_zero_scaling = true +} diff --git a/config/hypr/windowrules.conf b/config/hypr/windowrules.conf new file mode 100644 index 0000000..12d1588 --- /dev/null +++ b/config/hypr/windowrules.conf @@ -0,0 +1,6 @@ +windowrule = match:class ^(steam_app_1091500)$, fullscreen 1 +windowrule = match:class ^(ArqaamAccounting)$, float true +windowrule = match:class ^(ArqaamAccounting)$, center true +windowrule = match:title ^(Network Manager)$, float true +windowrule = match:title ^(File Operation Progress)$, float true +windowrule = match:class ^(blueman-manager)$, float true diff --git a/config/hypr/workspace_next.sh b/config/hypr/workspace_next.sh new file mode 100755 index 0000000..275920c --- /dev/null +++ b/config/hypr/workspace_next.sh @@ -0,0 +1,5 @@ +#!/bin/bash +current=$(hyprctl activeworkspace -j | jq '.id') +if [ "$current" -lt 5 ]; then + hyprctl dispatch workspace $(( current + 1 )) +fi diff --git a/config/hypr/workspace_prev.sh b/config/hypr/workspace_prev.sh new file mode 100755 index 0000000..d16173b --- /dev/null +++ b/config/hypr/workspace_prev.sh @@ -0,0 +1,5 @@ +#!/bin/bash +current=$(hyprctl activeworkspace -j | jq '.id') +if [ "$current" -gt 1 ]; then + hyprctl dispatch workspace $(( current - 1 )) +fi diff --git a/config/hypr/workspaces.conf b/config/hypr/workspaces.conf new file mode 100644 index 0000000..2384fb9 --- /dev/null +++ b/config/hypr/workspaces.conf @@ -0,0 +1,8 @@ +# Generated by nwg-displays on 2026-06-05 at 18:10:26. Do not edit manually. + +workspace=1,monitor:DP-1,default:true +workspace=2,monitor:DP-1 +workspace=3,monitor:DP-1 +workspace=4,monitor:eDP-2,default:true +workspace=5,monitor:eDP-2 +workspace=6,monitor:eDP-2 diff --git a/config/hypr/workspaces.lua b/config/hypr/workspaces.lua new file mode 100644 index 0000000..1eada98 --- /dev/null +++ b/config/hypr/workspaces.lua @@ -0,0 +1,28 @@ +-- Generated by nwg-displays on 2026-06-05 at 18:10:26. Do not edit manually. + +hl.workspace_rule({ + workspace = "1", + monitor = "DP-1", + default = true +}) +hl.workspace_rule({ + workspace = "2", + monitor = "DP-1" +}) +hl.workspace_rule({ + workspace = "3", + monitor = "DP-1" +}) +hl.workspace_rule({ + workspace = "4", + monitor = "eDP-2", + default = true +}) +hl.workspace_rule({ + workspace = "5", + monitor = "eDP-2" +}) +hl.workspace_rule({ + workspace = "6", + monitor = "eDP-2" +}) diff --git a/config/swaync/config.json b/config/swaync/config.json new file mode 100644 index 0000000..e52b923 --- /dev/null +++ b/config/swaync/config.json @@ -0,0 +1,66 @@ +{ + "$schema": "/etc/xdg/swaync/configSchema.json", + "positionX": "right", + "positionY": "top", + "cssPriority": "user", + "layer": "overlay", + "layer-shell": true, + + "control-center-layer": "top", + "control-center-width": 380, + "control-center-height": 750, + "control-center-margin-top": 5, + "control-center-margin-bottom": 0, + "control-center-margin-right": 5, + "control-center-margin-left": 0, + + "notification-window-width": 350, + "notification-window-height": 200, + "notification-icon-size": 70, + "notification-body-image-height": 200, + "notification-body-image-width": 200, + "notification-2fa-action": true, + "notifications-inline-replies": true, + + "timeout": 4, + "timeout-low": 4, + "timeout-critical": 4, + + "fit-to-screen": false, + "relative-timestamps": true, + "keyboard-shortcuts": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "script-fail-notify": true, + "widgets": ["mpris", "title", "dnd", "notifications"], + + "widget-config": { + "title": { + "text": "NOTIFICATIONS", + "clear-all-button": true, + "button-text": "CLEAR" + }, + + "dnd": { + "text": "Do Not Disturb" + }, + + "mpris": { + "blacklist": [], + "autohide": true, + "show-album-art": "always", + "loop-carousel": true, + "image-radius": 10 + }, + "backlight": { + "label": "󰃠", + "device": "amdgpu_bl2", + "min": 10 + }, + "volume": { + "label": "󰕾" + } + } +} diff --git a/config/swaync/config.json.bak b/config/swaync/config.json.bak new file mode 100644 index 0000000..d9f4a2e --- /dev/null +++ b/config/swaync/config.json.bak @@ -0,0 +1,101 @@ +{ + "$schema": "/etc/xdg/swaync/configSchema.json", + "ignore-gtk-theme": true, + "positionX": "right", + "positionY": "top", + "layer": "overlay", + "control-center-layer": "top", + "layer-shell": true, + "layer-shell-cover-screen": true, + "cssPriority": "user", + "control-center-margin-top": 0, + "control-center-margin-bottom": 0, + "control-center-margin-right": 0, + "control-center-margin-left": 0, + "notification-2fa-action": true, + "notification-inline-replies": false, + "notification-body-image-height": 100, + "notification-body-image-width": 200, + "timeout": 10, + "timeout-low": 5, + "timeout-critical": 0, + "fit-to-screen": true, + "relative-timestamps": true, + "control-center-width": 500, + "control-center-height": 600, + "notification-window-width": 500, + "keyboard-shortcuts": true, + "notification-grouping": true, + "image-visibility": "when-available", + "transition-time": 200, + "hide-on-clear": false, + "hide-on-action": true, + "text-empty": "No Notifications", + "script-fail-notify": true, + "scripts": { + "example-script": { + "app-name": "example.app.id", + "exec": "echo 'Do something...'", + "urgency": "Normal" + }, + "example-action-script": { + "app-name": "example.app.id", + "exec": "echo 'Do something actionable!'", + "urgency": "Normal", + "run-on": "action" + } + }, + "notification-visibility": { + "example-name": { + "state": "muted", + "urgency": "Normal", + "app-name": "example.app.id" + } + }, + "widgets": [ + "inhibitors", + "title", + "dnd", + "notifications" + ], + "widget-config": { + "notifications": { + "vexpand": true + }, + "inhibitors": { + "text": "Inhibitors", + "button-text": "Clear All", + "clear-all-button": true + }, + "title": { + "text": "Notifications", + "clear-all-button": true, + "button-text": "Clear All" + }, + "dnd": { + "text": "Do Not Disturb" + }, + "label": { + "max-lines": 5, + "text": "Label Text" + }, + "mpris": { + "blacklist": [], + "autohide": false, + "show-album-art": "always", + "loop-carousel": false + }, + "buttons-grid": { + "buttons-per-row": 7, + "actions": [ + { + "label": "直", + "type": "toggle", + "active": true, + "command": "sh -c '[[ $SWAYNC_TOGGLE_STATE == true ]] && nmcli radio wifi on || nmcli radio wifi off'", + "update-command": "sh -c '[[ $(nmcli radio wifi) == \"enabled\" ]] && echo true || echo false'" + } + ] + } + } +} diff --git a/config/swaync/style.css b/config/swaync/style.css new file mode 100644 index 0000000..10ad11d --- /dev/null +++ b/config/swaync/style.css @@ -0,0 +1,330 @@ +/* === Catppuccin Mocha Hardcoded === */ + +* { + all: unset; + font-size: 15px; + font-weight: bold; + color: #cdd6f4; /* Text */ + transition: 200ms; +} + +.blank-window { + background: transparent; +} + +/* ===================== FLOATING NOTIFICATIONS ===================== */ + +.notification-row { + outline: none; + margin: 0; + padding: 0px; +} + +.floating-notifications.background .notification-row .notification-background { + background: rgba(30, 30, 46, 0.7); /* base alpha */ + border: 2px solid rgba(180, 190, 254, 0.2); /* lavender alpha */ + border-radius: 6px; + margin: 16px; + padding: 0; + transition: background 0.15s ease-in-out; +} + +.floating-notifications.background + .notification-row + .notification-background + .notification { + border-radius: 10px; +} + +.floating-notifications.background + .notification-row + .notification-background + .notification.critical { + border: 2px solid #f38ba8; /* red */ + border-radius: 4px; +} + +.floating-notifications.background + .notification-row + .notification-background + .notification.critical + .summary { + color: #f38ba8; /* red */ +} + +.floating-notifications.background + .notification-row + .notification-background + .notification + .notification-content { + margin: 10px; +} + +.floating-notifications.background + .notification-row + .notification-background + .notification + > *:last-child + > * + .notification-action { + border-radius: 8px; + background-color: rgba(30, 30, 46, 0.7); /* base alpha */ + margin: 6px; + border: 1px solid transparent; + transition: background 0.15s ease-in-out; +} + +.floating-notifications.background + .notification-row + .notification-background + .notification + > *:last-child + > * + .notification-action:hover { + background-color: rgba(137, 180, 250, 0.5); /* blue hover */ + border: 1px solid #89b4fa; /* blue */ +} + +.floating-notifications.background + .notification-row + .notification-background + .notification + > *:last-child + > * + .notification-action:active { + background-color: #89b4fa; /* blue */ + color: #1e1e2e; /* base */ +} + +.floating-notifications.background + .notification-row + .notification-background + .close-button { + margin: 6px; + padding: 2px; + border-radius: 6px; + background-color: transparent; + border: 1px solid transparent; +} + +.floating-notifications.background + .notification-row + .notification-background + .close-button:hover { + background-color: #89b4fa; /* blue */ +} + +/* ===================== CONTROL CENTER ===================== */ + +.control-center { + background: rgba(30, 30, 46, 0.8); /* base alpha */ + border-radius: 6px; + border: 2px solid rgba(69, 71, 90, 0.3); /* surface1 alpha */ + padding: 12px; +} + +/* ------------------- Notifications ---------------------- */ + +.control-center .notification-row .notification-background { + background-color: #313244; + border: 2px solid rgba(137, 180, 250, 0.5); + border-radius: 6px; + margin: 4px 20px; + padding: 2px; +} + +.control-center + .notification-row + .notification-background + .notification + > *:last-child + > * + .notification-action { + background: rgba(137, 180, 250, 0.6); /* blue alpha */ + color: #cdd6f4; /* text */ + border-radius: 6px; +} + +.notification-content { + padding: 15px; +} + +.notification-content:hover { + opacity: 0.5; +} + +/* ------------ Notifications expanded-group -------------- */ + +.notification-group-headers { + font-weight: bold; + font-size: 1.25rem; + color: #b4befe; /* lavender */ + letter-spacing: 2px; + margin: 0 20px; +} + +.notification-group-icon { + color: #b4befe; /* lavender */ +} + +/* ===================== SHARED ELEMENTS ===================== */ + +.summary { + font-weight: bold; + font-size: 18px; + color: #b4befe; /* lavender */ + padding-bottom: 3px; + margin-left: 10px; +} + +.body { + font-size: 14px; + font-weight: bold; + color: #cdd6f4; + margin-left: 10px; +} + +trough { + background-color: rgba(0, 60, 255, 0.1); /* text alpha */ + border-radius: 6px; +} + +progress { + background-color: #89b4fa; /* blue */ + border-radius: 6px; +} + +.time { + font-size: x-small; +} +.message { + font-size: small; +} + +/* ===================== WIDGETS ===================== */ + +.widget-title { + font-weight: bold; + + color: #b4befe; /* lavender */ + margin: 6px; + padding: 0px 20px; +} + +.widget-title > label { + color: #b4befe; + font-size: large; +} + +.widget-title > button > label { + background: #313244; + color: #b4befe; + border-radius: 6px; + padding: 3px 8px; +} + +.widget-title > button:hover > label { + background: #b4befe; + color: #1e1e2e; +} + +/* Do not disturb */ +.widget-dnd { + margin: 6px 6px 20px; + font-size: medium; + font-weight: bold; + color: #b4befe; + padding: 0px 20px; +} + +.widget-dnd > switch { + background: #b4befe6c; + border-radius: 6px; + padding: 3px; +} + +.widget-dnd > switch:checked { + background: #b4befe; +} + +.widget-dnd > switch slider { + background: #cdd6f4; /* text */ + border-radius: 6px; +} + +.widget-dnd > switch:checked slider { + background: #313244; +} + +switch slider { + min-width: 15px; + min-height: 15px; +} + +/* -------------------- Music player ---------------------- */ + +:root { + --mpris-album-art-overlay: rgba(0, 0, 0, 0.55); + --mpris-button-hover: rgba(180, 190, 254, 0.5); + --mpris-album-art-icon-size: 96px; + --mpris-album-art-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75); +} + +.widget-mpris { + color: #cdd6f4; + padding: 10px; + margin: 10px; +} + +.widget-mpris button { + padding: 0 5px; +} + +.widget-mpris button:hover { + background: rgba(180, 190, 254, 0.5); + color: #1e1e2e; /* base */ + border-radius: 3px; +} + +.widget-mpris > box > button { + margin: 0px; +} + +.widget-mpris .widget-mpris-player { + padding: 0px; + margin: 0px; + border-radius: 6px; + box-shadow: var(--mpris-album-art-shadow); +} + +.widget-mpris .widget-mpris-player .mpris-background { + filter: blur(10px); +} + +.widget-mpris .widget-mpris-player .mpris-overlay { + padding: 16px; + background-color: var(--mpris-album-art-overlay); +} + +.widget-mpris .widget-mpris-player .mpris-overlay button:hover { + background: var(--hover-button); +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art { + border-radius: var(--border-radius); + box-shadow: var(--mpris-album-art-shadow); + -gtk-icon-size: var(--mpris-album-art-icon-size); +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-subtitle { + font-size: 1.1rem; +} + +.widget-mpris .widget-mpris-player .mpris-overlay > box > button:hover { + background-color: var(--mpris-button-hover); +} diff --git a/config/swaync/style.css.bak b/config/swaync/style.css.bak new file mode 100644 index 0000000..8305718 --- /dev/null +++ b/config/swaync/style.css.bak @@ -0,0 +1,561 @@ +:root { + --cc-bg: rgba(46, 46, 46, 0.7); + --noti-border-color: rgba(255, 255, 255, 0.15); + --noti-bg: 48, 48, 48; + --noti-bg-alpha: 0.8; + --noti-bg-darker: rgb(38, 38, 38); + --noti-bg-hover: rgb(56, 56, 56); + --noti-bg-focus: rgba(68, 68, 68, 0.6); + --noti-close-bg: rgb(78, 78, 78); + --noti-close-bg-hover: rgb(94, 94, 94); + --text-color: rgb(255, 255, 255); + --text-color-disabled: rgb(150, 150, 150); + --bg-selected: rgb(0, 128, 255); + --notification-icon-size: 64px; + --notification-app-icon-size: calc(var(--notification-icon-size) / 3); + --notification-group-icon-size: 32px; + --border: 1px solid var(--noti-border-color); + --border-radius: 12px; + --notification-shadow: 0 0 0 1px rgba(0, 0, 0, 0.3), + 0 1px 3px 1px rgba(0, 0, 0, 0.7), 0 2px 6px 2px rgba(0, 0, 0, 0.3); + --font-size-body: 15px; + --font-size-summary: 16px; + /* Deprecated variables (because of their typos). Keeeping them around for backwards compatibility. */ + --hover-tranistion: background 0.15s ease-in-out; + --group-collapse-tranistion: opacity 400ms ease-in-out; + --hover-transition: var(--hover-tranistion); + --group-collapse-transition: var(--group-collapse-tranistion); +} + +/* Fallback for older CSS themes */ +/* Fallback for older CSS themes */ +@define-color cc-bg rgba(46, 46, 46, 0.7); +@define-color noti-border-color rgba(255, 255, 255, 0.15); +@define-color noti-bg rgba(48, 48, 48, 0.8); +@define-color noti-bg-opaque rgb(48, 48, 48); +@define-color noti-bg-darker rgb(38, 38, 38); +@define-color noti-bg-hover rgb(56, 56, 56); +@define-color noti-bg-hover-opaque rgb(56, 56, 56); +@define-color noti-bg-focus rgba(68, 68, 68, 0.6); +@define-color noti-close-bg rgba(255, 255, 255, 0.1); +@define-color noti-close-bg-hover rgba(255, 255, 255, 0.15); +@define-color text-color rgb(255, 255, 255); +@define-color text-color-disabled rgb(150, 150, 150); +@define-color bg-selected rgb(0, 128, 255); +notificationwindow, blankwindow { + background: transparent; +} + +.close-button { + /* The notification Close Button */ + background: var(--noti-close-bg); + color: var(--text-color); + text-shadow: none; + padding: 0; + border-radius: 100%; + margin-top: 8px; + margin-right: 8px; + box-shadow: none; + border: none; + min-width: 24px; + min-height: 24px; +} + +.close-button:hover { + box-shadow: none; + background: var(--noti-close-bg-hover); + transition: var(--hover-tranistion); + border: none; +} + +.notification-row { + background: none; + outline: none; +} + +.notification-row:focus { + background: var(--noti-bg-focus); +} + +.notification-row .notification-background { + padding: 6px 12px; +} + +.notification-row .notification-background .notification { + /* The actual notification */ + border-radius: var(--border-radius); + border: var(--border); + padding: 0; + transition: var(--hover-tranistion); + background: rgba(var(--noti-bg), var(--noti-bg-alpha)); +} + +.notification-row .notification-background .notification.low { + /* Low Priority Notification */ +} + +.notification-row .notification-background .notification.normal { + /* Normal Priority Notification */ +} + +.notification-row .notification-background .notification.critical { + /* Critical Priority Notification */ +} + +.notification-row .notification-background .notification .notification-default-action { + /* The large action that also displays the notification summary and body */ + padding: 4px; + margin: 0; + box-shadow: none; + background: transparent; + border: none; + color: var(--text-color); + transition: var(--hover-tranistion); + border-radius: var(--border-radius); +} + +.notification-row .notification-background .notification .notification-default-action:hover { + -gtk-icon-filter: none; + background: var(--noti-bg-hover); +} + +.notification-row .notification-background .notification .notification-default-action:not(:only-child) { + /* When alternative actions are visible */ + border-bottom-left-radius: 0px; + border-bottom-right-radius: 0px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content { + background: transparent; + border-radius: var(--border-radius); + padding: 0; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .image { + /* Notification Primary Image */ + -gtk-icon-filter: none; + -gtk-icon-size: var(--notification-icon-size); + border-radius: 100px; + /* Size in px */ + margin: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .app-icon { + /* Notification app icon (only visible when the primary image is set) */ + -gtk-icon-filter: none; + -gtk-icon-size: var(--notification-app-icon-size); + -gtk-icon-shadow: 0 1px 4px black; + margin: 6px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box label { + /* Fixes base GTK 4 CSS setting a filter of opacity 50% for some odd reason */ + filter: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .summary { + /* Notification summary/title */ + font-size: var(--font-size-summary); + font-weight: bold; + background: transparent; + color: var(--text-color); + text-shadow: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .time { + /* Notification time-ago */ + font-size: var(--font-size-summary); + font-weight: bold; + background: transparent; + color: var(--text-color); + text-shadow: none; + margin-right: 30px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .text-box .body { + /* Notification body */ + font-size: var(--font-size-body); + font-weight: normal; + background: transparent; + color: var(--text-color); + text-shadow: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content progressbar { + /* The optional notification progress bar */ + margin-top: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .body-image { + /* The "extra" optional bottom notification image */ + margin-top: 4px; + background-color: white; + -gtk-icon-filter: none; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply { + /* The inline reply section */ + margin-top: 4px; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-entry { + background: var(--noti-bg-darker); + color: var(--text-color); + caret-color: var(--text-color); + border: var(--border); + border-radius: var(--border-radius); +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button { + margin-left: 4px; + background: rgba(var(--noti-bg), var(--noti-bg-alpha)); + border: var(--border); + border-radius: var(--border-radius); + color: var(--text-color); +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:disabled { + background: initial; + color: var(--text-color-disabled); + border: var(--border); + border-color: transparent; +} + +.notification-row .notification-background .notification .notification-default-action .notification-content .inline-reply .inline-reply-button:hover { + background: var(--noti-bg-hover); +} + +.notification-row .notification-background .notification .notification-alt-actions { + background: none; + border-bottom-left-radius: var(--border-radius); + border-bottom-right-radius: var(--border-radius); + padding: 4px; +} + +.notification-row .notification-background .notification .notification-action { + /* The alternative actions below the default action */ + margin: 4px; + padding: 0; +} + +.notification-row .notification-background .notification .notification-action > button { + border-radius: var(--border-radius); + color: var(--text-color); +} + +.notification-group { + /* Styling only for Grouped Notifications */ + transition: opacity 200ms ease-in-out; + /* The groups close button */ +} + +.notification-group:focus { + background: var(--noti-bg-focus); +} + +.notification-group.low { + /* Low Priority Group */ +} + +.notification-group.normal { + /* Low Priority Group */ +} + +.notification-group.critical { + /* Low Priority Group */ +} + +.notification-group .notification-group-close-button .close-button { + margin: 12px 20px; +} + +.notification-group .notification-group-buttons, .notification-group .notification-group-headers { + margin: 0 16px; + color: var(--text-color); +} + +.notification-group .notification-group-headers { + /* Notification Group Headers */ +} + +.notification-group .notification-group-headers .notification-group-icon { + color: var(--text-color); + -gtk-icon-size: var(--notification-group-icon-size); +} + +.notification-group .notification-group-headers .notification-group-header { + color: var(--text-color); +} + +.notification-group .notification-group-buttons { + /* Notification Group Buttons */ +} + +.notification-group.collapsed { + /* When another group is expanded, lower the opacity of the collapsed ones */ +} + +.notification-group.collapsed.not-expanded { + opacity: 0.4; +} + +.notification-group.collapsed .notification-row .notification { + background-color: rgba(var(--noti-bg), 1); +} + +.notification-group.collapsed .notification-row:not(:last-child) { + /* Top notification in stack */ + /* Set lower stacked notifications opacity to 0 */ +} + +.notification-group.collapsed .notification-row:not(:last-child) .notification-action, +.notification-group.collapsed .notification-row:not(:last-child) .notification-default-action { + opacity: 0; +} + +.notification-group.collapsed:hover .notification-row:not(:only-child) .notification { + background-color: var(--noti-bg-hover); +} + +.control-center { + /* The Control Center which contains the old notifications + widgets */ + background: var(--cc-bg); + color: var(--text-color); + border-radius: var(--border-radius); +} + +.control-center .control-center-list-placeholder { + /* The placeholder when there are no notifications */ + opacity: 0.5; +} + +.control-center .control-center-list { + /* List of notifications */ + background: transparent; +} + +.control-center .control-center-list .notification { + box-shadow: var(--notification-shadow); +} + +.control-center .control-center-list .notification .notification-default-action, +.control-center .control-center-list .notification .notification-action { + transition: var(--group-collapse-tranistion), var(--hover-tranistion); +} + +.control-center .control-center-list .notification .notification-default-action:hover, +.control-center .control-center-list .notification .notification-action:hover { + background-color: var(--noti-bg-hover); +} + +.blank-window { + /* Window behind control center and on all other monitors */ + background: transparent; +} + +.floating-notifications { + background: transparent; +} + +.floating-notifications .notification { + box-shadow: none; +} + +/*** Widgets ***/ +.widget { + margin: 8px; + padding: 8px; + border-radius: var(--border-radius); +} + +/* Title widget */ +.widget-title > label { + margin-right: 8px; + font-size: 1.5rem; +} + +.widget-title > button { + margin-left: 8px; + border-radius: var(--border-radius); +} + +/* DND widget */ +.widget-dnd label { + color: var(--text-color); + margin-right: 8px; + font-size: 1.1rem; +} + +.widget-dnd switch { + border-radius: var(--border-radius); + margin-left: 8px; +} + +.widget-dnd switch slider { + border-radius: var(--border-radius); +} + +/* Label widget */ +.widget-label > label { + font-size: 1.1rem; +} + +/* Mpris widget */ +:root { + --mpris-album-art-overlay: rgba(0, 0, 0, 0.55); + --mpris-button-hover: rgba(0, 0, 0, 0.5); + --mpris-album-art-icon-size: 96px; + --mpris-album-art-shadow: 0px 0px 10px rgba(0, 0, 0, 0.75); +} + +.widget-mpris { + padding: 0; + /* The parent to all players */ +} + +.widget-mpris .widget-mpris-player { + margin: 16px 20px; + border-radius: var(--border-radius); + box-shadow: var(--mpris-album-art-shadow); +} + +.widget-mpris .widget-mpris-player .mpris-background { + filter: blur(10px); +} + +.widget-mpris .widget-mpris-player .mpris-overlay { + padding: 16px; + background-color: var(--mpris-album-art-overlay); +} + +.widget-mpris .widget-mpris-player .mpris-overlay button:hover { + /* The media player buttons (play, pause, next, etc...) */ + background: var(--noti-bg-hover); +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-album-art { + border-radius: var(--border-radius); + box-shadow: var(--mpris-album-art-shadow); + -gtk-icon-size: var(--mpris-album-art-icon-size); +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-title { + font-weight: bold; + font-size: 1.25rem; +} + +.widget-mpris .widget-mpris-player .mpris-overlay .widget-mpris-subtitle { + font-size: 1.1rem; +} + +.widget-mpris .widget-mpris-player .mpris-overlay > box > button { + /* Change player control buttons */ +} + +.widget-mpris .widget-mpris-player .mpris-overlay > box > button:hover { + background-color: var(--mpris-button-hover); +} + +.widget-mpris > box > button { + /* Change player side buttons */ +} + +.widget-mpris > box > button:disabled { + /* Change player side buttons insensitive */ +} + +/* Buttons widget */ +.widget-buttons-grid flowboxchild > button { + border-radius: var(--border-radius); +} + +.widget-buttons-grid flowboxchild > button.toggle:checked { + /* style given to the active toggle button */ +} + +/* Menubar widget */ +.widget-menubar { + /* The revealer buttons */ + /* .AnyName { Name defined in config after # + background-color: rgba(var(--noti-bg), 1.0); + padding: 8px; + margin: 8px; + border-radius: 12px; + } + + .AnyName>button { + background: transparent; + border: none; + } + + .AnyName>button:hover { + background-color: var(--noti-bg-hover); + } */ +} + +.widget-menubar > .menu-button-bar { + /* The left button container */ + /* The right button container */ + /* The left and right button container */ +} + +.widget-menubar > .menu-button-bar > .start { + margin-left: 8px; +} + +.widget-menubar > .menu-button-bar > .end { + margin-right: 8px; +} + +.widget-menubar > .menu-button-bar > .widget-menubar-container button { + border-radius: var(--border-radius); + margin: 0 4px; +} + +.widget-menubar > revealer * { + margin-top: 8px; +} + +.widget-menubar > revealer * button { + border-radius: var(--border-radius); + margin: 8px; + margin-top: 0; +} + +.widget-menubar > revealer * button:last-child { + margin-bottom: 0; +} + +/* Volume widget */ +:root { + --widget-volume-row-icon-size: 24px; +} + +/* Each row app icon */ +.widget-volume row image { + -gtk-icon-size: var(--widget-volume-row-icon-size); +} + +.per-app-volume { + background-color: var(--noti-bg-alt); + margin: 8px; + margin-bottom: 0; + border-radius: var(--border-radius); +} + +/* Slider widget */ +.widget-slider label { + font-size: inherit; +} + +/* Backlight widget */ +/* Inhibitors widget */ +.widget-inhibitors > label { + margin-right: 8px; + font-size: 1.5rem; +} + +.widget-inhibitors > button { + margin-left: 8px; + border-radius: var(--border-radius); +} diff --git a/config/walker/config.toml b/config/walker/config.toml new file mode 100644 index 0000000..01daf8e --- /dev/null +++ b/config/walker/config.toml @@ -0,0 +1,11 @@ +theme = "catppuccin-mocha" + +[placeholders] +"default" = { input = "Search", list = "No Results" } + +[providers] +default = [ + "desktopapplications", + "calc", + "websearch", +] diff --git a/config/walker/themes/catppuccin-mocha/style.css b/config/walker/themes/catppuccin-mocha/style.css new file mode 100644 index 0000000..1dceb48 --- /dev/null +++ b/config/walker/themes/catppuccin-mocha/style.css @@ -0,0 +1,189 @@ +/* Catppuccin Mocha */ +@define-color rosewater #f5e0dc; +@define-color flamingo #f2cdcd; +@define-color pink #f5c2e7; +@define-color mauve #cba6f7; +@define-color red #f38ba8; +@define-color maroon #eba0ac; +@define-color peach #fab387; +@define-color yellow #f9e2af; +@define-color green #a6e3a1; +@define-color teal #94e2d5; +@define-color sky #89dceb; +@define-color sapphire #74c7ec; +@define-color blue #89b4fa; +@define-color lavender #b4befe; +@define-color text #cdd6f4; +@define-color subtext1 #bac2de; +@define-color subtext0 #a6adc8; +@define-color overlay2 #9399b2; +@define-color overlay1 #7f849c; +@define-color overlay0 #6c7086; +@define-color surface2 #585b70; +@define-color surface1 #45475a; +@define-color surface0 #313244; +@define-color base #1e1e2e; +@define-color mantle #181825; +@define-color crust #11111b; + +* { + all: unset; +} + +.normal-icons { + -gtk-icon-size: 16px; +} + +.large-icons { + -gtk-icon-size: 32px; +} + +scrollbar { + opacity: 0; +} + +.box-wrapper { + box-shadow: + 0 19px 38px rgba(0, 0, 0, 0.3), + 0 15px 12px rgba(0, 0, 0, 0.22); + background: @base; + padding: 20px; + border-radius: 20px; + border: 1px solid @crust; +} + +.preview-box, +.elephant-hint, +.placeholder { + color: @text; +} + +.search-container { + border-radius: 10px; + background: @mantle; + padding: 8px; +} + +.input placeholder { + opacity: 0.5; +} + +.input selection { + background: @surface1; +} + +.input { + caret-color: @text; + background: none; + padding: 10px; + color: @text; +} + +.list { + color: @text; +} + +.item-box { + border-radius: 10px; + padding: 10px; +} + +.item-quick-activation { + background: alpha(@mauve, 0.25); + border-radius: 5px; + padding: 10px; +} + +child:selected .item-box, +row:selected .item-box { + background: alpha(@surface0, 0.6); +} + +.item-subtext { + font-size: 12px; + opacity: 0.5; +} + +.providerlist .item-subtext { + font-size: unset; + opacity: 0.75; +} + +.item-image-text { + font-size: 28px; +} + +.preview { + border: 1px solid alpha(@mauve, 0.25); + border-radius: 10px; + color: @text; +} + +.calc .item-text { + font-size: 24px; +} + +.symbols .item-image { + font-size: 24px; +} + +.todo.done .item-text-box { + opacity: 0.25; +} + +.todo.urgent { + font-size: 24px; +} + +.todo.active { + font-weight: bold; +} + +.bluetooth.disconnected { + opacity: 0.5; +} + +.preview .large-icons { + -gtk-icon-size: 64px; +} + +.keybinds { + padding-top: 10px; + border-top: 1px solid @surface0; + font-size: 12px; + color: @text; +} + +.keybind-button { + opacity: 0.5; +} + +.keybind-button:hover { + opacity: 0.75; +} + +.keybind-bind { + text-transform: lowercase; + opacity: 0.35; +} + +.keybind-label { + padding: 2px 4px; + border-radius: 4px; + border: 1px solid @text; +} + +.error { + padding: 10px; + background: @red; + color: @base; +} + +:not(.calc).current { + font-style: italic; +} + +.preview-content.archlinuxpkgs, +.preview-content.dnfpackages { + font-family: monospace; +} diff --git a/config/waybar/colors/catppuccin.css b/config/waybar/colors/catppuccin.css new file mode 100644 index 0000000..f28fa6a --- /dev/null +++ b/config/waybar/colors/catppuccin.css @@ -0,0 +1,18 @@ +@define-color bg0 #1e1e2e; +@define-color bg1 #313244; +@define-color bg2 #45475a; +@define-color bg3 #585b70; +@define-color bg4 #11111b; + +@define-color red #f38ba8; +@define-color orange #fab387; +@define-color yellow #f9e2af; +@define-color green #a6e3a1; +@define-color aqua #94e2d5; +@define-color blue #89b4fa; +@define-color purple #cba6f7; + +@define-color fg #cdd6f4; +@define-color grey0 #6c7086; +@define-color grey1 #7f849c; +@define-color grey2 #9399b2; \ No newline at end of file diff --git a/config/waybar/config.jsonc b/config/waybar/config.jsonc new file mode 100644 index 0000000..73945b7 --- /dev/null +++ b/config/waybar/config.jsonc @@ -0,0 +1,144 @@ +{ + "position": "top", + "margin-top": 6, + "margin-right": 6, + "margin-left": 6, + "modules-left": ["custom/arch", "custom/separator", "hyprland/window"], + "modules-center": ["hyprland/workspaces"], + "modules-right": [ + "custom/cava", + "mpris", + "custom/separator", + "group/tray-drawer", + "custom/separator", + "battery", + "pulseaudio", + "network", + "custom/separator", + "clock", + ], + "hyprland/window": { + "rewrite": { + "(.*) - Firefox": "$1", + "(.*) - kitty": "[$1]", + }, + "separate-outputs": true, + "max-length": 30, + }, + "custom/arch": { + "format": "", + "tooltip": false, + // "on-click": "sh -c 'pkill rofi || ~/.config/rofi/powermenu/type-1/powermenu.sh'", + // "on-click": "eww open --toggle powermenu", + "on-click": "wlogout -l ~/.config/wlogout/layout -s ~/.config/wlogout/style.css -b 4 -T 350 -B 350", + }, + "custom/separator": { + "format": "|", + "interval": "once", + "tooltip": false, + }, + "clock": { + "format": "{:%a %b %d - %I:%M %p}", + "tooltip-format": "{calendar}", + }, + "hyprland/workspaces": { + "format": "{icon}", + "on-click": "activate", + "format-icons": { + "active": " ", + "default": " ", + }, + "persistent-workspaces": { + "*": 6, // 5 workspaces by default on every monitor + }, + "sort-by-number": true, + }, + "custom/cava": { + "exec": "~/.config/waybar/scripts/waybar-cava.sh", + "format": "{}", + "tooltip": false, + }, + "mpris": { + "format": "{title} - {artist}", // {player_icon} removed + "format-paused": "{title} - {artist}", // {status_icon} and removed + "player-icons": { + "default": "󰎆", + "spotify": "", + "firefox": "󰈹", + "mpd": "", + }, + "status-icons": { + "paused": "󰏤", + }, + "max-length": 23, + }, + "pulseaudio": { + "format": "{icon}", // {volume}% removed + "format-bluetooth": "{volume}% {icon}", + "format-muted": "", + "format-icons": { + "headphone": "", + "hands-free": "", + "headset": "", + "phone": "", + "phone-muted": "", + "portable": "", + "car": "", + "default": ["", ""], + }, + "scroll-step": 1, + "on-click": "pamixer -t", + "on-click-right": "pavucontrol", + "ignored-sinks": ["Easy Effects Sink"], + }, + "network": { + "interface": "wlp44s0", + "format": "{ifname}", + "format-wifi": "", + "format-ethernet": "󰊗", + "format-disconnected": "", //An empty format will hide the module. + "tooltip-format": "{ifname} via {gwaddr} 󰊗", + "tooltip-format-wifi": "{essid} ({signalStrength}%) ", + "tooltip-format-ethernet": "{ifname} ", + "tooltip-format-disconnected": "Disconnected", + "max-length": 50, + // "on-click": "exec dms ipc call control-center open", + "on-click": "eww open --toggle control_center", + "on-click-right": "networkmanager_dmenu", + }, + "battery": { + "interval": 60, + "states": { + "warning": 30, + "critical": 15, + }, + "format": "{icon}", // {capacity}% removed + "format-icons": ["", "", "", "", ""], + "tooltip-format": "{capacity}% - {timeTo}", + "max-length": 25, + "on-click": "eww open --toggle control_center", + }, + "group/tray-drawer": { + "orientation": "horizontal", + "drawer": { + "transition-duration": 500, + "children-class": "tray-child", + "transition-left-to-right": false, + "click-to-reveal": true + }, + "modules": [ + "custom/tray-icon", // This is your "toggle" button + "tray" // The actual system tray + ] + }, + + "custom/tray-icon": { + "format": "", // Or use a '' or '󰒓' icon + "tooltip": false, + }, + + "tray": { + "icon-size": 21, + "spacing": 10, + }, +} diff --git a/config/waybar/scripts/cava_config b/config/waybar/scripts/cava_config new file mode 100644 index 0000000..ce50a9f --- /dev/null +++ b/config/waybar/scripts/cava_config @@ -0,0 +1,15 @@ +[general] +bars = 6 + +[output] +method = raw +raw_target = /dev/stdout +data_format = ascii +ascii_max_range = 7 +# Remove the 'ascii_data_format = box' lines—they don't apply to raw ascii mode. + +[input] +# If it stays as zeros even when music plays, try changing 'pulse' to 'pipewire' +method = pulse +source = auto + diff --git a/config/waybar/scripts/launch.sh b/config/waybar/scripts/launch.sh new file mode 100755 index 0000000..5b34e1b --- /dev/null +++ b/config/waybar/scripts/launch.sh @@ -0,0 +1,7 @@ +#!/bin/bash + +killall -9 waybar +swaync-client --reload-css + +waybar & +# swaync & diff --git a/config/waybar/scripts/waybar-cava.sh b/config/waybar/scripts/waybar-cava.sh new file mode 100755 index 0000000..c2fc436 --- /dev/null +++ b/config/waybar/scripts/waybar-cava.sh @@ -0,0 +1,22 @@ +#!/bin/bash + +# Define the bar icons (same ones in your config) +icons=(" " "·" "–" "=" "≡" "≡" "≡") + +killall -q cava +# We read the numbers from CAVA and swap them for icons +cava -p ~/.config/waybar/scripts/cava_config | while read -r line; do + output="" + # Loop through each digit in the output (e.g., '0', '1', '7') + for ((i = 0; i < ${#line}; i++)); do + digit="${line:$i:1}" + # If it's a number, pick the icon. Otherwise, keep it. + if [[ $digit =~ [0-7] ]]; then + output+="${icons[$digit]}" + # If it's a semicolon or anything else, just skip it + else + continue + fi + done + echo "$output" +done diff --git a/config/waybar/style.css b/config/waybar/style.css new file mode 100644 index 0000000..f45a3c9 --- /dev/null +++ b/config/waybar/style.css @@ -0,0 +1,147 @@ +@import "colors/catppuccin.css"; + +* { + border: none; + border-radius: 0; + color: @fg; + font-family: "Adwaita Sans", "JetBrainsMono Nerd Font Propo", "sans-serif"; + font-weight: bold; + min-height: 24px; + padding: 0; + margin: 0; +} + +window#waybar { + background: rgba(30, 30, 46, 0.8); + border-radius: 24px; + border: 2px solid @bg3; +} + +tooltip { + background: @bg0; + border: 1px solid @bg3; + border-radius: 12px; +} + +tooltip label { + color: @fg; + padding: 6px; +} + +#window { + margin: 0 0 0 12px; +} + +#workspaces { + padding: 2px 3px 0px; + color: @fg; +} + +#workspaces button { + padding: 0px 6px; + margin: 2px 6px; + color: transparent; + border-top: 3px solid @bg1; + transition: all 0.3s ease-in-out; +} + +#workspaces button.active { + border-top: 3px solid @blue; + color: @bg0; + min-width: 45px; + background-size: 400% 400%; + background: transparent; +} + +#workspaces button:hover { + border-top: 3px solid @purple; + color: @bg0; + min-width: 45px; + background-size: 400% 400%; + background: transparent; +} + +#workspaces button.urgent { + border-top: 3px solid @red; + color: @bg0; + min-width: 45px; + background-size: 400% 400%; + background: transparent; +} + +#battery, +#pulseaudio, +#backlight, +#network, +#clock, +#custom-notification, +#custom-arch, +#mpris { + padding: 0 15px; +} + +#backlight { + color: @orange; +} + +#mpris { + padding: 0 8px 0 0; + margin: 4px 0px; +} + +#custom-cava { + all: unset; + min-height: 12px; + + margin: 10px 0px; + + padding: 0 8px; + color: @blue; + + font-size: 10px; +} + +#clock { + color: @blue; +} + +#custom-notification { + color: @fg; +} + +#pulseaudio { + color: @yellow; + padding: 8px; +} + +#network { + color: @purple; + padding: 8px; +} + +#battery { + color: @green; + padding: 8px; +} + +#custom-arch { + color: #1793d1; + padding-left: 24px; + font-size: 20px; +} + +#custom-separator { + color: rgba(255, 255, 255, 0.2); + margin: 0; + font-size: 14px; + font-weight: bold; +} + +#custom-tray-icon { + color: #89b4fa; /* Catppuccin Blue */ + padding: 0 8px; +} + +#tray { + padding: 0 0 0 8px; +} diff --git a/config/wlogout/layout b/config/wlogout/layout new file mode 100644 index 0000000..4254ab9 --- /dev/null +++ b/config/wlogout/layout @@ -0,0 +1,24 @@ +{ + "label" : "lock", + "action" : "hyprlock", + "text" : "Lock", + "keybind" : "l" +} +{ + "label" : "logout", + "action" : "hyprctl dispatch exit", + "text" : "Logout", + "keybind" : "e" +} +{ + "label" : "shutdown", + "action" : "systemctl poweroff", + "text" : "Shutdown", + "keybind" : "s" +} +{ + "label" : "reboot", + "action" : "systemctl reboot", + "text" : "Reboot", + "keybind" : "r" +} diff --git a/config/wlogout/style.css b/config/wlogout/style.css new file mode 100644 index 0000000..af245a0 --- /dev/null +++ b/config/wlogout/style.css @@ -0,0 +1,45 @@ +* { + background-image: none; + font-family: "Noto Sans"; + font-size: 16px; +} + +window { + background-color: rgba(30, 30, 46, 0.85); +} + +button { + color: #cdd6f4; + background-color: #313244; + border-radius: 16px; + margin: 10px; + padding: 15px 40px; + border: 2px solid #45475a; + min-width: 120px; + min-height: 0px; + background-repeat: no-repeat; + background-position: center; + background-size: 48px; +} + +button:hover { + background-color: #89b4fa; + color: #1e1e2e; + border-color: #89b4fa; +} + +#lock { + background-image: url("/usr/share/wlogout/icons/lock.png"); +} + +#logout { + background-image: url("/usr/share/wlogout/icons/logout.png"); +} + +#shutdown { + background-image: url("/usr/share/wlogout/icons/shutdown.png"); +} + +#reboot { + background-image: url("/usr/share/wlogout/icons/reboot.png"); +} diff --git a/configuration.nix b/configuration.nix new file mode 100644 index 0000000..5311985 --- /dev/null +++ b/configuration.nix @@ -0,0 +1,65 @@ +{ config, pkgs, ... }: + +{ + # Bootloader + boot.loader.systemd-boot.enable = true; + boot.loader.efi.canTouchEfiVariables = true; + + networking.hostName = "nixos"; + networking.networkmanager.enable = true; + + # Note: The MT7902 WiFi driver is notorious. Your existing fix_my_wifi.sh script + # and blacklisting strategy can still work if you run it manually, but eventually, + # building it as an out-of-tree kernel module in Nix is the "proper" way. + + time.timeZone = "Asia/Amman"; + i18n.defaultLocale = "en_US.UTF-8"; + + # Hardware: Intel Microcode & Nvidia PRIME + hardware.cpu.intel.updateMicrocode = true; + hardware.opengl = { + enable = true; + driSupport = true; + driSupport32Bit = true; + }; + services.xserver.videoDrivers = ["nvidia"]; + hardware.nvidia = { + modesetting.enable = true; + powerManagement.enable = false; + open = true; # You were using nvidia-open-dkms + nvidiaSettings = true; + prime = { + intelBusId = "PCI:0:2:0"; # Verify with `lspci | grep VGA` + nvidiaBusId = "PCI:1:0:0"; # Verify with `lspci | grep VGA` + }; + }; + + # System Services + services.printing.enable = true; # cups + services.blueman.enable = true; + hardware.bluetooth.enable = true; + services.coolercontrol.enable = true; + services.ollama.enable = true; + virtualisation.libvirtd.enable = true; + + # Display Manager & Desktop + services.displayManager.sddm = { + enable = true; + wayland.enable = true; + }; + + # Enable Hyprland at the system level to pull in XDG portals automatically + programs.hyprland.enable = true; + programs.zsh.enable = true; + + # User Account + users.users.nouredeen = { + isNormalUser = true; + description = "Nouredeen"; + extraGroups = [ "networkmanager" "wheel" "libvirtd" "video" "audio" ]; + shell = pkgs.zsh; + }; + + # DO NOT CHANGE + system.stateVersion = "24.05"; +} diff --git a/flake.nix b/flake.nix new file mode 100644 index 0000000..b6987e4 --- /dev/null +++ b/flake.nix @@ -0,0 +1,27 @@ +{ + description = "System Flake"; + + inputs = { + nixpkgs.url = "github:nixos/nixpkgs/nixos-unstable"; + home-manager = { + url = "github:nix-community/home-manager"; + inputs.nixpkgs.follows = "nixpkgs"; + }; + }; + + outputs = { self, nixpkgs, home-manager, ... }: { + nixosConfigurations.nixos = nixpkgs.lib.nixosSystem { + system = "x86_64-linux"; + modules = [ + ./hardware-configuration.nix # Generated during installation + ./configuration.nix + home-manager.nixosModules.home-manager + { + home-manager.useGlobalPkgs = true; + home-manager.useUserPackages = true; + home-manager.users.nouredeen = import ./home.nix; + } + ]; + }; + }; +} diff --git a/home.nix b/home.nix new file mode 100644 index 0000000..70a3350 --- /dev/null +++ b/home.nix @@ -0,0 +1,106 @@ +{ config, pkgs, ... }: + +{ + home.username = "nouredeen"; + home.homeDirectory = "/home/nouredeen"; + + home.packages = with pkgs; [ + # Development + jetbrains.rider + jetbrains.clion + jetbrains.idea-ultimate + dotnet-sdk_8 + vscode + git + + # Utilities + kitty + thunar + fzf + ripgrep + bat + yazi + btop + fastfetch + + # Wayland / Hyprland specific + waybar + rofi-wayland + walker + swaynotificationcenter + hyprpaper + hyprlock + hyprshot + wlogout + wl-clipboard + slurp + grim + + # Apps + firefox + google-chrome + spotify + discord + obsidian + prismlauncher # Better maintained than raw minecraft-launcher in nix + ]; + + # GTK Theming (Catppuccin Mocha) + gtk = { + enable = true; + theme = { + name = "catppuccin-mocha-mauve-standard+default"; + package = pkgs.catppuccin-gtk.override { + accents = [ "mauve" ]; + size = "standard"; + tweaks = [ "normal" ]; + variant = "mocha"; + }; + }; + iconTheme = { + name = "Papirus-Dark"; + package = pkgs.papirus-icon-theme; + }; + cursorTheme = { + name = "Adwaita"; + size = 24; + }; + }; + + # Zsh & Starship Setup + programs.zsh = { + enable = true; + enableCompletion = true; + autosuggestion.enable = true; + syntaxHighlighting.enable = true; + + shellAliases = { + fixwifi = "sudo bash ~/mt7902_temp/fix_my_wifi.sh"; + startm = "wlogout -l ~/.config/wlogout/layout -s ~/.config/wlogout/style.css -b 4 -T 350 -B 350"; + zshconf = "nvim ~/.zshrc"; + barconf = "nvim ~/.config/waybar/config"; + ca = "cd ~/RiderProjects/ArqaamAccounting/ && clear && claude"; + arq = "cd ~/RiderProjects/ArqaamAccounting/"; + reload = "source ~/.zshrc && hyprctl reload && echo 'Reloaded'"; + mountwin = "sudo mount -t ntfs-3g -o ro /dev/nvme0n1p3 /mnt/windows"; + }; + + initExtra = '' + bindkey "^[[1;5C" forward-word + bindkey "^[[1;5D" backward-word + export EDITOR=nvim + ''; + }; + + programs.starship.enable = true; + + # Symlink your existing raw configs! + # Just place your folders in ~/nixos-config/dotfiles/ + home.file = { + ".config/hypr".source = ./dotfiles/hypr; + ".config/waybar".source = ./dotfiles/waybar; + ".config/swaync".source = ./dotfiles/swaync; + }; + + home.stateVersion = "24.05"; +} diff --git a/starship.toml b/starship.toml new file mode 100644 index 0000000..3f77b24 --- /dev/null +++ b/starship.toml @@ -0,0 +1,32 @@ +"$schema" = "https://starship.rs/config-schema.json" +add_newline = true +scan_timeout = 100 + + +[character] +success_symbol = "[❯](bold green)" +error_symbol = "[❯](bold red)" + +[directory] +style = "bold #89B4FA" +truncation_length = 3 +truncate_to_repo = true + +[git_branch] +symbol = " " +style = "bold #F5C2E7" + +[git_status] +style = "bold #F38BA8" + +[cmd_duration] +style = "bold #F9E2AF" +min_time = 2_000 + +[username] +style_user = "bold #A6E3A1" +show_always = false + +[hostname] +style = "bold #94E2D5" +ssh_only = true diff --git a/wallpapers/abstract-swirls.jpg b/wallpapers/abstract-swirls.jpg new file mode 100644 index 0000000..0948796 Binary files /dev/null and b/wallpapers/abstract-swirls.jpg differ diff --git a/wallpapers/clearing.png b/wallpapers/clearing.png new file mode 100644 index 0000000..fdbaebe Binary files /dev/null and b/wallpapers/clearing.png differ diff --git a/wallpapers/cool.jpg b/wallpapers/cool.jpg new file mode 100644 index 0000000..a422590 Binary files /dev/null and b/wallpapers/cool.jpg differ diff --git a/wallpapers/disco.png b/wallpapers/disco.png new file mode 100644 index 0000000..9090c1f Binary files /dev/null and b/wallpapers/disco.png differ diff --git a/wallpapers/idk-tbh.png b/wallpapers/idk-tbh.png new file mode 100644 index 0000000..870dd83 Binary files /dev/null and b/wallpapers/idk-tbh.png differ diff --git a/zshrc b/zshrc new file mode 100644 index 0000000..03574bf --- /dev/null +++ b/zshrc @@ -0,0 +1,57 @@ +# Plugins +source /usr/share/zsh/plugins/zsh-autosuggestions/zsh-autosuggestions.zsh +source /usr/share/zsh/plugins/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh + +# Autocomplete (if installed via yay) +source /usr/share/zsh/plugins/zsh-autocomplete/zsh-autocomplete.plugin.zsh + +# History +HISTSIZE=10000 +SAVEHIST=10000 +HISTFILE=~/.zsh_history +setopt HIST_IGNORE_DUPS +setopt SHARE_HISTORY +# Useful options +setopt AUTO_CD +setopt CORRECT + +export EDITOR=nvim + +# Prompt — handled by Starship +eval "$(starship init zsh)" + + +function hyprconf() { + local -A files=( + main ~/.config/hypr/hyprland.conf + binds ~/.config/hypr/binds.conf + env ~/.config/hypr/env.conf + settings ~/.config/hypr/settings.conf + rules ~/.config/hypr/windowrules.conf + autostart ~/.config/hypr/autostart.conf + monitors ~/.config/hypr/monitors.conf + workspaces ~/.config/hypr/workspaces.conf + hyprlock ~/.config/hypr/hyprlock.conf + hyprpaper ~/.config/hypr/hyprpaper.conf + ) + local choice=$(printf '%s\n' ${(k)files} | sort | fzf --prompt='hypr config> ') + [ -n "$choice" ] && nvim "${files[$choice]}" +} +alias fixwifi="sudo bash ~/mt7902_temp/fix_my_wifi.sh" +alias startm="wlogout -l ~/.config/wlogout/layout -s ~/.config/wlogout/style.css -b 4 -T 350 -B 350" +alias zshconf="nvim ~/.zshrc" # renamed from bashconf +alias barconf="nvim ~/.config/waybar/config.jsonc" +alias ca="cd ~/RiderProjects/ArqaamAccounting/ && clear && claude" +bindkey "^[[1;5C" forward-word # Ctrl+Right +bindkey "^[[1;5D" backward-word # Ctrl+Left +alias reload="source ~/.zshrc && hyprctl reload && echo 'Reloaded' " +alias arq="cd ~/RiderProjects/ArqaamAccounting/" +alias ssh="TERM=xterm-256color ssh" +alias mountwin="sudo mount -t ntfs-3g -o ro /dev/nvme0n1p3 /mnt/windows" +# Created by `pipx` on 2026-06-04 11:25:25 +export PATH="$PATH:/home/nouredeen/.local/bin" + +. "$HOME/.local/share/../bin/env" + +# opencode +export PATH=/home/nouredeen/.opencode/bin:$PATH