From 260502c6cee0b5073f9452fd487be6c78d333508 Mon Sep 17 00:00:00 2001 From: unexplrd Date: Mon, 5 May 2025 23:58:09 +0300 Subject: [PATCH] restructure, add walker Signed-off-by: unexplrd --- flake.lock | 171 ++++--- flake.nix | 4 + hosts/dunamis/users/user/common.nix | 3 + modules/home/desktop/niri/default.nix | 434 ++---------------- modules/home/desktop/niri/niri.nix | 368 +++++++++++++++ .../home/desktop/niri/programs/default.nix | 20 +- .../desktop/niri/programs/walker/default.nix | 304 ++++++++++++ .../home/desktop/niri/services/default.nix | 192 +------- .../desktop/niri/services/swaync/default.nix | 177 +++++++ 9 files changed, 1025 insertions(+), 648 deletions(-) create mode 100644 modules/home/desktop/niri/niri.nix create mode 100644 modules/home/desktop/niri/programs/walker/default.nix create mode 100644 modules/home/desktop/niri/services/swaync/default.nix diff --git a/flake.lock b/flake.lock index 96e041a..841e636 100644 --- a/flake.lock +++ b/flake.lock @@ -20,11 +20,11 @@ ] }, "locked": { - "lastModified": 1744289235, - "narHash": "sha256-ZFkHLdimtFzQACsVVyZkZlfYdj4iNy3PkzXfrwmlse8=", + "lastModified": 1745357003, + "narHash": "sha256-jYwzQkv1r7HN/4qrAuKp+NR4YYNp2xDrOX5O9YVqkWo=", "owner": "hyprwm", "repo": "aquamarine", - "rev": "c8282f4982b56dfa5e9b9f659809da93f8d37e7a", + "rev": "a19cf76ee1a15c1c12083fa372747ce46387289f", "type": "github" }, "original": { @@ -126,11 +126,11 @@ "nixpkgs": "nixpkgs" }, "locked": { - "lastModified": 1745598511, - "narHash": "sha256-GWYB7PngGwTJrp7gr0w6E5nnvwiblPvN2kjRCQw3ZEg=", + "lastModified": 1746175539, + "narHash": "sha256-/wjcn1CDQqOhwOoYKS8Xp0KejrdXSJZQMF1CbbrVtMw=", "owner": "catppuccin", "repo": "nix", - "rev": "199cb288a85b15ed203089804c024ae5b3eacd7c", + "rev": "a5db9e41a4dccfa5ffe38e6f1841a5f9ad5c5c04", "type": "github" }, "original": { @@ -150,11 +150,11 @@ ] }, "locked": { - "lastModified": 1745805923, - "narHash": "sha256-Nf7s2EPyVyDxmyKKOQu/HpXxttR2PmRzidYT7tflPDk=", + "lastModified": 1746393392, + "narHash": "sha256-pXPlbcEBRX5X3VodtXQlqHjmnTDbWFpfpZBeoDQibE4=", "owner": "chaotic-cx", "repo": "nyx", - "rev": "9ee0fe8c4db911e3b9c599699bcd610486a27c5a", + "rev": "00ad833cbada57424d273a4791a0435fd490b09e", "type": "github" }, "original": { @@ -209,11 +209,11 @@ "rust-analyzer-src": "rust-analyzer-src" }, "locked": { - "lastModified": 1745735608, - "narHash": "sha256-L0jzm815XBFfF2wCFmR+M1CF+beIEFj6SxlqVKF59Ec=", + "lastModified": 1745995211, + "narHash": "sha256-hf6Xu3KS06WyE/3dqV96iLGx3jIYQq9e68iCEFHrt04=", "owner": "nix-community", "repo": "fenix", - "rev": "c39a78eba6ed2a022cc3218db90d485077101496", + "rev": "0db04339c4e4c0fd42dbbaebe3590a67cbd12aa3", "type": "github" }, "original": { @@ -273,11 +273,11 @@ "flake-compat_3": { "flake": false, "locked": { - "lastModified": 1717312683, - "narHash": "sha256-FrlieJH50AuvagamEvWMIE6D2OAnERuDboFDYAED/dE=", + "lastModified": 1746162366, + "narHash": "sha256-5SSSZ/oQkwfcAz/o/6TlejlVGqeK08wyREBQ5qFFPhM=", "owner": "nix-community", "repo": "flake-compat", - "rev": "38fd3954cf65ce6faf3d0d45cd26059e059f07ea", + "rev": "0f158086a2ecdbb138cd0429410e44994f1b7e4b", "type": "github" }, "original": { @@ -512,11 +512,11 @@ ] }, "locked": { - "lastModified": 1745771770, - "narHash": "sha256-kC1yYNAO69i0Q9nnQFTxu5kdwcoHRE7x4jtJyIB5QSg=", + "lastModified": 1745987135, + "narHash": "sha256-8Up4QPuMZEJBU0eefAY+nUe7DYKQQzvaHnMpNdwRgKA=", "owner": "nix-community", "repo": "home-manager", - "rev": "0fbd8207e913b2d1660a7662f9ae80e5e639de65", + "rev": "d2b3e6c83d457aa0e7f9344c61c3fed32bad0f7e", "type": "github" }, "original": { @@ -532,11 +532,11 @@ ] }, "locked": { - "lastModified": 1745810134, - "narHash": "sha256-WfnYH/i7DFzn4SESQfWviXiNUZjohZhzODqLwKYHIPI=", + "lastModified": 1746413188, + "narHash": "sha256-i6BoiQP0PasExESQHszC0reQHfO6D4aI2GzOwZMOI20=", "owner": "nix-community", "repo": "home-manager", - "rev": "be7cf1709b469a2a2c62169172a167d1fed3509f", + "rev": "8a318641ac13d3bc0a53651feaee9560f9b2d89a", "type": "github" }, "original": { @@ -582,11 +582,11 @@ ] }, "locked": { - "lastModified": 1742215578, - "narHash": "sha256-zfs71PXVVPEe56WEyNi2TJQPs0wabU4WAlq0XV7GcdE=", + "lastModified": 1745948457, + "narHash": "sha256-lzTV10FJTCGNtMdgW5YAhCAqezeAzKOd/97HbQK8GTU=", "owner": "hyprwm", "repo": "hyprcursor", - "rev": "2fd36421c21aa87e2fe3bee11067540ae612f719", + "rev": "ac903e80b33ba6a88df83d02232483d99f327573", "type": "github" }, "original": { @@ -642,11 +642,11 @@ "xdph": "xdph" }, "locked": { - "lastModified": 1745795931, - "narHash": "sha256-i4zlEa2lnANuOZA1aA/X0cNGM7x9MLZqqmKP6fwfPEA=", + "lastModified": 1746411742, + "narHash": "sha256-5KdfDwcwjzQJC9ZeiIu6UMfaWG5cJqfhjg2mE0+nzgA=", "owner": "hyprwm", "repo": "Hyprland", - "rev": "f5c5cfa960c157c8df50b496f621290234ac4505", + "rev": "1c530cbc66dbff585d55e435efd5e6a6e5614f88", "type": "github" }, "original": { @@ -735,11 +735,11 @@ ] }, "locked": { - "lastModified": 1739048983, - "narHash": "sha256-REhTcXq4qs3B3cCDtLlYDz0GZvmsBSh947Ub6pQWGTQ=", + "lastModified": 1745951494, + "narHash": "sha256-2dModE32doiyQMmd6EDAQeZnz+5LOs6KXyE0qX76WIg=", "owner": "hyprwm", "repo": "hyprland-qtutils", - "rev": "3504a293c8f8db4127cb0f7cfc1a318ffb4316f8", + "rev": "4be1d324faf8d6e82c2be9f8510d299984dfdd2e", "type": "github" }, "original": { @@ -764,11 +764,11 @@ ] }, "locked": { - "lastModified": 1744468525, - "narHash": "sha256-9HySx+EtsbbKlZDlY+naqqOV679VdxP6x6fP3wxDXJk=", + "lastModified": 1745357019, + "narHash": "sha256-q/C3qj9FWHQenObXuw/nGIT8iIsWFjgmcQYcA+ZfpPs=", "owner": "hyprwm", "repo": "hyprlang", - "rev": "f1000c54d266e6e4e9d646df0774fac5b8a652df", + "rev": "397600c42b8d7a443a5b4e92aa15f46650a90f18", "type": "github" }, "original": { @@ -794,11 +794,11 @@ "systems": "systems_3" }, "locked": { - "lastModified": 1742816163, - "narHash": "sha256-EIJka3UtSEtmkDBjYiGeR/hO6s6R4x3K+rbUlc9KPBE=", + "lastModified": 1746395148, + "narHash": "sha256-lu9G00SldO4FLvK/taJmPyrnAqt6d/5Y0OgNcbjlzew=", "owner": "hyprwm", "repo": "hyprsunset", - "rev": "7b7339f0deef23ec23a723651528cb8ae56c11d9", + "rev": "fdcc9a1e170fbc073f88576ce52f893f8bbc6a45", "type": "github" }, "original": { @@ -819,11 +819,11 @@ ] }, "locked": { - "lastModified": 1743950287, - "narHash": "sha256-/6IAEWyb8gC/NKZElxiHChkouiUOrVYNq9YqG0Pzm4Y=", + "lastModified": 1745975815, + "narHash": "sha256-s3GzsRxBL/N/xYgUXZhQh4t62uR1BN4zxXgWBtJ3lWM=", "owner": "hyprwm", "repo": "hyprutils", - "rev": "f2dc70e448b994cef627a157ee340135bd68fbc6", + "rev": "05878d9470c9e5cbc8807813f9ec2006627a0ca0", "type": "github" }, "original": { @@ -991,11 +991,11 @@ ] }, "locked": { - "lastModified": 1745725746, - "narHash": "sha256-iR+idGZJ191cY6NBXyVjh9QH8GVWTkvZw/w+1Igy45A=", + "lastModified": 1746330942, + "narHash": "sha256-ShizFaJCAST23tSrHHtFFGF0fwd72AG+KhPZFFQX/0o=", "owner": "nix-community", "repo": "nix-index-database", - "rev": "187524713d0d9b2d2c6f688b81835114d4c2a7c6", + "rev": "137fd2bd726fff343874f85601b51769b48685cc", "type": "github" }, "original": { @@ -1012,11 +1012,11 @@ "rust-overlay": "rust-overlay_2" }, "locked": { - "lastModified": 1745752145, - "narHash": "sha256-SRvolJBy9oRUdfik/xtcsguQtcDHrkzq1yf5NbsLBhY=", + "lastModified": 1746356902, + "narHash": "sha256-aV2pm+XKEoGE/BuqJwI1zDhtHclzC5BsbSO+SAMFEKk=", "owner": "lilyinstarlight", "repo": "nixos-cosmic", - "rev": "0ba6c63681ae317d122a5e76bc2bf556737a53d0", + "rev": "22325997671e2a6f0a2e784db2746267868a33ed", "type": "github" }, "original": { @@ -1074,11 +1074,11 @@ }, "nixpkgs-stable_2": { "locked": { - "lastModified": 1745487689, - "narHash": "sha256-FQoi3R0NjQeBAsEOo49b5tbDPcJSMWc3QhhaIi9eddw=", + "lastModified": 1746183838, + "narHash": "sha256-kwaaguGkAqTZ1oK0yXeQ3ayYjs8u/W7eEfrFpFfIDFA=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "5630cf13cceac06cefe9fc607e8dfa8fb342dde3", + "rev": "bf3287dac860542719fe7554e21e686108716879", "type": "github" }, "original": { @@ -1090,11 +1090,11 @@ }, "nixpkgs-stable_3": { "locked": { - "lastModified": 1745742390, - "narHash": "sha256-1rqa/XPSJqJg21BKWjzJZC7yU0l/YTVtjRi0RJmipus=", + "lastModified": 1746422338, + "narHash": "sha256-NTtKOTLQv6dPfRe00OGSywg37A1FYqldS6xiNmqBUYc=", "owner": "nixos", "repo": "nixpkgs", - "rev": "26245db0cb552047418cfcef9a25da91b222d6c7", + "rev": "5b35d248e9206c1f3baf8de6a7683fee126364aa", "type": "github" }, "original": { @@ -1106,11 +1106,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1745526057, - "narHash": "sha256-ITSpPDwvLBZBnPRS2bUcHY3gZSwis/uTe255QgMtTLA=", + "lastModified": 1746232882, + "narHash": "sha256-MHmBH2rS8KkRRdoU/feC/dKbdlMkcNkB5mwkuipVHeQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f771eb401a46846c1aebd20552521b233dd7e18b", + "rev": "7a2622e2c0dbad5c4493cb268aba12896e28b008", "type": "github" }, "original": { @@ -1122,11 +1122,11 @@ }, "nixpkgs_3": { "locked": { - "lastModified": 1745526057, - "narHash": "sha256-ITSpPDwvLBZBnPRS2bUcHY3gZSwis/uTe255QgMtTLA=", + "lastModified": 1746328495, + "narHash": "sha256-uKCfuDs7ZM3QpCE/jnfubTg459CnKnJG/LwqEVEdEiw=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f771eb401a46846c1aebd20552521b233dd7e18b", + "rev": "979daf34c8cacebcd917d540070b52a3c2b9b16e", "type": "github" }, "original": { @@ -1243,17 +1243,18 @@ "nixpkgs": "nixpkgs_3", "nixpkgs-stable": "nixpkgs-stable_3", "sops-nix": "sops-nix", - "stylix": "stylix" + "stylix": "stylix", + "walker": "walker" } }, "rust-analyzer-src": { "flake": false, "locked": { - "lastModified": 1745694049, - "narHash": "sha256-fxvRYH/tS7hGQeg9zCVh5RBcSWT+JGJet7RA8Ss+rC0=", + "lastModified": 1745949276, + "narHash": "sha256-9ZK31t2HUiGdLLnDafrRnSrrO12JwqcAFbrJ9nRwh0Y=", "owner": "rust-lang", "repo": "rust-analyzer", - "rev": "d8887c0758bbd2d5f752d5bd405d4491e90e7ed6", + "rev": "78a488dd5e7e4f17162001519665795e6e68b6f8", "type": "github" }, "original": { @@ -1292,11 +1293,11 @@ ] }, "locked": { - "lastModified": 1745721366, - "narHash": "sha256-dm93104HXjKWzkrr7yAPtxpbllOSzrwFFruc+rKQHSg=", + "lastModified": 1746326315, + "narHash": "sha256-IDqSls/r6yBfdOBRSMQ/noTUoigmsKnTQ7TqpsBtN4Y=", "owner": "oxalica", "repo": "rust-overlay", - "rev": "621131c9e281d1047bf8937547ed77e97c464aba", + "rev": "dd280c436961ec5adccf0135efe5b66a23d84497", "type": "github" }, "original": { @@ -1421,6 +1422,21 @@ "type": "github" } }, + "systems_5": { + "locked": { + "lastModified": 1689347949, + "narHash": "sha256-12tWmuL2zgBgZkdoB6qXZsgJEH9LR3oUgpaQq2RbI80=", + "owner": "nix-systems", + "repo": "default-linux", + "rev": "31732fcf5e8fea42e59c2488ad31a0e651500f68", + "type": "github" + }, + "original": { + "owner": "nix-systems", + "repo": "default-linux", + "type": "github" + } + }, "tinted-foot": { "flake": false, "locked": { @@ -1525,6 +1541,27 @@ "type": "github" } }, + "walker": { + "inputs": { + "nixpkgs": [ + "nixpkgs" + ], + "systems": "systems_5" + }, + "locked": { + "lastModified": 1746253489, + "narHash": "sha256-Lsegrsus7oZLLglhjYDUWKSh544Rylkc9y2GBnsD4TE=", + "owner": "abenz1267", + "repo": "walker", + "rev": "65fd786cf25c207efe0b5f2963d4cb5b2125bc22", + "type": "github" + }, + "original": { + "owner": "abenz1267", + "repo": "walker", + "type": "github" + } + }, "xdph": { "inputs": { "hyprland-protocols": [ @@ -1553,11 +1590,11 @@ ] }, "locked": { - "lastModified": 1744644585, - "narHash": "sha256-p0D/e4J6Sv6GSb+9u8OQcVHSE2gPNYB5ygIfGDyEiXQ=", + "lastModified": 1745871725, + "narHash": "sha256-M24SNc2flblWGXFkGQfqSlEOzAGZnMc9QG3GH4K/KbE=", "owner": "hyprwm", "repo": "xdg-desktop-portal-hyprland", - "rev": "be6771e754345f18244fb00aae5c9e5ab21ccc26", + "rev": "76bbf1a6b1378e4ab5230bad00ad04bc287c969e", "type": "github" }, "original": { diff --git a/flake.nix b/flake.nix index 3f704b1..607a872 100644 --- a/flake.nix +++ b/flake.nix @@ -22,6 +22,10 @@ nixpkgs-stable.url = "github:nixos/nixpkgs/nixos-24.11"; nixpkgs.url = "github:NixOS/nixpkgs?ref=nixos-unstable"; sops-nix.url = "github:mic92/sops-nix"; + walker = { + url = "github:abenz1267/walker"; + inputs.nixpkgs.follows = "nixpkgs"; + }; stylix.url = "github:danth/stylix/8b0d9317edd57c5374adcf6957ae4775875c2a9d"; # TODO: somehow reduce the number of *.inputs.nixpkgs.follows = "nixpkgs" stuff, mb a function? blueprint.inputs.nixpkgs.follows = "nixpkgs"; diff --git a/hosts/dunamis/users/user/common.nix b/hosts/dunamis/users/user/common.nix index 71c96e3..9a72f96 100644 --- a/hosts/dunamis/users/user/common.nix +++ b/hosts/dunamis/users/user/common.nix @@ -11,4 +11,7 @@ inherit (osConfig) desktop; home.stateVersion = osConfig.system.stateVersion; home.sessionPath = ["$HOME/.local/bin"]; + + # TODO: remove when unbroken + stylix.targets.mako.enable = false; } diff --git a/modules/home/desktop/niri/default.nix b/modules/home/desktop/niri/default.nix index fa7971f..386e957 100644 --- a/modules/home/desktop/niri/default.nix +++ b/modules/home/desktop/niri/default.nix @@ -8,21 +8,16 @@ }: let inherit (lib.strings) removeSuffix; inherit (lib) mkIf mkEnableOption mkDefault mkForce getExe; - inherit (config.lib.stylix) colors; - inherit (config.stylix) cursor; inherit (osConfig.module.stylix) theme; inherit (osConfig.networking) hostName; cfg = config.desktop.niri; - keyboard = - if hostName == "eldrid" - then "chromeos" - else "platform"; - xdgPics = - config.xdg.userDirs.pictures; ifLaptop = mkIf (hostName != "dunamis"); - launcher = getExe pkgs.fuzzel; + launcher = getExe pkgs.walker; lockscreen = getExe pkgs.gtklock; in { + imports = [ + ./programs + ]; options = { desktop.niri.enable = mkEnableOption "enable niri desktop"; @@ -33,386 +28,14 @@ in { wpaperd.enable = true; qt.enable = false; }; - xdg.configFile = { - niri = { - target = "niri/config.kdl"; - text = let - arrows = { - left = "Left"; - down = "Down"; - up = "Up"; - right = "Right"; - }; - homerow-arrows = { - left = "n"; - down = "e"; - up = "i"; - right = "o"; - }; - letters = { - first = "Q"; - second = "W"; - third = "F"; - fourth = "P"; - fifth = "B"; - sixth = "J"; - seventh = "L"; - eighth = "U"; - ninth = "Y"; - }; - numbers = { - first = "1"; - second = "2"; - third = "3"; - fourth = "4"; - fifth = "5"; - sixth = "6"; - seventh = "7"; - eighth = "8"; - ninth = "9"; - }; - genArrowNavigation = keys: '' - Mod+${keys.left} { focus-column-left; } - Mod+${keys.down} { focus-window-or-workspace-down; } - Mod+${keys.up} { focus-window-or-workspace-up; } - Mod+${keys.right} { focus-column-right; } - Mod+Ctrl+${keys.left} { move-column-left; } - Mod+Ctrl+${keys.down} { move-window-down-or-to-workspace-down; } - Mod+Ctrl+${keys.up} { move-window-up-or-to-workspace-up; } - Mod+Ctrl+${keys.right} { move-column-right; } - Mod+Shift+${keys.left} { focus-monitor-left; } - Mod+Shift+${keys.down} { focus-monitor-down; } - Mod+Shift+${keys.up} { focus-monitor-up; } - Mod+Shift+${keys.right} { focus-monitor-right; } - Mod+Shift+Ctrl+${keys.left} { move-column-to-monitor-left; } - Mod+Shift+Ctrl+${keys.down} { move-column-to-monitor-down; } - Mod+Shift+Ctrl+${keys.up} { move-column-to-monitor-up; } - Mod+Shift+Ctrl+${keys.right} { move-column-to-monitor-right; } - ''; - genWorkspacesNavigation = keys: '' - Mod+${keys.first} { focus-workspace 1; } - Mod+${keys.second} { focus-workspace 2; } - Mod+${keys.third} { focus-workspace 3; } - Mod+${keys.fourth} { focus-workspace 4; } - Mod+${keys.fifth} { focus-workspace 5; } - Mod+${keys.sixth} { focus-workspace 6; } - Mod+${keys.seventh} { focus-workspace 7; } - Mod+${keys.eighth} { focus-workspace 8; } - Mod+${keys.ninth} { focus-workspace 9; } - Mod+Ctrl+Shift+${keys.first} { move-column-to-workspace 1; } - Mod+Ctrl+Shift+${keys.second} { move-column-to-workspace 2; } - Mod+Ctrl+Shift+${keys.third} { move-column-to-workspace 3; } - Mod+Ctrl+Shift+${keys.fourth} { move-column-to-workspace 4; } - Mod+Ctrl+Shift+${keys.fifth} { move-column-to-workspace 5; } - Mod+Ctrl+Shift+${keys.sixth} { move-column-to-workspace 6; } - Mod+Ctrl+Shift+${keys.seventh} { move-column-to-workspace 7; } - Mod+Ctrl+Shift+${keys.eighth} { move-column-to-workspace 8; } - Mod+Ctrl+Shift+${keys.ninth} { move-column-to-workspace 9; } - ''; - in '' - environment { - DISPLAY ":123" - QT_QPA_PLATFORM "wayland" - QT_QPA_PLATFORMTHEME "gtk3" - GDK_BACKEND "wayland" - MOZ_ENABLE_WAYLAND "1" - MOZ_WEBRENDER "1" - XDG_SESSION_TYPE "wayland" - CLUTTER_BACKEND "wayland" - SDL_VIDEODRIVER "wayland" - } - input { - keyboard { - xkb { - layout "us,ua" - ${ - if (hostName == "dunamis" || hostName == "legion") - then "// variant \"colemak_dh_ortho,\"" - else "variant \"colemak_dh_ortho,\"" - } - } - repeat-delay 200 - repeat-rate 50 - track-layout "global" - } - touchpad { - // off - tap - // dwt - // dwtp - natural-scroll - accel-speed 0.2 - accel-profile "flat" - // scroll-method "two-finger" - // disabled-on-external-mouse - } - mouse { - // off - // natural-scroll - accel-speed 0.0 - accel-profile "flat" - // scroll-method "no-scroll" - } - warp-mouse-to-focus - // focus-follows-mouse - } - output "eDP-1" { - // off - scale 1.2 - transform "normal" - // position x=1920 y=0 - } - output "Samsung Electric Company S24R65x H4TMA03291" { - position x=0 y=0 - variable-refresh-rate - } - output "Philips Consumer Electronics Company 27M2N5500 UK02418033254" { - mode "2560x1440@${ - if hostName == "legion" - then "144.001" - else "180.000" - }" - variable-refresh-rate - position x=0 y=0 - scale 1.33 - } - output "PNP(AOC) 27V2G5 0x0000026C" { - position x=1920 y=0 - mode "1920x1080@74.973" - variable-refresh-rate - } - - cursor { - xcursor-theme "${cursor.name}" - xcursor-size ${toString cursor.size} - } - - layout { - gaps 6 - center-focused-column "never" // "on-overflow" - preset-column-widths { - proportion 0.33333 - proportion 0.66667 - } - - // default-column-width { proportion 0.9; } - default-column-width { proportion 0.5; } - tab-indicator { - active-color "#${colors.base04}" - inactive-color "#${colors.base03}" - corner-radius 4 - gap 6 - gaps-between-tabs 3 - length total-proportion=0.3 - place-within-column - position "left" - width 6 - } - focus-ring { - // off - width 3 - active-gradient from="#${colors.base0D}" to="#${colors.base0F}" angle=40 relative-to="workspace-view" - inactive-color "#${colors.base03}" - } - struts { - left 24 - right 24 - } - } - - prefer-no-csd - - hotkey-overlay { - skip-at-startup - } - window-rule { - geometry-corner-radius 12 - clip-to-geometry true - } - window-rule { - match is-window-cast-target=true - focus-ring { - width 3 - active-color "#${colors.base0F}" - inactive-color "#${colors.base03}" - } - border { - width 3 - active-color "#${colors.base0F}" - inactive-color "#${colors.base03}" - } - shadow { - on - color "#${colors.base0F}" - inactive-color "#${colors.base03}" - } - } - - screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png" - - animations { - slowdown 0.8 - } - - window-rule { - match title="Картинка в картинці" - match title="Picture-in-Picture" - open-floating true - } - window-rule { - match app-id="org.wezfurlong.wezterm" - match app-id="com.mitchellh.ghostty" - default-column-width { proportion 1.0; } - } - window-rule { - match app-id="re.sonny.Junction" - open-floating true - open-focused true - } - - window-rule { - match app-id="com.mitchellh.ghostty" - draw-border-with-background false - } - - window-rule { - match app-id=r#"^org\.keepassxc\.KeePassXC$"# - match app-id=r#"^org\.gnome\.World\.Secrets$"# - match app-id=r#"^Bitwarden$"# - match app-id="org.telegram.desktop" - match app-id="org.signal.Signal" - match app-id="WebCord" - // block-out-from "screen-capture" - block-out-from "screencast" - } - - binds { - Mod+Shift+Slash { show-hotkey-overlay; } - - Mod+Tab { focus-workspace-previous; } - Mod+C { center-column; } - Mod+M { maximize-column; } - Mod+H { set-column-width "50%"; } - Mod+T { set-column-width "33%"; } - Mod+Shift+T { set-column-width "67%"; } - Mod+V { toggle-column-tabbed-display; } - Mod+G { switch-focus-between-floating-and-tiling; } - - Mod+Ctrl+Comma { consume-or-expel-window-left; } - Mod+Ctrl+Period { consume-or-expel-window-right; } - - Mod+Ctrl+Q { close-window; } - Mod+Ctrl+M { fullscreen-window; } - Mod+Ctrl+G { toggle-window-floating; } - - Mod+Minus { set-column-width "-10%"; } - Mod+Equal { set-column-width "+10%"; } - Mod+Comma { set-column-width "-10%"; } - Mod+Period { set-column-width "+10%"; } - Mod+Shift+Comma { set-window-height "-10%"; } - Mod+Shift+Period { set-window-height "+10%"; } - - Mod+Escape { switch-layout "next"; } - - Mod+Return repeat=false { spawn "sh" "-c" "$TERMINAL"; } - Mod+Space repeat=false { spawn "${launcher}"; } - Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; } - Mod+Ctrl+V repeat=false { spawn "copyq" "toggle"; } - - Mod+Ctrl+Shift+BracketLeft { quit; } - Mod+Ctrl+Shift+BracketRight { power-off-monitors; } - - Print { screenshot; } - Ctrl+Print { screenshot-screen; } - Shift+Print { screenshot-window; } - - // Caps_Lock { spawn "swayosd-client" "--caps-lock"; } - // XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"; } - // XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%-"; } - // XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } - // XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } - XF86AudioRaiseVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "raise"; } - XF86AudioLowerVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "lower"; } - XF86AudioMute allow-when-locked=true { spawn "swayosd-client" "--output-volume" "mute-toggle"; } - XF86AudioMicMute allow-when-locked=true { spawn "swayosd-client" "--input-volume" "mute-toggle"; } - XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; } - XF86AudioPause allow-when-locked=true { spawn "playerctl" "pause"; } - XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; } - XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; } - - XF86ScreenSaver allow-when-locked=true { spawn "${lockscreen}"; } - XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+"; } - XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-"; } - Alt+XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "${keyboard}::kbd_backlight"; } - Alt+XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "${keyboard}::kbd_backlight"; } - XF86KbdBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "${keyboard}::kbd_backlight"; } - XF86KbdBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "${keyboard}::kbd_backlight"; } - - - Mod+Home { focus-column-first; } - Mod+End { focus-column-last; } - Mod+Ctrl+Home { move-column-to-first; } - Mod+Ctrl+End { move-column-to-last; } - - Mod+Next { focus-workspace-down; } - Mod+Prior { focus-workspace-up; } - Mod+Ctrl+Next { move-column-to-workspace-down; } - Mod+Ctrl+Prior { move-column-to-workspace-up; } - Mod+Shift+Next { move-workspace-down; } - Mod+Shift+Prior { move-workspace-up; } - - Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } - Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } - Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } - Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } - - Mod+WheelScrollRight { focus-column-right; } - Mod+WheelScrollLeft { focus-column-left; } - Mod+Ctrl+WheelScrollRight { move-column-right; } - Mod+Ctrl+WheelScrollLeft { move-column-left; } - Mod+Shift+WheelScrollDown { focus-column-right; } - Mod+Shift+WheelScrollUp { focus-column-left; } - Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } - Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } - - Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } - Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } - - ${genArrowNavigation arrows} - ${genArrowNavigation homerow-arrows} - ${genWorkspacesNavigation letters} - ${genWorkspacesNavigation numbers} - } - ''; + dconf.settings = { + "org/gnome/desktop/wm/preferences" = { + button-layout = "icon:close"; + }; + "org/gnome/desktop/interface" = { + icon-theme = config.gtk.iconTheme.name; }; }; - services = import ./services {inherit pkgs lockscreen getExe perSystem;}; - programs.fuzzel = import ./programs/fuzzel {inherit config mkDefault;}; - programs.waybar = import ./programs/waybar {inherit colors config getExe ifLaptop pkgs;}; - home.packages = with pkgs; - [ - # gui libadwaita apps - celluloid # mpv gui in libadwaita - helvum # pipewire patchbay in rust - junction # app chooser - loupe # image viewer and editor in rust - mission-center # task manager in rust (partly) - nautilus # file manager - overskride # bluetooth gui in rust - papers # pdf reader in rust - pika-backup # borg gui in rust - pwvucontrol # pipewire gui in rust - wdisplays # wlroots display configurator - ] - ++ [ - # misc utils - (ifLaptop brightnessctl) - dconf - libnotify - playerctl - wl-clipboard-rs # wl-clipboard in rust - ]; - gtk = { enable = true; iconTheme = { @@ -430,14 +53,35 @@ in { enable = true; platformTheme.name = "gtk3"; }; - dconf.settings = { - "org/gnome/desktop/wm/preferences" = { - button-layout = "icon:close"; - }; - "org/gnome/desktop/interface" = { - icon-theme = config.gtk.iconTheme.name; - }; - }; + + xdg.configFile.niri = import ./niri.nix {inherit config hostName launcher lockscreen;}; + services = import ./services {inherit pkgs lockscreen getExe perSystem;}; + + home.packages = with pkgs; + [ + # gui libadwaita apps + celluloid # mpv gui in libadwaita + helvum # pipewire patchbay in rust + junction # app chooser + loupe # image viewer and editor in rust + mission-center # task manager in rust (partly) + nautilus # file manager + overskride # bluetooth gui in rust + papers # pdf reader in rust + pika-backup # borg gui in rust + pwvucontrol # pipewire gui in rust + sonusmix # pipewire routing tool in rust + wdisplays # wlroots display configurator + ] + ++ [ + # misc utils + (ifLaptop brightnessctl) + dconf + libnotify + playerctl + wl-clipboard-rs # wl-clipboard in rust + ]; + xdg = { mime.enable = true; mimeApps = { diff --git a/modules/home/desktop/niri/niri.nix b/modules/home/desktop/niri/niri.nix new file mode 100644 index 0000000..04772b0 --- /dev/null +++ b/modules/home/desktop/niri/niri.nix @@ -0,0 +1,368 @@ +{ + config, + hostName, + launcher, + lockscreen, + ... +}: let + inherit (config.lib.stylix) colors; + inherit (config.stylix) cursor; + keyboard = + if hostName == "eldrid" + then "chromeos" + else "platform"; + xdgPics = + config.xdg.userDirs.pictures; +in { + target = "niri/config.kdl"; + text = let + arrows = { + left = "Left"; + down = "Down"; + up = "Up"; + right = "Right"; + }; + homerow-arrows = { + left = "n"; + down = "e"; + up = "i"; + right = "o"; + }; + letters = { + first = "Q"; + second = "W"; + third = "F"; + fourth = "P"; + fifth = "B"; + sixth = "J"; + seventh = "L"; + eighth = "U"; + ninth = "Y"; + }; + numbers = { + first = "1"; + second = "2"; + third = "3"; + fourth = "4"; + fifth = "5"; + sixth = "6"; + seventh = "7"; + eighth = "8"; + ninth = "9"; + }; + genArrowNavigation = keys: '' + Mod+${keys.left} { focus-column-left; } + Mod+${keys.down} { focus-window-or-workspace-down; } + Mod+${keys.up} { focus-window-or-workspace-up; } + Mod+${keys.right} { focus-column-right; } + Mod+Ctrl+${keys.left} { move-column-left; } + Mod+Ctrl+${keys.down} { move-window-down-or-to-workspace-down; } + Mod+Ctrl+${keys.up} { move-window-up-or-to-workspace-up; } + Mod+Ctrl+${keys.right} { move-column-right; } + Mod+Shift+${keys.left} { focus-monitor-left; } + Mod+Shift+${keys.down} { focus-monitor-down; } + Mod+Shift+${keys.up} { focus-monitor-up; } + Mod+Shift+${keys.right} { focus-monitor-right; } + Mod+Shift+Ctrl+${keys.left} { move-column-to-monitor-left; } + Mod+Shift+Ctrl+${keys.down} { move-column-to-monitor-down; } + Mod+Shift+Ctrl+${keys.up} { move-column-to-monitor-up; } + Mod+Shift+Ctrl+${keys.right} { move-column-to-monitor-right; } + ''; + genWorkspacesNavigation = keys: '' + Mod+${keys.first} { focus-workspace 1; } + Mod+${keys.second} { focus-workspace 2; } + Mod+${keys.third} { focus-workspace 3; } + Mod+${keys.fourth} { focus-workspace 4; } + Mod+${keys.fifth} { focus-workspace 5; } + Mod+${keys.sixth} { focus-workspace 6; } + Mod+${keys.seventh} { focus-workspace 7; } + Mod+${keys.eighth} { focus-workspace 8; } + Mod+${keys.ninth} { focus-workspace 9; } + Mod+Ctrl+Shift+${keys.first} { move-column-to-workspace 1; } + Mod+Ctrl+Shift+${keys.second} { move-column-to-workspace 2; } + Mod+Ctrl+Shift+${keys.third} { move-column-to-workspace 3; } + Mod+Ctrl+Shift+${keys.fourth} { move-column-to-workspace 4; } + Mod+Ctrl+Shift+${keys.fifth} { move-column-to-workspace 5; } + Mod+Ctrl+Shift+${keys.sixth} { move-column-to-workspace 6; } + Mod+Ctrl+Shift+${keys.seventh} { move-column-to-workspace 7; } + Mod+Ctrl+Shift+${keys.eighth} { move-column-to-workspace 8; } + Mod+Ctrl+Shift+${keys.ninth} { move-column-to-workspace 9; } + ''; + in '' + environment { + DISPLAY ":123" + QT_QPA_PLATFORMTHEME "gtk3" + MOZ_ENABLE_WAYLAND "1" + MOZ_WEBRENDER "1" + GDK_BACKEND "wayland" + QT_QPA_PLATFORM "wayland" + XDG_SESSION_TYPE "wayland" + CLUTTER_BACKEND "wayland" + SDL_VIDEODRIVER "wayland" + } + input { + keyboard { + xkb { + layout "us,ua" + ${ + if (hostName == "dunamis" || hostName == "legion") + then "// variant \"colemak_dh_ortho,\"" + else "variant \"colemak_dh_ortho,\"" + } + } + repeat-delay 200 + repeat-rate 50 + track-layout "global" + } + touchpad { + // off + tap + // dwt + // dwtp + natural-scroll + accel-speed 0.2 + accel-profile "flat" + // scroll-method "two-finger" + // disabled-on-external-mouse + } + mouse { + // off + // natural-scroll + accel-speed 0.0 + accel-profile "flat" + // scroll-method "no-scroll" + } + warp-mouse-to-focus + // focus-follows-mouse + } + output "eDP-1" { + // off + scale 1.2 + transform "normal" + // position x=1920 y=0 + } + output "Samsung Electric Company S24R65x H4TMA03291" { + position x=0 y=0 + variable-refresh-rate + } + output "Philips Consumer Electronics Company 27M2N5500 UK02418033254" { + mode "2560x1440@${ + if hostName == "legion" + then "144.001" + else "180.000" + }" + variable-refresh-rate + position x=0 y=0 + scale 1.33 + } + output "PNP(AOC) 27V2G5 0x0000026C" { + position x=1920 y=0 + mode "1920x1080@74.973" + variable-refresh-rate + } + + cursor { + xcursor-theme "${cursor.name}" + xcursor-size ${toString cursor.size} + } + + layout { + gaps 6 + center-focused-column "never" // "on-overflow" + preset-column-widths { + proportion 0.33333 + proportion 0.66667 + } + + // default-column-width { proportion 0.9; } + default-column-width { proportion 0.5; } + tab-indicator { + active-color "#${colors.base04}" + inactive-color "#${colors.base03}" + corner-radius 4 + gap 6 + gaps-between-tabs 3 + length total-proportion=0.3 + place-within-column + position "left" + width 6 + } + focus-ring { + // off + width 3 + active-gradient from="#${colors.base0D}" to="#${colors.base0F}" angle=40 relative-to="workspace-view" + inactive-color "#${colors.base03}" + } + struts { + left 24 + right 24 + } + } + + prefer-no-csd + + hotkey-overlay { + skip-at-startup + } + window-rule { + geometry-corner-radius 12 + clip-to-geometry true + } + window-rule { + match is-window-cast-target=true + focus-ring { + width 3 + active-color "#${colors.base0F}" + inactive-color "#${colors.base03}" + } + border { + width 3 + active-color "#${colors.base0F}" + inactive-color "#${colors.base03}" + } + shadow { + on + color "#${colors.base0F}" + inactive-color "#${colors.base03}" + } + } + + screenshot-path "${xdgPics}/screenshots/screenshot-%Y-%m-%d-%H-%M-%S.png" + + animations { + slowdown 0.8 + } + + window-rule { + match title="Картинка в картинці" + match title="Picture-in-Picture" + open-floating true + } + window-rule { + match app-id="org.wezfurlong.wezterm" + match app-id="com.mitchellh.ghostty" + default-column-width { proportion 1.0; } + } + window-rule { + match app-id="re.sonny.Junction" + open-floating true + open-focused true + } + + window-rule { + match app-id="com.mitchellh.ghostty" + draw-border-with-background false + } + + window-rule { + match app-id=r#"^org\.keepassxc\.KeePassXC$"# + match app-id=r#"^org\.gnome\.World\.Secrets$"# + match app-id=r#"^Bitwarden$"# + match app-id="org.telegram.desktop" + match app-id="org.signal.Signal" + match app-id="WebCord" + // block-out-from "screen-capture" + block-out-from "screencast" + } + + binds { + Mod+Shift+Slash { show-hotkey-overlay; } + + Mod+Tab { focus-workspace-previous; } + Mod+C { center-column; } + Mod+M { maximize-column; } + Mod+H { set-column-width "50%"; } + Mod+T { set-column-width "33%"; } + Mod+Shift+T { set-column-width "67%"; } + Mod+V { toggle-column-tabbed-display; } + Mod+G { switch-focus-between-floating-and-tiling; } + + Mod+Ctrl+Comma { consume-or-expel-window-left; } + Mod+Ctrl+Period { consume-or-expel-window-right; } + + Mod+Ctrl+Q { close-window; } + Mod+Ctrl+M { fullscreen-window; } + Mod+Ctrl+G { toggle-window-floating; } + + Mod+Minus { set-column-width "-10%"; } + Mod+Equal { set-column-width "+10%"; } + Mod+Comma { set-column-width "-10%"; } + Mod+Period { set-column-width "+10%"; } + Mod+Shift+Comma { set-window-height "-10%"; } + Mod+Shift+Period { set-window-height "+10%"; } + + Mod+Escape { switch-layout "next"; } + + Mod+Return repeat=false { spawn "sh" "-c" "$TERMINAL"; } + Mod+Space repeat=false { spawn "${launcher}"; } + Mod+Ctrl+L repeat=false { spawn "${lockscreen}"; } + Mod+Ctrl+V repeat=false { spawn "copyq" "toggle"; } + + Mod+Shift+W repeat=false { spawn "walker" "-m" "windows"; } + + Mod+Ctrl+Shift+BracketLeft { quit; } + Mod+Ctrl+Shift+BracketRight { power-off-monitors; } + + Print { screenshot; } + Ctrl+Print { screenshot-screen; } + Shift+Print { screenshot-window; } + + // Caps_Lock { spawn "swayosd-client" "--caps-lock"; } + // XF86AudioRaiseVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%+"; } + // XF86AudioLowerVolume allow-when-locked=true { spawn "wpctl" "set-volume" "-l" "1.0" "@DEFAULT_AUDIO_SINK@" "5%-"; } + // XF86AudioMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"; } + // XF86AudioMicMute allow-when-locked=true { spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"; } + XF86AudioRaiseVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "raise"; } + XF86AudioLowerVolume allow-when-locked=true { spawn "swayosd-client" "--output-volume" "lower"; } + XF86AudioMute allow-when-locked=true { spawn "swayosd-client" "--output-volume" "mute-toggle"; } + XF86AudioMicMute allow-when-locked=true { spawn "swayosd-client" "--input-volume" "mute-toggle"; } + XF86AudioPlay allow-when-locked=true { spawn "playerctl" "play-pause"; } + XF86AudioPause allow-when-locked=true { spawn "playerctl" "pause"; } + XF86AudioPrev allow-when-locked=true { spawn "playerctl" "previous"; } + XF86AudioNext allow-when-locked=true { spawn "playerctl" "next"; } + + XF86ScreenSaver allow-when-locked=true { spawn "${lockscreen}"; } + XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+"; } + XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-"; } + Alt+XF86MonBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "${keyboard}::kbd_backlight"; } + Alt+XF86MonBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "${keyboard}::kbd_backlight"; } + XF86KbdBrightnessUp allow-when-locked=true { spawn "brightnessctl" "s" "5%+" "-d" "${keyboard}::kbd_backlight"; } + XF86KbdBrightnessDown allow-when-locked=true { spawn "brightnessctl" "s" "5%-" "-d" "${keyboard}::kbd_backlight"; } + + + Mod+Home { focus-column-first; } + Mod+End { focus-column-last; } + Mod+Ctrl+Home { move-column-to-first; } + Mod+Ctrl+End { move-column-to-last; } + + Mod+Next { focus-workspace-down; } + Mod+Prior { focus-workspace-up; } + Mod+Ctrl+Next { move-column-to-workspace-down; } + Mod+Ctrl+Prior { move-column-to-workspace-up; } + Mod+Shift+Next { move-workspace-down; } + Mod+Shift+Prior { move-workspace-up; } + + Mod+WheelScrollDown cooldown-ms=150 { focus-workspace-down; } + Mod+WheelScrollUp cooldown-ms=150 { focus-workspace-up; } + Mod+Ctrl+WheelScrollDown cooldown-ms=150 { move-column-to-workspace-down; } + Mod+Ctrl+WheelScrollUp cooldown-ms=150 { move-column-to-workspace-up; } + + Mod+WheelScrollRight { focus-column-right; } + Mod+WheelScrollLeft { focus-column-left; } + Mod+Ctrl+WheelScrollRight { move-column-right; } + Mod+Ctrl+WheelScrollLeft { move-column-left; } + Mod+Shift+WheelScrollDown { focus-column-right; } + Mod+Shift+WheelScrollUp { focus-column-left; } + Mod+Ctrl+Shift+WheelScrollDown { move-column-right; } + Mod+Ctrl+Shift+WheelScrollUp { move-column-left; } + + Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; } + Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; } + + ${genArrowNavigation arrows} + ${genArrowNavigation homerow-arrows} + ${genWorkspacesNavigation letters} + ${genWorkspacesNavigation numbers} + } + ''; +} diff --git a/modules/home/desktop/niri/programs/default.nix b/modules/home/desktop/niri/programs/default.nix index d1e742d..7056f2e 100644 --- a/modules/home/desktop/niri/programs/default.nix +++ b/modules/home/desktop/niri/programs/default.nix @@ -1,6 +1,20 @@ { - imports = [ - ./fuzzel - ./waybar + osConfig, + config, + inputs, + pkgs, + lib, + ... +}: let + inherit (lib) mkIf mkDefault getExe; + inherit (config.lib.stylix) colors; + inherit (osConfig.networking) hostName; + ifLaptop = mkIf (hostName != "dunamis"); +in { + imports = with inputs; [ + walker.homeManagerModules.default ]; + # programs.fuzzel = import ./fuzzel {inherit config mkDefault;}; + programs.walker = import ./walker {inherit config inputs pkgs;}; + programs.waybar = import ./waybar {inherit colors config getExe ifLaptop pkgs;}; } diff --git a/modules/home/desktop/niri/programs/walker/default.nix b/modules/home/desktop/niri/programs/walker/default.nix new file mode 100644 index 0000000..3e53fac --- /dev/null +++ b/modules/home/desktop/niri/programs/walker/default.nix @@ -0,0 +1,304 @@ +{ + config, + pkgs, + ... +}: { + enable = true; + package = pkgs.walker; + runAsService = true; + config = { + activation_mode.labels = "neiotsra"; + # theme = "stylix"; + as_window = false; + disabled = ["clipboard"]; + builtins = { + applications = { + actions.enabled = true; + context_aware = true; + name = "applications"; + placeholder = "Applications"; + prioritize_new = true; + refresh = true; + show_generic = false; + show_icon_when_single = true; + show_sub_when_single = true; + weight = 5; + }; + calc = { + icon = "accessories-calculator"; + min_chars = 4; + name = "calc"; + placeholder = "Calculator"; + weight = 5; + }; + clipboard = { + image_height = 300; + max_entries = 10; + name = "clipboard"; + placeholder = "Clipboard"; + switcher_only = true; + weight = 5; + }; + commands = { + icon = "utilities-terminal"; + name = "commands"; + placeholder = "Commands"; + switcher_only = true; + weight = 5; + }; + custom_commands = { + icon = "utilities-terminal"; + name = "custom_commands"; + placeholder = "Custom Commands"; + weight = 5; + }; + dmenu = { + name = "dmenu"; + placeholder = "Dmenu"; + switcher_only = true; + weight = 5; + }; + emojis = { + history = true; + name = "emojis"; + placeholder = "Emojis"; + switcher_only = true; + typeahead = true; + weight = 5; + }; + finder = { + concurrency = 8; + icon = "folder"; + ignore_gitignore = true; + name = "finder"; + placeholder = "Finder"; + refresh = true; + switcher_only = true; + weight = 5; + }; + runner = { + generic_entry = false; + history = true; + icon = "utilities-terminal"; + name = "runner"; + placeholder = "Runner"; + refresh = true; + typeahead = true; + weight = 5; + }; + ssh = { + history = true; + icon = "preferences-system-network"; + name = "ssh"; + placeholder = "SSH"; + refresh = true; + switcher_only = true; + weight = 5; + }; + switcher = { + name = "switcher"; + placeholder = "Switcher"; + prefix = "/"; + weight = 5; + }; + websearch = { + engines = ["duckduckgo"]; + icon = "applications-internet"; + name = "websearch"; + placeholder = "Websearch"; + weight = 5; + }; + windows = { + icon = "view-restore"; + name = "windows"; + placeholder = "Windows"; + weight = 5; + }; + }; + disable_click_to_close = false; + force_keyboard_focus = true; + list = { + max_entries = 50; + show_initial_entries = true; + single_click = true; + }; + search = { + delay = 0; + force_keyboard_focus = true; + history = true; + placeholder = "Search..."; + }; + }; + theme = { + layout = { + ui = { + anchors = { + bottom = false; + left = false; + right = false; + top = false; + }; + window = { + h_align = "center"; + v_align = "center"; + box = { + width = 450; + h_align = "center"; + v_align = "center"; + # spacing = 12; + orientation = "vertical"; + search = { + margins = { + start = 8; + top = 8; + end = 8; + bottom = 0; + }; + h_align = "top"; + }; + scroll = { + overlay_scrolling = true; + list = { + margins = { + bottom = 8; + top = 8; + start = 8; + end = 8; + }; + item = { + icon.theme = "${config.gtk.iconTheme.name}"; + spacing = 4; + activation_label = { + x_align = 0.5; + y_align = 0.5; + width = 32; + }; + text = { + h_align = "start"; + h_expand = true; + revert = true; + wrap = true; + }; + }; + }; + }; + }; + }; + }; + }; + style = let + inherit (config.lib.stylix) colors; + in '' + @define-color base00 #${colors.base00}; + @define-color base01 #${colors.base01}; + @define-color base02 #${colors.base02}; + @define-color base03 #${colors.base03}; + @define-color base04 #${colors.base04}; + @define-color base05 #${colors.base05}; + @define-color base06 #${colors.base06}; + @define-color base07 #${colors.base07}; + @define-color base08 #${colors.base08}; + @define-color base09 #${colors.base09}; + @define-color base0A #${colors.base0A}; + @define-color base0B #${colors.base0B}; + @define-color base0C #${colors.base0C}; + @define-color base0D #${colors.base0D}; + @define-color base0E #${colors.base0E}; + @define-color base0F #${colors.base0F}; + + #window, + #box, + #search, + #password, + #input, + #typeahead, + #spinner, + #list, + child, + scrollbar, + slider, + #item, + #text, + #label, + #sub, + #activationlabel { + all: unset; + } + + #window { + background: none; + color: @base05; + } + + #box { + border-radius: 20px; + border-width: 4px; + border-color: @base0D; + background: @base01; + } + + #search { + background: @base02; + border-radius: 12px 12px 6px 6px; + padding: 8px; + } + + #password, + #input, + #typeahead { + background: none; + box-shadow: none; + border-radius: 12px; + } + + #input > *:first-child, + #typeahead > *:first-child { + margin-right: 12px; + border-radius: 0px; + } + + #typeahead { + color: @base05; + } + + #input placeholder { + opacity: 0.5; + } + + #list { + padding: 8px; + border-radius: 6px 6px 12px 12px; + background: @base02; + } + + child { + box-shadow: none; + } + + child:selected, + child:hover { + box-shadow: none; + border-radius: 8px; + background: @base03; + } + + #item { + padding: 4px; + } + + #sub { + font-size: smaller; + opacity: 0.5; + } + + #activationlabel { + opacity: 0.5; + } + + .activation #activationlabel { + opacity: 1; + color: @base05; + } + ''; + }; +} diff --git a/modules/home/desktop/niri/services/default.nix b/modules/home/desktop/niri/services/default.nix index a43d883..fcfaacc 100644 --- a/modules/home/desktop/niri/services/default.nix +++ b/modules/home/desktop/niri/services/default.nix @@ -5,15 +5,14 @@ lockscreen, ... }: { - copyq.enable = true; - copyq.package = perSystem.nixpkgs-stable.copyq; + swaync = import ./swaync; network-manager-applet.enable = true; playerctld.enable = true; - swayosd = { - enable = true; - topMargin = 0.8; - }; wpaperd.enable = true; + copyq = { + enable = true; + package = perSystem.nixpkgs-stable.copyq; + }; gnome-keyring = { enable = true; components = ["secrets"]; @@ -29,189 +28,16 @@ night = 3000; }; }; + swayosd = { + enable = true; + topMargin = 0.8; + }; udiskie = { enable = true; automount = false; notify = true; tray = "auto"; }; - swaync = { - enable = true; - settings = { - cssPriority = "user"; - image-visibility = "when-available"; - keyboard-shortcut = true; - relative-timestamps = true; - timeout = 5; - timeout-low = 5; - timeout-critical = 0; - script-fail-notify = true; - transition-time = 200; - - # Layer settings - layer-shell = true; - layer = "overlay"; - control-center-layer = "overlay"; - - # Notification settings - positionX = "right"; - positionY = "top"; - notification-2fa-action = true; - notification-inline-replies = false; - notification-icon-size = 32; - notification-body-image-height = 100; - notification-body-image-width = 200; - notification-window-width = 400; - - # Control center settings - control-center-positionX = "right"; - control-center-positionY = "top"; - control-center-width = 500; - control-center-exclusive-zone = true; - fit-to-screen = true; - hide-on-action = true; - hide-on-clear = false; - - # Widget settings - widgets = [ - "title" - "dnd" - "notifications" - "mpris" - ]; - - widget-config = { - title = { - text = "Notifications"; - clear-all-button = true; - button-text = "Clear All"; - }; - dnd = { - text = "Do Not Disturb"; - }; - mpris = { - image-size = 96; - image-radius = 12; - blur = true; - }; - }; - }; - style = '' - /*** Global ***/ - progress, - progressbar, - trough { - border-radius: 16px; - } - - .app-icon, - .image { - -gtk-icon-effect: none; - } - - .notification-action { - border-radius: 12px; - margin: 0.5rem; - } - - .close-button { - margin: 24px; - padding: 0.2rem; - border-radius: 16px; - } - - /*** Notifications ***/ - .notification-group.collapsed - .notification-row:not(:last-child) - .notification-action, - .notification-group.collapsed - .notification-row:not(:last-child) - .notification-default-action { - opacity: 0; - } - - .trough { - margin: 4px; - border-radius: 7px; - } - - .notification, - .notification.low, - .notification.normal, - .notification.critical, - .control-center { - margin: 16px; - border-radius: 7px; - } - - .floating-notifications, - .notification-content { - border-radius: 7px; - } - - .control-center-list { - background: transparent; - } - - /*** Widgets ***/ - /* Title widget */ - .widget-title { - margin: 0.5rem; - } - - .widget-title > label { - font-weight: bold; - } - - .widget-title > button { - border-radius: 16px; - padding: 0.5rem; - } - - /* DND Widget */ - .widget-dnd { - margin: 0.5rem; - } - - .widget-dnd > label { - font-weight: bold; - } - - .widget-dnd > switch { - border-radius: 16px; - } - - .widget-dnd > switch slider { - border-radius: 16px; - padding: 0.25rem; - } - - /* Mpris widget */ - .widget-mpris .widget-mpris-player { - border-radius: 16px; - margin: 0.5rem; - padding: 0.5rem; - } - - .widget-mpris .widget-mpris-player .widget-mpris-album-art { - border-radius: 16px; - } - - .widget-mpris .widget-mpris-player .widget-mpris-title { - font-weight: bold; - } - - .widget-mpris .widget-mpris-player .widget-mpris-subtitle { - font-weight: normal; - } - - .widget-mpris .widget-mpris-player > box > button { - border: 1px solid transparent; - border-radius: 16px; - padding: 0.25rem; - } - ''; - }; hypridle = { enable = true; settings = { diff --git a/modules/home/desktop/niri/services/swaync/default.nix b/modules/home/desktop/niri/services/swaync/default.nix new file mode 100644 index 0000000..fc2b35c --- /dev/null +++ b/modules/home/desktop/niri/services/swaync/default.nix @@ -0,0 +1,177 @@ +{ + enable = true; + settings = { + cssPriority = "user"; + image-visibility = "when-available"; + keyboard-shortcut = true; + relative-timestamps = true; + timeout = 5; + timeout-low = 5; + timeout-critical = 0; + script-fail-notify = true; + transition-time = 200; + + # Layer settings + layer-shell = true; + layer = "overlay"; + control-center-layer = "overlay"; + + # Notification settings + positionX = "right"; + positionY = "top"; + notification-2fa-action = true; + notification-inline-replies = false; + notification-icon-size = 32; + notification-body-image-height = 100; + notification-body-image-width = 200; + notification-window-width = 400; + + # Control center settings + control-center-positionX = "right"; + control-center-positionY = "top"; + control-center-width = 500; + control-center-exclusive-zone = true; + fit-to-screen = true; + hide-on-action = true; + hide-on-clear = false; + + # Widget settings + widgets = [ + "title" + "dnd" + "notifications" + "mpris" + ]; + + widget-config = { + title = { + text = "Notifications"; + clear-all-button = true; + button-text = "Clear All"; + }; + dnd = { + text = "Do Not Disturb"; + }; + mpris = { + image-size = 96; + image-radius = 12; + blur = true; + }; + }; + }; + style = '' + /*** Global ***/ + progress, + progressbar, + trough { + border-radius: 16px; + } + + .app-icon, + .image { + -gtk-icon-effect: none; + } + + .notification-action { + border-radius: 12px; + margin: 0.5rem; + } + + .close-button { + margin: 24px; + padding: 0.2rem; + border-radius: 16px; + } + + /*** Notifications ***/ + .notification-group.collapsed + .notification-row:not(:last-child) + .notification-action, + .notification-group.collapsed + .notification-row:not(:last-child) + .notification-default-action { + opacity: 0; + } + + .trough { + margin: 4px; + border-radius: 7px; + } + + .notification, + .notification.low, + .notification.normal, + .notification.critical, + .control-center { + margin: 16px; + border-radius: 7px; + } + + .floating-notifications, + .notification-content { + border-radius: 7px; + } + + .control-center-list { + background: transparent; + } + + /*** Widgets ***/ + /* Title widget */ + .widget-title { + margin: 0.5rem; + } + + .widget-title > label { + font-weight: bold; + } + + .widget-title > button { + border-radius: 16px; + padding: 0.5rem; + } + + /* DND Widget */ + .widget-dnd { + margin: 0.5rem; + } + + .widget-dnd > label { + font-weight: bold; + } + + .widget-dnd > switch { + border-radius: 16px; + } + + .widget-dnd > switch slider { + border-radius: 16px; + padding: 0.25rem; + } + + /* Mpris widget */ + .widget-mpris .widget-mpris-player { + border-radius: 16px; + margin: 0.5rem; + padding: 0.5rem; + } + + .widget-mpris .widget-mpris-player .widget-mpris-album-art { + border-radius: 16px; + } + + .widget-mpris .widget-mpris-player .widget-mpris-title { + font-weight: bold; + } + + .widget-mpris .widget-mpris-player .widget-mpris-subtitle { + font-weight: normal; + } + + .widget-mpris .widget-mpris-player > box > button { + border: 1px solid transparent; + border-radius: 16px; + padding: 0.25rem; + } + ''; +}