306 lines
13 KiB
Nix
306 lines
13 KiB
Nix
{lib, osConfig, pkgs, inputs, vars, config, ...}:{
|
|
xdg.portal = {
|
|
enable = true;
|
|
config.niri = {
|
|
default = ["gnome" "gtk"];
|
|
"org.freedesktop.impl.portal.Access" = [ "gtk" ];
|
|
"org.freedesktop.impl.portal.Notification" = [ "gtk" ];
|
|
"org.freedesktop.impl.portal.Secret" = [ "gnome-keyring" ];
|
|
"org.freedesktop.impl.portal.FileChooser" = [ "gtk" ];
|
|
};
|
|
extraPortals = with pkgs; [
|
|
xdg-desktop-portal-gnome
|
|
xdg-desktop-portal-gtk
|
|
];
|
|
};
|
|
programs.niri = {
|
|
enable = true;
|
|
package = inputs.niri.packages.${pkgs.stdenv.hostPlatform.system}.niri-unstable;
|
|
settings = {
|
|
input.power-key-handling.enable = false;
|
|
input.touchpad = {
|
|
accel-profile = "flat";
|
|
click-method = "clickfinger";
|
|
scroll-factor = 0.3;
|
|
tap = false;
|
|
};
|
|
input.mouse = {
|
|
accel-profile = "flat";
|
|
};
|
|
input.trackpoint = {
|
|
accel-profile = "flat";
|
|
};
|
|
prefer-no-csd = true;
|
|
input.keyboard.xkb.layout = (if vars.user == "alyx" && vars.isBritish then "gb" else "us");
|
|
input.focus-follows-mouse.enable = true;
|
|
hotkey-overlay.skip-at-startup = true;
|
|
animations.slowdown = 0.5;
|
|
binds = with config.lib.niri.actions; lib.mkDefault {
|
|
"Mod+Return".action = spawn "foot";
|
|
"Mod+V".action = spawn "/home/${vars.user}/.config/nixos/home/wooz";
|
|
"Mod+N".action = spawn "swaync-client" "-t";
|
|
"Mod+Shift+Space".action = toggle-window-floating;
|
|
"XF86AudioRaiseVolume".action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%+";
|
|
"XF86AudioLowerVolume".action = spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "5%-";
|
|
"XF86AudioMute".action = spawn "wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle";
|
|
"XF86AudioPlay".action = spawn "playerctl" "play-pause";
|
|
"XF86AudioNext".action = spawn "playerctl" "next";
|
|
"XF86AudioPrev".action = spawn "playerctl" "previous";
|
|
"XF86AudioStop".action = spawn "playerctl" "stop";
|
|
"XF86MonBrightnessDown".action = spawn "brightnessctl" "s" "10%-";
|
|
"XF86MonBrightnessUp".action = spawn "brightnessctl" "s" "+10%";
|
|
"Mod+D".action = spawn "foot" "--title" "launch" "--app-id" "fzf-launcher-foot" "bash" "-c" "niri msg action spawn -- bash -c \"$(compgen -c | sort -u | fzf --bind=enter:replace-query+print-query) >/dev/null\"";
|
|
"Mod+T".action = spawn "foot" "--title" "music" "--app-id" "mpd-control-foot" "ncmpcpp";
|
|
"Mod+Shift+Q" = {
|
|
repeat = false;
|
|
action = close-window;
|
|
};
|
|
"XF86AudioMicMute" = {
|
|
allow-when-locked = true;
|
|
action.spawn = [ "wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle" ];
|
|
};
|
|
|
|
"Mod+Left".action.focus-column-left = {};
|
|
"Mod+Down".action.focus-window-down = {};
|
|
"Mod+Up".action.focus-window-up = {};
|
|
"Mod+Right".action.focus-column-right = {};
|
|
"Mod+H".action.focus-column-left = {};
|
|
"Mod+J".action.focus-window-down = {};
|
|
"Mod+K".action.focus-window-up = {};
|
|
"Mod+L".action.focus-column-right = {};
|
|
|
|
"Mod+Shift+Left".action.move-column-left = {};
|
|
"Mod+Shift+Down".action.move-window-down = {};
|
|
"Mod+Shift+Up".action.move-window-up = {};
|
|
"Mod+Shift+Right".action.move-column-right = {};
|
|
"Mod+Shift+H".action.move-column-left = {};
|
|
"Mod+Shift+J".action.move-window-down = {};
|
|
"Mod+Shift+K".action.move-window-up = {};
|
|
"Mod+Shift+L".action.move-column-right = {};
|
|
|
|
# Alternative commands that move across workspaces when reaching
|
|
# the first or last window in a column.
|
|
# Mod+J { focus-window-or-workspace-down; }
|
|
# Mod+K { focus-window-or-workspace-up; }
|
|
# Mod+Ctrl+J { move-window-down-or-to-workspace-down; }
|
|
# Mod+Ctrl+K { move-window-up-or-to-workspace-up; }
|
|
|
|
"Mod+Home".action.focus-column-first = {};
|
|
"Mod+End".action.focus-column-last = {};
|
|
"Mod+Ctrl+Home".action.move-column-to-first = {};
|
|
"Mod+Ctrl+End".action.move-column-to-last = {};
|
|
|
|
/* "Mod+Shift+Left".action.focus-monitor-left = {};
|
|
"Mod+Shift+Down".action.focus-monitor-down = {};
|
|
"Mod+Shift+Up".action.focus-monitor-up = {};
|
|
"Mod+Shift+Right".action.focus-monitor-right = {};
|
|
"Mod+Shift+H".action.focus-monitor-left = {};
|
|
"Mod+Shift+J".action.focus-monitor-down = {};
|
|
"Mod+Shift+K".action.focus-monitor-up = {};
|
|
"Mod+Shift+L".action.focus-monitor-right = {};
|
|
*/
|
|
"Mod+Shift+Ctrl+Left".action.move-column-to-monitor-left = {};
|
|
"Mod+Shift+Ctrl+Down".action.move-column-to-monitor-down = {};
|
|
"Mod+Shift+Ctrl+Up".action.move-column-to-monitor-up = {};
|
|
"Mod+Shift+Ctrl+Right".action.move-column-to-monitor-right = {};
|
|
"Mod+Shift+Ctrl+H".action.move-column-to-monitor-left = {};
|
|
"Mod+Shift+Ctrl+J".action.move-column-to-monitor-down = {};
|
|
"Mod+Shift+Ctrl+K".action.move-column-to-monitor-up = {};
|
|
"Mod+Shift+Ctrl+L".action.move-column-to-monitor-right = {};
|
|
|
|
# Alternatively, there are commands to move just a single window:
|
|
# Mod+Shift+Ctrl+Left { move-window-to-monitor-left; }
|
|
# ...
|
|
|
|
# And you can also move a whole workspace to another monitor:
|
|
# Mod+Shift+Ctrl+Left { move-workspace-to-monitor-left; }
|
|
# ...
|
|
|
|
"Mod+Page_Down".action.focus-workspace-down = {};
|
|
"Mod+Page_Up".action.focus-workspace-up = {};
|
|
"Mod+I".action.focus-workspace-down = {};
|
|
"Mod+U".action.focus-workspace-up = {};
|
|
"Mod+Ctrl+Page_Down".action.move-column-to-workspace-down = {};
|
|
"Mod+Ctrl+Page_Up".action.move-column-to-workspace-up = {};
|
|
"Mod+Ctrl+U".action.move-column-to-workspace-down = {};
|
|
"Mod+Ctrl+I".action.move-column-to-workspace-up = {};
|
|
|
|
# Alternatively, there are commands to move just a single window:
|
|
# Mod+Ctrl+Page_Down { move-window-to-workspace-down; }
|
|
# ...
|
|
|
|
"Mod+Shift+Page_Down".action.move-workspace-down = {};
|
|
"Mod+Shift+Page_Up".action.move-workspace-up = {};
|
|
"Mod+Shift+U".action.move-workspace-down = {};
|
|
"Mod+Shift+I".action.move-workspace-up = {};
|
|
|
|
# You can bind mouse wheel scroll ticks using the following syntax.
|
|
# These binds will change direction based on the natural-scroll setting.
|
|
#
|
|
# To avoid scrolling through workspaces really fast, you can use
|
|
# the cooldown-ms property. The bind will be rate-limited to this value.
|
|
# You can set a cooldown on any bind, but it's most useful for the wheel.
|
|
"Mod+WheelScrollDown" = {
|
|
cooldown-ms = 150;
|
|
action.focus-workspace-down = {};
|
|
};
|
|
"Mod+WheelScrollUp" = {
|
|
cooldown-ms = 150;
|
|
action.focus-workspace-up = {};
|
|
};
|
|
"Mod+Ctrl+WheelScrollDown" = {
|
|
cooldown-ms = 150;
|
|
action.move-column-to-workspace-down = {};
|
|
};
|
|
"Mod+Ctrl+WheelScrollUp" = {
|
|
cooldown-ms = 150;
|
|
action.move-column-to-workspace-up = {};
|
|
};
|
|
|
|
"Mod+WheelScrollRight".action.focus-column-right = {};
|
|
"Mod+WheelScrollLeft".action.focus-column-left = {};
|
|
"Mod+Ctrl+WheelScrollRight".action.move-column-right = {};
|
|
"Mod+Ctrl+WheelScrollLeft".action.move-column-left = {};
|
|
|
|
# Usually scrolling up and down with Shift in applications results in
|
|
# horizontal scrolling; these binds replicate that.
|
|
"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 = {};
|
|
|
|
# Similarly, you can bind touchpad scroll "ticks".
|
|
# Touchpad scrolling is continuous, so for these binds it is split into
|
|
# discrete intervals.
|
|
# These binds are also affected by touchpad's natural-scroll, so these
|
|
# example binds are "inverted", since we have natural-scroll enabled for
|
|
# touchpads by default.
|
|
# Mod+TouchpadScrollDown { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02+"; }
|
|
# Mod+TouchpadScrollUp { spawn "wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.02-"; }
|
|
|
|
# You can refer to workspaces by index. However, keep in mind that
|
|
# niri is a dynamic workspace system, so these commands are kind of
|
|
# "best effort". Trying to refer to a workspace index bigger than
|
|
# the current workspace count will instead refer to the bottommost
|
|
# (empty) workspace.
|
|
#
|
|
# For example, with 2 workspaces + 1 empty, indices 3, 4, 5 and so on
|
|
# will all refer to the 3rd workspace.
|
|
"Mod+1".action.focus-workspace = 1;
|
|
"Mod+2".action.focus-workspace = 2;
|
|
"Mod+3".action.focus-workspace = 3;
|
|
"Mod+4".action.focus-workspace = 4;
|
|
"Mod+5".action.focus-workspace = 5;
|
|
"Mod+6".action.focus-workspace = 6;
|
|
"Mod+7".action.focus-workspace = 7;
|
|
"Mod+8".action.focus-workspace = 8;
|
|
"Mod+9".action.focus-workspace = 9;
|
|
"Mod+Shift+1".action.move-column-to-workspace = 1;
|
|
"Mod+Shift+2".action.move-column-to-workspace = 2;
|
|
"Mod+Shift+3".action.move-column-to-workspace = 3;
|
|
"Mod+Shift+4".action.move-column-to-workspace = 4;
|
|
"Mod+Shift+5".action.move-column-to-workspace = 5;
|
|
"Mod+Shift+6".action.move-column-to-workspace = 6;
|
|
"Mod+Shift+7".action.move-column-to-workspace = 7;
|
|
"Mod+Shift+8".action.move-column-to-workspace = 8;
|
|
"Mod+Shift+9".action.move-column-to-workspace = 9;
|
|
|
|
# Alternatively, there are commands to move just a single window:
|
|
# Mod+Ctrl+1 { move-window-to-workspace 1; }
|
|
|
|
# Switches focus between the current and the previous workspace.
|
|
# Mod+Tab { focus-workspace-previous; }
|
|
|
|
"Mod+Comma".action.consume-window-into-column = {};
|
|
"Mod+Period".action.expel-window-from-column = {};
|
|
|
|
# There are also commands that consume or expel a single window to the side.
|
|
# Mod+BracketLeft { consume-or-expel-window-left; }
|
|
# Mod+BracketRight { 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 = {};
|
|
|
|
# Finer width adjustments.
|
|
# This command can also:
|
|
# * set width in pixels: "1000"
|
|
# * adjust width in pixels: "-5" or "+5"
|
|
# * set width as a percentage of screen width: "25%"
|
|
# * adjust width as a percentage of screen width: "-10%" or "+10%"
|
|
# Pixel sizes use logical, or scaled, pixels. I.e. on an output with scale 2.0,
|
|
# set-column-width "100" will make the column occupy 200 physical screen pixels.
|
|
"Mod+Minus".action.set-column-width = "-10%";
|
|
"Mod+Equal".action.set-column-width = "+10%";
|
|
|
|
# Finer height adjustments when in column with other windows.
|
|
"Mod+Shift+Minus".action.set-window-height = "-10%";
|
|
"Mod+Shift+Equal".action.set-window-height = "+10%";
|
|
|
|
# Actions to switch layouts.
|
|
# Note: if you uncomment these, make sure you do NOT have
|
|
# a matching layout switch hotkey configured in xkb options above.
|
|
# Having both at once on the same hotkey will break the switching,
|
|
# since it will switch twice upon pressing the hotkey (once by xkb, once by niri).
|
|
# Mod+Space { switch-layout "next"; }
|
|
# Mod+Shift+Space { switch-layout "prev"; }
|
|
|
|
"Print".action.screenshot = {};
|
|
"Ctrl+Print".action.screenshot-screen = {};
|
|
"Alt+Print".action.screenshot-window = {};
|
|
|
|
# The quit action will show a confirmation dialog to avoid accidental exits.
|
|
"Mod+Shift+E".action.quit = {};
|
|
|
|
# Powers off the monitors. To turn them back on, do any input like
|
|
# moving the mouse or pressing any other key.
|
|
"Mod+Shift+P".action.power-off-monitors = {};
|
|
};
|
|
spawn-at-startup = [
|
|
{command = ["waybar"];}
|
|
{command = ["xwayland-satellite"];}
|
|
{command = if vars.user == "alyx" then ["swaybg" "-m" "fill" "-i" "/home/${vars.user}/.config/nixos/assets/scenes.jpg"] else ["swaybg" "-m" "fill" "-i" "/home/${vars.user}/.config/nixos/assets/scenes.jpg"];}
|
|
{command = ["udiskie" "--appindicator"];}
|
|
{command = ["kanshi"];}
|
|
{command = ["swaync"];}
|
|
];
|
|
environment = {
|
|
DISPLAY = ":0";
|
|
};
|
|
window-rules = [
|
|
{matches = [{title = "^launch$";}];
|
|
open-floating = true;
|
|
}
|
|
{matches = [{title = "^music$";}];
|
|
open-floating = true;
|
|
}
|
|
{matches = [{title = "^(Picture-in-Picture)$";}];
|
|
open-floating = true;
|
|
}
|
|
{matches = [{title = "^music$";}];
|
|
open-floating = true;
|
|
}
|
|
{
|
|
geometry-corner-radius = {
|
|
bottom-left = 12.0;
|
|
bottom-right = 12.0;
|
|
top-left = 12.0;
|
|
top-right = 12.0;
|
|
};
|
|
draw-border-with-background = false;
|
|
clip-to-geometry = true;
|
|
}
|
|
];
|
|
layout = {
|
|
focus-ring = {
|
|
enable = true;
|
|
width = 2;
|
|
active = {color = "rgb(203 166 247)";};
|
|
inactive = {color = "rgb(68 12 136)";};
|
|
};
|
|
};
|
|
};
|
|
};
|
|
}
|