From 8019bc700359aa9b02abc2b8c48bce9433f3530d Mon Sep 17 00:00:00 2001 From: ulic-youthlic Date: Mon, 10 Nov 2025 19:28:58 +0800 Subject: [PATCH] fix: Fix polkit and qt configuration --- home/david/configurations/Akun/niri.nix | 28 +- home/david/configurations/Tytonidae/niri.nix | 1 - home/david/modules/programs/niri/config.nix | 1361 +++++++++--------- home/david/modules/programs/niri/default.nix | 57 +- nixos/modules/gui/niri.nix | 9 +- 5 files changed, 705 insertions(+), 751 deletions(-) diff --git a/home/david/configurations/Akun/niri.nix b/home/david/configurations/Akun/niri.nix index fe7227c..0df2455 100644 --- a/home/david/configurations/Akun/niri.nix +++ b/home/david/configurations/Akun/niri.nix @@ -1,10 +1,4 @@ -{ - config, - inputs, - ... -}: let - inherit (inputs.niri-flake.lib.kdl) node leaf flag; -in { +{config, ...}: { david.programs.niri = { waybar.settings = let cfg = config.david.programs.niri.waybar; @@ -20,25 +14,5 @@ in { ]; }; }; - extraConfig = let - output = node "output"; - in [ - ( - output - ["eDP-1"] - [ - (leaf "mode" ["1920x1200@60.018"]) - (leaf "scale" [1.0]) - (flag "focus-at-startup") - (leaf "position" [ - { - x = 0; - y = 0; - } - ]) - (leaf "transform" ["normal"]) - ] - ) - ]; }; } diff --git a/home/david/configurations/Tytonidae/niri.nix b/home/david/configurations/Tytonidae/niri.nix index 1a76367..62ed003 100644 --- a/home/david/configurations/Tytonidae/niri.nix +++ b/home/david/configurations/Tytonidae/niri.nix @@ -34,6 +34,5 @@ in { } ]; }; - extraConfig = []; }; } diff --git a/home/david/modules/programs/niri/config.nix b/home/david/modules/programs/niri/config.nix index a9d01b9..0279482 100644 --- a/home/david/modules/programs/niri/config.nix +++ b/home/david/modules/programs/niri/config.nix @@ -3,706 +3,707 @@ pkgs, lib, inputs, - osConfig ? null, + osConfig ? (throw "Trying to access osConfig, the home-manager module is not being used in the nixos module"), ... -}: let - inherit (lib) getExe getExe'; - inherit - (inputs.niri-flake.lib.kdl) - # node with args, props and children - # node:: \lambda name -> [argOrProp] -> [child] -> Output - # arg: single value - # prop: attr contains one or more key-value pair - # children: node - node - # node without children - # leaf:: \lambda name -> [argOrProp] -> Output - leaf - # node only name - # flag:: \lambda name -> Output - flag - # node without args/props - # plain:: \lambda name -> [child] -> Output - plain - ; +}: { + config.david.programs.niri.config = let + inherit (lib) getExe getExe'; + inherit + (inputs.niri-flake.lib.kdl) + # node with args, props and children + # node:: \lambda name -> [argOrProp] -> [child] -> Output + # arg: single value + # prop: attr contains one or more key-value pair + # children: node + node + # node without children + # leaf:: \lambda name -> [argOrProp] -> Output + leaf + # node only name + # flag:: \lambda name -> Output + flag + # node without args/props + # plain:: \lambda name -> [child] -> Output + plain + ; - swaylock = getExe config.programs.swaylock.package; - fuzzel = getExe config.programs.fuzzel.package; - waybar = getExe config.programs.waybar.package; - swaync = getExe config.services.swaync.package; - fcitx5 = lib.getExe' osConfig.i18n.inputMethod.package "fcitx5"; + swaylock = getExe config.programs.swaylock.package; + fuzzel = getExe config.programs.fuzzel.package; + waybar = getExe config.programs.waybar.package; + swaync = getExe config.services.swaync.package; + fcitx5 = lib.getExe' osConfig.i18n.inputMethod.package "fcitx5"; - polkit-kde-agent = getExe' pkgs.kdePackages.polkit-kde-agent-1 "polkit-kde-agent"; - wpctl = getExe' pkgs.wireplumber "wpctl"; - waypaper = getExe pkgs.waypaper; - default-terminal = getExe config.programs.ghostty.package; - wl-paste = getExe' pkgs.wl-clipboard "wl-paste"; - cliphist = getExe' pkgs.cliphist "cliphist"; - cliphist-fuzzel-img = getExe' pkgs.cliphist "cliphist-fuzzel-img"; - wl-clip-persist = getExe pkgs.wl-clip-persist; -in - ( - let - spawn = leaf "spawn"; - in [ - (plain "binds" [ - (plain "Mod+V" [ - (spawn [cliphist-fuzzel-img]) - ]) - (plain "Mod+Shift+P" [ - (spawn [ - swaylock - "--screenshots" - "--clock" - "--indicator" - "--indicator-radius" - "100" - "--indicator-thickness" - "7" - "--effect-blur" - "7x5" - "--effect-vignette" - "0.5:0.5" - "--grace" - "2" - "--fade-in" - "0.5" + polkit-kde-agent = getExe' pkgs.kdePackages.polkit-kde-agent-1 "polkit-kde-agent"; + wpctl = getExe' pkgs.wireplumber "wpctl"; + waypaper = getExe pkgs.waypaper; + default-terminal = getExe config.programs.ghostty.package; + wl-paste = getExe' pkgs.wl-clipboard "wl-paste"; + cliphist = getExe' pkgs.cliphist "cliphist"; + cliphist-fuzzel-img = getExe' pkgs.cliphist "cliphist-fuzzel-img"; + wl-clip-persist = getExe pkgs.wl-clip-persist; + in + ( + let + spawn = leaf "spawn"; + in [ + (plain "binds" [ + (plain "Mod+V" [ + (spawn [cliphist-fuzzel-img]) ]) - ]) - (plain "Mod+Shift+Slash" [ - (flag "show-hotkey-overlay") - ]) - (plain "Mod+T" [ - (spawn [ - default-terminal + (plain "Mod+Shift+P" [ + (spawn [ + swaylock + "--screenshots" + "--clock" + "--indicator" + "--indicator-radius" + "100" + "--indicator-thickness" + "7" + "--effect-blur" + "7x5" + "--effect-vignette" + "0.5:0.5" + "--grace" + "2" + "--fade-in" + "0.5" + ]) ]) - ]) - (plain "Mod+Shift+T" [ - (flag "toggle-column-tabbed-display") - ]) - (plain "Mod+Space" [ - (spawn [fuzzel]) - ]) - ( - node "XF86AudioRaiseVolume" - [{allow-when-locked = true;}] - [ + (plain "Mod+Shift+Slash" [ + (flag "show-hotkey-overlay") + ]) + (plain "Mod+T" [ (spawn [ - wpctl - "set-volume" - "@DEFAULT_AUDIO_SINK@" - "0.1+" + default-terminal ]) - ] - ) - ( - node "XF86AudioLowerVolume" - [{allow-when-locked = true;}] - [ - (spawn [ - wpctl - "set-volume" - "@DEFAULT_AUDIO_SINK@" - "0.1-" - ]) - ] - ) - ( - node "XF86AudioMute" - [{allow-when-locked = true;}] - [ - (spawn [ - wpctl - "set-volume" - "@DEFAULT_AUDIO_SINK@" - "toggle" - ]) - ] - ) - ( - node "XF86AudioMicMute" - [{allow-when-locked = true;}] - [ - (spawn [ - wpctl - "set-volume" - "@DEFAULT_AUDIO_SOURCE@" - "toggle" - ]) - ] - ) - (plain "Mod+Q" [ - (flag "close-window") - ]) - ( - node "Mod+O" - [{repeat = false;}] - [ - (flag "toggle-overview") - ] - ) - (plain "Mod+Left" [ - (flag "focus-column-left") - ]) - (plain "Mod+Down" [ - (flag "focus-window-down") - ]) - (plain "Mod+Up" [ - (flag "focus-window-up") - ]) - (plain "Mod+Right" [ - (flag "focus-column-right") - ]) - (plain "Mod+H" [ - (flag "focus-column-or-monitor-left") - ]) - (plain "Mod+J" [ - (flag "focus-window-or-workspace-down") - ]) - (plain "Mod+K" [ - (flag "focus-window-or-workspace-up") - ]) - (plain "Mod+L" [ - (flag "focus-column-or-monitor-right") - ]) - (plain "Mod+Shift+Left" [ - (flag "move-column-left") - ]) - (plain "Mod+Shift+Down" [ - (flag "move-window-down") - ]) - (plain "Mod+Shift+Up" [ - (flag "move-window-up") - ]) - (plain "Mod+Shift+Right" [ - (flag "move-column-right") - ]) - (plain "Mod+Shift+H" [ - (flag "move-column-left-or-to-monitor-left") - ]) - (plain "Mod+Shift+J" [ - (flag "move-window-down-or-to-workspace-down") - ]) - (plain "Mod+Shift+K" [ - (flag "move-window-up-or-to-workspace-up") - ]) - (plain "Mod+Shift+L" [ - (flag "move-column-right-or-to-monitor-right") - ]) - (plain "Mod+Home" [ - (flag "focus-column-first") - ]) - (plain "Mod+End" [ - (flag "focus-column-last") - ]) - (plain "Mod+Ctrl+Home" [ - (flag "move-column-to-first") - ]) - (plain "Mod+Ctrl+End" [ - (flag "move-column-to-last") - ]) - (plain "Mod+Ctrl+Left" [ - (flag "focus-monitor-left") - ]) - (plain "Mod+Ctrl+Down" [ - (flag "focus-monitor-down") - ]) - (plain "Mod+Ctrl+Up" [ - (flag "focus-monitor-up") - ]) - (plain "Mod+Ctrl+Right" [ - (flag "focus-monitor-right") - ]) - (plain "Mod+Ctrl+H" [ - (flag "focus-monitor-left") - ]) - (plain "Mod+Ctrl+J" [ - (flag "focus-monitor-down") - ]) - (plain "Mod+Ctrl+K" [ - (flag "focus-monitor-up") - ]) - (plain "Mod+Ctrl+L" [ - (flag "focus-monitor-right") - ]) - (plain "Mod+Shift+Ctrl+Left" [ - (flag "move-column-to-monitor-left") - ]) - (plain "Mod+Shift+Ctrl+Down" [ - (flag "move-column-to-monitor-down") - ]) - (plain "Mod+Shift+Ctrl+Up" [ - (flag "move-column-to-monitor-up") - ]) - (plain "Mod+Shift+Ctrl+Right" [ - (flag "move-column-to-monitor-right") - ]) - (plain "Mod+Shift+Ctrl+H" [ - (flag "move-column-to-monitor-left") - ]) - (plain "Mod+Shift+Ctrl+J" [ - (flag "move-column-to-monitor-down") - ]) - (plain "Mod+Shift+Ctrl+K" [ - (flag "move-column-to-monitor-up") - ]) - (plain "Mod+Shift+Ctrl+L" [ - (flag "move-column-to-monitor-right") - ]) - (plain "Mod+Page_Down" [ - (flag "focus-workspace-down") - ]) - (plain "Mod+Page_Up" [ - (flag "focus-workspace-up") - ]) - (plain "Mod+U" [ - (flag "focus-workspace-down") - ]) - (plain "Mod+I" [ - (flag "focus-workspace-up") - ]) - (plain "Mod+Shift+Page_Down" [ - (flag "move-column-to-workspace-down") - ]) - (plain "Mod+Shift+Page_Up" [ - (flag "move-column-to-workspace-up") - ]) - (plain "Mod+Shift+U" [ - (flag "move-column-to-workspace-down") - ]) - (plain "Mod+Shift+I" [ - (flag "move-column-to-workspace-up") - ]) - (plain "Mod+Ctrl+Page_Down" [ - (flag "move-workspace-down") - ]) - (plain "Mod+Ctrl+Page_Up" [ - (flag "move-workspace-up") - ]) - (plain "Mod+Ctrl+U" [ - (flag "move-workspace-down") - ]) - (plain "Mod+Ctrl+I" [ - (flag "move-workspace-up") - ]) - ( - node "Mod+Shift+WheelScrollDown" - [{cooldown-ms = 150;}] - [ + ]) + (plain "Mod+Shift+T" [ + (flag "toggle-column-tabbed-display") + ]) + (plain "Mod+Space" [ + (spawn [fuzzel]) + ]) + ( + node "XF86AudioRaiseVolume" + [{allow-when-locked = true;}] + [ + (spawn [ + wpctl + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1+" + ]) + ] + ) + ( + node "XF86AudioLowerVolume" + [{allow-when-locked = true;}] + [ + (spawn [ + wpctl + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "0.1-" + ]) + ] + ) + ( + node "XF86AudioMute" + [{allow-when-locked = true;}] + [ + (spawn [ + wpctl + "set-volume" + "@DEFAULT_AUDIO_SINK@" + "toggle" + ]) + ] + ) + ( + node "XF86AudioMicMute" + [{allow-when-locked = true;}] + [ + (spawn [ + wpctl + "set-volume" + "@DEFAULT_AUDIO_SOURCE@" + "toggle" + ]) + ] + ) + (plain "Mod+Q" [ + (flag "close-window") + ]) + ( + node "Mod+O" + [{repeat = false;}] + [ + (flag "toggle-overview") + ] + ) + (plain "Mod+Left" [ + (flag "focus-column-left") + ]) + (plain "Mod+Down" [ + (flag "focus-window-down") + ]) + (plain "Mod+Up" [ + (flag "focus-window-up") + ]) + (plain "Mod+Right" [ + (flag "focus-column-right") + ]) + (plain "Mod+H" [ + (flag "focus-column-or-monitor-left") + ]) + (plain "Mod+J" [ + (flag "focus-window-or-workspace-down") + ]) + (plain "Mod+K" [ + (flag "focus-window-or-workspace-up") + ]) + (plain "Mod+L" [ + (flag "focus-column-or-monitor-right") + ]) + (plain "Mod+Shift+Left" [ + (flag "move-column-left") + ]) + (plain "Mod+Shift+Down" [ + (flag "move-window-down") + ]) + (plain "Mod+Shift+Up" [ + (flag "move-window-up") + ]) + (plain "Mod+Shift+Right" [ + (flag "move-column-right") + ]) + (plain "Mod+Shift+H" [ + (flag "move-column-left-or-to-monitor-left") + ]) + (plain "Mod+Shift+J" [ + (flag "move-window-down-or-to-workspace-down") + ]) + (plain "Mod+Shift+K" [ + (flag "move-window-up-or-to-workspace-up") + ]) + (plain "Mod+Shift+L" [ + (flag "move-column-right-or-to-monitor-right") + ]) + (plain "Mod+Home" [ + (flag "focus-column-first") + ]) + (plain "Mod+End" [ + (flag "focus-column-last") + ]) + (plain "Mod+Ctrl+Home" [ + (flag "move-column-to-first") + ]) + (plain "Mod+Ctrl+End" [ + (flag "move-column-to-last") + ]) + (plain "Mod+Ctrl+Left" [ + (flag "focus-monitor-left") + ]) + (plain "Mod+Ctrl+Down" [ + (flag "focus-monitor-down") + ]) + (plain "Mod+Ctrl+Up" [ + (flag "focus-monitor-up") + ]) + (plain "Mod+Ctrl+Right" [ + (flag "focus-monitor-right") + ]) + (plain "Mod+Ctrl+H" [ + (flag "focus-monitor-left") + ]) + (plain "Mod+Ctrl+J" [ + (flag "focus-monitor-down") + ]) + (plain "Mod+Ctrl+K" [ + (flag "focus-monitor-up") + ]) + (plain "Mod+Ctrl+L" [ + (flag "focus-monitor-right") + ]) + (plain "Mod+Shift+Ctrl+Left" [ + (flag "move-column-to-monitor-left") + ]) + (plain "Mod+Shift+Ctrl+Down" [ + (flag "move-column-to-monitor-down") + ]) + (plain "Mod+Shift+Ctrl+Up" [ + (flag "move-column-to-monitor-up") + ]) + (plain "Mod+Shift+Ctrl+Right" [ + (flag "move-column-to-monitor-right") + ]) + (plain "Mod+Shift+Ctrl+H" [ + (flag "move-column-to-monitor-left") + ]) + (plain "Mod+Shift+Ctrl+J" [ + (flag "move-column-to-monitor-down") + ]) + (plain "Mod+Shift+Ctrl+K" [ + (flag "move-column-to-monitor-up") + ]) + (plain "Mod+Shift+Ctrl+L" [ + (flag "move-column-to-monitor-right") + ]) + (plain "Mod+Page_Down" [ (flag "focus-workspace-down") - ] - ) - ( - node "Mod+Shift+WheelScrollUp" - [{cooldown-ms = 150;}] - [ + ]) + (plain "Mod+Page_Up" [ (flag "focus-workspace-up") - ] - ) - (plain "Mod+WheelScrollDown" [ - (flag "focus-column-right") - ]) - (plain "Mod+WheelScrollUp" [ - (flag "focus-column-left") - ]) - (plain "Mod+1" [ - (leaf "focus-workspace" [1]) - ]) - (plain "Mod+2" [ - (leaf "focus-workspace" [2]) - ]) - (plain "Mod+3" [ - (leaf "focus-workspace" [3]) - ]) - (plain "Mod+4" [ - (leaf "focus-workspace" [4]) - ]) - (plain "Mod+5" [ - (leaf "focus-workspace" [5]) - ]) - (plain "Mod+6" [ - (leaf "focus-workspace" [6]) - ]) - (plain "Mod+7" [ - (leaf "focus-workspace" [7]) - ]) - (plain "Mod+8" [ - (leaf "focus-workspace" [8]) - ]) - (plain "Mod+9" [ - (leaf "focus-workspace" [9]) - ]) - (plain "Mod+Shift+1" [ - (leaf "move-column-to-workspace" [1]) - ]) - (plain "Mod+Shift+2" [ - (leaf "move-column-to-workspace" [2]) - ]) - (plain "Mod+Shift+3" [ - (leaf "move-column-to-workspace" [3]) - ]) - (plain "Mod+Shift+4" [ - (leaf "move-column-to-workspace" [4]) - ]) - (plain "Mod+Shift+5" [ - (leaf "move-column-to-workspace" [5]) - ]) - (plain "Mod+Shift+6" [ - (leaf "move-column-to-workspace" [6]) - ]) - (plain "Mod+Shift+7" [ - (leaf "move-column-to-workspace" [7]) - ]) - (plain "Mod+Shift+8" [ - (leaf "move-column-to-workspace" [8]) - ]) - (plain "Mod+Shift+9" [ - (leaf "move-column-to-workspace" [9]) - ]) - (plain "Mod+F" [ - (flag "toggle-window-floating") - ]) - (plain "Mod+Shift+F" [ - (flag "toggle-windowed-fullscreen") - ]) - (plain "Mod+Tab" [ - (flag "focus-window-previous") - ]) - (plain "Mod+Shift+Tab" [ - (flag "switch-focus-between-floating-and-tiling") - ]) - (plain "Mod+BracketLeft" [ - (flag "consume-or-expel-window-left") - ]) - (plain "Mod+BracketRight" [ - (flag "consume-or-expel-window-right") - ]) - (plain "Mod+Comma" [ - (flag "consume-window-into-column") - ]) - (plain "Mod+Period" [ - (flag "expel-window-from-column") - ]) - ( - node "Mod+R" - [{repeat = false;}] - [ - (flag "switch-preset-column-width") - ] - ) - ( - node "Mod+Shift+R" - [{repeat = false;}] - [ - (flag "switch-preset-window-height") - ] - ) - (plain "Mod+Ctrl+R" [ - (flag "reset-window-height") - ]) - ( - node "Mod+M" - [{repeat = false;}] - [ - (flag "maximize-column") - ] - ) - ( - node "Mod+Shift+M" - [{repeat = false;}] - [ - (flag "fullscreen-window") - ] - ) - ( - node "Mod+Ctrl+M" - [{repeat = false;}] - [ - (flag "maximize-window-to-edges") - ] - ) - (plain "Mod+Z" [ - (flag "center-column") - ]) - ( - node "Mod+Minus" - [{repeat = false;}] - [ - (leaf "set-column-width" ["-10%"]) - ] - ) - ( - node "Mod+Equal" - [{repeat = false;}] - [ - (leaf "set-column-width" ["+10%"]) - ] - ) - ( - node "Mod+Shift+Minus" - [{repeat = false;}] - [ - (leaf "set-window-height" ["-10%"]) - ] - ) - ( - node "Mod+Shift+Equal" - [{repeat = false;}] - [ - (leaf "set-window-height" ["+10%"]) - ] - ) - (plain "Print" [ - (flag "screenshot") - ]) - (plain "Ctrl+Print" [ - (flag "screenshot-screen") - ]) - (plain "Alt+Print" [ - (flag "screenshot-window") - ]) - (plain "Mod+Shift+Q" [ - (flag "quit") - ]) - (plain "Mod+E" [ - (flag "expand-column-to-available-width") - ]) - (plain "Mod+Shift+S" [ - (flag "toggle-keyboard-shortcuts-inhibit") - ]) - (plain "Mod+Shift+C" [ - (flag "set-dynamic-cast-window") - ]) - (plain "Mod+Shift+Ctrl+C" [ - (flag "clear-dynamic-cast-target") - ]) - ]) - ] # binds - ) - ++ ( - let - spawn-at-startup = leaf "spawn-at-startup"; - in [ - (leaf "screenshot-path" ["${config.xdg.userDirs.pictures}/screenshots/%Y-%m-%d_%H:%M:%S.png"]) - (plain "hotkey-overlay" [ - (flag "skip-at-startup") - ]) - (flag "prefer-no-csd") - (spawn-at-startup [waybar]) - (spawn-at-startup [swaync]) - (spawn-at-startup [ - waypaper - "--restore" - ]) - (spawn-at-startup [polkit-kde-agent]) - (spawn-at-startup [ - wl-paste - "--watch" - cliphist - "store" - ]) - (spawn-at-startup [ - wl-clip-persist - "--clipboard" - "regular" - ]) - (spawn-at-startup [ - fcitx5 - "--replace" - ]) - (plain "input" [ - (plain "touchpad" [ - (leaf "click-method" ["clickfinger"]) - (flag "dwt") - (leaf "scroll-method" ["two-finger"]) - (leaf "tap-button-map" ["left-right-middle"]) - ]) - ]) - (plain "cursor" [ - (leaf "hide-after-inactive-ms" [3000]) - (flag "hide-when-typing") - ]) - (plain "layout" [ - (leaf "background-color" ["transparent"]) - (plain "border" [ - (flag "off") - (leaf "width" [4]) - (leaf "active-color" ["#7fc8ff"]) - (leaf "inactive-color" ["#505050"]) - ]) - (plain "focus-ring" [ - # (flag "off") - (leaf "width" [4]) - (leaf "active-color" ["#7fc8ff"]) - (leaf "active-gradient" [ - { - from = "#e00a54"; - to = "#b8de17"; - angle = 45; - } ]) - (leaf "inactive-color" ["#505050"]) - ]) - (plain "tab-indicator" [ - (flag "hide-when-single-tab") - ]) - (plain "preset-column-widths" [ - (leaf "proportion" [(1. / 4.)]) - (leaf "proportion" [(1. / 3.)]) - (leaf "proportion" [(1. / 2.)]) - (leaf "proportion" [(2. / 3.)]) - (leaf "proportion" [(3. / 4.)]) - (leaf "proportion" [(4. / 4.)]) - ]) - (flag "always-center-single-column") - (leaf "center-focused-column" ["never"]) - (leaf "default-column-display" ["tabbed"]) - (plain "default-column-width" [ - (leaf "proportion" [(1. / 2.)]) - ]) - (flag "empty-workspace-above-first") - (leaf "gaps" [16]) - ]) - (plain "animations" [ - (plain "window-close" [ - (leaf "spring" [ - { - damping-ratio = 1.0; - stiffness = 800; - epsilon = 0.0001; - } + (plain "Mod+U" [ + (flag "focus-workspace-down") + ]) + (plain "Mod+I" [ + (flag "focus-workspace-up") + ]) + (plain "Mod+Shift+Page_Down" [ + (flag "move-column-to-workspace-down") + ]) + (plain "Mod+Shift+Page_Up" [ + (flag "move-column-to-workspace-up") + ]) + (plain "Mod+Shift+U" [ + (flag "move-column-to-workspace-down") + ]) + (plain "Mod+Shift+I" [ + (flag "move-column-to-workspace-up") + ]) + (plain "Mod+Ctrl+Page_Down" [ + (flag "move-workspace-down") + ]) + (plain "Mod+Ctrl+Page_Up" [ + (flag "move-workspace-up") + ]) + (plain "Mod+Ctrl+U" [ + (flag "move-workspace-down") + ]) + (plain "Mod+Ctrl+I" [ + (flag "move-workspace-up") + ]) + ( + node "Mod+Shift+WheelScrollDown" + [{cooldown-ms = 150;}] + [ + (flag "focus-workspace-down") + ] + ) + ( + node "Mod+Shift+WheelScrollUp" + [{cooldown-ms = 150;}] + [ + (flag "focus-workspace-up") + ] + ) + (plain "Mod+WheelScrollDown" [ + (flag "focus-column-right") + ]) + (plain "Mod+WheelScrollUp" [ + (flag "focus-column-left") + ]) + (plain "Mod+1" [ + (leaf "focus-workspace" [1]) + ]) + (plain "Mod+2" [ + (leaf "focus-workspace" [2]) + ]) + (plain "Mod+3" [ + (leaf "focus-workspace" [3]) + ]) + (plain "Mod+4" [ + (leaf "focus-workspace" [4]) + ]) + (plain "Mod+5" [ + (leaf "focus-workspace" [5]) + ]) + (plain "Mod+6" [ + (leaf "focus-workspace" [6]) + ]) + (plain "Mod+7" [ + (leaf "focus-workspace" [7]) + ]) + (plain "Mod+8" [ + (leaf "focus-workspace" [8]) + ]) + (plain "Mod+9" [ + (leaf "focus-workspace" [9]) + ]) + (plain "Mod+Shift+1" [ + (leaf "move-column-to-workspace" [1]) + ]) + (plain "Mod+Shift+2" [ + (leaf "move-column-to-workspace" [2]) + ]) + (plain "Mod+Shift+3" [ + (leaf "move-column-to-workspace" [3]) + ]) + (plain "Mod+Shift+4" [ + (leaf "move-column-to-workspace" [4]) + ]) + (plain "Mod+Shift+5" [ + (leaf "move-column-to-workspace" [5]) + ]) + (plain "Mod+Shift+6" [ + (leaf "move-column-to-workspace" [6]) + ]) + (plain "Mod+Shift+7" [ + (leaf "move-column-to-workspace" [7]) + ]) + (plain "Mod+Shift+8" [ + (leaf "move-column-to-workspace" [8]) + ]) + (plain "Mod+Shift+9" [ + (leaf "move-column-to-workspace" [9]) + ]) + (plain "Mod+F" [ + (flag "toggle-window-floating") + ]) + (plain "Mod+Shift+F" [ + (flag "toggle-windowed-fullscreen") + ]) + (plain "Mod+Tab" [ + (flag "focus-window-previous") + ]) + (plain "Mod+Shift+Tab" [ + (flag "switch-focus-between-floating-and-tiling") + ]) + (plain "Mod+BracketLeft" [ + (flag "consume-or-expel-window-left") + ]) + (plain "Mod+BracketRight" [ + (flag "consume-or-expel-window-right") + ]) + (plain "Mod+Comma" [ + (flag "consume-window-into-column") + ]) + (plain "Mod+Period" [ + (flag "expel-window-from-column") + ]) + ( + node "Mod+R" + [{repeat = false;}] + [ + (flag "switch-preset-column-width") + ] + ) + ( + node "Mod+Shift+R" + [{repeat = false;}] + [ + (flag "switch-preset-window-height") + ] + ) + (plain "Mod+Ctrl+R" [ + (flag "reset-window-height") + ]) + ( + node "Mod+M" + [{repeat = false;}] + [ + (flag "maximize-column") + ] + ) + ( + node "Mod+Shift+M" + [{repeat = false;}] + [ + (flag "fullscreen-window") + ] + ) + ( + node "Mod+Ctrl+M" + [{repeat = false;}] + [ + (flag "maximize-window-to-edges") + ] + ) + (plain "Mod+Z" [ + (flag "center-column") + ]) + ( + node "Mod+Minus" + [{repeat = false;}] + [ + (leaf "set-column-width" ["-10%"]) + ] + ) + ( + node "Mod+Equal" + [{repeat = false;}] + [ + (leaf "set-column-width" ["+10%"]) + ] + ) + ( + node "Mod+Shift+Minus" + [{repeat = false;}] + [ + (leaf "set-window-height" ["-10%"]) + ] + ) + ( + node "Mod+Shift+Equal" + [{repeat = false;}] + [ + (leaf "set-window-height" ["+10%"]) + ] + ) + (plain "Print" [ + (flag "screenshot") + ]) + (plain "Ctrl+Print" [ + (flag "screenshot-screen") + ]) + (plain "Alt+Print" [ + (flag "screenshot-window") + ]) + (plain "Mod+Shift+Q" [ + (flag "quit") + ]) + (plain "Mod+E" [ + (flag "expand-column-to-available-width") + ]) + (plain "Mod+Shift+S" [ + (flag "toggle-keyboard-shortcuts-inhibit") + ]) + (plain "Mod+Shift+C" [ + (flag "set-dynamic-cast-window") + ]) + (plain "Mod+Shift+Ctrl+C" [ + (flag "clear-dynamic-cast-target") ]) ]) - ]) - (plain "overview" [ - (plain "workspace-shadow" [ - (flag "off") + ] # binds + ) + ++ ( + let + spawn-at-startup = leaf "spawn-at-startup"; + in [ + (leaf "screenshot-path" ["${config.xdg.userDirs.pictures}/screenshots/%Y-%m-%d_%H:%M:%S.png"]) + (plain "hotkey-overlay" [ + (flag "skip-at-startup") ]) - ]) - ] # others - ) - ++ ( - let - window-rule = plain "window-rule"; - match = leaf "match"; - in [ - (window-rule [ - (leaf "draw-border-with-background" [true]) - (leaf "geometry-corner-radius" [0.0]) - (leaf "clip-to-geometry" [true]) - ]) - (window-rule [ - (match [{app-id = "^org\\.keepassxc\\.KeePassXC$";}]) - (match [{app-id = "^org\\.gnome\\.World\\.Secrets$";}]) - (leaf "block-out-from" ["screen-capture"]) - ]) - (window-rule [ - (match [{is-active = true;}]) - (leaf "opacity" [1.0]) - ]) - (window-rule [ - (match [{is-active = false;}]) - (leaf "opacity" [0.8]) - (leaf "draw-border-with-background" [false]) - ]) - (window-rule [ - (match [{app-id = "^Alacritty$";}]) - (match [{app-id = "^com\\.mitchellh\\.ghostty$";}]) - (match [{app-id = "^neovide$";}]) - (leaf "draw-border-with-background" [false]) - ]) - (window-rule [ - (match [{app-id = "^org\\.kde\\.polkit-kde-authentication-agent-1$";}]) - (leaf "open-floating" [true]) - ]) - (window-rule [ - (match [{app-id = "^swayimg$";}]) - (leaf "draw-border-with-background" [false]) - (leaf "open-floating" [true]) - ]) - (window-rule [ - (match [{is-window-cast-target = true;}]) - (plain "focus-ring" [ - (leaf "active-color" ["#f38ba8"]) - (leaf "inactive-color" ["#7d0d2d"]) + (flag "prefer-no-csd") + (spawn-at-startup [waybar]) + (spawn-at-startup [swaync]) + (spawn-at-startup [ + waypaper + "--restore" ]) - (plain "border" [ - (leaf "active-color" ["#f38ba8"]) - (leaf "inactive-color" ["#7d0d2d"]) + (spawn-at-startup [ + wl-paste + "--watch" + cliphist + "store" ]) - (plain "tab-indicator" [ - (leaf "active-color" ["#f38ba8"]) - (leaf "inactive-color" ["#7d0d2d"]) + (spawn-at-startup [ + wl-clip-persist + "--clipboard" + "regular" ]) - (plain "shadow" [ - (flag "on") + (spawn-at-startup [ + fcitx5 + "--replace" ]) - ]) - (window-rule [ - (match [ - { - app-id = "^org\\.telegram\\.desktop$"; - title = "Media viewer"; - } + (plain "input" [ + (plain "touchpad" [ + (leaf "click-method" ["clickfinger"]) + (flag "dwt") + (leaf "scroll-method" ["two-finger"]) + (leaf "tap-button-map" ["left-right-middle"]) + ]) ]) - (match [ - { - app-id = "^QQ$"; - title = "图片查看器"; - } + (plain "cursor" [ + (leaf "hide-after-inactive-ms" [3000]) + (flag "hide-when-typing") ]) - (leaf "open-floating" [true]) - (leaf "open-fullscreen" [false]) - ]) - (window-rule [ - (match [ - { - app-id = "^wechat$"; - title = "^wechat$"; - } + (plain "layout" [ + (leaf "background-color" ["transparent"]) + (plain "border" [ + (flag "off") + (leaf "width" [4]) + (leaf "active-color" ["#7fc8ff"]) + (leaf "inactive-color" ["#505050"]) + ]) + (plain "focus-ring" [ + # (flag "off") + (leaf "width" [4]) + (leaf "active-color" ["#7fc8ff"]) + (leaf "active-gradient" [ + { + from = "#e00a54"; + to = "#b8de17"; + angle = 45; + } + ]) + (leaf "inactive-color" ["#505050"]) + ]) + (plain "tab-indicator" [ + (flag "hide-when-single-tab") + ]) + (plain "preset-column-widths" [ + (leaf "proportion" [(1. / 4.)]) + (leaf "proportion" [(1. / 3.)]) + (leaf "proportion" [(1. / 2.)]) + (leaf "proportion" [(2. / 3.)]) + (leaf "proportion" [(3. / 4.)]) + (leaf "proportion" [(4. / 4.)]) + ]) + (flag "always-center-single-column") + (leaf "center-focused-column" ["never"]) + (leaf "default-column-display" ["tabbed"]) + (plain "default-column-width" [ + (leaf "proportion" [(1. / 2.)]) + ]) + (flag "empty-workspace-above-first") + (leaf "gaps" [16]) ]) - (leaf "open-focused" [false]) - ]) - (window-rule [ - (match [ - { - app-id = "^steam$"; - title = "^notificationtoasts_\\d+_desktop$"; - } + (plain "animations" [ + (plain "window-close" [ + (leaf "spring" [ + { + damping-ratio = 1.0; + stiffness = 800; + epsilon = 0.0001; + } + ]) + ]) ]) - (leaf "open-floating" [true]) - (leaf "open-focused" [false]) - (leaf "default-floating-position" [ - { - x = 10; - y = 10; - "relative-to" = "bottom-right"; - } + (plain "overview" [ + (plain "workspace-shadow" [ + (flag "off") + ]) ]) - (leaf "clip-to-geometry" [false]) - ]) - ] # window-rule - ) - ++ ( - let - layer-rule = plain "layer-rule"; - match = leaf "match"; - in [ - (layer-rule [ - (match [{namespace = "^swaync-notification-window$";}]) - (match [{namespace = "^swaync-control-center$";}]) - (leaf "block-out-from" ["screen-capture"]) - ]) - (layer-rule [ - (match [{namespace = "^launcher$";}]) - (plain "shadow" [ - (flag "on") + ] # others + ) + ++ ( + let + window-rule = plain "window-rule"; + match = leaf "match"; + in [ + (window-rule [ + (leaf "draw-border-with-background" [true]) + (leaf "geometry-corner-radius" [0.0]) + (leaf "clip-to-geometry" [true]) ]) - (leaf "geometry-corner-radius" [10.0]) - ]) - (layer-rule [ - (match [{namespace = "^mpvpaper$";}]) - (leaf "place-within-backdrop" [true]) - ]) - ] # layer-rule - ) + (window-rule [ + (match [{app-id = "^org\\.keepassxc\\.KeePassXC$";}]) + (match [{app-id = "^org\\.gnome\\.World\\.Secrets$";}]) + (leaf "block-out-from" ["screen-capture"]) + ]) + (window-rule [ + (match [{is-active = true;}]) + (leaf "opacity" [1.0]) + ]) + (window-rule [ + (match [{is-active = false;}]) + (leaf "opacity" [0.8]) + (leaf "draw-border-with-background" [false]) + ]) + (window-rule [ + (match [{app-id = "^Alacritty$";}]) + (match [{app-id = "^com\\.mitchellh\\.ghostty$";}]) + (match [{app-id = "^neovide$";}]) + (leaf "draw-border-with-background" [false]) + ]) + (window-rule [ + (match [{app-id = "^org\\.kde\\.polkit-kde-authentication-agent-1$";}]) + (leaf "open-floating" [true]) + ]) + (window-rule [ + (match [{app-id = "^swayimg$";}]) + (leaf "draw-border-with-background" [false]) + (leaf "open-floating" [true]) + ]) + (window-rule [ + (match [{is-window-cast-target = true;}]) + (plain "focus-ring" [ + (leaf "active-color" ["#f38ba8"]) + (leaf "inactive-color" ["#7d0d2d"]) + ]) + (plain "border" [ + (leaf "active-color" ["#f38ba8"]) + (leaf "inactive-color" ["#7d0d2d"]) + ]) + (plain "tab-indicator" [ + (leaf "active-color" ["#f38ba8"]) + (leaf "inactive-color" ["#7d0d2d"]) + ]) + (plain "shadow" [ + (flag "on") + ]) + ]) + (window-rule [ + (match [ + { + app-id = "^org\\.telegram\\.desktop$"; + title = "Media viewer"; + } + ]) + (match [ + { + app-id = "^QQ$"; + title = "图片查看器"; + } + ]) + (leaf "open-floating" [true]) + (leaf "open-fullscreen" [false]) + ]) + (window-rule [ + (match [ + { + app-id = "^wechat$"; + title = "^wechat$"; + } + ]) + (leaf "open-focused" [false]) + ]) + (window-rule [ + (match [ + { + app-id = "^steam$"; + title = "^notificationtoasts_\\d+_desktop$"; + } + ]) + (leaf "open-floating" [true]) + (leaf "open-focused" [false]) + (leaf "default-floating-position" [ + { + x = 10; + y = 10; + "relative-to" = "bottom-right"; + } + ]) + (leaf "clip-to-geometry" [false]) + ]) + ] # window-rule + ) + ++ ( + let + layer-rule = plain "layer-rule"; + match = leaf "match"; + in [ + (layer-rule [ + (match [{namespace = "^swaync-notification-window$";}]) + (match [{namespace = "^swaync-control-center$";}]) + (leaf "block-out-from" ["screen-capture"]) + ]) + (layer-rule [ + (match [{namespace = "^launcher$";}]) + (plain "shadow" [ + (flag "on") + ]) + (leaf "geometry-corner-radius" [10.0]) + ]) + (layer-rule [ + (match [{namespace = "^mpvpaper$";}]) + (leaf "place-within-backdrop" [true]) + ]) + ] # layer-rule + ); +} diff --git a/home/david/modules/programs/niri/default.nix b/home/david/modules/programs/niri/default.nix index b77a236..15d3e7d 100644 --- a/home/david/modules/programs/niri/default.nix +++ b/home/david/modules/programs/niri/default.nix @@ -3,13 +3,15 @@ lib, inputs, pkgs, - osConfig ? null, + osConfig ? (throw "Trying to access osConfig, the home-manager module is not being used in the nixos module"), options, ... -} @ args: let +}: let cfg = config.david.programs.niri; - niri = osConfig.programs.niri.package; in { + imports = [ + ./config.nix + ]; options = { david.programs.niri = { enable = @@ -17,7 +19,7 @@ in { // { default = osConfig.youthlic.gui.enabled == "niri"; }; - extraConfig = lib.mkOption { + config = lib.mkOption { type = inputs.niri-flake.lib.kdl.types.kdl-document; }; wluma.extraSettings = lib.mkOption { @@ -42,40 +44,23 @@ in { }; config = lib.mkMerge [ (lib.mkIf cfg.enable { - home.packages = - (with pkgs; [ - swaynotificationcenter - kdePackages.polkit-kde-agent-1 - wl-clipboard - cliphist - swayimg - seahorse - ]) - ++ [niri]; - qt = { - enable = true; - }; - xdg.portal = { - configPackages = [niri]; - enable = true; - extraPortals = lib.mkIf ( - !niri.cargoBuildNoDefaultFeatures || builtins.elem "xdp-gnome-screencast" niri.cargoBuildFeatures - ) [pkgs.xdg-desktop-portal-gnome]; - }; + home.packages = with pkgs; [ + swaynotificationcenter + wl-clipboard + cliphist + swayimg + seahorse + ]; xdg.configFile = let - qtctConf = - '' - [Appearance] - standard_dialogs=xdgdesktopportal - '' - + lib.optionalString (config.qt.style ? name) '' - style=${config.qt.style.name} - ''; + qtctConf = '' + [Appearance] + standard_dialogs=xdgdesktopportal + ''; in { - "qt5ct/qt5ct.conf" = lib.mkForce { + "qt5ct/qt5ct.conf" = { text = qtctConf; }; - "qt6ct/qt6ct.conf" = lib.mkForce { + "qt6ct/qt6ct.conf" = { text = qtctConf; }; }; @@ -95,9 +80,7 @@ in { kanshi.enable = true; }; programs.niri = { - config = - (lib.toList (import ./config.nix (args // {inherit pkgs;}))) ++ (lib.toList cfg.extraConfig); - package = niri; + inherit (cfg) config; }; }) (lib.mkIf (!cfg.enable) { diff --git a/nixos/modules/gui/niri.nix b/nixos/modules/gui/niri.nix index f341d33..53470b0 100644 --- a/nixos/modules/gui/niri.nix +++ b/nixos/modules/gui/niri.nix @@ -11,12 +11,11 @@ in { }; }; config = lib.mkIf (cfg.enabled == "niri") { - qt = { - enable = true; - platformTheme = "qt5ct"; - }; # Enabled to support trash of nautilus services.gvfs.enable = true; + + systemd.user.services.niri-flake-polkit.serviceConfig.ExecStart = lib.mkForce "${pkgs.mate.mate-polkit}/libexec/polkit-mate-authentication-agent-1"; + environment = { pathsToLink = ["share/thumbnailers"]; systemPackages = with pkgs; [ @@ -26,8 +25,6 @@ in { libheif.out bluez - kdePackages.qt6ct - libsForQt5.qt5ct xwayland-satellite-unstable evince ];