nixos-config/modules/nixos/desktop/niri/default.nix

207 lines
4.8 KiB
Nix

{
config,
inputs,
lib,
pkgs,
system,
namespace,
...
}:
with lib.${namespace};
let
inherit (lib)
mkIf
mkEnableOption
mkOption
mkMerge
types
;
cfg = config.${namespace}.desktop.niri;
apps-submodule = types.submodule {
options = {
terminal = mkOption {
type = types.package;
default = pkgs.kitty;
description = "The default Terminal to use";
};
runner = mkOption {
type = types.package;
default = pkgs.fuzzel;
description = "The app-runner to use";
};
};
};
in
{
options.${namespace}.desktop.niri = {
enable = mkEnableOption "Whether to enable niri";
settings = mkOption {
type = types.attrs;
default = { };
description = "Additional niri settings to apply.";
};
apps = mkOption {
type = apps-submodule;
default = { };
description = "Which apps to use";
};
};
config = mkIf cfg.enable {
programs.niri = {
enable = true;
package = inputs.niri-flake.packages.${system}.niri-unstable;
};
environment.systemPackages = [
pkgs.alacritty
pkgs.fuzzel
];
${namespace} = {
desktop.addons = {
hyprlock = enabled;
hypridle = enabled;
};
};
snowfallorg.users."cholli".home.config = {
programs.niri.settings = mkMerge [
{
input = {
keyboard = {
numlock = true;
};
};
outputs."DP-1" = {
mode = {
width = 3440;
height = 1440;
};
};
outputs."HDMI-A-1" = {
mode = {
width = 1920;
height = 1080;
};
transform.rotation = 90;
};
layout = {
gaps = 5;
center-focused-column = "never";
default-column-width = {
proportion = 0.5;
};
preset-column-widths = [
{ proportion = 1. / 3.; }
{ proportion = 1. / 2.; }
{ proportion = 2. / 3.; }
];
focus-ring = {
width = 1;
active = {
color = "#7fc8ff";
};
inactive = {
color = "#505050";
};
};
};
hotkey-overlay.skip-at-startup = true;
screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
# block 1pass from screenshots and window capture
window-rules = [
];
binds =
with config.lib.niri;
let
workspaces = (builtins.genList (x: x + 1) 9);
focus-workspaces = builtins.listToAttrs (
map (num: {
name = "Mod=${toString num}";
value = {
action.focus-workspace = num;
};
}) workspaces
);
in
mkMerge [
{
"Mod+Shift+Slash".action = show-hotkey-overlay;
"Mod+Enter".action.spawn = "${lib.getExe cfg.apps.terminal}";
"Mod+D".action.spwan = "${lib.getExe cfg.apps.runner}";
"Mod+Alt+L".action.spawn = "hyprlock-blur";
"Mod+Shift+Q" = {
action = actions.close-window;
repeat = false;
};
"Mod+O" = {
action = actions.toggle-overview;
repeat = false;
};
inherit focus-workspaces;
"XF86AudioRaiseVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1+"
];
allow-when-locked = true;
};
"XF86AudioLowerVolume" = {
action.spawn = [
"wpctl"
"set-volume"
"@DEFAULT_AUDIO_SINK@"
"0.1-"
];
allow-when-locked = true;
};
"XF86AudioMute" = {
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SINK@"
"toggle"
];
allow-when-locked = true;
};
"XF86AudioMicMute" = {
action.spawn = [
"wpctl"
"set-mute"
"@DEFAULT_AUDIO_SOURCE@"
"toggle"
];
allow-when-locked = true;
};
}
];
}
cfg.settings
];
};
};
}