diff options
Diffstat (limited to 'dotfiles/hyprland')
28 files changed, 1778 insertions, 155 deletions
diff --git a/dotfiles/hyprland/.config/foot/foot.ini b/dotfiles/hyprland/.config/foot/foot.ini new file mode 100644 index 0000000..a96778c --- /dev/null +++ b/dotfiles/hyprland/.config/foot/foot.ini @@ -0,0 +1,38 @@ +# foot terminal configuration +# Minimal config matching DWM color scheme + +[main] +term=xterm-256color +font=Berkeley Mono:size=14 +pad=8x8 + +[scrollback] +lines=10000 + +[colors] +# DWM-inspired colors: gray1=#222222, gray2=#444444, gray3=#bbbbbb, gray4=#eeeeee, cyan=#daa520 +background=222222 +foreground=eeeeee + +# Regular colors (0-7) +regular0=222222 # black +regular1=cc6666 # red +regular2=b5bd68 # green +regular3=f0c674 # yellow +regular4=81a2be # blue +regular5=b294bb # magenta +regular6=8abeb7 # cyan +regular7=c5c8c6 # white + +# Bright colors (8-15) +bright0=444444 # bright black +bright1=d54e53 # bright red +bright2=b9ca4a # bright green +bright3=e7c547 # bright yellow +bright4=7aa6da # bright blue +bright5=c397d8 # bright magenta +bright6=70c0b1 # bright cyan +bright7=eeeeee # bright white + +# Cursor: background foreground (golden on dark) +cursor=222222 daa520 diff --git a/dotfiles/hyprland/.config/fuzzel/fuzzel.ini b/dotfiles/hyprland/.config/fuzzel/fuzzel.ini new file mode 100644 index 0000000..ce46448 --- /dev/null +++ b/dotfiles/hyprland/.config/fuzzel/fuzzel.ini @@ -0,0 +1,31 @@ +# Fuzzel config - matching waybar DWM-inspired theme +# Colors from waybar: bg=#222222, cpu=#bbbbbb, clock=#eeeeee, accent=#daa520 + +[main] +font=BerkeleyMono Nerd Font:size=14 +prompt=Search: +icon-theme=hicolor +icons-enabled=yes +width=30 +lines=12 +horizontal-pad=20 +vertical-pad=12 +inner-pad=8 +layer=overlay +exit-on-keyboard-focus-loss=yes + +[colors] +# Format: RRGGBBAA +background=222222f0 +text=eeeeeeff +selection=daa520ff +selection-text=222222ff +border=daa520ff +match=daa520ff +prompt=bbbbbbff +placeholder=888888ff +input=eeeeeeff + +[border] +width=2 +radius=16 diff --git a/dotfiles/hyprland/.config/hypr/hyprland.conf b/dotfiles/hyprland/.config/hypr/hyprland.conf index ce45088..a63a535 100644 --- a/dotfiles/hyprland/.config/hypr/hyprland.conf +++ b/dotfiles/hyprland/.config/hypr/hyprland.conf @@ -10,12 +10,12 @@ monitor=,preferred,auto,auto # ============================================================================ # Startup Applications # ============================================================================ +exec-once = hyprpm reload exec-once = waybar exec-once = swww-daemon && sleep 1 && swww img ~/pictures/wallpaper/dark-lion.jpg exec-once = dunst exec-once = hypridle exec-once = gammastep -exec-once = nm-applet exec-once = blueman-applet exec-once = /usr/bin/gnome-keyring-daemon --start --components=pkcs11,secrets,ssh exec-once = dbus-update-activation-environment --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP @@ -39,8 +39,8 @@ env = _JAVA_AWT_WM_NONREPARENTING,1 # DWM colors: gray1=#222222, gray2=#444444, gray3=#bbbbbb, gray4=#eeeeee, cyan=#daa520 general { - gaps_in = 5 - gaps_out = 10 + gaps_in = 25 + gaps_out = 30 border_size = 3 col.active_border = rgba(daa520ff) col.inactive_border = rgba(444444ff) @@ -49,7 +49,7 @@ general { } decoration { - rounding = 0 + rounding = 10 blur { enabled = false } @@ -65,6 +65,7 @@ animations { animation = windowsOut, 1, 3, default, popin 80% animation = fade, 1, 3, default animation = workspaces, 1, 3, default + animation = specialWorkspace, 1, 3, default, slidevert } # ============================================================================ @@ -86,7 +87,7 @@ dwindle { input { kb_layout = us kb_options = ctrl:nocaps - follow_mouse = 1 + follow_mouse = 0 touchpad { natural_scroll = true } @@ -108,15 +109,15 @@ xwayland { } # ============================================================================ -# Window Rules +# Window Rules (Hyprland 0.53+ syntax: match:CONDITION, RULE) # ============================================================================ # Floating windows (from DWM rules) -windowrulev2 = float, class:^(Gimp)$ -windowrulev2 = float, class:^(caffeine)$ -windowrulev2 = float, class:^(blueman-services)$ -windowrulev2 = float, class:^(Blueman-manager)$ -windowrulev2 = float, class:^(qalculate-gtk)$ -windowrulev2 = float, title:^(Event Tester)$ +windowrule = match:class ^(Gimp)$, float on +windowrule = match:class ^(caffeine)$, float on +windowrule = match:class ^(blueman-services)$, float on +windowrule = match:class ^(Blueman-manager)$, float on +windowrule = match:class ^(qalculate-gtk)$, float on +windowrule = match:title ^(Event Tester)$, float on # ============================================================================ # Key Bindings @@ -124,36 +125,43 @@ windowrulev2 = float, title:^(Event Tester)$ $mod = SUPER # Terminal and core apps (from DWM) -bind = $mod, T, exec, st +bind = $mod, T, exec, foot bind = $mod, E, exec, emacsclient -c -a "" || emacs bind = $mod, W, exec, $BROWSER -bind = $mod, P, exec, wofi --show drun +bind = $mod, P, exec, fuzzel # From sxhkdrc -bind = $mod, SPACE, exec, wofi --show drun -bind = $mod SHIFT, S, exec, wofi --show ssh +bind = $mod, SPACE, exec, fuzzel bind = $mod SHIFT, W, exec, $ALTBROWSER bind = CTRL ALT, W, exec, tor-browser bind = CTRL ALT, F, exec, thunar bind = $mod, V, exec, virtualbox bind = $mod SHIFT, L, exec, calibre bind = $mod SHIFT, R, exec, shortwave +bind = $mod SHIFT, P, exec, waypaper + +# Theme switching +bind = $mod, Y, exec, set-theme --toggle +bind = $mod SHIFT, Y, exec, set-theme --pick # Window management (from DWM) -bind = $mod, J, layoutmsg, cyclenext -bind = $mod, K, layoutmsg, cycleprev -bind = $mod SHIFT, J, layoutmsg, swapnext -bind = $mod SHIFT, K, layoutmsg, swapprev -bind = $mod, H, resizeactive, -50 0 -bind = $mod, L, resizeactive, 50 0 -bind = $mod, RETURN, layoutmsg, swapwithmaster +# Layout-aware navigation (works across master, scrolling, hy3) +bind = $mod, J, exec, layout-navigate next +bind = $mod, K, exec, layout-navigate prev +bind = $mod SHIFT, J, exec, layout-navigate next move +bind = $mod SHIFT, K, exec, layout-navigate prev move +bind = $mod, H, splitratio, -0.05 +bind = $mod, L, splitratio, +0.05 +bind = $mod, RETURN, layoutmsg, swapwithmaster master bind = $mod, G, centerwindow bind = $mod, TAB, workspace, previous bind = $mod SHIFT, C, killactive -# Layouts (from DWM) -bind = $mod SHIFT, M, exec, hyprctl keyword general:layout master -bind = $mod SHIFT, T, exec, hyprctl keyword general:layout master +# Layouts: master -> tab group (monocle) -> scrolling -> floating +# Click waybar layout icon to cycle, or use direct keybindings: +bind = $mod SHIFT, T, exec, hyprctl keyword general:layout master && hyprctl keyword master:orientation left +bind = $mod SHIFT, M, exec, hyprctl keyword general:layout hy3 && hyprctl dispatch hy3:changegroup tab +bind = $mod SHIFT, S, exec, hyprctl keyword general:layout scrolling bind = $mod SHIFT, F, togglefloating bind = $mod SHIFT, SPACE, togglefloating @@ -161,10 +169,17 @@ bind = $mod SHIFT, SPACE, togglefloating bind = $mod, I, layoutmsg, addmaster bind = $mod, D, layoutmsg, removemaster +# Focus mode (xtra-dispatchers plugin) +# O = "Only this window" / "bring back Others" / "close Others" +bind = $mod, O, exec, hyprctl dispatch plugin:xtd:throwunfocused 10 +bind = $mod SHIFT, O, exec, hyprctl dispatch plugin:xtd:bringallfrom 10 +bind = $mod CTRL, O, exec, hyprctl dispatch plugin:xtd:closeunfocused + # Gaps (from DWM) -bind = $mod, MINUS, exec, hyprctl keyword general:gaps_out $(( $(hyprctl getoption general:gaps_out -j | jq '.int') - 5 )) -bind = $mod, EQUAL, exec, hyprctl keyword general:gaps_out $(( $(hyprctl getoption general:gaps_out -j | jq '.int') + 5 )) -bind = $mod SHIFT, EQUAL, exec, hyprctl keyword general:gaps_out 10 +bind = $mod, MINUS, exec, hyprctl keyword general:gaps_out $(( $(hyprctl getoption general:gaps_out -j | jq -r '.custom' | cut -d' ' -f1) - 5 )) && hyprctl keyword general:gaps_in $(( $(hyprctl getoption general:gaps_in -j | jq -r '.custom' | cut -d' ' -f1) - 5 )) +bind = $mod, EQUAL, exec, hyprctl keyword general:gaps_out $(( $(hyprctl getoption general:gaps_out -j | jq -r '.custom' | cut -d' ' -f1) + 5 )) && hyprctl keyword general:gaps_in $(( $(hyprctl getoption general:gaps_in -j | jq -r '.custom' | cut -d' ' -f1) + 5 )) +bind = $mod SHIFT, EQUAL, exec, hyprctl keyword general:gaps_out 30 && hyprctl keyword general:gaps_in 25 +bind = $mod SHIFT, MINUS, exec, hyprctl keyword general:gaps_out 0 && hyprctl keyword general:gaps_in 0 # Toggle bar bind = $mod, B, exec, killall -SIGUSR1 waybar @@ -185,16 +200,16 @@ bind = $mod, 9, workspace, 9 bind = $mod, 0, workspace, 10 # Move window to workspace (from DWM tag) -bind = $mod SHIFT, 1, movetoworkspace, 1 -bind = $mod SHIFT, 2, movetoworkspace, 2 -bind = $mod SHIFT, 3, movetoworkspace, 3 -bind = $mod SHIFT, 4, movetoworkspace, 4 -bind = $mod SHIFT, 5, movetoworkspace, 5 -bind = $mod SHIFT, 6, movetoworkspace, 6 -bind = $mod SHIFT, 7, movetoworkspace, 7 -bind = $mod SHIFT, 8, movetoworkspace, 8 -bind = $mod SHIFT, 9, movetoworkspace, 9 -bind = $mod SHIFT, 0, movetoworkspace, 10 +bind = $mod SHIFT, 1, movetoworkspacesilent, 1 +bind = $mod SHIFT, 2, movetoworkspacesilent, 2 +bind = $mod SHIFT, 3, movetoworkspacesilent, 3 +bind = $mod SHIFT, 4, movetoworkspacesilent, 4 +bind = $mod SHIFT, 5, movetoworkspacesilent, 5 +bind = $mod SHIFT, 6, movetoworkspacesilent, 6 +bind = $mod SHIFT, 7, movetoworkspacesilent, 7 +bind = $mod SHIFT, 8, movetoworkspacesilent, 8 +bind = $mod SHIFT, 9, movetoworkspacesilent, 9 +bind = $mod SHIFT, 0, movetoworkspacesilent, 10 # Monitor focus (from DWM focusmon) bind = $mod, COMMA, focusmonitor, -1 @@ -202,54 +217,69 @@ bind = $mod, PERIOD, focusmonitor, +1 bind = $mod SHIFT, COMMA, movewindow, mon:-1 bind = $mod SHIFT, PERIOD, movewindow, mon:+1 +# ============================================================================ # Scratchpads (from DWM togglescratch) -# Audio mixer (was MODKEY+a -> spaudio/pulsemixer) +# ============================================================================ +# Using on-created-empty workspace rules - app launches on first toggle, +# subsequent toggles just show/hide the workspace + +# Workspace rules (auto-launch apps when workspace first accessed) +workspace = special:term, on-created-empty:foot --app-id foot-term tmux +workspace = special:audio, on-created-empty:foot --app-id foot-audio pulsemixer +workspace = special:monitor, on-created-empty:foot --app-id foot-monitor gotop +workspace = special:music, on-created-empty:foot --app-id foot-music ncmpcpp +workspace = special:files, on-created-empty:foot --app-id foot-files ranger +workspace = special:htop, on-created-empty:foot --app-id foot-htop htop +workspace = special:network, on-created-empty:foot --app-id foot-network nmtui + +# Keybindings (single bind per scratchpad - just toggle visibility) +bind = $mod SHIFT, RETURN, togglespecialworkspace, term bind = $mod, A, togglespecialworkspace, audio -bind = $mod, A, exec, [workspace special:audio] pgrep -x pulsemixer || st -n spaudio -e pulsemixer -windowrulev2 = float, class:^(st)$, title:^(spaudio)$ -windowrulev2 = size 60% 60%, class:^(st)$, title:^(spaudio)$ -windowrulev2 = center, class:^(st)$, title:^(spaudio)$ -windowrulev2 = workspace special:audio, class:^(st)$, title:^(spaudio)$ - -# System monitor (was MODKEY+m -> spmon/gotop) bind = $mod, M, togglespecialworkspace, monitor -bind = $mod, M, exec, [workspace special:monitor] pgrep -x gotop || st -n spmon -e gotop -windowrulev2 = float, class:^(st)$, title:^(spmon)$ -windowrulev2 = size 60% 60%, class:^(st)$, title:^(spmon)$ -windowrulev2 = workspace special:monitor, class:^(st)$, title:^(spmon)$ - -# Music player (was MODKEY+slash -> spmp/ncmpcpp) bind = $mod, SLASH, togglespecialworkspace, music -bind = $mod, SLASH, exec, [workspace special:music] pgrep -x ncmpcpp || st -n spmp -e ncmpcpp -windowrulev2 = float, class:^(st)$, title:^(spmp)$ -windowrulev2 = size 60% 60%, class:^(st)$, title:^(spmp)$ -windowrulev2 = workspace special:music, class:^(st)$, title:^(spmp)$ - -# Terminal scratchpad (was MODKEY+Shift+Return -> spterm/tmux) -bind = $mod SHIFT, RETURN, togglespecialworkspace, term -bind = $mod SHIFT, RETURN, exec, [workspace special:term] pgrep -f "st.*spterm" || st -n spterm -e tmux -windowrulev2 = float, class:^(st)$, title:^(spterm)$ -windowrulev2 = size 60% 60%, class:^(st)$, title:^(spterm)$ -windowrulev2 = workspace special:term, class:^(st)$, title:^(spterm)$ - -# File manager (was MODKEY+f -> spfm/ranger) bind = $mod, F, togglespecialworkspace, files -bind = $mod, F, exec, [workspace special:files] pgrep -x ranger || st -n spfm -e ranger -windowrulev2 = float, class:^(st)$, title:^(spfm)$ -windowrulev2 = size 60% 60%, class:^(st)$, title:^(spfm)$ -windowrulev2 = workspace special:files, class:^(st)$, title:^(spfm)$ +bind = $mod SHIFT, H, togglespecialworkspace, htop -# Calculator (was MODKEY+x or MODKEY+c -> qalculate) +# Window rules (using app-id/class matching, Hyprland 0.53+ syntax) +# Terminal scratchpad +windowrule = match:class ^(foot-term)$, float on +windowrule = match:class ^(foot-term)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-term)$, center on + +# Audio mixer +windowrule = match:class ^(foot-audio)$, float on +windowrule = match:class ^(foot-audio)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-audio)$, center on + +# System monitor +windowrule = match:class ^(foot-monitor)$, float on +windowrule = match:class ^(foot-monitor)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-monitor)$, center on + +# Music player +windowrule = match:class ^(foot-music)$, float on +windowrule = match:class ^(foot-music)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-music)$, center on + +# File manager +windowrule = match:class ^(foot-files)$, float on +windowrule = match:class ^(foot-files)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-files)$, center on + +# Htop +windowrule = match:class ^(foot-htop)$, float on +windowrule = match:class ^(foot-htop)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-htop)$, center on + +# Network manager +windowrule = match:class ^(foot-network)$, float on +windowrule = match:class ^(foot-network)$, size (monitor_w*0.6) (monitor_h*0.6) +windowrule = match:class ^(foot-network)$, center on + +# Calculator (not a scratchpad, just launches app) bind = $mod, X, exec, qalculate-gtk bind = $mod, C, exec, qalculate-gtk -# Htop (was MODKEY+Shift+h -> sptop/htop) -bind = $mod SHIFT, H, togglespecialworkspace, htop -bind = $mod SHIFT, H, exec, [workspace special:htop] pgrep -x htop || st -n sptop -e htop -windowrulev2 = float, class:^(st)$, title:^(sptop)$ -windowrulev2 = size 60% 60%, class:^(st)$, title:^(sptop)$ -windowrulev2 = workspace special:htop, class:^(st)$, title:^(sptop)$ - # Media/hardware keys bindel = , XF86AudioRaiseVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ +5% bindel = , XF86AudioLowerVolume, exec, pactl set-sink-volume @DEFAULT_SINK@ -5% @@ -277,7 +307,7 @@ bind = $mod, ESCAPE, exec, hyprlock bind = $mod, F9, exec, toggle-touchpad # Exit/session (from DWM) -bind = $mod SHIFT, Q, exec, wofi --show dmenu --prompt "Exit?" -D dmenu/exit="0" < /dev/null && hyprctl dispatch exit +bind = $mod SHIFT, Q, exec, printf "Exit\nCancel" | fuzzel --dmenu --prompt "Exit Hyprland? " | grep -q "Exit" && hyprctl dispatch exit bind = $mod SHIFT, BACKSPACE, exit bind = $mod SHIFT, ESCAPE, exec, hyprctl reload diff --git a/dotfiles/hyprland/.config/hypr/hyprlock.conf b/dotfiles/hyprland/.config/hypr/hyprlock.conf index b4dcfb8..4f1c5df 100644 --- a/dotfiles/hyprland/.config/hypr/hyprlock.conf +++ b/dotfiles/hyprland/.config/hypr/hyprlock.conf @@ -1,5 +1,6 @@ # Hyprlock configuration # Matching DWM colors: gray1=#222222, accent=#daa520 +# Using percentages for proportional sizing across monitors general { disable_loading_bar = false @@ -20,22 +21,65 @@ background { vibrancy_darkness = 0.0 } +# Clock (top) +label { + monitor = + text = $TIME12 + text_align = center + color = rgb(bbbbbb) + font_size = 64 + font_family = BerkeleyMono Nerd Font + position = 0, 15% + halign = center + valign = center +} + +# Profile image +image { + monitor = + path = ~/pictures/devilman.jpg + size = 120 + rounding = -1 + border_size = 3 + border_color = rgb(daa520) + position = 0, 0% + halign = center + valign = center + shadow_passes = 2 + shadow_size = 3 + shadow_color = rgba(0, 0, 0, 0.5) +} + +# Username +label { + monitor = + text = $USER + text_align = center + color = rgb(daa520) + font_size = 36 + font_family = BerkeleyMono Nerd Font + position = 0, -7% + halign = center + valign = center +} + +# Password input (no outline) input-field { monitor = - size = 300, 50 - outline_thickness = 3 + size = 20%, 4% + outline_thickness = 0 dots_size = 0.33 dots_spacing = 0.15 dots_center = true dots_rounding = -1 - outer_color = rgb(444444) + outer_color = rgb(222222) inner_color = rgb(222222) font_color = rgb(bbbbbb) fade_on_empty = true fade_timeout = 1000 placeholder_text = <i>Password...</i> hide_input = false - rounding = 0 + rounding = 8 check_color = rgb(daa520) fail_color = rgb(d9534f) fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> @@ -45,31 +89,7 @@ input-field { bothlock_color = -1 invert_numlock = false swap_font_color = false - position = 0, -20 - halign = center - valign = center -} - -label { - monitor = - text = $TIME - text_align = center - color = rgb(bbbbbb) - font_size = 64 - font_family = FiraCode Nerd Font Mono - position = 0, 80 - halign = center - valign = center -} - -label { - monitor = - text = $USER - text_align = center - color = rgb(daa520) - font_size = 20 - font_family = FiraCode Nerd Font Mono - position = 0, -80 + position = 0, -12% halign = center valign = center } diff --git a/dotfiles/hyprland/.config/themes/dupre/Xresources b/dotfiles/hyprland/.config/themes/dupre/Xresources new file mode 100644 index 0000000..d149a72 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/Xresources @@ -0,0 +1,105 @@ +!! X Resources - Dupre theme +!! Warm, earthy colors from dupre-theme.el +!! For X11 applications (st, xterm, etc.) and Emacs + +!! X Font Settings +Xft.dpi: 109 +Xcursor.size: 32 +Xcursor.theme: Vimix-white-cursors +Xft.autohint: 0 +Xft.lcdfilter: lcddefault +Xft.hintstyle: hintfull +Xft.hinting: 1 +Xft.antialias: 1 +Xft.rgba: rgb + +!! Emacs +Emacs*toolBar: 0 + +!! ============================================================================ +!! Dupre Theme Colors +!! ============================================================================ + +#define dupre_fg #f0fef0 +#define dupre_bg #151311 +#define dupre_black #252321 +#define dupre_red #d47c59 +#define dupre_green #a4ac64 +#define dupre_yellow #d7af5f +#define dupre_blue #67809c +#define dupre_magenta #b294bb +#define dupre_cyan #8a9496 +#define dupre_white #d0cbc0 +#define dupre_br_black #474544 +#define dupre_br_red #edb08f +#define dupre_br_green #ccc768 +#define dupre_br_yellow #ffd75f +#define dupre_br_blue #b2c3cc +#define dupre_br_magenta #c397d8 +#define dupre_br_cyan #acb0b3 +#define dupre_br_white #f0fef0 + +!! Active theme aliases +#define theme_fg dupre_fg +#define theme_bg dupre_bg +#define theme_black dupre_black +#define theme_red dupre_red +#define theme_green dupre_green +#define theme_yellow dupre_yellow +#define theme_blue dupre_blue +#define theme_magenta dupre_magenta +#define theme_cyan dupre_cyan +#define theme_white dupre_white +#define theme_br_black dupre_br_black +#define theme_br_red dupre_br_red +#define theme_br_green dupre_br_green +#define theme_br_yellow dupre_br_yellow +#define theme_br_blue dupre_br_blue +#define theme_br_magenta dupre_br_magenta +#define theme_br_cyan dupre_br_cyan +#define theme_br_white dupre_br_white + +!! ============================================================================ + +!! ST (suckless terminal) settings +st.font: BerkeleyMono Nerd Font:size=12 +st.background: theme_bg +st.foreground: theme_fg +st.color0: theme_black +st.color1: theme_red +st.color2: theme_green +st.color3: theme_yellow +st.color4: theme_blue +st.color5: theme_magenta +st.color6: theme_cyan +st.color7: theme_white +st.color8: theme_br_black +st.color9: theme_br_red +st.color10: theme_br_green +st.color11: theme_br_yellow +st.color12: theme_br_blue +st.color13: theme_br_magenta +st.color14: theme_br_cyan +st.color15: theme_br_white + +!! XTerm settings +XTerm*faceName: BerkeleyMono Nerd Font:size=12 +XTerm*selectToClipboard: true +XTerm*background: theme_bg +XTerm*foreground: theme_fg +XTerm*color0: theme_black +XTerm*color1: theme_red +XTerm*color2: theme_green +XTerm*color3: theme_yellow +XTerm*color4: theme_blue +XTerm*color5: theme_magenta +XTerm*color6: theme_cyan +XTerm*color7: theme_white +XTerm*color8: theme_br_black +XTerm*color9: theme_br_red +XTerm*color10: theme_br_green +XTerm*color11: theme_br_yellow +XTerm*color12: theme_br_blue +XTerm*color13: theme_br_magenta +XTerm*color14: theme_br_cyan +XTerm*color15: theme_br_white diff --git a/dotfiles/hyprland/.config/themes/dupre/dunstrc b/dotfiles/hyprland/.config/themes/dupre/dunstrc new file mode 100644 index 0000000..104df28 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/dunstrc @@ -0,0 +1,72 @@ +# Dunst config - Dupre theme +# Warm, earthy colors from dupre-theme.el + +[global] +# Display +follow = mouse +width = 350 +height = (0, 300) +origin = top-right +offset = (35, 35) +indicate_hidden = yes +notification_limit = 5 +gap_size = 12 +padding = 12 +horizontal_padding = 20 +frame_width = 2 +sort = no +corner_radius = 10 + +# Progress bar +progress_bar_frame_width = 0 +progress_bar_corner_radius = 3 + +# Colors - Dupre theme +foreground = "#f0fef0" +frame_color = "#d7af5f" +highlight = "#d7af5f, #ccc768" + +# Text +font = BerkeleyMono Nerd Font 11 +markup = full +format = "<small>%a</small>\n<b>%s</b>\n%b" +alignment = left +vertical_alignment = center +show_age_threshold = -1 +hide_duplicate_count = false + +# Icon +icon_position = left +min_icon_size = 54 +max_icon_size = 80 +icon_corner_radius = 4 + +# Misc/Advanced +dmenu = fuzzel --dmenu --prompt 'Open with' + +# Mouse +mouse_left_click = close_current +mouse_middle_click = do_action, close_current +mouse_right_click = close_all + +[urgency_low] +background = "#151311f0" +timeout = 3 + +[urgency_normal] +background = "#151311f0" +timeout = 8 + +[urgency_critical] +background = "#7c2a09f0" +frame_color = "#d47c59" +highlight = "#ff2a00" +foreground = "#f0fef0" +timeout = 0 + +[fullscreen_delay_everything] +fullscreen = delay + +[fullscreen_show_critical] +msg_urgency = critical +fullscreen = show diff --git a/dotfiles/hyprland/.config/themes/dupre/foot.ini b/dotfiles/hyprland/.config/themes/dupre/foot.ini new file mode 100644 index 0000000..8837f92 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/foot.ini @@ -0,0 +1,38 @@ +# foot terminal configuration - Dupre theme +# Warm, earthy colors from dupre-theme.el + +[main] +term=xterm-256color +font=Berkeley Mono:size=14 +pad=8x8 + +[scrollback] +lines=10000 + +[colors] +# Dupre theme colors (from Emacs dupre-theme.el) +background=151311 +foreground=f0fef0 + +# Regular colors (0-7) - dupre palette +regular0=252321 # black (dupre-bg+1) +regular1=d47c59 # red (dupre-red) +regular2=a4ac64 # green (dupre-green) +regular3=d7af5f # yellow (dupre-yellow) +regular4=67809c # blue (dupre-blue) +regular5=b294bb # magenta +regular6=8a9496 # cyan (dupre-steel) +regular7=d0cbc0 # white (dupre-gray+2) + +# Bright colors (8-15) +bright0=474544 # bright black (dupre-bg+2) +bright1=edb08f # bright red (dupre-red+1) +bright2=ccc768 # bright green (dupre-green+1) +bright3=ffd75f # bright yellow (dupre-yellow+1) +bright4=b2c3cc # bright blue (dupre-blue+1) +bright5=c397d8 # bright magenta +bright6=acb0b3 # bright cyan (dupre-steel+1) +bright7=f0fef0 # bright white (dupre-fg) + +# Cursor: muted gold on dark +cursor=151311 d7af5f diff --git a/dotfiles/hyprland/.config/themes/dupre/fuzzel.ini b/dotfiles/hyprland/.config/themes/dupre/fuzzel.ini new file mode 100644 index 0000000..64711b8 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/fuzzel.ini @@ -0,0 +1,31 @@ +# Fuzzel config - Dupre theme +# Warm, earthy colors from dupre-theme.el + +[main] +font=BerkeleyMono Nerd Font:size=14 +prompt=Search: +icon-theme=hicolor +icons-enabled=yes +width=30 +lines=12 +horizontal-pad=20 +vertical-pad=12 +inner-pad=8 +layer=overlay +exit-on-keyboard-focus-loss=yes + +[colors] +# Format: RRGGBBAA +background=151311f0 +text=f0fef0ff +selection=d7af5fff +selection-text=151311ff +border=d7af5fff +match=d7af5fff +prompt=969385ff +placeholder=6c6a60ff +input=f0fef0ff + +[border] +width=2 +radius=16 diff --git a/dotfiles/hyprland/.config/themes/dupre/hyprland.conf b/dotfiles/hyprland/.config/themes/dupre/hyprland.conf new file mode 100644 index 0000000..b9313ff --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/hyprland.conf @@ -0,0 +1,7 @@ +# Hyprland colors - Dupre theme +# Warm, earthy colors from dupre-theme.el + +general { + col.active_border = rgba(d7af5fff) + col.inactive_border = rgba(474544ff) +} diff --git a/dotfiles/hyprland/.config/themes/dupre/hyprlock.conf b/dotfiles/hyprland/.config/themes/dupre/hyprlock.conf new file mode 100644 index 0000000..fd85651 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/hyprlock.conf @@ -0,0 +1,94 @@ +# Hyprlock configuration - Dupre theme +# Warm, earthy colors from dupre-theme.el + +general { + disable_loading_bar = false + hide_cursor = true + grace = 0 + no_fade_in = false +} + +background { + monitor = + path = screenshot + blur_passes = 3 + blur_size = 8 + noise = 0.0117 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + +# Clock (top) +label { + monitor = + text = $TIME12 + text_align = center + color = rgb(969385) + font_size = 64 + font_family = BerkeleyMono Nerd Font + position = 0, 15% + halign = center + valign = center +} + +# Profile image +image { + monitor = + path = ~/pictures/devilman.jpg + size = 120 + rounding = -1 + border_size = 3 + border_color = rgb(d7af5f) + position = 0, 0% + halign = center + valign = center + shadow_passes = 2 + shadow_size = 3 + shadow_color = rgba(0, 0, 0, 0.5) +} + +# Username +label { + monitor = + text = $USER + text_align = center + color = rgb(d7af5f) + font_size = 36 + font_family = BerkeleyMono Nerd Font + position = 0, -7% + halign = center + valign = center +} + +# Password input +input-field { + monitor = + size = 20%, 4% + outline_thickness = 0 + dots_size = 0.33 + dots_spacing = 0.15 + dots_center = true + dots_rounding = -1 + outer_color = rgb(151311) + inner_color = rgb(151311) + font_color = rgb(969385) + fade_on_empty = true + fade_timeout = 1000 + placeholder_text = <i>Password...</i> + hide_input = false + rounding = 8 + check_color = rgb(d7af5f) + fail_color = rgb(d47c59) + fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> + fail_transition = 300 + capslock_color = rgb(ccc768) + numlock_color = -1 + bothlock_color = -1 + invert_numlock = false + swap_font_color = false + position = 0, -12% + halign = center + valign = center +} diff --git a/dotfiles/hyprland/.config/themes/dupre/waybar.css b/dotfiles/hyprland/.config/themes/dupre/waybar.css new file mode 100644 index 0000000..4bd0052 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/dupre/waybar.css @@ -0,0 +1,111 @@ +/* Waybar style - Dupre theme */ +/* Warm, earthy colors from dupre-theme.el */ + +* { + border: none; + border-radius: 0; + font-size: 14px; + min-height: 0; + font-family: "BerkeleyMono Nerd Font", "Berkeley Mono", monospace; +} + +window#waybar { + background: transparent; +} + +#workspaces { + padding: 0.2rem; +} + +#workspaces button { + padding: 0.5rem; + margin: 0.2rem; + background-color: transparent; + color: #969385; + border-radius: 1rem; + transition: all 0.3s ease; +} + +#workspaces button.active { + background: #d7af5f; + color: #151311; + border-radius: 1rem; +} + +#workspaces button.urgent { + background-color: rgba(212, 124, 89, 0.4); +} + +.modules-right, .modules-left { + background-color: #151311; + border-radius: 1rem; + padding: 0.2rem 0.6rem; + margin: 0.3rem; + border: 0.095rem solid #d7af5f; + box-shadow: 0rem 0.2rem 0.4rem rgba(0,0,0,0.5); +} + +#cpu, +#temperature, +#memory, +#disk, +#custom-netspeed, +#battery, +#wireplumber, +#tray, +#clock, +#custom-layout, +#window { + padding: 0.4rem; + margin: 0.3rem; + color: #969385; + background-color: transparent; + border-radius: 1rem; +} + +#sysmonitor { + margin: 0.3rem; + background-color: transparent; + border-radius: 1rem; +} + +#cpu:hover, +#temperature:hover, +#memory:hover, +#disk:hover, +#custom-netspeed:hover, +#wireplumber:hover, +#sysmonitor:hover, +#custom-layout:hover { + background-color: #474544; + border-radius: 1rem; +} + +#clock { + color: #f0fef0; +} + +#wireplumber { + color: #969385; +} + +#wireplumber.muted { + color: #58574e; +} + +#battery.warning { + color: #d7af5f; +} + +#battery.critical { + color: #d47c59; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #d7af5f; +} diff --git a/dotfiles/hyprland/.config/themes/hudson/Xresources b/dotfiles/hyprland/.config/themes/hudson/Xresources new file mode 100644 index 0000000..00be166 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/Xresources @@ -0,0 +1,105 @@ +!! X Resources - Hudson theme +!! Tomorrow Night + Goldenrod accent +!! For X11 applications (st, xterm, etc.) and Emacs + +!! X Font Settings +Xft.dpi: 109 +Xft.autohint: 0 +Xft.lcdfilter: lcddefault +Xft.hintstyle: hintfull +Xft.hinting: 1 +Xft.antialias: 1 +Xft.rgba: rgb +Xcursor.size: 32 +Xcursor.theme: Vimix-white-cursors + +!! Emacs +Emacs*toolBar: 0 + +!! ============================================================================ +!! Hudson Theme Colors (Tomorrow Night + Goldenrod) +!! ============================================================================ + +#define hudson_fg #eeeeee +#define hudson_bg #222222 +#define hudson_black #222222 +#define hudson_red #cc6666 +#define hudson_green #b5bd68 +#define hudson_yellow #f0c674 +#define hudson_blue #81a2be +#define hudson_magenta #b294bb +#define hudson_cyan #8abeb7 +#define hudson_white #c5c8c6 +#define hudson_br_black #444444 +#define hudson_br_red #d54e53 +#define hudson_br_green #b9ca4a +#define hudson_br_yellow #e0b040 +#define hudson_br_blue #7aa6da +#define hudson_br_magenta #c397d8 +#define hudson_br_cyan #70c0b1 +#define hudson_br_white #eeeeee + +!! Active theme aliases +#define theme_fg hudson_fg +#define theme_bg hudson_bg +#define theme_black hudson_black +#define theme_red hudson_red +#define theme_green hudson_green +#define theme_yellow hudson_yellow +#define theme_blue hudson_blue +#define theme_magenta hudson_magenta +#define theme_cyan hudson_cyan +#define theme_white hudson_white +#define theme_br_black hudson_br_black +#define theme_br_red hudson_br_red +#define theme_br_green hudson_br_green +#define theme_br_yellow hudson_br_yellow +#define theme_br_blue hudson_br_blue +#define theme_br_magenta hudson_br_magenta +#define theme_br_cyan hudson_br_cyan +#define theme_br_white hudson_br_white + +!! ============================================================================ + +!! ST (suckless terminal) settings +st.font: BerkeleyMono Nerd Font:size=12 +st.background: theme_bg +st.foreground: theme_fg +st.color0: theme_black +st.color1: theme_red +st.color2: theme_green +st.color3: theme_yellow +st.color4: theme_blue +st.color5: theme_magenta +st.color6: theme_cyan +st.color7: theme_white +st.color8: theme_br_black +st.color9: theme_br_red +st.color10: theme_br_green +st.color11: theme_br_yellow +st.color12: theme_br_blue +st.color13: theme_br_magenta +st.color14: theme_br_cyan +st.color15: theme_br_white + +!! XTerm settings +XTerm*faceName: BerkeleyMono Nerd Font:size=12 +XTerm*selectToClipboard: true +XTerm*background: theme_bg +XTerm*foreground: theme_fg +XTerm*color0: theme_black +XTerm*color1: theme_red +XTerm*color2: theme_green +XTerm*color3: theme_yellow +XTerm*color4: theme_blue +XTerm*color5: theme_magenta +XTerm*color6: theme_cyan +XTerm*color7: theme_white +XTerm*color8: theme_br_black +XTerm*color9: theme_br_red +XTerm*color10: theme_br_green +XTerm*color11: theme_br_yellow +XTerm*color12: theme_br_blue +XTerm*color13: theme_br_magenta +XTerm*color14: theme_br_cyan +XTerm*color15: theme_br_white diff --git a/dotfiles/hyprland/.config/themes/hudson/dunstrc b/dotfiles/hyprland/.config/themes/hudson/dunstrc new file mode 100644 index 0000000..0c84133 --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/dunstrc @@ -0,0 +1,72 @@ +# Dunst config - Hudson theme +# Tomorrow Night + Goldenrod accent + +[global] +# Display +follow = mouse +width = 350 +height = (0, 300) +origin = top-right +offset = (35, 35) +indicate_hidden = yes +notification_limit = 5 +gap_size = 12 +padding = 12 +horizontal_padding = 20 +frame_width = 2 +sort = no +corner_radius = 10 + +# Progress bar +progress_bar_frame_width = 0 +progress_bar_corner_radius = 3 + +# Colors - Hudson theme +foreground = "#eeeeee" +frame_color = "#daa520" +highlight = "#daa520, #f0c674" + +# Text +font = BerkeleyMono Nerd Font 11 +markup = full +format = "<small>%a</small>\n<b>%s</b>\n%b" +alignment = left +vertical_alignment = center +show_age_threshold = -1 +hide_duplicate_count = false + +# Icon +icon_position = left +min_icon_size = 54 +max_icon_size = 80 +icon_corner_radius = 4 + +# Misc/Advanced +dmenu = fuzzel --dmenu --prompt 'Open with' + +# Mouse +mouse_left_click = close_current +mouse_middle_click = do_action, close_current +mouse_right_click = close_all + +[urgency_low] +background = "#222222f0" +timeout = 3 + +[urgency_normal] +background = "#222222f0" +timeout = 8 + +[urgency_critical] +background = "#cc6666f0" +frame_color = "#d54e53" +highlight = "#ff2a00" +foreground = "#eeeeee" +timeout = 0 + +[fullscreen_delay_everything] +fullscreen = delay + +[fullscreen_show_critical] +msg_urgency = critical +fullscreen = show diff --git a/dotfiles/hyprland/.config/themes/hudson/foot.ini b/dotfiles/hyprland/.config/themes/hudson/foot.ini new file mode 100644 index 0000000..39dcc5e --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/foot.ini @@ -0,0 +1,38 @@ +# foot terminal configuration - Hudson theme +# Tomorrow Night + Goldenrod accent + +[main] +term=xterm-256color +font=Berkeley Mono:size=14 +pad=8x8 + +[scrollback] +lines=10000 + +[colors] +# Hudson theme - Tomorrow Night + Goldenrod accent +background=222222 +foreground=eeeeee + +# Regular colors (0-7) +regular0=222222 # black +regular1=cc6666 # red +regular2=b5bd68 # green +regular3=f0c674 # yellow +regular4=81a2be # blue +regular5=b294bb # magenta +regular6=8abeb7 # cyan +regular7=c5c8c6 # white + +# Bright colors (8-15) +bright0=444444 # bright black +bright1=d54e53 # bright red +bright2=b9ca4a # bright green +bright3=e0b040 # bright yellow (adjusted for gold) +bright4=7aa6da # bright blue +bright5=c397d8 # bright magenta +bright6=70c0b1 # bright cyan +bright7=eeeeee # bright white + +# Cursor: goldenrod on dark +cursor=222222 daa520 diff --git a/dotfiles/hyprland/.config/themes/hudson/fuzzel.ini b/dotfiles/hyprland/.config/themes/hudson/fuzzel.ini new file mode 100644 index 0000000..975004c --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/fuzzel.ini @@ -0,0 +1,31 @@ +# Fuzzel config - Hudson theme +# Tomorrow Night + Goldenrod accent + +[main] +font=BerkeleyMono Nerd Font:size=14 +prompt=Search: +icon-theme=hicolor +icons-enabled=yes +width=30 +lines=12 +horizontal-pad=20 +vertical-pad=12 +inner-pad=8 +layer=overlay +exit-on-keyboard-focus-loss=yes + +[colors] +# Format: RRGGBBAA +background=222222f0 +text=eeeeeeff +selection=daa520ff +selection-text=222222ff +border=daa520ff +match=daa520ff +prompt=bbbbbbff +placeholder=888888ff +input=eeeeeeff + +[border] +width=2 +radius=16 diff --git a/dotfiles/hyprland/.config/themes/hudson/hyprland.conf b/dotfiles/hyprland/.config/themes/hudson/hyprland.conf new file mode 100644 index 0000000..37694da --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/hyprland.conf @@ -0,0 +1,7 @@ +# Hyprland colors - Hudson theme +# Tomorrow Night + Goldenrod accent + +general { + col.active_border = rgba(daa520ff) + col.inactive_border = rgba(444444ff) +} diff --git a/dotfiles/hyprland/.config/themes/hudson/hyprlock.conf b/dotfiles/hyprland/.config/themes/hudson/hyprlock.conf new file mode 100644 index 0000000..f9c08bb --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/hyprlock.conf @@ -0,0 +1,94 @@ +# Hyprlock configuration - Hudson theme +# Tomorrow Night + Goldenrod accent + +general { + disable_loading_bar = false + hide_cursor = true + grace = 0 + no_fade_in = false +} + +background { + monitor = + path = screenshot + blur_passes = 3 + blur_size = 8 + noise = 0.0117 + contrast = 0.8916 + brightness = 0.8172 + vibrancy = 0.1696 + vibrancy_darkness = 0.0 +} + +# Clock (top) +label { + monitor = + text = $TIME12 + text_align = center + color = rgb(bbbbbb) + font_size = 64 + font_family = BerkeleyMono Nerd Font + position = 0, 15% + halign = center + valign = center +} + +# Profile image +image { + monitor = + path = ~/pictures/devilman.jpg + size = 120 + rounding = -1 + border_size = 3 + border_color = rgb(daa520) + position = 0, 0% + halign = center + valign = center + shadow_passes = 2 + shadow_size = 3 + shadow_color = rgba(0, 0, 0, 0.5) +} + +# Username +label { + monitor = + text = $USER + text_align = center + color = rgb(daa520) + font_size = 36 + font_family = BerkeleyMono Nerd Font + position = 0, -7% + halign = center + valign = center +} + +# Password input +input-field { + monitor = + size = 20%, 4% + outline_thickness = 0 + dots_size = 0.33 + dots_spacing = 0.15 + dots_center = true + dots_rounding = -1 + outer_color = rgb(222222) + inner_color = rgb(222222) + font_color = rgb(bbbbbb) + fade_on_empty = true + fade_timeout = 1000 + placeholder_text = <i>Password...</i> + hide_input = false + rounding = 8 + check_color = rgb(daa520) + fail_color = rgb(d54e53) + fail_text = <i>$FAIL <b>($ATTEMPTS)</b></i> + fail_transition = 300 + capslock_color = rgb(e0b040) + numlock_color = -1 + bothlock_color = -1 + invert_numlock = false + swap_font_color = false + position = 0, -12% + halign = center + valign = center +} diff --git a/dotfiles/hyprland/.config/themes/hudson/waybar.css b/dotfiles/hyprland/.config/themes/hudson/waybar.css new file mode 100644 index 0000000..f9d2e4f --- /dev/null +++ b/dotfiles/hyprland/.config/themes/hudson/waybar.css @@ -0,0 +1,111 @@ +/* Waybar style - Hudson theme */ +/* Tomorrow Night + Goldenrod accent */ + +* { + border: none; + border-radius: 0; + font-size: 14px; + min-height: 0; + font-family: "BerkeleyMono Nerd Font", "Berkeley Mono", monospace; +} + +window#waybar { + background: transparent; +} + +#workspaces { + padding: 0.2rem; +} + +#workspaces button { + padding: 0.5rem; + margin: 0.2rem; + background-color: transparent; + color: #bbbbbb; + border-radius: 1rem; + transition: all 0.3s ease; +} + +#workspaces button.active { + background: #daa520; + color: #222222; + border-radius: 1rem; +} + +#workspaces button.urgent { + background-color: rgba(255, 88, 88, 0.4); +} + +.modules-right, .modules-left { + background-color: #222222; + border-radius: 1rem; + padding: 0.2rem 0.6rem; + margin: 0.3rem; + border: 0.095rem solid #daa520; + box-shadow: 0rem 0.2rem 0.4rem rgba(0,0,0,0.5); +} + +#cpu, +#temperature, +#memory, +#disk, +#custom-netspeed, +#battery, +#wireplumber, +#tray, +#clock, +#custom-layout, +#window { + padding: 0.4rem; + margin: 0.3rem; + color: #bbbbbb; + background-color: transparent; + border-radius: 1rem; +} + +#sysmonitor { + margin: 0.3rem; + background-color: transparent; + border-radius: 1rem; +} + +#cpu:hover, +#temperature:hover, +#memory:hover, +#disk:hover, +#custom-netspeed:hover, +#wireplumber:hover, +#sysmonitor:hover, +#custom-layout:hover { + background-color: #444444; + border-radius: 1rem; +} + +#clock { + color: #eeeeee; +} + +#wireplumber { + color: #bbbbbb; +} + +#wireplumber.muted { + color: #666666; +} + +#battery.warning { + color: #daa520; +} + +#battery.critical { + color: #ff5858; +} + +#tray > .passive { + -gtk-icon-effect: dim; +} + +#tray > .needs-attention { + -gtk-icon-effect: highlight; + background-color: #daa520; +} diff --git a/dotfiles/hyprland/.config/waybar/config b/dotfiles/hyprland/.config/waybar/config index 3b3a90f..c7cc0a7 100644 --- a/dotfiles/hyprland/.config/waybar/config +++ b/dotfiles/hyprland/.config/waybar/config @@ -3,48 +3,124 @@ "position": "top", "height": 30, "spacing": 4, + "margin-top": 6, + "margin-left": 10, + "margin-right": 10, - "modules-left": ["hyprland/workspaces"], - "modules-center": ["hyprland/window"], - "modules-right": ["tray", "battery", "disk", "clock"], + "modules-left": [ + "hyprland/workspaces", + "custom/layout", + "hyprland/window" + ], + "modules-center": [], + "modules-right": [ + "group/sysmonitor", + "custom/netspeed", + "wireplumber", + "tray", + "clock" + ], + + "group/sysmonitor": { + "orientation": "horizontal", + "modules": [ + "cpu", + "temperature", + "memory", + "disk", + "battery" + ] + }, "hyprland/workspaces": { + "disable-scroll": true, + "all-outputs": true, "format": "{name}", - "on-click": "activate", "sort-by-number": true }, + "custom/layout": { + "exec": "waybar-layout", + "return-type": "json", + "interval": 1, + "on-click": "cycle-layout" + }, + "hyprland/window": { - "format": "{}", - "max-length": 50 + "max-length": 50, + "separate-outputs": true }, - "tray": { - "spacing": 10 + "cpu": { + "interval": 10, + "format": "<span size='large'></span> {}%", + "on-click": "toggle-scratchpad monitor" + }, + + "temperature": { + "interval": 10, + "hwmon-path-abs": "/sys/devices/pci0000:00/0000:00:18.3/hwmon", + "input-filename": "temp1_input", + "critical-threshold": 80, + "format": "<span size='large'></span> {temperatureC}°C", + "format-critical": "<span size='large'></span> {temperatureC}°C", + "on-click": "toggle-scratchpad monitor" + }, + + "memory": { + "interval": 30, + "format": "<span size='large'></span> {}%", + "on-click": "toggle-scratchpad monitor" + }, + + "disk": { + "interval": 30, + "format": "<span size='large'></span> {percentage_used}%", + "path": "/", + "on-click": "toggle-scratchpad monitor" + }, + + "custom/netspeed": { + "exec": "waybar-netspeed", + "return-type": "json", + "interval": 2, + "on-click": "toggle-scratchpad network" }, "battery": { - "bat": "BAT0", "interval": 30, "states": { "warning": 30, "critical": 15 }, - "format": " {capacity}% {icon}", - "format-charging": " {capacity}% ", - "format-plugged": " {capacity}% ", - "format-icons": ["", "", "", "", ""] + "format": "<span size='large'>{icon}</span> {capacity}%", + "format-charging": "<span size='large'></span> {capacity}%", + "format-plugged": "<span size='large'></span> {capacity}%", + "format-icons": ["", "", "", "", "", "", "", "", "", "", ""], + "tooltip-format": "{timeTo}" }, - "disk": { - "interval": 30, - "format": " {used}/{total}", - "path": "/" + "tray": { + "icon-size": 22, + "spacing": 10 }, "clock": { - "interval": 30, - "format": " {:%a %B %d} {:%I:%M %p %Z}", - "tooltip-format": "<tt>{calendar}</tt>" + "format": "{:%a, %b %d %Y %I:%M %p %Z}", + "tooltip-format": "<small>{calendar}</small>", + "calendar": { + "format": { + "today": "<span color='#daa520'><b><u>{}</u></b></span>" + } + } + }, + + "wireplumber": { + "format": "<span size='large'></span> {volume}%", + "format-muted": "<span size='large'></span> Muted", + "on-click": "wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle", + "on-click-right": "toggle-scratchpad audio", + "on-scroll-up": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+", + "on-scroll-down": "wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-" } } diff --git a/dotfiles/hyprland/.config/waybar/style.css b/dotfiles/hyprland/.config/waybar/style.css index 9411b46..6b760a2 100644 --- a/dotfiles/hyprland/.config/waybar/style.css +++ b/dotfiles/hyprland/.config/waybar/style.css @@ -1,61 +1,104 @@ -/* Waybar style - matching DWM colors */ -/* gray1=#222222, gray2=#444444, gray3=#bbbbbb, gray4=#eeeeee, accent=#daa520 */ +/* Waybar style - Hyprland-Rice inspired with DWM colors */ +/* Based on: github.com/CtrlLuzzio/Hyprland-Rice */ * { - font-family: "FiraCode Nerd Font Mono", monospace; - font-size: 12px; border: none; border-radius: 0; + font-size: 14px; min-height: 0; + font-family: "BerkeleyMono Nerd Font", "Berkeley Mono", monospace; } window#waybar { - background-color: #222222; - color: #bbbbbb; + background: transparent; } -#workspaces button { - padding: 0 8px; - color: #bbbbbb; - background-color: transparent; +#workspaces { + padding: 0.2rem; } -#workspaces button:hover { - background-color: #444444; +#workspaces button { + padding: 0.5rem; + margin: 0.2rem; + background-color: transparent; + color: #bbbbbb; + border-radius: 1rem; + transition: all 0.3s ease; } #workspaces button.active { - color: #eeeeee; - background-color: #daa520; + background: #daa520; + color: #222222; + border-radius: 1rem; } #workspaces button.urgent { - background-color: #900000; + background-color: rgba(255, 88, 88, 0.4); +} + +.modules-right, .modules-left { + background-color: #222222; + border-radius: 1rem; + padding: 0.2rem 0.6rem; + margin: 0.3rem; + border: 0.095rem solid #daa520; + box-shadow: 0rem 0.2rem 0.4rem rgba(0,0,0,0.5); } +#cpu, +#temperature, +#memory, +#disk, +#custom-netspeed, +#battery, +#wireplumber, +#tray, +#clock, +#custom-layout, #window { + padding: 0.4rem; + margin: 0.3rem; color: #bbbbbb; - padding: 0 10px; + background-color: transparent; + border-radius: 1rem; } -#clock, -#battery, -#disk, -#tray { - padding: 0 10px; +#sysmonitor { + margin: 0.3rem; + background-color: transparent; + border-radius: 1rem; +} + +#cpu:hover, +#temperature:hover, +#memory:hover, +#disk:hover, +#custom-netspeed:hover, +#wireplumber:hover, +#sysmonitor:hover, +#custom-layout:hover { + background-color: #444444; + border-radius: 1rem; +} + +#clock { + color: #eeeeee; +} + +#wireplumber { color: #bbbbbb; } -#battery.charging { - color: #daa520; +#wireplumber.muted { + color: #666666; } -#battery.warning:not(.charging) { - color: #f0ad4e; +#battery.warning { + color: #daa520; } -#battery.critical:not(.charging) { - color: #d9534f; +#battery.critical { + color: #ff5858; } #tray > .passive { diff --git a/dotfiles/hyprland/.gnupg/gpg-agent.conf b/dotfiles/hyprland/.gnupg/gpg-agent.conf new file mode 100644 index 0000000..068f889 --- /dev/null +++ b/dotfiles/hyprland/.gnupg/gpg-agent.conf @@ -0,0 +1,18 @@ +# Pinentry configuration (Wayland/Hyprland) +pinentry-program ~/.local/bin/pinentry-fuzzel +pinentry-timeout 10 +allow-loopback-pinentry + +# Cache passphrases for entire login session (400 days) +default-cache-ttl 34560000 +max-cache-ttl 34560000 + +# Enable SSH support (use gpg-agent for SSH keys too) +enable-ssh-support + +# Prevent external programs from clearing cache +no-allow-external-cache + +# Keep running even when no connections +keep-display +keep-tty diff --git a/dotfiles/hyprland/.local/bin/cycle-layout b/dotfiles/hyprland/.local/bin/cycle-layout new file mode 100755 index 0000000..ebfd2e0 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/cycle-layout @@ -0,0 +1,29 @@ +#!/bin/sh +# Cycle through Hyprland layouts +# Cycle: master -> hy3 (tab/monocle) -> scrolling -> floating -> master + +LAYOUT=$(hyprctl getoption general:layout -j | jq -r '.str') +FLOATING=$(hyprctl activewindow -j 2>/dev/null | jq -r '.floating // false') + +# Check if we're in "all floating" mode by checking layout +case "$LAYOUT" in + master) + hyprctl keyword general:layout hy3 + # Create tab group for monocle behavior + hyprctl dispatch hy3:changegroup tab + ;; + hy3) + hyprctl keyword general:layout scrolling + ;; + scrolling) + # Switch to master but float all windows + hyprctl keyword general:layout master + hyprctl dispatch workspaceopt allfloat + ;; + *) + # Return to master tiled + hyprctl dispatch workspaceopt allfloat + hyprctl keyword general:layout master + hyprctl keyword master:orientation left + ;; +esac diff --git a/dotfiles/hyprland/.local/bin/layout-navigate b/dotfiles/hyprland/.local/bin/layout-navigate new file mode 100755 index 0000000..4fc02c2 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/layout-navigate @@ -0,0 +1,59 @@ +#!/bin/sh +# Layout-aware navigation for Hyprland +# Usage: layout-navigate <direction> [move] +# direction: next|prev +# move: if present, move window instead of focus + +DIR="$1" +MOVE="$2" +LAYOUT=$(hyprctl getoption general:layout -j | jq -r '.str') + +case "$LAYOUT" in + scrolling) + # Swap directions: J (next) goes left, K (prev) goes right + if [ "$MOVE" = "move" ]; then + if [ "$DIR" = "next" ]; then + hyprctl dispatch layoutmsg movewindowto l + else + hyprctl dispatch layoutmsg movewindowto r + fi + else + if [ "$DIR" = "next" ]; then + hyprctl dispatch layoutmsg focus l + else + hyprctl dispatch layoutmsg focus r + fi + fi + ;; + hy3) + if [ "$MOVE" = "move" ]; then + if [ "$DIR" = "next" ]; then + hyprctl dispatch hy3:movewindow r + else + hyprctl dispatch hy3:movewindow l + fi + else + if [ "$DIR" = "next" ]; then + hyprctl dispatch hy3:movefocus r + else + hyprctl dispatch hy3:movefocus l + fi + fi + ;; + *) + # master, dwindle, etc. + if [ "$MOVE" = "move" ]; then + if [ "$DIR" = "next" ]; then + hyprctl dispatch layoutmsg swapnext + else + hyprctl dispatch layoutmsg swapprev + fi + else + if [ "$DIR" = "next" ]; then + hyprctl dispatch layoutmsg cyclenext + else + hyprctl dispatch layoutmsg cycleprev + fi + fi + ;; +esac diff --git a/dotfiles/hyprland/.local/bin/pinentry-fuzzel b/dotfiles/hyprland/.local/bin/pinentry-fuzzel new file mode 100755 index 0000000..4cbe6b7 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/pinentry-fuzzel @@ -0,0 +1,107 @@ +#!/bin/sh + +ENABLE_LOGGING="TRUE" +logger() { + if [ "$ENABLE_LOGGING" == "TRUE" ]; then + /usr/bin/logger -t "${0} [$]" "$@"; + fi +} + +# Decode URL-encoded characters (%0A = newline, %20 = space, etc.) +decode() { + printf '%b' "$(echo "$1" | sed 's/%\([0-9A-Fa-f][0-9A-Fa-f]\)/\\x\1/g')" +} + +# Base command and misc variables +DESC="" +PROMPT="" +COUNTFILE="/tmp/pinentry-fuzzel-count-$$" + +# Check if this is a repeat prompt (within 5 seconds of last) +LASTFILE="/tmp/pinentry-fuzzel-last" +NOW=$(date +%s) +if [ -f "$LASTFILE" ]; then + LAST=$(cat "$LASTFILE") + if [ $((NOW - LAST)) -lt 5 ]; then + REPEAT=1 + else + REPEAT=0 + fi +else + REPEAT=0 +fi +echo "$NOW" > "$LASTFILE" + +echo "OK Please go ahead" +while read cmd rest; do + logger "RAW=< ${cmd} ${rest} >" + logger "cmd=<${cmd}> rest=<${rest}>" + + case $cmd in + GETINFO) + case "$rest" in + flavor) + echo "D fuzzel" + echo "OK" + ;; + version) + echo "D 0.1" + echo "OK" + ;; + ttyinfo) + echo "D - - -" + echo "OK" + ;; + pid) + echo "D $$" + echo "OK" + ;; + esac + ;; + + SETDESC) + DESC=$(decode "$rest") + echo "OK" + ;; + + SETERROR) + logger "ERROR $rest" + # Silently acknowledge errors (e.g., empty passphrase on escape) + echo "OK" + ;; + + SETPROMPT) + PROMPT=$(decode "$rest") + # Remove trailing colon if present (we add our own) + PROMPT="${PROMPT%:}" + echo "OK" + ;; + + GETPIN | getpin) + if [ "$REPEAT" -eq 0 ]; then + LABEL="password: " + else + LABEL="reenter: " + fi + PASS=$(fuzzel --prompt "$LABEL" --width 25 --lines 0 --cache /dev/null --password --dmenu) + if [ -z "$PASS" ]; then + # User cancelled - return error to GPG + rm -f "$LASTFILE" + echo "ERR 83886179 Operation cancelled" + else + echo "D $PASS" + echo "OK" + fi + ;; + + BYE|bye) + echo "OK closing connection" + logger "EXITING" + exit 0 + ;; + + *) + echo "OK" + ;; + esac +done diff --git a/dotfiles/hyprland/.local/bin/set-theme b/dotfiles/hyprland/.local/bin/set-theme new file mode 100755 index 0000000..338aab9 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/set-theme @@ -0,0 +1,124 @@ +#!/bin/sh +# Theme switcher for Hyprland desktop +# Usage: set-theme <theme-name> +# set-theme --toggle +# set-theme --current +# Available themes: dupre, hudson + +THEME_DIR="$HOME/.config/themes" +CURRENT_FILE="$HOME/.config/current-theme" + +# Get current theme +get_current() { + if [ -f "$CURRENT_FILE" ]; then + cat "$CURRENT_FILE" + else + echo "hudson" # default + fi +} + +# List available themes +list_themes() { + for dir in "$THEME_DIR"/*/; do + basename "$dir" + done +} + +# Apply a theme +apply_theme() { + theme="$1" + + if [ ! -d "$THEME_DIR/$theme" ]; then + echo "Error: Theme '$theme' not found in $THEME_DIR" + echo "Available themes: $(list_themes | tr '\n' ' ')" + exit 1 + fi + + echo "Applying theme: $theme" + + # Copy configs that don't support sourcing + cp "$THEME_DIR/$theme/foot.ini" "$HOME/.config/foot/foot.ini" + cp "$THEME_DIR/$theme/fuzzel.ini" "$HOME/.config/fuzzel/fuzzel.ini" + cp "$THEME_DIR/$theme/waybar.css" "$HOME/.config/waybar/style.css" + cp "$THEME_DIR/$theme/dunstrc" "$HOME/.config/dunst/dunstrc" + cp "$THEME_DIR/$theme/hyprlock.conf" "$HOME/.config/hypr/hyprlock.conf" + cp "$THEME_DIR/$theme/Xresources" "$HOME/.Xresources" + + # Apply Xresources (for X11 apps and Emacs) + xrdb -merge "$HOME/.Xresources" 2>/dev/null + + # Apply Hyprland colors directly via hyprctl + case "$theme" in + dupre) + hyprctl keyword general:col.active_border "rgba(d7af5fff)" + hyprctl keyword general:col.inactive_border "rgba(474544ff)" + ;; + hudson) + hyprctl keyword general:col.active_border "rgba(daa520ff)" + hyprctl keyword general:col.inactive_border "rgba(444444ff)" + ;; + esac + + # Save current theme + echo "$theme" > "$CURRENT_FILE" + + # Reload applications + killall -SIGUSR2 waybar 2>/dev/null + pkill dunst && dunst & + + # Notify user + notify-send "Theme" "Switched to $theme" -t 2000 + + echo "Theme '$theme' applied. Open new terminals to see changes." +} + +# Toggle between themes +toggle_theme() { + current=$(get_current) + case "$current" in + dupre) apply_theme "hudson" ;; + hudson) apply_theme "dupre" ;; + *) apply_theme "dupre" ;; + esac +} + +# Show picker with fuzzel +pick_theme() { + themes=$(list_themes) + current=$(get_current) + selected=$(echo "$themes" | fuzzel --dmenu --prompt "Theme (current: $current): ") + if [ -n "$selected" ]; then + apply_theme "$selected" + fi +} + +# Main +case "$1" in + --toggle|-t) + toggle_theme + ;; + --current|-c) + get_current + ;; + --list|-l) + list_themes + ;; + --pick|-p) + pick_theme + ;; + --help|-h) + echo "Usage: set-theme <theme-name>" + echo " set-theme --toggle Toggle between themes" + echo " set-theme --current Show current theme" + echo " set-theme --list List available themes" + echo " set-theme --pick Pick theme with fuzzel" + echo "" + echo "Available themes: $(list_themes | tr '\n' ' ')" + ;; + "") + pick_theme + ;; + *) + apply_theme "$1" + ;; +esac diff --git a/dotfiles/hyprland/.local/bin/toggle-scratchpad b/dotfiles/hyprland/.local/bin/toggle-scratchpad new file mode 100755 index 0000000..bb10ef7 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/toggle-scratchpad @@ -0,0 +1,29 @@ +#!/bin/sh +# Toggle a special workspace from waybar click +# Tracks state to handle focus-loss auto-close issue +# Usage: toggle-scratchpad <name> + +NAME="$1" +if [ -z "$NAME" ]; then + echo "Usage: toggle-scratchpad <name>" + exit 1 +fi + +STATEFILE="/tmp/scratchpad-$NAME-open" +NOW=$(date +%s) + +# If state file exists and recent, scratchpad was open and just closed by focus loss +# Don't reopen it - user intended to close +if [ -f "$STATEFILE" ]; then + LAST=$(cat "$STATEFILE") + AGE=$((NOW - LAST)) + rm -f "$STATEFILE" + if [ "$AGE" -lt 2 ]; then + # Was just open, user clicked to close - don't reopen + exit 0 + fi +fi + +# Opening the scratchpad - mark timestamp +echo "$NOW" > "$STATEFILE" +hyprctl dispatch togglespecialworkspace "$NAME" diff --git a/dotfiles/hyprland/.local/bin/waybar-layout b/dotfiles/hyprland/.local/bin/waybar-layout new file mode 100755 index 0000000..6c45877 --- /dev/null +++ b/dotfiles/hyprland/.local/bin/waybar-layout @@ -0,0 +1,36 @@ +#!/bin/sh +# Hyprland layout indicator for waybar +# Shows current layout with nerd font icons +# Layouts: master -> tab group (monocle) -> scrolling -> floating + +# Get current layout +LAYOUT=$(hyprctl getoption general:layout -j | jq -r '.str') + +# Check if workspace has allfloat enabled +ALLFLOAT=$(hyprctl activeworkspace -j | jq -r '.hasfullscreenwindow') + +# Check if active window is floating +FLOATING=$(hyprctl activewindow -j 2>/dev/null | jq -r '.floating // false') + +# Check workspace rules for allfloat +WSRULES=$(hyprctl activeworkspace -j | jq -r '.rules // []') + +# Determine icon and tooltip +if [ "$LAYOUT" = "master" ] && echo "$WSRULES" | grep -q "allfloat"; then + ICON="" + TOOLTIP="Floating" +elif [ "$LAYOUT" = "scrolling" ]; then + ICON="" + TOOLTIP="Scrolling" +elif [ "$LAYOUT" = "hy3" ]; then + ICON="" + TOOLTIP="Tab Group (Monocle)" +elif [ "$LAYOUT" = "master" ]; then + ICON="" + TOOLTIP="Master" +else + ICON="" + TOOLTIP="$LAYOUT" +fi + +echo "{\"text\": \"<span size='large'>$ICON</span>\", \"tooltip\": \"$TOOLTIP\"}" diff --git a/dotfiles/hyprland/.local/bin/waybar-netspeed b/dotfiles/hyprland/.local/bin/waybar-netspeed new file mode 100755 index 0000000..97e8e5e --- /dev/null +++ b/dotfiles/hyprland/.local/bin/waybar-netspeed @@ -0,0 +1,67 @@ +#!/bin/sh +# Network status indicator for waybar +# Shows: WiFi icon (signal strength) + SSID, or Ethernet icon + interface +# Tooltip: upload/download speeds + +INTERFACE=$(ip route | awk '/default/ {print $5; exit}') + +if [ -z "$INTERFACE" ]; then + echo '{"text": " Disconnected", "tooltip": "No network connection", "class": "disconnected"}' + exit 0 +fi + +# Measure network speed (requires 1 second delay) +RX1=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes) +TX1=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes) +sleep 1 +RX2=$(cat /sys/class/net/$INTERFACE/statistics/rx_bytes) +TX2=$(cat /sys/class/net/$INTERFACE/statistics/tx_bytes) + +RX_RATE=$((RX2 - RX1)) +TX_RATE=$((TX2 - TX1)) + +format_speed() { + local bytes=$1 + if [ $bytes -ge 1073741824 ]; then + printf "%.2f GB/s" $(echo "scale=2; $bytes / 1073741824" | bc) + elif [ $bytes -ge 1048576 ]; then + printf "%.2f MB/s" $(echo "scale=2; $bytes / 1048576" | bc) + elif [ $bytes -ge 1024 ]; then + printf "%.2f KB/s" $(echo "scale=2; $bytes / 1024" | bc) + else + printf "%d B/s" $bytes + fi +} + +UP=$(format_speed $TX_RATE) +DOWN=$(format_speed $RX_RATE) + +# Determine connection type and get appropriate icon/label +if [ -d "/sys/class/net/$INTERFACE/wireless" ]; then + # WiFi connection + LABEL=$(iwgetid -r 2>/dev/null || echo "WiFi") + + # Get signal strength in percentage + SIGNAL=$(awk 'NR==3 {print int($3 * 100 / 70)}' /proc/net/wireless 2>/dev/null) + + # Select icon based on signal strength + if [ -z "$SIGNAL" ] || [ "$SIGNAL" -le 0 ]; then + ICON="" # No signal + elif [ "$SIGNAL" -le 25 ]; then + ICON="" # Weak + elif [ "$SIGNAL" -le 50 ]; then + ICON="" # Fair + elif [ "$SIGNAL" -le 75 ]; then + ICON="" # Good + else + ICON="" # Excellent + fi +else + # Ethernet connection + ICON="" + LABEL="$INTERFACE" +fi + +TOOLTIP="Up: $UP\nDown: $DOWN" + +echo "{\"text\": \"<span size='large'>$ICON</span> $LABEL\", \"tooltip\": \"$TOOLTIP\", \"class\": \"connected\"}" |
