diff --git a/hosts/Garand-Desktop/variables.nix b/hosts/Garand-Desktop/variables.nix index d2994f9..4eeab71 100644 --- a/hosts/Garand-Desktop/variables.nix +++ b/hosts/Garand-Desktop/variables.nix @@ -19,13 +19,16 @@ # Availabe options: "fish", "bash" shell = "fish"; - # Hyprland Settings - # Examples: - # extraMonitorSettings = "monitor = Virtual-1,1920x1080@60,auto,1"; - # extraMonitorSettings = "monitor = HDMI-A-1,1920x1080@60,auto,1"; - # You can configure multiple monitors. - # Inside the quotes, create a new line for each monitor. - extraMonitorSettings = "monitor = DP-1,1920x1080@144,auto,1"; + # Hyprland monitors (Lua hl.monitor tables). + # Example: [{ output = "HDMI-A-1"; mode = "1920x1080@60"; position = "auto"; scale = 1; }] + extraMonitorSettings = [ + { + output = "DP-1"; + mode = "1920x1080@144"; + position = "auto"; + scale = 1; + } + ]; keyboardLayout = "pl"; consoleKeyMap = "pl"; diff --git a/hosts/Garand-Laptop/variables.nix b/hosts/Garand-Laptop/variables.nix index 1e4f4ae..12b31f4 100644 --- a/hosts/Garand-Laptop/variables.nix +++ b/hosts/Garand-Laptop/variables.nix @@ -19,13 +19,16 @@ # Availabe options: "fish", "bash" shell = "fish"; - # Hyprland Settings - # Examples: - # extraMonitorSettings = "monitor = Virtual-1,1920x1080@60,auto,1"; - # extraMonitorSettings = "monitor = HDMI-A-1,1920x1080@60,auto,1"; - # You can configure multiple monitors. - # Inside the quotes, create a new line for each monitor. - extraMonitorSettings = "monitor = eDP-1,1920x1080@60,auto,1"; + # Hyprland monitors (Lua hl.monitor tables). + # Example: [{ output = "HDMI-A-1"; mode = "1920x1080@60"; position = "auto"; scale = 1; }] + extraMonitorSettings = [ + { + output = "eDP-1"; + mode = "1920x1080@60"; + position = "auto"; + scale = 1; + } + ]; keyboardLayout = "pl"; consoleKeyMap = "pl"; diff --git a/hosts/default/variables.nix b/hosts/default/variables.nix index 066bfbf..e8f3aaa 100644 --- a/hosts/default/variables.nix +++ b/hosts/default/variables.nix @@ -19,15 +19,9 @@ # Availabe options: "fish", "bash" shell = "fish"; - # Hyprland Settings - # Examples: - # extraMonitorSettings = "monitor = Virtual-1,1920x1080@60,auto,1"; - # extraMonitorSettings = "monitor = HDMI-A-1,1920x1080@60,auto,1"; - # You can configure multiple monitors. - # Inside the quotes, create a new line for each monitor. - extraMonitorSettings = " - - "; + # Hyprland monitors (Lua hl.monitor tables). + # Example: [{ output = "HDMI-A-1"; mode = "1920x1080@60"; position = "auto"; scale = 1; }] + extraMonitorSettings = []; keyboardLayout = "pl"; consoleKeyMap = "pl"; diff --git a/modules/home/hyprland/animations.nix b/modules/home/hyprland/animations.nix index ececa45..27a0cfa 100644 --- a/modules/home/hyprland/animations.nix +++ b/modules/home/hyprland/animations.nix @@ -1,33 +1,200 @@ -_: { - wayland.windowManager.hyprland.settings.animations = { - enabled = true; - bezier = [ - "linear, 0, 0, 1, 1" - "md3_standard, 0.2, 0, 0, 1" - "md3_decel, 0.05, 0.7, 0.1, 1" - "md3_accel, 0.3, 0, 0.8, 0.15" - "overshot, 0.05, 0.9, 0.1, 1.1" - "crazyshot, 0.1, 1.5, 0.76, 0.92 " - "hyprnostretch, 0.05, 0.9, 0.1, 1.0" - "menu_decel, 0.1, 1, 0, 1" - "menu_accel, 0.38, 0.04, 1, 0.07" - "easeInOutCirc, 0.85, 0, 0.15, 1" - "easeOutCirc, 0, 0.55, 0.45, 1" - "easeOutExpo, 0.16, 1, 0.3, 1" - "softAcDecel, 0.26, 0.26, 0.15, 1" - "md2, 0.4, 0, 0.2, 1 # use with .2s duration" +{...}: { + wayland.windowManager.hyprland.settings = { + config.animations.enabled = true; + curve = [ + { + _args = [ + "linear" + { + type = "bezier"; + points = [[0 0] [1 1]]; + } + ]; + } + { + _args = [ + "md3_standard" + { + type = "bezier"; + points = [[0.2 0] [0 1]]; + } + ]; + } + { + _args = [ + "md3_decel" + { + type = "bezier"; + points = [[0.05 0.7] [0.1 1]]; + } + ]; + } + { + _args = [ + "md3_accel" + { + type = "bezier"; + points = [[0.3 0] [0.8 0.15]]; + } + ]; + } + { + _args = [ + "overshot" + { + type = "bezier"; + points = [[0.05 0.9] [0.1 1.1]]; + } + ]; + } + { + _args = [ + "crazyshot" + { + type = "bezier"; + points = [[0.1 1.5] [0.76 0.92]]; + } + ]; + } + { + _args = [ + "hyprnostretch" + { + type = "bezier"; + points = [[0.05 0.9] [0.1 1.0]]; + } + ]; + } + { + _args = [ + "menu_decel" + { + type = "bezier"; + points = [[0.1 1] [0 1]]; + } + ]; + } + { + _args = [ + "menu_accel" + { + type = "bezier"; + points = [[0.38 0.04] [1 0.07]]; + } + ]; + } + { + _args = [ + "easeInOutCirc" + { + type = "bezier"; + points = [[0.85 0] [0.15 1]]; + } + ]; + } + { + _args = [ + "easeOutCirc" + { + type = "bezier"; + points = [[0 0.55] [0.45 1]]; + } + ]; + } + { + _args = [ + "easeOutExpo" + { + type = "bezier"; + points = [[0.16 1] [0.3 1]]; + } + ]; + } + { + _args = [ + "softAcDecel" + { + type = "bezier"; + points = [[0.26 0.26] [0.15 1]]; + } + ]; + } + { + _args = [ + "md2" + { + type = "bezier"; + points = [[0.4 0] [0.2 1]]; + } + ]; + } ]; animation = [ - "windows, 1, 3, md3_decel, popin 60%" - "windowsIn, 1, 3, md3_decel, popin 60%" - "windowsOut, 1, 3, md3_accel, popin 60%" - "border, 1, 10, default" - "fade, 1, 3, md3_decel" - "layersIn, 1, 3, menu_decel, slide" - "layersOut, 1, 1.6, menu_accel" - "fadeLayersIn, 1, 2, menu_decel" - "fadeLayersOut, 1, 4.5, menu_accel" - "workspaces, 1, 7, menu_decel, slide" + { + leaf = "windows"; + enabled = true; + speed = 3; + bezier = "md3_decel"; + style = "popin 60%"; + } + { + leaf = "windowsIn"; + enabled = true; + speed = 3; + bezier = "md3_decel"; + style = "popin 60%"; + } + { + leaf = "windowsOut"; + enabled = true; + speed = 3; + bezier = "md3_accel"; + style = "popin 60%"; + } + { + leaf = "border"; + enabled = true; + speed = 10; + bezier = "default"; + } + { + leaf = "fade"; + enabled = true; + speed = 3; + bezier = "md3_decel"; + } + { + leaf = "layersIn"; + enabled = true; + speed = 3; + bezier = "menu_decel"; + style = "slide"; + } + { + leaf = "layersOut"; + enabled = true; + speed = 1.6; + bezier = "menu_accel"; + } + { + leaf = "fadeLayersIn"; + enabled = true; + speed = 2; + bezier = "menu_decel"; + } + { + leaf = "fadeLayersOut"; + enabled = true; + speed = 4.5; + bezier = "menu_accel"; + } + { + leaf = "workspaces"; + enabled = true; + speed = 7; + bezier = "menu_decel"; + style = "slide"; + } ]; }; } diff --git a/modules/home/hyprland/binds.nix b/modules/home/hyprland/binds.nix index de1515b..8cfdcad 100644 --- a/modules/home/hyprland/binds.nix +++ b/modules/home/hyprland/binds.nix @@ -6,155 +6,840 @@ desktopEntriesPath = "/home/${username}/.local/state/home-manager/gcroots/current-home/home-path/share/applications/"; mainBinds = [ - "SUPER, A, exec, anki #\"Flashcard learning application\"" - "SUPER, B, exec, noctalia msg panel-toggle launcher \"/bw \" #\"Password manager\"" - "SUPER, C, exec, chromium #\"Ungoogled Chromium\"" - "SUPER, D, exec, vesktop #\"Discord client\"" - "SUPER, E, exec, noctalia msg panel-toggle launcher \"/emo \" #\"Emoji picker\"" - "SUPER, Escape, exec, noctalia msg session lock #\"Lock the screen\"" - "SUPER, G, exec, affinity-v3 #\"Graphics editor\"" - "SUPER, H, exec, helium #\"Helium web browser\"" - "SUPER, I, exec, iotas #\"Note-taking app\"" - "SUPER, J, exec, Jan #\"Local AI chat interface\"" - "SUPER, K, exec, gnome-calculator #\"Scientific calculator\"" - "SUPER, L, exec, logseq #\"Knowledge management tool\"" - "SUPER, M, exec, dex ${desktopEntriesPath}/messenger.desktop #\"Facebook Messenger client\"" - "SUPER, N, exec, dex ${desktopEntriesPath}/garandcloud.desktop #\"GarandCloud client\"" - "SUPER, O, exec, onlyoffice-desktopeditors #\"Office suite\"" - "SUPER, P, exec, plex-desktop #\"Plex media player\"" - "SUPER, R, exec, noctalia msg plugin noctalia/screen_recorder:service all replay-save #\"Save Replay\"" - "SUPER, Return, exec, kitty #\"Kitty terminal\"" - "SUPER, S, exec, steam #\"Steam Game launcher\"" - "SUPER, T, exec, thunar #\"File manager\"" - "SUPER, V, exec, codium #\"VS Codium\"" - "SUPER, W, exec, librewolf #\"Main Web browser (Librewolf)\"" - "SUPER, Z, exec, zeditor #\"Zed IDE\"" + { + _args = [ + "SUPER + A" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"anki\")") + {description = "Flashcard learning application";} + ]; + } + { + _args = [ + "SUPER + B" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle launcher \\\"/bw \\\"\")") + {description = "Password manager";} + ]; + } + { + _args = [ + "SUPER + C" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"chromium\")") + {description = "Ungoogled Chromium";} + ]; + } + { + _args = [ + "SUPER + D" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"vesktop\")") + {description = "Discord client";} + ]; + } + { + _args = [ + "SUPER + E" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle launcher \\\"/emo \\\"\")") + {description = "Emoji picker";} + ]; + } + { + _args = [ + "SUPER + Escape" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg session lock\")") + {description = "Lock the screen";} + ]; + } + { + _args = [ + "SUPER + G" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"affinity-v3\")") + {description = "Graphics editor";} + ]; + } + { + _args = [ + "SUPER + H" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"helium\")") + {description = "Helium web browser";} + ]; + } + { + _args = [ + "SUPER + I" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"iotas\")") + {description = "Note-taking app";} + ]; + } + { + _args = [ + "SUPER + J" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"Jan\")") + {description = "Local AI chat interface";} + ]; + } + { + _args = [ + "SUPER + K" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"gnome-calculator\")") + {description = "Scientific calculator";} + ]; + } + { + _args = [ + "SUPER + L" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"logseq\")") + {description = "Knowledge management tool";} + ]; + } + { + _args = [ + "SUPER + M" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/messenger.desktop\")") + {description = "Facebook Messenger client";} + ]; + } + { + _args = [ + "SUPER + N" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/garandcloud.desktop\")") + {description = "GarandCloud client";} + ]; + } + { + _args = [ + "SUPER + O" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"onlyoffice-desktopeditors\")") + {description = "Office suite";} + ]; + } + { + _args = [ + "SUPER + P" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"plex-desktop\")") + {description = "Plex media player";} + ]; + } + { + _args = [ + "SUPER + R" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg plugin noctalia/screen_recorder:service all replay-save\")") + {description = "Save Replay";} + ]; + } + { + _args = [ + "SUPER + Return" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"kitty\")") + {description = "Kitty terminal";} + ]; + } + { + _args = [ + "SUPER + S" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"steam\")") + {description = "Steam Game launcher";} + ]; + } + { + _args = [ + "SUPER + T" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"thunar\")") + {description = "File manager";} + ]; + } + { + _args = [ + "SUPER + V" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"codium\")") + {description = "VS Codium";} + ]; + } + { + _args = [ + "SUPER + W" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"librewolf\")") + {description = "Main Web browser (Librewolf)";} + ]; + } + { + _args = [ + "SUPER + Z" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"zeditor\")") + {description = "Zed IDE";} + ]; + } ]; shiftBinds = [ - "SUPER SHIFT, C, exec, dex ${desktopEntriesPath}/claude.desktop #\"Claude AI chat\"" - "SUPER SHIFT, E, exec, evolution #\"Personal information management application\"" - "SUPER SHIFT, Escape, exec, noctalia msg panel-toggle session #\"Open Session Menu\"" - "SUPER SHIFT, G, exec, dex ${desktopEntriesPath}/chatgpt.desktop #\"ChatGPT AI chat\"" - "SUPER SHIFT, J, exec, dex ${desktopEntriesPath}/jellyfinClient.desktop #\"Jellyfin PWA\"" - "SUPER SHIFT, K, exec, noctalia msg panel-toggle kenn/keybind-cheatsheet:cheatsheet #\"Toggle keybind cheatsheet\"" - "SUPER SHIFT, M, exec, plexamp #\"Music player for Plex\"" - "SUPER SHIFT, N, exec, nextcloud #\"Nextcloud desktop sync client\"" - "SUPER SHIFT, O, exec, obs #\"Open Broadcaster Software\"" - "SUPER SHIFT, P, exec, pavucontrol #\"Toggle volume control panel\"" - "SUPER SHIFT, R, exec, noctalia msg config-reload #\"Restart Noctalia shell\"" - "SUPER SHIFT, Return, exec, noctalia msg panel-toggle launcher #\"Toggle application launcher\"" - "SUPER SHIFT, S, exec, noctalia msg screenshot-region #\"Take screenshot\"" - "SUPER SHIFT, T, exec, tutanota-desktop #\"Tutanota encrypted email client\"" - "SUPER SHIFT, V, exec, noctalia msg panel-toggle clipboard #\"Open clipboard manager\"" + { + _args = [ + "SUPER + SHIFT + C" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/claude.desktop\")") + {description = "Claude AI chat";} + ]; + } + { + _args = [ + "SUPER + SHIFT + E" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"evolution\")") + {description = "Personal information management application";} + ]; + } + { + _args = [ + "SUPER + SHIFT + Escape" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle session\")") + {description = "Open Session Menu";} + ]; + } + { + _args = [ + "SUPER + SHIFT + G" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/chatgpt.desktop\")") + {description = "ChatGPT AI chat";} + ]; + } + { + _args = [ + "SUPER + SHIFT + J" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/jellyfinClient.desktop\")") + {description = "Jellyfin PWA";} + ]; + } + { + _args = [ + "SUPER + SHIFT + K" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle kenn/keybind-cheatsheet:cheatsheet\")") + {description = "Toggle keybind cheatsheet";} + ]; + } + { + _args = [ + "SUPER + SHIFT + M" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"plexamp\")") + {description = "Music player for Plex";} + ]; + } + { + _args = [ + "SUPER + SHIFT + N" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"nextcloud\")") + {description = "Nextcloud desktop sync client";} + ]; + } + { + _args = [ + "SUPER + SHIFT + O" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"obs\")") + {description = "Open Broadcaster Software";} + ]; + } + { + _args = [ + "SUPER + SHIFT + P" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"pavucontrol\")") + {description = "Toggle volume control panel";} + ]; + } + { + _args = [ + "SUPER + SHIFT + R" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg config-reload\")") + {description = "Restart Noctalia shell";} + ]; + } + { + _args = [ + "SUPER + SHIFT + Return" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle launcher\")") + {description = "Toggle application launcher";} + ]; + } + { + _args = [ + "SUPER + SHIFT + S" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg screenshot-region\")") + {description = "Take screenshot";} + ]; + } + { + _args = [ + "SUPER + SHIFT + T" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"tutanota-desktop\")") + {description = "Tutanota encrypted email client";} + ]; + } + { + _args = [ + "SUPER + SHIFT + V" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle clipboard\")") + {description = "Open clipboard manager";} + ]; + } ]; altBinds = [ - "SUPER ALT, C, exec, noctalia msg panel-toggle control-center [tab] #\"Toggle control center\"" - "SUPER ALT, F, exec, finamp #\"Jellyfin music client\"" - "SUPER ALT, G, exec, dex ${desktopEntriesPath}/glance.desktop #\"Glance server panel\"" - "SUPER ALT, K, exec, kdenlive #\"Video editing software\"" - "SUPER ALT, M, exec, dex ${desktopEntriesPath}/mastodon.desktop #\"Mastodon social network client\"" - "SUPER ALT, N, exec, noctalia msg panel-toggle avivbintangaringga/nix-monitor:panel #\"Open nix-monitor\"" - "SUPER ALT, O, exec, obsidian #\"Notes app\"" - "SUPER ALT, P, exec, noctalia msg settings-open #\"Open settings panel\"" - "SUPER ALT, R, exec, noctalia msg plugin noctalia/screen_recorder:service all replay-toggle #\"Toggle Replay\"" - "SUPER ALT, S, exec, slack #\"Slack team communication tool\"" - "SUPER ALT, T, exec, gedit #\"GNOME text editor\"" - "SUPER ALT, W, exec, noctalia msg panel-toggle wallpaper #\"Toggle wallpaper\"" + { + _args = [ + "SUPER + ALT + C" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle control-center [tab]\")") + {description = "Toggle control center";} + ]; + } + { + _args = [ + "SUPER + ALT + F" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"finamp\")") + {description = "Jellyfin music client";} + ]; + } + { + _args = [ + "SUPER + ALT + G" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/glance.desktop\")") + {description = "Glance server panel";} + ]; + } + { + _args = [ + "SUPER + ALT + K" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"kdenlive\")") + {description = "Video editing software";} + ]; + } + { + _args = [ + "SUPER + ALT + M" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/mastodon.desktop\")") + {description = "Mastodon social network client";} + ]; + } + { + _args = [ + "SUPER + ALT + N" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle avivbintangaringga/nix-monitor:panel\")") + {description = "Open nix-monitor";} + ]; + } + { + _args = [ + "SUPER + ALT + O" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"obsidian\")") + {description = "Notes app";} + ]; + } + { + _args = [ + "SUPER + ALT + P" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg settings-open\")") + {description = "Open settings panel";} + ]; + } + { + _args = [ + "SUPER + ALT + R" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg plugin noctalia/screen_recorder:service all replay-toggle\")") + {description = "Toggle Replay";} + ]; + } + { + _args = [ + "SUPER + ALT + S" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"slack\")") + {description = "Slack team communication tool";} + ]; + } + { + _args = [ + "SUPER + ALT + T" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"gedit\")") + {description = "GNOME text editor";} + ]; + } + { + _args = [ + "SUPER + ALT + W" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle wallpaper\")") + {description = "Toggle wallpaper";} + ]; + } ]; controlBinds = [ - "SUPER CONTROL, C, exec, noctalia msg power-cycle #\"Cycle through power profiles\"" - "SUPER CONTROL, F, exec, noctalia msg panel-toggle nightwatch75/file-search:panel #\"File search\"" - "SUPER CONTROL, G, exec, gimp #\"GNU Image Manipulation Program\"" - "SUPER CONTROL, M, exec, mattermost-desktop #\"Mattermost team chat client\"" - # "SUPER CONTROL, N, exec, noctalia-shell ipc call plugin:ntfy-notifications refresh #\"Refresh ntfy\"" - "SUPER CONTROL, O, exec, dex ${desktopEntriesPath}/openWebUI.desktop #\"My own AI chat interface\"" - "SUPER CONTROL, R, exec, noctalia msg plugin noctalia/screen_recorder:service all toggle #\"Toogle screen recording\"" - "SUPER CONTROL, S, exec, signal-desktop #\"Signal encrypted messaging\"" - "SUPER CONTROL, T, exec, tsukimi #\"A simple Emby/Jellyfin Client\"" - "SUPER CONTROL, P, exec, noctalia msg panel-toggle oldirtty/color_picker:panel #\"Pick color from screen\"" + { + _args = [ + "SUPER + CONTROL + C" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg power-cycle\")") + {description = "Cycle through power profiles";} + ]; + } + { + _args = [ + "SUPER + CONTROL + F" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle nightwatch75/file-search:panel\")") + {description = "File search";} + ]; + } + { + _args = [ + "SUPER + CONTROL + G" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"gimp\")") + {description = "GNU Image Manipulation Program";} + ]; + } + { + _args = [ + "SUPER + CONTROL + M" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"mattermost-desktop\")") + {description = "Mattermost team chat client";} + ]; + } + # { + # _args = [ + # "SUPER + CONTROL + N" + # (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia-shell ipc call plugin:ntfy-notifications refresh\")") + # {description = "Refresh ntfy";} + # ]; + # } + { + _args = [ + "SUPER + CONTROL + O" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"dex ${desktopEntriesPath}/openWebUI.desktop\")") + {description = "My own AI chat interface";} + ]; + } + { + _args = [ + "SUPER + CONTROL + R" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg plugin noctalia/screen_recorder:service all toggle\")") + {description = "Toogle screen recording";} + ]; + } + { + _args = [ + "SUPER + CONTROL + S" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"signal-desktop\")") + {description = "Signal encrypted messaging";} + ]; + } + { + _args = [ + "SUPER + CONTROL + T" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"tsukimi\")") + {description = "A simple Emby/Jellyfin Client";} + ]; + } + { + _args = [ + "SUPER + CONTROL + P" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg panel-toggle oldirtty/color_picker:panel\")") + {description = "Pick color from screen";} + ]; + } ]; windowManagementBinds = [ - "SUPER, F, fullscreen, #\"Toggle fullscreen mode\"" - "SUPER, Q, killactive, #\"Close active window\"" - # "SUPER SHIFT, I, togglesplit, #\"Toggle split layout\"" - "SUPER SHIFT, F, togglefloating, #\"Toggle floating mode\"" + { + _args = [ + "SUPER + F" + (lib.generators.mkLuaInline "hl.dsp.window.fullscreen({ action = \"toggle\" })") + {description = "Toggle fullscreen mode";} + ]; + } + { + _args = [ + "SUPER + Q" + (lib.generators.mkLuaInline "hl.dsp.window.close()") + {description = "Close active window";} + ]; + } + # { + # _args = [ + # "SUPER + SHIFT + I" + # (lib.generators.mkLuaInline "hl.dsp.window.float({ action = \"togglesplit\" })") + # {description = "Toggle split layout";} + # ]; + # } + { + _args = [ + "SUPER + SHIFT + F" + (lib.generators.mkLuaInline "hl.dsp.window.float({ action = \"toggle\" })") + {description = "Toggle floating mode";} + ]; + } ]; windowFocusBinds = [ - "SUPER, down, movefocus, d #\"Move focus down\"" - "SUPER, left, movefocus, l #\"Move focus left\"" - "SUPER, right, movefocus, r #\"Move focus right\"" - "SUPER, up, movefocus, u #\"Move focus up\"" + { + _args = [ + "SUPER + down" + (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"down\" })") + {description = "Move focus down";} + ]; + } + { + _args = [ + "SUPER + left" + (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"left\" })") + {description = "Move focus left";} + ]; + } + { + _args = [ + "SUPER + right" + (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"right\" })") + {description = "Move focus right";} + ]; + } + { + _args = [ + "SUPER + up" + (lib.generators.mkLuaInline "hl.dsp.focus({ direction = \"up\" })") + {description = "Move focus up";} + ]; + } ]; windowMovementBinds = [ - "SUPER SHIFT, down, movewindow, d #\"Move window down\"" - "SUPER SHIFT, left, movewindow, l #\"Move window left\"" - "SUPER SHIFT, right, movewindow, r #\"Move window right\"" - "SUPER SHIFT, up, movewindow, u #\"Move window up\"" + { + _args = [ + "SUPER + SHIFT + down" + (lib.generators.mkLuaInline "hl.dsp.window.move({ direction = \"down\" })") + {description = "Move window down";} + ]; + } + { + _args = [ + "SUPER + SHIFT + left" + (lib.generators.mkLuaInline "hl.dsp.window.move({ direction = \"left\" })") + {description = "Move window left";} + ]; + } + { + _args = [ + "SUPER + SHIFT + right" + (lib.generators.mkLuaInline "hl.dsp.window.move({ direction = \"right\" })") + {description = "Move window right";} + ]; + } + { + _args = [ + "SUPER + SHIFT + up" + (lib.generators.mkLuaInline "hl.dsp.window.move({ direction = \"up\" })") + {description = "Move window up";} + ]; + } ]; windowSwapBinds = [ - "SUPER ALT, down, swapwindow, d #\"Swap active window with window below\"" - "SUPER ALT, left, swapwindow, l #\"Swap active window with window on the left\"" - "SUPER ALT, right, swapwindow, r #\"Swap active window with window on the right\"" - "SUPER ALT, up, swapwindow, u #\"Swap active window with window above\"" + { + _args = [ + "SUPER + ALT + down" + (lib.generators.mkLuaInline "hl.dsp.window.swap({ direction = \"down\" })") + {description = "Swap active window with window below";} + ]; + } + { + _args = [ + "SUPER + ALT + left" + (lib.generators.mkLuaInline "hl.dsp.window.swap({ direction = \"left\" })") + {description = "Swap active window with window on the left";} + ]; + } + { + _args = [ + "SUPER + ALT + right" + (lib.generators.mkLuaInline "hl.dsp.window.swap({ direction = \"right\" })") + {description = "Swap active window with window on the right";} + ]; + } + { + _args = [ + "SUPER + ALT + up" + (lib.generators.mkLuaInline "hl.dsp.window.swap({ direction = \"up\" })") + {description = "Swap active window with window above";} + ]; + } ]; workspacesSwitchBinds = [ - "SUPER, 0, workspace, 10 #\"Switch to workspace 10\"" - "SUPER, 1, workspace, 1 #\"Switch to workspace 1\"" - "SUPER, 2, workspace, 2 #\"Switch to workspace 2\"" - "SUPER, 3, workspace, 3 #\"Switch to workspace 3\"" - "SUPER, 4, workspace, 4 #\"Switch to workspace 4\"" - "SUPER, 5, workspace, 5 #\"Switch to workspace 5\"" - "SUPER, 6, workspace, 6 #\"Switch to workspace 6\"" - "SUPER, 7, workspace, 7 #\"Switch to workspace 7\"" - "SUPER, 8, workspace, 8 #\"Switch to workspace 8\"" - "SUPER, 9, workspace, 9 #\"Switch to workspace 9\"" - "SUPER CONTROL, left, workspace, e-1 #\"Switch to previous workspace\"" - "SUPER CONTROL, right, workspace, e+1 #\"Switch to next workspace\"" - "SUPER, mouse_down, workspace, e+1 #\"Switch to next workspace with mouse\"" - "SUPER, mouse_up, workspace, e-1 #\"Switch to previous workspace with mouse\"" + { + _args = [ + "SUPER + 0" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 10 })") + {description = "Switch to workspace 10";} + ]; + } + { + _args = [ + "SUPER + 1" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 1 })") + {description = "Switch to workspace 1";} + ]; + } + { + _args = [ + "SUPER + 2" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 2 })") + {description = "Switch to workspace 2";} + ]; + } + { + _args = [ + "SUPER + 3" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 3 })") + {description = "Switch to workspace 3";} + ]; + } + { + _args = [ + "SUPER + 4" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 4 })") + {description = "Switch to workspace 4";} + ]; + } + { + _args = [ + "SUPER + 5" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 5 })") + {description = "Switch to workspace 5";} + ]; + } + { + _args = [ + "SUPER + 6" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 6 })") + {description = "Switch to workspace 6";} + ]; + } + { + _args = [ + "SUPER + 7" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 7 })") + {description = "Switch to workspace 7";} + ]; + } + { + _args = [ + "SUPER + 8" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 8 })") + {description = "Switch to workspace 8";} + ]; + } + { + _args = [ + "SUPER + 9" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = 9 })") + {description = "Switch to workspace 9";} + ]; + } + { + _args = [ + "SUPER + CONTROL + left" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = \"e-1\" })") + {description = "Switch to previous workspace";} + ]; + } + { + _args = [ + "SUPER + CONTROL + right" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = \"e+1\" })") + {description = "Switch to next workspace";} + ]; + } + { + _args = [ + "SUPER + mouse_down" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = \"e+1\" })") + {description = "Switch to next workspace with mouse";} + ]; + } + { + _args = [ + "SUPER + mouse_up" + (lib.generators.mkLuaInline "hl.dsp.focus({ workspace = \"e-1\" })") + {description = "Switch to previous workspace with mouse";} + ]; + } ]; workspacesSwapBinds = [ - "SUPER SHIFT, 0, movetoworkspace, 10 #\"Move active window to workspace 10\"" - "SUPER SHIFT, 1, movetoworkspace, 1 #\"Move active window to workspace 1\"" - "SUPER SHIFT, 2, movetoworkspace, 2 #\"Move active window to workspace 2\"" - "SUPER SHIFT, 3, movetoworkspace, 3 #\"Move active window to workspace 3\"" - "SUPER SHIFT, 4, movetoworkspace, 4 #\"Move active window to workspace 4\"" - "SUPER SHIFT, 5, movetoworkspace, 5 #\"Move active window to workspace 5\"" - "SUPER SHIFT, 6, movetoworkspace, 6 #\"Move active window to workspace 6\"" - "SUPER SHIFT, 7, movetoworkspace, 7 #\"Move active window to workspace 7\"" - "SUPER SHIFT, 8, movetoworkspace, 8 #\"Move active window to workspace 8\"" - "SUPER SHIFT, 9, movetoworkspace, 9 #\"Move active window to workspace 9\"" + { + _args = [ + "SUPER + SHIFT + 0" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 10 })") + {description = "Move active window to workspace 10";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 1" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 1 })") + {description = "Move active window to workspace 1";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 2" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 2 })") + {description = "Move active window to workspace 2";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 3" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 3 })") + {description = "Move active window to workspace 3";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 4" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 4 })") + {description = "Move active window to workspace 4";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 5" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 5 })") + {description = "Move active window to workspace 5";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 6" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 6 })") + {description = "Move active window to workspace 6";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 7" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 7 })") + {description = "Move active window to workspace 7";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 8" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 8 })") + {description = "Move active window to workspace 8";} + ]; + } + { + _args = [ + "SUPER + SHIFT + 9" + (lib.generators.mkLuaInline "hl.dsp.window.move({ workspace = 9 })") + {description = "Move active window to workspace 9";} + ]; + } ]; - systemMediaAndControllsBinds = [ - ",XF86AudioLowerVolume, exec, noctalia msg volume-down #\"Lower system volume\"" - ",XF86AudioMute, exec, noctalia msg volume-mute #\"Mute audio output\"" - ",XF86AudioMicMute, exec, noctalia msg mic-mute #\"Mute audio input\"" - ",XF86AudioNext, exec, noctalia msg media next #\"Next media track\"" - ",XF86AudioPlay, exec, noctalia msg media toggle #\"Play/Pause media\"" - ",XF86AudioPrev, exec, noctalia msg media previous #\"Previous media track\"" - ",XF86AudioRaiseVolume, exec, noctalia msg volume-up #\"Raise system volume\"" - ",XF86MonBrightnessDown, exec, noctalia msg brightness-down #\"Decrease screen brightness\"" - ",XF86MonBrightnessUp, exec, noctalia msg brightness-up #\"Increase screen brightness\"" + systemMediaAndControlsBinds = [ + { + _args = [ + "XF86AudioLowerVolume" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg volume-down\")") + {description = "Lower system volume";} + ]; + } + { + _args = [ + "XF86AudioMute" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg volume-mute\")") + {description = "Mute audio output";} + ]; + } + { + _args = [ + "XF86AudioMicMute" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg mic-mute\")") + {description = "Mute audio input";} + ]; + } + { + _args = [ + "XF86AudioNext" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg media next\")") + {description = "Next media track";} + ]; + } + { + _args = [ + "XF86AudioPlay" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg media toggle\")") + {description = "Play/Pause media";} + ]; + } + { + _args = [ + "XF86AudioPrev" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg media previous\")") + {description = "Previous media track";} + ]; + } + { + _args = [ + "XF86AudioRaiseVolume" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg volume-up\")") + {description = "Raise system volume";} + ]; + } + { + _args = [ + "XF86MonBrightnessDown" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg brightness-down\")") + {description = "Decrease screen brightness";} + ]; + } + { + _args = [ + "XF86MonBrightnessUp" + (lib.generators.mkLuaInline "hl.dsp.exec_cmd(\"noctalia msg brightness-up\")") + {description = "Increase screen brightness";} + ]; + } ]; - mkBlock = header: lines: + mouseBinds = [ + { + _args = [ + "SUPER + mouse:272" + (lib.generators.mkLuaInline "hl.dsp.window.drag()") + { + mouse = true; + description = "Drag active window"; + } + ]; + } + { + _args = [ + "SUPER + mouse:273" + (lib.generators.mkLuaInline "hl.dsp.window.resize()") + { + mouse = true; + description = "Resize active window"; + } + ]; + } + ]; + + toLua = lib.generators.toLua {}; + + # Noctalia scans numbered Lua headings and bare description fields. + mkBlock = header: binds: lib.concatLines ( - ["# ${header}"] - ++ (map (l: "bind = ${l}") lines) + ["-- ${header}"] + ++ map (bind: let + args = lib.concatMapStringsSep ", " toLua (lib.take 2 bind._args); + options = lib.concatStringsSep ", " ( + lib.mapAttrsToList (name: value: "${name} = ${toLua value}") (builtins.elemAt bind._args 2) + ); + in "hl.bind(${args}, { ${options} })") + binds ); - - fullConfig = lib.concatLines [ - "" +in { + wayland.windowManager.hyprland.extraConfig = lib.concatLines [ (mkBlock "1. MAIN APPS" mainBinds) (mkBlock "2. SHIFT APPS" shiftBinds) (mkBlock "3. ALT APPS" altBinds) @@ -165,15 +850,7 @@ (mkBlock "8. WINDOWS SWAP" windowSwapBinds) (mkBlock "9. WORKSPACES SWITCH" workspacesSwitchBinds) (mkBlock "10. WORKSPACES SWAP" workspacesSwapBinds) - (mkBlock "11. SYSTEM MEDIA & CONTROLS" systemMediaAndControllsBinds) + (mkBlock "11. SYSTEM MEDIA & CONTROLS" systemMediaAndControlsBinds) + (mkBlock "12. MOUSE" mouseBinds) ]; -in { - wayland.windowManager.hyprland.settings = { - extraConfig = fullConfig; - - bindm = [ - "SUPER, mouse:272, movewindow" - "SUPER, mouse:273, resizewindow" - ]; - }; } diff --git a/modules/home/hyprland/env.nix b/modules/home/hyprland/env.nix index d81a1b0..5d2fb76 100644 --- a/modules/home/hyprland/env.nix +++ b/modules/home/hyprland/env.nix @@ -1,28 +1,112 @@ -_: { +{...}: { wayland.windowManager.hyprland.settings.env = [ - "NIXOS_OZONE_WL, 1" - "NIXPKGS_ALLOW_UNFREE, 1" - "XDG_CURRENT_DESKTOP, Hyprland" - "XDG_SESSION_TYPE, wayland" - "XDG_SESSION_DESKTOP, Hyprland" - "GDK_BACKEND, wayland, x11" - "CLUTTER_BACKEND, wayland" - "QT_QPA_PLATFORM=wayland;xcb" - "QT_WAYLAND_DISABLE_WINDOWDECORATION, 1" - "QT_AUTO_SCREEN_SCALE_FACTOR, 1" - "SDL_VIDEODRIVER, x11" - "MOZ_ENABLE_WAYLAND, 1" - # This is to make electron apps start in wayland - "ELECTRON_OZONE_PLATFORM_HINT,wayland" - # Disabling this by default as it can result in inop cfg - # Added card2 in case this gets enabled. For better coverage - # This is mostly needed by Hybrid laptops. - # but if you have multiple discrete GPUs this will set order - #"AQ_DRM_DEVICES,/dev/dri/card0:/dev/dri/card1:/dev/card2" - "GDK_SCALE,1" - "QT_SCALE_FACTOR,1" - "EDITOR,nano" - "TERMINAL,kitty" - "XDG_TERMINAL_EMULATOR,kitty" + { + _args = [ + "NIXOS_OZONE_WL" + "1" + ]; + } + { + _args = [ + "NIXPKGS_ALLOW_UNFREE" + "1" + ]; + } + { + _args = [ + "XDG_CURRENT_DESKTOP" + "Hyprland" + ]; + } + { + _args = [ + "XDG_SESSION_TYPE" + "wayland" + ]; + } + { + _args = [ + "XDG_SESSION_DESKTOP" + "Hyprland" + ]; + } + { + _args = [ + "GDK_BACKEND" + "wayland, x11" + ]; + } + { + _args = [ + "CLUTTER_BACKEND" + "wayland" + ]; + } + { + _args = [ + "QT_QPA_PLATFORM" + "wayland;xcb" + ]; + } + { + _args = [ + "QT_WAYLAND_DISABLE_WINDOWDECORATION" + "1" + ]; + } + { + _args = [ + "QT_AUTO_SCREEN_SCALE_FACTOR" + "1" + ]; + } + { + _args = [ + "SDL_VIDEODRIVER" + "x11" + ]; + } + { + _args = [ + "MOZ_ENABLE_WAYLAND" + "1" + ]; + } + { + _args = [ + "ELECTRON_OZONE_PLATFORM_HINT" + "wayland" + ]; + } + { + _args = [ + "GDK_SCALE" + "1" + ]; + } + { + _args = [ + "QT_SCALE_FACTOR" + "1" + ]; + } + { + _args = [ + "EDITOR" + "nano" + ]; + } + { + _args = [ + "TERMINAL" + "kitty" + ]; + } + { + _args = [ + "XDG_TERMINAL_EMULATOR" + "kitty" + ]; + } ]; } diff --git a/modules/home/hyprland/exec-once.nix b/modules/home/hyprland/exec-once.nix index 19b4e83..ce84230 100644 --- a/modules/home/hyprland/exec-once.nix +++ b/modules/home/hyprland/exec-once.nix @@ -1,10 +1,6 @@ -_: { - wayland.windowManager.hyprland.settings.exec-once = [ - "dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" - "systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP" - "systemctl --user start hyprpolkitagent" - "noctalia" - "wl-paste --type text --watch cliphist store" # Saves text - "wl-paste --type image --watch cliphist store" # Saves images +{lib, ...}: { + wayland.windowManager.hyprland.settings.on._args = [ + "hyprland.start" + (lib.generators.mkLuaInline "function()\n hl.exec_cmd(\"dbus-update-activation-environment --all --systemd WAYLAND_DISPLAY XDG_CURRENT_DESKTOP\")\n hl.exec_cmd(\"systemctl --user import-environment WAYLAND_DISPLAY XDG_CURRENT_DESKTOP\")\n hl.exec_cmd(\"systemctl --user start hyprpolkitagent\")\n hl.exec_cmd(\"noctalia\")\n hl.exec_cmd(\"wl-paste --type text --watch cliphist store\")\n hl.exec_cmd(\"wl-paste --type image --watch cliphist store\")\nend") ]; } diff --git a/modules/home/hyprland/hyprland.nix b/modules/home/hyprland/hyprland.nix index 48b68fd..fafe4e9 100644 --- a/modules/home/hyprland/hyprland.nix +++ b/modules/home/hyprland/hyprland.nix @@ -19,20 +19,17 @@ wayland.windowManager.hyprland = { enable = true; package = pkgs.hyprland; - configType = "hyprlang"; # TODO: hyprlang => lua migration. + configType = "lua"; xwayland.enable = true; systemd = { enable = true; enableXdgAutostart = true; variables = ["--all"]; }; - settings = { + settings.config = { input = { kb_layout = "${keyboardLayout}"; - kb_options = [ - "grp:alt_caps_toggle" - "caps:super" - ]; + kb_options = "grp:alt_caps_toggle,caps:super"; numlock_by_default = true; repeat_delay = 300; follow_mouse = 1; @@ -144,11 +141,27 @@ xwayland.force_zero_scaling = true; }; - extraConfig = " - monitor=,preferred,auto,auto - monitor=Virtual-1,1920x1080@60,auto,1 - ${extraMonitorSettings} - layerrule = blur on, blur_popups on, ignore_alpha 0.5, match:namespace noctalia-background-\.*$ - "; + settings.monitor = + [ + { + output = ""; + mode = "preferred"; + position = "auto"; + scale = "auto"; + } + { + output = "Virtual-1"; + mode = "1920x1080@60"; + position = "auto"; + scale = 1; + } + ] + ++ extraMonitorSettings; + settings.layer_rule = { + match.namespace = "noctalia-background-\\..*$"; + blur = true; + blur_popups = true; + ignore_alpha = 0.5; + }; }; } diff --git a/modules/home/hyprland/windowrules.nix b/modules/home/hyprland/windowrules.nix index c1ec432..5ec8bbd 100644 --- a/modules/home/hyprland/windowrules.nix +++ b/modules/home/hyprland/windowrules.nix @@ -1,100 +1,318 @@ -_: { - wayland.windowManager.hyprland.settings.windowrule = [ - # XWayland specific rules - #"noblur, xwayland:1" # Helps prevent odd borders/shadows for xwayland apps - # downside it can impact other xwayland apps - # This rule is a template for a more targeted approach - "no_blur on, match:class resolve, match:xwayland 1" # Window rule for just resolve - - # Application tags - "tag +file-manager, match:class [Tt]hunar|org\.gnome\.Nautilus|[Pp]cmanfm-qt" - "tag +terminal, match:class com\.mitchellh\.ghostty|org\.wezfurlong\.wezterm|Alacritty|kitty|kitty-dropterm" - "tag +browser, match:class [Ff]irefox|org\.mozilla\.firefox|[Ff]irefox-esr" - "tag +browser, match:class [Ll]ibrewolf|io\.gitlab\.librewolf-community" - "tag +browser, match:class [Gg]oogle-chrome(-beta|-dev|-unstable)?|[Cc]hromium-browser(-beta|-dev|-unstable)?" - "tag +projects, match:class VSCode|code|code-url-handler|codium|codium-url-handler|VSCodium|VSCodium-url-handler" - "tag +projects, match:class dev\.zed\.Zed" - "tag +im, match:class [Dd]iscord|[Ww]ebCord|[Vv]esktop" - "tag +im, match:class [Ff]erdium" - "tag +im, match:class [Ss]ignal" - "tag +im, match:class [Ss]lack" - "tag +im, match:class [Tt]eams-for-linux" - "tag +games, match:class gamescope" - "tag +games, match:class ?:steam_app_\d+" - "tag +games, match:class tf_linux64" - "tag +games, match:class Minecraft\*.*" - "tag +gamestore, match:class [Ss]team" - "tag +gamestore, match:title [Ll]utris" - "tag +gamestore, match:class com\.heroicgameslauncher\.hgl" - "tag +gamestore, match:class org\.prismlauncher\.PrismLauncher" - "tag +settings, match:class gnome-disks|wihotspot(-gui)?" - "tag +settings, match:class [Rr]ofi" - "tag +settings, match:class file-roller|org\.gnome\.FileRoller" - "tag +settings, match:class nm-applet|nm-connection-editor" - "tag +settings, match:class pavucontrol|org\.pulseaudio\.pavucontrol|com\.saivert\.pwvucontrol" - "tag +settings, match:class nwg-look|qt5ct|qt6ct|[Yy]ad" - "tag +settings, match:class xdg-desktop-portal-gtk" - "tag +settings, match:class nwg-displays" - - # Position and movement rules - "move 72% 7%, match:title Picture-in-Picture" - "center on, match:class pavucontrol|org\.pulseaudio\.pavucontrol|com\.saivert\.pwvucontrol" - "center on, match:class [Tt]hunar, match:title negative:.*[Tt]hunar.*" - "center on, match:title Authentication Required" - "center on, match:class org\.gnome\.Calculator" - - # Idle inhibit rules - "idle_inhibit fullscreen, match:class .*" - "idle_inhibit fullscreen, match:title .*" - "idle_inhibit fullscreen, match:fullscreen 1" - - # Float rules - "float on, match:class [Ww]aypaper" - "float on, match:tag settings*" - "float on, match:title Picture-in-Picture" - "float on, match:title Authentication Required" - "float on, match:title War in Tunnels" - "float on, match:class codium|codium-url-handler|VSCodium, match:title negative:.*(?:codium|VSCodium).*" - "float on, match:class com\.heroicgameslauncher\.hgl, match:title negative Heroic Games Launcher" - "float on, match:class [Ss]team, match:title negative:[Ss]team" - "float on, match:class [Tt]hunar, match:title negative:.*[Tt]hunar.*" - "float on, match:class galculator" - "float on, match:initial_title Add Folder to Workspace" - "float on, match:initial_title Open Files" - "float on, match:initial_title wants to save" - "float on, match:class org\.gnome\.Calculator" - - # Size rules - "size 70% 60%, match:initial_title Open Files" - "size 70% 60%, match:initial_title Add Folder to Workspace" - "size 70% 70%, match:tag settings*" - "size 360 616, match:class org\.gnome\.Calculator" - - # Tile rules - "tile on, match:class affinity\.exe" - "tile on, match:class dev\.zed\.Zed" - "tile on, match:class mpv" - "tile on, match:class com-cburch-logisim-Main" - - # Opacity rules - "opacity 1.0 1.0, match:tag browser*" - "opacity 0.9 0.8, match:tag projects*" - "opacity 0.94 0.86, match:tag im*" - "opacity 0.85 0.75, match:tag gamestore*" - "opacity 0.9 0.8, match:tag file-manager*" - "opacity 0.8 0.7, match:tag terminal*" - "opacity 0.8 0.7, match:tag settings*" - "opacity 0.8 0.7, match:class gedit|org\.gnome\.TextEditor|mousepad" - "opacity 0.9 0.8, match:class seahorse # gnome-keyring gui" - "opacity 0.95 0.75, match:title Picture-in-Picture" - "opacity 0.9 0.8, match:class org\.gnome\.Calculator" - - # Picture-in-Picture specific rules - "pin on, match:title Picture-in-Picture" - "keep_aspect_ratio on, match:title Picture-in-Picture" - - # Games specific rules - "no_blur on, match:tag games*" - "fullscreen on, match:tag games*" +{...}: { + wayland.windowManager.hyprland.settings.window_rule = [ + { + match = { + class = "resolve"; + xwayland = 1; + }; + no_blur = true; + } + { + match = {class = "[Tt]hunar|org\\.gnome\\.Nautilus|[Pp]cmanfm-qt";}; + tag = "+file-manager"; + } + { + match = {class = "com\\.mitchellh\\.ghostty|org\\.wezfurlong\\.wezterm|Alacritty|kitty|kitty-dropterm";}; + tag = "+terminal"; + } + { + match = {class = "[Ff]irefox|org\\.mozilla\\.firefox|[Ff]irefox-esr";}; + tag = "+browser"; + } + { + match = {class = "[Ll]ibrewolf|io\\.gitlab\\.librewolf-community";}; + tag = "+browser"; + } + { + match = {class = "[Gg]oogle-chrome(-beta|-dev|-unstable)?|[Cc]hromium-browser(-beta|-dev|-unstable)?";}; + tag = "+browser"; + } + { + match = {class = "VSCode|code|code-url-handler|codium|codium-url-handler|VSCodium|VSCodium-url-handler";}; + tag = "+projects"; + } + { + match = {class = "dev\\.zed\\.Zed";}; + tag = "+projects"; + } + { + match = {class = "[Dd]iscord|[Ww]ebCord|[Vv]esktop";}; + tag = "+im"; + } + { + match = {class = "[Ff]erdium";}; + tag = "+im"; + } + { + match = {class = "[Ss]ignal";}; + tag = "+im"; + } + { + match = {class = "[Ss]lack";}; + tag = "+im"; + } + { + match = {class = "[Tt]eams-for-linux";}; + tag = "+im"; + } + { + match = {class = "gamescope";}; + tag = "+games"; + } + { + match = {class = "steam_app_\\d+";}; + tag = "+games"; + } + { + match = {class = "tf_linux64";}; + tag = "+games"; + } + { + match = {class = "Minecraft\\*.*";}; + tag = "+games"; + } + { + match = {class = "[Ss]team";}; + tag = "+gamestore"; + } + { + match = {title = "[Ll]utris";}; + tag = "+gamestore"; + } + { + match = {class = "com\\.heroicgameslauncher\\.hgl";}; + tag = "+gamestore"; + } + { + match = {class = "org\\.prismlauncher\\.PrismLauncher";}; + tag = "+gamestore"; + } + { + match = {class = "gnome-disks|wihotspot(-gui)?";}; + tag = "+settings"; + } + { + match = {class = "[Rr]ofi";}; + tag = "+settings"; + } + { + match = {class = "file-roller|org\\.gnome\\.FileRoller";}; + tag = "+settings"; + } + { + match = {class = "nm-applet|nm-connection-editor";}; + tag = "+settings"; + } + { + match = {class = "pavucontrol|org\\.pulseaudio\\.pavucontrol|com\\.saivert\\.pwvucontrol";}; + tag = "+settings"; + } + { + match = {class = "nwg-look|qt5ct|qt6ct|[Yy]ad";}; + tag = "+settings"; + } + { + match = {class = "xdg-desktop-portal-gtk";}; + tag = "+settings"; + } + { + match = {class = "nwg-displays";}; + tag = "+settings"; + } + { + match = {title = "Picture-in-Picture";}; + move = "72% 7%"; + } + { + match = {class = "pavucontrol|org\\.pulseaudio\\.pavucontrol|com\\.saivert\\.pwvucontrol";}; + center = true; + } + { + match = { + class = "[Tt]hunar"; + title = "negative:.*[Tt]hunar.*"; + }; + center = true; + } + { + match = {title = "Authentication Required";}; + center = true; + } + { + match = {class = "org\\.gnome\\.Calculator";}; + center = true; + } + { + match = {class = ".*";}; + idle_inhibit = "fullscreen"; + } + { + match = {title = ".*";}; + idle_inhibit = "fullscreen"; + } + { + match = {fullscreen = 1;}; + idle_inhibit = "fullscreen"; + } + { + match = {class = "[Ww]aypaper";}; + float = true; + } + { + match = {tag = "settings*";}; + float = true; + } + { + match = {title = "Picture-in-Picture";}; + float = true; + } + { + match = {title = "Authentication Required";}; + float = true; + } + { + match = {title = "War in Tunnels";}; + float = true; + } + { + match = { + class = "codium|codium-url-handler|VSCodium"; + title = "negative:.*(?:codium|VSCodium).*"; + }; + float = true; + } + { + match = { + class = "com\\.heroicgameslauncher\\.hgl"; + title = "negative:Heroic Games Launcher"; + }; + float = true; + } + { + match = { + class = "[Ss]team"; + title = "negative:[Ss]team"; + }; + float = true; + } + { + match = { + class = "[Tt]hunar"; + title = "negative:.*[Tt]hunar.*"; + }; + float = true; + } + { + match = {class = "galculator";}; + float = true; + } + { + match = {initial_title = "Add Folder to Workspace";}; + float = true; + } + { + match = {initial_title = "Open Files";}; + float = true; + } + { + match = {initial_title = "wants to save";}; + float = true; + } + { + match = {class = "org\\.gnome\\.Calculator";}; + float = true; + } + { + match = {initial_title = "Open Files";}; + size = "70% 60%"; + } + { + match = {initial_title = "Add Folder to Workspace";}; + size = "70% 60%"; + } + { + match = {tag = "settings*";}; + size = "70% 70%"; + } + { + match = {class = "org\\.gnome\\.Calculator";}; + size = "360 616"; + } + { + match = {class = "affinity\\.exe";}; + float = false; + } + { + match = {class = "dev\\.zed\\.Zed";}; + float = false; + } + { + match = {class = "mpv";}; + float = false; + } + { + match = {class = "com-cburch-logisim-Main";}; + float = false; + } + { + match = {tag = "browser*";}; + opacity = "1.0 1.0"; + } + { + match = {tag = "projects*";}; + opacity = "0.9 0.8"; + } + { + match = {tag = "im*";}; + opacity = "0.94 0.86"; + } + { + match = {tag = "gamestore*";}; + opacity = "0.85 0.75"; + } + { + match = {tag = "file-manager*";}; + opacity = "0.9 0.8"; + } + { + match = {tag = "terminal*";}; + opacity = "0.8 0.7"; + } + { + match = {tag = "settings*";}; + opacity = "0.8 0.7"; + } + { + match = {class = "gedit|org\\.gnome\\.TextEditor|mousepad";}; + opacity = "0.8 0.7"; + } + { + match = {class = "seahorse";}; + opacity = "0.9 0.8"; + } + { + match = {title = "Picture-in-Picture";}; + opacity = "0.95 0.75"; + } + { + match = {class = "org\\.gnome\\.Calculator";}; + opacity = "0.9 0.8"; + } + { + match = {title = "Picture-in-Picture";}; + pin = true; + } + { + match = {title = "Picture-in-Picture";}; + keep_aspect_ratio = true; + } + { + match = {tag = "games*";}; + no_blur = true; + } + { + match = {tag = "games*";}; + fullscreen = true; + } ]; } diff --git a/modules/home/noctalia/settings/plugins/keybind-cheatsheet.nix b/modules/home/noctalia/settings/plugins/keybind-cheatsheet.nix index 6b815ec..ef36995 100644 --- a/modules/home/noctalia/settings/plugins/keybind-cheatsheet.nix +++ b/modules/home/noctalia/settings/plugins/keybind-cheatsheet.nix @@ -1,7 +1,10 @@ _: { programs.noctalia.settings.plugin_settings."kenn/keybind-cheatsheet" = { compositor = "hyprland"; + hyprland_parser = "lua"; + hyprland_lua_config = "~/.config/hypr/hyprland.lua"; columns = 3; + merge_sequential = true; show_actions = true; }; }