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 - ''; -}