291 lines
9.0 KiB
Nix
291 lines
9.0 KiB
Nix
{ lib, pkgs, config, inputs, username, ... }: {
|
|
imports = [ inputs.niri.nixosModules.niri ];
|
|
hm.imports = [ inputs.ags.homeManagerModules.ags ];
|
|
|
|
nixpkgs.overlays = [
|
|
inputs.niri.overlays.niri
|
|
(final: prev: {
|
|
c.niri = final.niri-unstable;
|
|
})
|
|
];
|
|
|
|
programs.light.enable = true;
|
|
programs.niri = {
|
|
enable = true;
|
|
package = pkgs.c.niri;
|
|
};
|
|
|
|
hm.home.packages = with pkgs; [ mako wofi wl-clipboard wl-clipboard-x11 swaybg swayidle swaylock yambar ];
|
|
hm.programs.niri.settings = {
|
|
environment = {
|
|
QT_QPA_PLATFORM = "wayland";
|
|
NIXOS_OZONE_WL = "1";
|
|
GSK_RENDERER = "gl";
|
|
};
|
|
|
|
input = {
|
|
touchpad = {
|
|
natural-scroll = false;
|
|
scroll-method = "two-finger";
|
|
tap = true;
|
|
};
|
|
|
|
keyboard = {
|
|
xkb = {
|
|
layout = "pl,by(ru)";
|
|
options = "grp:caps_toggle,compose:menu";
|
|
};
|
|
};
|
|
};
|
|
|
|
spawn-at-startup = [
|
|
{ command = [ "${lib.getExe pkgs.mako}" ]; }
|
|
{ command = [ "${lib.getExe pkgs.xwayland-satellite}" ]; }
|
|
{ command = [ "${lib.getExe pkgs.swaybg}" "--image" "/home/${username}/Pictures/Wallpapers/1.png" ]; }
|
|
{ command = let
|
|
swaylock = "${lib.getExe pkgs.swaylock} -f -c 000000";
|
|
niri = lib.getExe pkgs.niri;
|
|
light = lib.getExe pkgs.light;
|
|
script = pkgs.writeShellScript "lockscript.sh"
|
|
''
|
|
${lib.getExe pkgs.swayidle} -w \
|
|
lock '${swaylock} && ${niri} msg action power-off-monitors' \
|
|
unlock '${niri} msg action power-on-monitors' \
|
|
timeout 200 '${swaylock}' \
|
|
timeout 210 '${niri} msg action power-off-monitors' \
|
|
resume '${niri} msg action power-on-monitors' \
|
|
timeout 195 '${light} -U 50' \
|
|
resume '${light} -A 50' \
|
|
before-sleep '${swaylock}'
|
|
'';
|
|
in [ "sh" "-e" "${script}" ];
|
|
}
|
|
{ command = [ "${lib.getExe pkgs.yambar}" ]; }
|
|
];
|
|
binds = with config.hm.lib.niri.actions; let
|
|
workspaces = [1 2 3 4 5 6 7 8 9];
|
|
tags-binds = map (x: { "Mod+${toString x}".action = focus-workspace x;
|
|
"Mod+Shift+${toString x}".action = move-column-to-index x;
|
|
}) workspaces;
|
|
in lib.mkMerge (tags-binds ++ [{
|
|
# Volume
|
|
"XF86AudioRaiseVolume" = {
|
|
action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.01+";
|
|
allow-when-locked = true;
|
|
};
|
|
"XF86AudioLowerVolume".action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.01-";
|
|
"XF86AudioMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
|
|
"XF86AudioMicMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle";
|
|
|
|
"XF86Calculator".action = spawn "foot" "-e" "qalc";
|
|
|
|
"XF86MonBrightnessUp".action = spawn "${lib.getExe pkgs.light}" "-A" "2";
|
|
"XF86MonBrightnessDown".action = spawn "${lib.getExe pkgs.light}" "-U" "2";
|
|
"XF86ScreenSaver".action = let session = "loginctl session-status | awk '{ print $1 }' | head -n 1";
|
|
in spawn "loginctl lock-session $(${session})";
|
|
|
|
|
|
"Mod+Shift+Q".action = close-window;
|
|
"Mod+Shift+E".action = quit;
|
|
"Mod+Space".action = toggle-window-floating;
|
|
"Mod+O".action = toggle-overview;
|
|
"Mod+Slash".action = show-hotkey-overlay;
|
|
"Mod+P".action = toggle-window-rule-opacity;
|
|
|
|
"Mod+Minus".action = set-column-width "-10%";
|
|
"Mod+Equal".action = set-column-width "+10%";
|
|
"Mod+Shift+Minus".action = set-window-height "-10%";
|
|
"Mod+Shift+Equal".action = set-window-height "+10%";
|
|
|
|
"Mod+W".action = toggle-column-tabbed-display;
|
|
"Mod+Ctrl+H".action = consume-or-expel-window-left;
|
|
"Mod+Ctrl+L".action = consume-or-expel-window-right;
|
|
|
|
"Mod+R".action = switch-preset-column-width;
|
|
"Mod+Shift+R".action = reset-window-height;
|
|
"Mod+F".action = maximize-column;
|
|
"Mod+Shift+F".action = fullscreen-window;
|
|
"Mod+C".action = center-column;
|
|
|
|
# Mouse
|
|
"Mod+WheelScrollUp".action = focus-workspace-up;
|
|
"Mod+WheelScrollDown".action = focus-workspace-down;
|
|
|
|
"Mod+Shift+WheelScrollDown".action = focus-column-right;
|
|
"Mod+Shift+WheelScrollUp".action = focus-column-left;
|
|
"Mod+Ctrl+Shift+WheelScrollDown".action = move-column-right;
|
|
"Mod+Ctrl+Shift+WheelScrollUp".action = move-column-left;
|
|
|
|
# Focus window or workspace
|
|
"Mod+Left".action = focus-column-left;
|
|
"Mod+Down".action = focus-window-or-workspace-down;
|
|
"Mod+Up".action = focus-window-or-workspace-up;
|
|
"Mod+Right".action = focus-column-right;
|
|
|
|
"Mod+H".action = focus-column-left;
|
|
"Mod+J".action = focus-window-or-workspace-down;
|
|
"Mod+K".action = focus-window-or-workspace-up;
|
|
"Mod+L".action = focus-column-right;
|
|
|
|
# Move window or workspace
|
|
"Mod+Shift+Left".action = move-column-left;
|
|
"Mod+Shift+Down".action = move-window-down-or-to-workspace-down;
|
|
"Mod+Shift+Up".action = move-window-up-or-to-workspace-up;
|
|
"Mod+Shift+Right".action = move-column-right;
|
|
|
|
"Mod+Shift+H".action = move-column-left;
|
|
"Mod+Shift+J".action = move-window-down-or-to-workspace-down;
|
|
"Mod+Shift+K".action = move-window-up-or-to-workspace-up;
|
|
"Mod+Shift+L".action = move-column-right;
|
|
|
|
# Move workspace
|
|
"Mod+U".action = move-workspace-down;
|
|
"Mod+I".action = move-workspace-up;
|
|
|
|
"Mod+Ctrl+J".action = move-workspace-down;
|
|
"Mod+Ctrl+K".action = move-workspace-up;
|
|
|
|
"Mod+Ctrl+Down".action = move-workspace-down;
|
|
"Mod+Ctrl+Up".action = move-workspace-up;
|
|
|
|
# Screenshots
|
|
"Print".action = screenshot;
|
|
# "Ctrl+Print".action = screenshot-screen; # Only on niri-stable
|
|
"Alt+Print".action = screenshot-window;
|
|
|
|
# "Mod+B".action = spawn "${lib.getExe pkgs.ungoogled-chromium}";
|
|
"Mod+B".action = spawn "${lib.getExe pkgs.firefox}";
|
|
"Mod+Shift+B".action = spawn "${lib.getExe pkgs.ungoogled-chromium}";
|
|
"Mod+D".action = spawn "${lib.getExe pkgs.wofi}" "--show" "drun";
|
|
# "Mod+Return".action = spawn "footclient";
|
|
"Mod+Return".action = spawn "${lib.getExe pkgs.foot}";
|
|
}]);
|
|
|
|
window-rules = [
|
|
{
|
|
matches = [
|
|
{ title = "Cinny"; }
|
|
{ title = "cinny"; }
|
|
{ title = "Element"; }
|
|
{ title = "element"; }
|
|
{ title = "Library"; }
|
|
{ title = "YouTube"; }
|
|
{ title = "Invidious"; }
|
|
{ title = "Piped"; }
|
|
{ app-id = "org\.keepassxc\.KeePassXC"; }
|
|
{ app-id = "org\.gnome\.World\.Secrets"; }
|
|
{ app-id = "org\.gnome\.Nautilus"; }
|
|
|
|
{ title = "File Upload"; }
|
|
{ title = "Open File"; }
|
|
{ title = "Open Folder"; }
|
|
{ app-id = "xdg-desktop-portal-gnome"; }
|
|
|
|
{ title = "Telegram"; }
|
|
{ app-id= "io\.github\.tdesktop_x64\.TDesktop"; }
|
|
];
|
|
block-out-from = "screencast";
|
|
}
|
|
|
|
{ matches = [
|
|
{ app-id = "librewolf"; }
|
|
{ app-id = "firefox"; }
|
|
];
|
|
open-maximized = true; }
|
|
{ matches = [
|
|
{ app-id = "alacritty"; }
|
|
{ app-id = "foot"; }
|
|
{ app-id = "footclient"; }
|
|
];
|
|
default-column-width = { proportion = 0.50; }; }
|
|
|
|
{
|
|
matches = [
|
|
{ is-active = false; }
|
|
];
|
|
opacity = 0.9;
|
|
}
|
|
{
|
|
matches = [
|
|
{ is-active = true; }
|
|
];
|
|
opacity = 1.0;
|
|
}
|
|
|
|
{
|
|
matches = [
|
|
{ is-window-cast-target = true; }
|
|
];
|
|
focus-ring.active.gradient = { # TODO: set colors using stylix
|
|
from = "#f38ba8";
|
|
to = "#7d0d2d70";
|
|
};
|
|
focus-ring.inactive.color = "#7d0d2d";
|
|
shadow = {
|
|
enable = true;
|
|
color = "#7d0d2d70";
|
|
};
|
|
}
|
|
|
|
{ geometry-corner-radius = {
|
|
top-left = 3.0;
|
|
top-right = 3.0;
|
|
bottom-left = 0.0;
|
|
bottom-right = 0.0;
|
|
};
|
|
clip-to-geometry = true;
|
|
}
|
|
];
|
|
|
|
layer-rules = [
|
|
{
|
|
matches = [
|
|
{ namespace = "waybar"; }
|
|
{ namespace = "yambar"; }
|
|
];
|
|
|
|
opacity = 0.8;
|
|
shadow = {
|
|
enable = true;
|
|
softness = 40;
|
|
spread = 5;
|
|
offset.x = 0;
|
|
offset.y = 5;
|
|
draw-behind-window = true;
|
|
color = "#00000064";
|
|
};
|
|
}
|
|
];
|
|
|
|
hotkey-overlay.skip-at-startup = true;
|
|
|
|
prefer-no-csd = true;
|
|
animations = {
|
|
workspace-switch.spring = {
|
|
damping-ratio = 1.000000;
|
|
epsilon = 0.000100;
|
|
stiffness = 1000;
|
|
};
|
|
};
|
|
|
|
layout = {
|
|
border.enable = false;
|
|
focus-ring = {
|
|
enable = true;
|
|
width = 2;
|
|
active.color = config.lib.stylix.colors.base0D;
|
|
};
|
|
|
|
tab-indicator = {
|
|
enable = true;
|
|
gap = 5;
|
|
width = 4;
|
|
gaps-between-tabs = 3;
|
|
active.color = config.lib.stylix.colors.base05;
|
|
};
|
|
};
|
|
};
|
|
|
|
environment.etc."lemurs/wayland/niri".source = pkgs.writeShellScript "niri.sh" "${pkgs.niri}/bin/niri-session";
|
|
}
|