From fe0d9e51980d69f49ee753d2f1c0ed501571e292 Mon Sep 17 00:00:00 2001 From: Kirill Date: Tue, 8 Sep 2026 22:04:22 +0300 Subject: [PATCH] hyprland: hyperconf to lua --- flake.lock | 103 ++++----- flake.nix | 2 +- host/WhiteRaven/modules/hyprland.nix | 10 + host/modules/packages.nix | 2 + modules/host.nix | 20 +- modules/host/env.nix | 7 +- modules/user.nix | 1 + modules/user/ags.nix | 7 +- modules/user/hyprland.nix | 309 ++++++++++----------------- modules/user/hyprland/lua.nix | 16 ++ modules/user/qt.nix | 14 ++ modules/user/sleepMode.nix | 7 +- modules/user/walker.nix | 8 +- modules/user/wob.nix | 20 +- modules/user/yazi.nix | 10 +- user/kirill/modules/hyprland.nix | 128 ++++++----- user/kirill/modules/style.nix | 15 +- 17 files changed, 334 insertions(+), 345 deletions(-) create mode 100644 host/WhiteRaven/modules/hyprland.nix create mode 100644 modules/user/hyprland/lua.nix create mode 100644 modules/user/qt.nix diff --git a/flake.lock b/flake.lock index 7779d7d..d9d5905 100644 --- a/flake.lock +++ b/flake.lock @@ -40,11 +40,11 @@ ] }, "locked": { - "lastModified": 1772460678, - "narHash": "sha256-NYaWs8fYJ38IgFld0hGSdT2LEVhrgO8SiRReBjIH7YY=", + "lastModified": 1784368054, + "narHash": "sha256-zF1iJkBQSDWmRO4/LEeHR1SpKY0lqZaxkoQJpPS9K9U=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "5d2cb726b16ee349df443f84b64cff53221b6983", + "rev": "9b5f14d9483445e766294eb8fbe0b8f370269ed0", "type": "github" }, "original": { @@ -249,28 +249,6 @@ "type": "github" } }, - "gitignore": { - "inputs": { - "nixpkgs": [ - "hyprland", - "pre-commit-hooks", - "nixpkgs" - ] - }, - "locked": { - "lastModified": 1709087332, - "narHash": "sha256-HG2cCnktfHsKV0s4XW83gU3F57gaTljL9KNSuG6bnQs=", - "owner": "hercules-ci", - "repo": "gitignore.nix", - "rev": "637db329424fd7e46cf4185293b9cc8c88c95394", - "type": "github" - }, - "original": { - "owner": "hercules-ci", - "repo": "gitignore.nix", - "type": "github" - } - }, "gnome-shell": { "flake": false, "locked": { @@ -326,11 +304,11 @@ ] }, "locked": { - "lastModified": 1772461003, - "narHash": "sha256-pVICsV7FtcEeVwg5y/LFh3XFUkVJninm/P1j/JHzEbM=", + "lastModified": 1776511930, + "narHash": "sha256-fCpwFiTW0rT7oKJqr3cqHMnkwypSwQKpbtUEtxdkgrM=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "b62396457b9cfe2ebf24fe05404b09d2a40f8ed7", + "rev": "39435900785d0c560c6ae8777d29f28617d031ef", "type": "github" }, "original": { @@ -355,11 +333,11 @@ ] }, "locked": { - "lastModified": 1772461523, - "narHash": "sha256-mI6A51do+hEUzeJKk9YSWfVHdI/SEEIBi2tp5Whq5mI=", + "lastModified": 1782566056, + "narHash": "sha256-haEZcHzYrePnjFOYSWTbxm/Nrla0aPslJfmvdCvqtVc=", "owner": "hyprwm", "repo": "hyprgraphics", - "rev": "7d63c04b4a2dd5e59ef943b4b143f46e713df804", + "rev": "c6e7b9f673f4360bc813d3dc75028f75ee88d3f8", "type": "github" }, "original": { @@ -385,16 +363,16 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1773149218, - "narHash": "sha256-m5Ewi+rgn18qPP54Um4O2zwZ02oiomlZssHvXYEUv3U=", + "lastModified": 1785170029, + "narHash": "sha256-8CKDx282HhxlD1pwXPnC4uK29Abn1Jsnh7LgPzeIXxI=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "59f9f2688ac508a0584d1462151195a6c4992f99", + "rev": "5c9377c15f85c50648f35ca5a213754f95b93ca0", "type": "github" }, "original": { "owner": "hyprwm", - "ref": "v0.54.2-b", + "ref": "v0.56.1", "repo": "Hyprland", "type": "github" } @@ -432,11 +410,11 @@ ] }, "locked": { - "lastModified": 1772467975, - "narHash": "sha256-kipyuDBxrZq+beYpZqWzGvFWm4QbayW9agAvi94vDXY=", + "lastModified": 1784196523, + "narHash": "sha256-ahtKMGXFJdlQNhatQm1+BBU/pGfGYnAqQt3vWvq4p8s=", "owner": "hyprwm", "repo": "hyprland-guiutils", - "rev": "5e1c6b9025aaf4d578f3eff7c0eb1f0c197a9507", + "rev": "a6ccb6cb112ed5a244c0191fb972347ecfa893e0", "type": "github" }, "original": { @@ -516,11 +494,11 @@ ] }, "locked": { - "lastModified": 1772459629, - "narHash": "sha256-/iwvNUYShmmnwmz/czEUh6+0eF5vCMv0xtDW0STPIuM=", + "lastModified": 1777320127, + "narHash": "sha256-Qu+Wf2Bp5qUjyn2YpZNq8a7JyzTGowhT1knrwE38a9U=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "7615ee388de18239a4ab1400946f3d0e498a8186", + "rev": "090117506ddc3d7f26e650ff344d378c2ec329cc", "type": "github" }, "original": { @@ -568,11 +546,11 @@ ] }, "locked": { - "lastModified": 1772462885, - "narHash": "sha256-5pHXrQK9zasMnIo6yME6EOXmWGFMSnCITcfKshhKJ9I=", + "lastModified": 1782554491, + "narHash": "sha256-+p3MlyN/nqRefcf2IckPlGRUn9+hielqpS9XClbLleM=", "owner": "hyprwm", "repo": "hyprtoolkit", - "rev": "9af245a69fa6b286b88ddfc340afd288e00a6998", + "rev": "bdba25ced39ea39ab004a8f31593ba0b0ff1ca35", "type": "github" }, "original": { @@ -593,11 +571,11 @@ ] }, "locked": { - "lastModified": 1772459870, - "narHash": "sha256-xxkK2Cvqxpf/4UGcJ/TyCwrvmiNWsKsJfFzHMp2bxis=", + "lastModified": 1784323413, + "narHash": "sha256-XnAVV+H4f8Xdv0yZcSwJ5kCjLyE8fHxPeLX6a3HSrAU=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "e63f3a79334dec49f8eb1691f66f18115df04085", + "rev": "5f03477ab3a005ff27c527486f551883535aea2f", "type": "github" }, "original": { @@ -618,11 +596,11 @@ ] }, "locked": { - "lastModified": 1772459835, - "narHash": "sha256-978jRz/y/9TKmZb/qD4lEYHCQGHpEXGqy+8X2lFZsak=", + "lastModified": 1777159683, + "narHash": "sha256-Jxixw6wZphUp+nHYxOKUYSckL17QMBx2d5Zp0rJHr1g=", "owner": "hyprwm", "repo": "hyprwayland-scanner", - "rev": "0a692d4a645165eebd65f109146b8861e3a925e7", + "rev": "b8632713a6beaf28b56f2a7b0ab2fb7088dbb404", "type": "github" }, "original": { @@ -647,11 +625,11 @@ ] }, "locked": { - "lastModified": 1772463520, - "narHash": "sha256-GIjASzYnV4fK19HnyJKmHyqyxHxIpjusK9foEA4Yo+4=", + "lastModified": 1778410714, + "narHash": "sha256-o6RzFj4nJXaPRY7EM01siuCQeT41RfwwmcmFQqwFJJg=", "owner": "hyprwm", "repo": "hyprwire", - "rev": "4e1933ae5602b350c5b6633f5c932549c9b8aca2", + "rev": "85148a8e612808cf5ddb25d0b3c5840f3498a7dc", "type": "github" }, "original": { @@ -726,11 +704,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1772542754, - "narHash": "sha256-WGV2hy+VIeQsYXpsLjdr4GvHv5eECMISX1zKLTedhdg=", + "lastModified": 1784356753, + "narHash": "sha256-12KrbMiWLcf8m7pCvAtZh1ZrgF85ZXDXvfR/fWTKy84=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "8c809a146a140c5c8806f13399592dbcb1bb5dc4", + "rev": "61b7c44c4073f0b827768aff0049561b5110ea5a", "type": "github" }, "original": { @@ -848,18 +826,17 @@ "pre-commit-hooks": { "inputs": { "flake-compat": "flake-compat", - "gitignore": "gitignore", "nixpkgs": [ "hyprland", "nixpkgs" ] }, "locked": { - "lastModified": 1772024342, - "narHash": "sha256-+eXlIc4/7dE6EcPs9a2DaSY3fTA9AE526hGqkNID3Wg=", + "lastModified": 1784288435, + "narHash": "sha256-ReRHaLgr/uVqdD8afFSn+myXIfpHeOhP0yYe0TJqAA8=", "owner": "cachix", "repo": "git-hooks.nix", - "rev": "6e34e97ed9788b17796ee43ccdbaf871a5c2b476", + "rev": "43b3c1ab9d40fb1dbb008f451988a91e375825e9", "type": "github" }, "original": { @@ -1132,11 +1109,11 @@ ] }, "locked": { - "lastModified": 1772476586, - "narHash": "sha256-N/ZwsRLULLpBP5ecvAUzNq8E/CgLRwPwSrHyY3xB5KM=", + "lastModified": 1784371182, + "narHash": "sha256-S8A1lezEalltWcCp3gAic5lssS0xTSISK6fKODefhOk=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "eb6c02a2ead882f3474f3d7f2fbe966b64ed5110", + "rev": "08d99f727944dd15e4740090305e31c5fb92a50a", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 5b1b2cd..155e32f 100644 --- a/flake.nix +++ b/flake.nix @@ -41,7 +41,7 @@ flake = false; }; - hyprland.url = "github:hyprwm/Hyprland/v0.54.2-b"; + hyprland.url = "github:hyprwm/Hyprland/v0.56.1"; hyprland-plugins = { url = "github:hyprwm/hyprland-plugins"; inputs.hyprland.follows = "hyprland"; diff --git a/host/WhiteRaven/modules/hyprland.nix b/host/WhiteRaven/modules/hyprland.nix new file mode 100644 index 0000000..3acbfc3 --- /dev/null +++ b/host/WhiteRaven/modules/hyprland.nix @@ -0,0 +1,10 @@ +{ + wayland.windowManager.hyprland.settings.monitor = [ + { + output = "eDP-1"; + mode = "1920x1200@60"; + position = "0x0"; + scale = 1; + } + ]; +} diff --git a/host/modules/packages.nix b/host/modules/packages.nix index 748278d..4fc3a0b 100644 --- a/host/modules/packages.nix +++ b/host/modules/packages.nix @@ -25,6 +25,8 @@ noto-fonts-cjk-sans # Japanese powerline-symbols # Console decoration unifont # Other + (pkgs.google-fonts.override { fonts = [ "Gabriela" ]; }) ]; }; + fonts.fontconfig.enable = true; } diff --git a/modules/host.nix b/modules/host.nix index 919002a..beb7fe4 100644 --- a/modules/host.nix +++ b/modules/host.nix @@ -1,3 +1,4 @@ +{ pkgs, ... }: { imports = [ ./host/bluetooth.nix @@ -13,7 +14,24 @@ #./host/ai-agent.nix ]; - programs.hyprland.enable = true; + programs = { + dconf.enable = true; + hyprland.enable = true; + }; + + xdg.portal = { + enable = true; + xdgOpenUsePortal = true; + extraPortals = with pkgs; [ + xdg-desktop-portal-hyprland + xdg-desktop-portal-gtk + xdg-desktop-portal-termfilechooser + ]; + config = { + common.default = [ "hyprland" "gtk" ]; + hyprland.default = [ "hyprland" "gtk" ]; + }; + }; services = { udisks2.enable = true; fstrim.enable = true; diff --git a/modules/host/env.nix b/modules/host/env.nix index 5161cf9..572475b 100644 --- a/modules/host/env.nix +++ b/modules/host/env.nix @@ -1,8 +1,9 @@ -{ +{ lib, ... }: { environment.variables = { EDITOR = "hx"; RANGER_LOAD_DEFAULT_RC = "FALSE"; - QT_QPA_PLATFORMTHEME = "qt5ct"; - GSETTINGS_BACKEND = "keyfile"; + GTK_USE_PORTAL = "1"; + QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal"; + TDESKTOP_USE_GTK_FILE_DIALOG = "1"; }; } diff --git a/modules/user.nix b/modules/user.nix index 200cd8f..6e0d3cf 100644 --- a/modules/user.nix +++ b/modules/user.nix @@ -4,6 +4,7 @@ ./user/yazi.nix ./user/sleepMode.nix ./user/ghostty.nix + ./user/qt.nix ./user/zed-idea.nix ./user/walker.nix ./user/btop.nix diff --git a/modules/user/ags.nix b/modules/user/ags.nix index 7ccc833..db7d8e8 100644 --- a/modules/user/ags.nix +++ b/modules/user/ags.nix @@ -1,4 +1,7 @@ -{ config, inputs, pkgs, ... }: { +{ config, inputs, pkgs, lib, ... }: +let + hyprLua = import ./hyprland/lua.nix { inherit lib; }; +in { imports = [ inputs.ags.homeManagerModules.default ]; programs.ags = { @@ -20,7 +23,7 @@ pulsemixer ]; - wayland.windowManager.hyprland.settings.exec-once = [ "ags run" ]; + wayland.windowManager.hyprland.settings.on = [ (hyprLua.onStart [ "ags run" ]) ]; xdg.configFile."ags".source = (pkgs.callPackage ./ags/ags.nix { colors = config.lib.stylix.colors; }); } diff --git a/modules/user/hyprland.nix b/modules/user/hyprland.nix index 5e7af07..375e128 100644 --- a/modules/user/hyprland.nix +++ b/modules/user/hyprland.nix @@ -1,218 +1,127 @@ -{ pkgs, lib, config, swww_flags, inputs }: { - home.packages = with pkgs; [ - ghostty - pamixer - wofi - clipse - wl-clipboard - wl-clip-persist - xclip - ]; - - wayland.windowManager.hyprland = - let - colors = config.lib.stylix.colors; - - wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" { - libraries = [ pkgs.python3Packages.requests ]; - flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ]; - } /*py*/ '' - from random import choice - from os import system, listdir +{ pkgs, lib, config, swww_flags, inputs, host ? null }: +let + hyprLua = import ./hyprland/lua.nix { inherit lib; }; + direction = { left = "l"; right = "r"; up = "u"; down = "d"; }; + wallpaper_changer = pkgs.writers.writePython3Bin "wallpaper_changer" { + libraries = [ pkgs.python3Packages.requests ]; + flakeIgnore = [ "E501" "E111" "E701" "E241" "E731" ]; + } /*py*/ '' + from random import choice + from os import system, listdir + folder = "${config.home.homeDirectory}/wallpapers" + filename = choice(listdir(folder)) + system(f"${lib.getExe pkgs.awww} img {folder}/{filename} ${swww_flags}") + ''; + workspaceBinds = lib.concatMap (workspace: + let key = if workspace == 10 then "0" else toString workspace; workspaceValue = toString workspace; + in [ + (hyprLua.bind "SUPER + ${key}" "hl.dsp.focus({ workspace = ${workspaceValue} })") + (hyprLua.bind "SUPER + SHIFT + ${key}" "hl.dsp.window.move({ workspace = ${workspaceValue}, follow = false })") + ]) (lib.range 1 10); +in { + imports = lib.optional (host != null && builtins.pathExists ../../host/${host.name}/modules/hyprland.nix) ../../host/${host.name}/modules/hyprland.nix; - folder = "${config.home.homeDirectory}/wallpapers" - filename = choice(listdir(folder)) - system(f"${lib.getExe pkgs.awww} img {folder}/{filename} ${swww_flags}") - ''; - in { + home.packages = with pkgs; [ ghostty pamixer wofi clipse wl-clipboard wl-clip-persist xclip ]; + wayland.windowManager.hyprland = { enable = true; - configType = "hyprlang"; + configType = "lua"; xwayland.enable = true; - package = inputs.hyprland.packages.${pkgs.stdenv.hostPlatform.system}.hyprland; - plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [ - # hyprbars # Version mismatch - ]; - + plugins = with inputs.hyprland-plugins.packages.${pkgs.stdenv.hostPlatform.system}; [ ]; settings = { - "$mainMod" = "SUPER"; - - ecosystem = { - no_donation_nag = true; - no_update_news = true; - }; - - env = [ - "XDG_SESSION_TYPE,wayland" - "QT_QPA_PLATFORM,wayland" - - "XDG_CURRENT_DESKTOP,Hyprland" - "XDG_SESSION_DESKTOP,Hyprland" - - "XCURSOR_SIZE, ${toString config.stylix.cursor.size}" - "XCURSOR_THEME, ${config.stylix.cursor.name}" - - "XDG_SCREENSHOTS_DIR,~/screens" - ]; - - cursor.no_hardware_cursors = true; - - debug = { - disable_logs = false; - enable_stdout_logs = true; - }; - - misc = { - focus_on_activate = true; - }; - - input = { - kb_layout = "us,ru"; - kb_options = "grp:caps_toggle"; - numlock_by_default = true; - - follow_mouse = 1; - - touchpad = { - natural_scroll = false; + config = { + ecosystem = { no_donation_nag = true; no_update_news = true; }; + cursor.no_hardware_cursors = 1; + debug = { disable_logs = false; enable_stdout_logs = true; }; + general."col.inactive_border" = lib.mkDefault "rgba(00000000)"; + decoration = { inactive_opacity = lib.mkDefault 0.95; border_part_of_window = false; }; + misc.focus_on_activate = true; + input = { + kb_layout = "us,ru"; kb_options = "grp:caps_toggle"; numlock_by_default = true; + follow_mouse = 1; touchpad.natural_scroll = false; sensitivity = 0; }; - - sensitivity = 0; + gestures = { workspace_swipe_invert = true; workspace_swipe_distance = 200; workspace_swipe_forever = true; }; }; - - gestures = { - workspace_swipe_invert = true; - workspace_swipe_distance = 200; - workspace_swipe_forever = true; - }; - - gesture = [ - "3, horizontal, workspace" + env = [ + { _args = [ "XDG_SESSION_TYPE" "wayland" ]; } + { _args = [ "QT_QPA_PLATFORM" "wayland" ]; } + { _args = [ "QT_QPA_PLATFORMTHEME" "xdgdesktopportal" ]; } + { _args = [ "GTK_USE_PORTAL" "1" ]; } + { _args = [ "TDESKTOP_USE_GTK_FILE_DIALOG" "1" ]; } + { _args = [ "NIXOS_OZONE_WL" "1" ]; } + { _args = [ "ELECTRON_OZONE_PLATFORM_HINT" "auto" ]; } + { _args = [ "XDG_CURRENT_DESKTOP" "Hyprland" ]; } + { _args = [ "XDG_SESSION_DESKTOP" "Hyprland" ]; } + { _args = [ "XCURSOR_SIZE" (toString config.stylix.cursor.size) ]; } + { _args = [ "XCURSOR_THEME" config.stylix.cursor.name ]; } + { _args = [ "XDG_SCREENSHOTS_DIR" "~/screens" ]; } ]; - - windowrule = [ - "match:class imv, float 1" - "match:class feh, float 1" - "match:class mpv, float 1" - - "match:title Список друзей, float 1" - "match:title nmtui, float 1" - "match:title pulsemixer, float 1" - - "match:title clipse, float 1" - "match:title clipse, size 622 652" - - "match:focus 1, rounding 0" - "match:float 0, match:workspace w[t1], border_size 0" + gesture = [ { fingers = 3; direction = "horizontal"; action = "workspace"; } ]; + workspace_rule = [ { workspace = "w[t1]"; gaps_out = 0; } ]; + window_rule = [ + { match.class = "imv"; float = true; } + { match.class = "feh"; float = true; } + { match.class = "mpv"; float = true; } + { match.title = "Список друзей"; float = true; } + { match.title = "wifitui"; float = true; } + { match.title = "pulsemixer"; float = true; } + { match.title = "clipse"; float = true; } + { match.title = "clipse"; size = [ 622 652 ]; } + { match.focus = true; rounding = 0; } + { match = { float = false; workspace = "w[t1]"; }; border_size = 0; } ]; - - exec-once = [ + on = [ (hyprLua.onStart [ "systemctl --user start plasma-polkit-agent" + "${lib.getExe' pkgs.dbus "dbus-update-activation-environment"} --systemd --all" + "systemctl --user import-environment XDG_CURRENT_DESKTOP XDG_SESSION_DESKTOP XDG_SESSION_TYPE WAYLAND_DISPLAY DISPLAY GTK_USE_PORTAL QT_QPA_PLATFORMTHEME TDESKTOP_USE_GTK_FILE_DIALOG NIXOS_OZONE_WL ELECTRON_OZONE_PLATFORM_HINT" "${lib.getExe' pkgs.awww "awww-daemon"}" - "${pkgs.bash}/bin/bash -c 'sleep 1 && ${lib.getExe wallpaper_changer}'" "wl-clip-persist --clipboard both" "clipse -listen" "${lib.getExe' pkgs.udiskie "udiskie"}" - ]; - + "${lib.getExe wallpaper_changer}" + ]) ]; bind = [ - "$mainMod, V, exec, ghostty --title=clipse -e clipse" - - "$mainMod, Return, exec, ghostty" - "$mainMod, Q, killactive," - "$mainMod, M, exit," - "$mainMod, E, exec, ghostty -e sh -c yazi" - "$mainMod, F, togglefloating," - "$mainMod, J, layoutmsg, togglesplit, # dwindle" - - # Move focus with mainMod + arrow keys - "$mainMod, left, movefocus, l" - "$mainMod, right, movefocus, r" - "$mainMod, up, movefocus, u" - "$mainMod, down, movefocus, d" - - # Moving windows - "$mainMod SHIFT, left, swapwindow, l" - "$mainMod SHIFT, right, swapwindow, r" - "$mainMod SHIFT, up, swapwindow, u" - "$mainMod SHIFT, down, swapwindow, d" - - # Window resizing X Y - "$mainMod CTRL, left, resizeactive, -60 0" - "$mainMod CTRL, right, resizeactive, 60 0" - "$mainMod CTRL, up, resizeactive, 0 -60" - "$mainMod CTRL, down, resizeactive, 0 60" - - # Switch workspaces with mainMod + [0-9] - "$mainMod, 1, workspace, 1" - "$mainMod, 2, workspace, 2" - "$mainMod, 3, workspace, 3" - "$mainMod, 4, workspace, 4" - "$mainMod, 5, workspace, 5" - "$mainMod, 6, workspace, 6" - "$mainMod, 7, workspace, 7" - "$mainMod, 8, workspace, 8" - "$mainMod, 9, workspace, 9" - "$mainMod, 0, workspace, 10" - - # Move active window to a workspace with mainMod + SHIFT + [0-9] - "$mainMod SHIFT, 1, movetoworkspacesilent, 1" - "$mainMod SHIFT, 2, movetoworkspacesilent, 2" - "$mainMod SHIFT, 3, movetoworkspacesilent, 3" - "$mainMod SHIFT, 4, movetoworkspacesilent, 4" - "$mainMod SHIFT, 5, movetoworkspacesilent, 5" - "$mainMod SHIFT, 6, movetoworkspacesilent, 6" - "$mainMod SHIFT, 7, movetoworkspacesilent, 7" - "$mainMod SHIFT, 8, movetoworkspacesilent, 8" - "$mainMod SHIFT, 9, movetoworkspacesilent, 9" - "$mainMod SHIFT, 0, movetoworkspacesilent, 10" - - "$mainMod SHIFT, F, fullscreen" - - # Scroll through existing workspaces with mainMod + scroll - "$mainMod, mouse_down, workspace, e+1" - "$mainMod, mouse_up, workspace, e-1" - - # Keyboard backlight - "$mainMod, F3, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%" - "$mainMod, F2, exec, ${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-" - - # Volume and Media Control - ", XF86AudioMute, exec, pamixer -t" - ", XF86AudioMicMute, exec, pamixer --default-source -m" - ", XF86AudioPlay, exec, ${lib.getExe pkgs.playerctl} play-pause" - ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} position 5-" - ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} position 5+" - - ", XF86Explorer, exec, ghostty -e sh -c yazi" - ", XF86Mail, exec, thunderbird" - ", XF86WWW, exec, google-chrome-stable" # TODO: Replace hard-code to some variable - - # Brightness control - ", XF86MonBrightnessDown, exec, ${lib.getExe pkgs.brightnessctl} set 5%- " - ", XF86MonBrightnessUp, exec, ${lib.getExe pkgs.brightnessctl} set +5% " - - # Waybar - "$mainMod, B, exec, pkill -SIGUSR1 waybar" - #"$mainMod, W, exec, pkill -SIGUSR2 waybar" - - "$mainMod, W, exec, ${lib.getExe wallpaper_changer}" - ]; - - binde = [ - ", XF86AudioRaiseVolume, exec, pamixer -i 5 " - ", XF86AudioLowerVolume, exec, pamixer -d 5 " - ]; - - bindo = [ - ", XF86AudioPrev, exec, ${lib.getExe pkgs.playerctl} previous" - ", XF86AudioNext, exec, ${lib.getExe pkgs.playerctl} next" - ]; - - # Move/resize windows with mainMod + LMB/RMB and dragging - bindm = [ - "$mainMod, mouse:272, movewindow" - "$mainMod, mouse:273, resizewindow" + (hyprLua.bind "SUPER + V" (hyprLua.exec "ghostty --title=clipse -e clipse")) + (hyprLua.bind "SUPER + RETURN" (hyprLua.exec "ghostty")) + (hyprLua.bind "SUPER + Q" "hl.dsp.window.close()") + (hyprLua.bind "SUPER + M" "hl.dsp.exit()") + (hyprLua.bind "SUPER + E" (hyprLua.exec "ghostty -e sh -c yazi")) + (hyprLua.bind "SUPER + F" "hl.dsp.window.float({ action = \"toggle\" })") + (hyprLua.bind "SUPER + J" "hl.dsp.layout(\"togglesplit\")") + (hyprLua.bind "SUPER + LEFT" "hl.dsp.focus({ direction = \"${direction.left}\" })") + (hyprLua.bind "SUPER + RIGHT" "hl.dsp.focus({ direction = \"${direction.right}\" })") + (hyprLua.bind "SUPER + UP" "hl.dsp.focus({ direction = \"${direction.up}\" })") + (hyprLua.bind "SUPER + DOWN" "hl.dsp.focus({ direction = \"${direction.down}\" })") + (hyprLua.bind "SUPER + SHIFT + LEFT" "hl.dsp.window.swap({ direction = \"${direction.left}\" })") + (hyprLua.bind "SUPER + SHIFT + RIGHT" "hl.dsp.window.swap({ direction = \"${direction.right}\" })") + (hyprLua.bind "SUPER + SHIFT + UP" "hl.dsp.window.swap({ direction = \"${direction.up}\" })") + (hyprLua.bind "SUPER + SHIFT + DOWN" "hl.dsp.window.swap({ direction = \"${direction.down}\" })") + (hyprLua.bind "SUPER + CTRL + LEFT" "hl.dsp.window.resize({ x = -60, y = 0, relative = true })") + (hyprLua.bind "SUPER + CTRL + RIGHT" "hl.dsp.window.resize({ x = 60, y = 0, relative = true })") + (hyprLua.bind "SUPER + CTRL + UP" "hl.dsp.window.resize({ x = 0, y = -60, relative = true })") + (hyprLua.bind "SUPER + CTRL + DOWN" "hl.dsp.window.resize({ x = 0, y = 60, relative = true })") + ] ++ workspaceBinds ++ [ + (hyprLua.bind "SUPER + SHIFT + F" "hl.dsp.window.fullscreen({ action = \"toggle\", mode = \"fullscreen\" })") + (hyprLua.bind "SUPER + mouse_down" "hl.dsp.focus({ workspace = \"e+1\" })") + (hyprLua.bind "SUPER + mouse_up" "hl.dsp.focus({ workspace = \"e-1\" })") + (hyprLua.bind "SUPER + F3" (hyprLua.exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set +33%")) + (hyprLua.bind "SUPER + F2" (hyprLua.exec "${lib.getExe pkgs.brightnessctl} -d *::kbd_backlight set 33%-")) + (hyprLua.bind "XF86AudioMute" (hyprLua.exec "pamixer -t")) + (hyprLua.bind "XF86AudioMicMute" (hyprLua.exec "pamixer --default-source -m")) + (hyprLua.bind "XF86AudioPlay" (hyprLua.exec "${lib.getExe pkgs.playerctl} play-pause")) + (hyprLua.bind "XF86AudioPrev" (hyprLua.exec "${lib.getExe pkgs.playerctl} position 5-")) + (hyprLua.bind "XF86AudioNext" (hyprLua.exec "${lib.getExe pkgs.playerctl} position 5+")) + (hyprLua.bind "XF86Explorer" (hyprLua.exec "ghostty -e sh -c yazi")) + (hyprLua.bind "XF86Mail" (hyprLua.exec "thunderbird")) + (hyprLua.bind "XF86WWW" (hyprLua.exec "google-chrome-stable")) + (hyprLua.bind "XF86MonBrightnessDown" (hyprLua.exec "${lib.getExe pkgs.brightnessctl} set 5%-")) + (hyprLua.bind "XF86MonBrightnessUp" (hyprLua.exec "${lib.getExe pkgs.brightnessctl} set +5%")) + (hyprLua.bindWithFlags "XF86AudioRaiseVolume" (hyprLua.exec "pamixer -i 5") { repeating = true; }) + (hyprLua.bindWithFlags "XF86AudioLowerVolume" (hyprLua.exec "pamixer -d 5") { repeating = true; }) + (hyprLua.bindWithFlags "XF86AudioPrev" (hyprLua.exec "${lib.getExe pkgs.playerctl} previous") { long_press = true; }) + (hyprLua.bindWithFlags "XF86AudioNext" (hyprLua.exec "${lib.getExe pkgs.playerctl} next") { long_press = true; }) + (hyprLua.bindWithFlags "SUPER + mouse:272" "hl.dsp.window.drag()" { mouse = true; }) + (hyprLua.bindWithFlags "SUPER + mouse:273" "hl.dsp.window.resize()" { mouse = true; }) ]; }; }; diff --git a/modules/user/hyprland/lua.nix b/modules/user/hyprland/lua.nix new file mode 100644 index 0000000..e3d21c5 --- /dev/null +++ b/modules/user/hyprland/lua.nix @@ -0,0 +1,16 @@ +{ lib }: +let + inline = lib.generators.mkLuaInline; + quote = builtins.toJSON; +in rec { + inherit inline; + exec = command: "hl.dsp.exec_cmd(${quote command})"; + bind = keys: dispatcher: { _args = [ keys (inline dispatcher) ]; }; + bindWithFlags = keys: dispatcher: flags: { _args = [ keys (inline dispatcher) flags ]; }; + onStart = commands: { + _args = [ + "hyprland.start" + (inline ("function()\n" + lib.concatMapStringsSep "\n" (command: " hl.exec_cmd(${quote command})") commands + "\nend")) + ]; + }; +} diff --git a/modules/user/qt.nix b/modules/user/qt.nix new file mode 100644 index 0000000..94da950 --- /dev/null +++ b/modules/user/qt.nix @@ -0,0 +1,14 @@ +{ lib, ... }: { + stylix.targets.qt.standardDialogs = "xdgdesktopportal"; + + home.sessionVariables = { + QT_QPA_PLATFORMTHEME = lib.mkForce "xdgdesktopportal"; + TDESKTOP_USE_GTK_FILE_DIALOG = "1"; + }; + + qt = { + enable = true; + platformTheme.name = "qtct"; + style.name = "kvantum"; + }; +} diff --git a/modules/user/sleepMode.nix b/modules/user/sleepMode.nix index 6ea6282..c8cc47e 100644 --- a/modules/user/sleepMode.nix +++ b/modules/user/sleepMode.nix @@ -1,5 +1,8 @@ -{ pkgs, lib, ... }: { - wayland.windowManager.hyprland.settings.exec-once = [ "hyprlock" ]; +{ pkgs, lib, ... }: +let + hyprLua = import ./hyprland/lua.nix { inherit lib; }; +in { + wayland.windowManager.hyprland.settings.on = [ (hyprLua.onStart [ "hyprlock" ]) ]; programs.hyprlock = let image = pkgs.fetchurl { diff --git a/modules/user/walker.nix b/modules/user/walker.nix index 542d9c3..67d0601 100644 --- a/modules/user/walker.nix +++ b/modules/user/walker.nix @@ -1,4 +1,7 @@ -{ +{ lib, ... }: +let + hyprLua = import ./hyprland/lua.nix { inherit lib; }; +in { services = { walker = { enable = true; @@ -9,6 +12,7 @@ }; wayland.windowManager.hyprland.settings.bind = [ - "$mainMod, D, exec, walker" + (hyprLua.bind "SUPER + D" (hyprLua.exec "walker")) ]; + } diff --git a/modules/user/wob.nix b/modules/user/wob.nix index 07e43dd..95a8fd5 100644 --- a/modules/user/wob.nix +++ b/modules/user/wob.nix @@ -1,4 +1,5 @@ { config, pkgs, lib, ... }: let + hyprLua = import ./hyprland/lua.nix { inherit lib; }; c = config.lib.stylix.colors; wobSocket = ''"''${XDG_RUNTIME_DIR:-/run/user/$(id -u)}/wob.sock"''; @@ -53,16 +54,11 @@ in { }; }; - wayland.windowManager.hyprland.settings = { - bindel = [ - ", XF86AudioRaiseVolume, exec, ${lib.getExe volumeStep} up" - ", XF86AudioLowerVolume, exec, ${lib.getExe volumeStep} down" - ", XF86MonBrightnessUp, exec, ${lib.getExe brightnessStep} up" - ", XF86MonBrightnessDown, exec, ${lib.getExe brightnessStep} down" - ]; - - bind = [ - ", XF86AudioMute, exec, ${lib.getExe volumeStep} mute" - ]; - }; + wayland.windowManager.hyprland.settings.bind = [ + (hyprLua.bindWithFlags "XF86AudioRaiseVolume" (hyprLua.exec "${lib.getExe volumeStep} up") { repeating = true; locked = true; }) + (hyprLua.bindWithFlags "XF86AudioLowerVolume" (hyprLua.exec "${lib.getExe volumeStep} down") { repeating = true; locked = true; }) + (hyprLua.bindWithFlags "XF86MonBrightnessUp" (hyprLua.exec "${lib.getExe brightnessStep} up") { repeating = true; locked = true; }) + (hyprLua.bindWithFlags "XF86MonBrightnessDown" (hyprLua.exec "${lib.getExe brightnessStep} down") { repeating = true; locked = true; }) + (hyprLua.bind "XF86AudioMute" (hyprLua.exec "${lib.getExe volumeStep} mute")) + ]; } diff --git a/modules/user/yazi.nix b/modules/user/yazi.nix index 9f39273..ae5dfe3 100644 --- a/modules/user/yazi.nix +++ b/modules/user/yazi.nix @@ -121,8 +121,14 @@ in { Exec=${lib.getExe fileManager1} ''; - wayland.windowManager.hyprland.settings.windowrule = [ - "match:class dragon-drop, move cursor_x-window_w/2 cursor_y-window_h/2" + wayland.windowManager.hyprland.settings.window_rule = [ + { + match.class = "dragon-drop"; + move = [ + "(cursor_x-(window_w*0.5))" + "(cursor_y-(window_h*0.5))" + ]; + } ]; programs.yazi = { diff --git a/user/kirill/modules/hyprland.nix b/user/kirill/modules/hyprland.nix index f2da0ed..ce267c9 100644 --- a/user/kirill/modules/hyprland.nix +++ b/user/kirill/modules/hyprland.nix @@ -1,79 +1,97 @@ -{ pkgs, lib, config, inputs, ... }: { +{ pkgs, lib, config, inputs, host, ... }: +{ imports = [( import ../../../modules/user/hyprland.nix { inherit lib; inherit pkgs; inherit config; inherit inputs; + inherit host; swww_flags = "--transition-type center"; } )]; wayland.windowManager.hyprland = let colors = config.lib.stylix.colors; + hyprLua = import ../../../modules/user/hyprland/lua.nix { inherit lib; }; in { settings = { - monitor = [ - "eDP-1, preferred, auto, 1" + config = { + general = { + gaps_in = 5; + gaps_out = 5; + border_size = 2; + "col.active_border" = lib.mkForce { + colors = [ + "rgba(${colors.base0C}ee)" + "rgba(${colors.base0B}ee)" + ]; + angle = 45; + }; + "col.inactive_border" = lib.mkForce "rgba(${colors.base05}aa)"; + layout = "dwindle"; + }; + + decoration = { + border_part_of_window = false; + rounding = 10; + blur = { + enabled = true; + size = 16; + passes = 2; + new_optimizations = true; + }; + shadow = { + enabled = true; + range = 4; + render_power = 3; + }; + }; + + animations.enabled = true; + dwindle.smart_split = true; + master.new_status = "master"; + + misc = { + focus_on_activate = true; + animate_manual_resizes = true; + animate_mouse_windowdragging = true; + enable_swallow = true; + }; + }; + + animation = [ + { leaf = "windows"; enabled = true; speed = 7; bezier = "myBezier"; } + { leaf = "windowsOut"; enabled = true; speed = 7; bezier = "default"; style = "popin 80%"; } + { leaf = "border"; enabled = true; speed = 10; bezier = "default"; } + { leaf = "borderangle"; enabled = true; speed = 8; bezier = "default"; } + { leaf = "fade"; enabled = true; speed = 7; bezier = "default"; } + { leaf = "workspaces"; enabled = true; speed = 6; bezier = "default"; } ]; - general = { - gaps_in = 5; - gaps_out = 10; - border_size = 3; - "col.active_border" = lib.mkForce "rgba(${colors.base0C}ee) rgba(${colors.base0B}ee) 45deg"; - "col.inactive_border" = lib.mkForce "rgba(${colors.base05}aa)"; - - layout = "dwindle"; - }; - - decoration = { - rounding = 10; - - blur = { - enabled = true; - size = 16; - passes = 2; - new_optimizations = true; - }; - - shadow = { - enabled = true; - range = 4; - render_power = 3; - }; - }; - - animations = { - enabled = true; - - bezier = "myBezier, 0.05, 0.9, 0.1, 1.05"; - - animation = [ - "windows, 1, 7, myBezier" - "windowsOut, 1, 7, default, popin 80%" - "border, 1, 10, default" - "borderangle, 1, 8, default" - "fade, 1, 7, default" - "workspaces, 1, 6, default" + curve = { + _args = [ + "myBezier" + { + type = "bezier"; + points = [ + [ 0.05 0.9 ] + [ 0.1 1.05 ] + ]; + } ]; }; - dwindle = { - smart_split = true; - }; - - master.new_status = "master"; - - misc = { - animate_manual_resizes = true; - animate_mouse_windowdragging = true; - enable_swallow = true; - }; + workspace_rule = [ + { + workspace = "2"; + layout = "scrolling"; + } + ]; bind = [ - "$mainMod Shift, S, exec, ${lib.getExe pkgs.grimblast} --notify --freeze copy area" - ", F11, exec, ghostty -e sh -c hyprlock" + (hyprLua.bind "SUPER + SHIFT + S" (hyprLua.exec "${lib.getExe pkgs.grimblast} --notify --freeze copy area")) + (hyprLua.bind "F11" (hyprLua.exec "ghostty -e sh -c hyprlock")) ]; }; }; diff --git a/user/kirill/modules/style.nix b/user/kirill/modules/style.nix index 9d89d58..4aa73fe 100644 --- a/user/kirill/modules/style.nix +++ b/user/kirill/modules/style.nix @@ -13,8 +13,6 @@ ''; }; in { - gtk.gtk4.theme = lib.mkForce config.gtk.theme; - stylix = { enable = true; overlays.enable = false; @@ -79,5 +77,18 @@ in { }; }; + dconf.settings = { + "org/gnome/desktop/interface".color-scheme = "prefer-dark"; + }; + + gtk = { + gtk4.extraConfig = { + gtk-application-prefer-dark-theme = true; + }; + gtk3.extraConfig = { + gtk-application-prefer-dark-theme = true; + }; + }; + xdg.configFile."helix/config.toml".text = ''theme = "catppuccin_mocha"''; }