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}%"; };