mirror of
https://codeberg.org/tmayoff/.dotfiles.git
synced 2025-12-06 16:58:34 -05:00
682 lines
27 KiB
Nix
682 lines
27 KiB
Nix
{
|
||
pkgs,
|
||
inputs,
|
||
config,
|
||
lib,
|
||
...
|
||
}: {
|
||
imports = [
|
||
./darkman.nix
|
||
# inputs.niri.homeModules.niri.default
|
||
inputs.dankMaterialShell.homeModules.dankMaterialShell.default
|
||
inputs.dankMaterialShell.homeModules.dankMaterialShell.niri
|
||
];
|
||
|
||
home.packages = with pkgs; [
|
||
glib
|
||
xdg-desktop-portal-gnome
|
||
xdg-desktop-portal-gtk
|
||
gnome-keyring
|
||
|
||
eog
|
||
|
||
upower
|
||
|
||
mods.xwayland-satellite
|
||
wlsunset
|
||
];
|
||
|
||
programs.dankMaterialShell = {
|
||
enable = true;
|
||
quickshell.package = pkgs.unstable.quickshell;
|
||
niri.enableKeybinds = true;
|
||
niri.enableSpawn = true;
|
||
};
|
||
|
||
gtk = {
|
||
enable = true;
|
||
# theme.name = "Adwaita";
|
||
iconTheme = {
|
||
package = pkgs.tela-icon-theme;
|
||
name = "Tela";
|
||
};
|
||
};
|
||
|
||
programs.niri.settings = {
|
||
cursor = {
|
||
size = 12;
|
||
theme = "Adwaita";
|
||
};
|
||
|
||
hotkey-overlay.skip-at-startup = true;
|
||
|
||
input = {
|
||
# keyboard {
|
||
# xkb {
|
||
# // You can set rules, model, layout, variant and options.
|
||
# // For more information, see xkeyboard-config(7).
|
||
|
||
# // For example:
|
||
# // layout "us,ru"
|
||
# // options "grp:win_space_toggle,compose:ralt,ctrl:nocaps"
|
||
# }
|
||
|
||
# // Enable numlock on startup, omitting this setting disables it.
|
||
# numlock
|
||
# }
|
||
|
||
# // Next sections include libinput settings.
|
||
# // Omitting settings disables them, or leaves them at their default values.
|
||
# touchpad {
|
||
# // off
|
||
# tap
|
||
# // dwt
|
||
# // dwtp
|
||
# // drag false
|
||
# // drag-lock
|
||
# natural-scroll
|
||
# // accel-speed 0.2
|
||
# // accel-profile "flat"
|
||
# // scroll-method "two-finger"
|
||
# // disabled-on-external-mouse
|
||
# }
|
||
|
||
# mouse {
|
||
# // off
|
||
# // natural-scroll
|
||
# // accel-speed 0.2
|
||
# // accel-profile "flat"
|
||
# // scroll-method "no-scroll"
|
||
# }
|
||
|
||
# trackpoint {
|
||
# // off
|
||
# // natural-scroll
|
||
# // accel-speed 0.2
|
||
# // accel-profile "flat"
|
||
# // scroll-method "on-button-down"
|
||
# // scroll-button 273
|
||
# // middle-emulation
|
||
# }
|
||
|
||
# // Uncomment this to make the mouse warp to the center of newly focused windows.
|
||
# // warp-mouse-to-focus
|
||
|
||
# // Focus windows and outputs automatically when moving the mouse into them.
|
||
# // Setting max-scroll-amount="0%" makes it work only on windows already fully on screen.
|
||
focus-follows-mouse = {
|
||
enable = true;
|
||
max-scroll-amount = "0%";
|
||
};
|
||
};
|
||
|
||
# // You can configure outputs by their name, which you can find
|
||
# // by running `niri msg outputs` while inside a niri instance.
|
||
# // The built-in laptop monitor is usually called "eDP-1".
|
||
# // Find more information on the wiki:
|
||
# // https://github.com/YaLTeR/niri/wiki/Configuration:-Outputs
|
||
# // Remember to uncomment the node by removing "/-"!
|
||
# /-output "eDP-1" {
|
||
# // Uncomment this line to disable this output.
|
||
# // off
|
||
|
||
# // Resolution and, optionally, refresh rate of the output.
|
||
# // The format is "<width>x<height>" or "<width>x<height>@<refresh rate>".
|
||
# // If the refresh rate is omitted, niri will pick the highest refresh rate
|
||
# // for the resolution.
|
||
# // If the mode is omitted altogether or is invalid, niri will pick one automatically.
|
||
# // Run `niri msg outputs` while inside a niri instance to list all outputs and their modes.
|
||
# mode "1920x1080@120.030"
|
||
|
||
# // You can use integer or fractional scale, for example use 1.5 for 150% scale.
|
||
# scale 2
|
||
|
||
# // Transform allows to rotate the output counter-clockwise, valid values are:
|
||
# // normal, 90, 180, 270, flipped, flipped-90, flipped-180 and flipped-270.
|
||
# transform "normal"
|
||
|
||
# // Position of the output in the global coordinate space.
|
||
# // This affects directional monitor actions like "focus-monitor-left", and cursor movement.
|
||
# // The cursor can only move between directly adjacent outputs.
|
||
# // Output scale and rotation has to be taken into account for positioning:
|
||
# // outputs are sized in logical, or scaled, pixels.
|
||
# // For example, a 3840×2160 output with scale 2.0 will have a logical size of 1920×1080,
|
||
# // so to put another output directly adjacent to it on the right, set its x to 1920.
|
||
# // If the position is unset or results in an overlap, the output is instead placed
|
||
# // automatically.
|
||
# position x=1280 y=0
|
||
# }
|
||
|
||
# Settings that influence how windows are positioned and sized.
|
||
# Find more information on the wiki:
|
||
# https://github.com/YaLTeR/niri/wiki/Configuration:-Layout
|
||
layout = {
|
||
# // Set gaps around windows in logical pixels.
|
||
gaps = 16;
|
||
|
||
# // When to center a column when changing focus, options are:
|
||
# // - "never", default behavior, focusing an off-screen column will keep at the left
|
||
# // or right edge of the screen.
|
||
# // - "always", the focused column will always be centered.
|
||
# // - "on-overflow", focusing a column will center it if it doesn't fit
|
||
# // together with the previously focused column.
|
||
center-focused-column = "on-overflow";
|
||
|
||
# Widths to cycle through
|
||
preset-column-widths = [
|
||
{proportion = 1. / 3.;}
|
||
{proportion = 1. / 2.;}
|
||
{proportion = 2. / 3.;}
|
||
];
|
||
|
||
# // You can also customize the heights that "switch-preset-window-height" (Mod+Shift+R) toggles between.
|
||
# // preset-window-heights { }
|
||
|
||
# You can change the default width of the new windows.
|
||
default-column-width = {proportion = 0.5;};
|
||
# // If you leave the brackets empty, the windows themselves will decide their initial width.
|
||
# // default-column-width {}
|
||
|
||
# // By default focus ring and border are rendered as a solid background rectangle
|
||
# // behind windows. That is, they will show up through semitransparent windows.
|
||
# // This is because windows using client-side decorations can have an arbitrary shape.
|
||
# //
|
||
# // If you don't like that, you should uncomment `prefer-no-csd` below.
|
||
# // Niri will draw focus ring and border *around* windows that agree to omit their
|
||
# // client-side decorations.
|
||
# //
|
||
# // Alternatively, you can override it with a window rule called
|
||
# // `draw-border-with-background`.
|
||
|
||
# You can change how the focus ring looks.
|
||
focus-ring = {
|
||
enable = true;
|
||
|
||
# How many logical pixels the ring extends out from the windows.
|
||
width = 4;
|
||
|
||
# // Colors can be set in a variety of ways:
|
||
# // - CSS named colors: "red"
|
||
# // - RGB hex: "#rgb", "#rgba", "#rrggbb", "#rrggbbaa"
|
||
# // - CSS-like notation: "rgb(255, 127, 0)", rgba(), hsl() and a few others.
|
||
|
||
# // Color of the ring on the active monitor.
|
||
active.color = "#7fc8ff";
|
||
|
||
# // Color of the ring on inactive monitors.
|
||
inactive.color = "#505050";
|
||
|
||
# // You can also use gradients. They take precedence over solid colors.
|
||
# // Gradients are rendered the same as CSS linear-gradient(angle, from, to).
|
||
# // The angle is the same as in linear-gradient, and is optional,
|
||
# // defaulting to 180 (top-to-bottom gradient).
|
||
# // You can use any CSS linear-gradient tool on the web to set these up.
|
||
# // Changing the color space is also supported, check the wiki for more info.
|
||
# //
|
||
# // active-gradient from="#80c8ff" to="#bbddff" angle=45
|
||
|
||
# // You can also color the gradient relative to the entire view
|
||
# // of the workspace, rather than relative to just the window itself.
|
||
# // To do that, set relative-to="workspace-view".
|
||
# //
|
||
# // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||
};
|
||
|
||
# You can also add a border. It's similar to the focus ring, but always visible.
|
||
border = {
|
||
enable = false;
|
||
|
||
# width 4
|
||
# active-color "#ffc87f"
|
||
# inactive-color "#505050"
|
||
|
||
# // Color of the border around windows that request your attention.
|
||
# urgent-color "#9b0000"
|
||
|
||
# // active-gradient from="#ffbb66" to="#ffc880" angle=45 relative-to="workspace-view"
|
||
# // inactive-gradient from="#505050" to="#808080" angle=45 relative-to="workspace-view"
|
||
};
|
||
|
||
# // You can enable drop shadows for windows.
|
||
# shadow {
|
||
# // Uncomment the next line to enable shadows.
|
||
# // on
|
||
|
||
# // By default, the shadow draws only around its window, and not behind it.
|
||
# // Uncomment this setting to make the shadow draw behind its window.
|
||
# //
|
||
# // Note that niri has no way of knowing about the CSD window corner
|
||
# // radius. It has to assume that windows have square corners, leading to
|
||
# // shadow artifacts inside the CSD rounded corners. This setting fixes
|
||
# // those artifacts.
|
||
# //
|
||
# // However, instead you may want to set prefer-no-csd and/or
|
||
# // geometry-corner-radius. Then, niri will know the corner radius and
|
||
# // draw the shadow correctly, without having to draw it behind the
|
||
# // window. These will also remove client-side shadows if the window
|
||
# // draws any.
|
||
# //
|
||
# // draw-behind-window true
|
||
|
||
# // You can change how shadows look. The values below are in logical
|
||
# // pixels and match the CSS box-shadow properties.
|
||
|
||
# // Softness controls the shadow blur radius.
|
||
# softness 30
|
||
|
||
# // Spread expands the shadow.
|
||
# spread 5
|
||
|
||
# // Offset moves the shadow relative to the window.
|
||
# offset x=0 y=5
|
||
|
||
# // You can also change the shadow color and opacity.
|
||
# color "#0007"
|
||
# }
|
||
|
||
# // Struts shrink the area occupied by windows, similarly to layer-shell panels.
|
||
# // You can think of them as a kind of outer gaps. They are set in logical pixels.
|
||
# // Left and right struts will cause the next window to the side to always be visible.
|
||
# // Top and bottom struts will simply add outer gaps in addition to the area occupied by
|
||
# // layer-shell panels and regular gaps.
|
||
# struts {
|
||
# // left 64
|
||
# // right 64
|
||
# // top 64
|
||
# // bottom 64
|
||
# }
|
||
};
|
||
|
||
# Uncomment this line to ask the clients to omit their client-side decorations if possible.
|
||
# If the client will specifically ask for CSD, the request will be honored.
|
||
# Additionally, clients will be informed that they are tiled, removing some client-side rounded corners.
|
||
# This option will also fix border/focus ring drawing behind some semitransparent windows.
|
||
# After enabling or disabling this, you need to restart the apps for this to take effect.
|
||
# prefer-no-csd = true;
|
||
|
||
# // You can change the path where screenshots are saved.
|
||
# // A ~ at the front will be expanded to the home directory.
|
||
# // The path is formatted with strftime(3) to give you the screenshot date and time.
|
||
screenshot-path = "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png";
|
||
|
||
# // You can also set this to null to disable saving screenshots to disk.
|
||
# // screenshot-path null
|
||
|
||
# Animation settings.
|
||
# The wiki explains how to configure individual animations:
|
||
# https://github.com/YaLTeR/niri/wiki/Configuration:-Animations
|
||
# animations {
|
||
# // Uncomment to turn off all animations.
|
||
# // off
|
||
|
||
# // Slow down all animations by this factor. Values below 1 speed them up instead.
|
||
# // slowdown 3.0
|
||
# }
|
||
|
||
layer-rules = [
|
||
{
|
||
matches = [{namespace = "^quickshell-wallpaper$";}];
|
||
}
|
||
{
|
||
matches = [{namespace = "^quickshell-overview$";}];
|
||
place-within-backdrop = true;
|
||
}
|
||
];
|
||
|
||
# Window rules let you adjust behavior for individual windows.
|
||
# Find more information on the wiki:
|
||
# https://github.com/YaLTeR/niri/wiki/Configuration:-Window-Rules
|
||
|
||
window-rules = [
|
||
{
|
||
clip-to-geometry = true;
|
||
geometry-corner-radius = let
|
||
r = 10.0;
|
||
in {
|
||
bottom-left = r;
|
||
bottom-right = r;
|
||
top-left = r;
|
||
top-right = r;
|
||
};
|
||
}
|
||
|
||
# Open the Firefox picture-in-picture player as floating by default.
|
||
{
|
||
matches = [
|
||
{
|
||
app-id = "firefox$";
|
||
title = "^Picture-in-Picture$";
|
||
}
|
||
];
|
||
open-floating = true;
|
||
}
|
||
];
|
||
|
||
# // Work around WezTerm's initial configure bug
|
||
# // by setting an empty default-column-width.
|
||
# window-rule {
|
||
# // This regular expression is intentionally made as specific as possible,
|
||
# // since this is the default config, and we want no false positives.
|
||
# // You can get away with just app-id="wezterm" if you want.
|
||
# match app-id=r#"^org\.wezfurlong\.wezterm$"#
|
||
# default-column-width {}
|
||
# }
|
||
|
||
# // Example: block out two password managers from screen capture.
|
||
# // (This example rule is commented out with a "/-" in front.)
|
||
# /-window-rule {
|
||
# match app-id=r#"^org\.keepassxc\.KeePassXC$"#
|
||
# match app-id=r#"^org\.gnome\.World\.Secrets$"#
|
||
|
||
# block-out-from "screen-capture"
|
||
|
||
# // Use this instead if you want them visible on third-party screenshot tools.
|
||
# // block-out-from "screencast"
|
||
# }
|
||
|
||
# Example: enable rounded corners for all windows.
|
||
# (This example rule is commented out with a "/-" in front.)
|
||
# /-window-rule {
|
||
# geometry-corner-radius 12
|
||
# clip-to-geometry true
|
||
# }
|
||
|
||
outputs = {
|
||
"DP-2" = {
|
||
# variable-refresh-rate = true;
|
||
};
|
||
"eDP-1".scale = 1.0;
|
||
};
|
||
|
||
binds = with config.lib.niri.actions; {
|
||
# Keys consist of modifiers separated by + signs, followed by an XKB key name
|
||
# in the end. To find an XKB name for a particular key, you may use a program
|
||
# like wev.
|
||
#
|
||
# "Mod" is a special modifier equal to Super when running on a TTY, and to Alt
|
||
# when running as a winit window.
|
||
#
|
||
# Most actions that you can bind here can also be invoked programmatically with
|
||
# `niri msg action do-something`.
|
||
|
||
# Mod-Shift-/, which is usually the same as Mod-?,
|
||
# shows a list of important hotkeys.
|
||
"Mod+Shift+Slash".action = show-hotkey-overlay;
|
||
|
||
# Suggested binds for running programs: terminal, app launcher, screen locker.
|
||
"Mod+T" = {
|
||
hotkey-overlay.title = "Open a Terminal: ghostty";
|
||
action = spawn "ghostty";
|
||
};
|
||
# "Mod+Space" = {
|
||
# hotkey-overlay.title = "Application launcher";
|
||
# action = spawn ["noctalia-shell" "ipc" "call" "launcher" "toggle"];
|
||
# };
|
||
|
||
# "XF86AudioRaiseVolume" = {
|
||
# allow-when-locked = true;
|
||
# action = spawn ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1+"];
|
||
# };
|
||
# "XF86AudioLowerVolume" = {
|
||
# allow-when-locked = true;
|
||
# action = spawn ["wpctl" "set-volume" "@DEFAULT_AUDIO_SINK@" "0.1-"];
|
||
# };
|
||
# "XF86AudioMute" = {
|
||
# allow-when-locked = true;
|
||
# action = spawn ["wpctl" "set-mute" "@DEFAULT_AUDIO_SINK@" "toggle"];
|
||
# };
|
||
# XF86AudioMicMute = {
|
||
# allow-when-locked = true;
|
||
# action = spawn ["wpctl" "set-mute" "@DEFAULT_AUDIO_SOURCE@" "toggle"];
|
||
# };
|
||
|
||
# Open/close the Overview: a zoomed-out view of workspaces and windows.
|
||
# You can also move the mouse into the top-left hot corner,
|
||
# or do a four-finger swipe up on a touchpad.
|
||
"Mod+O" = {
|
||
repeat = false;
|
||
action = toggle-overview;
|
||
};
|
||
|
||
"Mod+Q".action = close-window;
|
||
|
||
"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+Ctrl+Left".action = move-column-left;
|
||
"Mod+Ctrl+Down".action = move-window-down;
|
||
"Mod+Ctrl+Up".action = move-window-up;
|
||
"Mod+Ctrl+Right".action = move-column-right;
|
||
"Mod+Ctrl+H".action = move-column-left;
|
||
"Mod+Ctrl+J".action = move-window-down;
|
||
"Mod+Ctrl+K".action = move-window-up;
|
||
"Mod+Ctrl+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" = {
|
||
hotkey-overlay.title = "Switch workspace down";
|
||
action = focus-workspace-down;
|
||
};
|
||
"Mod+Page_Up" = {
|
||
hotkey-overlay.title = "Switch workspace up";
|
||
action = focus-workspace-up;
|
||
};
|
||
"Mod+U".action = focus-workspace-down;
|
||
"Mod+I".action = focus-workspace-up;
|
||
"Mod+Ctrl+Page_Down" = {
|
||
hotkey-overlay.title = "Move column up a workspace";
|
||
action = move-column-to-workspace-down;
|
||
};
|
||
"Mod+Ctrl+Page_Up" = {
|
||
hotkey-overlay.title = "Move column down a workspace";
|
||
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 { move-column-to-workspace-down; }
|
||
# Mod+Ctrl+WheelScrollUp cooldown-ms=150 { 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+Ctrl+1".action = move-column-to-workspace 1;
|
||
# "Mod+Ctrl+2".action = move-column-to-workspace 2;
|
||
# "Mod+Ctrl+3".action = move-column-to-workspace 3;
|
||
# "Mod+Ctrl+4".action = move-column-to-workspace 4;
|
||
# "Mod+Ctrl+5".action = move-column-to-workspace 5;
|
||
# "Mod+Ctrl+6".action = move-column-to-workspace 6;
|
||
# "Mod+Ctrl+7".action = move-column-to-workspace 7;
|
||
# "Mod+Ctrl+8".action = move-column-to-workspace 8;
|
||
# "Mod+Ctrl+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; }
|
||
|
||
# The following binds move the focused window in and out of a column.
|
||
# If the window is alone, they will consume it into the nearby column to the side.
|
||
# If the window is already in a column, they will expel it out.
|
||
"Mod+BracketLeft".action = consume-or-expel-window-left;
|
||
"Mod+BracketRight".action = consume-or-expel-window-right;
|
||
|
||
# Consume one window from the right to the bottom of the focused column.
|
||
"Mod+Comma".action = lib.mkForce consume-window-into-column;
|
||
# Expel the bottom window from the focused column to the right.
|
||
"Mod+Period".action = expel-window-from-column;
|
||
|
||
"Mod+R".action = switch-preset-column-width;
|
||
"Mod+Shift+R".action = switch-preset-window-height;
|
||
"Mod+Ctrl+R".action = reset-window-height;
|
||
"Mod+F".action = maximize-column;
|
||
"Mod+Shift+F".action = fullscreen-window;
|
||
|
||
# Expand the focused column to space not taken up by other fully visible columns.
|
||
# Makes the column "fill the rest of the space".
|
||
"Mod+Ctrl+F".action = expand-column-to-available-width;
|
||
|
||
"Mod+C".action = center-column;
|
||
|
||
# Center all fully visible columns on screen.
|
||
"Mod+Ctrl+C".action = center-visible-columns;
|
||
|
||
# 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%";
|
||
|
||
"Print".action.screenshot = {};
|
||
"Ctrl+Print".action.screenshot-screen = {};
|
||
"Alt+Print" .action.screenshot-window = {};
|
||
|
||
# // Finer height adjustments when in column with other windows.
|
||
# Mod+Shift+Minus { set-window-height "-10%"; }
|
||
# Mod+Shift+Equal { set-window-height "+10%"; }
|
||
|
||
# // Move the focused window between the floating and the tiling layout.
|
||
"Mod+V".action = lib.mkForce toggle-window-floating;
|
||
"Mod+Shift+V".action = switch-focus-between-floating-and-tiling;
|
||
|
||
# Toggle tabbed column display mode.
|
||
# Windows in this column will appear as vertical tabs,
|
||
# rather than stacked on top of each other.
|
||
"Mod+W".action = toggle-column-tabbed-display;
|
||
|
||
# // 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"; }
|
||
|
||
# Applications such as remote-desktop clients and software KVM switches may
|
||
# request that niri stops processing the keyboard shortcuts defined here
|
||
# so they may, for example, forward the key presses as-is to a remote machine.
|
||
# It's a good idea to bind an escape hatch to toggle the inhibitor,
|
||
# so a buggy application can't hold your session hostage.
|
||
#
|
||
# The allow-inhibiting=false property can be applied to other binds as well,
|
||
# which ensures niri always processes them, even when an inhibitor is active.
|
||
# Mod+Escape allow-inhibiting=false { toggle-keyboard-shortcuts-inhibit; }
|
||
|
||
# The quit action will show a confirmation dialog to avoid accidental exits.
|
||
"Mod+Shift+E".action = quit;
|
||
# Ctrl+Alt+Delete { 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;
|
||
};
|
||
};
|
||
}
|