summaryrefslogtreecommitdiff
path: root/common/modules/window_managers
diff options
context:
space:
mode:
authorbeeb5k <beebeeb5k@gmail.com>2026-06-06 15:59:26 +0530
committerbeeb5k <beebeeb5k@gmail.com>2026-06-06 15:59:26 +0530
commit54471f0faf2697e55e01ed4a276de0cd921a7c30 (patch)
treedc661f9d2c1c2c623072f81fc6b97f9c2fb6c1aa /common/modules/window_managers
parent2709c6aa130f5eea8414573fa1a7c8a18607ad8d (diff)
Add noctalia niri and way to switch between my config and noxtalia easily
Diffstat (limited to 'common/modules/window_managers')
-rw-r--r--common/modules/window_managers/default.nix55
-rw-r--r--common/modules/window_managers/mango/default.nix94
-rw-r--r--common/modules/window_managers/niri/default.nix388
-rw-r--r--common/modules/window_managers/noctalia.nix29
4 files changed, 520 insertions, 46 deletions
diff --git a/common/modules/window_managers/default.nix b/common/modules/window_managers/default.nix
index 1c66f63..7967292 100644
--- a/common/modules/window_managers/default.nix
+++ b/common/modules/window_managers/default.nix
@@ -20,33 +20,52 @@ in
{
imports = [
(import ./mango args)
+ (import ./niri args)
+ (import ./noctalia.nix args)
];
options.${moduleNameSpace}.windowManagers = {
mango.enable = lib.mkEnableOption "Enable mangowm";
+ niri.enable = lib.mkEnableOption "Enable niri";
+ noctalia = lib.mkEnableOption "Enable noctalia shell";
+ beeConfig = {
+ enable = lib.mkEnableOption "Enable stuff from my config";
+ waybar = lib.mkOption {
+ type = lib.types.bool;
+ default = config.beeMods.windowManagers.beeConfig.enable || false;
+ description = "Enable waybar";
+ };
+ };
eyeCandy = {
- animations.enable = lib.mkEnableOption "Uiiiiiiiiiii";
+ enable = lib.mkEnableOption "Enable Eyecandy ex (animations, windowblurs, effects)";
+ animations = {
+ enable = lib.mkOption {
+ type = lib.types.bool;
+ default = config.beeMods.windowManagers.eyeCandy.enable || false;
+ description = "Uiiiiiiiiiii";
+ };
+ };
window = {
blur = {
enable = lib.mkEnableOption "Enable window blur";
passes = lib.mkOption {
type = lib.types.int;
- default = 1;
+ default = 3;
};
radius = lib.mkOption {
type = lib.types.int;
- default = 10;
+ default = 12;
};
};
shadows.enable = lib.mkEnableOption "Enable window drop shadows";
borderRadius = lib.mkOption {
type = lib.types.int;
- default = 0;
+ default = 12;
description = "Border radius";
};
opacity = lib.mkOption {
type = lib.types.number;
- default = 1.0;
+ default = 0.87;
description = "Window opacity";
};
};
@@ -55,16 +74,22 @@ in
config = (
if homeManager then
{
- home.packages = with pkgs; [
- wl-clipboard
- cliphist
- brightnessctl
- playerctl
- matugen
- awww
- waybar
- scripts.dotfiles
- ];
+ home.packages =
+ with pkgs;
+ [
+ wl-clipboard
+ brightnessctl
+ playerctl
+ fyi
+ gapless
+ scripts.dotfiles
+ ]
+ ++ lib.optionals config.beeMods.windowManagers.beeConfig.enable [
+ waybar
+ matugen
+ awww
+ cliphist
+ ];
}
else
{
diff --git a/common/modules/window_managers/mango/default.nix b/common/modules/window_managers/mango/default.nix
index 94c83c5..3d70b82 100644
--- a/common/modules/window_managers/mango/default.nix
+++ b/common/modules/window_managers/mango/default.nix
@@ -13,6 +13,7 @@
let
cfg = config.${moduleNameSpace}.windowManagers;
scripts = import ../scripts.nix { inherit pkgs config; };
+ eyecandy = cfg.eyeCandy.enable;
in
{
imports =
@@ -26,21 +27,25 @@ in
systemd.enable = true;
systemd.variables = [ "--all" ];
extraConfig = ''
- ${lib.optionalString (config.beeMods.matugen.enable) ''
+ ${lib.optionalString (config.beeMods.matugen.enable && cfg.beeConfig.enable && !cfg.noctalia) ''
source = ~/.config/mango/colors.conf
''}
- blur=${if cfg.eyeCandy.window.blur.enable then "1" else "0"}
+ ${lib.optionalString (!cfg.beeConfig.enable && cfg.noctalia) ''
+ source = ~/.config/mango/noctalia.conf
+ ''}
+
+ blur=${if eyecandy && cfg.eyeCandy.window.blur.enable then "1" else "0"}
blur_layer=0
blur_optimized=1
- blur_params_num_passes = ${toString cfg.eyeCandy.window.blur.passes}
- blur_params_radius = ${toString cfg.eyeCandy.window.blur.radius}
+ blur_params_num_passes = ${if eyecandy then toString cfg.eyeCandy.window.blur.passes else "0"}
+ blur_params_radius = ${if eyecandy then toString cfg.eyeCandy.window.blur.radius else "0"}
blur_params_noise = 0.02
blur_params_brightness = 0.9
blur_params_contrast = 0.9
blur_params_saturation = 1.1
- shadows=${if cfg.eyeCandy.window.shadows.enable then "1" else "0"}
+ shadows=${if eyecandy && cfg.eyeCandy.window.shadows.enable then "1" else "0"}
layer_shadows = 0
shadow_only_floating = 1
shadows_size = 10
@@ -48,11 +53,11 @@ in
shadows_position_x = 0
shadows_position_y = 0
- border_radius=${toString cfg.eyeCandy.window.borderRadius}
+ border_radius=${if eyecandy then toString cfg.eyeCandy.window.borderRadius else "0"}
no_radius_when_single=0
- focused_opacity=${toString cfg.eyeCandy.window.opacity}
- unfocused_opacity=${toString cfg.eyeCandy.window.opacity}
+ focused_opacity=${if eyecandy then toString cfg.eyeCandy.window.opacity else "1.0"}
+ unfocused_opacity=${if eyecandy then toString cfg.eyeCandy.window.opacity else "1.0"}
# Scroller configuration
scroller_structs=15
@@ -122,16 +127,52 @@ in
borderpx=2
#Keymaps
+ # beeConfig keymaps
+ ${lib.optionalString (config.beeMods.matugen.enable && cfg.beeConfig.enable && !cfg.noctalia) ''
+ bind=SUPER,y,spawn,${scripts.dostuff} wall
+ bind=SUPER,a,spawn,rofi -show drun
+ bind=SUPER,c,spawn,sh -c 'fyi "Clock" "$(date)"'
+ bind=SUPER,comma,spawn,${scripts.dostuff} settings
+
+ bind=NONE,XF86AudioRaiseVolume,spawn,${scripts.volume} up
+ bind=NONE,XF86AudioLowerVolume,spawn,${scripts.volume} down
+ bind=NONE,XF86AudioMute,spawn,${scripts.volume} toggle
+
+ bind=NONE,XF86AudioMicMute,spawn,${scripts.micToggle}
+
+ bind=NONE,XF86MonBrightnessUp,spawn,${scripts.brightness} up
+ bind=NONE,XF86MonBrightnessDown,spawn,${scripts.brightness} down
+
+ bind=NONE,Print,spawn,${scripts.screenshot} full
+ bind=SUPER,Print,spawn,${scripts.screenshot} selection
+ bind=SUPER+SHIFT,Print,spawn,${scripts.screenshot} window
+ ''}
+
+ ${lib.optionalString (!cfg.beeConfig.enable && cfg.noctalia) ''
+ bind=SUPER,y,spawn,noctalia msg panel-toggle wallpaper
+ bind=SUPER,a,spawn,noctalia msg panel-toggle launcher
+ bind=SUPER,c,spawn,sh -c 'fyi "Clock" "$(date)"'
+ bind=SUPER,v,spawn,noctalia msg panel-toggle clipboard
+ bind=SUPER,comma,spawn,noctalia msg settings-toggle
+
+ bind=NONE,XF86AudioRaiseVolume,spawn,noctalia msg volume-up
+ bind=NONE,XF86AudioLowerVolume,spawn,noctalia msg volume-down
+ bind=NONE,XF86AudioMute,spawn,noctalia msg volume-mute
+
+ bind=NONE,XF86AudioMicMute,spawn,noctalia msg mic-mute
+
+ bind=NONE,XF86MonBrightnessUp,spawn,noctalia msg brightness-up
+ bind=NONE,XF86MonBrightnessDown,spawn,noctalia msg brightness-down
+
+ bind=NONE,Print,spawn,noctalia msg screenshot-fullscreen
+ ''}
+
bind=SUPER,r,reload_config
bind=SUPER,Return,spawn,${config.beeMods.terminal.default}
- bind=SUPER,y,spawn,${scripts.dostuff} wall
- bind=SUPER,a,spawn,rofi -show drun
- bind=SUPER,c,spawn,sh -c 'dunstify "$(date)"'
- bind=SUPER,comma,spawn,${scripts.dostuff} settings
bind=SUPER,F12,spawn,gnome-calculator
bind=SUPER,b,spawn,librewolf
- bind=SUPER,e,spawn,pcmanfm
+ bind=SUPER,e,spawn,nautilus
bind=SUPER,m,quit
bind=SUPER,q,killclient,
@@ -141,9 +182,6 @@ in
bind=SUPER,k,focusdir,up
bind=SUPER,j,focusdir,down
- bind=NONE,Print,spawn,${scripts.screenshot} full
- bind=SUPER,Print,spawn,${scripts.screenshot} selection
- bind=SUPER+SHIFT,Print,spawn,${scripts.screenshot} window
bind=SUPER+SHIFT,k,exchange_client,up
bind=SUPER+SHIFT,j,exchange_client,down
@@ -199,19 +237,12 @@ in
bind=ALT,h,resizewin,-50,+0
bind=ALT,l,resizewin,+50,+0
- bind=NONE,XF86AudioRaiseVolume,spawn,${scripts.volume} up
- bind=NONE,XF86AudioLowerVolume,spawn,${scripts.volume} down
- bind=NONE,XF86AudioMute,spawn,${scripts.volume} toggle
bind=NONE,XF86AudioPlay,spawn,playerctl play-pause
bind=NONE,XF86AudioNext,spawn,playerctl next
bind=NONE,XF86AudioPrev,spawn,playerctl previous
bind=NONE,XF86AudioStop,spawn,playerctl stop
- bind=NONE,XF86AudioMicMute,spawn,${scripts.micToggle}
-
- bind=NONE,XF86MonBrightnessUp,spawn,${scripts.brightness} up
- bind=NONE,XF86MonBrightnessDown,spawn,${scripts.brightness} down
mousebind=SUPER,btn_left,moveresize,curmove
mousebind=NONE,btn_middle,togglemaximizescreen,0
@@ -242,8 +273,6 @@ in
tagrule=id:8,layout_name:tile
tagrule=id:9,layout_name:tile
- # env=XCURSOR_THEME, Bibata-Modern-Ice
- # env=XCURSOR_SIZE, 24
env=ELECTRON_OZONE_PLATFORM_HINT,auto
env=QT_QPA_PLATFORMTHEME,qt6ct
env=QT_QPA_PLATFORM,wayland
@@ -251,10 +280,9 @@ in
env=XDG_SESSION_TYPE,wayland
env=GDK_BACKEND,wayland,x11
env=GDK_SCALE,1
- # env=XCURSOR_PATH,/usr/share/icons
env=NVD_BACKEND,direct
- animations=0
+ animations=${if eyecandy && cfg.eyeCandy.animations.enable then "1" else "0"}
layer_animations=0
animation_type_open=slide
animation_type_close=zoom
@@ -279,11 +307,15 @@ in
animation_curve_opafadein=0.46,1.0,0.29,1
'';
autostart_sh = ''
- wl-paste --type text --watch cliphist store &
gnome-keyring-daemon --start --components=secrets,ssh,pkcs11 &
- awww-daemon &
- waybar &
- dunst &
+ ${lib.optionalString cfg.beeConfig.enable ''
+ wl-paste --type text --watch cliphist store &
+ awww-daemon &
+ dunst &
+ ''}
+ ${lib.optionalString cfg.beeConfig.waybar ''
+ waybar &
+ ''}
'';
};
}
diff --git a/common/modules/window_managers/niri/default.nix b/common/modules/window_managers/niri/default.nix
new file mode 100644
index 0000000..0306256
--- /dev/null
+++ b/common/modules/window_managers/niri/default.nix
@@ -0,0 +1,388 @@
+{
+ homeManager,
+ inputs,
+ moduleNameSpace,
+ ...
+}:
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.${moduleNameSpace}.windowManagers;
+ scripts = import ../scripts.nix { inherit pkgs config; };
+ eyecandy = cfg.eyeCandy.enable;
+in
+{
+ config = lib.mkIf cfg.niri.enable (
+ if homeManager then
+ {
+ xdg.configFile."niri/config.kdl".text = ''
+ include optional=true "./noctalia.kdl"
+ workspace "1"
+ workspace "2"
+ workspace "3"
+ workspace "4"
+
+ input {
+ keyboard {
+ xkb {
+ layout "us"
+ }
+
+ repeat-delay 300
+ repeat-rate 50
+ }
+
+ touchpad {
+ tap
+ natural-scroll
+ // accel-speed 0.2
+ // accel-profile "flat"
+ // scroll-method "two-finger"
+ // disabled-on-external-mouse
+ }
+
+ warp-mouse-to-focus
+ focus-follows-mouse max-scroll-amount="0%"
+ }
+
+ output "eDP-1" {
+ mode "1920x1080@120.030"
+ scale 1
+ transform "normal"
+ position x=1280 y=0
+ }
+
+ blur {
+ passes ${if eyecandy then toString cfg.eyeCandy.window.blur.passes else "0"}
+ offset ${if eyecandy then toString cfg.eyeCandy.window.blur.radius else "0"}
+ noise 0.03
+ saturation 1.0
+ }
+
+ layout {
+ gaps 4
+ center-focused-column "never"
+ background-color "transparent"
+
+ preset-column-widths {
+ proportion 0.33333
+ proportion 0.5
+ proportion 0.66667
+ }
+
+ default-column-width { proportion 0.5; }
+
+ preset-window-heights {
+ proportion 0.33333
+ proportion 0.5
+ proportion 0.66667
+ }
+
+ focus-ring {
+ off
+ }
+
+ border {
+ on
+ width 2
+ }
+
+ shadow {
+ off
+ // on
+ softness 30
+ spread 5
+ offset x=0 y=5
+ draw-behind-window true
+ }
+
+ tab-indicator {
+ on
+ hide-when-single-tab
+ place-within-column
+ gap 5
+ width 4
+ length total-proportion=1.0
+ position "right"
+ gaps-between-tabs 2
+ corner-radius 8
+ }
+
+ insert-hint {
+ on
+ }
+ }
+
+ hotkey-overlay {
+ skip-at-startup
+ }
+
+ prefer-no-csd
+ // screenshot-path "~/Pictures/Screenshots/Screenshot from %Y-%m-%d %H-%M-%S.png"
+ screenshot-path null
+
+ animations {
+ on
+ // Slow down all animations by this factor. Values below 1 speed them up instead.
+ // slowdown 3.0
+ }
+
+ gestures {
+ hot-corners {
+ off
+ }
+ }
+
+ window-rule {
+ match title="^Kdenlive$"
+ open-floating true
+ open-on-workspace "3"
+ }
+
+ window-rule {
+ match app-id=r#"^(firefox|librewolf)$"#
+ open-on-workspace "1"
+ }
+
+ window-rule {
+ match app-id=r#"^(foot|alacritty|ghotty|kitty)$"#
+ open-on-workspace "2"
+ }
+
+ window-rule {
+ match app-id=r#"^(vesktop|mpv|.*Kdenlive.*)$"#
+ open-on-workspace "3"
+ }
+
+ binds {
+ Mod+Shift+Slash { show-hotkey-overlay; }
+
+ Mod+Return hotkey-overlay-title="Open a Terminal: ${config.beeMods.terminal.default}" { spawn "${config.beeMods.terminal.default}"; }
+
+ ${lib.optionalString (config.beeMods.matugen.enable && cfg.beeConfig.enable && !cfg.noctalia) ''
+ Mod+A hotkey-overlay-title="Run an Application" { spawn-sh "rofi -show drun"; }
+ Mod+Y hotkey-overlay-title="Open wallpaper picker" { spawn-sh "${scripts.dostuff} wall"; }
+ Mod+Comma hotkey-overlay-title="Open Noctalia settings" { spawn-sh "${scripts.dostuff} settings"; }
+
+ XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "${scripts.volume} up"; }
+ XF86AudioLowerVolume allow-when-locked=true { spawn-sh "${scripts.volume} down"; }
+ XF86AudioMute allow-when-locked=true { spawn-sh "${scripts.volume} toggle"; }
+ XF86AudioMicMute allow-when-locked=true { spawn-sh "${scripts.micToggle}"; }
+
+ XF86MonBrightnessUp allow-when-locked=true { spawn-sh "${scripts.volume} up 0.02"; }
+ XF86MonBrightnessDown allow-when-locked=true { spawn-sh "{scripts.volume} down 0.02"; }
+
+ XF86MonBrightnessUp allow-when-locked=true { spawn-sh "${scripts.brightness} up"; }
+ XF86MonBrightnessDown allow-when-locked=true { spawn-sh "${scripts.brightness} down"; }
+ ''}
+
+ ${lib.optionalString (!cfg.beeConfig.enable && cfg.noctalia) ''
+ Mod+A hotkey-overlay-title="Run an Application" { spawn-sh "noctalia msg panel-toggle launcher"; }
+ Mod+Y hotkey-overlay-title="Open wallpaper picker" { spawn-sh "noctalia msg panel-toggle wallpaper"; }
+ Mod+V hotkey-overlay-title="Open clipboard panel" { spawn-sh "noctalia msg panel-toggle clipboard"; }
+ Mod+Comma hotkey-overlay-title="Open Noctalia settings" { spawn-sh "noctalia msg settings-toggle"; }
+ Mod+S { spawn-sh "noctalia msg panel-toggle control-center"; }
+
+
+ XF86AudioRaiseVolume allow-when-locked=true { spawn-sh "noctalia msg volume-up"; }
+ XF86AudioLowerVolume allow-when-locked=true { spawn-sh "noctalia msg volume-down"; }
+ XF86AudioMute allow-when-locked=true { spawn-sh "noctalia msg volume-mute"; }
+ XF86AudioMicMute allow-when-locked=true { spawn-sh "noctalia msg mic-mute"; }
+
+ Mod+TouchpadScrollDown { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02+"; }
+ Mod+TouchpadScrollUp { spawn-sh "wpctl set-volume @DEFAULT_AUDIO_SINK@ 0.02-"; }
+
+ XF86MonBrightnessUp allow-when-locked=true { spawn-sh "noctalia msg volume-up 0.02"; }
+ XF86MonBrightnessDown allow-when-locked=true { spawn-sh "noctalia msg volume-down 0.02"; }
+ ''}
+
+ Mod+Shift+C hotkey-overlay-title="Get current dat and time as noticiation" { spawn-sh "fyi Clock $(date)"; }
+ XF86AudioPlay allow-when-locked=true { spawn-sh "playerctl play-pause"; }
+ XF86AudioStop allow-when-locked=true { spawn-sh "playerctl stop"; }
+ XF86AudioPrev allow-when-locked=true { spawn-sh "playerctl previous"; }
+ XF86AudioNext allow-when-locked=true { spawn-sh "playerctl next"; }
+
+
+ Mod+O repeat=false { toggle-overview; }
+
+ Mod+Q repeat=false { close-window; }
+
+ Mod+Left { focus-column-left; }
+ Mod+Down { focus-window-down; }
+ Mod+Up { focus-window-up; }
+ Mod+Right { focus-column-right; }
+ Mod+H { focus-column-left; }
+ Mod+J { focus-window-down; }
+ Mod+K { focus-window-up; }
+ Mod+L { focus-column-right; }
+
+ Mod+Ctrl+Left { move-column-left; }
+ Mod+Ctrl+Down { move-window-down; }
+ Mod+Ctrl+Up { move-window-up; }
+ Mod+Ctrl+Right { move-column-right; }
+ Mod+Ctrl+H { move-column-left; }
+ Mod+Ctrl+J { move-window-down; }
+ Mod+Ctrl+K { move-window-up; }
+ Mod+Ctrl+L { 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 { focus-column-first; }
+ Mod+End { focus-column-last; }
+ Mod+Ctrl+Home { move-column-to-first; }
+ Mod+Ctrl+End { move-column-to-last; }
+
+ Mod+Shift+Left { focus-monitor-left; }
+ Mod+Shift+Down { focus-monitor-down; }
+ Mod+Shift+Up { focus-monitor-up; }
+ Mod+Shift+Right { focus-monitor-right; }
+ Mod+Shift+H { focus-monitor-left; }
+ Mod+Shift+J { focus-monitor-down; }
+ Mod+Shift+K { focus-monitor-up; }
+ Mod+Shift+L { focus-monitor-right; }
+
+ Mod+Shift+Ctrl+Left { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+Down { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+Up { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+Right { move-column-to-monitor-right; }
+ Mod+Shift+Ctrl+H { move-column-to-monitor-left; }
+ Mod+Shift+Ctrl+J { move-column-to-monitor-down; }
+ Mod+Shift+Ctrl+K { move-column-to-monitor-up; }
+ Mod+Shift+Ctrl+L { move-column-to-monitor-right; }
+
+ Mod+Page_Down { focus-workspace-down; }
+ Mod+Page_Up { focus-workspace-up; }
+ Mod+U { focus-workspace-down; }
+ Mod+I { focus-workspace-up; }
+ Mod+Ctrl+Page_Down { move-column-to-workspace-down; }
+ Mod+Ctrl+Page_Up { move-column-to-workspace-up; }
+ Mod+Ctrl+U { move-column-to-workspace-down; }
+ Mod+Ctrl+I { move-column-to-workspace-up; }
+
+ Mod+Shift+Page_Down { move-workspace-down; }
+ Mod+Shift+Page_Up { move-workspace-up; }
+ Mod+Shift+U { move-workspace-down; }
+ Mod+Shift+I { move-workspace-up; }
+
+ Mod+WheelScrollRight { focus-column-right; }
+ Mod+WheelScrollLeft { focus-column-left; }
+ Mod+Ctrl+WheelScrollRight { move-column-right; }
+ Mod+Ctrl+WheelScrollLeft { move-column-left; }
+
+ // Usually scrolling up and down with Shift in applications results in
+ // horizontal scrolling; these binds replicate that.
+ Mod+Shift+WheelScrollDown { focus-column-right; }
+ Mod+Shift+WheelScrollUp { focus-column-left; }
+ Mod+Ctrl+Shift+WheelScrollDown { move-column-right; }
+ Mod+Ctrl+Shift+WheelScrollUp { move-column-left; }
+
+
+ Mod+1 { focus-workspace 1; }
+ Mod+2 { focus-workspace 2; }
+ Mod+3 { focus-workspace 3; }
+ Mod+4 { focus-workspace 4; }
+ Mod+5 { focus-workspace 5; }
+ Mod+6 { focus-workspace 6; }
+ Mod+7 { focus-workspace 7; }
+ Mod+8 { focus-workspace 8; }
+ Mod+9 { focus-workspace 9; }
+ Mod+Shift+1 { move-column-to-workspace 1; }
+ Mod+Shift+2 { move-column-to-workspace 2; }
+ Mod+Shift+3 { move-column-to-workspace 3; }
+ Mod+Shift+4 { move-column-to-workspace 4; }
+ Mod+Shift+5 { move-column-to-workspace 5; }
+ Mod+Shift+6 { move-column-to-workspace 6; }
+ Mod+Shift+7 { move-column-to-workspace 7; }
+ Mod+Shift+8 { move-column-to-workspace 8; }
+ Mod+Shift+9 { move-column-to-workspace 9; }
+
+ Mod+BracketLeft { consume-or-expel-window-left; }
+ Mod+BracketRight { consume-or-expel-window-right; }
+
+ Mod+Shift+BracketLeft { consume-window-into-column; }
+ Mod+Shift+BracketRight { expel-window-from-column; }
+
+ Mod+R { switch-preset-column-width; }
+ // Cycling through the presets in reverse order is also possible.
+ // Mod+R { switch-preset-column-width-back; }
+ Mod+Shift+R { switch-preset-window-height; }
+ Mod+Ctrl+R { reset-window-height; }
+ Mod+D { maximize-column; }
+ Mod+F { 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 { expand-column-to-available-width; }
+
+ Mod+C { center-column; }
+
+ // Center all fully visible columns on screen.
+ Mod+Ctrl+C { 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 { set-column-width "-10%"; }
+ Mod+Equal { set-column-width "+10%"; }
+
+ // Finer height adjustments when in column with other windows.
+ Mod+Shift+Minus { set-window-height "-10%"; }
+ Mod+Shift+Equal { set-window-height "+10%"; }
+
+ Mod+Space { toggle-window-floating; }
+ Mod+Shift+Space { switch-focus-between-floating-and-tiling; }
+
+ Mod+W { 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+Shift+N { switch-layout "next"; }
+ Mod+Shift+P { switch-layout "prev"; }
+
+ Print { screenshot-screen; }
+ Mod+Print { screenshot; }
+ Mod+Shift+Print { screenshot-window; }
+
+ // 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; }
+
+ Mod+Shift+E { quit; }
+ Ctrl+Alt+Delete { quit; }
+
+ // Mod+Shift+P { power-off-monitors; }
+ }
+ '';
+ }
+ else
+ {
+ programs.niri = {
+ enable = true;
+ useNautilus = true;
+ };
+ }
+ );
+}
diff --git a/common/modules/window_managers/noctalia.nix b/common/modules/window_managers/noctalia.nix
new file mode 100644
index 0000000..cc4c88c
--- /dev/null
+++ b/common/modules/window_managers/noctalia.nix
@@ -0,0 +1,29 @@
+{
+ homeManager,
+ inputs,
+ moduleNameSpace,
+ ...
+}:
+{
+ config,
+ lib,
+ pkgs,
+ ...
+}:
+let
+ cfg = config.${moduleNameSpace}.windowManagers;
+in
+{
+ imports = lib.optionals homeManager [
+ inputs.noctalia.homeModules.default
+ ];
+
+ config = lib.mkIf cfg.noctalia (
+ lib.optionalAttrs homeManager {
+ programs.noctalia = {
+ enable = true;
+ systemd.enable = true;
+ };
+ }
+ );
+}