403 lines
10 KiB
Nix
403 lines
10 KiB
Nix
{lib, ...}: let
|
|
wmWorkspace = with lib.types; {
|
|
options = {
|
|
name = lib.mkOption {
|
|
default = "";
|
|
example = "1";
|
|
type = str;
|
|
description = "Name of the workspace";
|
|
};
|
|
default = lib.mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = bool;
|
|
description = "Whether the workspace is the default workspace. (Currently doesn't do anything on niri)";
|
|
};
|
|
monitor = lib.mkOption {
|
|
default = "";
|
|
example = "DP-1";
|
|
type = str;
|
|
description = "Name of the monitor to bind the workspace to";
|
|
};
|
|
};
|
|
};
|
|
|
|
wmOptions = with lib.types; {
|
|
options = {
|
|
name = lib.mkOption {
|
|
default = "DP-1";
|
|
example = "DP-1";
|
|
type = str;
|
|
description = "Name of the monitor";
|
|
};
|
|
resolutionX = lib.mkOption {
|
|
default = 1920;
|
|
example = 2560;
|
|
type = number;
|
|
description = "ResolutionX of the monitor";
|
|
};
|
|
resolutionY = lib.mkOption {
|
|
default = 1080;
|
|
example = 1440;
|
|
type = number;
|
|
description = "ResolutionY of the monitor";
|
|
};
|
|
refreshrate = lib.mkOption {
|
|
default = 60;
|
|
example = 144;
|
|
type = number;
|
|
description = "Refreshrate of the monitor";
|
|
};
|
|
positionX = lib.mkOption {
|
|
default = 0;
|
|
example = 1920;
|
|
type = number;
|
|
description = "PositionX of the monitor";
|
|
};
|
|
positionY = lib.mkOption {
|
|
default = 0;
|
|
example = 1080;
|
|
type = number;
|
|
description = "PositionY of the monitor";
|
|
};
|
|
scale = lib.mkOption {
|
|
default = 1;
|
|
example = 2;
|
|
type = number;
|
|
description = "Scale of the monitor";
|
|
};
|
|
transform = lib.mkOption {
|
|
default = "0";
|
|
example = "90";
|
|
type = enum ["0" "90" "180" "270" "360"];
|
|
description = "Transform of the monitor";
|
|
};
|
|
vrr = lib.mkOption {
|
|
default = false;
|
|
example = true;
|
|
type = bool;
|
|
description = "VRR status of the monitor";
|
|
};
|
|
};
|
|
};
|
|
|
|
modKeys = lib.types.enum ["Mod" "Super" "Alt" "Shift" "Ctrl"];
|
|
|
|
customCommand = with lib.types; {
|
|
options = {
|
|
niri = lib.mkOption {
|
|
default = null;
|
|
example = "kitty";
|
|
type = either null str;
|
|
description = "Command to use in niri";
|
|
};
|
|
hyprland = lib.mkOption {
|
|
default = null;
|
|
example = "kitty";
|
|
type = either null str;
|
|
description = "Command to use in hyprland";
|
|
};
|
|
};
|
|
};
|
|
|
|
envOptions = with lib.types; {
|
|
options = {
|
|
all = lib.mkOption {
|
|
default = {};
|
|
example = {};
|
|
type = attrsOf str;
|
|
description = "General Env";
|
|
};
|
|
niri = lib.mkOption {
|
|
default = {};
|
|
example = {};
|
|
type = attrsOf str;
|
|
description = "Niri Env";
|
|
};
|
|
hyprland = lib.mkOption {
|
|
default = {};
|
|
example = {};
|
|
type = attrsOf str;
|
|
description = "Hyprland Env";
|
|
};
|
|
};
|
|
};
|
|
|
|
startupOptions = with lib.types; {
|
|
options = {
|
|
all = lib.mkOption {
|
|
default = [];
|
|
example = [];
|
|
type = listOf str;
|
|
description = "General Startup commands";
|
|
};
|
|
niri = lib.mkOption {
|
|
default = [];
|
|
example = [];
|
|
type = listOf str;
|
|
description = "Niri Startup commands";
|
|
};
|
|
hyprland = lib.mkOption {
|
|
default = [];
|
|
example = [];
|
|
type = listOf str;
|
|
description = "Hyprland Startup commands";
|
|
};
|
|
};
|
|
};
|
|
|
|
windowRuleOptions = with lib.types; {
|
|
options = {
|
|
niri = lib.mkOption {
|
|
default = [];
|
|
example = [];
|
|
type = listOf lines;
|
|
description = "Niri window rules";
|
|
};
|
|
hyprland = lib.mkOption {
|
|
default = [];
|
|
example = [];
|
|
type = listOf str;
|
|
description = "Hyprland window rules";
|
|
};
|
|
};
|
|
};
|
|
|
|
bindOptions = with lib.types; {
|
|
options = {
|
|
modKeys = lib.mkOption {
|
|
default = [];
|
|
example = ["Mod"];
|
|
type = listOf modKeys;
|
|
description = "List of modifier keys";
|
|
};
|
|
key = lib.mkOption {
|
|
default = "";
|
|
example = "Q";
|
|
type = str;
|
|
description = "Key to bind";
|
|
};
|
|
command = lib.mkOption {
|
|
default = "";
|
|
example = "killActive";
|
|
type = either (submodule customCommand) (enum [
|
|
"spawn"
|
|
"spawn-sh"
|
|
"quit"
|
|
"killActive"
|
|
"moveFocusUp"
|
|
"moveFocusRight"
|
|
"moveFocusDown"
|
|
"moveFocusLeft"
|
|
"moveWindowUp"
|
|
"moveWindowRight"
|
|
"moveWindowDown"
|
|
"moveWindowLeft"
|
|
"focusWorkspace"
|
|
"moveToWorkspace"
|
|
"toggleFloating"
|
|
"toggleFullscreen"
|
|
]);
|
|
description = "Command to execute";
|
|
};
|
|
args = lib.mkOption {
|
|
default = [];
|
|
example = [];
|
|
type = listOf str;
|
|
description = "Additional arguments for the command";
|
|
};
|
|
meta = lib.mkOption {
|
|
default = {};
|
|
example = {};
|
|
type = submodule {
|
|
options = {
|
|
niri = lib.mkOption {
|
|
default = {};
|
|
type = submodule {
|
|
options = {
|
|
desc = lib.mkOption {
|
|
default = "";
|
|
type = str;
|
|
description = "Description for Hotkey overview";
|
|
};
|
|
repeat = lib.mkOption {
|
|
type = bool;
|
|
default = true;
|
|
description = "Whether to repeat the keybind on hold";
|
|
};
|
|
allowInhibit = lib.mkOption {
|
|
type = bool;
|
|
default = true;
|
|
description = "Whether to allow inhibiting";
|
|
};
|
|
allowWhileLocked = lib.mkOption {
|
|
type = bool;
|
|
default = false;
|
|
description = "Whether to allow while locked";
|
|
};
|
|
cooldown = lib.mkOption {
|
|
type = number;
|
|
default = 0;
|
|
description = "Cooldown on bind";
|
|
};
|
|
};
|
|
};
|
|
description = "Niri meta for keybinds";
|
|
};
|
|
hyprland = lib.mkOption {
|
|
default = {};
|
|
type = submodule {
|
|
options = {
|
|
repeat = lib.mkOption {
|
|
type = bool;
|
|
default = true;
|
|
description = "Whether to repeat the keybind on hold";
|
|
};
|
|
};
|
|
};
|
|
description = "Niri meta for keybinds";
|
|
};
|
|
};
|
|
};
|
|
description = "Custom metadata per bind. Note, only supported environments are taken into account.";
|
|
};
|
|
};
|
|
};
|
|
in {
|
|
options.mods.wm = {
|
|
modKey = lib.mkOption {
|
|
default = "Super";
|
|
example = "Alt";
|
|
type = modKeys;
|
|
description = "Mod key";
|
|
};
|
|
|
|
env = lib.mkOption {
|
|
default = {};
|
|
example = {
|
|
all = {
|
|
EDITOR = "Neovim";
|
|
};
|
|
niri = {
|
|
EDITOR = "Emacs";
|
|
};
|
|
};
|
|
type = with lib.types; either (submodule envOptions) (attrsOf str);
|
|
description = "Environment configuration";
|
|
};
|
|
|
|
useDefaultEnv = lib.mkOption {
|
|
default = true;
|
|
example = false;
|
|
type = lib.types.bool;
|
|
description = "Whether to use default env variables";
|
|
};
|
|
|
|
startup = lib.mkOption {
|
|
default = [];
|
|
example = {
|
|
all = ["oxinoti"];
|
|
niri = ["someniricommand"];
|
|
hyprland = ["somehyprlandcommand"];
|
|
};
|
|
type = with lib.types; either (submodule startupOptions) (listOf str);
|
|
description = "Start commands";
|
|
};
|
|
|
|
useDefaultStartup = lib.mkOption {
|
|
default = true;
|
|
example = false;
|
|
type = lib.types.bool;
|
|
description = "Whether to use default autostart commands";
|
|
};
|
|
|
|
useDefaultWindowRules = lib.mkOption {
|
|
default = true;
|
|
example = false;
|
|
type = lib.types.bool;
|
|
description = "Whether to use default window rules";
|
|
};
|
|
|
|
windowRules = lib.mkOption {
|
|
default = {};
|
|
example = {
|
|
niri = [
|
|
''
|
|
match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
|
match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
|
|
|
block-out-from "screen-capture"
|
|
''
|
|
''
|
|
match app-id=r#"^steam$"#
|
|
open-on-workspace "0"
|
|
''
|
|
];
|
|
};
|
|
type = lib.types.submodule windowRuleOptions;
|
|
description = "Window rules";
|
|
};
|
|
|
|
workspaces = lib.mkOption {
|
|
default = [];
|
|
example = [
|
|
{
|
|
name = "chat";
|
|
monitor = "DP-1";
|
|
}
|
|
];
|
|
type =
|
|
lib.types.listOf (lib.types.submodule wmWorkspace);
|
|
description = "Workspace configuration";
|
|
};
|
|
|
|
monitors = lib.mkOption {
|
|
default = [];
|
|
example = [
|
|
{
|
|
name = "DP-1";
|
|
resolutionX = 1920;
|
|
resolutionY = 1080;
|
|
refreshrate = 144;
|
|
positionX = 0;
|
|
positionY = 0;
|
|
scale = 1;
|
|
transform = "0";
|
|
vrr = false;
|
|
}
|
|
];
|
|
type =
|
|
lib.types.listOf (lib.types.submodule wmOptions);
|
|
description = "Monitor configuration";
|
|
};
|
|
|
|
useDefaultBinds = lib.mkOption {
|
|
default = true;
|
|
example = false;
|
|
type = lib.types.bool;
|
|
description = "Whether to use default keybinds";
|
|
};
|
|
|
|
binds = lib.mkOption {
|
|
default = [];
|
|
example = [
|
|
{
|
|
modKeys = ["Mod"];
|
|
key = "Q";
|
|
command = "killActive";
|
|
args = [];
|
|
meta = {
|
|
niri = {
|
|
desc = "Kill the active window";
|
|
repeat = false;
|
|
};
|
|
hyprland = {};
|
|
};
|
|
}
|
|
];
|
|
type =
|
|
lib.types.listOf (lib.types.submodule bindOptions);
|
|
description = "Bind configuration";
|
|
};
|
|
};
|
|
}
|