From b1daadc71ed385f79a4b1722ed0ef9e5c92bdbaf Mon Sep 17 00:00:00 2001 From: kenji Date: Tue, 19 Aug 2025 17:03:16 -0500 Subject: [PATCH] added files --- modules/desktop/hyprland/default.nix | 17 +++ modules/desktop/hyprland/env.nix | 30 ++++ modules/desktop/hyprland/exec.nix | 2 + modules/desktop/hyprland/general.nix | 155 +++++++++++++++++++++ modules/desktop/hyprland/keybinds.nix | 189 ++++++++++++++++++++++++++ modules/desktop/hyprland/rules.nix | 153 +++++++++++++++++++++ modules/options.nix | 9 ++ modules/terminal/simpleStarship.nix | 49 +++++++ modules/terminal/terminal.nix | 51 +------ 9 files changed, 606 insertions(+), 49 deletions(-) create mode 100644 modules/desktop/hyprland/default.nix create mode 100644 modules/desktop/hyprland/env.nix create mode 100644 modules/desktop/hyprland/exec.nix create mode 100644 modules/desktop/hyprland/general.nix create mode 100644 modules/desktop/hyprland/keybinds.nix create mode 100644 modules/desktop/hyprland/rules.nix create mode 100644 modules/terminal/simpleStarship.nix diff --git a/modules/desktop/hyprland/default.nix b/modules/desktop/hyprland/default.nix new file mode 100644 index 000000000..13744ee75 --- /dev/null +++ b/modules/desktop/hyprland/default.nix @@ -0,0 +1,17 @@ +{pkgs, ...}: { + imports = [ + ./keybinds.nix + ./execs.nix + ./rules.nix + ./env.nix + ./colours.nix + ]; + + wayland.windowManager.hyprland = { + enable = true; + xwayland.enable = true; + systemd.enable = true; + settings = { + }; + }; +} diff --git a/modules/desktop/hyprland/env.nix b/modules/desktop/hyprland/env.nix new file mode 100644 index 000000000..4d95076cc --- /dev/null +++ b/modules/desktop/hyprland/env.nix @@ -0,0 +1,30 @@ +{ + config, + pkgs, + ... +}: { + wayland.windowManager.hyprland.settings = { + env = [ + # Input method + "QT_IM_MODULE, fcitx" + "XMODIFIERS, @im=fcitx" + "SDL_IM_MODULE, fcitx" + "GLFW_IM_MODULE, ibus" + "INPUT_METHOD, fcitx" + + # Wayland + "ELECTRON_OZONE_PLATFORM_HINT, auto" + + # Themes + "QT_QPA_PLATFORM, wayland" + "QT_QPA_PLATFORMTHEME, kde" + "XDG_MENU_PREFIX, plasma-" + + # Virtual environment + "ILLOGICAL_IMPULSE_VIRTUAL_ENV, ~/.local/state/quickshell/.venv" + + # Terminal application + "TERMINAL, kitty -1" + ]; + }; +} diff --git a/modules/desktop/hyprland/exec.nix b/modules/desktop/hyprland/exec.nix new file mode 100644 index 000000000..2c63c0851 --- /dev/null +++ b/modules/desktop/hyprland/exec.nix @@ -0,0 +1,2 @@ +{ +} diff --git a/modules/desktop/hyprland/general.nix b/modules/desktop/hyprland/general.nix new file mode 100644 index 000000000..3c8958623 --- /dev/null +++ b/modules/desktop/hyprland/general.nix @@ -0,0 +1,155 @@ +{ + config, + pkgs, + ... +}: { + wayland.windowManager.hyprland.settings = { + monitor = [ + ",preferred,auto,1,transform, 0" + # "HDMI-A-1,1920x1080@60,1920x0,1,mirror,eDP-1" + # ",addreserved, 0, 0, 0, 0" + ]; + + gestures = { + workspace_swipe = true; + workspace_swipe_distance = 700; + workspace_swipe_fingers = 3; + workspace_swipe_min_fingers = true; + workspace_swipe_cancel_ratio = 0.2; + workspace_swipe_min_speed_to_force = 5; + workspace_swipe_direction_lock = true; + workspace_swipe_direction_lock_threshold = 10; + workspace_swipe_create_new = true; + }; + + general = { + gaps_in = 4; + gaps_out = 5; + gaps_workspaces = 50; + border_size = 1; + "col.active_border" = "rgba(0DB7D4FF)"; + "col.inactive_border" = "rgba(31313600)"; + resize_on_border = true; + no_focus_fallback = true; + allow_tearing = true; + snap.enabled = true; + }; + + dwindle = { + preserve_split = true; + smart_split = false; + smart_resizing = false; + # precise_mouse_move = true; + }; + + decoration = { + rounding = 18; + blur = { + enabled = true; + xray = true; + special = false; + new_optimizations = true; + size = 14; + passes = 3; + brightness = 1; + noise = 0.01; + contrast = 1; + popups = true; + popups_ignorealpha = 0.6; + input_methods = true; + input_methods_ignorealpha = 0.8; + }; + shadow = { + enabled = true; + ignore_window = true; + range = 30; + offset = "0 2"; + render_power = 4; + color = "rgba(00000010)"; + }; + dim_inactive = true; + dim_strength = 0.025; + dim_special = 0.07; + }; + + animations = { + enabled = true; + bezier = [ + "expressiveFastSpatial, 0.42, 1.67, 0.21, 0.90" + "expressiveSlowSpatial, 0.39, 1.29, 0.35, 0.98" + "expressiveDefaultSpatial, 0.38, 1.21, 0.22, 1.00" + "emphasizedDecel, 0.05, 0.7, 0.1, 1" + "emphasizedAccel, 0.3, 0, 0.8, 0.15" + "standardDecel, 0, 0, 0, 1" + "menu_decel, 0.1, 1, 0, 1" + "menu_accel, 0.52, 0.03, 0.72, 0.08" + ]; + animation = [ + "windowsIn, 1, 3, emphasizedDecel, popin 80%" + "windowsOut, 1, 2, emphasizedDecel, popin 90%" + "windowsMove, 1, 3, emphasizedDecel, slide" + "border, 1, 10, emphasizedDecel" + "layersIn, 1, 2.7, emphasizedDecel, popin 93%" + "layersOut, 1, 2.4, menu_accel, popin 94%" + "fadeLayersIn, 1, 0.5, menu_decel" + "fadeLayersOut, 1, 2.7, menu_accel" + "workspaces, 1, 7, menu_decel, slide" + "specialWorkspaceIn, 1, 2.8, emphasizedDecel, slidevert" + "specialWorkspaceOut, 1, 1.2, emphasizedAccel, slidevert" + ]; + }; + + input = { + kb_layout = "us"; + numlock_by_default = true; + repeat_delay = 250; + repeat_rate = 35; + follow_mouse = 1; + off_window_axis_events = 2; + touchpad = { + natural_scroll = true; + disable_while_typing = true; + clickfinger_behavior = true; + scroll_factor = 0.5; + }; + }; + + misc = { + disable_hyprland_logo = true; + disable_splash_rendering = true; + vfr = 1; + vrr = 1; + mouse_move_enables_dpms = true; + key_press_enables_dpms = true; + animate_manual_resizes = false; + animate_mouse_windowdragging = false; + enable_swallow = false; + swallow_regex = "(foot|kitty|allacritty|Alacritty)"; + new_window_takes_over_fullscreen = 2; + allow_session_lock_restore = true; + # session_lock_xray = true; + initial_workspace_tracking = false; + focus_on_activate = true; + }; + + binds = { + scroll_event_delay = 0; + hide_special_on_workspace_change = true; + }; + + cursor = { + zoom_factor = 1; + zoom_rigid = false; + }; + + plugin.hyprexpo = { + columns = 3; + gap_size = 5; + bg_col = "rgb(000000)"; + workspace_method = "first 1"; + enable_gesture = false; + gesture_distance = 300; + gesture_positive = false; + }; + }; +} diff --git a/modules/desktop/hyprland/keybinds.nix b/modules/desktop/hyprland/keybinds.nix new file mode 100644 index 000000000..2e2e9ac2d --- /dev/null +++ b/modules/desktop/hyprland/keybinds.nix @@ -0,0 +1,189 @@ +{ + config, + pkgs, + ... +}: { + wayland.windowManager.hyprland.settings = { + # Shell keybinds + bindi = [ + "Super, Super_L, Toggle overview, global, quickshell:overviewToggleRelease" + ]; + binditn = [ + "Super, catchall, global, quickshell:overviewToggleReleaseInterrupt" + "Ctrl, Super_L, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse:272, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse:273, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse:274, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse:275, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse:276, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse:277, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse_up, global, quickshell:overviewToggleReleaseInterrupt" + "Super, mouse_down, global, quickshell:overviewToggleReleaseInterrupt" + ]; + bindit = [ + ", Super_L, global, quickshell:workspaceNumber" + ]; + bindd = [ + # The Nix module for Hyprland doesn't use `bindd` as a separate type, + # but it's used in the config file to handle cheatsheet descriptions. + # We'll put these into the main `bind` list and resolve the duplicates. + # The `bindd` lines here were already duplicates of the `bind` lines + # in your previous example, so they were the source of the conflict. + # I am merging them into a single, comprehensive `bind` list below. + ]; + + # All unique keybindings are listed here. + bind = + [ + # Shell and QuickShell keybinds + "Super, V, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || cliphist list | fuzzel --match-mode fzf --dmenu | cliphist decode | wl-copy" + "Super, Period, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill fuzzel || ~/.config/hypr/hyprland/scripts/fuzzel-emoji.sh copy" + "Super, Tab, global, quickshell:overviewToggle" + "Super, A, global, quickshell:sidebarLeftToggle" + "Super+Alt, A, global, quickshell:sidebarLeftToggleDetach" + "Super, B, global, quickshell:sidebarLeftToggle" + "Super, O, global, quickshell:sidebarLeftToggle" + "Super, N, global, quickshell:sidebarRightToggle" + "Super, Slash, global, quickshell:ch+CtrleatsheetToggle" + "Super, M, global, quickshell:mediaControlsToggle" + "Ctrl+Alt, Delete, global, quickshell:sessionToggle" + "Ctrl+Alt, Delete, exec, qs -c $qsConfig ipc call TEST_ALIVE || pkill wlogout || wlogout -p layer-shell" + "Shift+Super+Alt, Slash, exec, qs -p ~/.config/quickshell/$qsConfig/welcome.qml" + + # Utilities keybinds + "Super+Shift, S, exec, qs -p ~/.config/quickshell/$qsConfig/screenshot.qml || pidof slurp || hyprshot --freeze --clipboard-only --mode region --silent" + "Super+Shift, T, exec, grim -g \"$(slurp $SLURP_ARGS)\" \"tmp.png\" && tesseract \"tmp.png\" - | wl-copy && rm \"tmp.png\"" + "Super+Shift, C, exec, hyprpicker -a" + "Super+Alt, R, exec, ~/.config/hypr/hyprland/scripts/record.sh" + "Ctrl+Alt, R, exec, ~/.config/hypr/hyprland/scripts/record.sh --fullscreen" + "Super+Shift+Alt, R, exec, ~/.config/hypr/hyprland/scripts/record.sh --fullscreen-sound" + "Super+Shift+Alt, mouse:273, exec, ~/.config/hypr/hyprland/scripts/ai/primary-buffer-query.sh" + "Ctrl+Super, T, exec, ~/.config/hypr/hyprland/scripts/colors/switchwall.sh" + "Ctrl+Super, R, exec, killall ags agsv1 gjs ydotool qs quickshell; qs -c $qsConfig &" + "Ctrl+Super, Backslash, resizeactive, exact 640 480" + "Super+Alt, f11, exec, bash -c 'RANDOM_IMAGE=$(find ~/Pictures -type f | grep -v -i \"nipple\" | grep -v -i \"pussy\" | shuf -n 1); ACTION=$(notify-send \"Test notification with body image\" \"This notification should contain your user account image and Discord icon. Oh and here is a random image in your Pictures folder: \\\"Testing\" -a \"Hyprland keybind\" -p -h \"string:image-path:/var/lib/AccountsService/icons/$USER\" -t 6000 -i \"discord\" -A \"openImage=Open profile image\" -A \"action2=Open the random image\" -A \"action3=Useless button\"); [[ $ACTION == *openImage ]] && xdg-open \"/var/lib/AccountsService/icons/$USER\"; [[ $ACTION == *action2 ]] && xdg-open \"$RANDOM_IMAGE\"'" + "Super+Alt, f12, exec, bash -c 'RANDOM_IMAGE=$(find ~/Pictures -type f | grep -v -i \"nipple\" | grep -v -i \"pussy\" | shuf -n 1); ACTION=$(notify-send \"Test notification\" \"This notification should contain a random image in your Pictures folder and Discord icon.\\nFlick right to dismiss!\" -a \"Discord (fake)\" -p -h \"string:image-path:$RANDOM_IMAGE\" -t 6000 -i \"discord\" -A \"openImage=Open profile image\" -A \"action2=Useless button\" -A \"action3=Cry more\"); [[ $ACTION == *openImage ]] && xdg-open \"/var/lib/AccountsService/icons/$USER\"'" + "Super+Alt, Equal, exec, notify-send \"Urgent notification\" \"Ah hell no\" -u critical -a 'Hyprland keybind'" + + # Window management + "Super, Q, killactive" + "Super+Shift+Alt, Q, exec, hyprctl kill" + "Super+Alt, Space, togglefloating" + "Super, D, fullscreen, 1" + "Super, F, fullscreen, 0" + "Super+Alt, F, fullscreenstate, 0 3" + "Super, P, pin" + "Super, S, togglespecialworkspace" + "Super+Alt, S, movetoworkspacesilent, special" + "Alt, Tab, cyclenext" + "Alt, Tab, bringactivetotop" + "Super, mouse:275, togglespecialworkspace" + + # Media + "Super+Shift, N, exec, playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + "Super+Shift, B, exec, playerctl previous" + "Super+Shift, P, exec, playerctl play-pause" + "Super+Shift+Alt, mouse:275, exec, playerctl previous" + "Super+Shift+Alt, mouse:276, exec, playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + + # Session + "Ctrl+Shift+Alt+Super, Delete, exec, systemctl poweroff || loginctl poweroff" + + # Apps + "Super, Return, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"$TERMINAL\" \"kitty -1\" \"foot\" \"alacritty\" \"wezterm\" \"konsole\" \"kgx\" \"uxterm\" \"xterm\"" + "Super, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"$TERMINAL\" \"kitty -1\" \"foot\" \"alacritty\" \"wezterm\" \"konsole\" \"kgx\" \"uxterm\" \"xterm\"" + "Ctrl+Alt, T, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"$TERMINAL\" \"kitty -1\" \"foot\" \"alacritty\" \"wezterm\" \"konsole\" \"kgx\" \"uxterm\" \"xterm\"" + "Super, E, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"dolphin\" \"nautilus\" \"nemo\" \"thunar\" \"$TERMINAL\" \"kitty -1 fish -c yazi\"" + "Super, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"google-chrome-stable\" \"zen-browser\" \"firefox\" \"brave\" \"chromium\" \"microsoft-edge-stable\" \"opera\" \"librewolf\"" + "Super, C, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"code\" \"codium\" \"cursor\" \"zed\" \"zedit\" \"zeditor\" \"kate\" \"gnome-text-editor\" \"emacs\" \"command -v nvim && kitty -1 nvim\"" + "Super+Shift, W, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"wps\" \"onlyoffice-desktopeditors\"" + "Super, X, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"kate\" \"gnome-text-editor\" \"emacs\"" + "Ctrl+Super, V, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"pavucontrol-qt\" \"pavucontrol\"" + "Super, I, exec, XDG_CURRENT_DESKTOP=gnome ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"qs -p ~/.config/quickshell/$qsConfig/settings.qml\" \"systemsettings\" \"gnome-control-center\" \"better-control\"" + "Ctrl+Shift, Escape, exec, ~/.config/hypr/hyprland/scripts/launch_first_available.sh \"gnome-system-monitor\" \"plasma-systemmonitor --page-name Processes\" \"command -v btop && kitty -1 fish -c btop\"" + + # Window movement and focus + "Super, Left, movefocus, l" + "Super, Right, movefocus, r" + "Super, Up, movefocus, u" + "Super, Down, movefocus, d" + "Super, BracketLeft, movefocus, l" + "Super, BracketRight, movefocus, r" + "Super+Shift, Left, movewindow, l" + "Super+Shift, Right, movewindow, r" + "Super+Shift, Up, movewindow, u" + "Super+Shift, Down, movewindow, d" + "Alt, F4, killactive" + "Super+Shift, mouse_down, movetoworkspace, r-1" + "Super+Shift, mouse_up, movetoworkspace, r+1" + "Super+Alt, mouse_down, movetoworkspace, -1" + "Super+Alt, mouse_up, movetoworkspace, +1" + "Super+Shift, Page_Down, movetoworkspace, r+1" + "Super+Shift, Page_Up, movetoworkspace, r-1" + "Ctrl+Super+Shift, Right, movetoworkspace, r+1" + "Ctrl+Super+Shift, Left, movetoworkspace, r-1" + "Ctrl+Super, Right, workspace, r+1" + "Ctrl+Super, Left, workspace, r-1" + "Ctrl+Super+Alt, Right, workspace, m+1" + "Ctrl+Super+Alt, Left, workspace, m-1" + "Super, Page_Down, workspace, +1" + "Super, Page_Up, workspace, -1" + "Ctrl+Super, Page_Down, workspace, r+1" + "Ctrl+Super, Page_Up, workspace, r-1" + "Super, mouse_up, workspace, +1" + "Super, mouse_down, workspace, -1" + "Ctrl+Super, mouse_up, workspace, r+1" + "Ctrl+Super, mouse_down, workspace, r-1" + + "Super+Alt, 0, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent 0" + "Super, 0, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace 0" + ] + ++ ( + builtins.concatLists (builtins.genList ( + i: let + ws = i + 1; + in [ + "Super+Alt, ${toString ws}, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh movetoworkspacesilent ${toString ws}" + "Super, ${toString ws}, exec, ~/.config/hypr/hyprland/scripts/workspace_action.sh workspace ${toString ws}" + ] + ) + 9) + ); + + # The `bindm` list is used for mouse modifiers. + bindm = [ + "Super, mouse:272, movewindow" + "Super, mouse:274, movewindow" + "Super, mouse:273, resizewindow" + ]; + + # The `bindl` list is for key release events. + bindl = [ + ", XF86MonBrightnessUp, exec, qs -c $qsConfig ipc call brightness increment || brightnessctl s 5%+" + ", XF86MonBrightnessDown, exec, qs -c $qsConfig ipc call brightness decrement || brightnessctl s 5%-" + ", XF86AudioRaiseVolume, exec, wpctl set-volume -l 1 @DEFAULT_AUDIO_SINK@ 2%+" + ", XF86AudioLowerVolume, exec, wpctl set-volume @DEFAULT_AUDIO_SINK@ 2%-" + ", XF86AudioMute, exec, wpctl set-mute @DEFAULT_SINK@ toggle" + "Super+Shift, M, exec, wpctl set-mute @DEFAULT_SINK@ toggle" + "Alt, XF86AudioMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle" + ", XF86AudioMicMute, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle" + "Super+Alt, M, exec, wpctl set-mute @DEFAULT_SOURCE@ toggle" + ", Print, exec, grim - | wl-copy" + "Ctrl, Print, exec, mkdir -p $(xdg-user-dir PICTURES)/Screenshots && grim $(xdg-user-dir PICTURES)/Screenshots/Screenshot_\"$(date '+%Y-%m-%d_%H.%M.%S')\".png" + ", XF86AudioNext, exec, playerctl next || playerctl position `bc <<< \"100 * $(playerctl metadata mpris:length) / 1000000 / 100\"`" + ", XF86AudioPrev, exec, playerctl previous" + ", XF86AudioPlay, exec, playerctl play-pause" + ", XF86AudioPause, exec, playerctl play-pause" + ]; + + # The `binde` list is for continuous events. + binde = [ + "Super, Semicolon, splitratio, -0.1" + "Super, Apostrophe, splitratio, +0.1" + "Super, Minus, exec, qs -c $qsConfig ipc call zoom zoomOut" + "Super, Equal, exec, qs -c $qsConfig ipc call zoom zoomIn" + "Super, Minus, exec, qs -c $qsConfig ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh decrease 0.1" + "Super, Equal, exec, qs -c $qsConfig ipc call TEST_ALIVE || ~/.config/hypr/hyprland/scripts/zoom.sh increase 0.1" + ]; + }; +} diff --git a/modules/desktop/hyprland/rules.nix b/modules/desktop/hyprland/rules.nix new file mode 100644 index 000000000..a707f5bbf --- /dev/null +++ b/modules/desktop/hyprland/rules.nix @@ -0,0 +1,153 @@ +{ + config, + pkgs, + ... +}: { + wayland.windowManager.hyprland.settings = { + windowrulev2 = [ + # Uncomment to apply global transparency to all windows: + # "opacity 0.89 override 0.89 override, class:.*" + + # Disable blur for xwayland context menus + "noblur, class:^()$,title:^()$" + "noblur, xwayland:1" + + # Floating + "float, class:^(blueberry\\.py)$" + "float, class:^(guifetch)$" + "float, class:^(pavucontrol)$" + "size 45%, class:^(pavucontrol)$" + "center, class:^(pavucontrol)$" + "float, class:^(org\\.pulseaudio\\.pavucontrol)$" + "size 45%, class:^(org\\.pulseaudio\\.pavucontrol)$" + "center, class:^(org\\.pulseaudio\\.pavucontrol)$" + "float, class:^(nm-connection-editor)$" + "size 45%, class:^(nm-connection-editor)$" + "center, class:^(nm-connection-editor)$" + "float, class:.*plasmawindowed.*" + "float, class:kcm_.*" + "float, class:.*bluedevilwizard" + "float, title:.*Welcome" + "float, title:^(illogical-impulse Settings)$" + "float, class:org.freedesktop.impl.portal.desktop.kde" + "float, class:^(Zotero)$" + "size 45%, class:^(Zotero)$" + + # Move + "float, class:^(plasma-changeicons)$" + "noinitialfocus, class:^(plasma-changeicons)$" + "move 999999 999999, class:^(plasma-changeicons)$" + "move 40 80, title:^(Copying — Dolphin)$" + + # Tiling + "tile, class:^dev\\.warp\\.Warp$" + + # Picture-in-Picture + "float, title:^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" + "keepaspectratio, title:^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" + "move 73% 72%, title:^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" + "size 25%, title:^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" + "pin, title:^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" + "float, title:^([Pp]icture[-\\s]?[Ii]n[-\\s]?[Pp]icture)(.*)$" + + # Dialog windows + "center, title:^(Open File)(.*)$" + "center, title:^(Select a File)(.*)$" + "center, title:^(Choose wallpaper)(.*)$" + "center, title:^(Open Folder)(.*)$" + "center, title:^(Save As)(.*)$" + "center, title:^(Library)(.*)$" + "center, title:^(File Upload)(.*)$" + "center, title:^(.*)(wants to save)$" + "center, title:^(.*)(wants to open)$" + "float, title:^(Open File)(.*)$" + "float, title:^(Select a File)(.*)$" + "float, title:^(Choose wallpaper)(.*)$" + "float, title:^(Open Folder)(.*)$" + "float, title:^(Save As)(.*)$" + "float, title:^(Library)(.*)$" + "float, title:^(File Upload)(.*)$" + "float, title:^(.*)(wants to save)$" + "float, title:^(.*)(wants to open)$" + + # Tearing + "immediate, title:.*\\.exe" + "immediate, title:.*minecraft.*" + "immediate, class:^(steam_app).*" + + # No shadow for tiled windows + "noshadow, floating:0" + ]; + + workspace = [ + "special:special, gapsout:30" + ]; + + layerrule = [ + "xray 1, .*" + # "noanim, .*" + "noanim, walker" + "noanim, selection" + "noanim, overview" + "noanim, anyrun" + "noanim, indicator.*" + "noanim, osk" + "noanim, hyprpicker" + "noanim, noanim" + "blur, gtk-layer-shell" + "ignorezero, gtk-layer-shell" + "blur, launcher" + "ignorealpha 0.5, launcher" + "blur, notifications" + "ignorealpha 0.69, notifications" + "blur, logout_dialog" + "animation slide left, sideleft.*" + "animation slide right, sideright.*" + "blur, session[0-9]*" + "blur, bar[0-9]*" + "ignorealpha 0.6, bar[0-9]*" + "blur, barcorner.*" + "ignorealpha 0.6, barcorner.*" + "blur, dock[0-9]*" + "ignorealpha 0.6, dock[0-9]*" + "blur, indicator.*" + "ignorealpha 0.6, indicator.*" + "blur, overview[0-9]*" + "ignorealpha 0.6, overview[0-9]*" + "blur, cheatsheet[0-9]*" + "ignorealpha 0.6, cheatsheet[0-9]*" + "blur, sideright[0-9]*" + "ignorealpha 0.6, sideright[0-9]*" + "blur, sideleft[0-9]*" + "ignorealpha 0.6, sideleft[0-9]*" + "blur, indicator.*" + "ignorealpha 0.6, indicator.*" + "blur, osk[0-9]*" + "ignorealpha 0.6, osk[0-9]*" + "blurpopups, quickshell:.*" + "blur, quickshell:.*" + "ignorealpha 0.79, quickshell:.*" + "animation slide top, quickshell:bar" + "animation fade, quickshell:screenCorners" + "animation slide right, quickshell:sidebarRight" + "animation slide left, quickshell:sidebarLeft" + "animation slide bottom, quickshell:osk" + "animation slide bottom, quickshell:dock" + "blur, quickshell:session" + "noanim, quickshell:session" + "ignorealpha 0, quickshell:session" + "animation fade, quickshell:notificationPopup" + "blur, quickshell:backgroundWidgets" + "ignorealpha 0.05, quickshell:backgroundWidgets" + "noanim, quickshell:screenshot" + "animation popin 120%, quickshell:screenCorners" + "noanim, quickshell:lockWindowPusher" + "noanim, quickshell:overview" + "noanim, gtk4-layer-shell" + "blur, shell:bar" + "ignorezero, shell:bar" + "blur, shell:notifications" + "ignorealpha 0.1, shell:notifications" + ]; + }; +} diff --git a/modules/options.nix b/modules/options.nix index cd3d78c64..e10c6891e 100644 --- a/modules/options.nix +++ b/modules/options.nix @@ -17,6 +17,15 @@ description = "Uses a custom pure-like starship configuration."; }; }; + hyprland = { + useNixForConf = { + enable = lib.mkOption { + type = lib.types.bool; + default = false; + description = "Use .nix files for hyprland setup instead of exporting .config/hypr. Useful for modifiable configurations."; + }; + }; + }; }; }; } diff --git a/modules/terminal/simpleStarship.nix b/modules/terminal/simpleStarship.nix new file mode 100644 index 000000000..a7c4c8509 --- /dev/null +++ b/modules/terminal/simpleStarship.nix @@ -0,0 +1,49 @@ +{lib, ...}: { + format = lib.concatStrings [ + "$username" + "$hostname" + "$directory" + "$git_branch" + "$git_state" + "$git_status" + "$cmd_duration" + "$line_break" + "$python" + "$character" + ]; + directory = { + style = "blue"; + }; + character = { + success_symbol = "[→](purple)"; + error_symbol = "[→](red)"; + vimcmd_symbol = "[←](green)"; + }; + git_branch = { + format = "[$branch]($style)"; + style = "bright-black"; + }; + git_status = { + format = "[(*$conflicted$untracked$modified$staged$renamed$deleted) $ahead_behind$stashed]($style)"; + style = "cyan"; + conflicted = "​"; + untracked = "​"; + modified = "​"; + staged = "​"; + renamed = "​"; + deleted = "​"; + stashed = "≡"; + }; + git_state = { + format = "([$state( $progress_current/$progress_total)]($style)) "; + style = "bright-black"; + }; + cmd_duration = { + format = "[$duration]($style) "; + style = "yellow"; + }; + python = { + format = "[$virtualenv]($style) "; + style = "bright-black"; + }; +} diff --git a/modules/terminal/terminal.nix b/modules/terminal/terminal.nix index f557cb3ee..3eca10092 100644 --- a/modules/terminal/terminal.nix +++ b/modules/terminal/terminal.nix @@ -4,6 +4,7 @@ ... }: let cfg = config.programs.illogical-impulse; + simpleStarshipSettings = import ./simpleStarship.nix {inherit lib;}; in { imports = [ ../options.nix @@ -12,55 +13,7 @@ in { config = lib.mkIf cfg.enable { programs.starship = lib.mkIf cfg.settings.simpleStarship.enable { enable = true; - settings = { - format = lib.concatStrings [ - "$username" - "$hostname" - "$directory" - "$git_branch" - "$git_state" - "$git_status" - "$cmd_duration" - "$line_break" - "$python" - "$character" - ]; - directory = { - style = "blue"; - }; - character = { - success_symbol = "[→](purple)"; - error_symbol = "[→](red)"; - vimcmd_symbol = "[←](green)"; - }; - git_branch = { - format = "[$branch]($style)"; - style = "bright-black"; - }; - git_status = { - format = "[(*$conflicted$untracked$modified$staged$renamed$deleted) $ahead_behind$stashed]($style)"; - style = "cyan"; - conflicted = "​"; - untracked = "​"; - modified = "​"; - staged = "​"; - renamed = "​"; - deleted = "​"; - stashed = "≡"; - }; - git_state = { - format = "([$state( $progress_current/$progress_total)]($style)) "; - style = "bright-black"; - }; - cmd_duration = { - format = "[$duration]($style) "; - style = "yellow"; - }; - python = { - format = "[$virtualenv]($style) "; - style = "bright-black"; - }; - }; + settings = simpleStarshipSettings; }; home.file.".config/starship.toml" = lib.mkIf (!cfg.settings.simpleStarship.enable) {