diff --git a/home/desktop.nix b/home/desktop.nix
index 8a9d4a5..326e32a 100644
--- a/home/desktop.nix
+++ b/home/desktop.nix
@@ -69,14 +69,172 @@
# === Hyprland WM config ===
home.file.".config/hypr/hyprland.conf" = {
force = true;
- source = ./hyprland.conf;
+ text = ''
+ monitor=,preferred,auto,1
+
+ # Environment
+ env = XCURSOR_SIZE,24
+ env = XCURSOR_THEME,Bibata-Modern-Classic
+ env = GTK_THEME,adw-gtk3-dark
+ env = QT_QPA_PLATFORMTHEME,gtk2
+
+ # Autostart
+ exec-once = waybar
+ exec-once = dunst
+ exec-once = wl-paste --type text --watch cliphist store
+ exec-once = wl-paste --type image --watch cliphist store
+ exec-once = hypridle
+
+
+ # Input
+ input {
+ kb_layout = us
+ kb_options = caps:escape
+ follow_mouse = 1
+ sensitivity = 0
+ }
+
+ input:touchpad {
+ natural_scroll = true
+ tap-to-click = true
+ }
+
+ # Visual
+ general {
+ 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
+ }
+ decoration {
+ rounding = 8
+ blur { enabled = true; 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
+ bezier = easeInOutCubic,0.65,0.05,0.36,1
+ animation = windows,1,7,easeOutQuint,slide
+ animation = windowsOut,1,7,easeInOutCubic,slide
+ animation = fade,1,7,easeOutQuint
+ animation = workspaces,1,4,easeOutQuint,fade
+ }
+
+ # Workspaces
+ workspace = 1, name:shell, persistent:true
+ workspace = 2, name:code, persistent:true
+ workspace = 3, name:web, persistent:true
+ workspace = 4, name:chat, persistent:true
+ workspace = 5, name:vault, persistent:true
+ workspace = 6, name:media
+ workspace = 7, name:7
+ workspace = 8, name:8
+ workspace = 9, name:9
+ workspace = 10, name:sys
+
+ # Keybinds
+ $mainMod = SUPER
+
+ # Launch
+ bind = $mainMod, Return, exec, ghostty -e zellij
+ bind = $mainMod SHIFT, Return, exec, ghostty
+ bind = $mainMod, B, exec, firefox
+ bind = $mainMod, D, exec, rofi -show drun -show-icons
+ bind = $mainMod, Space, exec, rofi -show drun -show-icons
+ 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, F, fullscreen
+ bind = $mainMod, G, togglefloating
+ bind = $mainMod, P, pseudo
+ bind = $mainMod, T, pin
+
+ # Focus (Vim-style)
+ 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
+ bind = $mainMod, 4, workspace, name:chat
+ bind = $mainMod, 5, workspace, name:vault
+ bind = $mainMod, 6, workspace, name:media
+ bind = $mainMod, 7, workspace, name:7
+ 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
+ bind = $mainMod SHIFT, 4, movetoworkspace, name:chat
+ bind = $mainMod SHIFT, 5, movetoworkspace, name:vault
+ bind = $mainMod SHIFT, 6, movetoworkspace, name:media
+ bind = $mainMod SHIFT, 7, movetoworkspace, name:7
+ 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
+ exec-once = awww img ~/wallpapers/default.jpg
+
+ # Window rules
+ windowrulev2 = float, class:(pavucontrol)
+ windowrulev2 = float, class:(firefox), title:PIP
+ 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" = { force = true; text = ''
+ home.file.".config/ghostty/config".text = ''
font-family = JetBrainsMono Nerd Font
font-size = 13
- theme = Catppuccin Mocha
+ theme = catppuccin-mocha
background-opacity = 0.9
window-padding-x = 8
window-padding-y = 4
@@ -87,7 +245,7 @@
'';
# === Zellij config ===
- home.file.".config/zellij/config.kdl" = { force = true; text = ''
+ home.file.".config/zellij/config.kdl".text = ''
theme "catppuccin-mocha"
default_shell "zsh"
pane_frames false
@@ -154,10 +312,10 @@
"hyprland/workspaces" = {
format = "{icon}";
format-icons = {
- "1" = ""; "2" = ""; "3" = ""; "4" = ""; "5" = "";
+ shell = ""; code = ""; web = ""; chat = ""; vault = "";
media = ""; "7" = ""; "8" = ""; "9" = ""; sys = ""; default = "";
};
- persistent_workspaces = { "1" = []; "2" = []; "3" = []; "4" = []; "5" = []; };
+ 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}%"; };