diff --git a/home/desktop.nix b/home/desktop.nix
index 326e32a..2c4fa37 100644
--- a/home/desktop.nix
+++ b/home/desktop.nix
@@ -69,172 +69,16 @@
# === Hyprland WM config ===
home.file.".config/hypr/hyprland.conf" = {
force = true;
- 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)
- '';
+ source = ./hyprland.conf;
};
# === Ghostty config ===
- home.file.".config/ghostty/config".text = ''
+ home.file.".config/ghostty/config" = {
+ force = true;
+ 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
@@ -243,9 +87,12 @@
shell-integration = zsh
gtk-single-instance = true
'';
+ };
# === Zellij config ===
- home.file.".config/zellij/config.kdl".text = ''
+ home.file.".config/zellij/config.kdl" = {
+ force = true;
+ text = ''
theme "catppuccin-mocha"
default_shell "zsh"
pane_frames false
@@ -275,6 +122,7 @@
}
}
'';
+ };
# === Hyprlock ===
home.file.".config/hypr/hyprlock.conf".text = ''
@@ -303,38 +151,41 @@
'';
# === 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" ];
+ home.file.".config/waybar/config.jsonc" = {
+ force = true;
+ 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" = {
+ "hyprland/workspaces" = {
format = "{icon}";
format-icons = {
- shell = ""; code = ""; web = ""; chat = ""; vault = "";
- media = ""; "7" = ""; "8" = ""; "9" = ""; sys = ""; default = "";
+ "1" = ""; "2" = ""; "3" = ""; "4" = ""; "5" = "";
+ 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 = {
+ persistent_workspaces = { "1" = []; "2" = []; "3" = []; "4" = []; "5" = []; };
+ };
+ 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 = {
+ };
+ network = {
format-wifi = " {signalStrength}%"; format-ethernet = ""; format-disconnected = "⚠";
tooltip-format = "{ifname} via {gwaddr}";
- };
- pulseaudio = {
+ };
+ pulseaudio = {
format = "{icon} {volume}%"; format-bluetooth = "{icon} {volume}%"; format-muted = "";
format-icons.default = [ "" "" "" ]; on-click = "pavucontrol";
- };
- tray.spacing = 10;
+ };
+ tray.spacing = 10;
+ };
};
# === Waybar style ===