diff --git a/home/desktop.nix b/home/desktop.nix
index bd1bab4..771270e 100644
--- a/home/desktop.nix
+++ b/home/desktop.nix
@@ -68,7 +68,7 @@
# === Hyprland WM config ===
home.file.".config/hypr/hyprland.conf".text = ''
- monitor=,preferred,auto,1
+ monitor=,preferred,auto,1
# Environment
env = XCURSOR_SIZE,24
@@ -82,7 +82,6 @@
exec-once = wl-paste --type text --watch cliphist store
exec-once = wl-paste --type image --watch cliphist store
exec-once = hypridle
-
# Input
input {
@@ -99,25 +98,27 @@
# Visual
general {
- gaps_in = 6; gaps_out = 8; border_size = 2
+ gaps_in = 6
+ gaps_out = 8
+ border_size = 2
col.active_border = rgba(8ebdffee) rgba(8ebdffff) rgba(8ebdffee) rgba(8ebdffff) 45deg
col.inactive_border = rgba(333333aa)
- layout = dwindle; allow_tearing = false
+ layout = dwindle
}
+
decoration {
rounding = 8
- blur { enabled = true; size = 5; passes = 2; new_optimizations = true; }
- drop_shadow = true; shadow_range = 12; shadow_render_power = 2
- col.shadow = rgba(1a1a1aee)
- title {
+ blur {
enabled = true
- font_family = JetBrainsMono Nerd Font
- font_size = 11
- col.text = rgba(cdd6f4ee)
- col.bg = rgba(1e1e2eee)
- rounding = 6
+ size = 5
+ passes = 2
}
+ drop_shadow = true
+ shadow_range = 12
+ shadow_render_power = 2
+ col.shadow = rgba(1a1a1aee)
}
+
animations {
enabled = true
bezier = easeOutQuint,0.23,1,0.32,1
@@ -143,7 +144,6 @@
# Keybinds
$mainMod = SUPER
- # Launch
bind = $mainMod, Return, exec, ghostty -e zellij
bind = $mainMod SHIFT, Return, exec, ghostty
bind = $mainMod, B, exec, firefox
@@ -152,33 +152,23 @@
bind = $mainMod, V, exec, cliphist list | rofi -dmenu | cliphist decode | wl-copy
bind = $mainMod, N, exec, thunar
bind = $mainMod, L, exec, hyprlock
-
- # Window control
- bind = $mainMod, Q, killactive,
+ bind = $mainMod, Q, killactive
bind = $mainMod, F, fullscreen
- bind = $mainMod, G, togglefloating,
- bind = $mainMod, P, pseudo,
- bind = $mainMod, T, pin,
-
- # Focus (Vim-style)
+ bind = $mainMod, G, togglefloating
+ bind = $mainMod, P, pseudo
+ bind = $mainMod, T, pin
bind = $mainMod, H, movefocus, l
bind = $mainMod, J, movefocus, d
bind = $mainMod, K, movefocus, u
bind = $mainMod, L, movefocus, r
-
- # Move windows
bind = $mainMod SHIFT, H, movewindow, l
bind = $mainMod SHIFT, J, movewindow, d
bind = $mainMod SHIFT, K, movewindow, u
bind = $mainMod SHIFT, L, movewindow, r
-
- # Resize
bind = $mainMod CTRL, H, resizeactive, -40 0
bind = $mainMod CTRL, J, resizeactive, 0 40
bind = $mainMod CTRL, K, resizeactive, 0 -40
bind = $mainMod CTRL, L, resizeactive, 40 0
-
- # Workspace switching
bind = $mainMod, 1, workspace, name:shell
bind = $mainMod, 2, workspace, name:code
bind = $mainMod, 3, workspace, name:web
@@ -189,8 +179,6 @@
bind = $mainMod, 8, workspace, name:8
bind = $mainMod, 9, workspace, name:9
bind = $mainMod, 0, workspace, name:sys
-
- # Move to workspace
bind = $mainMod SHIFT, 1, movetoworkspace, name:shell
bind = $mainMod SHIFT, 2, movetoworkspace, name:code
bind = $mainMod SHIFT, 3, movetoworkspace, name:web
@@ -201,189 +189,24 @@
bind = $mainMod SHIFT, 8, movetoworkspace, name:8
bind = $mainMod SHIFT, 9, movetoworkspace, name:9
bind = $mainMod SHIFT, 0, movetoworkspace, name:sys
-
- # Scroll workspace
bind = $mainMod, mouse_down, workspace, e+1
bind = $mainMod, mouse_up, workspace, e-1
-
- # Screenshot
bind = $mainMod, S, exec, grim -g "$(slurp)" - | swappy -f -
bind = $mainMod SHIFT, S, exec, grim - | swappy -f -
-
- # Media keys
bindel = , XF86AudioRaiseVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%+
bindel = , XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 5%-
bindl = , XF86AudioMute, exec, wpctl set-mute @DEFAULT_AUDIO_SINK@ toggle
bindel = , XF86MonBrightnessUp, exec, brightnessctl set 5%+
bindel = , XF86MonBrightnessDown, exec, brightnessctl set 5%-
-
- # Session
bind = $mainMod SHIFT, Q, exec, hyprctl dispatch exit
bind = $mainMod SHIFT, R, exec, hyprctl reload
- # Window rules
windowrulev2 = float, class:(pavucontrol)
windowrulev2 = float, class:(firefox), title:(Picture-in-Picture)
windowrulev2 = float, title:(Authentication Required)
windowrulev2 = size 75% 75%,class:(pavucontrol)
-
- # Auto-send to workspaces
windowrulev2 = workspace name:code, class:(code-oss|Code|jetbrains-.*|nvim)
windowrulev2 = workspace name:web, class:(firefox|chromium-browser|google-chrome)
windowrulev2 = workspace name:chat, class:(discord|Slack|TelegramDesktop)
windowrulev2 = workspace name:shell, class:(ghostty|Zellij|Alacritty)
- '';
- # === Ghostty config ===
- home.file.".config/ghostty/config".text = ''
- font-family = JetBrainsMono Nerd Font
- font-size = 13
- theme = catppuccin-mocha
- background-opacity = 0.9
- window-padding-x = 8
- window-padding-y = 4
- cursor-style = bar
- confirm-close-surface = false
- shell-integration = zsh
- gtk-single-instance = true
- '';
-
- # === Zellij config ===
- home.file.".config/zellij/config.kdl".text = ''
- theme "catppuccin-mocha"
- default_shell "zsh"
- pane_frames false
- scrollback_editor "nvim"
-
- keybinds clear-defaults=true {
- normal { bind "Ctrl g" { SwitchToMode "locked"; } }
- locked {
- bind "Ctrl g" { SwitchToMode "normal"; }
- bind "Ctrl q" { CloseTab; }
- bind "Ctrl p" { NewPane "down"; }
- bind "Ctrl n" { NewPane "right"; }
- bind "Ctrl t" { NewTab; }
- bind "Ctrl x" { CloseFocus; }
- bind "Ctrl f" { ToggleFloatingPanes; }
- bind "Ctrl z" { ToggleFocusFullscreen; }
- bind "Ctrl d" { Detach; }
- bind "Ctrl h" { MoveFocusOrTab "left"; }
- bind "Ctrl j" { MoveFocusOrTab "down"; }
- bind "Ctrl k" { MoveFocusOrTab "up"; }
- bind "Ctrl l" { MoveFocusOrTab "right"; }
- bind "Ctrl r" { SwitchToMode "renametab"; }
- }
- renametab {
- bind "Ctrl c" { SwitchToMode "locked"; }
- bind "Esc" { SwitchToMode "locked"; }
- }
- }
- '';
-
- # === Hyprlock ===
- home.file.".config/hypr/hyprlock.conf".text = ''
- general { disable_loading_bar = false; hide_cursor = true; grace = 0; no_fade_in = false; }
- background { path = screenshot; blur_passes = 3; blur_size = 10; color = rgba(0,0,0,0.6); }
- input-field {
- size = 250, 50; position = 0, -200; monitor =
- dots_center = true; fade_on_empty = false
- placeholder_text = unlock
- outer_color = rgba(8ebdff,0.8); inner_color = rgba(30,30,46,0.8)
- font_color = rgba(255,255,255,0.9)
- }
- label {
- text = cmd[update:60] date +"%A, %B %d %H:%M"
- position = 0, 200; monitor =
- font_size = 32; font_family = JetBrains Mono Nerd Font
- color = rgba(255,255,255,0.9)
- }
- '';
-
- # === Hypridle ===
- home.file.".config/hypr/hypridle.conf".text = ''
- general { lock_cmd = hyprlock; before_sleep_cmd = hyprlock; }
- listener { timeout = 300; on-timeout = hyprlock; }
- listener { timeout = 600; on-timeout = hyprctl dispatch dpms off; on-resume = hyprctl dispatch dpms on; }
- '';
-
- # === Waybar config ===
- home.file.".config/waybar/config.jsonc".text = builtins.toJSON {
- layer = "top"; position = "top"; height = 32; spacing = 4; margin = "6 8 0 8";
- modules-left = [ "hyprland/workspaces" ];
- modules-center = [ "clock" ];
- modules-right = [ "tray" "pulseaudio" "backlight" "battery" "network" "cpu" "memory" ];
-
- "hyprland/workspaces" = {
- format = "{icon}";
- format-icons = {
- shell = ""; code = ""; web = ""; chat = ""; vault = "";
- media = ""; "7" = ""; "8" = ""; "9" = ""; sys = ""; default = "";
- };
- persistent_workspaces = { "1" = ["shell"]; "2" = ["code"]; "3" = ["web"]; "4" = ["chat"]; "5" = ["vault"]; };
- };
- clock = { format = "{:%a %b %d %H:%M}"; tooltip-format = "{:%Y %B}\n{calendar}"; };
- cpu = { format = " {usage}%"; };
- memory = { format = " {}%"; };
- backlight = { format = "{icon} {percent}%"; format-icons = [ "" "" "" "" ]; };
- battery = {
- format = "{icon} {capacity}%";
- format-icons = [ "" "" "" "" "" "" "" "" "" "" ];
- format-charging = " {capacity}%";
- };
- network = {
- format-wifi = " {signalStrength}%"; format-ethernet = ""; format-disconnected = "⚠";
- tooltip-format = "{ifname} via {gwaddr}";
- };
- pulseaudio = {
- format = "{icon} {volume}%"; format-bluetooth = "{icon} {volume}%"; format-muted = "";
- format-icons.default = [ "" "" "" ]; on-click = "pavucontrol";
- };
- tray.spacing = 10;
- };
-
- # === Waybar style ===
- home.file.".config/waybar/style.css".text = ''
- * { font-family: "JetBrainsMono Nerd Font", "Font Awesome 6 Free"; font-size: 13px; }
- window#waybar { background: rgba(30,30,46,0.85); border-radius: 8px; color: #cdd6f4; }
- #workspaces button { padding: 0 6px; color: #6c7086; background: transparent; border-radius: 4px; }
- #workspaces button.active { color: #cdd6f4; background: #45475a; }
- #workspaces button:hover { color: #cdd6f4; background: #313244; }
- #clock, #cpu, #memory, #backlight, #battery, #network, #pulseaudio, #tray { padding: 0 10px; color: #cdd6f4; }
- #cpu.warning, #memory.warning, #battery.warning { color: #f9e2af; }
- #cpu.critical, #memory.critical, #battery.critical { color: #f38ba8; }
- tooltip { background: rgba(30,30,46,0.95); border: 1px solid #45475a; border-radius: 6px; }
- '';
-
- # === Rofi launcher ===
- home.file.".config/rofi/config.rasi".text = ''
- configuration {
- modi: "drun,run,window"; show-icons: true; icon-theme: "Papirus-Dark";
- drun-display-format: "{name}"; font: "JetBrainsMono Nerd Font 13"; matching: "normal";
- }
- window { width: 600px; border-radius: 10px; background-color: rgba(30,30,46,0.95); border: 2px;
- border-color: #89b4fa; }
- mainbox { padding: 8px; }
- inputbar { padding: 4px 8px; background-color: rgba(49,50,68,0.8); border-radius: 8px; margin-bottom: 4px; }
- entry { background: transparent; text-color: #cdd6f4; caret-color: #cdd6f4; }
- listview { background: transparent; lines: 8; }
- element { padding: 4px 8px; border-radius: 6px; text-color: #cdd6f4; }
- element selected { background-color: rgba(137,180,250,0.3); text-color: #ffffff; }
- element-text { vertical-align: 0.5; }
- '';
-
- # === Dunst notifications ===
- home.file.".config/dunst/dunstrc".text = ''
- [global]
- monitor = 0; follow = mouse; width = 350; height = 150; offset = 10x50; origin = top-right
- notification_limit = 5; indicate_hidden = yes; shrink = no; transparency = 0
- separator_height = 2; padding = 12; horizontal_padding = 12; frame_width = 2
- frame_color = "#89b4fa"; separator_color = frame; sort = yes
- font = JetBrainsMono Nerd Font 11; corner_radius = 8
- background = "#1e1e2e"; foreground = "#cdd6f4"; timeout = 5
- idle_threshold = 120; icon_position = left; max_icon_size = 48; markup = full
- format = "%s\n%b"
- [urgency_low] background = "#1e1e2e"; foreground = "#cdd6f4"; timeout = 3
- [urgency_normal] background = "#1e1e2e"; foreground = "#cdd6f4"; timeout = 5
- [urgency_critical] background = "#f38ba8"; foreground = "#1e1e2e"; timeout = 0
- '';
-}